| | |
| | | package cc.mrbird.febs.mall.service.impl; |
| | | |
| | | import cc.mrbird.febs.common.enumerates.*; |
| | | import cc.mrbird.febs.common.utils.AppContants; |
| | | import cc.mrbird.febs.common.utils.MallUtils; |
| | | import cc.mrbird.febs.mall.entity.*; |
| | | import cc.mrbird.febs.mall.mapper.*; |
| | | import cc.mrbird.febs.mall.service.*; |
| | | import cc.mrbird.febs.mall.vo.AdminMallMoneyFlowVo; |
| | | import cc.mrbird.febs.mall.vo.AdminTeamEqualsPerkVo; |
| | | import cc.mrbird.febs.rabbit.producter.AgentProducer; |
| | | import cc.mrbird.febs.system.mapper.UserMapper; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.date.DateTime; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.math.MathUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.json.JSONUtil; |
| | |
| | | |
| | | private final DataDictionaryCustomMapper dataDictionaryCustomMapper; |
| | | private final MallMemberMapper memberMapper; |
| | | private final MallAchieveRecordMapper mallAchieveRecordMapper; |
| | | private final MallOrderInfoMapper mallOrderInfoMapper; |
| | | |
| | | private final IApiMallMemberWalletService iApiMallMemberWalletService; |
| | |
| | | private final IApiMallMemberWalletService memberWalletService; |
| | | private final MallMoneyFlowMapper mallMoneyFlowMapper; |
| | | private final MallMqRecordMapper mallMqRecordMapper; |
| | | private final MallGoodsMapper mallGoodsMapper; |
| | | |
| | | private final ICommonService commonService; |
| | | |
| | | private final MallProductBuyRecordMapper mallProductBuyRecordMapper; |
| | | private final MallProductBuyMapper mallProductBuyMapper; |
| | | private final MallProductSellMapper mallProductSellMapper; |
| | | private final MallProductSellRecordMapper mallProductSellRecordMapper; |
| | | private final MallProductNftMapper mallProductNftMapper; |
| | | private final AgentProducer agentProducer; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | if(ObjectUtil.isEmpty(mallOrderInfo)){ |
| | | return; |
| | | } |
| | | if(2 != mallOrderInfo.getStatus()){ |
| | | // if(2 != mallOrderInfo.getStatus()){ |
| | | // return; |
| | | // } |
| | | |
| | | BigDecimal amount = BigDecimal.ZERO; |
| | | List<MallOrderItem> orderItems = this.mallOrderInfoMapper.getMallOrderItemByOrderId(orderId); |
| | | if (CollUtil.isNotEmpty(orderItems)) { |
| | | for (MallOrderItem orderItem : orderItems) { |
| | | MallGoods mallGoods = mallGoodsMapper.selectById(orderItem.getGoodsId()); |
| | | if (mallGoods.getIsNormal() == 2) { |
| | | amount = amount.add( |
| | | new BigDecimal(mallGoods.getPresentPrice()) |
| | | .multiply(new BigDecimal(orderItem.getCnt())) |
| | | .abs() |
| | | .setScale(2,BigDecimal.ROUND_DOWN)); |
| | | } |
| | | } |
| | | } |
| | | amount = amount.subtract(mallOrderInfo.getScoreAmount()); |
| | | if(BigDecimal.ZERO.compareTo(amount) >= 0){ |
| | | return; |
| | | } |
| | | /** |
| | | * 分享补贴 直推消费额10% |
| | | */ |
| | | BigDecimal amount = mallOrderInfo.getAmount().subtract(mallOrderInfo.getScoreAmount()); |
| | | |
| | | Long memberId = mallOrderInfo.getMemberId(); |
| | | MallMember mallMember = memberMapper.selectById(memberId); |
| | | //补贴对象 直属上级 |
| | |
| | | * 从最顶级级别的合伙人开始补贴 |
| | | * 补贴完,把已经补贴的合伙人加入下一个级别 |
| | | */ |
| | | List<MallMember> sevenLevelRecord = getStarRecord(null, MemberLevelEnum.SEVEN_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_SEVEN.getValue()); |
| | | List<MallMember> sixLevelRecord = getStarRecord(sevenLevelRecord, MemberLevelEnum.SIX_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_SIX.getValue()); |
| | | List<MallMember> fifthLevelRecord = getStarRecord(sixLevelRecord, MemberLevelEnum.FIFTH_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_FIVE.getValue()); |
| | | List<MallMember> fourLevelRecord = getStarRecord(fifthLevelRecord, MemberLevelEnum.FOUR_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_FOUR.getValue()); |
| | | List<MallMember> thirdLevelRecord = getStarRecord(fourLevelRecord, MemberLevelEnum.THIRD_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_THREE.getValue()); |
| | | List<MallMember> secondLevelRecord = getStarRecord(thirdLevelRecord, MemberLevelEnum.SECOND_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_TWO.getValue()); |
| | | |
| | | DataDictionaryCustom perkAgentAchieveTotalDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.PERK_AGENT_ACHIEVE_TOTAL.getType(), |
| | | DataDictionaryEnum.PERK_AGENT_ACHIEVE_TOTAL.getCode()); |
| | | BigDecimal perkAgentAchieveTotal = new BigDecimal(perkAgentAchieveTotalDic.getValue()); |
| | | //星级奖励百分比等于每个级别的累计之和 |
| | | List<DataDictionaryCustom> starPerkDics = dataDictionaryCustomMapper.selectDicByType( |
| | | "AGENT_LEVEL_REQUIRE"); |
| | | BigDecimal totalProfitProp = BigDecimal.ZERO; |
| | | if(CollUtil.isNotEmpty(starPerkDics)){ |
| | | for(DataDictionaryCustom starPerkDic : starPerkDics){ |
| | | String starPerkStr = starPerkDic.getValue(); |
| | | AgentInfo agentInfo = JSONObject.parseObject(starPerkStr, AgentInfo.class); |
| | | BigDecimal profitProp = agentInfo.getProfitProp().abs().divide(new BigDecimal(100)); |
| | | String code = starPerkDic.getCode(); |
| | | //存在当前级别的会员,则加上这个比例的补贴 |
| | | List<MallMember> mallMembers = memberMapper.selectByLevel(code); |
| | | if(CollUtil.isNotEmpty(mallMembers)){ |
| | | totalProfitProp = totalProfitProp.add(profitProp); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if(totalProfitProp.compareTo(BigDecimal.ZERO) > 0){ |
| | | BigDecimal perkTotal = amount.multiply(totalProfitProp).setScale(2,BigDecimal.ROUND_DOWN); |
| | | perkAgentAchieveTotal = perkAgentAchieveTotal.add(perkTotal); |
| | | perkAgentAchieveTotalDic.setValue(perkAgentAchieveTotal.toString()); |
| | | dataDictionaryCustomMapper.updateById(perkAgentAchieveTotalDic); |
| | | } |
| | | // List<MallMember> sevenLevelRecord = getStarRecord(null, MemberLevelEnum.SEVEN_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_SEVEN.getValue()); |
| | | // List<MallMember> sixLevelRecord = getStarRecord(sevenLevelRecord, MemberLevelEnum.SIX_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_SIX.getValue()); |
| | | // List<MallMember> fifthLevelRecord = getStarRecord(sixLevelRecord, MemberLevelEnum.FIFTH_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_FIVE.getValue()); |
| | | // List<MallMember> fourLevelRecord = getStarRecord(fifthLevelRecord, MemberLevelEnum.FOUR_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_FOUR.getValue()); |
| | | // List<MallMember> thirdLevelRecord = getStarRecord(fourLevelRecord, MemberLevelEnum.THIRD_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_THREE.getValue()); |
| | | // List<MallMember> secondLevelRecord = getStarRecord(thirdLevelRecord, MemberLevelEnum.SECOND_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_TWO.getValue()); |
| | | |
| | | /** |
| | | * 团队补贴 |
| | |
| | | * @return |
| | | */ |
| | | public List<MallMember> getStarRecord(List<MallMember> mallMembersOlds,String LevelParam,BigDecimal amount,String orderNo,Long memberId,int starPerkType){ |
| | | |
| | | //实际补贴总金额 |
| | | BigDecimal totalPerkAgentAmount = BigDecimal.ZERO; |
| | | //根据用户的level获取用户 |
| | | List<MallMember> mallMemberStars = memberMapper.selectMemberWithLevel(LevelParam); |
| | | if(CollUtil.isNotEmpty(mallMembersOlds)){ |
| | |
| | | List<Long> mallMemberStarIds = mallMemberStars.stream().map(MallMember::getId).collect(Collectors.toList()); |
| | | //排除掉本身 |
| | | mallMemberStarIds.remove(memberId); |
| | | if(CollUtil.isEmpty(mallMemberStarIds)){ |
| | | return mallMemberStars; |
| | | } |
| | | //当前等级的总贡献点 |
| | | List<MallMemberWallet> mallMemberWallets = mallMemberWalletMapper.selectMemberWalletsByIds(mallMemberStarIds); |
| | | Integer starSum = mallMemberWallets.stream().mapToInt(MallMemberWallet::getStar).sum(); |
| | | if(starSum <= 0){ |
| | | return mallMemberStars; |
| | | } |
| | | |
| | | BigDecimal totalProfitProp = BigDecimal.ZERO; |
| | | List<DataDictionaryCustom> agentLevelRequireDics = dataDictionaryCustomMapper.selectDicByType("AGENT_LEVEL_REQUIRE"); |
| | | if(CollUtil.isNotEmpty(agentLevelRequireDics)){ |
| | | for(DataDictionaryCustom dic : agentLevelRequireDics){ |
| | | String starPerkStr = dic.getValue(); |
| | | AgentInfo agentInfo = JSONObject.parseObject(starPerkStr, AgentInfo.class); |
| | | //当前星级所占份数 |
| | | BigDecimal profitProp = agentInfo.getProfitProp().abs(); |
| | | List<MallMember> mallMembers = memberMapper.selectByLevel(dic.getCode()); |
| | | if(CollUtil.isNotEmpty(mallMembers)){ |
| | | totalProfitProp = profitProp.add(totalProfitProp); |
| | | } |
| | | } |
| | | } |
| | | //星级补贴比例 |
| | | DataDictionaryCustom starPerkDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | "AGENT_LEVEL_REQUIRE", |
| | | LevelParam); |
| | | String starPerkStr = starPerkDic.getValue(); |
| | | AgentInfo agentInfo = JSONObject.parseObject(starPerkStr, AgentInfo.class); |
| | | BigDecimal profitProp = agentInfo.getProfitProp().abs().divide(new BigDecimal(100)); |
| | | // BigDecimal profitProp = agentInfo.getProfitProp().abs().divide(new BigDecimal(100)); |
| | | //当前星级所占份数 |
| | | BigDecimal profitProp = agentInfo.getProfitProp().abs(); |
| | | //每一份多少钱 |
| | | amount = amount.divide(totalProfitProp,4,BigDecimal.ROUND_DOWN); |
| | | //当前等级的星级补贴 |
| | | BigDecimal starPerkAmountSum = amount.multiply(profitProp); |
| | | //当前等级的每一个贡献点的补贴金额 |
| | |
| | | mallMoneyFlows.add(mallMoneyFlow); |
| | | |
| | | reduceStar(mallMemberWallet.getMemberId(),starPerkAmount); |
| | | totalPerkAgentAmount = totalPerkAgentAmount.add(starPerkAmount); |
| | | } |
| | | count = count + 1; |
| | | if (count % 1000 == 0 || count == mallMemberWallets.size()) { |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | log.info("============实际补贴金额:{}",totalPerkAgentAmount.setScale(2,BigDecimal.ROUND_DOWN)); |
| | | DataDictionaryCustom totalPerkAgentAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.PERK_AGENT_ACHIEVE_TOTAL.getType(), |
| | | DataDictionaryEnum.PERK_AGENT_ACHIEVE_TOTAL.getCode() |
| | | ); |
| | | totalPerkAgentAmountDic.setValue( |
| | | new BigDecimal(totalPerkAgentAmountDic.getValue()).subtract(totalPerkAgentAmount).setScale(2,BigDecimal.ROUND_DOWN).toString() |
| | | ); |
| | | dataDictionaryCustomMapper.updateById(totalPerkAgentAmountDic); |
| | | return mallMemberStars; |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void achieveReleasePercent() { |
| | | DataDictionaryCustom jobAchieveReleasePercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | GreenScoreEnum.JOB_ACHIEVE_RELEASE_PERCENT.getType(), |
| | | GreenScoreEnum.JOB_ACHIEVE_RELEASE_PERCENT.getCode() |
| | | ); |
| | | |
| | | List<MallMember> mallMembers = memberMapper.selectByLevel(MemberLevelEnum.SECOND_LEVEL.getType()); |
| | | BigDecimal jobAchieveReleasePercent = new BigDecimal(jobAchieveReleasePercentDic.getValue()) |
| | | .multiply(new BigDecimal(0.001)); |
| | | BigDecimal totalAchieve = BigDecimal.ZERO; |
| | | Integer totalStar = 0; |
| | | if(CollUtil.isNotEmpty(mallMembers)){ |
| | | for(MallMember mallMember : mallMembers){ |
| | | //总业绩 |
| | | BigDecimal achieve = mallAchieveRecordMapper.selectSumAchieveByMemberId(mallMember.getId()); |
| | | totalAchieve = totalAchieve.add(achieve); |
| | | |
| | | MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallMember.getId()); |
| | | Integer star = mallMemberWallet.getStar(); |
| | | totalStar = totalStar + star; |
| | | } |
| | | } |
| | | if(BigDecimal.ZERO.compareTo(totalAchieve) >= 0){ |
| | | return; |
| | | } |
| | | //总释放=总业绩*一星每日业绩每日释放业绩到余额的千分比 |
| | | totalAchieve = totalAchieve.multiply(jobAchieveReleasePercent); |
| | | |
| | | if(totalStar <= 0){ |
| | | return; |
| | | } |
| | | //一个贡献点的价值 |
| | | BigDecimal divide = totalAchieve.divide(new BigDecimal(totalStar), 2, BigDecimal.ROUND_DOWN); |
| | | |
| | | if(CollUtil.isNotEmpty(mallMembers)){ |
| | | for(MallMember mallMember : mallMembers){ |
| | | |
| | | MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallMember.getId()); |
| | | Integer star = mallMemberWallet.getStar(); |
| | | //每个人贡献值数量*一个贡献点的价值=获取的收益 |
| | | BigDecimal multiply = divide.multiply(new BigDecimal(star)).setScale(2,BigDecimal.ROUND_DOWN); |
| | | |
| | | BigDecimal totalScore = mallMemberWallet.getTotalScore(); |
| | | if(BigDecimal.ZERO.compareTo(multiply) < 0){ |
| | | if(BigDecimal.ZERO.compareTo(totalScore) < 0){ |
| | | if(totalScore.compareTo(multiply) < 0){ |
| | | multiply = totalScore; |
| | | } |
| | | //减少补贴额度 |
| | | mallMemberWalletMapper.reduceTotalScoreById(multiply, mallMemberWallet.getId()); |
| | | |
| | | reduceStar(mallMember.getId(),multiply); |
| | | |
| | | mallMemberWalletMapper.addBalanceById(multiply, mallMemberWallet.getId()); |
| | | |
| | | mallMoneyFlowService.addMoneyFlow( |
| | | mallMember.getId(), |
| | | multiply, |
| | | MoneyFlowTypeEnum.STATIC_BONUS.getValue(), |
| | | MallUtils.getOrderNum(), |
| | | FlowTypeEnum.BALANCE.getValue()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | // if(CollUtil.isNotEmpty(mallMembers)){ |
| | | // for(MallMember mallMember : mallMembers){ |
| | | // //总业绩 |
| | | // BigDecimal sumAchieve = mallAchieveRecordMapper.selectSumAchieveByMemberId(mallMember.getId()); |
| | | // //每个人的补贴额度 |
| | | // BigDecimal multiply = sumAchieve.multiply(jobAchieveReleasePercent); |
| | | // MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallMember.getId()); |
| | | // BigDecimal totalScore = mallMemberWallet.getTotalScore(); |
| | | // if(BigDecimal.ZERO.compareTo(multiply) < 0){ |
| | | // if(BigDecimal.ZERO.compareTo(totalScore) < 0){ |
| | | // if(totalScore.compareTo(multiply) < 0){ |
| | | // multiply = totalScore; |
| | | // } |
| | | // //减少补贴额度 |
| | | // mallMemberWalletMapper.reduceTotalScoreById(multiply, mallMemberWallet.getId()); |
| | | // |
| | | // reduceStar(mallMember.getId(),multiply); |
| | | // |
| | | // mallMemberWalletMapper.addBalanceById(multiply, mallMemberWallet.getId()); |
| | | // |
| | | // mallMoneyFlowService.addMoneyFlow( |
| | | // mallMember.getId(), |
| | | // multiply, |
| | | // MoneyFlowTypeEnum.STATIC_BONUS.getValue(), |
| | | // MallUtils.getOrderNum(), |
| | | // FlowTypeEnum.BALANCE.getValue()); |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | } |
| | | |
| | | @Override |
| | | public void perkAgent() { |
| | | DataDictionaryCustom totalAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.PERK_AGENT_ACHIEVE_TOTAL.getType(), |
| | | DataDictionaryEnum.PERK_AGENT_ACHIEVE_TOTAL.getCode() |
| | | ); |
| | | if(ObjectUtil.isEmpty(totalAmountDic)){ |
| | | return; |
| | | } |
| | | //星级补贴总数 |
| | | BigDecimal totalAmount = new BigDecimal(totalAmountDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); |
| | | if(BigDecimal.ZERO.compareTo(totalAmount) >= 0){ |
| | | return; |
| | | } |
| | | |
| | | DataDictionaryCustom perkAgentPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.PERK_AGENT_ACHIEVE_PERCENT.getType(), |
| | | DataDictionaryEnum.PERK_AGENT_ACHIEVE_PERCENT.getCode() |
| | | ); |
| | | if(ObjectUtil.isEmpty(perkAgentPercentDic)){ |
| | | return; |
| | | } |
| | | //星级补贴百分比 |
| | | BigDecimal perkAgentPercent = new BigDecimal(perkAgentPercentDic.getValue()).abs().divide(new BigDecimal(100)); |
| | | BigDecimal amount = totalAmount.multiply(perkAgentPercent); |
| | | if(BigDecimal.ZERO.compareTo(amount) >= 0){ |
| | | return; |
| | | } |
| | | // //星级补贴总数 |
| | | // totalAmountDic.setValue(totalAmount.subtract(amount).setScale(2,BigDecimal.ROUND_DOWN).toString()); |
| | | // dataDictionaryCustomMapper.updateById(totalAmountDic); |
| | | |
| | | String orderNo = MallUtils.getOrderNum("SPA"); |
| | | /** |
| | | * 星级奖励 |
| | | * 从最顶级级别的合伙人开始补贴 |
| | | * 补贴完,把已经补贴的合伙人加入下一个级别 |
| | | */ |
| | | List<MallMember> sevenLevelRecord = getStarRecord(null, MemberLevelEnum.SEVEN_LEVEL.name(), amount, orderNo, 0L,MoneyFlowTypeEnum.STAR_PERK_SEVEN.getValue()); |
| | | List<MallMember> sixLevelRecord = getStarRecord(sevenLevelRecord, MemberLevelEnum.SIX_LEVEL.name(), amount, orderNo, 0L,MoneyFlowTypeEnum.STAR_PERK_SIX.getValue()); |
| | | List<MallMember> fifthLevelRecord = getStarRecord(sixLevelRecord, MemberLevelEnum.FIFTH_LEVEL.name(), amount, orderNo, 0L,MoneyFlowTypeEnum.STAR_PERK_FIVE.getValue()); |
| | | List<MallMember> fourLevelRecord = getStarRecord(fifthLevelRecord, MemberLevelEnum.FOUR_LEVEL.name(), amount, orderNo, 0L,MoneyFlowTypeEnum.STAR_PERK_FOUR.getValue()); |
| | | List<MallMember> thirdLevelRecord = getStarRecord(fourLevelRecord, MemberLevelEnum.THIRD_LEVEL.name(), amount, orderNo, 0L,MoneyFlowTypeEnum.STAR_PERK_THREE.getValue()); |
| | | List<MallMember> secondLevelRecord = getStarRecord(thirdLevelRecord, MemberLevelEnum.SECOND_LEVEL.name(), amount, orderNo, 0L,MoneyFlowTypeEnum.STAR_PERK_TWO.getValue()); |
| | | } |
| | | |
| | | @Override |
| | | public void BuyToSell() { |
| | | /** |
| | | * nft产品周期到期的已完成买单变成卖单 |
| | | * 计算收益,本金 |
| | | */ |
| | | List<MallProductNft> mallProductNfts = mallProductNftMapper.selectList(null); |
| | | if(CollUtil.isEmpty(mallProductNfts)){ |
| | | return; |
| | | } |
| | | DateTime now = DateUtil.date(); |
| | | for(MallProductNft mallProductNft : mallProductNfts){ |
| | | Long nftId = mallProductNft.getId(); |
| | | List<MallProductBuy> mallProductBuys = mallProductBuyMapper.selectListByStateAndProductNFTId( |
| | | ProductEnum.PRODUCT_BUY_SUCCESS.getValue(), |
| | | nftId, |
| | | ProductEnum.PRODUCT_BUY_MATE_STATE_FAIL.getValue()); |
| | | if(CollUtil.isEmpty(mallProductBuys)){ |
| | | continue; |
| | | } |
| | | //周期 |
| | | int cycle = mallProductNft.getCycle(); |
| | | //收益率 |
| | | BigDecimal profitPercent = mallProductNft.getProfit(); |
| | | for(MallProductBuy mallProductBuy : mallProductBuys){ |
| | | |
| | | Date payTime = mallProductBuy.getPayTime(); |
| | | //偏移时间 |
| | | DateTime dateTime = DateUtil.offsetDay(payTime, cycle); |
| | | int compare = DateUtil.compare(now, dateTime); |
| | | if(compare <= 0){ |
| | | /** |
| | | * 更新买单状态 |
| | | * 收益生成一条卖单 |
| | | * 本金生成一条卖单 |
| | | */ |
| | | mallProductBuy.setMateState(ProductEnum.PRODUCT_BUY_MATE_STATE_SUCCESS.getValue()); |
| | | mallProductBuyMapper.updateById(mallProductBuy); |
| | | BigDecimal nftTotal = mallProductBuy.getNftTotal(); |
| | | insertSell(mallProductBuy.getMemberId(),nftTotal,nftTotal,BigDecimal.ZERO,BigDecimal.ZERO); |
| | | BigDecimal profit = nftTotal.multiply(profitPercent.multiply(new BigDecimal(0.01))); |
| | | insertSell(mallProductBuy.getMemberId(),profit,profit,BigDecimal.ZERO,BigDecimal.ZERO); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void timeGetOrderBuy() { |
| | | DateTime nowTime = DateUtil.parseTime(DateUtil.formatTime(DateUtil.date())); |
| | | DataDictionaryCustom endTimeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.YU_YUE_END_TIME.getType(), |
| | | DataDictionaryEnum.YU_YUE_END_TIME.getCode() |
| | | ); |
| | | DateTime endTime = DateUtil.parseTime(endTimeDic.getValue()); |
| | | /** |
| | | * 当前时间比结束时间大 |
| | | */ |
| | | if(nowTime.compareTo(endTime) >= 0){ |
| | | List<MallProductBuyRecord> mallProductBuyRecords = mallProductBuyRecordMapper.selectByState(ProductEnum.PRODUCT_MATE_STATE_WAIT_PAY.getValue()); |
| | | if(CollUtil.isNotEmpty(mallProductBuyRecords)){ |
| | | for(MallProductBuyRecord mallProductBuyRecord : mallProductBuyRecords){ |
| | | /** |
| | | * 用户有超时未支付的订单 |
| | | * 1、冻结账户 |
| | | * 2、更新买单主表 |
| | | * 2、更新卖单主表 |
| | | * 3、更新买单子表的数据 |
| | | * 3、更新卖单子表的数据 |
| | | */ |
| | | agentProducer.sendFcmOrderBuyCancelMsg(mallProductBuyRecord.getId()); |
| | | |
| | | // Long buyId = mallProductBuyRecord.getBuyId(); |
| | | // Long sellRecordId = mallProductBuyRecord.getSellRecordId(); |
| | | // MallProductBuy mallProductBuy = mallProductBuyMapper.selectById(buyId); |
| | | // Long memberIdBuy = mallProductBuy.getMemberId(); |
| | | // //冻结账户 |
| | | // MallMember mallMemberBuy = memberMapper.selectById(memberIdBuy); |
| | | // mallMemberBuy.setIsFrozen(ProductEnum.MEMBER_FROZEN.getValue()); |
| | | // memberMapper.updateById(mallMemberBuy); |
| | | // //更新买单子表的数据 |
| | | // mallProductBuyRecord.setState(ProductEnum.PRODUCT_MATE_STATE_FAIL.getValue()); |
| | | // mallProductBuyRecordMapper.updateById(mallProductBuyRecord); |
| | | // //更新买单主表 |
| | | // mallProductBuy.setNftAva(mallProductBuy.getNftAva().add(mallProductBuyRecord.getPickNftCnt())); |
| | | // mallProductBuyMapper.updateById(mallProductBuy); |
| | | // //更新卖单子表的数据 |
| | | // MallProductSellRecord mallProductSellRecord = mallProductSellRecordMapper.selectById(sellRecordId); |
| | | // mallProductSellRecord.setState(ProductEnum.PRODUCT_MATE_STATE_FAIL.getValue()); |
| | | // mallProductSellRecordMapper.updateById(mallProductSellRecord); |
| | | // //更新卖单主表 |
| | | // Long sellId = mallProductSellRecord.getSellId(); |
| | | // MallProductSell mallProductSell = mallProductSellMapper.selectById(sellId); |
| | | // mallProductSell.setNftCntAva(mallProductSell.getNftCntAva().add(mallProductSellRecord.getNftCnt())); |
| | | // mallProductSellMapper.updateById(mallProductSell); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void timeGetOrderSell() { |
| | | DateTime nowTime = DateUtil.parseTime(DateUtil.formatTime(DateUtil.date())); |
| | | DataDictionaryCustom endTimeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.YU_YUE_END_TIME.getType(), |
| | | DataDictionaryEnum.YU_YUE_END_TIME.getCode() |
| | | ); |
| | | DateTime endTime = DateUtil.parseTime(endTimeDic.getValue()); |
| | | /** |
| | | * 当前时间比结束时间大 |
| | | */ |
| | | if(nowTime.compareTo(endTime) >= 0){ |
| | | List<MallProductSellRecord> mallProductSellRecords = mallProductSellRecordMapper.selectListByState(ProductEnum.PRODUCT_MATE_STATE_PAY.getValue()); |
| | | if(CollUtil.isNotEmpty(mallProductSellRecords)){ |
| | | for(MallProductSellRecord mallProductSellRecord : mallProductSellRecords){ |
| | | /** |
| | | * 卖方 |
| | | * 1:冻结账户 |
| | | */ |
| | | Long sellId = mallProductSellRecord.getSellId(); |
| | | MallProductSell mallProductSell = mallProductSellMapper.selectById(sellId); |
| | | MallMember mallMember = memberMapper.selectById(mallProductSell.getMemberId()); |
| | | mallMember.setIsFrozen(ProductEnum.MEMBER_FROZEN.getValue()); |
| | | memberMapper.updateById(mallMember); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | public void insertSell(Long memberId,BigDecimal nftCnt,BigDecimal nftCntAva, |
| | | BigDecimal nftFee,BigDecimal fcmFeeCnt){ |
| | | String orderNo = MallUtils.getOrderNum("NFT"); |
| | | MallProductSell mallProductSell = new MallProductSell(); |
| | | mallProductSell.setMemberId(memberId); |
| | | mallProductSell.setOrderNo(orderNo); |
| | | mallProductSell.setNftTotal(nftCnt); |
| | | mallProductSell.setNftCnt(nftCntAva); |
| | | mallProductSell.setNftCntAva(nftCntAva); |
| | | mallProductSell.setNftFee(nftFee); |
| | | mallProductSell.setFcmFee(fcmFeeCnt); |
| | | mallProductSell.setState(ProductEnum.PRODUCT_SELL_ON_GOING.getValue()); |
| | | mallProductSellMapper.insert(mallProductSell); |
| | | } |
| | | |
| | | } |