新增:hpc任务删除接口新增
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.sdm.pbs.controller;
|
||||
|
||||
import com.sdm.common.common.SdmResponse;
|
||||
import com.sdm.common.entity.req.pbs.DelHpcJobsReq;
|
||||
import com.sdm.common.entity.req.pbs.HpcTaskFileDownReq;
|
||||
import com.sdm.common.entity.req.pbs.HpcTaskFileReq;
|
||||
import com.sdm.common.entity.req.pbs.hpc.*;
|
||||
@@ -13,8 +14,8 @@ import com.sdm.common.entity.resp.pbs.hpc.nodelist.NodeListResp;
|
||||
import com.sdm.common.utils.HpcCommandExcuteUtil;
|
||||
import com.sdm.pbs.model.bo.HpcJobStatusInfo;
|
||||
import com.sdm.pbs.model.bo.HpcResouceInfo;
|
||||
import com.sdm.pbs.model.entity.SimulationJob;
|
||||
import com.sdm.pbs.model.entity.SimulationHpcCommand;
|
||||
import com.sdm.pbs.model.entity.SimulationJob;
|
||||
import com.sdm.pbs.model.req.JobFileCallBackReq;
|
||||
import com.sdm.pbs.model.req.QueryJobReq;
|
||||
import com.sdm.pbs.model.req.SubmitHpcTaskReq;
|
||||
@@ -118,6 +119,12 @@ public class TaskController {
|
||||
return pbsServiceDecorator.querySoftConfig(appUuid);
|
||||
}
|
||||
|
||||
@PostMapping("/delHpcJobs")
|
||||
@Operation(summary = "批量删除Hpc任务")
|
||||
SdmResponse delHpcJobs(@RequestBody DelHpcJobsReq req) {
|
||||
return pbsServiceDecorator.delHpcJobs(req);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
@@ -193,6 +193,10 @@ public class SimulationJob implements Serializable {
|
||||
@TableField("processInstanceId")
|
||||
private String processInstanceId;
|
||||
|
||||
@Schema(description = "任务是否删除,N未删除,Y已删除")
|
||||
@TableField("del_flag")
|
||||
private String delFlag;
|
||||
|
||||
@Schema(description = "任务耗时,前端展示字段")
|
||||
@TableField(value = "costTime",exist = false)
|
||||
private String costTime;
|
||||
|
||||
@@ -42,6 +42,7 @@ public class HpcJobStatusScheduleExcutor {
|
||||
SimulationJob::getRunId,
|
||||
SimulationJob::getJobId,
|
||||
SimulationJob::getJobStatus)
|
||||
.eq(SimulationJob::getDelFlag,"N")
|
||||
.isNotNull(SimulationJob::getJobId)
|
||||
.notIn(SimulationJob::getJobStatus, "Canceled", "Failed")
|
||||
// 非上传中的,非回传结束的。JobStatus 结束 通知 uploading 只会有一次,回传失败后,人工改表修复
|
||||
|
||||
@@ -55,6 +55,4 @@ public interface IPbsService {
|
||||
*/
|
||||
ResponseEntity<StreamingResponseBody> downloadFile(String jobId, String fileName,Long fileSize);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -134,7 +134,6 @@ public class IPbsHpcServiceImpl implements IPbsService {
|
||||
return hpcInstructionService.hpcDownloadFile(fileName,fileSize);
|
||||
}
|
||||
|
||||
|
||||
private HpcResouceInfo buildHpcResourceInfo(List<NodeList> nodes) {
|
||||
|
||||
HpcResouceInfo result = new HpcResouceInfo();
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.sdm.common.common.SdmResponse;
|
||||
import com.sdm.common.common.ThreadLocalContext;
|
||||
import com.sdm.common.entity.enums.MessageTemplateEnum;
|
||||
import com.sdm.common.entity.req.flowable.AsyncCallbackRequest;
|
||||
import com.sdm.common.entity.req.pbs.DelHpcJobsReq;
|
||||
import com.sdm.common.entity.req.system.SendMsgReq;
|
||||
import com.sdm.common.entity.resp.PageDataResp;
|
||||
import com.sdm.common.entity.resp.pbs.hpc.FileNodeInfo;
|
||||
@@ -73,6 +74,13 @@ public class PbsServiceDecorator implements IPbsServiceDecorator {
|
||||
@Value("#{'${hpc.jobs.middleOrders:Running}'.split(',')}")
|
||||
private List<String> middleOrders;
|
||||
|
||||
// 运行中
|
||||
@Value("#{'${hpc.jobs.hpcJobIngStatus:Configuring,Queued,Running}'.split(',')}")
|
||||
private List<String> hpcJobIngStatus;
|
||||
|
||||
@Value("#{'${hpc.jobs.hpcFileIngStatus:generating,uploading}'.split(',')}")
|
||||
private List<String> hpcFileIngStatus;
|
||||
|
||||
// 正则匹配%后的单词(\w+ 匹配字母、数字、下划线)
|
||||
private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile("%(\\w+)");
|
||||
|
||||
@@ -562,12 +570,69 @@ public class PbsServiceDecorator implements IPbsServiceDecorator {
|
||||
return pbsService.downloadFile("", fileName,fileSize);
|
||||
}
|
||||
|
||||
public SdmResponse<PageDataResp<List<SimulationJob>>> queryJobs(QueryJobReq req){
|
||||
|
||||
public SdmResponse delHpcJobs(DelHpcJobsReq req) {
|
||||
if(CollectionUtils.isEmpty(req.getHpcJobIds())){
|
||||
throw new RuntimeException("删除的jobIds不能是空");
|
||||
}
|
||||
// 1. 查询待删除的任务列表
|
||||
List<SimulationJob> jobList = simulationJobService.lambdaQuery()
|
||||
.in(SimulationJob::getJobId, req.getHpcJobIds())
|
||||
.list();
|
||||
if (jobList.isEmpty()) {
|
||||
throw new RuntimeException("未查询到待删除的HPC任务");
|
||||
}
|
||||
// 2. 校验任务状态(非进行中、文件非上传中)
|
||||
Pair<Boolean,List<SimulationJob>> pairCheck= checkJobStatus(jobList);
|
||||
if(!pairCheck.getLeft()){
|
||||
log.error("checkJobStatus true,{}",JSON.toJSONString(pairCheck.getRight()));
|
||||
throw new RuntimeException("删除的任务状态和文件状态不能是未完成");
|
||||
}
|
||||
|
||||
// 2. 调用HPC批量删除接口 todo
|
||||
// boolean hpcDelSuccess = batchDeleteHpcJobs(req.getHpcJobIds());
|
||||
// if (!hpcDelSuccess) {
|
||||
// return SdmResponse.fail("调用HPC批量删除接口失败");
|
||||
// }
|
||||
|
||||
// 5. 逻辑删除simulation_job表数据
|
||||
boolean logicDelSuccess = logicDeleteSimulationJob(jobList);
|
||||
if (!logicDelSuccess) {
|
||||
return SdmResponse.failed("逻辑删除任务数据失败");
|
||||
}
|
||||
return SdmResponse.success("批量删除HPC任务成功");
|
||||
}
|
||||
|
||||
private boolean logicDeleteSimulationJob(List<SimulationJob> jobList) {
|
||||
for (SimulationJob job : jobList) {
|
||||
job.setDelFlag("Y");
|
||||
}
|
||||
boolean b = simulationJobService.updateBatchById(jobList);
|
||||
log.info("logicDeleteSimulationJob,b={}",b);
|
||||
return b;
|
||||
}
|
||||
|
||||
// 任务非进行中,文件非上传中
|
||||
private Pair<Boolean, List<SimulationJob>> checkJobStatus(List<SimulationJob> jobList) {
|
||||
List<SimulationJob>invalidJobs=new ArrayList<>();
|
||||
boolean check = false;
|
||||
for(SimulationJob job:jobList){
|
||||
if(hpcJobIngStatus.contains(job.getJobStatus())||
|
||||
hpcFileIngStatus.contains(job.getFileStatus())){
|
||||
invalidJobs.add(job);
|
||||
check=true;
|
||||
}
|
||||
}
|
||||
return Pair.of(check,invalidJobs);
|
||||
}
|
||||
|
||||
public SdmResponse<PageDataResp<List<SimulationJob>>> queryJobs(QueryJobReq req){
|
||||
PageHelper.startPage(req.getCurrent(), req.getSize());
|
||||
|
||||
// 构建查询条件
|
||||
LambdaQueryChainWrapper<SimulationJob> queryChain = simulationJobService.lambdaQuery();
|
||||
|
||||
// 未删除的
|
||||
queryChain.eq(SimulationJob::getDelFlag,"N");
|
||||
// ... 你的原有查询条件逻辑保持不变 ...
|
||||
if (req.getJobName() != null && !req.getJobName().trim().isEmpty()) {
|
||||
queryChain.like(SimulationJob::getJobName, req.getJobName().trim());
|
||||
|
||||
Reference in New Issue
Block a user