Browse Source

add:(代金券/团购)定时任务更新状态 定时上架,定时过期下架

lyx 3 tháng trước cách đây
mục cha
commit
55c71f1e26
1 tập tin đã thay đổi với 196 bổ sung0 xóa
  1. 196 0
      alien-job/src/main/java/shop/alien/job/store/LifeCouponJob.java

+ 196 - 0
alien-job/src/main/java/shop/alien/job/store/LifeCouponJob.java

@@ -6,10 +6,13 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 import shop.alien.entity.store.LifeCoupon;
+import shop.alien.entity.store.LifeGroupBuyMain;
 import shop.alien.entity.store.LifeUserOrder;
 import shop.alien.mapper.LifeCouponMapper;
+import shop.alien.mapper.LifeGroupBuyMainMapper;
 import shop.alien.mapper.LifeUserOrderMapper;
 import shop.alien.util.common.AlipayTradeRefund;
+import shop.alien.util.common.constant.CouponStatusEnum;
 
 import java.util.ArrayList;
 import java.util.Calendar;
@@ -33,11 +36,13 @@ public class LifeCouponJob {
     private final LifeUserOrderMapper lifeUserOrderMapper;
 
     private final AlipayTradeRefund alipayTradeRefund;
+    private final LifeGroupBuyMainMapper lifeGroupBuyMainMapper;
 
     /**
      * 该方法用于定时更新生活优惠券(LifeCoupon)的状态
      */
     @XxlJob("quanStatusUpdateTask")
+    @Deprecated
     public void quanStatusUpdateTask() {
         //执行修改代金券状态
         System.out.println("执行修改代金券状态 ===>");
@@ -125,6 +130,7 @@ public class LifeCouponJob {
      * 过期自动退
      */
     @XxlJob("orderStatusUpdateTask")
+    @Deprecated
     public void orderStatusUpdateTask() {
         Date now = new Date();
         Calendar calendar = Calendar.getInstance();
@@ -160,5 +166,195 @@ public class LifeCouponJob {
         }
     }
 
+    /**
+     * 代金券状态更新 (到时间定时上架,过期自动下架)
+     */
+    @XxlJob("couponStatusUpdateTask")
+    public void couponStatusUpdateTask(){
+        //执行修改代金券状态
+        System.out.println("执行修改代金券状态 ===>");
+        // 获取当前时间
+        Date now = new Date();
+        // 创建一个 Calendar 实例,用于对日期进行操作
+        Calendar calendar = Calendar.getInstance();
+        // 将 Calendar 的时间设置为当前时间
+        calendar.setTime(now);
+        // 将 Calendar 的小时设置为 0
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        // 将 Calendar 的分钟设置为 0
+        calendar.set(Calendar.MINUTE, 0);
+        // 将 Calendar 的秒设置为 0
+        calendar.set(Calendar.SECOND, 0);
+        // 将 Calendar 的毫秒设置为 0
+        calendar.set(Calendar.MILLISECOND, 0);
+        // 获取处理后的时间,即当前日期的零点
+        now = calendar.getTime();
 
+        // 创建一个 LambdaUpdateWrapper 用于查询生活优惠券,这里实际上主要用于查询操作
+        LambdaUpdateWrapper<LifeCoupon> selectWrapper = new LambdaUpdateWrapper<>();
+        // 创建一个集合,用于存储要查询的优惠券状态值
+        List<Integer> status = new ArrayList<>();
+        //
+        status.add(CouponStatusEnum.NOT_START.getCode());
+        status.add(CouponStatusEnum.SOLD_OUT.getCode());
+        status.add(CouponStatusEnum.ONGOING.getCode());
+        status.add(CouponStatusEnum.SOLD_OFF.getCode());
+
+        // 设置查询条件,查询状态为2,4,5,6 的生活优惠券
+        selectWrapper.in(LifeCoupon::getStatus, status);
+        // 调用 lifeCouponMapper 的 selectList 方法,根据上述条件查询生活优惠券列表
+        List<LifeCoupon> jinxingzhongList = lifeCouponMapper.selectList(selectWrapper);
+        System.out.println("执行修改代金券状态 ===> 未开始 已售罄 进行中,已下架 优惠券列表 ===> " + jinxingzhongList);
+        List<String> endCouponIds = new ArrayList<>();
+        // 判断查询结果列表是否不为空
+        if (!jinxingzhongList.isEmpty()) {
+            // 遍历查询到的生活优惠券列表
+            for (LifeCoupon quan : jinxingzhongList) {
+                // 获取当前优惠券的结束日期
+                Date endTime = quan.getEndDate();
+                // 比较当前日期(零点)和优惠券的结束日期,如果当前日期大于结束日期  将状态变成已结束
+                if (now.compareTo(endTime) > 0) {
+                    endCouponIds.add(quan.getId());
+                }
+            }
+        }
+        // 创建一个 LambdaUpdateWrapper 用于更新生活优惠券的状态
+        LambdaUpdateWrapper<LifeCoupon> updateWrapper = new LambdaUpdateWrapper<>();
+        // 设置更新条件,根据优惠券的 ID 进行更新
+        updateWrapper.in(LifeCoupon::getId,endCouponIds)
+                // 设置要更新的字段,将优惠券的状态更新为 3
+                .set(LifeCoupon::getStatus, CouponStatusEnum.ENDED.getCode());
+        // 调用 lifeCouponMapper 的 update 方法,根据上述条件更新优惠券的状态
+        int updateNum = lifeCouponMapper.update(null, updateWrapper);
+        System.out.println("执行修改代金券状态 ===> 已结束 优惠券列表 ===> " + endCouponIds);
+        System.out.println("执行修改代金券状态 ===> 已结束 优惠券数量 ===> " + updateNum);
+// --------------------------------------------------------------------------------------------------------
+        // 创建另一个 LambdaUpdateWrapper 用于查询状态为 0 的生活优惠券
+        LambdaUpdateWrapper<LifeCoupon> selectWrapper2 = new LambdaUpdateWrapper<>();
+        // 设置查询条件,查询状态为 0 的生活优惠券
+        selectWrapper2.eq(LifeCoupon::getStatus, CouponStatusEnum.NOT_START.getCode());
+        // 调用 lifeCouponMapper 的 selectList 方法,根据上述条件查询生活优惠券列表
+        List<LifeCoupon> weikaishiList = lifeCouponMapper.selectList(selectWrapper2);
+        List<String> startCouponIds = new ArrayList<>();
+        // 判断查询结果列表是否不为空
+        if (!weikaishiList.isEmpty()) {
+            // 遍历查询到的生活优惠券列表
+            for (LifeCoupon quan : weikaishiList) {
+                // 获取当前优惠券的开始日期
+                Date startTime = quan.getStartDate();
+                // 获取当前优惠券的结束日期
+                Date endTime = quan.getEndDate();
+                // 判断当前日期(零点)是否在优惠券的开始日期和结束日期之间  将待使用变成进行中
+                if (now.compareTo(startTime) >= 0 && now.compareTo(endTime) <= 0) {
+                    startCouponIds.add(quan.getId());
+                }
+            }
+        }
+        // 创建一个 LambdaUpdateWrapper 用于更新生活优惠券的状态
+        LambdaUpdateWrapper<LifeCoupon> updateWrapper2 = new LambdaUpdateWrapper<>();
+        // 设置更新条件,根据优惠券的 ID 进行更新
+        updateWrapper.eq(LifeCoupon::getId, startCouponIds)
+                // 设置要更新的字段,将优惠券的状态更新为 1
+                .set(LifeCoupon::getStatus, CouponStatusEnum.ONGOING.getCode());
+        // 调用 lifeCouponMapper 的 update 方法,根据上述条件更新优惠券的状态
+        int updateNum2 = lifeCouponMapper.update(null, updateWrapper2);
+        System.out.println("执行修改代金券状态 ===> 进行中 优惠券列表 ===> " + startCouponIds);
+        System.out.println("执行修改代金券状态 ===> 进行中 优惠券数量 ===> " + updateNum2);
+    }
+
+    /**
+     * 团购状态更新
+     */
+    @XxlJob("groupBuyStatusUpdateTask")
+    public void groupBuyStatusUpdateTask(){
+        //执行修改团购状态
+        System.out.println("执行修改团购状态 ===>");
+        // 获取当前时间
+        Date now = new Date();
+        // 创建一个 Calendar 实例,用于对日期进行操作
+        Calendar calendar = Calendar.getInstance();
+        // 将 Calendar 的时间设置为当前时间
+        calendar.setTime(now);
+        // 将 Calendar 的小时设置为 0
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        // 将 Calendar 的分钟设置为 0
+        calendar.set(Calendar.MINUTE, 0);
+        // 将 Calendar 的秒设置为 0
+        calendar.set(Calendar.SECOND, 0);
+        // 将 Calendar 的毫秒设置为 0
+        calendar.set(Calendar.MILLISECOND, 0);
+        // 获取处理后的时间,即当前日期的零点
+        now = calendar.getTime();
+
+        // 创建一个 LambdaUpdateWrapper 用于查询生活优惠券,这里实际上主要用于查询操作
+        LambdaUpdateWrapper<LifeGroupBuyMain> selectWrapper = new LambdaUpdateWrapper<>();
+        // 创建一个集合,用于存储要查询的优惠券状态值
+        List<Integer> status = new ArrayList<>();
+        //
+        status.add(CouponStatusEnum.NOT_START.getCode());
+        status.add(CouponStatusEnum.SOLD_OUT.getCode());
+        status.add(CouponStatusEnum.ONGOING.getCode());
+        status.add(CouponStatusEnum.SOLD_OFF.getCode());
+
+        // 设置查询条件,查询状态为2,4,5,6 的生活优惠券
+        selectWrapper.in(LifeGroupBuyMain::getStatus, status);
+        // 调用 lifeCouponMapper 的 selectList 方法,根据上述条件查询生活优惠券列表
+        List<LifeGroupBuyMain> jinxingzhongList = lifeGroupBuyMainMapper.selectList(selectWrapper);
+        System.out.println("执行修改团购状态 ===> 未开始 已售罄 进行中,已下架 优惠券列表 ===> " + jinxingzhongList);
+        List<Integer> endCouponIds = new ArrayList<>();
+        // 判断查询结果列表是否不为空
+        if (!jinxingzhongList.isEmpty()) {
+            // 遍历查询到的生活优惠券列表
+            for (LifeGroupBuyMain groupBuy : jinxingzhongList) {
+                // 获取当前优惠券的结束日期
+                Date endTime = groupBuy.getEndTime();
+                // 比较当前日期(零点)和优惠券的结束日期,如果当前日期大于结束日期  将状态变成已结束
+                if (now.compareTo(endTime) > 0) {
+                    endCouponIds.add(groupBuy.getId());
+                }
+            }
+        }
+        // 创建一个 LambdaUpdateWrapper 用于更新生活优惠券的状态
+        LambdaUpdateWrapper<LifeGroupBuyMain> updateWrapper = new LambdaUpdateWrapper<>();
+        // 设置更新条件,根据优惠券的 ID 进行更新
+        updateWrapper.in(LifeGroupBuyMain::getId,endCouponIds)
+                // 设置要更新的字段,将优惠券的状态更新为 7
+                .set(LifeGroupBuyMain::getStatus, CouponStatusEnum.ENDED.getCode());
+        // 调用 lifeCouponMapper 的 update 方法,根据上述条件更新优惠券的状态
+        int updateNum = lifeGroupBuyMainMapper.update(null, updateWrapper);
+        System.out.println("执行修改团购状态 ===> 已结束 优惠券列表 ===> " + endCouponIds);
+        System.out.println("执行修改团购状态 ===> 已结束 优惠券数量 ===> " + updateNum);
+// --------------------------------------------------------------------------------------------------------
+        // 创建另一个 LambdaUpdateWrapper 用于查询状态为 0 的生活优惠券
+        LambdaUpdateWrapper<LifeGroupBuyMain> selectWrapper2 = new LambdaUpdateWrapper<>();
+        // 设置查询条件,查询状态为 0 的生活优惠券
+        selectWrapper2.eq(LifeGroupBuyMain::getStatus, CouponStatusEnum.NOT_START.getCode());
+        // 调用 lifeCouponMapper 的 selectList 方法,根据上述条件查询生活优惠券列表
+        List<LifeGroupBuyMain> weikaishiList = lifeGroupBuyMainMapper.selectList(selectWrapper2);
+        List<Integer> startCouponIds = new ArrayList<>();
+        // 判断查询结果列表是否不为空
+        if (!weikaishiList.isEmpty()) {
+            // 遍历查询到的生活优惠券列表
+            for (LifeGroupBuyMain quan : weikaishiList) {
+                // 获取当前优惠券的开始日期
+                Date startTime = quan.getStartTimeValue();
+                // 获取当前优惠券的结束日期
+                Date endTime = quan.getEndTime();
+                // 判断当前日期(零点)是否在优惠券的开始日期和结束日期之间  将待使用变成进行中
+                if (now.compareTo(startTime) >= 0 && now.compareTo(endTime) <= 0) {
+                    startCouponIds.add(quan.getId());
+                }
+            }
+        }
+        // 创建一个 LambdaUpdateWrapper 用于更新生活优惠券的状态
+        LambdaUpdateWrapper<LifeGroupBuyMain> updateWrapper2 = new LambdaUpdateWrapper<>();
+        // 设置更新条件,根据优惠券的 ID 进行更新
+        updateWrapper.eq(LifeGroupBuyMain::getId, startCouponIds)
+                // 设置要更新的字段,将优惠券的状态更新为 1
+                .set(LifeGroupBuyMain::getStatus, CouponStatusEnum.ONGOING.getCode());
+        // 调用 lifeCouponMapper 的 update 方法,根据上述条件更新优惠券的状态
+        int updateNum2 = lifeGroupBuyMainMapper.update(null, updateWrapper2);
+        System.out.println("执行修改团购状态 ===> 进行中 优惠券列表 ===> " + startCouponIds);
+        System.out.println("执行修改团购状态 ===> 进行中 优惠券数量 ===> " + updateNum2);
+    }
 }