feat:持久化任务

This commit is contained in:
xiang
2025-07-27 23:16:14 +08:00
parent 162e7191ea
commit fbecd0a03a
5 changed files with 40 additions and 5 deletions

View File

@@ -30,7 +30,7 @@
<dependency> <dependency>
<groupId>com.xiang</groupId> <groupId>com.xiang</groupId>
<artifactId>xservice-common</artifactId> <artifactId>xservice-common</artifactId>
<version>1.0.1-snapshot</version> <version>1.0.2-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.xiang</groupId> <groupId>com.xiang</groupId>

View File

@@ -1,5 +1,6 @@
package com.xiang; package com.xiang;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
@@ -10,6 +11,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
*/ */
@SpringBootApplication @SpringBootApplication
@EnableScheduling @EnableScheduling
@MapperScan("com.xiang.xservice.fwd.mapper")
public class ServiceScriptApplication { public class ServiceScriptApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(ServiceScriptApplication.class, args); SpringApplication.run(ServiceScriptApplication.class, args);

View File

@@ -9,4 +9,5 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
public class FwdOrderTaskParam { public class FwdOrderTaskParam {
private Long projectId; private Long projectId;
private Long taskId;
} }

View File

@@ -2,6 +2,7 @@ package com.xiang.xservice.fwd.schedule;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.xiang.xservice.basic.utils.DateUtils; 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.basic.xservice.dingTalk.service.DingTalkService;
import com.xiang.xservice.fwd.entity.param.FwdOrderTaskParam; import com.xiang.xservice.fwd.entity.param.FwdOrderTaskParam;
import com.xiang.xservice.fwd.entity.pojo.FPerformConfig; 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.mapper.FwdUserConfigMapper;
import com.xiang.xservice.fwd.service.IPerformService; import com.xiang.xservice.fwd.service.IPerformService;
import com.xiang.xservice.schedule.core.DynamicTaskScheduler; 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.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.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; 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 org.springframework.web.bind.annotation.RestController;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -43,6 +49,7 @@ public class FwdImportantMsgJob {
private final FwdUserConfigMapper fwdUserConfigMapper; private final FwdUserConfigMapper fwdUserConfigMapper;
private final FwdAudienceConfigMapper fwdAudienceConfigMapper; private final FwdAudienceConfigMapper fwdAudienceConfigMapper;
private final IPerformService iPerformService; private final IPerformService iPerformService;
private final IDynamicTaskSchedulerService dynamicTaskSchedulerService;
@Value("${DingTalk.chatId}") @Value("${DingTalk.chatId}")
private String chatId; private String chatId;
@@ -77,12 +84,29 @@ public class FwdImportantMsgJob {
StringBuilder msg = new StringBuilder("今日" + now + "演唱会门票预售信息:\n"); StringBuilder msg = new StringBuilder("今日" + now + "演唱会门票预售信息:\n");
for (FPerformProjectInfo data : saleTodayData) { for (FPerformProjectInfo data : saleTodayData) {
msg.append("演唱会名称:").append(data.getProjectName()).append("预售时间:").append(DateUtils.getDateTimeStr(data.getPreSaleTime())).append("\n"); msg.append("演唱会名称:").append(data.getProjectName()).append("预售时间:").append(DateUtils.getDateTimeStr(data.getPreSaleTime())).append("\n");
long taskId = PrimaryKeyUtils.snowflakeId();
dynamicTaskScheduler.schedule( dynamicTaskScheduler.schedule(
new TaskConfig(System.currentTimeMillis(), data.getProjectName(), data.getPreSaleTime()), new TaskConfig(taskId, "芬玩岛演唱会抢票-【" + data.getProjectName() + "", TaskGroupEnum.SERVICE_FWD_SCHEDULE.getCode(),
new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, iPerformService, new FwdOrderTaskParam(data.getProjectId()))); data.getPreSaleTime(), null),
new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, iPerformService,
new FwdOrderTaskParam(data.getProjectId(), taskId), dynamicTaskSchedulerService));
savaTask(data, taskId);
} }
msg.append("请注意进行数据库配置的更改!"); msg.append("请注意进行数据库配置的更改!");
dingTalkService.sendChatMessage(chatId, msg.toString()); dingTalkService.sendChatMessage(chatId, msg.toString());
log.info("【芬玩岛】演唱会预售定时任务结束time:{}", System.currentTimeMillis()); 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);
}
} }

View File

@@ -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.FwdAudienceConfigMapper;
import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper; import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper;
import com.xiang.xservice.fwd.service.IPerformService; import com.xiang.xservice.fwd.service.IPerformService;
import com.xiang.xservice.schedule.service.IDynamicTaskSchedulerService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
@@ -20,17 +21,22 @@ public class TicketGrabTask implements Runnable {
private final FwdAudienceConfigMapper audienceConfigMapper; private final FwdAudienceConfigMapper audienceConfigMapper;
private final IPerformService performService; private final IPerformService performService;
private final FwdOrderTaskParam param; 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.userConfigMapper = userConfigMapper;
this.audienceConfigMapper = audienceConfigMapper; this.audienceConfigMapper = audienceConfigMapper;
this.performService = performService; this.performService = performService;
this.param = param; this.param = param;
this.dynamicTaskSchedulerService = dynamicTaskSchedulerService;
} }
@Override @Override
public void run() { public void run() {
log.info("【TicketGrabTask】 run start. 获取到参数:{}", JSON.toJSONString(param)); log.info("【TicketGrabTask】 run start. 获取到参数:{}", JSON.toJSONString(param));
dynamicTaskSchedulerService.updateProcess(param.getTaskId());
List<FUserConfig> availableUser = userConfigMapper.getAvailableUser(); List<FUserConfig> availableUser = userConfigMapper.getAvailableUser();
if (CollectionUtils.isEmpty(availableUser)) { if (CollectionUtils.isEmpty(availableUser)) {
return; return;
@@ -38,7 +44,9 @@ public class TicketGrabTask implements Runnable {
for (FUserConfig userConfig : availableUser) { for (FUserConfig userConfig : availableUser) {
List<FAudienceConfig> audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId()); List<FAudienceConfig> audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId());
try { 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) { } catch (Exception e) {
log.error("创建订单失败", e); log.error("创建订单失败", e);
} }