From 91e9c006a2ce431a5916b137974bd004622eb9fa Mon Sep 17 00:00:00 2001
From: huliguo <2023611923@qq.com>
Date: 星期三, 09 四月 2025 20:15:45 +0800
Subject: [PATCH] 用户端代码调整测试

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java |  189 +++++++++++++++++++++++++++--------------------
 1 files changed, 109 insertions(+), 80 deletions(-)

diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
index 73c5254..501d173 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -318,9 +318,6 @@
 
     /**
      * 小程序取消订单
-     *
-     * @param orderId
-     * @return
      */
     @Override
     public R cancel(Long orderId) {
@@ -339,14 +336,9 @@
             return R.fail("订单取消失败");
         }
         order.setOrderStatus(5);
-        //todo 商品销售数量
         R r = refundPayMoney(order);
         if (200 == r.getCode()) {
             this.updateById(order);
-        }
-        R r2 = userPointClient.deleteUserPointCopy(orderId, Arrays.asList(8));//门店业绩
-        if (200 != r2.getCode()) { // 项目没有分布式事务,此处报错可能会导致数据不一致
-            throw new RuntimeException("订单取消失败");
         }
         return r;
     }
@@ -379,71 +371,82 @@
 
 
     /**
-     * 返回订单支付金额和回退积分和会员等级
-     *
-     * @param order
+     * 回退积分和返回订单支付金额
      */
     public R refundPayMoney(Order order) {
         //开始退款
+        //先回退积分
+        AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
+        if (order.getPoint()>0) {
+            //返回订单抵扣积分
+            Integer historicalPoint = appUser.getAvailablePoint();
+            Integer availablePoint = appUser.getAvailablePoint() + order.getPoint();//可用积分
+            Integer cancelPoint = appUser.getCancelPoint() + order.getPoint();//取消订单积分
+
+            appUser.setAvailablePoint(availablePoint);
+            appUser.setCancelPoint(cancelPoint);
+            appUserClient.editAppUserById(appUser);
+            //构建积分流水
+            UserPoint userPoint = new UserPoint();
+            userPoint.setType(16);//取消订单
+            userPoint.setHistoricalPoint(historicalPoint);
+            userPoint.setVariablePoint(order.getPoint());
+            userPoint.setBalance(availablePoint);
+            userPoint.setCreateTime(LocalDateTime.now());
+            userPoint.setAppUserId(order.getAppUserId());
+            userPoint.setObjectId(order.getId());
+            userPointClient.saveUserPoint(userPoint);
+        }
 
         BigDecimal paymentAmount = order.getPaymentAmount();
-        AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
-
         if (BigDecimal.ZERO.compareTo(order.getPaymentAmount()) < 0) {//支付的金额是否大于0
             //微信退款
             RefundResult refund = PaymentUtil.refund(order.getOrderNumber(), "R" + order.getOrderNumber(), paymentAmount.doubleValue(), "/order/order/refundPayMoneyCallback");
-            if ("100".equals(refund.getRa_Status())) {
-                order.setRefundStatus(1);
-                return R.ok();
-            } else {
-                return R.fail(refund.getRc_CodeMsg());
+            if (!"100".equals(refund.getRa_Status())) {
+                return R.fail(refund.getRc_CodeMsg());//退款失败
             }
-        }
-
-        if (0 != order.getPoint()) {//使用的积分是否为0
-            Integer lavePoint = appUser.getAvailablePoint();
-            //积分退款
-            appUser.setAvailablePoint(appUser.getAvailablePoint() + order.getPoint());
-            appUser.setAvailablePoint(appUser.getAvailablePoint() + order.getPoint());
-            UserPoint userPoint1 = new UserPoint();
-            userPoint1.setType(11);
-            userPoint1.setObjectId(order.getId());
-            List<UserPoint> data = userPointClient.getUserPointList(userPoint1).getData();//用户积分流水
-            Integer transferablePoint = order.getPoint();
-            if (data.size() > 0) {
-                UserPoint userPoint = data.get(0);
-                transferablePoint = Integer.valueOf(userPoint.getExtention());
-            }
-
-            //构建积分流水明细
-            if (order.getPoint() > 0) {
-                UserPoint userPoint = new UserPoint();
-                userPoint.setType(11);
-                userPoint.setHistoricalPoint(lavePoint);
-                userPoint.setVariablePoint(order.getPoint());
-                userPoint.setBalance(appUser.getAvailablePoint());
-                userPoint.setCreateTime(LocalDateTime.now());
-                userPoint.setAppUserId(order.getAppUserId());
-                userPoint.setObjectId(order.getId());
-                userPointClient.saveUserPoint(userPoint);
-            }
-            appUserClient.editAppUserById(appUser);
         }
 
         order.setRefundStatus(2);
         order.setRefundTime(LocalDateTime.now());
-        orderMapper.updateById(order);
-        //todo 退款后店铺积分流水以及退款前店铺积分流水
-       /* shopPointClient.deleteShopPointCopy(order.getId(), Arrays.asList(1,2,3));
-        shopBalanceStatementClient.deleteShopBalanceStatementCopy(order.getId(), Arrays.asList(1,2,3));
-        appUserGiveawayTemporaryClient.delAppUserGiveawayTemporary(order.getId());
-        shopGiveawayTemporaryClient.delShopGiveawayTemporary(order.getId());*/
+
+        //商品销售数量
+        OrderGood orderGood = orderGoodService.getOne(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, order.getId()));
+        goodsClient.editGoodsNum(orderGood.getGoodsId(), -1);
+        //获取商品json
+        Goods good = JSON.parseObject(orderGood.getGoodJson(), Goods.class);
+
+        //门店减少冻结资金 即减少余额, 冻结资金=余额-可用资金
+        Shop shop = shopClient.getShopById(order.getShopId()).getData();
+
+        BigDecimal historicalBalance=shop.getBalance();//历史余额
+        BigDecimal variableAmount=good.getSellingPrice();//变动金额
+        BigDecimal balance=shop.getBalance().subtract(good.getSellingPrice());//变动后余额
+
+        shop.setBalance(balance);
+        shopClient.updateShop(shop);
+
+        //门店余额流水记录
+        ShopBalanceStatement shopBalanceStatement = new ShopBalanceStatement();
+        shopBalanceStatement.setShopId(shop.getId());
+        shopBalanceStatement.setShopName(shop.getName());
+        shopBalanceStatement.setShopManagerName(shop.getShopManager());
+        shopBalanceStatement.setPhone(shop.getPhone());
+        shopBalanceStatement.setType(6);//变更类型,订单退款
+        shopBalanceStatement.setHistoricalBalance(historicalBalance);
+        shopBalanceStatement.setVariableAmount(variableAmount);
+        shopBalanceStatement.setCreateTime(LocalDateTime.now());
+        shopBalanceStatement.setBalance(balance);
+        shopBalanceStatement.setCreateUserId(appUser.getId());
+        shopBalanceStatement.setObjectId(order.getId());
+        shopBalanceStatementClient.saveShopBalanceStatement(shopBalanceStatement);
+
         return R.ok();
     }
 
 
     /**
-     * 取消订单后回调处理
+     * 退款后后回调处理
      *
      * @return
      */
