From dfe810a2108e479c4ed4f8d24dd181140afd8730 Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期五, 01 九月 2023 09:31:05 +0800
Subject: [PATCH] Merge branch 'master' of ssh://120.76.84.145:20202/java/HongRuiTang into master

---
 ruoyi-modules/ruoyi-goods/src/main/resources/mapper/activity/ActivityMapper.xml                        |    8 ++-
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppPlaceOrderVo.java                 |    3 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java |    4 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java       |   77 +++++++++++---------------------------
 4 files changed, 33 insertions(+), 59 deletions(-)

diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java
index 3775a4c..bcdd488 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java
@@ -459,12 +459,14 @@
         String activityId = activityGoodsGetDto.getActivityId();
         String goodsId = activityGoodsGetDto.getGoodsId();
         Activity activity = this.getById(activityId);
+        //获取活动商品
         ActivityGoods activityGoods = activityGoodsService.getByGoodsId(activityId,goodsId);
         activityGoodsGetVo.setActivityName(activity.getActivityName());
         activityGoodsGetVo.setActivityPrice(activityGoods.getActivityPrice());
         activityGoodsGetVo.setActivitySubscription(activityGoods.getActivitySubscription());
         activityGoodsGetVo.setActivityStatus(activity.getActivityStatus());
-        Integer availableBuyNum = activityGoods.getActivityNumber() - activityGoods.getSalesNumber();
+        //剩余库存
+        Integer availableBuyNum = activityGoods.getActivityNumber();
         //限购判断
         if(activityGoods.getPurchaseLimitationFlag()==1){
             Integer buyNum = activityRecordService.getUserActivityGoodsNum(goodsId,activityId,activityGoodsGetDto.getUserId());
diff --git a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/activity/ActivityMapper.xml b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/activity/ActivityMapper.xml
index 37f3e1f..f18cfcf 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/activity/ActivityMapper.xml
+++ b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/activity/ActivityMapper.xml
@@ -145,6 +145,7 @@
     <update id="addActivityGoodsStock">
         UPDATE t_activity_goods
         SET sales_number = sales_number - #{param.changeNum},
+            activity_number = activity_number + #{param.changeNum},
             sell_out_flag =  0,
             sell_out_time = NULL
         WHERE activity_id = #{param.activityId} AND goods_id = #{param.goodsId}
@@ -153,9 +154,10 @@
     <update id="subActivityGoodsStock">
         UPDATE t_activity_goods
         SET sales_number = sales_number + #{param.changeNum},
-            sell_out_flag = CASE WHEN sales_number + #{param.changeNum} = activity_number THEN 1 ELSE sell_out_flag END,
-            sell_out_time = CASE WHEN sales_number + #{param.changeNum} = activity_number THEN NOW() ELSE sell_out_time END
-        WHERE activity_id = #{param.activityId} AND goods_id = #{param.goodsId} AND sales_number + #{param.changeNum} &lt;= activity_number
+            activity_number = activity_number - #{param.changeNum},
+            sell_out_flag = CASE WHEN activity_number = 0 THEN 1 ELSE sell_out_flag END,
+            sell_out_time = CASE WHEN activity_number = 0 THEN NOW() ELSE sell_out_time END
+        WHERE activity_id = #{param.activityId} AND goods_id = #{param.goodsId} AND activity_number &gt;= #{param.changeNum}
     </update>
 
     <select id="checkSellOut" resultType="java.lang.Integer">
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppPlaceOrderVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppPlaceOrderVo.java
index 5a8bf91..550cdc6 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppPlaceOrderVo.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppPlaceOrderVo.java
@@ -26,6 +26,9 @@
     @ApiModelProperty(value = "订单编号")
     private String orderNo;
 
+    @ApiModelProperty(value = "金额为零无需支付")
+    private Integer zeroFlag;
+
     @ApiModelProperty(value = "支付方式1.全款2.订金")
     private Integer payType;
 
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
index 5b5d2cd..e165591 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -751,24 +751,13 @@
         }
         // 保存订单
         this.save(order);
-        // 更新用户商品类型
-        if (goodsTypeSet != null && goodsTypeSet.size() > 0) {
-            AppMemberGoodsTypeDto appMemberGoodsTypeDto = new AppMemberGoodsTypeDto();
-            appMemberGoodsTypeDto.setUserId(userId);
-            appMemberGoodsTypeDto.setGoodsTypeSet(goodsTypeSet);
-            remoteMemberService.updateMemberGoodsType(appMemberGoodsTypeDto);
-        }
         appPlaceOrderVo.setOrderId(orderId);
         appPlaceOrderVo.setOrderNo(orderNo);
-        //商品数据
-        String goodsName = "";
-        if (null != goodsNameList) {
-            goodsName = String.join(",", goodsNameList);
-        }
         //减去优惠券
         if (StringUtils.isNotBlank(memberCouponSJ.toString())) {
             remoteCouponService.useMemberCoupon(memberCouponSJ.toString());
         }
