新增:hpc任务删除接口新增

This commit is contained in:
2026-02-05 10:49:27 +08:00
parent 9ecc8f9a0e
commit 17b13c1c41
8 changed files with 92 additions and 6 deletions

View File

@@ -0,0 +1,2 @@
ALTER TABLE `spdm_baseline`.`simulation_job`
ADD COLUMN `del_flag` CHAR(1) NOT NULL DEFAULT 'N' COMMENT '逻辑删除标识N-未删除Y-已删除';

View File

@@ -0,0 +1,10 @@
package com.sdm.common.entity.req.pbs;
import lombok.Data;
import java.util.List;
@Data
public class DelHpcJobsReq {
private List<String> hpcJobIds;
}

View File

@@ -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);
}
/*====================================================================*/

View File

@@ -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;

View File

@@ -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 只会有一次,回传失败后,人工改表修复

View File

@@ -55,6 +55,4 @@ public interface IPbsService {
*/
ResponseEntity<StreamingResponseBody> downloadFile(String jobId, String fileName,Long fileSize);
}

View File

@@ -134,7 +134,6 @@ public class IPbsHpcServiceImpl implements IPbsService {
return hpcInstructionService.hpcDownloadFile(fileName,fileSize);
}
private HpcResouceInfo buildHpcResourceInfo(List<NodeList> nodes) {
HpcResouceInfo result = new HpcResouceInfo();

View File

@@ -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 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());