Bläddra i källkod

修改开发服务器地址

skyline 10 månader sedan
förälder
incheckning
636f9709b4

+ 2 - 2
car-wash-miniapp/src/main/resources/application-dev.yml

@@ -15,14 +15,14 @@ spring:
       idle-timeout: 60000
       connection-timeout: 10000
       validation-timeout: 3000
-    url: jdbc:mysql://183.234.100.174:3306/car_wash?serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true&allowMultiQueries=true
+    url: jdbc:mysql://server.kuaiyuman.cn:3306/car_wash?serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true&allowMultiQueries=true
     username: root
     password: KuaiyuMan/*-
     driver-class-name: com.mysql.cj.jdbc.Driver
   data:
     redis:
       port: 6379
-      host: 183.234.100.174
+      host: server.kuaiyuman.cn
       password: KtXA^Zx!TZmLEy(@JjB@2(TVG0kdy5)&
       database: 11
       lettuce:

+ 59 - 0
car-wash-miniapp/src/main/resources/application-prod.yml

@@ -0,0 +1,59 @@
+# 微信支付
+wechat:
+  payment:
+    notifyUrl: https://dev-wash.kuaiyuman.cn/api/payment/notify
+    refundNotifyUrl: https://dev-wash.kuaiyuman.cn/api/payment/refundNotify
+  fapiao:
+    notifyUrl: https://dev-wash.kuaiyuman.cn/api/invoice/notify
+
+spring:
+  datasource:
+    hikari:
+      max-lifetime: 0
+      minimum-idle: 3
+      maximum-pool-size: 10
+      idle-timeout: 60000
+      connection-timeout: 10000
+      validation-timeout: 3000
+    url: jdbc:mysql://120.77.236.3:3306/car_wash?serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true&allowMultiQueries=true
+    username: kym
+    password: qYhQLZLP6e7paVmQN5foEwRYJ1yFNpwM
+    driver-class-name: com.mysql.cj.jdbc.Driver
+  data:
+    redis:
+      port: 6379
+      host: 120.77.236.3
+      password: OPYCJ3mJpaU4IsP7ZeIyaus6FtHjLYmhNDGteuRc1gIFCAm7wi
+      database: 10
+      lettuce:
+        pool:
+          min-idle: 1
+        cluster:
+          refresh:
+            adaptive: true
+            period: 20
+  cache:
+    type: redis
+    redis:
+      # 缓存过期时间:7天
+      time-to-live: 604800
+  rabbitmq:
+    host: 120.77.236.3
+    port: 5680
+    username: kym
+    password: vMRbZPfunLX8kDwfyy737y1Ahzfgr5ib
+    virtual-host: /
+    publisher-returns: true
+    publisher-confirms: true
+    listener:
+      simple:
+        acknowledge-mode: manual
+        retry:
+          enabled: true
+          max-attempts: 3
+          initial-interval: 3000ms
+          max-interval: 6000ms
+          multiplier: 2
+
+kym:
+  notify-email: skyline@kuaiyuman.cn

+ 92 - 83
car-wash-service/src/main/java/com/kym/service/awoara/event/handle/OrderCloseEventHandler.java

@@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.time.Duration;
 import java.time.LocalDateTime;
 import java.util.List;
@@ -53,79 +54,85 @@ public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObjec
 
         // 订单状态、支付状态
         var washOrder = washOrderService.lambdaQuery().eq(WashOrder::getOrderId, orderInfo.getOrder_id()).one();
-        if (washOrder != null) {
-            int rechargePayment;
-            int grantsPayment = 0;
-            // 扣款更新余额(优先扣减充值款,不够则扣除赠款),新增资金流水
-            var account = accountService.getAccountByUserId(washOrder.getUserId());
-            if (account.getRechargeBalance() >= orderInfo.getAmount()) {
-                rechargePayment = orderInfo.getAmount();
-                accountService.lambdaUpdate().setSql("balance = balance - {0}, recharge_balance = recharge_balance - {1}",
-                                orderInfo.getAmount(), rechargePayment)
-                        .eq(Account::getUserId, washOrder.getUserId()).update();
-            } else {
-                // 充值款余额不足以支付订单,则扣赠款
-                rechargePayment = account.getRechargeBalance();
-                grantsPayment = orderInfo.getAmount() - account.getRechargeBalance();
-                accountService.lambdaUpdate()
-                        .setSql("balance = balance - {0}, recharge_balance = 0, grants_balance = grants_balance - {1}",
-                                orderInfo.getAmount(), grantsPayment)
-                        .eq(Account::getUserId, washOrder.getUserId()).update();
-            }
-
-            washOrder
-                    .setCloseType(orderInfo.getClose_type())
-                    .setAmount(orderInfo.getAmount())
-                    .setAmountReceivable(orderInfo.getAmount_receivable())
-                    .setAmountReceived(orderInfo.getAmount_received())
-                    .setDiscountMoney(orderInfo.getDiscount_money())
-                    .setDetail(orderInfo.getDetail())
-                    .setEndTime(LocalDateTime.now())
-                    .setTotalSeconds(Duration.between(washOrder.getStartTime(), LocalDateTime.now()).toSecondsPart())
-                    .setRechargePayment(rechargePayment)
-                    .setGrantsPayment(grantsPayment)
-                    .setOrderStatus(WashOrder.ORDER_STATUS_成功)
-                    .setPayStatus(WashOrder.PAY_STATUS_已支付);
-            washOrderService.updateById(washOrder);
-
-
-            // t_account减(上面已完成),t_station_account冻结户减,t_station_account商户加,t_split_record记录
-            // 需要判断是否跨网点,分开处理;跨网点结算比例是消费站点分订单额的30%,充值站点分70%
-            if (washOrder.getIsCross()) {
-                // 跨网点订单结算比例是消费站点分订单额的30%,消费站点分70%
-                doCrossSplit(washOrder, KymCache.INSTANCE.getUserStationId(washOrder.getUserId()));
-            } else {
-                // 不跨网点订单结算比例是消费站点分订单额的100%,消费金额*商家消费分润比例30%-消费金额*平台分润10%=消费金额*(商家消费分润比例-平台分润)
-                doLocalSplit(washOrder);
-            }
-
-
-            var walletDetail = new WalletDetail();
-            walletDetail.setUserId(washOrder.getUserId());
-            walletDetail.setType(WalletDetail.TYPE_消费);
-            walletDetail.setOrderNo(washOrder.getOrderId());
-            walletDetail.setAmount(orderInfo.getAmount());
-            walletDetail.setBeforeBalance(account.getBalance());
-            walletDetail.setAfterBalance(account.getBalance() - orderInfo.getAmount());
-            walletDetail.setTransactionId(washOrder.getId().toString());
-            walletDetail.setTransactionTime(LocalDateTime.now());
-            walletDetail.setStatus(WalletDetail.STATUS_已确认);
-            walletDetailService.save(walletDetail);
-
-            // 处理充值权益优惠逻辑/优惠券优惠逻辑/账户优惠金额记录处理逻辑(涉及退款扣减优惠,在NoDiscountHandle中处理)
-            DiscountStrategyFactory.getDiscountStrategy(washOrder.getDiscountType()).computeDiscount(washOrder, account);
-
-            // 更新订单优惠金额
-            washOrderService.updateById(washOrder);
-
-            // 扣费等资金操作
-            deductions(washOrder, account);
+        if (washOrder == null) {
+            log.error("订单不存在,订单号:{}", orderInfo.getOrder_id());
+            return;
+        }
+
+        int rechargePayment;
+        int grantsPayment = 0;
+        // 扣款更新余额(优先扣减充值款,不够则扣除赠款),新增资金流水
+        var account = accountService.getAccountByUserId(washOrder.getUserId());
+        int amount = orderInfo.getAmount();
+        if (account.getRechargeBalance() >= amount) {
+            rechargePayment = amount;
+            accountService.lambdaUpdate()
+                    .setSql("balance = balance - {0}, recharge_balance = recharge_balance - {1}",
+                            amount, rechargePayment)
+                    .eq(Account::getUserId, washOrder.getUserId())
+                    .update();
+        } else {
+            // 充值款余额不足以支付订单,则扣赠款
+            rechargePayment = account.getRechargeBalance();
+            grantsPayment = amount - account.getRechargeBalance();
+            accountService.lambdaUpdate()
+                    .setSql("balance = balance - {0}, recharge_balance = 0, grants_balance = grants_balance - {1}",
+                            amount, grantsPayment)
+                    .eq(Account::getUserId, washOrder.getUserId())
+                    .update();
+        }
+
+        washOrder
+                .setCloseType(orderInfo.getClose_type())
+                .setAmount(amount)
+                .setAmountReceivable(orderInfo.getAmount_receivable())
+                .setAmountReceived(orderInfo.getAmount_received())
+                .setDiscountMoney(orderInfo.getDiscount_money())
+                .setDetail(orderInfo.getDetail())
+                .setEndTime(LocalDateTime.now())
+                .setTotalSeconds(Duration.between(washOrder.getStartTime(), LocalDateTime.now()).toSecondsPart())
+                .setRechargePayment(rechargePayment)
+                .setGrantsPayment(grantsPayment)
+                .setOrderStatus(WashOrder.ORDER_STATUS_成功)
+                .setPayStatus(WashOrder.PAY_STATUS_已支付)
+                .setOrderStatus(WashOrder.ORDER_STATUS_成功);
+
+        washOrderService.updateById(washOrder);
 
 
+        // t_account减(上面已完成),t_station_account冻结户减,t_station_account商户加,t_split_record记录
+        // 需要判断是否跨网点,分开处理;跨网点结算比例是消费站点分订单额的30%,充值站点分70%
+        if (washOrder.getIsCross()) {
+            // 跨网点订单结算比例是消费站点分订单额的30%,消费站点分70%
+            doCrossSplit(washOrder, KymCache.INSTANCE.getUserStationId(washOrder.getUserId()));
         } else {
-            log.error("订单不存在,订单号:{}", orderInfo.getOrder_id());
+            // 不跨网点订单结算比例是消费站点分订单额的100%,消费金额*商家消费分润比例30%-消费金额*平台分润10%=消费金额*(商家消费分润比例-平台分润)
+            doLocalSplit(washOrder);
         }
 
+
+        var walletDetail = new WalletDetail();
+        walletDetail.setUserId(washOrder.getUserId());
+        walletDetail.setType(WalletDetail.TYPE_消费);
+        walletDetail.setOrderNo(washOrder.getOrderId());
+        walletDetail.setAmount(orderInfo.getAmount());
+        walletDetail.setBeforeBalance(account.getBalance());
+        walletDetail.setAfterBalance(account.getBalance() - orderInfo.getAmount());
+        walletDetail.setTransactionId(washOrder.getId().toString());
+        walletDetail.setTransactionTime(LocalDateTime.now());
+        walletDetail.setStatus(WalletDetail.STATUS_已确认);
+        walletDetailService.save(walletDetail);
+
+        // 处理充值权益优惠逻辑/优惠券优惠逻辑/账户优惠金额记录处理逻辑(涉及退款扣减优惠,在NoDiscountHandle中处理)
+        DiscountStrategyFactory.getDiscountStrategy(washOrder.getDiscountType()).computeDiscount(washOrder, account);
+
+        // 更新订单优惠金额
+        washOrderService.updateById(washOrder);
+
+        // 扣费等资金操作
+        deductions(washOrder, account);
+
+
     }
 
     /**
@@ -134,13 +141,7 @@ public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObjec
      * @param washOrder
      * @param account
      */
