修改:hpc提交,下载,上传求解文件优化

This commit is contained in:
yangyang01000846
2025-12-04 09:41:17 +08:00
parent c1f9a6065e
commit f97a6dfee8
12 changed files with 313 additions and 72 deletions

View File

@@ -1,9 +1,14 @@
package com.sdm.flowable.delegate.handler;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.flowable.executeConfig.HPCExecuteConfig;
import com.sdm.common.entity.req.pbs.SimulationCommandPlaceholderReq;
import com.sdm.common.entity.req.pbs.SubmitHpcTaskRemoteReq;
import com.sdm.common.feign.inter.pbs.ITaskFeignClient;
import com.sdm.common.log.CoreLogger;
import com.sdm.flowable.service.IAsyncTaskRecordService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -12,14 +17,14 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
// HPC(executeType=HPC)
@Slf4j
@Component("HPC")
public class HpcHandler implements ExecutionHandler<SubmitHpcTaskRemoteReq,HPCExecuteConfig> {
public class HpcHandler implements ExecutionHandler<Map<String, Object>,HPCExecuteConfig> {
@Autowired
private IAsyncTaskRecordService asyncTaskRecordService;
@@ -27,14 +32,19 @@ public class HpcHandler implements ExecutionHandler<SubmitHpcTaskRemoteReq,HPCEx
@Autowired
private ITaskFeignClient taskFeignClient;
/*
* params:业务参数
* config框架属性
* */
@Override
public void execute(DelegateExecution execution, SubmitHpcTaskRemoteReq params, HPCExecuteConfig config) {
params.setBeforeNodeId(config.getBeforeNodeId());
public void execute(DelegateExecution execution, Map<String, Object> params, HPCExecuteConfig config) {
SubmitHpcTaskRemoteReq submitHpcTaskRemoteReq = convertParamsToReq(params);
// submitHpcTaskRemoteReq.setBeforeNodeId(config.getBeforeNodeId());
// 实现HPC处理逻辑...
// INIT(初始化)/RUNNING(执行中)/SUCCESS(执行成功)/FAIL(执行失败)
String status = "INIT";
// 1. 调用 HPC 平台提交任务
SdmResponse<String> submitResp = taskFeignClient.submitHpcJob(params);
SdmResponse<String> submitResp = taskFeignClient.submitHpcJob(submitHpcTaskRemoteReq);
if(!submitResp.isSuccess()|| StringUtils.isBlank(submitResp.getData())){
log.error("HpcHandler submit failed,jobName:{}",params);
status = "FAIL";
@@ -53,17 +63,107 @@ public class HpcHandler implements ExecutionHandler<SubmitHpcTaskRemoteReq,HPCEx
log.info("HPC 任务 {} 已提交", hpcTaskId);
}
/**
* 将参数Map转换为SubmitHpcTaskRemoteReq对象的工具方法
*/
private SubmitHpcTaskRemoteReq convertParamsToReq(Map<String, Object> params) {
SubmitHpcTaskRemoteReq req = new SubmitHpcTaskRemoteReq();
if (params == null) {
return req;
}
ObjectMapper objectMapper = new ObjectMapper(); // 需确保ObjectMapper已配置或注入
// 基础字段映射
req.setTimesmap(params.get("timesmap").toString());
req.setJobName(params.get("jobName").toString());
// 处理int类型字段包含空值和非数字的异常处理
try {
req.setCoreNum(params.get("coreNum") != null ? Integer.parseInt(params.get("coreNum").toString()) : 0);
} catch (NumberFormatException e) {
CoreLogger.error("coreNum parse error:{},coreNum:{}",e.getMessage(),params.get("coreNum"));
req.setCoreNum(0);
}
req.setSoftware(params.get("software").toString());
req.setJobType(params.get("jobType").toString());
try {
req.setIndependence(params.get("independence") != null ? Integer.parseInt(params.get("independence").toString()) : 0);
} catch (NumberFormatException e) {
req.setIndependence(0);
}
req.setTaskId(params.get("taskId").toString());
req.setTaskName(params.get("taskName").toString());
req.setRunId(params.get("runId").toString());
req.setRunName(params.get("runName").toString());
req.setCommand(params.get("command").toString());
req.setProjectname(params.get("projectname").toString());
// req.setFeatchFileType(params.get("featchFileType").toString());
// req.setBeforeNodeId(params.get("beforeNodeId").toString());
// 处理commandExpand字段JSON字符串转Map
String commandExpandJson = params.get("commandExpand").toString();
if (StringUtils.isNotBlank(commandExpandJson)) {
try {
// 将JSON字符串转换为Map<String, SimulationCommandPlaceholderReq>
Map<String, SimulationCommandPlaceholderReq> commandExpand = objectMapper.readValue(
commandExpandJson,
new TypeReference<Map<String, SimulationCommandPlaceholderReq>>() {}
);
// req.setCommandExpand(commandExpand);
} catch (Exception e) {
CoreLogger.error("convertParamsToReq error:{},params:{}",e.getMessage(), JSONObject.toJSONString(params));
// 如设为null或空Map
// req.setCommandExpand(new HashMap<>());
}
}
return req;
}
public String mockinit(){
SubmitHpcTaskRemoteReq mockReq = mockSubmitHpcTaskReq();
SdmResponse<String> submitResp = taskFeignClient.submitHpcJob(mockReq);
if(!submitResp.isSuccess()|| StringUtils.isBlank(submitResp.getData())){
log.error("HpcHandler submit failed,jobName:{}",mockReq.getJobName());
System.out.println("失败");
return "失败";
}
String hpcTaskId = submitResp.getData();
return hpcTaskId;
// SubmitHpcTaskRemoteReq mockReq = mockSubmitHpcTaskReq();
// SdmResponse<String> submitResp = taskFeignClient.submitHpcJob(mockReq);
// if(!submitResp.isSuccess()|| StringUtils.isBlank(submitResp.getData())){
// log.error("HpcHandler submit failed,jobName:{}",mockReq.getJobName());
// System.out.println("失败");
// return "失败";
// }
// String hpcTaskId = submitResp.getData();
Map<String, Object> params = getParams();
HPCExecuteConfig hpcExecuteConfig = new HPCExecuteConfig();
// todo `flowable`.`process_node_param`
hpcExecuteConfig.setBeforeNodeId("uuid-node-8d3e61e7-1374-419c-9e46-210cb88c1113");
execute(null,params,hpcExecuteConfig);
return "ok";
}
private Map<String,Object> getParams() {
Map<String, Object> params = new HashMap<>();
// 基础字段
params.put("timesmap", String.valueOf(System.currentTimeMillis())); // 示例时间戳2025-07-29 00:00:00
params.put("jobName", "HPC-数据处理作业-"+ System.currentTimeMillis());
params.put("coreNum", 32);
params.put("software", "reta.exe");
params.put("jobType", "流体动力学仿真");
params.put("independence", 1);
params.put("taskId", "123456");
params.put("taskName", "锂电池热管理系统研发");
params.put("runId", "55555");
params.put("runName", "HPC-电池");
// params.put("command", "\\\\CARSAFE\\share\\solver\\RLithium\\reta.exe -i %retaFile");
params.put("command", "\\\\CARSAFE\\share\\solver\\RLithium\\reta.exe -i .\\model\\aa.xml");
params.put("projectname", "新能源汽车锂电池安全性能优化项目");
params.put("featchFileType", "hpcNode"); // 补充示例值
params.put("beforeNodeId", null); // 示例空值
// commandExpand去掉outName后的JSON字符串
String commandExpandJson = "{\n" +
" \"retaFile\": {\n" +
" \"id\": 1,\n" +
" \"keyEnName\": \"retaFile\",\n" +
" \"keyCnName\": \"电池求解文件\",\n" +
" \"valueType\": \"file_regex_match\",\n" +
" \"inputValue\": \"*.jpg\"\n" +
" }\n" +
"}";
params.put("commandExpand", commandExpandJson);
return params;
}
private SubmitHpcTaskRemoteReq mockSubmitHpcTaskReq() {
@@ -76,8 +176,8 @@ public class HpcHandler implements ExecutionHandler<SubmitHpcTaskRemoteReq,HPCEx
req.software = "reta.exe";
req.jobType = "仿真计算";
req.independence = 1; // 独立任务
req.inputFiles = Arrays.asList("input1.dat", "input2.dat", "input3.dat");
req.masterFile = "master.dat";
// req.inputFiles = Arrays.asList("input1.dat", "input2.dat", "input3.dat");
// req.masterFile = "master.dat";
req.taskId = "TASKID_" + timestamp;
req.taskName = "测试任务_" + timestamp;
req.runId = "RUNID_" + timestamp;

View File

@@ -1,3 +1,3 @@
spring:
profiles:
active: local
active: yang