xiaoyong931011
2023-08-06 65cf739fe077c398d35e58a083a1c7be40a3b7a2
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -2,6 +2,7 @@
import cc.mrbird.febs.common.contants.AppContants;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.tree.MatrixTree;
import cc.mrbird.febs.common.tree.MemberNode;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cc.mrbird.febs.common.utils.RedisUtils;
@@ -2488,26 +2489,100 @@
            return;
        }
        List<DataDictionaryCustom> dicList = dataDictionaryCustomMapper.selectDicByType(AppContants.AGENT_LEVEL);
        DataDictionaryCustom dic = null;
        for (DataDictionaryCustom dataDictionaryCustom : dicList) {
            if (Integer.parseInt(dataDictionaryCustom.getValue()) == parentNode.CHILD.size()) {
                dic = dataDictionaryCustom;
                break;
            }
        }
        if (dic == null) {
        MatrixTree matrixTree = MatrixTree.getInstance();
        List<MemberNode> allNodes = matrixTree.getAllAncestors(parentNode); // 获取某一个MemberNode的所有上级节点
        allNodes.add(parentNode);
        if(CollUtil.isEmpty(allNodes)){
            return;
        }
        /**
         * 更新所有上级的小区业绩
         */
        for(MemberNode memberNode : allNodes){
            BigDecimal smallAchieve = BigDecimal.ZERO;
            List<MemberNode> allNodesChildList = memberNode.getCHILD();
            if(CollUtil.isNotEmpty(allNodesChildList)){
                List<Long> left = allNodesChildList.stream().filter(allNodesChild -> allNodesChild.getType() == 1).map(MemberNode::getMemberId).collect(Collectors.toList());
                List<Long> right = allNodesChildList.stream().filter(allNodesChild -> allNodesChild.getType() == 2).map(MemberNode::getMemberId).collect(Collectors.toList());
        MallMember parentMember = memberMapper.selectById(parentNode.getMemberId());
        parentMember.setChildNodeCnt(parentNode.CHILD.size());
        int levelCode = MemberLevelEnum.getLevelCode(parentMember.getLevel());
        if (Integer.parseInt(dic.getValue()) >= levelCode) {
            parentMember.setLevel(dic.getCode());
                BigDecimal leftAmount = mallAchieveRecordMapper.selectSumAchieveByMemberIdList(left);
                BigDecimal rightAmount = mallAchieveRecordMapper.selectSumAchieveByMemberIdList(right);
                if(leftAmount.compareTo(rightAmount) > 0){
                    smallAchieve = rightAmount;
                }else{
                    smallAchieve = leftAmount;
        }
        memberMapper.updateById(parentMember);
                //更新用户的区域业绩
                DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberNode.getMemberId());
                dappMemberEntity.setUsdtBalance(smallAchieve);
                dappMemberEntity.setLeftAchieve(leftAmount);
                dappMemberEntity.setRightAchieve(rightAmount);
                dappMemberDao.updateById(dappMemberEntity);
                log.info("用户:{},leftAchieve :{}, rightAchieve:{}, smallAchieve:{}",
                        dappMemberEntity.getAddress(), leftAmount, rightAmount, smallAchieve);
                /**
                 * 判断是否符合升级条件
                 */
                String nextLevel = MemberLevelEnum.MEMBER.getNextLevel(dappMemberEntity.getAccountType());
                DataDictionaryCustom memberLevelDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                        DataDictionaryEnum.V1.getType()
                        , nextLevel);
                if(ObjectUtil.isNotEmpty(memberLevelDic)){
                    String value = memberLevelDic.getValue();
                    cn.hutool.json.JSONObject parseObj = JSONUtil.parseObj(value);
                    BigDecimal smallAchieveDic = new BigDecimal(parseObj.get("smallAchieve").toString());
                    if(smallAchieve.compareTo(smallAchieveDic) >= 0){
                        //升级
                        dappMemberEntity.setAccountType(nextLevel);
                        dappMemberDao.updateById(dappMemberEntity);
                    }
                }
            }
        }
    }
    @Override
    public void memberPerk() {
        List<DappMemberEntity> dappMemberEntityList = dappMemberDao.selectMemberByActiveStatus();
        if(CollUtil.isEmpty(dappMemberEntityList)){
            return;
        }
        DataDictionaryCustom staticReleaseDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.STATIC_RELEASE.getType(),
                DataDictionaryEnum.STATIC_RELEASE.getCode()
        );
        if(ObjectUtil.isEmpty(staticReleaseDic)){
            return;
        }
        BigDecimal staticRelease = new BigDecimal(staticReleaseDic.getValue() == null ? "0" : staticReleaseDic.getValue());
        if(BigDecimal.ZERO.compareTo(staticRelease) >= 0){
            return;
        }
        for(DappMemberEntity dappMemberEntity :  dappMemberEntityList){
            if(1 != dappMemberEntity.getActiveStatus()){
                break;
            }
            List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(dappMemberEntity.getId());
            /**
             * 按照订单、比例生成对应的静态释放
             */
            for(MallAchieveRecord mallAchieveRecord : mallAchieveRecords){
                BigDecimal costAmount = mallAchieveRecord.getCostAmount();
                BigDecimal amount = mallAchieveRecord.getAmount();
                BigDecimal eachDayPerk = costAmount.multiply(staticRelease).setScale(2,BigDecimal.ROUND_DOWN);
                /**
                 * 生成一条静态补贴的流水
                 * 增加账户余额
                 * 生成减少赠送积分流水
                 * 减少账户的赠送积分
                 * 业绩记录减少实际业绩amount
                 *
                 */
            }
        }
    }
    /**