修改:hpc提交,下载,上传求解文件优化
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
spring:
|
||||
profiles:
|
||||
active: local
|
||||
active: yang
|
||||
Reference in New Issue
Block a user