@@ -664,7 +667,6 @@
 
     /**
      * 订单支付
-     * todo 用户积分流水情况
      */
     @Override
     public R orderPayment(OrderPayment orderPayment) {
@@ -712,7 +714,7 @@
             return R.fail("支付方式不正确");
         }
 
-        //现金支付的订单总金额
+        //订单总金额
         BigDecimal orderMoney = BigDecimal.ZERO;
         //积分支付的订单积分
         Integer orderPoint = 0;
@@ -793,28 +795,27 @@
         //判断积分是否为零,积分支付
         if (0 != order.getPoint()){
             //积分支付
-            Integer lavePoint = appUser.getAvailablePoint();
+            Integer historicalPoint = appUser.getAvailablePoint();//历史积分
+            Integer availablePoint = historicalPoint - orderPoint;//可用积分
+            Integer exchangePoint = appUser.getExchangePoint() + orderPoint;//兑换商品消费积分
             //扣减订单支付积分
-            appUser.setAvailablePoint(appUser.getAvailablePoint() - orderPoint);//剩余积分
-            appUser.setAvailablePoint(appUser.getAvailablePoint() - orderPoint);//可用积分
-
+            appUser.setAvailablePoint(availablePoint);
+            appUser.setExchangePoint(exchangePoint );
             //构建积分流水记录
-            if(orderPoint > 0){
-                UserPoint userPoint = new UserPoint();
-                userPoint.setType(11);
-                userPoint.setHistoricalPoint(lavePoint);
-                userPoint.setVariablePoint(orderPoint);
-                userPoint.setBalance(appUser.getAvailablePoint());
-                userPoint.setCreateTime(LocalDateTime.now());
-                userPoint.setAppUserId(appUser.getId());
-                userPoint.setObjectId(order.getId());
-                userPointClient.saveUserPoint(userPoint);
-            }
+            UserPoint userPoint = new UserPoint();
+            userPoint.setType(4);//兑换商品
+            userPoint.setHistoricalPoint(historicalPoint);
+            userPoint.setVariablePoint(orderPoint);
+            userPoint.setBalance(availablePoint);
+            userPoint.setCreateTime(LocalDateTime.now());
+            userPoint.setAppUserId(appUser.getId());
+            userPoint.setObjectId(order.getId());
+            userPointClient.saveUserPoint(userPoint);
 
+            //用户积分变动
             appUser.setLastShopTime(LocalDateTime.now());
             appUserClient.editAppUserById(appUser);
-/*            //变更等级
-            applicationEventPublisher.publishEvent(new PayEvent(JSON.toJSONString(appUser)));*/
+
 
         }
         //判断需要支付的金额是否大于0
@@ -842,10 +843,12 @@
         //商品销量增加
         goodsClient.editGoodsNum(orderGood.getGoodsId(), 1);
 
