wujiefeng 8 kuukautta sitten
vanhempi
commit
2f5140fd6d

+ 16 - 2
RewardServer/pom.xml

@@ -32,32 +32,35 @@
 			<version>${project.version}</version>
 		</dependency>
 
-
+		<!--小程序用户端-->
 		<dependency>
 			<groupId>com.zswl.cloud.bdb</groupId>
 			<artifactId>zswl-cloud-bdb-client</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
+		<!--小程序商户端-->
 		<dependency>
 			<groupId>com.zswl.cloud.shop</groupId>
 			<artifactId>zswl-cloud-shop-client</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
+		<!--会员中心-->
 		<dependency>
 			<groupId>com.zhongshu</groupId>
 			<artifactId>VipClient</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
-
+		<!--mongoData-->
 		<dependency>
 			<groupId>com.github.microservice.components</groupId>
 			<artifactId>MongodbData</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
+		<!--redis-->
 		<dependency>
 			<groupId>com.github.microservice.components</groupId>
 			<artifactId>RedisData</artifactId>
@@ -76,6 +79,7 @@
             <version>3.14.0</version>
             <scope>compile</scope>
         </dependency>
+
         <dependency>
             <groupId>com.zhongshu</groupId>
             <artifactId>RewardClient</artifactId>
@@ -98,12 +102,14 @@
             <version>2.0.38</version>
         </dependency>
 
+		<!--推送中心-->
 		<dependency>
 			<groupId>com.github.microservice.components</groupId>
 			<artifactId>PushCenterClient</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
+		<!--jedis-->
 		<dependency>
 			<groupId>redis.clients</groupId>
 			<artifactId>jedis</artifactId>
@@ -116,12 +122,20 @@
 			<version>${project.version}</version>
 		</dependency>
 
+		<!--产品中心-->
 		<dependency>
 			<groupId>com.github.microservice.encryption</groupId>
 			<artifactId>ProductCenterClient</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
+		<!--支付中心-->
+		<dependency>
+			<groupId>com.zhongshu</groupId>
+			<artifactId>PaymentClient</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
 <!--		<dependency>-->
 <!--			<groupId>org.redisson</groupId>-->
 <!--			<artifactId>redisson-spring-boot-starter</artifactId>-->

+ 14 - 0
RewardServer/src/main/java/com/zhongshu/reward/server/core/config/PaymentConfig.java

@@ -0,0 +1,14 @@
+package com.zhongshu.reward.server.core.config;
+
+import com.zhongshu.payment.client.config.PaymentClientConfiguration;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+/**
+ * @author wjf
+ * @date 2024/9/14
+ */
+@Configuration
+@Import(PaymentClientConfiguration.class)
+public class PaymentConfig {
+}

+ 1 - 1
RewardServer/src/main/java/com/zhongshu/reward/server/core/dao/WalletReceiptsDao.java

@@ -23,6 +23,6 @@ public interface WalletReceiptsDao extends MongoDao<WalletReceipts>, WalletRecei
 
     WalletReceipts findTop1ByVipUserRecord_Id(String vipUserRecordId);
 
-    List<WalletReceipts> findByOutTradeNoAndGoodsIdInAndStatus(String outTradeNo, List<String> goodsIds, ReceiptsStatus status);
+    WalletReceipts findByOutTradeNoAndPaymentGoodsIdAndStatus(String outTradeNo, String paymentGoodsId, ReceiptsStatus status);
 
 }

+ 7 - 1
RewardServer/src/main/java/com/zhongshu/reward/server/core/domain/WalletReceipts.java

