feat(market):新增自动修改活动状态和自动失效过期优惠卷的功能

This commit is contained in:
JIAN 2024-09-23 22:52:07 +08:00
parent 3a5882268d
commit b98ff8fdf3

View File

@ -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<Activity> 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<Coupon> 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("更新优惠卷状态失败");
}
}
}
}