feat:动态调度优化

This commit is contained in:
xiang
2025-07-27 14:11:00 +08:00
parent 322079079f
commit cba6280432
5 changed files with 46 additions and 23 deletions

View File

@@ -40,7 +40,7 @@
<dependency> <dependency>
<groupId>com.xiang</groupId> <groupId>com.xiang</groupId>
<artifactId>xservice-schedule-starter</artifactId> <artifactId>xservice-schedule-starter</artifactId>
<version>1.0-snapshot</version> <version>1.1-snapshot</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -0,0 +1,12 @@
package com.xiang.xservice.fwd.entity.param;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class FwdOrderTaskParam {
private Long projectId;
}

View File

@@ -1,9 +1,9 @@
package com.xiang.xservice.fwd.schedule; package com.xiang.xservice.fwd.schedule;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.google.common.collect.Lists;
import com.xiang.xservice.basic.utils.DateUtils; import com.xiang.xservice.basic.utils.DateUtils;
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.pojo.FPerformConfig; import com.xiang.xservice.fwd.entity.pojo.FPerformConfig;
import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo;
import com.xiang.xservice.fwd.mapper.FwdAudienceConfigMapper; import com.xiang.xservice.fwd.mapper.FwdAudienceConfigMapper;
@@ -11,6 +11,7 @@ import com.xiang.xservice.fwd.mapper.FwdPerformConfigMapper;
import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; 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.entity.TaskConfig;
import com.xiang.xservice.schedule.service.IDynamicTaskSchedulerService; import com.xiang.xservice.schedule.service.IDynamicTaskSchedulerService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -23,7 +24,6 @@ import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List; import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -77,8 +77,9 @@ 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");
String taskId = UUID.randomUUID().toString(); dynamicTaskSchedulerService.schedule(
dynamicTaskSchedulerService.schedule(taskId, data.getPreSaleTime(), new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, performConfigMapper, iPerformService)); new TaskConfig(System.currentTimeMillis(), data.getProjectName(), data.getPreSaleTime()),
new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, iPerformService, new FwdOrderTaskParam(data.getProjectId())));
} }
msg.append("请注意进行数据库配置的更改!"); msg.append("请注意进行数据库配置的更改!");
dingTalkService.sendChatMessage(chatId, msg.toString()); dingTalkService.sendChatMessage(chatId, msg.toString());

View File

@@ -1,48 +1,46 @@
package com.xiang.xservice.fwd.schedule; package com.xiang.xservice.fwd.schedule;
import com.alibaba.fastjson.JSON;
import com.xiang.xservice.fwd.entity.param.FwdOrderTaskParam;
import com.xiang.xservice.fwd.entity.pojo.FAudienceConfig; import com.xiang.xservice.fwd.entity.pojo.FAudienceConfig;
import com.xiang.xservice.fwd.entity.pojo.FPerformConfig;
import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo;
import com.xiang.xservice.fwd.entity.pojo.FUserConfig; 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.FwdPerformConfigMapper;
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 lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
@Component
@RequiredArgsConstructor
public class TicketGrabTask implements Runnable { public class TicketGrabTask implements Runnable {
private final FwdUserConfigMapper userConfigMapper; private final FwdUserConfigMapper userConfigMapper;
private final FwdAudienceConfigMapper audienceConfigMapper; private final FwdAudienceConfigMapper audienceConfigMapper;
private final FwdPerformConfigMapper performConfigMapper;
private final IPerformService performService; private final IPerformService performService;
private final FwdOrderTaskParam param;
public TicketGrabTask(FwdUserConfigMapper userConfigMapper, FwdAudienceConfigMapper audienceConfigMapper, IPerformService performService, FwdOrderTaskParam param) {
this.userConfigMapper = userConfigMapper;
this.audienceConfigMapper = audienceConfigMapper;
this.performService = performService;
this.param = param;
}
@Override @Override
public void run() { public void run() {
log.info("【TicketGrabTask】 run start. 获取到参数:{}", JSON.toJSONString(param));
List<FUserConfig> availableUser = userConfigMapper.getAvailableUser(); List<FUserConfig> availableUser = userConfigMapper.getAvailableUser();
if (CollectionUtils.isEmpty(availableUser)) { if (CollectionUtils.isEmpty(availableUser)) {
return; return;
} }
for (FUserConfig userConfig : availableUser) { for (FUserConfig userConfig : availableUser) {
List<FAudienceConfig> audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId()); List<FAudienceConfig> audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId());
List<FPerformConfig> availablePerform = performConfigMapper.getAvailablePerform(); try {
if (CollectionUtils.isNotEmpty(availablePerform)) { performService.createProjectOrder(param.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList()));
for (FPerformConfig performConfig : availablePerform) { } catch (Exception e) {
try { log.error("创建订单失败", e);
performService.createProjectOrder(performConfig.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList()));
} catch (Exception e) {
log.error("创建订单失败", e);
}
}
} }
} }
} }

View File

@@ -4,3 +4,15 @@ spring:
username: root username: root
password: 123456 password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
redis:
host: r-bp1dqqbzlfw04fldp3pd.redis.rds.aliyuncs.com
port: 6379
password: Admin@123 # 如果无密码可以省略
database: 0
timeout: 5000
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: 1000