feat:动态调度

This commit is contained in:
xiang
2025-07-27 00:27:54 +08:00
parent da2bebc80d
commit 322079079f
7 changed files with 98 additions and 48 deletions

View File

@@ -37,6 +37,12 @@
<artifactId>xservice-third-part</artifactId>
<version>1.0-snapshot</version>
</dependency>
<dependency>
<groupId>com.xiang</groupId>
<artifactId>xservice-schedule-starter</artifactId>
<version>1.0-snapshot</version>
</dependency>
</dependencies>
<build>

View File

@@ -6,9 +6,12 @@ import com.xiang.xservice.basic.utils.DateUtils;
import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService;
import com.xiang.xservice.fwd.entity.pojo.FPerformConfig;
import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo;
import com.xiang.xservice.fwd.mapper.FwdAudienceConfigMapper;
import com.xiang.xservice.fwd.mapper.FwdPerformConfigMapper;
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.service.IDynamicTaskSchedulerService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@@ -20,6 +23,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDate;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
/**
@@ -34,8 +38,11 @@ public class FwdImportantMsgJob {
private final FwdPerformProjectInfoMapper performProjectInfoMapper;
private final FwdPerformConfigMapper performConfigMapper;
private final IPerformService performService;
private final IDynamicTaskSchedulerService dynamicTaskSchedulerService;
private final DingTalkService dingTalkService;
private final FwdUserConfigMapper fwdUserConfigMapper;
private final FwdAudienceConfigMapper fwdAudienceConfigMapper;
private final IPerformService iPerformService;
@Value("${DingTalk.chatId}")
private String chatId;
@@ -70,17 +77,11 @@ 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");
String taskId = UUID.randomUUID().toString();
dynamicTaskSchedulerService.schedule(taskId, data.getPreSaleTime(), new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, performConfigMapper, iPerformService));
}
msg.append("请注意进行数据库配置的更改!");
dingTalkService.sendChatMessage(chatId, msg.toString());
log.info("【芬玩岛】演唱会预售定时任务结束time:{}", System.currentTimeMillis());
}
@Scheduled(cron = "0 0 12 * * ? ")
@PostMapping("/orderCreateJob")
public void orderCreateJob() throws Exception {
for (int i = 0; i < 3; i++) {
performService.createProjectOrder(1295746988L);
}
}
}

View File

@@ -275,6 +275,9 @@ public class PullDataFromFWDJob {
}
}
/**
* 每月拉取观影人数据更新
*/
@Scheduled(cron = "0 0 0 1 1/1 ? ")
public void pullAudienceMemberInfo() {
List<FUserConfig> availableUser = userConfigMapper.getAvailableUser();

View File

@@ -0,0 +1,49 @@
package com.xiang.xservice.fwd.schedule;
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.mapper.FwdAudienceConfigMapper;
import com.xiang.xservice.fwd.mapper.FwdPerformConfigMapper;
import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper;
import com.xiang.xservice.fwd.service.IPerformService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Component
@RequiredArgsConstructor
public class TicketGrabTask implements Runnable {
private final FwdUserConfigMapper userConfigMapper;
private final FwdAudienceConfigMapper audienceConfigMapper;
private final FwdPerformConfigMapper performConfigMapper;
private final IPerformService performService;
@Override
public void run() {
List<FUserConfig> availableUser = userConfigMapper.getAvailableUser();
if (CollectionUtils.isEmpty(availableUser)) {
return;
}
for (FUserConfig userConfig : availableUser) {
List<FAudienceConfig> audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId());
List<FPerformConfig> availablePerform = performConfigMapper.getAvailablePerform();
if (CollectionUtils.isNotEmpty(availablePerform)) {
for (FPerformConfig performConfig : availablePerform) {
try {
performService.createProjectOrder(performConfig.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList()));
} catch (Exception e) {
log.error("创建订单失败", e);
}
}
}
}
}
}

View File

@@ -28,6 +28,8 @@ public class FwdOuterController {
private final IPerformServiceHttp performServiceHttp;
private final IPerformService performService;
private static final List<Long> FREQUENT_IDS = List.of(50438548L, 35320661L, 50436621L, 50442739L);
@GetMapping("/getShowProjects")
public Result<ProjectsResp> getShowProjects() {
@@ -49,7 +51,7 @@ public class FwdOuterController {
@PostMapping("/createOrder")
public Result<Void> createOrder(Long projectId) throws Exception {
if (performService.createProjectOrder(projectId)) {
if (performService.createProjectOrder(projectId, FREQUENT_IDS)) {
return Result.success("下单成功!");
}
return Result.error("下单失败!");

View File

@@ -15,5 +15,5 @@ public interface IPerformService {
List<FPerformSeatInfo> getPerformSeatInfoByProjectId(Long projectId);
Boolean createProjectOrder(Long projectId) throws Exception;
Boolean createProjectOrder(Long projectId, List<Long> frequentIds) throws Exception;
}

View File

@@ -56,7 +56,7 @@ public class PerformServiceImpl implements IPerformService {
}
@Override
public Boolean createProjectOrder(Long projectId) throws Exception {
public Boolean createProjectOrder(Long projectId, List<Long> frequentIds) throws Exception {
FPerformProjectInfo performByProjectId = getPerformByProjectId(projectId);
if (Objects.isNull(performByProjectId)) {
log.info("该projectId:{}暂无演出信息", projectId);
@@ -67,14 +67,6 @@ public class PerformServiceImpl implements IPerformService {
log.info("该projectId:{}暂无座位信息", projectId);
return Boolean.FALSE;
}
List<FUserConfig> availableUser = userConfigMapper.getAvailableUser();
if (CollectionUtils.isEmpty(availableUser)) {
return Boolean.FALSE;
}
for (FUserConfig userConfig : availableUser) {
List<FAudienceConfig> audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId());
if (CollectionUtils.isNotEmpty(audiences)) {
List<Long> frequentIds = audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList());
for (FPerformSeatInfo fPerformSeatInfo : seatInfoByProjectId) {
if (1 == fPerformSeatInfo.getSoldOut()) {
continue;
@@ -102,9 +94,6 @@ public class PerformServiceImpl implements IPerformService {
return Boolean.TRUE;
}
}
}
}
return Boolean.FALSE;
}
}