1 files deleted
	
		
		13 files modified
	
		
		2 files added
	
	
 
	
	
	
	
	
	
	
	
| New file | 
 |  |  | 
 |  |  | package cc.mrbird.febs.common.enumerates; | 
 |  |  |  | 
 |  |  | import lombok.Getter; | 
 |  |  |  | 
 |  |  | @Getter | 
 |  |  | public enum GoodsToLevelEnums { | 
 |  |  |     /** | 
 |  |  |      * 套餐对应级别 | 
 |  |  |      */ | 
 |  |  |     VIP(1, "FIRST_LEVEL"), | 
 |  |  |     VVIP(2, "FIFTH_LEVEL"), | 
 |  |  |     VVVIP(3, "SIX_LEVEL"); | 
 |  |  |  | 
 |  |  |     private Integer accountLevel; | 
 |  |  |  | 
 |  |  |     private String level; | 
 |  |  |  | 
 |  |  |     GoodsToLevelEnums(Integer accountLevel, String level) { | 
 |  |  |         this.accountLevel = accountLevel; | 
 |  |  |         this.level = level; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public static String getLevelByAccountLevel(Integer accountLevel) { | 
 |  |  |         for (GoodsToLevelEnums value : values()) { | 
 |  |  |             if (value.accountLevel.equals(accountLevel)) { | 
 |  |  |                 return value.level; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return null; | 
 |  |  |     } | 
 |  |  | } | 
 
 |  |  | 
 |  |  |  | 
 |  |  | @Getter | 
 |  |  | public enum MemberLevelEnum { | 
 |  |  |     SEVEN_LEVEL("SEVEN_LEVEL",6), | 
 |  |  |     SIX_LEVEL("SIX_LEVEL",5), | 
 |  |  |     FIFTH_LEVEL("FIFTH_LEVEL",4), | 
 |  |  |     SIX_LEVEL("SIX_LEVEL",999), | 
 |  |  |     FIFTH_LEVEL("FIFTH_LEVEL",998), | 
 |  |  |     FOUR_LEVEL("FOUR_LEVEL",3), | 
 |  |  |     THIRD_LEVEL("THIRD_LEVEL",2), | 
 |  |  |     SECOND_LEVEL("SECOND_LEVEL",1), | 
 |  |  |     ZERO_LEVEL("ZERO_LEVEL",0); | 
 |  |  |     FIRST_LEVEL("FIRST_LEVEL",0), | 
 |  |  |     ZERO_LEVEL("ZERO_LEVEL",-1); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     private String type; | 
 
| New file | 
 |  |  | 
 |  |  | package cc.mrbird.febs.common.enumerates; | 
 |  |  |  | 
 |  |  | import lombok.Getter; | 
 |  |  |  | 
 |  |  | @Getter | 
 |  |  | public enum MemberLevelTagDicEnums { | 
 |  |  |  | 
 |  |  |     ZERO_LEVEL_Y(1, "ZERO_LEVEL", "迷梦素人") | 
 |  |  |     ,ZERO_LEVEL_N(2, "ZERO_LEVEL", "迷梦素人") | 
 |  |  |     ,FIRST_LEVEL_Y(1, "FIRST_LEVEL", "觉醒须眉") | 
 |  |  |     ,FIRST_LEVEL_N(2, "FIRST_LEVEL", "觉醒丽人") | 
 |  |  |     ,SECOND_LEVEL_Y(1, "SECOND_LEVEL", "先知蓝颜") | 
 |  |  |     ,SECOND_LEVEL_N(2, "SECOND_LEVEL", "先知红颜") | 
 |  |  |     ,THIRD_LEVEL_Y(1, "THIRD_LEVEL", "追影才子") | 
 |  |  |     ,THIRD_LEVEL_N(2, "THIRD_LEVEL", "追影佳人") | 
 |  |  |     ,FOUR_LEVEL_Y(1, "FOUR_LEVEL", "赋权玉郎") | 
 |  |  |     ,FOUR_LEVEL_N(2, "FOUR_LEVEL", "赋权娇娘") | 
 |  |  |     ,FIFTH_LEVEL_Y(1, "FIFTH_LEVEL", "位极尊上") | 
 |  |  |     ,FIFTH_LEVEL_N(2, "FIFTH_LEVEL", "位极女卿") | 
 |  |  |     ,SIX_LEVEL_Y(1, "SIX_LEVEL", "权倾圣主") | 
 |  |  |     ,SIX_LEVEL_N(2, "SIX_LEVEL", "权倾女帝"); | 
 |  |  |  | 
 |  |  |     private int male; | 
 |  |  |  | 
 |  |  |     private String code; | 
 |  |  |  | 
 |  |  |     private String desc; | 
 |  |  |     MemberLevelTagDicEnums(int male, String code, String desc) { | 
 |  |  |         this.male = male; | 
 |  |  |         this.code = code; | 
 |  |  |         this.desc = desc; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public static String getDesc(int male, String code) { | 
 |  |  |         for (MemberLevelTagDicEnums value : values()) { | 
 |  |  |             if (value.male == male && value.code.equals(code)) { | 
 |  |  |                 return value.desc; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return null; | 
 |  |  |     } | 
 |  |  | } | 
 
 |  |  | 
 |  |  |     PARTNER_BONUS(5), | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 获得静态积分 | 
 |  |  |      */ | 
 |  |  |     BUY_TC(6), | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 提现 | 
 |  |  |      */ | 
 |  |  |     WITHDRAWAL(8), | 
 
 |  |  | 
 |  |  |      * 普通商品分红百分比 | 
 |  |  |      */ | 
 |  |  |     private Integer normalPer; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 普通商品分红百分比 | 
 |  |  |      */ | 
 |  |  |     private Integer normalBonus; | 
 |  |  | } | 
 
 |  |  | 
 |  |  |      */ | 
 |  |  |     private Integer hasSettle; | 
 |  |  |  | 
 |  |  |     private BigDecimal staticMulti; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 1-会员 2-代理 3-股东 | 
 |  |  |      */ | 
 |  |  |     private Integer goodsLevel; | 
 |  |  |  | 
 |  |  |     private Integer normalPer; | 
 |  |  |  | 
 |  |  |     private Integer normalBonus; | 
 |  |  | } | 
 
 |  |  | 
 |  |  |     List<MallMember> selectMemberAfterLevelList(String level); | 
 |  |  |  | 
 |  |  |     List<MallMember> selectAgentOrPartnetMemberList(@Param("memberLevel") Integer memberLevel); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     Integer selectOwnCntByInviteIdAndAccountLevel(@Param("inviteId") String inviteId, @Param("accountLevel") Integer accountLevel); | 
 |  |  | } | 
 
 |  |  | 
 |  |  |     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()); | 
 |  |  | 
 |  |  |     @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); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 
 |  |  | 
 |  |  |                 orderItem.setSkuImage(sku.getSkuImage()); | 
 |  |  |                 orderItem.setIsNormal(mallGoods.getIsNormal()); | 
 |  |  |                 orderItem.setCostPrice(sku.getCostPrice()); | 
 |  |  |                 orderItem.setStaticMulti(mallGoods.getStaticMulti()); | 
 |  |  |                 orderItem.setGoodsLevel(mallGoods.getGoodsLevel()); | 
 |  |  |                 orderItem.setNormalBonus(mallGoods.getNormalBonus()); | 
 |  |  |                 orderItem.setNormalPer(mallGoods.getNormalPer()); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |                 total = total.add(amount); | 
 |  |  |                 carriage = carriage.add(mallGoods.getCarriage()); | 
 |  |  | 
 |  |  |                 orderInfo.setPayResult("1"); | 
 |  |  |                 this.baseMapper.updateById(orderInfo); | 
 |  |  |  | 
 |  |  |                 commonService.changeWallet(orderInfo.getId(), FlowTypeEnum.BALANCE.getValue()); | 
 |  |  |                 // 商品级别 会员/代理/股东 | 
 |  |  |                 int goodsLevel = 0; | 
 |  |  |                 BigDecimal score = BigDecimal.ZERO; | 
 |  |  |                 for (MallOrderItem item : orderInfo.getItems()) { | 
 |  |  |                     // 计算静态倍数 | 
 |  |  |                     if(item.getIsNormal() == 2) { | 
 |  |  |                         score = score.add(item.getPrice().multiply(item.getStaticMulti())); | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                 //发送直推返利消息 | 
 |  |  |                 agentProducer.sendOrderReturn(orderInfo.getId()); | 
 |  |  |                     // 判断会员层级 | 
 |  |  |                     if (item.getIsNormal() == 2 && goodsLevel > item.getGoodsLevel()) { | 
 |  |  |                         goodsLevel = item.getGoodsLevel(); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 // 根据用户购买的商品设置其等级 | 
 |  |  |                 member.setLevel(GoodsToLevelEnums.getLevelByAccountLevel(goodsLevel)); | 
 |  |  |                 member.setAccountLevel(goodsLevel); | 
 |  |  |                 this.memberMapper.updateById(member); | 
 |  |  |  | 
 |  |  |                 memberWalletService.add(score, member.getId(), "score"); | 
 |  |  |  | 
 |  |  |                 if (orderInfo.getScoreCnt().compareTo(BigDecimal.ZERO) > 0) { | 
 |  |  |                     int reduce = memberWalletService.reduce(orderInfo.getScoreCnt(), member.getId(), "prizeScore"); | 
 |  |  |                     if (reduce == 2) { | 
 |  |  |                         throw new FebsException("积分不足"); | 
 |  |  |                     } | 
 |  |  |                     mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getScoreCnt().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.PRIZE_SCORE.getValue()); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 mallMoneyFlowService.addMoneyFlow(member.getId(), score, MoneyFlowTypeEnum.BUY_TC.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue()); | 
 |  |  |                 mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue()); | 
 |  |  |  | 
 |  |  |                 //发送代理自动升级消息 | 
 |  |  |                 agentProducer.sendAutoLevelUpMsg(member.getId()); | 
 |  |  |                 //发送直推返利消息 | 
 |  |  |                 agentProducer.sendOrderReturn(orderInfo.getId()); | 
 |  |  |                 break; | 
 |  |  |             case "4": | 
 |  |  |                 if (orderInfo.getOrderType() != 2) { | 
 |  |  | 
 |  |  |         map.put("orderNo", orderInfo.getOrderNo()); | 
 |  |  |         map.put("orderId", orderInfo.getId()); | 
 |  |  |         map.put("rcResult", rcResult); | 
 |  |  |  | 
 |  |  |         return map; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |         if (reduce == 2) { | 
 |  |  |             throw new FebsException("余额不足"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         return orderInfo.getOrderNo(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |             获取单个商品的折扣积分数量 | 
 |  |  |                 = 现价 * 数量 * 折扣现金比例 | 
 |  |  |              */ | 
 |  |  |             BigDecimal scorePercent = new BigDecimal(mallGoods.getScorePercent()).multiply(new BigDecimal(0.01)); | 
 |  |  |             BigDecimal scorePercent = new BigDecimal(mallGoods.getScorePercent()).multiply(BigDecimal.valueOf(0.01)); | 
 |  |  |             BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt())).multiply(scorePercent); | 
 |  |  |             total = total.add(amount); | 
 |  |  |         } | 
 
 |  |  | 
 |  |  | 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.common.utils.RedisUtils; | 
 |  |  | import cc.mrbird.febs.mall.dto.ScorePoorDto; | 
 |  |  | import cc.mrbird.febs.mall.entity.*; | 
 |  |  | import cc.mrbird.febs.mall.mapper.*; | 
 |  |  | import cc.mrbird.febs.mall.service.*; | 
 |  |  | import cc.mrbird.febs.mall.vo.AdminTeamEqualsPerkVo; | 
 |  |  | import cc.mrbird.febs.rabbit.producter.AgentProducer; | 
 |  |  | import cn.hutool.core.collection.CollUtil; | 
 |  |  | import cn.hutool.core.date.DateField; | 
 |  |  | import cn.hutool.core.date.DateTime; | 
 |  |  | import cn.hutool.core.date.DateUnit; | 
 |  |  | import cn.hutool.core.date.DateUtil; | 
 |  |  | import cn.hutool.core.util.ObjectUtil; | 
 |  |  | import cn.hutool.core.util.StrUtil; | 
 |  |  | import cn.hutool.json.JSONUtil; | 
 |  |  | import com.alibaba.fastjson.JSONObject; | 
 |  |  | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
 |  |  | import com.baomidou.mybatisplus.core.metadata.IPage; | 
 |  |  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
 |  |  | import io.swagger.models.auth.In; | 
 |  |  | import lombok.RequiredArgsConstructor; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  | 
 |  |  | import java.math.BigDecimal; | 
 |  |  | import java.math.RoundingMode; | 
 |  |  | import java.util.*; | 
 |  |  | import java.util.stream.Collectors; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * @author wzy | 
 |  |  | 
 |  |  |             log.info("积分订单无返利"); | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         BigDecimal indirectPer = BigDecimal.valueOf(0.2); | 
 |  |  |         BigDecimal indirectPer = BigDecimal.valueOf(0.25); | 
 |  |  |         BigDecimal indirectPer2 = BigDecimal.valueOf(0.15); | 
 |  |  |  | 
 |  |  |         MallMember member = mallMemberMapper.selectById(orderInfo.getMemberId()); | 
 |  |  |  | 
 |  |  |         // 父级会员 | 
 |  |  |         MallMember parentMember = mallMemberMapper.selectInfoByInviteId(member.getReferrerId()); | 
 |  |  |         if (parentMember.getAccountLevel() == 0 || MemberLevelEnum.ZERO_LEVEL.getType().equals(parentMember.getLevel())) { | 
 |  |  |             log.info("上级:{}未购买会员套餐,无返利", parentMember.getInviteId()); | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // 父级会员直推人数 | 
 |  |  |         Integer directCnt = mallMemberMapper.selectOwnCntByInviteId(parentMember.getInviteId()); | 
 |  |  |         Integer directCnt = mallMemberMapper.selectOwnCntByInviteIdAndAccountLevel(parentMember.getInviteId(), parentMember.getAccountLevel()); | 
 |  |  |         List<DataDictionaryCustom> dataDices = dataDictionaryCustomMapper.selectDicByType(DataDictionaryEnum.DIRECT_BONUS_SETTING.getType()); | 
 |  |  |  | 
 |  |  |         directCnt = directCnt == null ? 0 : directCnt; | 
 |  |  | 
 |  |  |  | 
 |  |  |         // 全网分红 | 
 |  |  |         BigDecimal waitToBonus = systemSetting.getAllBonus().multiply(new BigDecimal(dic.getValue()).divide(hundred, 2, RoundingMode.HALF_UP)); | 
 |  |  |         List<MallMember> mallMembers = mallMemberMapper.selectMemberAfterLevelList(MemberLevelEnums.FIRST_LEVEL_Y.getCode()); | 
 |  |  |         List<MallMember> mallMembers = mallMemberMapper.selectMemberAfterLevelList(MemberLevelEnum.FIRST_LEVEL.getType()); | 
 |  |  |         if (CollUtil.isEmpty(mallMembers) || waitToBonus.compareTo(BigDecimal.ZERO) < 1) { | 
 |  |  |             log.info("待分红金额不足或会员不足"); | 
 |  |  |             return; | 
 
 |  |  | 
 |  |  | package cc.mrbird.febs.mall.vo; | 
 |  |  |  | 
 |  |  | import cc.mrbird.febs.common.enumerates.AgentLevelEnum; | 
 |  |  | import cc.mrbird.febs.common.enumerates.MemberLevelEnums; | 
 |  |  | import cn.hutool.core.util.StrUtil; | 
 |  |  | import cc.mrbird.febs.common.enumerates.MemberLevelTagDicEnums; | 
 |  |  | import com.fasterxml.jackson.annotation.JsonFormat; | 
 |  |  | import io.swagger.annotations.ApiModel; | 
 |  |  | import io.swagger.annotations.ApiModelProperty; | 
 |  |  | 
 |  |  |  | 
 |  |  |     public String getLevelName() { | 
 |  |  |         if (sex != null) { | 
 |  |  |             return MemberLevelEnums.getDesc(sex, level); | 
 |  |  |             return MemberLevelTagDicEnums.getDesc(sex, level); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return null; | 
 
 |  |  | 
 |  |  |  * @date 2021-09-25 | 
 |  |  |  **/ | 
 |  |  | @Slf4j | 
 |  |  | @Component | 
 |  |  | //@Component | 
 |  |  | public class AgentConsumer { | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  | 
 |  |  |     private IAgentService agentService; | 
 |  |  |     @Autowired | 
 |  |  |     private IMemberProfitService memberProfitService; | 
 |  |  |  | 
 |  |  |     @RabbitListener(queues = QueueConstants.QUEUE_DEFAULT) | 
 |  |  |     public void agentReturn(Message message, Channel channel) { | 
 |  |  |         log.info("消费者:{}", new String(message.getBody())); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RabbitListener(queues = "meye_queue_order_delay") | 
 |  |  |     public void orderCancelDelay(String id) { | 
 |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RabbitListener(queues = QueueConstants.AGENT_RETURN_MONEY) | 
 |  |  |     public void agentReturnMoney(String orderId) { | 
 |  |  |         log.info("收到返利消息:{}", orderId); | 
 |  |  |         try { | 
 |  |  |             agentService.returnMoneyToAgent(Long.parseLong(orderId)); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("返利异常", e); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RabbitListener(queues = QueueConstants.ORDER_RETURN_MONEY) | 
 |  |  |     public void orderReturnMoney(String orderId) { | 
 |  |  |         log.info("收到订单返利消息:{}", orderId); | 
 |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RabbitListener(queues = QueueConstants.PERK_MONEY) | 
 |  |  |     public void perkMoneyConsumer(String id) { | 
 |  |  |         log.info("收到补贴消息:{}", id); | 
 |  |  |         try { | 
 |  |  |             agentService.perkMoneyConsumer(Long.parseLong(id)); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("用户补贴异常", e); | 
 |  |  |             // todo 更新表 | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RabbitListener(queues = QueueConstants.FORCE_VOUCHER_SALE) | 
 |  |  |     public void forceVoucherSaleConsumer(String price) { | 
 |  |  |         log.info("收到强制卖出消息,价格:{}",price); | 
 |  |  |         try { | 
 |  |  | //            memberProfitService.selaHalfVoucher(prisce); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("强制卖出异常", e); | 
 |  |  |             // todo 更新表 | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | } | 
 
 |  |  | 
 |  |  |             a.account_level = 3 | 
 |  |  |         </if> | 
 |  |  |     </select> | 
 |  |  |  | 
 |  |  |     <select id="selectOwnCntByInviteIdAndAccountLevel" resultType="cc.mrbird.febs.mall.entity.MallMember"> | 
 |  |  |         select IFNULL(count(1),0) from mall_member x where x.referrer_id=#{inviteId} | 
 |  |  |         and x.level != 'ZERO_LEVEL' | 
 |  |  |         <if test="accountLevel == 2"> | 
 |  |  |             and x.account_level = 2 | 
 |  |  |         </if> | 
 |  |  |         <if test="accountLevel == 3"> | 
 |  |  |             and x.accountLevel in (2, 3) | 
 |  |  |         </if> | 
 |  |  |     </select> | 
 |  |  | </mapper> | 
 
 |  |  | 
 |  |  |                                                 <div class="layui-form-mid layui-word-aux">普通商品直推奖励</div> | 
 |  |  |                                             </div> | 
 |  |  |                                         </div> | 
 |  |  |                                         <div class="layui-form-item normal-set"> | 
 |  |  |                                             <label class="layui-form-label febs-form-item-require">分红比例(%)</label> | 
 |  |  |                                             <div class="layui-input-block"> | 
 |  |  |                                                 <input type="text" name="normalPer" placeholder="请输入分红比例" | 
 |  |  |                                                        autoComplete="off" class="layui-input"> | 
 |  |  |                                                 <div class="layui-form-mid layui-word-aux">普通商品分红,输入0则不分红。</div> | 
 |  |  |                                             </div> | 
 |  |  |                                         </div> | 
 |  |  |                                     </div> | 
 |  |  |  | 
 |  |  |                                     <div class="layui-tab-item"> | 
 
 |  |  | 
 |  |  |                                                 <div class="layui-form-mid layui-word-aux">普通商品直推奖励</div> | 
 |  |  |                                             </div> | 
 |  |  |                                         </div> | 
 |  |  |  | 
 |  |  |                                         <div class="layui-form-item normal-set"> | 
 |  |  |                                             <label class="layui-form-label febs-form-item-require">分红比例(%)</label> | 
 |  |  |                                             <div class="layui-input-block"> | 
 |  |  |                                                 <input type="text" name="normalPer" placeholder="请输入分红比例" | 
 |  |  |                                                        autoComplete="off" class="layui-input"> | 
 |  |  |                                                 <div class="layui-form-mid layui-word-aux">普通商品分红,输入0则不分红。</div> | 
 |  |  |                                             </div> | 
 |  |  |                                         </div> | 
 |  |  |                                     </div> | 
 |  |  |  | 
 |  |  |                                     <div class="layui-tab-item"> |