diff --git a/jzo2o-market/src/main/java/com/jzo2o/market/handler/XxlJobHandler.java b/jzo2o-market/src/main/java/com/jzo2o/market/handler/XxlJobHandler.java index 1e85f01..d0a3164 100644 --- a/jzo2o-market/src/main/java/com/jzo2o/market/handler/XxlJobHandler.java +++ b/jzo2o-market/src/main/java/com/jzo2o/market/handler/XxlJobHandler.java @@ -1,48 +1,99 @@ package com.jzo2o.market.handler; +import com.jzo2o.common.expcetions.DBException; +import com.jzo2o.common.utils.CollUtils; +import com.jzo2o.market.enums.ActivityStatusEnum; +import com.jzo2o.market.enums.CouponStatusEnum; +import com.jzo2o.market.model.domain.Activity; +import com.jzo2o.market.model.domain.Coupon; import com.jzo2o.market.service.IActivityService; import com.jzo2o.market.service.ICouponService; -import com.jzo2o.redis.annotations.Lock; -import com.jzo2o.redis.constants.RedisSyncQueueConstants; -import com.jzo2o.redis.sync.SyncManager; import com.xxl.job.core.handler.annotation.XxlJob; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.List; +import java.util.stream.Collectors; -import static com.jzo2o.market.constants.RedisConstants.Formatter.*; -import static com.jzo2o.market.constants.RedisConstants.RedisKey.COUPON_SEIZE_SYNC_QUEUE_NAME; - +/** + * XxlJob任务处理器 + * @author JIAN + */ @Component +@SuppressWarnings("unused") public class XxlJobHandler { - - @Resource - private SyncManager syncManager; - @Resource private IActivityService activityService; - @Resource private ICouponService couponService; /** - * 活动状态修改, + * 自动修改活动状态(1分钟1次) * 1.活动进行中状态修改 * 2.活动已失效状态修改 - * 1分钟一次 */ @XxlJob("updateActivityStatus") - public void updateActivitySatus(){ + @Transactional + public void updateActivityStatus() { + LocalDateTime nowTime = LocalDateTime.now(); + List activityList = activityService.lambdaQuery() + .eq(Activity::getStatus, ActivityStatusEnum.NO_DISTRIBUTE) + .or().eq(Activity::getStatus, ActivityStatusEnum.DISTRIBUTING) + // 不处理还没有发生的活动 + .le(Activity::getDistributeStartTime, nowTime) + .list(); + if (CollUtils.isEmpty(activityList)) { + return; + } + + for (Activity activity : activityList) { + if (activity.getDistributeEndTime().isBefore(nowTime)) { + // 活动结束 + if (!activityService.lambdaUpdate() + .eq(Activity::getId, activity.getId()) + .set(Activity::getStatus, ActivityStatusEnum.LOSE_EFFICACY) + .update()) { + throw new DBException("更新活动状态失败"); + } + } else if (activity.getDistributeStartTime().isBefore(nowTime)) { + // 活动开始 + if (!activityService.lambdaUpdate() + .eq(Activity::getId, activity.getId()) + .set(Activity::getStatus, ActivityStatusEnum.DISTRIBUTING) + .update()) { + throw new DBException("更新活动状态失败"); + } + } + } } /** - * 已领取优惠券自动过期任务 + * 自动过期已领取优惠券(1小时1次) */ @XxlJob("processExpireCoupon") + @Transactional public void processExpireCoupon() { + List couponList = couponService.lambdaQuery() + .eq(Coupon::getStatus, CouponStatusEnum.NO_USE) + // 不处理还没到有效期的优惠卷 + .le(Coupon::getValidityTime, LocalDateTime.now()) + .select(Coupon::getId) + .list(); + if (CollUtils.isEmpty(couponList)) { + return; + } + + // 设置状态已失效 + couponList = couponList.stream() + .map(coupon -> coupon.setStatus(CouponStatusEnum.INVALID)) + .collect(Collectors.toList()); + + if (!couponService.updateBatchById(couponList)) { + throw new DBException("更新优惠卷状态失败"); + } } - - -} +} \ No newline at end of file