Parcourir la source

add:取消订单恢复库存,
bug:订单库存字段变更

lyx il y a 2 mois
Parent
commit
f7416e6126

+ 2 - 2
alien-job/src/main/java/shop/alien/job/store/LifeUserOrderJob.java

@@ -91,7 +91,7 @@ public class LifeUserOrderJob {
             for (OrderCouponMiddle orderCouponMiddle : orderCouponMiddles) {
                 // 恢复库存
                 lifeCouponMapper.update(null, new LambdaUpdateWrapper<LifeCoupon>()
-                        .setSql("stock_qty=stock_qty+" + orderCouponMiddle.getCount())
+                        .setSql("single_qty=single_qty+" + orderCouponMiddle.getCount())
                         .eq(LifeCoupon::getId, orderCouponMiddle.getCouponId()));
             }
         }
@@ -223,7 +223,7 @@ public class LifeUserOrderJob {
                                 // 代金券
                                 // 恢复库存
                                 lifeCouponMapper.update(null, new LambdaUpdateWrapper<LifeCoupon>()
-                                        .setSql("stock_qty=stock_qty+" + updateNum)
+                                        .setSql("single_qty=single_qty+" + updateNum)
                                         .eq(LifeCoupon::getId, order.getCouponId()));
                             } else {
                                 // 团购

+ 1 - 1
alien-store/src/main/java/shop/alien/store/controller/LifeCouponController.java

@@ -52,7 +52,7 @@ public class LifeCouponController {
     }
 
     @ApiOperation("代金劵列表")
-    @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "页数", dataType = "Integer", paramType = "query", required = true), @ApiImplicitParam(name = "size", value = "页容", dataType = "Integer", paramType = "query", required = true), @ApiImplicitParam(name = "storeId", value = "门店id", dataType = "Integer", paramType = "query", required = true), @ApiImplicitParam(name = "status", value = "状态", dataType = "Integer", paramType = "query", required = true), @ApiImplicitParam(name = "name", value = "名称", dataType = "Integer", paramType = "query"), @ApiImplicitParam(name = "dataType", value = "数据类型: 0:正式数据, 1:草稿数据", dataType = "Integer", paramType = "query", defaultValue = "0")})
+    @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "页数", dataType = "Integer", paramType = "query", required = true), @ApiImplicitParam(name = "size", value = "页容", dataType = "Integer", paramType = "query", required = true), @ApiImplicitParam(name = "storeId", value = "门店id", dataType = "Integer", paramType = "query", required = true), @ApiImplicitParam(name = "status", value = "状态", dataType = "Integer", paramType = "query", required = false), @ApiImplicitParam(name = "name", value = "名称", dataType = "Integer", paramType = "query"), @ApiImplicitParam(name = "dataType", value = "数据类型: 0:正式数据, 1:草稿数据", dataType = "Integer", paramType = "query", defaultValue = "0")})
     @GetMapping("/getCouponList")
     private R<IPage<LifeCoupon>> getCouponList(@RequestParam(value = "page", defaultValue = "1") int page, @RequestParam(value = "size", defaultValue = "10") int size, @RequestParam("storeId") String storeId, @RequestParam("status") String status, @RequestParam(value = "name", required = false) String name, @RequestParam(value = "dataType", defaultValue = "0") Integer dataType) {
         log.info("LifeCouponController.getCouponList?page={},size={},storeId={},status={},name={},dataType={}", page, size, storeId, status, name, dataType);

+ 27 - 4
alien-store/src/main/java/shop/alien/store/service/LifeUserOrderService.java

@@ -747,7 +747,7 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
                     .eq("id", lifeUserOrderDto.getCouponId()).setSql("inventory_num = inventory_num - " + lifeUserOrderDto.getCount()));
         } else {
             successful = lifeCouponMapper.update(null, new UpdateWrapper<LifeCoupon>()
-                    .eq("id", lifeUserOrderDto.getCouponId()).setSql("stock_qty = stock_qty - " + lifeUserOrderDto.getCount()));
+                    .eq("id", lifeUserOrderDto.getCouponId()).setSql("single_qty = single_qty - " + lifeUserOrderDto.getCount()));
         }
         if(successful == 0){
             log.error("库存不足");
@@ -776,7 +776,6 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
         UpdateWrapper<OrderCouponMiddle> orderCouponMiddleUpdateWrapper = new UpdateWrapper<>();
         orderCouponMiddleUpdateWrapper.eq("order_id",lifeUserOrderDto.getId());
         // 根据状态判断怎么更新数据 目前只进行已支付,已取消,已过期判断
-        // TODO 后续再进行已核销和已退款判断 ()
         switch (lifeUserOrderDto.getStatus()){
             case 1:
                 lifeUserOrder.setPayTime(date);
@@ -793,7 +792,31 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
                 orderCouponMiddleUpdateWrapper.set("status",lifeUserOrderDto.getStatus());
                 break;
         }
-        return this.saveOrUpdate(lifeUserOrder) && orderCouponMiddleService.update(orderCouponMiddleUpdateWrapper);
+        // 查询券id->查询一个
+        int updateNum = orderCouponMiddleMapper.update(null, orderCouponMiddleUpdateWrapper);
+        if(1 != lifeUserOrderDto.getStatus()) {
+            List<OrderCouponMiddle> orderCouponMiddles = orderCouponMiddleMapper.selectList(new QueryWrapper<OrderCouponMiddle>().eq("order_id", lifeUserOrderDto.getId()));
+            if (0 != updateNum && orderCouponMiddles.size() > 0) {
+                Integer couponId = orderCouponMiddles.get(0).getCouponId();
+                // 2.过期后更新库存
+                if (1 == lifeUserOrder.getCouponType()) {
+                    // 代金券
+                    // 恢复库存
+                    lifeCouponMapper.update(null, new LambdaUpdateWrapper<LifeCoupon>()
+                            .setSql("single_qty=single_qty+" + updateNum)
+                            .eq(LifeCoupon::getId, couponId));
+                } else {
+                    // 团购
+                    lifeGroupBuyMainMapper.update(null, new LambdaUpdateWrapper<LifeGroupBuyMain>()
+                            .setSql("inventory_num=inventory_num+" + updateNum)
+                            .eq(LifeGroupBuyMain::getId, couponId));
+                }
+            } else {
+                log.error("取消失败,未查询到订单");
+                throw new RuntimeException("取消失败,未查询到订单");
+            }
+        }
+        return this.saveOrUpdate(lifeUserOrder);
     }
 
     /**
@@ -1034,7 +1057,7 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
             LifeCoupon lifeCoupon = lifeCouponMapper.selectById(couponId);
             status = lifeCoupon.getStatus();
             // 限购数量
-            buyLimit = Integer.parseInt(lifeCoupon.getPurchaseLimitCode());
+            buyLimit = lifeCoupon.getBuyLimit();
             // 已购数量
             buyCount = orderCouponMiddleMapper.selectCount(new QueryWrapper<OrderCouponMiddle>().eq("coupon_id", couponId).notIn("status", OrderStatusEnum.CANCEL.getStatus(), OrderStatusEnum.REFUND.getStatus())
                     .inSql("order_id", "select order_id from life_user_order where user_id = " + userId + " and store_id = " + storeId));

+ 20 - 0
alien-store/src/main/java/shop/alien/store/service/impl/LifeCouponServiceImpl.java

@@ -581,6 +581,26 @@ public class LifeCouponServiceImpl extends ServiceImpl<LifeCouponMapper, LifeCou
                 return R.fail("该劵在不可用日期内");
             }
         }
+        // 判断是否在使用时间内
+        Integer buyUseStartTime = Integer.parseInt(lifeCoupon.getBuyUseStartTime());
+        Integer buyUseEndTime = Integer.parseInt(lifeCoupon.getBuyUseEndTime());
+        // 获取当前小时
+        LocalTime now = LocalTime.now();
+        int currentHour = now.getHour();
+        // 验证输入的小时是否有效
+        if (buyUseStartTime < 0 || buyUseStartTime > 23 || buyUseEndTime < 0 || buyUseEndTime > 23) {
+            throw new IllegalArgumentException("小时必须在0-23之间");
+        }
+        // 处理跨天的情况,例如22点到次日3点
+        if (buyUseStartTime > buyUseEndTime) {
+             if(currentHour < buyUseStartTime && currentHour > buyUseEndTime){
+                 return R.fail("该劵不在有效期内");
+             }
+        } else {
+            if (currentHour < buyUseStartTime || currentHour > buyUseEndTime) {
+                return R.fail("该劵不在有效期内");
+            }
+        }
         return R.success("效验通过");
     }