xiaoyong931011
2023-09-04 5d16c166304f7386909cfb5909a7ead4fb3e09b9
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -33,6 +33,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jline.utils.Log;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.web3j.utils.Convert;
@@ -2469,7 +2470,7 @@
         * 新增一条业绩
         */
        MallAchieveRecord mallAchieveRecord = new MallAchieveRecord(
                memberId,amount,amount,DateUtil.date(),orderId,1,mallOrderInfo.getPayTime()
                memberId,donateScore,donateScore,amount,amount,DateUtil.date(),orderId,1,mallOrderInfo.getPayTime()
        );
        mallAchieveRecordMapper.insert(mallAchieveRecord);
@@ -2629,7 +2630,8 @@
            }
            Long perkMemberId = dappMemberEntity.getId();
            //获取当前用户所有进行中的业绩释放
            List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(perkMemberId);
//            List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(perkMemberId);
            List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberIdAndScore(perkMemberId);
            if(CollUtil.isEmpty(mallAchieveRecords)){
                continue;
@@ -2943,6 +2945,9 @@
        }
        for(DappFundFlowEntity dappFundFlowEntity : dappFundFlowEntities){
            Long memberId = dappFundFlowEntity.getMemberId();
            if(memberId == 2852L){
                Log.info("1");
            }
            //当日预期总收益
            BigDecimal amount = dappFundFlowEntity.getAmount();
            if(BigDecimal.ZERO.compareTo(amount) >= 0){
@@ -2950,13 +2955,116 @@
            }
            //当日预期总收益
            BigDecimal amountMagic = amount;
            List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(memberId);
            if(CollUtil.isEmpty(mallAchieveRecords)){
//            List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(memberId);
            List<MallAchieveRecord> mallAchieveRecordsScore = mallAchieveRecordMapper.selectListByMemberIdAndScore(memberId);
            if(CollUtil.isEmpty(mallAchieveRecordsScore)){
                BigDecimal localTotalAchieve = amount;
                /**
                 * 用户减少赠送积分
                 */
                DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
                DappWalletMineEntity dappWalletMineEntity = dappWalletMineDao.selectByMemberId(memberId);
                BigDecimal totalScore = dappWalletMineEntity.getTotalAmount();
                BigDecimal availableScore = dappWalletMineEntity.getAvailableAmount();
                if(BigDecimal.ZERO.compareTo(totalScore) >= 0){
                    continue;
                }
                if(localTotalAchieve.compareTo(totalScore) >= 0){
                    localTotalAchieve = totalScore;
                    //当实际获取大于用户的赠送积分,将用户更新为未激活
                    dappMemberEntity.setActiveStatus(2);
                    dappMemberDao.updateById(dappMemberEntity);
                }
                DappAccountMoneyChangeEntity reduceScoreAMC = new DappAccountMoneyChangeEntity(
                        memberId,
                        totalScore,
                        amountMagic.negate(),
                        localTotalAchieve.negate(),
                        AccountFlowEnum.SCORE.getCode(),
                        null);
                dappAccountMoneyChangeDao.insert(reduceScoreAMC);
                //插入积分流水
                DappFundFlowEntity scoreFlow = new DappFundFlowEntity(
                        AccountFlowEnum.SCORE.getCode(),
                        memberId,
                        localTotalAchieve.negate(),
                        FundFlowEnum.REDUCE_SCORE_REAL.getCode(),
                        DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                        BigDecimal.ZERO);
                dappFundFlowDao.insert(scoreFlow);
                BigDecimal totalScoreRelease = totalScore.subtract(localTotalAchieve);
                BigDecimal availableScoreRelease = availableScore.subtract(localTotalAchieve);
                //更新积分账户
                dappWalletMineEntity.setTotalAmount(totalScoreRelease);
                dappWalletMineEntity.setAvailableAmount(availableScoreRelease);
                dappWalletMineDao.updateById(dappWalletMineEntity);
                //用户增加余额
                DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId);
                BigDecimal totalAmount = dappWalletCoinEntity.getTotalAmount();
                BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount();
                DappAccountMoneyChangeEntity addAmountAMC = new DappAccountMoneyChangeEntity(
                        memberId,
                        totalAmount,
                        amountMagic,
                        localTotalAchieve,
                        AccountFlowEnum.AMOUNT.getCode(),
                        null);
                dappAccountMoneyChangeDao.insert(addAmountAMC);
                //插入余额流水
                DappFundFlowEntity amountFlow = new DappFundFlowEntity(
                        AccountFlowEnum.AMOUNT.getCode(),
                        memberId,
                        localTotalAchieve,
                        FundFlowEnum.ADD_AMOUNT_REAL.getCode(),
                        DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                        BigDecimal.ZERO);
                dappFundFlowDao.insert(amountFlow);
                BigDecimal totalAmountRelease = totalAmount.add(localTotalAchieve);
                BigDecimal availableAmountRelease = availableAmount.add(localTotalAchieve);
                //更新余额账户
                dappWalletCoinEntity.setTotalAmount(totalAmountRelease);
                dappWalletCoinEntity.setAvailableAmount(availableAmountRelease);
                dappWalletCoinDao.updateById(dappWalletCoinEntity);
                StringBuffer content = new StringBuffer();
                if(amountMagic.compareTo(localTotalAchieve) > 0){
                    content.append("今日可加速"+amountMagic.setScale(2,BigDecimal.ROUND_DOWN)+",实际加速"+localTotalAchieve.setScale(2,BigDecimal.ROUND_DOWN)+"" +
                            "烧伤"+amountMagic.subtract(localTotalAchieve).setScale(2,BigDecimal.ROUND_DOWN)+",原因消费金额1%加速上" +
                            "限,增加消费金额可获得更多收益");
                }else{
                    content.append("今日可加速"+amountMagic.setScale(2,BigDecimal.ROUND_DOWN)+",实际加速"+localTotalAchieve.setScale(2,BigDecimal.ROUND_DOWN)+"" +
                            "烧伤"+amountMagic.subtract(localTotalAchieve).setScale(2,BigDecimal.ROUND_DOWN));
                }
                DappAccountMoneyChangeEntity record = new DappAccountMoneyChangeEntity(
                        memberId,
                        totalAmount,
                        amountMagic,
                        localTotalAchieve,
                        AccountFlowEnum.AMOUNT_RECORD.getCode(),
                        content.toString());
                dappAccountMoneyChangeDao.insert(record);
                //实时更新用户等级
                chainProducer.sendAutoLevelUpTeamMsg(memberId);
                set.add(dappMemberEntity);
                continue;
            }
            //实际获取总收益
            BigDecimal localTotalAchieve = BigDecimal.ZERO;
            BigDecimal totalAchieve = mallAchieveRecords.stream().map(MallAchieveRecord::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal totalAchieve = mallAchieveRecordsScore.stream().map(MallAchieveRecord::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal totalAchieveCostAmount = mallAchieveRecordsScore.stream().map(MallAchieveRecord::getCostAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal totalScoreAva = mallAchieveRecordsScore.stream().map(MallAchieveRecord::getScore).reduce(BigDecimal.ZERO, BigDecimal::add);
            //用户每日获取的最大值
            DataDictionaryCustom maxReleaseDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
@@ -2965,19 +3073,23 @@
            );
            BigDecimal maxRelease = new BigDecimal(ObjectUtil.isEmpty(maxReleaseDic) ? "1" : maxReleaseDic.getValue());
            //用户每日获取的最大值
            BigDecimal maxReleaseMember = totalAchieve.multiply(maxRelease).setScale(2, BigDecimal.ROUND_DOWN);
            BigDecimal maxReleaseMember = totalAchieveCostAmount.multiply(maxRelease).setScale(2, BigDecimal.ROUND_DOWN);
            if(amount.compareTo(maxReleaseMember) > 0){
                amount = maxReleaseMember;
            }
            //当日获取总收益大于总业绩
            if(amount.compareTo(totalAchieve) >= 0){
                for(MallAchieveRecord memberAchieve : mallAchieveRecords){
//            if(amount.compareTo(totalAchieve) >= 0){
            if(amount.compareTo(totalScoreAva) >= 0){
                for(MallAchieveRecord memberAchieve : mallAchieveRecordsScore){
                    memberAchieve.setIsNormal(2);
                    memberAchieve.setAmount(BigDecimal.ZERO);
                    memberAchieve.setScore(BigDecimal.ZERO);
                    mallAchieveRecordMapper.updateById(memberAchieve);
                }
                localTotalAchieve = totalAchieve;
                amount = amount.subtract(totalAchieve);
//                localTotalAchieve = totalAchieve;
//                amount = amount.subtract(totalAchieve);
                localTotalAchieve = totalScoreAva;
                amount = amount.subtract(totalScoreAva);
            }else{
                /**
                 *
@@ -2986,12 +3098,18 @@
                 * amount 0 0
                 *
                 */
                for(MallAchieveRecord memberAchieve : mallAchieveRecords){
                for(MallAchieveRecord memberAchieve : mallAchieveRecordsScore){
                    BigDecimal achieveAmount = memberAchieve.getAmount();
                    if(BigDecimal.ZERO.compareTo(amount) >= 0){
                    BigDecimal achieveScoreAva = memberAchieve.getScore();
                    if(BigDecimal.ZERO.compareTo(achieveScoreAva) >= 0){
                        break;
                    }else if(amount.compareTo(achieveAmount) < 0){
                        memberAchieve.setAmount(achieveAmount.subtract(amount).setScale(2,BigDecimal.ROUND_DOWN));
                    }else if(amount.compareTo(achieveScoreAva) < 0){
                        if(BigDecimal.ZERO.compareTo(achieveAmount.subtract(amount)) >= 0){
                            memberAchieve.setAmount(BigDecimal.ZERO);
                        }else{
                            memberAchieve.setAmount(achieveAmount.subtract(amount).setScale(2,BigDecimal.ROUND_DOWN));
                        }
                        memberAchieve.setScore(achieveScoreAva.subtract(amount).setScale(2,BigDecimal.ROUND_DOWN));
                        mallAchieveRecordMapper.updateById(memberAchieve);
                        localTotalAchieve = localTotalAchieve.add(amount);
                        amount = BigDecimal.ZERO;
@@ -2999,9 +3117,10 @@
                    }else{
                        memberAchieve.setIsNormal(2);
                        memberAchieve.setAmount(BigDecimal.ZERO);
                        memberAchieve.setScore(BigDecimal.ZERO);
                        mallAchieveRecordMapper.updateById(memberAchieve);
                        localTotalAchieve = localTotalAchieve.add(achieveAmount);
                        amount = amount.subtract(achieveAmount);
                        localTotalAchieve = localTotalAchieve.add(achieveScoreAva);
                        amount = amount.subtract(achieveScoreAva);
                    }
                }
            }
@@ -3239,6 +3358,9 @@
            }
            BigDecimal packageTeamPerkCnt = new BigDecimal(packageTeamPerkCntDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
            if(BigDecimal.ZERO.compareTo(packageTeamPerkCnt) >= 0){
                return;
            }
            if(packageTeamPerkCnt.compareTo(divide) >= 0){
                BigDecimal subtract = packageTeamPerkCnt.subtract(divide);
                packageTeamPerkCntDic.setValue(subtract.toString());
@@ -3270,10 +3392,14 @@
            return;
        }
        for(DappMemberEntity dappMemberEntity : dappMemberEntities){
            if(dappMemberEntity.getId() == 2852){
                Log.info("1");
            }
            /**
             * 每个人的第一次入单之后的业绩不一样
             */
            List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(dappMemberEntity.getId());
//            List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(dappMemberEntity.getId());
            List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberIdAndScore(dappMemberEntity.getId());
            if(CollUtil.isEmpty(mallAchieveRecords)){
                continue;
            }