feat(market):新增自动修改活动状态和自动失效过期优惠卷的功能
This commit is contained in:
parent
3a5882268d
commit
b98ff8fdf3
@ -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("更新优惠卷状态失败");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user