feat:持久化任务
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -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>
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ import lombok.NoArgsConstructor;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
public class FwdOrderTaskParam {
|
public class FwdOrderTaskParam {
|
||||||
private Long projectId;
|
private Long projectId;
|
||||||
|
private Long taskId;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user