+        //判断是否需要支付 不需要直接待核销
         if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.ZERO)>0){
             String outTradeNo = IdUtils.simpleUUID();
             // 保存订单 交易流水
@@ -779,6 +768,11 @@
                 delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
             }
             appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
+            //商品数据
+            String goodsName = "";
+            if (null != goodsNameList) {
+                goodsName = String.join(",", goodsNameList);
+            }
             // 小程序微信下单支付
             createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, outTradeNo,
                     orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(),
@@ -792,11 +786,19 @@
             delayTask.setEndTime(DateUtils.addMinutes(new Date(), delayTime));
             delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
             remoteConfigService.addDelayTask(delayTask);
+            appPlaceOrderVo.setZeroFlag(0);
         }else{
             order.setOrderStatus(2);
             this.saveOrUpdate(order);
+            appPlaceOrderVo.setZeroFlag(1);
         }
-
+        // 更新用户商品类型统计
+        if (goodsTypeSet != null && goodsTypeSet.size() > 0) {
+            AppMemberGoodsTypeDto appMemberGoodsTypeDto = new AppMemberGoodsTypeDto();
+            appMemberGoodsTypeDto.setUserId(userId);
+            appMemberGoodsTypeDto.setGoodsTypeSet(goodsTypeSet);
+            remoteMemberService.updateMemberGoodsType(appMemberGoodsTypeDto);
+        }
         return appPlaceOrderVo;
     }
 
@@ -920,7 +922,7 @@
         String activityId = appPlaceActivityDto.getActivityId();
         String goodsId = appPlaceActivityDto.getGoodsId();
         Integer buyNum = appPlaceActivityDto.getBuyNum();
-        //redis库存控制极简版
+        //redis分布式锁库存控制
         String goodsLock = "goods_lock_" + activityId + "_" + goodsId;
         RLock redissonLock = redissonClient.getLock(goodsLock);
         try {
@@ -1130,51 +1132,15 @@
         agStockChangeDto.setShopId(order.getShopId());
         agStockChangeDto.setUserId(order.getUserId());
         remoteActivityService.changeActivityStock(agStockChangeDto);
-        // 调用支付
-        /*PrepayRequest request = new PrepayRequest();
-        Amount amount = new Amount();
-        amount.setTotal(Integer.parseInt(order.getPayMoney().multiply(new BigDecimal(100)).toString()));
-        request.setAmount(amount);
-        request.setAppid(this.appId);
-        request.setMchid(this.mchId);
-        request.setDescription(order.getGoodsInfo());
-        request.setNotifyUrl(this.notifyUrl);
-        request.setOutTradeNo(order.getOrderId());
-        Payer payer = new Payer();
-        // TODO 获取openID
-        payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********");
-
-        request.setPayer(payer);*/
-
-        //设置订单允许分账 秒杀活动才允许分账
-        /*if(order.getOrderFrom()==2){
-            SettleInfo settleInfo=new SettleInfo();
-            settleInfo.setProfitSharing(true);
-            request.setSettleInfo(settleInfo);
-        }*/
-
-
-        //返回前端唤醒支付结果信息
-        /*PrepayWithRequestPaymentResponse res = this.getJsApIResponse(request);
-
-        appPlaceOrderVo.setAppId(this.appId);
-        appPlaceOrderVo.setTimeStamp(res.getTimeStamp());
-        appPlaceOrderVo.setNonceStr(res.getNonceStr());
-        appPlaceOrderVo.setPackageStr(res.getPackageVal());
-        appPlaceOrderVo.setTradeType(res.getSignType());
-        appPlaceOrderVo.setPaySign(res.getPaySign());
-
-*/
-        List<String> goodsNameList = new ArrayList<>();
-        goodsNameList.add(orderGoods.getGoodsName());
-
-
+        //支付金额大于0走支付 负责直接完成订单
         if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.ZERO)>0){
-
+            List<String> goodsNameList = new ArrayList<>();
+            goodsNameList.add(orderGoods.getGoodsName());
             String outTradeNo = IdUtils.simpleUUID();
             // 保存订单 交易流水
             order.setOutTradeNo(outTradeNo);
             this.saveOrUpdate(order);
+            //自动取消订单任务时间获取
             Integer delayTime = 30;
             if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
                 delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
@@ -1193,10 +1159,11 @@
             delayTask.setEndTime(DateUtils.addMinutes(new Date(), delayTime));
             delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
             remoteConfigService.addDelayTask(delayTask);
-
+            appPlaceOrderVo.setZeroFlag(0);
         }else{
             order.setOrderStatus(2);
             this.saveOrUpdate(order);
+            appPlaceOrderVo.setZeroFlag(1);
         }
         //生成活动参加记录
         ActivityRecord activityRecord = new ActivityRecord();

--
Gitblit v1.7.1