From 387515b2c1e8894fe92328fc329771aab1700f07 Mon Sep 17 00:00:00 2001 From: Hentua <wangdoubleone@gmail.com> Date: Fri, 07 Apr 2023 18:36:26 +0800 Subject: [PATCH] fix --- src/main/java/cc/mrbird/febs/mall/service/impl/CommonService.java | 232 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 228 insertions(+), 4 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/CommonService.java b/src/main/java/cc/mrbird/febs/mall/service/impl/CommonService.java index ad5ce73..811d271 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/CommonService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/CommonService.java @@ -1,18 +1,32 @@ package cc.mrbird.febs.mall.service.impl; +import cc.mrbird.febs.common.enumerates.AgentLevelEnum; +import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; +import cc.mrbird.febs.common.enumerates.FlowTypeEnum; +import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; +import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.AppContants; import cc.mrbird.febs.common.utils.RedisUtils; -import cc.mrbird.febs.mall.entity.AppVersion; -import cc.mrbird.febs.mall.entity.DataDictionaryCustom; -import cc.mrbird.febs.mall.mapper.AppVersionMapper; -import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper; +import cc.mrbird.febs.mall.entity.*; +import cc.mrbird.febs.mall.mapper.*; +import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.ICommonService; +import cc.mrbird.febs.mall.service.IMallAchieveService; +import cc.mrbird.febs.mall.service.IMallMoneyFlowService; +import cc.mrbird.febs.pay.service.IAliPayService; +import cc.mrbird.febs.pay.service.IPayService; +import cc.mrbird.febs.pay.service.UnipayService; +import cc.mrbird.febs.rabbit.producter.AgentProducer; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.Date; import java.util.List; /** @@ -26,6 +40,15 @@ private final RedisUtils redisUtils; private final DataDictionaryCustomMapper dataDictionaryCustomMapper; private final AppVersionMapper appVersionMapper; + + + private final MallGoodsMapper mallGoodsMapper; + private final MallMemberMapper memberMapper; + private final IApiMallMemberWalletService memberWalletService; + private final IMallMoneyFlowService mallMoneyFlowService; + private final MallAchieveRecordMapper mallAchieveRecordMapper; + private final MallMemberWalletMapper mallMemberWalletMapper; + private final MallOrderInfoMapper mallOrderInfoMapper; @Override public boolean verifyCode(String account, String code) { @@ -82,4 +105,205 @@ dataDictionaryCustomMapper.updateById(dic); } } + + /** + * 支付金额后的操作 + * 减少积分,增加流水 + * 购买套餐后,升级会员等级 + * 增加支付金额流水 + * 增加补贴额度 + * 增加贡献值,增加流水 + * 产生一条业绩记录 + * @param orderId + */ + @Override + public void changeWallet(Long orderId, int payType) { + MallOrderInfo orderInfo = this.mallOrderInfoMapper.selectById(orderId); + Long memberId = orderInfo.getMemberId(); + boolean hasTc = false; + //总贡献值 + BigDecimal starSum = BigDecimal.ZERO; + /** + * 总补贴额度 + * 所有合伙人补贴至消费礼包的三倍额度需要复购一次。 + */ + BigDecimal scoreSum = BigDecimal.ZERO; + BigDecimal achieveSum = BigDecimal.ZERO; + List<MallOrderItem> orderItems = this.mallOrderInfoMapper.getMallOrderItemByOrderId(orderInfo.getId()); + if (CollUtil.isNotEmpty(orderItems)) { + for (MallOrderItem orderItem : orderItems) { + MallGoods mallGoods = mallGoodsMapper.selectById(orderItem.getGoodsId()); + /** + * 购买套餐赠送贡献值 + * 补贴3倍额度 + */ + if (mallGoods.getIsNormal() == 2) { + hasTc = true; + BigDecimal star = (mallGoods.getStar()==null ? BigDecimal.ZERO : mallGoods.getStar()) + .multiply(new BigDecimal(orderItem.getCnt())); + starSum = starSum.add(star); +// scoreSum = scoreSum.add( +// new BigDecimal(mallGoods.getPresentPrice()) +// .multiply(new BigDecimal(3)) +// .multiply(new BigDecimal(orderItem.getCnt())) +// .abs() +// .setScale(2,BigDecimal.ROUND_DOWN)); + String goodsName = mallGoods.getGoodsName(); + /** + * 1-2档投资级别,2.5倍 + * 3-4档投资级别,2.8倍 + * 5-6档投资级别,3倍 + * 目前紧急修改成按照商品名称 + */ + BigDecimal basePercent = new BigDecimal("3"); + if(goodsName.equals("礼包一") || goodsName.equals("礼包二")){ + basePercent = new BigDecimal("2.5"); + } + if(goodsName.equals("礼包三") || goodsName.equals("礼包四")){ + basePercent = new BigDecimal("2.8"); + } + if(goodsName.equals("礼包五") || goodsName.equals("礼包六")){ + basePercent = new BigDecimal("3"); + } + scoreSum = scoreSum.add( + new BigDecimal(mallGoods.getPresentPrice()) + .multiply(new BigDecimal(orderItem.getCnt())) + .multiply(basePercent) + .abs() + .setScale(2,BigDecimal.ROUND_DOWN)); + achieveSum = achieveSum.add( + new BigDecimal(mallGoods.getPresentPrice()) + .multiply(new BigDecimal(orderItem.getCnt())) + .abs() + .setScale(2,BigDecimal.ROUND_DOWN)); + } + } + /** + * 增加贡献值,增加流水 + */ + if (starSum.compareTo(BigDecimal.ZERO) > 0) { + //系统设置的个人贡献点最大值 + DataDictionaryCustom starGetDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.STAR_GET.getType(), + DataDictionaryEnum.STAR_GET.getCode()); + if(ObjectUtil.isNotEmpty(starGetDic)){ + String starGetStr = StrUtil.isEmpty(starGetDic.getValue()) ? "0" : starGetDic.getValue(); + BigDecimal starGet = new BigDecimal(starGetStr); + + MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); + BigDecimal star = new BigDecimal(mallMemberWallet.getStar()); + if(starGet.compareTo(star.add(starSum)) < 0){ + if(starGet.compareTo(BigDecimal.ZERO) == 0){ + mallMemberWalletMapper.addStarByMemberId(starSum.intValue(), memberId); + mallMoneyFlowService.addMoneyFlow( + memberId, + starSum, + MoneyFlowTypeEnum.STAR.getValue(), + orderInfo.getOrderNo(), + FlowTypeEnum.STAR.getValue(), + 2); + } + if(starGet.compareTo(star) > 0){ + BigDecimal subtract = starGet.subtract(star); + if(subtract.compareTo(starSum) < 0){ + starSum = subtract; + } + mallMemberWalletMapper.addStarByMemberId(starSum.intValue(), memberId); + mallMoneyFlowService.addMoneyFlow( + memberId, + starSum, + MoneyFlowTypeEnum.STAR.getValue(), + orderInfo.getOrderNo(), + FlowTypeEnum.STAR.getValue(), + 2); + } + }else{ + mallMemberWalletMapper.addStarByMemberId(starSum.intValue(), memberId); + mallMoneyFlowService.addMoneyFlow( + memberId, + starSum, + MoneyFlowTypeEnum.STAR.getValue(), + orderInfo.getOrderNo(), + FlowTypeEnum.STAR.getValue(), + 2); + } + } + } + /** + * 增加补贴额度 + */ + if (scoreSum.compareTo(BigDecimal.ZERO) > 0) { +// MallMember mallMember = memberMapper.selectById(memberId); +// if(MemberLevelEnum.SECOND_LEVEL.getLevelCode(mallMember.getLevel()) >= 5){ +// scoreSum = scoreSum.multiply(new BigDecimal(3)); +// } +// if(MemberLevelEnum.SECOND_LEVEL.getLevelCode(mallMember.getLevel()) >= 3 +// &&MemberLevelEnum.SECOND_LEVEL.getLevelCode(mallMember.getLevel()) < 5){ +// scoreSum = scoreSum.multiply(new BigDecimal(2.8)); +// } +// if(MemberLevelEnum.SECOND_LEVEL.getLevelCode(mallMember.getLevel()) < 3){ +// scoreSum = scoreSum.multiply(new BigDecimal(2.5)); +// } + memberWalletService.add(scoreSum, memberId, "totalScore"); + mallMoneyFlowService.addMoneyFlow( + memberId, + scoreSum, + MoneyFlowTypeEnum.TOTAL_SCORE.getValue(), + orderInfo.getOrderNo(), + "", + scoreSum.toString(), + memberId, + 1, + FlowTypeEnum.TOTAL_SCORE.getValue(), + 2); + } + } + + /** + * 购买套餐后,升级会员等级 + */ + if (hasTc) { + MallMember mallMember = memberMapper.selectById(memberId); + if (AgentLevelEnum.ZERO_LEVEL.name().equals(mallMember.getLevel())) { + mallMember.setLevel(AgentLevelEnum.SECOND_LEVEL.name()); + memberMapper.updateById(mallMember); + } + } + /** + * 增加支付金额流水 + */ + mallMoneyFlowService.addMoneyFlow( + memberId, + orderInfo.getAmount().subtract(orderInfo.getScoreAmount()).negate(), + MoneyFlowTypeEnum.PAY.getValue(), + orderInfo.getOrderNo(), + payType); + /** + * 减少积分,增加流水 + */ + if (orderInfo.getScoreCnt().compareTo(BigDecimal.ZERO) > 0) { + int reduce = memberWalletService.reduce(orderInfo.getScoreCnt(), memberId, "prizeScore"); + if (reduce == 2) { + throw new FebsException("积分不足"); + } + mallMoneyFlowService.addMoneyFlow( + memberId, + orderInfo.getScoreCnt().negate(), + MoneyFlowTypeEnum.PAY.getValue(), + orderInfo.getOrderNo(), + FlowTypeEnum.PRIZE_SCORE.getValue()); + } + /** + * 产生一条业绩记录 + */ + if(achieveSum.compareTo(BigDecimal.ZERO) > 0){ + MallAchieveRecord mallAchieveRecord = new MallAchieveRecord(); + mallAchieveRecord.setMemberId(memberId); + mallAchieveRecord.setAchieveTime(new Date()); + mallAchieveRecord.setAmount(achieveSum.subtract(orderInfo.getScoreAmount())); + mallAchieveRecord.setOrderId(orderId); + mallAchieveRecord.setPayTime(orderInfo.getPayTime()); + mallAchieveRecordMapper.insert(mallAchieveRecord); + } + } } -- Gitblit v1.9.1