@@ -80,11 +80,17 @@ public class WalletReceipts extends SuperEntity {
     private String outTradeNo;
 
     /**
-     * 外部订单号(商品返利:商品id)
+     * 外部订单号(商品返利:商品id:对应产品库id)
      */
     @Indexed
     private String goodsId;
 
+    /**
+     * 对应支付中心业务id
+     */
+    @Indexed
+    private String paymentGoodsId;
+
     /**
      * 产生入账的订阅消息
      */

+ 34 - 21
RewardServer/src/main/java/com/zhongshu/reward/server/core/service/GoodsReceiptsService.java

@@ -1,9 +1,11 @@
 package com.zhongshu.reward.server.core.service;
 
+import com.github.microservice.auth.client.content.ResultState;
 import com.github.microservice.productcenter.client.model.ProductRuleModel;
 import com.github.microservice.productcenter.client.ret.ResultContent;
-import com.github.microservice.productcenter.client.ret.ResultState;
 import com.github.microservice.productcenter.client.service.ProductRuleService;
+import com.zhongshu.payment.client.model.order.v2.GoodsResultModel;
+import com.zhongshu.payment.client.service.v2.OrderService2;
 import com.zhongshu.reward.client.type.ReceiptsStatus;
 import com.zhongshu.reward.client.type.ReceiptsType;
 import com.zhongshu.reward.server.core.dao.WalletDao;
@@ -11,6 +13,7 @@ import com.zhongshu.reward.server.core.dao.WalletReceiptsDao;
 import com.zhongshu.reward.server.core.domain.Wallet;
 import com.zhongshu.reward.server.core.domain.WalletReceipts;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,32 +45,46 @@ public class GoodsReceiptsService {
     @Autowired
     ProductRuleService productRuleService;
 
+    @Autowired
+    OrderService2 orderService2;
+
     /**
      * 购物返利 todo// 1、获取产品库 返利规则 2、获取订单详情、获取商品详情
-     * @param userId 用户id
-     * @param goodsTotal 商品金额
-     * @param orderNo 订单号
-     * @param goodsId 商品id
      */
     @Transactional
-    public void receipts(String userId, BigDecimal goodsTotal, String orderNo, String goodsId){
+    public void receipts(String userId, String orderNo, String payGoodsId, Long operationTime){
 
-        ProductRuleModel productRule = getRule(goodsId);
+        com.github.microservice.auth.client.content.ResultContent<GoodsResultModel> goodsResultModelResultContent = orderService2.qrGoods(payGoodsId);
+        if (!ResultState.Success.equals(goodsResultModelResultContent.getState())){
+            log.info("查询商品信息失败:id:{}", payGoodsId);
+            return;
+        }
+        GoodsResultModel goodsResultModel = goodsResultModelResultContent.getContent();
+        if (StringUtils.isEmpty(goodsResultModel.getGoodsId())){
+            log.info("商品无对应产品库id:{}", payGoodsId);
+            return;
+        }
+        ProductRuleModel productRule = getRule(goodsResultModel.getGoodsId());
         if (null == productRule){
             return;
         }
 
-        BigDecimal total = getReceiptsTotal(goodsTotal, productRule);
+        BigDecimal total = getReceiptsTotal(goodsResultModel.getPayAmount(), productRule);
+        if (BigDecimal.ZERO.compareTo(total) == 0){
+            log.info("商品返利金额为0, id:{}, productId:{}", payGoodsId, goodsResultModel.getGoodsId());
+            return;
+        }
 
         Wallet wallet = walletService.getWalletByUserId(userId);
 
         WalletReceipts walletReceipts = new WalletReceipts();
         walletReceipts.setWallet(wallet);
         walletReceipts.setReceiptsType(ReceiptsType.REBATE);
-        walletReceipts.setEstimatedTime(new Date().getTime() + 2*24*60*60*1000);
+        walletReceipts.setEstimatedTime(operationTime + 2*24*60*60*1000);
         walletReceipts.setTotal(total);
         walletReceipts.setOutTradeNo(orderNo);
-        walletReceipts.setGoodsId(goodsId);
+        walletReceipts.setGoodsId(goodsResultModel.getGoodsId());
+        walletReceipts.setPaymentGoodsId(payGoodsId);
         walletReceipts.setStatus(ReceiptsStatus.WAIT);
 
         walletReceiptsDao.save(walletReceipts);
@@ -104,21 +121,17 @@ public class GoodsReceiptsService {
 
     /**
      * 取消购物返利
-     * @param userId 用户id
      * @param orderNo 订单号
-     * @param goodsIds 商品id
      */
     @Transactional
-    public void cancel(String userId, String orderNo, List<String> goodsIds){
-        BigDecimal total = BigDecimal.ZERO;
-        Wallet wallet = walletService.getWalletByUserId(userId);
-        List<WalletReceipts> walletReceiptsList = walletReceiptsDao.findByOutTradeNoAndGoodsIdInAndStatus(orderNo, goodsIds, ReceiptsStatus.WAIT);
-        for (WalletReceipts it : walletReceiptsList){
-            total = total.add(it.getTotal());
-            it.setStatus(ReceiptsStatus.CANCEL);
+    public void cancel(String orderNo, String payGoodsId, Long operateTime){
+        WalletReceipts walletReceipts = walletReceiptsDao.findByOutTradeNoAndPaymentGoodsIdAndStatus(orderNo, payGoodsId, ReceiptsStatus.WAIT);
+        if (operateTime > walletReceipts.getEstimatedTime()){
+            return;
         }
-        walletReceiptsDao.saveAll(walletReceiptsList);
-        walletDao.updateIncWaitAmount(wallet.getId(), total.negate());
+        walletReceipts.setStatus(ReceiptsStatus.CANCEL);
+        walletReceiptsDao.save(walletReceipts);
+        walletDao.updateIncWaitAmount(walletReceipts.getWallet().getId(), walletReceipts.getTotal().negate());
     }
 
     /**

+ 22 - 1
RewardServer/src/main/java/com/zhongshu/reward/server/core/stream/OrderStream.java

@@ -2,14 +2,35 @@ package com.zhongshu.reward.server.core.stream;
 
 import com.github.microservice.app.stream.StreamConsumer;
 import com.zhongshu.payment.client.model.order.v2.OrderStremModel;
+import com.zhongshu.payment.client.type.OrderType;
+import com.zhongshu.reward.server.core.service.GoodsReceiptsService;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
 
 /**
  * @author wjf
  * @date 2024/8/22
  */
+@Log4j2
+@Component("orderStreamConsumer")
 public class OrderStream extends StreamConsumer<OrderStremModel> {
+
+    @Autowired
+    GoodsReceiptsService goodsReceiptsService;
+
     @Override
     public void accept(OrderStremModel orderStremModel) {
-        
+        switch (orderStremModel.getOrderType()) {
+            case USED:
+                goodsReceiptsService.receipts(orderStremModel.getUserId(), orderStremModel.getOrderNo(), orderStremModel.getGoodsId(), orderStremModel.getOperationTime());
+                break;
+            case REFUNDED:
+                goodsReceiptsService.cancel(orderStremModel.getOrderNo(), orderStremModel.getGoodsId(), orderStremModel.getOperationTime());
+                break;
+        }
     }
+
 }