|
@@ -0,0 +1,72 @@
|
|
|
+package com.seamew.lottery.application.worker;
|
|
|
+
|
|
|
+import com.alibaba.fastjson2.JSON;
|
|
|
+import com.seamew.lottery.common.Constants;
|
|
|
+import com.seamew.lottery.common.Result;
|
|
|
+import com.seamew.lottery.domain.activity.model.vo.ActivityVO;
|
|
|
+import com.seamew.lottery.domain.activity.service.deploy.IActivityDeploy;
|
|
|
+import com.seamew.lottery.domain.activity.service.stateflow.IStateHandler;
|
|
|
+import com.xxl.job.core.handler.annotation.XxlJob;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @Author: seamew
|
|
|
+ * @Title: LotteryXxlJob
|
|
|
+ * @CreateTime: 2023年03月01日 14:02:00
|
|
|
+ * @Description: 抽奖业务,任务配置
|
|
|
+ * @Version: 1.0
|
|
|
+ */
|
|
|
+@Component
|
|
|
+@Slf4j
|
|
|
+public class LotteryXxlJob {
|
|
|
+ @Resource
|
|
|
+ private IActivityDeploy activityDeploy;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private IStateHandler stateHandler;
|
|
|
+
|
|
|
+ @XxlJob("lotteryActivityStateJobHandler")
|
|
|
+ public void lotteryActivityStateJobHandler() throws Exception {
|
|
|
+ log.info("扫描活动状态 Begin");
|
|
|
+
|
|
|
+ List<ActivityVO> activityVOList = activityDeploy.scanToDoActivityList(0L);
|
|
|
+ if (activityVOList.isEmpty()) {
|
|
|
+ log.info("扫描活动状态 End 暂无符合需要扫描的活动列表");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ while (!activityVOList.isEmpty()) {
|
|
|
+ for (ActivityVO activityVO : activityVOList) {
|
|
|
+ Integer state = activityVO.getState();
|
|
|
+ switch (state) {
|
|
|
+ // 活动状态为审核通过,在临近活动开启时间前,审核活动为活动中。在使用活动的时候,需要依照活动状态核时间两个字段进行判断和使用。
|
|
|
+ case 4:
|
|
|
+ Result state4Result = stateHandler.doing(activityVO.getActivityId(), Constants.ActivityState.PASS);
|
|
|
+ log.info("扫描活动状态为活动中 结果:{} activityId:{} activityName:{} creator:{}", JSON.toJSONString(state4Result), activityVO.getActivityId(), activityVO.getActivityName(), activityVO.getCreator());
|
|
|
+ break;
|
|
|
+ // 扫描时间已过期的活动,从活动中状态变更为关闭状态【这里也可以细化为2个任务来处理,也可以把时间判断放到数据库中操作】
|
|
|
+ case 5:
|
|
|
+ if (activityVO.getEndDateTime().before(new Date())) {
|
|
|
+ Result state5Result = stateHandler.close(activityVO.getActivityId(), Constants.ActivityState.DOING);
|
|
|
+ log.info("扫描活动状态为关闭 结果:{} activityId:{} activityName:{} creator:{}", JSON.toJSONString(state5Result), activityVO.getActivityId(), activityVO.getActivityName(), activityVO.getCreator());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取集合中最后一条记录,继续扫描后面10条记录
|
|
|
+ ActivityVO activityVO = activityVOList.get(activityVOList.size() - 1);
|
|
|
+ activityVOList = activityDeploy.scanToDoActivityList(activityVO.getId());
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("扫描活动状态 End");
|
|
|
+
|
|
|
+ }
|
|
|
+}
|