From 9c2ae604e60c9f0950b344f58e5748db956a9874 Mon Sep 17 00:00:00 2001 From: Zhujx Date: Mon, 28 Jul 2025 15:02:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=88=9D=E5=A7=8B=E5=8C=96=E8=B0=83?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fwd/schedule/FwdImportantMsgJob.java | 34 +++++++++++++++--- .../xservice/fwd/schedule/TicketGrabTask.java | 36 +++++++++++-------- .../xb/schedule/jntyzx/QueryVenueJob.java | 24 ------------- .../src/main/resources/application-test.yml | 2 +- 4 files changed, 53 insertions(+), 43 deletions(-) delete mode 100644 script/src/main/java/com/xiang/xservice/xb/schedule/jntyzx/QueryVenueJob.java 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 11d95e0..434386c 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 @@ -1,6 +1,8 @@ package com.xiang.xservice.fwd.schedule; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson2.JSONObject; +import com.google.common.collect.Maps; import com.xiang.xservice.basic.utils.DateUtils; import com.xiang.xservice.basic.utils.PrimaryKeyUtils; import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; @@ -21,15 +23,19 @@ import com.xiang.xservice.schedule.service.IDynamicTaskSchedulerService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; +import javax.annotation.PostConstruct; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -54,6 +60,24 @@ public class FwdImportantMsgJob { @Value("${DingTalk.chatId}") private String chatId; + @PostConstruct + public void init() { + log.info("xs-fwd任务调度系统初始化!"); + ScheduledTaskEntity scheduledTaskEntity = new ScheduledTaskEntity(); + scheduledTaskEntity.setTaskGroup(TaskGroupEnum.SERVICE_FWD_SCHEDULE.getCode()); + scheduledTaskEntity.setStatus(TaskStatusEnum.UN_START.getCode()); + List taskList = dynamicTaskSchedulerService.getTaskList(scheduledTaskEntity); + for (ScheduledTaskEntity taskEntity : taskList) { + HashMap params = com.alibaba.fastjson2.JSON.parseObject(taskEntity.getParameters(), HashMap.class); + FwdOrderTaskParam param = MapUtils.isEmpty(params) ? new FwdOrderTaskParam(null, taskEntity.getId()) : new FwdOrderTaskParam((Long) params.get("projectId"), taskEntity.getId()); + LocalDateTime runTime = taskEntity.getRunTime().isBefore(LocalDateTime.now()) ? LocalDateTime.now().plusMinutes(1) : taskEntity.getRunTime(); + dynamicTaskScheduler.schedule( + new TaskConfig(taskEntity.getId(), taskEntity.getTaskName(), taskEntity.getTaskGroup(), runTime, params), + new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, iPerformService, param, dynamicTaskSchedulerService) + ); + } + } + @Scheduled(cron = "0 0 8 1/1 * ?") @PostMapping("/preSaleReminderJob") public void preSaleReminderJob() throws Exception { @@ -85,26 +109,28 @@ public class FwdImportantMsgJob { for (FPerformProjectInfo data : saleTodayData) { msg.append("演唱会名称:").append(data.getProjectName()).append("预售时间:").append(DateUtils.getDateTimeStr(data.getPreSaleTime())).append("\n"); long taskId = PrimaryKeyUtils.snowflakeId(); + Map params = Maps.newHashMap(); + params.put("projectId", data.getProjectId()); dynamicTaskScheduler.schedule( new TaskConfig(taskId, "芬玩岛演唱会抢票-【" + data.getProjectName() + "】", TaskGroupEnum.SERVICE_FWD_SCHEDULE.getCode(), - data.getPreSaleTime(), null), + data.getPreSaleTime(), params), new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, iPerformService, new FwdOrderTaskParam(data.getProjectId(), taskId), dynamicTaskSchedulerService)); - savaTask(data, taskId); + savaTask(data, taskId, params); } msg.append("请注意进行数据库配置的更改!"); dingTalkService.sendChatMessage(chatId, msg.toString()); log.info("【芬玩岛】演唱会预售定时任务结束!time:{}", System.currentTimeMillis()); } - private void savaTask(FPerformProjectInfo data, long taskId) { + private void savaTask(FPerformProjectInfo data, long taskId, Map params) { 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.setParameters(JSON.toJSONString(params)); 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 418a611..ae6b271 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 @@ -35,21 +35,29 @@ public class TicketGrabTask implements Runnable { @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; - } - for (FUserConfig userConfig : availableUser) { - List audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId()); - try { - if (performService.createProjectOrder(param.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList()))) { - dynamicTaskSchedulerService.finishTask(param.getTaskId()); - } - } catch (Exception e) { - log.error("创建订单失败", e); + try { + log.info("【TicketGrabTask】 run start. 获取到参数:{}", JSON.toJSONString(param)); + dynamicTaskSchedulerService.updateProcess(param.getTaskId()); + List availableUser = userConfigMapper.getAvailableUser(); + if (CollectionUtils.isEmpty(availableUser)) { + return; } + for (FUserConfig userConfig : availableUser) { + List audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId()); + try { + if (performService.createProjectOrder(param.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList()))) { + dynamicTaskSchedulerService.finishTask(param.getTaskId()); + } else { + dynamicTaskSchedulerService.finishTask(param.getTaskId()); + } + } catch (Exception e) { + log.error("创建订单失败", e); + dynamicTaskSchedulerService.errTask(param.getTaskId()); + } + } + } catch (Exception e) { + log.error("任务调度运行失败", e); + dynamicTaskSchedulerService.errTask(param.getTaskId()); } } } diff --git a/script/src/main/java/com/xiang/xservice/xb/schedule/jntyzx/QueryVenueJob.java b/script/src/main/java/com/xiang/xservice/xb/schedule/jntyzx/QueryVenueJob.java deleted file mode 100644 index 4bd7e10..0000000 --- a/script/src/main/java/com/xiang/xservice/xb/schedule/jntyzx/QueryVenueJob.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.xiang.xservice.xb.schedule.jntyzx; - -import com.xiang.xservice.jntyzx.service.JntyzxService; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * @Author: xiang - * @Date: 2025-05-14 15:34 - */ -@Component -@RequiredArgsConstructor -@Slf4j -public class QueryVenueJob { - private final JntyzxService jntyzxService; - -// @Scheduled(cron = "0 0 14 1/1 * ?") - public void query() throws Exception{ - log.info("[查询场地] 查询当天场地定时任务启动!"); - jntyzxService.queryAvailable(); - log.info("[查询场地] 查询当天场地定时任务结束!"); - } -} diff --git a/script/src/main/resources/application-test.yml b/script/src/main/resources/application-test.yml index 297b5fd..b1df890 100644 --- a/script/src/main/resources/application-test.yml +++ b/script/src/main/resources/application-test.yml @@ -1,6 +1,6 @@ spring: datasource: - url: jdbc:mysql://172.28.159.213:3306/xservice-script?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true + url: jdbc:mysql://120.27.153.87:3306/xservice-script-test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver