From 24a0c40654afc75c9da879ebb4c9a4c93c57e806 Mon Sep 17 00:00:00 2001
From: Hentua <wangdoubleone@gmail.com>
Date: Wed, 07 Jun 2023 12:00:54 +0800
Subject: [PATCH] 微信支付

---
 src/main/java/cc/mrbird/febs/pay/service/impl/WxPayServiceImpl.java             |   60 ++++++++++++++++++++----------
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java |    8 ++++
 src/main/resources/cert/apiclient_cert.p12                                      |    0 
 src/main/resources/application-dev.yml                                          |    4 +-
 src/main/resources/application-prod.yml                                         |    4 +-
 5 files changed, 52 insertions(+), 24 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index 601198a..e63d158 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -303,6 +303,14 @@
                     orderInfo.setName(itemsWx.get(0).getGoodsName());
                 }
 
+                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());
+                }
+
                 payResultStr = wechatPayService.pay(orderInfo);
                 orderInfo.setPayOrderNo(payResultStr);
                 orderInfo.setPayMethod("微信支付");
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 db57367..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
@@ -2,16 +2,16 @@
 
 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.IApiMallOrderInfoService;
-import cc.mrbird.febs.mall.service.ICommonService;
+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;
@@ -47,9 +47,6 @@
 public class WxPayServiceImpl implements IPayService {
 
     @Autowired
-    private ICommonService commonService;
-
-    @Autowired
     private MallOrderInfoMapper orderInfoMapper;
 
     @Autowired
@@ -59,10 +56,16 @@
     private WxPayProperties wxPayProperties;
 
     @Autowired
-    private MallMqRecordMapper mallMqRecordMapper;
+    private AgentProducer agentProducer;
 
     @Autowired
-    private AgentProducer agentProducer;
+    private IMallAchieveService mallAchieveService;
+
+    @Autowired
+    private IApiMallMemberService mallMemberService;
+
+    @Autowired
+    private IApiMallMemberWalletService memberWalletService;
 
     @Value("${spring.profiles.active}")
     private String active;
@@ -112,20 +115,37 @@
         orderInfo.setPayTradeNo(params.get("transaction_id"));
         orderInfoMapper.updateById(orderInfo);
 
-        commonService.changeWallet(orderInfo.getId(), FlowTypeEnum.WECHAT.getValue());
+        MallMember member = mallMemberService.getById(orderInfo.getMemberId());
 
-        /**
-         * 插入一条待处理记录
-         * mq处理之后,更新状态
-         */
-        MallMqRecord mallMqRecord = new MallMqRecord();
-        mallMqRecord.setOrderId(orderInfo.getId());
-        mallMqRecord.setState(2);
-        mallMqRecord.setRetryTimes(2);
-        mallMqRecordMapper.insert(mallMqRecord);
-        //发送补贴消息
-        agentProducer.sendPerkMoneyMsg(orderInfo.getId());
+        // 商品级别 会员/代理/股东
+        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());
     }
 }
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 8e37baf..4d1dc95 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -65,6 +65,6 @@
   wx:
     appId: wxf895404f2b7c401b
     mchId: 1646242135
-    mchKey: wqri51aCfiG31o4IcdX3dW12qnX3u4hp
+    mchKey: XGu1Dur1phUph43uajbDlhfikAebr4iD
     keyPath: classpath:cert/apiclient_cert.p12
-    noticeUrl: http://120.27.238.55:8185/api/pay/wxPayCallBack
\ No newline at end of file
+    noticeUrl: http://120.27.238.55:8188/api/pay/wxPayCallBack
\ No newline at end of file
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index f6a4531..46e0357 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -61,6 +61,6 @@
   wx:
     appId: wxf895404f2b7c401b
     mchId: 1646242135
-    mchKey: wqri51aCfiG31o4IcdX3dW12qnX3u4hp
+    mchKey: XGu1Dur1phUph43uajbDlhfikAebr4iD
     keyPath: classpath:cert/apiclient_cert.p12
-    noticeUrl: https://hlm.meiao.biz/api/pay/wxPayCallBack
+    noticeUrl: https://api-gcsm.meiao.biz/api/pay/wxPayCallBack
diff --git a/src/main/resources/cert/apiclient_cert.p12 b/src/main/resources/cert/apiclient_cert.p12
index 3bc1879..463502d 100644
--- a/src/main/resources/cert/apiclient_cert.p12
+++ b/src/main/resources/cert/apiclient_cert.p12
Binary files differ

--
Gitblit v1.9.1