|
@@ -65,8 +65,8 @@ public class ProjectScheduler {
|
|
|
@Scheduled(fixedDelay = 60 * 1000)
|
|
|
@SneakyThrows
|
|
|
public void dispatchProject() {
|
|
|
- //1 查询等待执行的项目
|
|
|
- List<ProjectPO> projectList = manualProjectMapper.selectByNowRunState(DictConstants.PROJECT_WAITING);
|
|
|
+ //1 查询已经排队的项目,即已经在页面上点击运行
|
|
|
+ List<ProjectPO> projectList = manualProjectMapper.selectByNowRunState(DictConstants.PROJECT_RUNNING);
|
|
|
for (ProjectPO project : projectList) {
|
|
|
String projectId = project.getId();
|
|
|
String userId = project.getCreateUserId();
|
|
@@ -76,6 +76,9 @@ public class ProjectScheduler {
|
|
|
return;
|
|
|
}
|
|
|
String clusterId = clusterPO.getId();
|
|
|
+ if (StringUtil.isNotEmpty(redisTemplate.opsForValue().get(manualProjectTopic + ":cluster:" + clusterId + ":running:" + projectId))) {
|
|
|
+ continue; // 判断项目是否已经在执行,如果执行则 continue
|
|
|
+ }
|
|
|
int simulationLicenseNumber = clusterPO.getNumSimulationLicense();
|
|
|
// 获取该用户正在运行的项目数量
|
|
|
Set<String> runningProjectSet = redisTemplate.keys(manualProjectTopic + ":cluster:" + clusterId + ":running:" + "*");
|
|
@@ -105,7 +108,15 @@ public class ProjectScheduler {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ } else {
|
|
|
+ String projectJson = redisTemplate.opsForValue().get(manualProjectTopic + ":cluster:" + clusterId + ":waiting:" + projectId);
|
|
|
+ redisTemplate.delete(manualProjectTopic + ":cluster:" + clusterId + ":waiting:" + projectId);
|
|
|
+ assert projectJson != null;
|
|
|
+ redisTemplate.opsForValue().set(manualProjectTopic + ":cluster:" + clusterId + ":running:" + projectId, projectJson);
|
|
|
+ log.info("ProjectScheduler--dispatchProject 项目 " + projectId + " 从等待队列进入执行状态!");
|
|
|
+ manualProjectConsumer.parseManualProject(projectJson);
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}
|