fix
Hentua
2023-04-24 13a83a82de868164ba4eb7d109e978d386df8ffa
src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -57,6 +57,9 @@
    public void autoUpAgentLevel(Long memberId) {
        log.info("###代理自动升级###");
        MallMember member = memberMapper.selectById(memberId);
        if (MemberLevelEnum.ZERO_LEVEL.getType().equals(member.getLevel())) {
            return;
        }
        MatrixTree tree = MatrixTree.getInstance();
        MemberNode node = tree.getNode(member.getInviteId());
@@ -78,8 +81,12 @@
        matrixTreeNode = new MatrixTreeNode();
        matrixTreeNode.setTreeNode(memberId);
        matrixTreeNode.setParentNode(parentNode.getMemberId());
        matrixTreeNode.setParentNode(parentNode == null ? null : parentNode.getMemberId());
        matrixTreeNodeMapper.insert(matrixTreeNode);
        if (parentNode == null) {
            return;
        }
        List<DataDictionaryCustom> dicList = dataDictionaryCustomMapper.selectDicByType(AppContants.AGENT_LEVEL);
        DataDictionaryCustom dic = null;
@@ -94,9 +101,12 @@
        }
        MallMember parentMember = memberMapper.selectById(parentNode.getMemberId());
        parentMember.setChildNodeCnt(parentNode.CHILD.size());
        parentMember.setLevel(dic.getCode());
        memberMapper.updateById(parentMember);
        int levelCode = MemberLevelEnum.getLevelCode(parentMember.getLevel());
        if (Integer.parseInt(dic.getValue()) > levelCode) {
            parentMember.setChildNodeCnt(parentNode.CHILD.size());
            parentMember.setLevel(dic.getCode());
            memberMapper.updateById(parentMember);
        }
    }
    /**
@@ -187,104 +197,6 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void perkMoneyConsumer(long orderId) {
        long start = System.currentTimeMillis();
        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId);
        if(ObjectUtil.isEmpty(mallOrderInfo)){
            return;
        }
//        if(2 != mallOrderInfo.getStatus()){
//            return;
//        }
        /**
         * 分享补贴 直推消费额10%
         */
        BigDecimal amount = mallOrderInfo.getAmount().subtract(mallOrderInfo.getScoreAmount());
        Long memberId = mallOrderInfo.getMemberId();
        MallMember mallMember = memberMapper.selectById(memberId);
        //补贴对象 直属上级
        MallMember mallMemberUp = memberMapper.selectInfoByInviteId(mallMember.getReferrerId());
        if(ObjectUtil.isNotEmpty(mallMemberUp)){
            //分享补贴百分比
            DataDictionaryCustom sharePerkDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                    DataDictionaryEnum.SHARE_PERK.getType(),
                    DataDictionaryEnum.SHARE_PERK.getCode());
            String sharePerk = ObjectUtil.isEmpty(sharePerkDic.getValue()) ? "0" : sharePerkDic.getValue();
            BigDecimal sharePerkPercent = new BigDecimal(sharePerk).abs().divide(new BigDecimal(100));
            //分享补贴金额
            BigDecimal sharePerkAmount = amount.multiply(sharePerkPercent).setScale(2, BigDecimal.ROUND_DOWN);;
            //所有合伙人补贴至消费礼包的三倍额度需要复购一次。
            MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallMemberUp.getId());
            BigDecimal totalScore = mallMemberWallet.getTotalScore();
            if(totalScore.compareTo(sharePerkAmount) < 0){
                sharePerkAmount = totalScore;
            }
            if(BigDecimal.ZERO.compareTo(sharePerkAmount) < 0){
                //减少补贴额度
                mallMemberWalletMapper.reduceTotalScoreById(sharePerkAmount, mallMemberWallet.getId());
                reduceStar(mallMemberUp.getId(),sharePerkAmount);
                mallMemberWalletMapper.addBalanceById(sharePerkAmount, mallMemberWallet.getId());
                mallMoneyFlowService.addMoneyFlow(
                        mallMemberUp.getId(),
                        sharePerkAmount,
                        MoneyFlowTypeEnum.DYNAMIC_ACHIEVE.getValue(),
                        mallOrderInfo.getOrderNo(),
                        "直推奖",
                        "补贴额度:"+totalScore,
                        memberId,
                        2,
                        FlowTypeEnum.BALANCE.getValue(),
                        1);
            }
        }
        /**
         * 星级奖励
         *  从最顶级级别的合伙人开始补贴
         *      补贴完,把已经补贴的合伙人加入下一个级别
         */
        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 teamPerkDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.TEAM_PERK.getType(),
                DataDictionaryEnum.TEAM_PERK.getCode());
        String teamPerk = ObjectUtil.isEmpty(teamPerkDic.getValue()) ? "0" : teamPerkDic.getValue();
        BigDecimal teamPerkPercent = new BigDecimal(teamPerk).abs().divide(new BigDecimal(100));
        //分享补贴金额
        BigDecimal teamPerkAmount = amount.multiply(teamPerkPercent);
        //团队补贴对象
        List<MallMember> mallMemberTeamPerkList = mallMemberTeamPerkListInfo(memberId);
        if(CollUtil.isNotEmpty(mallMemberTeamPerkList)){
            List<Long> mallMemberTeamPerkIds = mallMemberTeamPerkList.stream().map(MallMember::getId).collect(Collectors.toList());
            List<MallMemberWallet> mallMemberWallets = mallMemberWalletMapper.selectMemberWalletsByIds(mallMemberTeamPerkIds);
            flowTotalScoreBalance(
                    mallMemberWallets,
                    teamPerkAmount,
                    MoneyFlowTypeEnum.TEAM_PERK.getValue(),
                    mallOrderInfo.getOrderNo(),
                    memberId
            );
        }
        long end = System.currentTimeMillis();
        log.info("============订单:{},时间:{}===========",mallOrderInfo.getOrderNo(),(end - start)/1000);
        MallMqRecord mallMqRecord = mallMqRecordMapper.selectByOrderId(orderId);
        if(ObjectUtil.isNotEmpty(mallMqRecord)){
            mallMqRecord.setState(1);
            mallMqRecordMapper.updateById(mallMqRecord);
        }
    }
    /**