-    private void deductions(WashOrder washOrder, Account account) {
-        // 订单成功
-        washOrder.setOrderStatus(WashOrder.ORDER_STATUS_成功);
-        // 充电结束
-        washOrder.setOrderStatus(WashOrder.PAY_STATUS_已支付);
-        washOrderService.updateById(washOrder);
-
+    protected void deductions(WashOrder washOrder, Account account) {
         // 账户扣费
         account.setBalance(account.getBalance() - washOrder.getAmountReceived());
         accountService.updateById(account);
@@ -156,7 +157,6 @@ public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObjec
         // 已确认
         walletDetail.setStatus(WalletDetail.STATUS_已确认);
         walletDetailService.save(walletDetail);
-
     }
 
     /**
@@ -166,10 +166,16 @@ public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObjec
      */
     private void doLocalSplit(WashOrder washOrder) {
         log.info("订单:{},执行(本店)分账", washOrder.getOrderId());
+        int amount = washOrder.getAmount();
+        BigDecimal platformRate = BigDecimal.valueOf(0.1);
+        BigDecimal consumeRate = BigDecimal.valueOf(0.3);
+
         // 平台技术服务费10%
-        var platformAmount = (int) (washOrder.getAmount() * 0.1);
+        var platformAmount = amount * platformRate.intValueExact();
         // 解冻金额
-        var unfreezeAmount = (int) (washOrder.getAmount() * 0.3);
+        var unfreezeAmount = amount * consumeRate.intValueExact();
+
+        int localAmount = unfreezeAmount - platformAmount;
 
         // 技术服务费
         var splitRecord0 = new SplitRecord()
@@ -184,7 +190,7 @@ public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObjec
                 .setFromStationId(washOrder.getStationId())
                 .setToStationId(washOrder.getStationId())
                 .setTradeNo(washOrder.getOrderId())
-                .setAmount((int) (washOrder.getAmount() * 0.3))
+                .setAmount(unfreezeAmount)
                 .setType(SplitRecord.TYPE_UNFREEZE);
 
         // 基本户入账
@@ -192,7 +198,7 @@ public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObjec
                 .setFromStationId(washOrder.getStationId())
                 .setToStationId(washOrder.getStationId())
                 .setTradeNo(washOrder.getOrderId())
-                .setAmount(unfreezeAmount - platformAmount)
+                .setAmount(localAmount)
                 .setType(SplitRecord.TYPE_CONSUME);
 
         splitRecordService.saveBatch(List.of(splitRecord0, splitRecord1, splitRecord2));
@@ -250,18 +256,21 @@ public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObjec
      */
     private void doCrossSplit(WashOrder washOrder, String userStationId) {
         log.info("订单:{},执行(跨店)分账", washOrder.getOrderId());
+        int amount = washOrder.getAmount();
+        BigDecimal platformRate = BigDecimal.valueOf(0.1);
+        BigDecimal crossRate = BigDecimal.valueOf(0.7);
 
         // 平台技术服务费10%
-        var platformAmount = (int) (washOrder.getAmount() * 0.1);
+        var platformAmount = amount * platformRate.intValueExact();;
 
         // 解冻金额 = 订单金额
-        var unfreezeAmount = washOrder.getAmount();
+        var unfreezeAmount = amount;
 
         // 归属站点账户解冻扣除平台技术服务费后总共用于分账的金额
         var localAmount = (int) (unfreezeAmount * 0.3) - platformAmount;
 
         // 当前消费站点分账收入(订单金额的70%,不承担平台手续费)
-        var crossAmount = washOrder.getAmount() - (int) (unfreezeAmount * 0.3);
+        var crossAmount = amount * crossRate.intValueExact();
 
         // t_split_record 0.平台服务费收入 1.消费站点收入 2.归属站点解冻 3.归属站点收入 4.归属站点支出(给消费站点结算)
         var splitRecord0 = new SplitRecord()