From f103ac7bc4f2fbb20a0f2dd3ed97b0ac7fc5f46d Mon Sep 17 00:00:00 2001
From: huliguo <2023611923@qq.com>
Date: 星期五, 11 四月 2025 17:40:24 +0800
Subject: [PATCH] 商家端

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java |   72 +++++++++++++++++++++++++-----------
 1 files changed, 50 insertions(+), 22 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 e6290ca..4b43a20 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
@@ -59,6 +59,7 @@
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 
+import java.time.ZoneId;
 import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -145,14 +146,22 @@
         OrderGood orderGood = orderGoodMapper.selectOne(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, orderId));
         String goodJson = orderGood.getGoodJson();
         Goods goods = JSONObject.parseObject(goodJson, Goods.class);
+        GoodsSeckill goodsSeckill = JSON.parseObject(orderGood.getSeckillJson(), GoodsSeckill.class);
 
         OrderGoodsVO orderGoodsVO = new OrderGoodsVO();
         orderGoodsVO.setGoodsId(goods.getId());
         orderGoodsVO.setGoodsName(goods.getName());
         orderGoodsVO.setGoodsPic(goods.getHomePagePicture());
         orderGoodsVO.setNum(order.getNum());
-        orderGoodsVO.setSellingPrice(goods.getSellingPrice());
-        orderGoodsVO.setIntegral(goods.getIntegral());
+        if (null!=goodsSeckill){
+            orderGoodsVO.setSellingPrice(goodsSeckill.getSellingPrice());
+            orderGoodsVO.setIntegral(goodsSeckill.getIntegral());
+        }else {
+            orderGoodsVO.setSellingPrice(goods.getSellingPrice());
+            orderGoodsVO.setIntegral(goods.getIntegral());
+        }
+
+
         orderGoodsVO.setOriginalPrice(goods.getOriginalPrice());
 
         OrderDetailVO orderDetailVO = new OrderDetailVO();
@@ -181,7 +190,7 @@
             throw new ServiceException("生成核销码失败");
         }
         //该商品是否被用户评论
-        Long evaluateId = goodsEvaluateClient.getEvaluateIdByUserIdAndGoodId(goods.getId(), order.getAppUserId()).getData();
+        Long evaluateId = goodsEvaluateClient.getEvaluateIdByOrderId(order.getId()).getData();
         orderDetailVO.setEvaluateId(evaluateId);
 
         return orderDetailVO;
@@ -207,6 +216,9 @@
         }
         if (!order.getShopId().equals(shopId)) {
             throw new ServiceException("该订单与当前扫码门店不一致");
+        }
+        if (order.getOrderStatus()!=3){
+            throw new ServiceException("订单已被核销过");
         }
 
 
@@ -396,7 +408,15 @@
      */
     public R refundPayMoney(Order order) {
         //开始退款
-        //先回退积分
+        BigDecimal paymentAmount = order.getPaymentAmount();
+        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())) {
+                return R.fail(refund.getRc_CodeMsg());//退款失败
+            }
+        }
+        //退款成功再回退积分
         AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
         if (order.getPoint()>0) {
             //返回订单抵扣积分
@@ -406,6 +426,7 @@
 
             appUser.setAvailablePoint(availablePoint);
             appUser.setCancelPoint(cancelPoint);
+            appUser.setTotalPoint(appUser.getTotalPoint() + order.getPoint());
             appUserClient.editAppUserById(appUser);
             //构建积分流水
             UserPoint userPoint = new UserPoint();
@@ -419,15 +440,6 @@
             userPointClient.saveUserPoint(userPoint);
         }
 
-        BigDecimal paymentAmount = order.getPaymentAmount();
-        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())) {
-                return R.fail(refund.getRc_CodeMsg());//退款失败
-            }
-        }
-
         order.setRefundStatus(2);
         order.setRefundTime(LocalDateTime.now());
 
@@ -436,13 +448,20 @@
         goodsClient.editGoodsNum(orderGood.getGoodsId(), -1);
         //获取商品json
         Goods good = JSON.parseObject(orderGood.getGoodJson(), Goods.class);
+        GoodsSeckill goodsSeckill = JSON.parseObject(orderGood.getSeckillJson(), GoodsSeckill.class);
 
         //门店减少冻结资金 即减少余额, 冻结资金=余额-可用资金
         Shop shop = shopClient.getShopById(order.getShopId()).getData();
 
         BigDecimal historicalBalance=shop.getBalance();//历史余额
-        BigDecimal variableAmount=good.getSellingPrice();//变动金额
-        BigDecimal balance=shop.getBalance().subtract(good.getSellingPrice());//变动后余额
+        BigDecimal variableAmount=BigDecimal.ZERO;//变动金额
+        if (null != goodsSeckill) {
+            variableAmount=goodsSeckill.getSellingPrice();
+        }else {
+            variableAmount=good.getSellingPrice();
+        }
+
+        BigDecimal balance=shop.getBalance().subtract(variableAmount);//变动后余额
 
         shop.setBalance(balance);
         shopClient.updateShop(shop);
