xiaoyong931011
2023-01-09 615b4cba39cc01756d7c0299204cc6ecaf172be5
src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -163,7 +163,6 @@
    @Transactional
    public void directReward(Long directRewardId) {
        log.info("消费补贴奖励、直推返利、分享奖励直推上级、分享奖励直推上级的直推、团队管理补贴消息,ID:{}", directRewardId);
        //获取订单信息
        MallOrderInfo orderInfo = mallOrderInfoMapper.selectById(directRewardId);
        if(ObjectUtil.isEmpty(orderInfo)){
            return;
@@ -186,7 +185,7 @@
        Long subsidyAmountFlowId = mallMoneyFlowService.addMoneyFlow(
                mallMember.getId(),
                orderInfo.getOrderNo(),
                subsidyAmount.setScale(2, BigDecimal.ROUND_DOWN),
                subsidyAmount.setScale(4, BigDecimal.ROUND_DOWN),
                MallMoneyFlowTypeEnum.MARKET_SUBSIDIES.getCode(),
                MallMoneyFlow.STATUS_SUCCESS,
                MallMoneyFlow.IS_RETURN_Y,
@@ -195,7 +194,8 @@
                MallMoneyFlowTypeEnum.MARKET_SUBSIDIES.getName()
        );
        memberWalletService.addBalance(subsidyAmount.setScale(2, BigDecimal.ROUND_DOWN),mallMember.getId());
//        memberWalletService.addBalance(subsidyAmount.setScale(4, BigDecimal.ROUND_DOWN),mallMember.getId());
        memberWalletService.add(subsidyAmount.setScale(4, BigDecimal.ROUND_DOWN), mallMember.getId(), "balance");
        /**
         * 生成直推返利的流水记录
@@ -218,7 +218,7 @@
                    DataDictionaryEnum.REWARD_PERCENT.getCode()
            );
            BigDecimal rewardPercent = new BigDecimal(rewardPercentDic.getValue()).multiply(new BigDecimal(0.01)).setScale(2,BigDecimal.ROUND_DOWN);
            BigDecimal directRewardAmount = subsidyAmount.multiply(rewardPercent).setScale(2, BigDecimal.ROUND_DOWN);
            BigDecimal directRewardAmount = subsidyAmount.multiply(rewardPercent).setScale(4, BigDecimal.ROUND_DOWN);
            Long marketSubsidyFlowId = mallMoneyFlowService.addMoneyFlow(
                    mallMember.getId(),
@@ -231,14 +231,18 @@
                    FlowTypeEnum.BALANCE.getValue(),
                    MallMoneyFlowTypeEnum.DIRECT_REWARD.getName()
            );
            memberWalletService.addBalance(directRewardAmount,mallMemberOne.getId());
//            memberWalletService.addBalance(directRewardAmount,mallMemberOne.getId());
            memberWalletService.add(directRewardAmount, mallMemberOne.getId(), "balance");
            DataDictionaryCustom shareOneDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                    DataDictionaryEnum.LEVEL_ONE.getType(),
                    DataDictionaryEnum.LEVEL_ONE.getCode()
            );
            //生成分享奖励的流水记录
            BigDecimal shareOne = new BigDecimal(shareOneDic.getValue()).multiply(new BigDecimal(0.01)).setScale(2,BigDecimal.ROUND_DOWN);
            BigDecimal shareOneAmount = subsidyAmount.multiply(shareOne).setScale(2, BigDecimal.ROUND_DOWN);
            BigDecimal shareOneAmount = subsidyAmount.multiply(shareOne).setScale(4, BigDecimal.ROUND_DOWN);
            Long ShareOneFlowId = mallMoneyFlowService.addMoneyFlow(
                    mallMember.getId(),
                    orderInfo.getOrderNo(),
@@ -250,7 +254,8 @@
                    FlowTypeEnum.BALANCE.getValue(),
                    MallMoneyFlowTypeEnum.SHARE_REWARD_ONE.getName()
            );
            memberWalletService.addBalance(shareOneAmount,mallMemberOne.getId());
//            memberWalletService.addBalance(shareOneAmount,mallMemberOne.getId());
            memberWalletService.add(shareOneAmount, mallMemberOne.getId(), "balance");
        }
        //下单人的直推上级的直推
        MallMember mallMemberTwo = memberMapper.selectInfoByInviteId(mallMemberOne.getReferrerId());
@@ -260,7 +265,7 @@
                    DataDictionaryEnum.LEVEL_TWO.getCode()
            );
            BigDecimal shareTwo = new BigDecimal(shareTwoDic.getValue()).multiply(new BigDecimal(0.01)).setScale(2,BigDecimal.ROUND_DOWN);
            BigDecimal shareTwoAmount = subsidyAmount.multiply(shareTwo).setScale(2, BigDecimal.ROUND_DOWN);
            BigDecimal shareTwoAmount = subsidyAmount.multiply(shareTwo).setScale(4, BigDecimal.ROUND_DOWN);
            Long shareTwoFlowId = mallMoneyFlowService.addMoneyFlow(
                    mallMember.getId(),
                    orderInfo.getOrderNo(),
@@ -272,7 +277,8 @@
                    FlowTypeEnum.BALANCE.getValue(),
                    MallMoneyFlowTypeEnum.SHARE_REWARD_TWO.getName()
            );
            memberWalletService.addBalance(shareTwoAmount,mallMemberTwo.getId());
//            memberWalletService.addBalance(shareTwoAmount,mallMemberTwo.getId());
            memberWalletService.add(shareTwoAmount, mallMemberTwo.getId(), "balance");
        }
        /**
         * 团队管理补贴
@@ -284,33 +290,36 @@
        ArrayList<String> refererIdListUp = new ArrayList<>();
        //初始级别即当前下单人的级别
        String levelStart = mallMember.getLevel();
        for(String inviteId : refererIdList){
            MallMember mallMemberUp = memberMapper.selectInfoByInviteId(inviteId);
            String levelUp = mallMemberUp.getLevel();
            //团队补贴从区代开始
            if(!MemberAgentLevelEnum.AGENT.getName().equals(levelUp)){
                //比较两个代理级别,同级别或者大于下单人的级别都保留
                int compareLevel = MemberAgentLevelEnum.AGENT_ONE.compareLevel(levelUp,levelStart);
                if(0 < compareLevel){
                    levelStart = levelUp;
                    refererIdListUp.add(inviteId);
        if(CollUtil.isNotEmpty(refererIdList)){
            for(String inviteId : refererIdList){
                MallMember mallMemberUp = memberMapper.selectInfoByInviteId(inviteId);
                String levelUp = mallMemberUp.getLevel();
                //团队补贴从区代开始
                if(!MemberAgentLevelEnum.AGENT.getName().equals(levelUp)){
                    //比较两个代理级别,同级别或者大于下单人的级别都保留
                    int compareLevel = MemberAgentLevelEnum.AGENT_ONE.compareLevel(levelUp,levelStart);
                    if(0 < compareLevel){
                        levelStart = levelUp;
                        refererIdListUp.add(inviteId);
                    }
                }
            }
        }
        if(CollUtil.isNotEmpty(refererIdListUp)){
            levelStart = mallMember.getLevel();
            for(String inviteId : refererIdList){
                MallMember mallMemberUp = memberMapper.selectInfoByInviteId(inviteId);
                String levelUp = mallMemberUp.getLevel();
                //获取团队分享比例
                BigDecimal manageSubsidyPercent = getManageSubsidyPercent(levelStart, levelUp);
                if(manageSubsidyPercent.compareTo(BigDecimal.ZERO) > 0){
                    BigDecimal teamManageAmount = subsidyAmount.multiply(manageSubsidyPercent).setScale(2, BigDecimal.ROUND_DOWN);
                    BigDecimal teamManageAmount = subsidyAmount.multiply(manageSubsidyPercent).setScale(4, BigDecimal.ROUND_DOWN);
                    //生成团队分享流水
                    Long teamManageFlowId = mallMoneyFlowService.addMoneyFlow(
                            mallMember.getId(),
                            orderInfo.getOrderNo(),
                            teamManageAmount,
                            MallMoneyFlowTypeEnum.SHARE_REWARD_TWO.getCode(),
                            MallMoneyFlowTypeEnum.TEAM_REWARD.getCode(),
                            MallMoneyFlow.STATUS_SUCCESS,
                            MallMoneyFlow.IS_RETURN_Y,
                            mallMemberUp.getId(),
@@ -318,7 +327,9 @@
                            MallMoneyFlowTypeEnum.TEAM_REWARD.getName()
                    );
                    memberWalletService.addBalance(teamManageAmount,mallMemberUp.getId());
//                    memberWalletService.addBalance(teamManageAmount,mallMemberUp.getId());
                    memberWalletService.add(teamManageAmount, mallMemberUp.getId(), "balance");
                }
                levelStart = levelUp;
            }
@@ -347,7 +358,8 @@
            // 满足,需要减去levelStart的团队管理奖励
            String minLevel = MemberAgentLevelEnum.AGENT_ONE.minLevel(agentCodeUp);
            if(levelStart.equals(minLevel)
                    && MemberAgentLevelEnum.AGENT.getName() != levelStart){
                    && !MemberAgentLevelEnum.AGENT.getName().equals(levelStart)){
//                    && MemberAgentLevelEnum.AGENT.getName()levelStart){
                BigDecimal dicManageSubsidyPercentUp = getDicManageSubsidyPercent(agentCodeUp);
                BigDecimal dicManageSubsidyPercentStart = getDicManageSubsidyPercent(agentCodeStart);
                manageSubsidyPercent = dicManageSubsidyPercentUp.subtract(dicManageSubsidyPercentStart);