diff --git a/pom.xml b/pom.xml index 6ebf149..903ba07 100644 --- a/pom.xml +++ b/pom.xml @@ -30,7 +30,7 @@ com.xiang xservice-common - 1.0.1-snapshot + 1.0.2-SNAPSHOT com.xiang diff --git a/script/src/main/java/com/xiang/ServiceScriptApplication.java b/script/src/main/java/com/xiang/ServiceScriptApplication.java index 835c988..5fa3553 100644 --- a/script/src/main/java/com/xiang/ServiceScriptApplication.java +++ b/script/src/main/java/com/xiang/ServiceScriptApplication.java @@ -1,5 +1,6 @@ package com.xiang; +import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; @@ -10,6 +11,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; */ @SpringBootApplication @EnableScheduling +@MapperScan("com.xiang.xservice.fwd.mapper") public class ServiceScriptApplication { public static void main(String[] args) { SpringApplication.run(ServiceScriptApplication.class, args); diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/param/FwdOrderTaskParam.java b/script/src/main/java/com/xiang/xservice/fwd/entity/param/FwdOrderTaskParam.java index 8975931..cfaee02 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/param/FwdOrderTaskParam.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/param/FwdOrderTaskParam.java @@ -9,4 +9,5 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class FwdOrderTaskParam { private Long projectId; + private Long taskId; } diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java index 38f6cbd..11d95e0 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java @@ -2,6 +2,7 @@ package com.xiang.xservice.fwd.schedule; import com.alibaba.fastjson2.JSONObject; import com.xiang.xservice.basic.utils.DateUtils; +import com.xiang.xservice.basic.utils.PrimaryKeyUtils; import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; import com.xiang.xservice.fwd.entity.param.FwdOrderTaskParam; import com.xiang.xservice.fwd.entity.pojo.FPerformConfig; @@ -12,7 +13,11 @@ import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper; import com.xiang.xservice.fwd.service.IPerformService; import com.xiang.xservice.schedule.core.DynamicTaskScheduler; +import com.xiang.xservice.schedule.entity.ScheduledTaskEntity; import com.xiang.xservice.schedule.entity.TaskConfig; +import com.xiang.xservice.schedule.enums.TaskGroupEnum; +import com.xiang.xservice.schedule.enums.TaskStatusEnum; +import com.xiang.xservice.schedule.service.IDynamicTaskSchedulerService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -23,6 +28,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors; @@ -43,6 +49,7 @@ public class FwdImportantMsgJob { private final FwdUserConfigMapper fwdUserConfigMapper; private final FwdAudienceConfigMapper fwdAudienceConfigMapper; private final IPerformService iPerformService; + private final IDynamicTaskSchedulerService dynamicTaskSchedulerService; @Value("${DingTalk.chatId}") private String chatId; @@ -77,12 +84,29 @@ public class FwdImportantMsgJob { StringBuilder msg = new StringBuilder("今日" + now + "演唱会门票预售信息:\n"); for (FPerformProjectInfo data : saleTodayData) { msg.append("演唱会名称:").append(data.getProjectName()).append("预售时间:").append(DateUtils.getDateTimeStr(data.getPreSaleTime())).append("\n"); + long taskId = PrimaryKeyUtils.snowflakeId(); dynamicTaskScheduler.schedule( - new TaskConfig(System.currentTimeMillis(), data.getProjectName(), data.getPreSaleTime()), - new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, iPerformService, new FwdOrderTaskParam(data.getProjectId()))); + new TaskConfig(taskId, "芬玩岛演唱会抢票-【" + data.getProjectName() + "】", TaskGroupEnum.SERVICE_FWD_SCHEDULE.getCode(), + data.getPreSaleTime(), null), + new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, iPerformService, + new FwdOrderTaskParam(data.getProjectId(), taskId), dynamicTaskSchedulerService)); + savaTask(data, taskId); } msg.append("请注意进行数据库配置的更改!"); dingTalkService.sendChatMessage(chatId, msg.toString()); log.info("【芬玩岛】演唱会预售定时任务结束!time:{}", System.currentTimeMillis()); } + + private void savaTask(FPerformProjectInfo data, long taskId) { + ScheduledTaskEntity entity = new ScheduledTaskEntity(); + entity.setId(taskId); + entity.setTaskName("芬玩岛演唱会抢票-【" + data.getProjectName() + "】"); + entity.setTaskGroup(TaskGroupEnum.SERVICE_FWD_SCHEDULE.getCode()); + entity.setRunTime(data.getPreSaleTime()); + entity.setStatus(TaskStatusEnum.UN_START.getCode()); + entity.setParameters(null); + entity.setCreatedTime(LocalDateTime.now()); + entity.setUpdatedTime(LocalDateTime.now()); + dynamicTaskSchedulerService.saveTask(entity); + } } diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java index f478e7d..418a611 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java @@ -7,6 +7,7 @@ import com.xiang.xservice.fwd.entity.pojo.FUserConfig; import com.xiang.xservice.fwd.mapper.FwdAudienceConfigMapper; import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper; import com.xiang.xservice.fwd.service.IPerformService; +import com.xiang.xservice.schedule.service.IDynamicTaskSchedulerService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -20,17 +21,22 @@ public class TicketGrabTask implements Runnable { private final FwdAudienceConfigMapper audienceConfigMapper; private final IPerformService performService; private final FwdOrderTaskParam param; + private final IDynamicTaskSchedulerService dynamicTaskSchedulerService; - public TicketGrabTask(FwdUserConfigMapper userConfigMapper, FwdAudienceConfigMapper audienceConfigMapper, IPerformService performService, FwdOrderTaskParam param) { + public TicketGrabTask(FwdUserConfigMapper userConfigMapper, FwdAudienceConfigMapper audienceConfigMapper, + IPerformService performService, FwdOrderTaskParam param, + IDynamicTaskSchedulerService dynamicTaskSchedulerService) { this.userConfigMapper = userConfigMapper; this.audienceConfigMapper = audienceConfigMapper; this.performService = performService; this.param = param; + this.dynamicTaskSchedulerService = dynamicTaskSchedulerService; } @Override public void run() { log.info("【TicketGrabTask】 run start. 获取到参数:{}", JSON.toJSONString(param)); + dynamicTaskSchedulerService.updateProcess(param.getTaskId()); List availableUser = userConfigMapper.getAvailableUser(); if (CollectionUtils.isEmpty(availableUser)) { return; @@ -38,7 +44,9 @@ public class TicketGrabTask implements Runnable { for (FUserConfig userConfig : availableUser) { List audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId()); try { - performService.createProjectOrder(param.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList())); + if (performService.createProjectOrder(param.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList()))) { + dynamicTaskSchedulerService.finishTask(param.getTaskId()); + } } catch (Exception e) { log.error("创建订单失败", e); }