From 8bf923b44bbe9b45b73ddcc25df75c9c59f54e07 Mon Sep 17 00:00:00 2001 From: Hentua <wangdoubleone@gmail.com> Date: Thu, 15 Jun 2023 11:19:44 +0800 Subject: [PATCH] fix --- src/main/java/cc/mrbird/febs/pay/service/impl/WxPayServiceImpl.java | 61 ++++++++++++++++++++++++++++-- 1 files changed, 56 insertions(+), 5 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/pay/service/impl/WxPayServiceImpl.java b/src/main/java/cc/mrbird/febs/pay/service/impl/WxPayServiceImpl.java index 9af7d05..b0fa8fc 100644 --- a/src/main/java/cc/mrbird/febs/pay/service/impl/WxPayServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/pay/service/impl/WxPayServiceImpl.java @@ -1,14 +1,20 @@ package cc.mrbird.febs.pay.service.impl; import cc.mrbird.febs.common.enumerates.AgentLevelEnum; +import cc.mrbird.febs.common.enumerates.FlowTypeEnum; +import cc.mrbird.febs.common.enumerates.GoodsToLevelEnums; import cc.mrbird.febs.common.enumerates.OrderStatusEnum; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.mall.entity.MallMember; +import cc.mrbird.febs.mall.entity.MallMqRecord; import cc.mrbird.febs.mall.entity.MallOrderInfo; +import cc.mrbird.febs.mall.entity.MallOrderItem; +import cc.mrbird.febs.mall.mapper.MallMqRecordMapper; import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; -import cc.mrbird.febs.mall.service.IApiMallMemberService; +import cc.mrbird.febs.mall.service.*; import cc.mrbird.febs.pay.properties.WxPayProperties; import cc.mrbird.febs.pay.service.IPayService; +import cc.mrbird.febs.rabbit.producter.AgentProducer; import cn.hutool.core.date.DateField; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUnit; @@ -25,6 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.Date; @@ -40,8 +47,6 @@ public class WxPayServiceImpl implements IPayService { @Autowired - private IApiMallMemberService memberService; - @Autowired private MallOrderInfoMapper orderInfoMapper; @Autowired @@ -49,6 +54,18 @@ @Autowired private WxPayProperties wxPayProperties; + + @Autowired + private AgentProducer agentProducer; + + @Autowired + private IMallAchieveService mallAchieveService; + + @Autowired + private IApiMallMemberService mallMemberService; + + @Autowired + private IApiMallMemberWalletService memberWalletService; @Value("${spring.profiles.active}") private String active; @@ -68,7 +85,7 @@ if ("dev".equals(active) || "test".equals(active)) { request.setTotalFee(1); } else { - request.setTotalFee(orderInfo.getAmount().multiply(new BigDecimal(100)).intValue()); + request.setTotalFee(orderInfo.getAmount().subtract(orderInfo.getScoreAmount()).multiply(new BigDecimal(100)).intValue()); } try { @@ -81,8 +98,9 @@ } @Override + @Transactional(rollbackFor = Exception.class) public void payCallback(Map<String, String> params) { - String orderNo = params.get("outTradeNo"); + String orderNo = params.get("out_trade_no"); LambdaQueryWrapper<MallOrderInfo> query = new LambdaQueryWrapper<>(); query.eq(MallOrderInfo::getOrderNo, orderNo); @@ -96,5 +114,38 @@ orderInfo.setPayTime(new Date()); orderInfo.setPayTradeNo(params.get("transaction_id")); orderInfoMapper.updateById(orderInfo); + + MallMember member = mallMemberService.getById(orderInfo.getMemberId()); + + // 商品级别 会员/代理/股东 + int goodsLevel = 0; + BigDecimal score = BigDecimal.ZERO; + for (MallOrderItem item : orderInfo.getItems()) { + // 计算静态倍数 + if(item.getIsNormal() == 2) { + score = score.add(item.getPrice().multiply(item.getStaticMulti())); + } + + // 判断会员层级 + if (item.getIsNormal() == 2 && goodsLevel < item.getGoodsLevel()) { + goodsLevel = item.getGoodsLevel(); + } + + mallAchieveService.add(item.getId()); + } + + // 根据用户购买的商品设置其等级 + member.setLevel(GoodsToLevelEnums.getLevelByAccountLevel(goodsLevel)); + member.setAccountLevel(goodsLevel); + this.mallMemberService.updateById(member); + + memberWalletService.add(score, member.getId(), "score"); + + //发送代理自动升级消息 + agentProducer.sendAutoLevelUpMsg(orderInfo.getMemberId()); + //发送直推返利消息 + agentProducer.sendOrderReturn(orderInfo.getId()); + // 发送分红消息 + agentProducer.sendOrderBonus(orderInfo.getId()); } } -- Gitblit v1.9.1