-        //门店增加冻结资金 即增加金额, 冻结资金=余额-可用资金
+        //门店增加冻结资金 即增加余额, 冻结资金=余额-可用资金
         Shop shop = shopClient.getShopById(order.getShopId()).getData();
         BigDecimal historicalBalance=shop.getBalance();//历史余额
+        BigDecimal variableAmount=goods.getSellingPrice();//变动金额
         BigDecimal balance=shop.getBalance().add(goods.getSellingPrice());//变动后余额
+
         shop.setBalance(balance);
         shop.setOrderNumber(shop.getOrderNumber()+1);
         shopClient.updateShop(shop);
@@ -858,7 +861,7 @@
         shopBalanceStatement.setPhone(shop.getPhone());
         shopBalanceStatement.setType(5);//变更类型,订单收入
         shopBalanceStatement.setHistoricalBalance(historicalBalance);
-        shopBalanceStatement.setVariableAmount(goods.getSellingPrice());
+        shopBalanceStatement.setVariableAmount(variableAmount);
         shopBalanceStatement.setCreateTime(LocalDateTime.now());
         shopBalanceStatement.setBalance(balance);
         shopBalanceStatement.setCreateUserId(appUser.getId());
@@ -879,7 +882,7 @@
 
         AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
         BigDecimal paymentMoney = order.getPaymentAmount();
-        //构建积分流水记录
+        //增加用户消费总金额(微信支付金额)
         appUser.setShopAmount(appUser.getShopAmount().add(paymentMoney).setScale(2, RoundingMode.HALF_EVEN));//消费总金额
         appUser.setLastShopTime(LocalDateTime.now());
         appUserClient.editAppUserById(appUser);
@@ -895,11 +898,14 @@
         OrderGood orderGood = orderGoodService.getOne(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, order.getId()));
         //商品销量增加
         goodsClient.editGoodsNum(orderGood.getGoodsId(), 1);
+        Goods goods = JSON.parseObject(orderGood.getGoodJson(), Goods.class);
 
         //门店增加冻结资金 即增加金额, 冻结资金=余额-可用资金
         Shop shop = shopClient.getShopById(order.getShopId()).getData();
         BigDecimal historicalBalance=shop.getBalance();//历史余额
-        BigDecimal balance=shop.getBalance().add(order.getTotalAmount());//变动后余额
+        BigDecimal variableAmount=goods.getSellingPrice();//变动余额
+        BigDecimal balance=shop.getBalance().add(variableAmount);//变动后余额
+
         shop.setBalance(balance);
         shop.setOrderNumber(shop.getOrderNumber()+1);
         shopClient.updateShop(shop);
@@ -912,7 +918,7 @@
         shopBalanceStatement.setPhone(shop.getPhone());
         shopBalanceStatement.setType(5);//变更类型,订单收入
         shopBalanceStatement.setHistoricalBalance(historicalBalance);
-        shopBalanceStatement.setVariableAmount(order.getTotalAmount());
+        shopBalanceStatement.setVariableAmount(variableAmount);
         shopBalanceStatement.setCreateTime(LocalDateTime.now());
         shopBalanceStatement.setBalance(balance);
         shopBalanceStatement.setCreateUserId(appUser.getId());
@@ -924,7 +930,6 @@
 
     /**
      * 定时任务关闭订单
-     * todo 关闭订单前,检查是否先支付过积分抵扣了,是的话要返回订单已抵扣的积分,以及用户积分流水,门店余额流水的删除
      */
     @Override
     public void closeOrder() {
@@ -946,6 +951,30 @@
                     log.error("关闭订单失败:{}---->{}", order.getOrderNumber(), JSON.toJSONString(closeOrderResult));
                 }
                 redisTemplate.opsForZSet().remove("OrderPayment", order.getOrderNumber());
+                //关闭订单后,检查是否先有过积分抵扣了,是的话要返回订单已抵扣的积分,以及用户积分流水的删除
+                if (order.getPoint()>0) {
+                    //返回订单抵扣积分
+                    AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
+                    Integer availablePoint = appUser.getAvailablePoint();//可用积分
+                    Integer variablePoint = order.getPoint();//变动积分
+                    Integer balance = appUser.getAvailablePoint() + order.getPoint();//变动后积分
+                    Integer cancelPoint = appUser.getCancelPoint() + order.getPoint();//取消订单积分
+                    appUser.setAvailablePoint(availablePoint);
+                    appUser.setCancelPoint(cancelPoint);
+
+                    //构建积分流水记录
+                    UserPoint userPoint = new UserPoint();
+                    userPoint.setType(16);//取消订单
+                    userPoint.setHistoricalPoint(availablePoint);
+                    userPoint.setVariablePoint(variablePoint);
+                    userPoint.setBalance(balance);
+                    userPoint.setCreateTime(LocalDateTime.now());
+                    userPoint.setAppUserId(appUser.getId());
+                    userPoint.setObjectId(order.getId());
+                    userPointClient.saveUserPoint(userPoint);
+
+                    appUserClient.editAppUserById(appUser);
+                }
             }
         }
 

--
Gitblit v1.7.1