@@ -658,6 +677,7 @@
             confirmOrderVo.setCash(goodsSeckill.getSellingPrice());//秒杀活动价格
             confirmOrderVo.setPoint(goodsSeckill.getIntegral());//秒杀活动积分价格
             confirmOrderVo.setPurchaseLimitNum(activityInfo.getMaxNum());//限购数量
+            confirmOrderVo.setEndTimeStamp(activityInfo.getEndTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());//结束时间戳
         }
 
 
@@ -672,7 +692,7 @@
         }
         //限购检查
         //判断当前数量是否已经超出限购数量(需要计算已经购买的数量)
-        if(null == good.getPurchaseLimit() || -1 == good.getPurchaseLimit()){
+        if(null == confirmOrderVo.getPurchaseLimitNum() || -1 == confirmOrderVo.getPurchaseLimitNum()){
             confirmOrderVo.setIsPurchaseLimit(false);
             confirmOrderVo.setPurchaseLimitNum(-1);
         }else{
@@ -687,7 +707,7 @@
                 sum = orderGoodList.stream().mapToInt(OrderGood::getNum).sum();
             }
             confirmOrderVo.setIsPurchaseLimit((1 + sum) > good.getPurchaseLimit());
-            confirmOrderVo.setPurchaseLimitNum(good.getPurchaseLimit() - sum);
+            confirmOrderVo.setPurchaseLimitNum(confirmOrderVo.getPurchaseLimitNum() - sum);
         }
 
         return confirmOrderVo;
@@ -703,6 +723,7 @@
         int type=1;//商品类型  1=普通商品,2=秒杀商品
         //商品信息
         Goods goods = goodsClient.getGoodsById(orderPayment.getGoodId()).getData();
+        String goodsJson= JSON.toJSONString(goods);
         if (null == goods || 1==goods.getDelFlag()){
             return  R.fail( "商品不存在");
         }
@@ -796,7 +817,8 @@
         order.setDelFlag(0);
         order.setCreateTime(LocalDateTime.now());
 
-        orderMapper.insert(order);
+        this.save(order);
+
 
         //构建订单明细数据
         OrderGood orderGood = new OrderGood();
@@ -807,7 +829,7 @@
         if (2==type){
             orderGood.setSeckillJson(JSON.toJSONString(goodsSeckill));
         }
-        orderGood.setGoodJson(JSON.toJSONString(goods));
+        orderGood.setGoodJson(goodsJson);
         orderGood.setDelFlag(0);
         orderGood.setCreateTime(LocalDateTime.now());
         orderGood.setCashPayment(orderPayment.getPaymentType()==1 ? 1 : 0);
@@ -829,6 +851,7 @@
             //扣减订单支付积分
             appUser.setAvailablePoint(availablePoint);
             appUser.setExchangePoint(exchangePoint );
+            appUser.setTotalPoint(appUser.getTotalPoint() + order.getPoint());//总积分
             //构建积分流水记录
             UserPoint userPoint = new UserPoint();
             userPoint.setType(4);//兑换商品
@@ -927,11 +950,16 @@
         //商品销量增加
         goodsClient.editGoodsNum(orderGood.getGoodsId(), 1);
         Goods goods = JSON.parseObject(orderGood.getGoodJson(), Goods.class);
-
+        GoodsSeckill goodsSeckill = JSON.parseObject(orderGood.getSeckillJson(), GoodsSeckill.class);
         //门店增加冻结资金 即增加金额, 冻结资金=余额-可用资金
         Shop shop = shopClient.getShopById(order.getShopId()).getData();
         BigDecimal historicalBalance=shop.getBalance();//历史余额
-        BigDecimal variableAmount=goods.getSellingPrice();//变动余额
+        BigDecimal variableAmount=BigDecimal.ZERO;//变动金额
+        if (null != goodsSeckill) {
+            variableAmount=goodsSeckill.getSellingPrice();
+        }else {
+            variableAmount=goods.getSellingPrice();
+        }
         BigDecimal balance=shop.getBalance().add(variableAmount);//变动后余额
 
         shop.setBalance(balance);
@@ -989,6 +1017,7 @@
                     Integer cancelPoint = appUser.getCancelPoint() + order.getPoint();//取消订单积分
                     appUser.setAvailablePoint(availablePoint);
                     appUser.setCancelPoint(cancelPoint);
+                    appUser.setTotalPoint(appUser.getTotalPoint() + order.getPoint());
 
                     //构建积分流水记录
                     UserPoint userPoint = new UserPoint();
@@ -1061,7 +1090,6 @@
         OrderPageListVo vo = new OrderPageListVo();
         // 复制属性
         BeanUtils.copyProperties(order, vo);
-
         // 查询用户信息
         AppUser user = appUserClient.getAppUserById(order.getAppUserId());
         if (user != null) {

--
Gitblit v1.7.1