|
@@ -6,15 +6,16 @@ import api.common.pojo.param.scene.SceneEvaluationComputeSubParam;
|
|
|
import api.common.pojo.po.scene.SceneComplexityPO;
|
|
|
import api.common.pojo.po.scene.SceneEvaluationRulePO;
|
|
|
import api.common.pojo.po.scene.SceneRiskPO;
|
|
|
+import api.common.pojo.po.system.SceneEvaluationStatusPO;
|
|
|
import api.common.util.CollectionUtil;
|
|
|
import api.common.util.FileUtil;
|
|
|
import api.common.util.StringUtil;
|
|
|
import api.common.util.TimeUtil;
|
|
|
import com.alibaba.druid.util.StringUtils;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.css.simulation.resource.scheduler.adapter.entity.impl.ApplicationContextAwareImpl;
|
|
|
-import com.css.simulation.resource.scheduler.infra.db.mysql.mapper.SceneComplexityMapper;
|
|
|
-import com.css.simulation.resource.scheduler.infra.db.mysql.mapper.SceneEvaluationRuleMapper;
|
|
|
-import com.css.simulation.resource.scheduler.infra.db.mysql.mapper.SceneRiskMapper;
|
|
|
+import com.css.simulation.resource.scheduler.infra.db.mysql.mapper.*;
|
|
|
+import com.css.simulation.resource.scheduler.infra.entity.ProjectEntity;
|
|
|
import com.css.simulation.resource.scheduler.infra.fs.minio.MinioUtil;
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
@@ -49,6 +50,16 @@ public class SceneEvaluationComputeRunnable implements Runnable {
|
|
|
|
|
|
@Override
|
|
|
public void run() {
|
|
|
+ // 先修改状态
|
|
|
+ SceneEvaluationStatusMapper sceneEvaluationStatusMapper = ApplicationContextAwareImpl.getApplicationContext().getBean(SceneEvaluationStatusMapper.class);
|
|
|
+ SceneEvaluationStatusPO sceneEvaluationStatusPO = new SceneEvaluationStatusPO();
|
|
|
+ sceneEvaluationStatusPO.setId(sceneEvaluationComputeParam.getEvaluationId());
|
|
|
+ sceneEvaluationStatusPO.setStartEvaluationTime(TimeUtil.getNowForMysql());
|
|
|
+ sceneEvaluationStatusPO.setEndEvaluationTime(null);
|
|
|
+ sceneEvaluationStatusPO.setEvaluationStatus(DictConstants.SCENE_EVALUATION_STATUS_1);
|
|
|
+ sceneEvaluationStatusPO.setEvaluationErrorMsg("");
|
|
|
+ updateStatus(sceneEvaluationStatusMapper, sceneEvaluationStatusPO);
|
|
|
+
|
|
|
String ruleId = sceneEvaluationComputeParam.getSceneEvaluationRuleId();
|
|
|
log.info("开始执行线程:" + sceneEvaluationComputeParam);
|
|
|
String bucketName = sceneEvaluationComputeParam.getBucketName();
|
|
@@ -60,6 +71,10 @@ public class SceneEvaluationComputeRunnable implements Runnable {
|
|
|
SceneEvaluationRulePO sceneEvaluationRulePO = sceneEvaluationRuleMapper.querySceneEvaluationPyById(ruleId);
|
|
|
if (sceneEvaluationRulePO == null) {
|
|
|
log.error(ruleId + " 的场景评价规则已删除");
|
|
|
+ sceneEvaluationStatusPO.setEndEvaluationTime(TimeUtil.getNowForMysql());
|
|
|
+ sceneEvaluationStatusPO.setEvaluationStatus(DictConstants.SCENE_EVALUATION_STATUS_3);
|
|
|
+ sceneEvaluationStatusPO.setEvaluationErrorMsg("场景评价规则已删除");
|
|
|
+ updateStatus(sceneEvaluationStatusMapper, sceneEvaluationStatusPO);
|
|
|
return;
|
|
|
}
|
|
|
log.info("场景评价规则为:" + sceneEvaluationRulePO);
|
|
@@ -73,6 +88,10 @@ public class SceneEvaluationComputeRunnable implements Runnable {
|
|
|
|
|
|
// 下载场景评价脚本到脚本目录
|
|
|
if (sceneEvaluationRulePO.getScriptPath() == null) {
|
|
|
+ sceneEvaluationStatusPO.setEndEvaluationTime(TimeUtil.getNowForMysql());
|
|
|
+ sceneEvaluationStatusPO.setEvaluationStatus(DictConstants.SCENE_EVALUATION_STATUS_3);
|
|
|
+ sceneEvaluationStatusPO.setEvaluationErrorMsg("场景评价脚本不存在");
|
|
|
+ updateStatus(sceneEvaluationStatusMapper, sceneEvaluationStatusPO);
|
|
|
return;
|
|
|
}
|
|
|
String pyMainPath = scriptsPath + "/" + sceneEvaluationRulePO.getRuleId();
|
|
@@ -93,6 +112,10 @@ public class SceneEvaluationComputeRunnable implements Runnable {
|
|
|
Files.setPosixFilePermissions(path, permissions);
|
|
|
} catch (IOException e) {
|
|
|
log.error("下载执行文件失败: " + sceneEvaluationRulePO.getScriptPath(), e);
|
|
|
+ sceneEvaluationStatusPO.setEndEvaluationTime(TimeUtil.getNowForMysql());
|
|
|
+ sceneEvaluationStatusPO.setEvaluationStatus(DictConstants.SCENE_EVALUATION_STATUS_3);
|
|
|
+ sceneEvaluationStatusPO.setEvaluationErrorMsg("下载场景评价脚本失败");
|
|
|
+ updateStatus(sceneEvaluationStatusMapper, sceneEvaluationStatusPO);
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
@@ -144,6 +167,10 @@ public class SceneEvaluationComputeRunnable implements Runnable {
|
|
|
FileUtil.deleteFolder(riskPathFather); // 删除临时文件
|
|
|
}
|
|
|
} else {
|
|
|
+ sceneEvaluationStatusPO.setEndEvaluationTime(TimeUtil.getNowForMysql());
|
|
|
+ sceneEvaluationStatusPO.setEvaluationStatus(DictConstants.SCENE_EVALUATION_STATUS_3);
|
|
|
+ sceneEvaluationStatusPO.setEvaluationErrorMsg("获取评价类型错误");
|
|
|
+ updateStatus(sceneEvaluationStatusMapper, sceneEvaluationStatusPO);
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
@@ -161,6 +188,10 @@ public class SceneEvaluationComputeRunnable implements Runnable {
|
|
|
p = r.exec(sceneEvaluationCommand);
|
|
|
} catch (IOException e) {
|
|
|
log.error("执行场景评价脚本失败,脚本命令为: " + sceneEvaluationCommand, e);
|
|
|
+ sceneEvaluationStatusPO.setEndEvaluationTime(TimeUtil.getNowForMysql());
|
|
|
+ sceneEvaluationStatusPO.setEvaluationStatus(DictConstants.SCENE_EVALUATION_STATUS_3);
|
|
|
+ sceneEvaluationStatusPO.setEvaluationErrorMsg("执行场景评价命令失败");
|
|
|
+ updateStatus(sceneEvaluationStatusMapper, sceneEvaluationStatusPO);
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -174,6 +205,10 @@ public class SceneEvaluationComputeRunnable implements Runnable {
|
|
|
br.close();
|
|
|
} catch (IOException e) {
|
|
|
log.error("获取场景评价脚本返回内容失败", e);
|
|
|
+ sceneEvaluationStatusPO.setEndEvaluationTime(TimeUtil.getNowForMysql());
|
|
|
+ sceneEvaluationStatusPO.setEvaluationStatus(DictConstants.SCENE_EVALUATION_STATUS_3);
|
|
|
+ sceneEvaluationStatusPO.setEvaluationErrorMsg("获取场景评价结果失败");
|
|
|
+ updateStatus(sceneEvaluationStatusMapper, sceneEvaluationStatusPO);
|
|
|
return;
|
|
|
}
|
|
|
sceneEvaluationResult = sb.toString();
|
|
@@ -189,6 +224,10 @@ public class SceneEvaluationComputeRunnable implements Runnable {
|
|
|
} else if (StringUtils.equals(sceneEvaluationComputeParam.getComputeType(), DictConstants.RISK)) {
|
|
|
readPath = riskPathFather;
|
|
|
} else {
|
|
|
+ sceneEvaluationStatusPO.setEndEvaluationTime(TimeUtil.getNowForMysql());
|
|
|
+ sceneEvaluationStatusPO.setEvaluationStatus(DictConstants.SCENE_EVALUATION_STATUS_3);
|
|
|
+ sceneEvaluationStatusPO.setEvaluationErrorMsg("获取评价类型错误");
|
|
|
+ updateStatus(sceneEvaluationStatusMapper, sceneEvaluationStatusPO);
|
|
|
return;
|
|
|
}
|
|
|
FileInputStream fileInputStream = new FileInputStream(readPath + sceneEvaluationComputeSubParam.getSceneId() + "/scenario_evaluation.json");
|
|
@@ -255,8 +294,44 @@ public class SceneEvaluationComputeRunnable implements Runnable {
|
|
|
log.error("场景" + sceneEvaluationComputeSubParam.getSceneId() + " 的场景评价失败:", e);
|
|
|
}
|
|
|
}
|
|
|
+ sceneEvaluationStatusPO.setEndEvaluationTime(TimeUtil.getNowForMysql());
|
|
|
+ sceneEvaluationStatusPO.setEvaluationStatus(DictConstants.SCENE_EVALUATION_STATUS_2);
|
|
|
+ sceneEvaluationStatusPO.setEvaluationErrorMsg("");
|
|
|
+ updateStatus(sceneEvaluationStatusMapper, sceneEvaluationStatusPO);
|
|
|
// 删除临时文件
|
|
|
-// FileUtil.deleteFolder(sceneEvaluationComputeParam.getLinuxTempPath() + "scene/evaluation/" + sceneEvaluationComputeParam.getTaskId()); // 删除临时文件
|
|
|
+ FileUtil.deleteFolder(sceneEvaluationComputeParam.getLinuxTempPath() + "scene/evaluation/" + sceneEvaluationComputeParam.getTaskId()); // 删除临时文件
|
|
|
+ }
|
|
|
+
|
|
|
+ private void updateStatus(SceneEvaluationStatusMapper sceneEvaluationStatusMapper, SceneEvaluationStatusPO sceneEvaluationStatusPO) {
|
|
|
+ if (StringUtils.equals(sceneEvaluationComputeParam.getComputeType(), DictConstants.COMPLEXITY)) {
|
|
|
+ if (DictConstants.SCENE_IMPORT_EVALUATION_TYPE.equals(sceneEvaluationComputeParam.getType())) {
|
|
|
+ sceneEvaluationStatusMapper.updateImportEvaluationStatus(sceneEvaluationStatusPO);
|
|
|
+ } else if (DictConstants.SIMULATION_MANUAL_PROJECT_EVALUATION_TYPE.equals(sceneEvaluationComputeParam.getType())) {
|
|
|
+ // 查询 project 表
|
|
|
+ SimulationManualProjectMapper simulationManualProjectMapper = ApplicationContextAwareImpl.getApplicationContext().getBean(SimulationManualProjectMapper.class);
|
|
|
+ ProjectEntity projectEntity = simulationManualProjectMapper.selectById(sceneEvaluationComputeParam.getTaskId());
|
|
|
+ if (StringUtil.isNotEmpty(projectEntity.getEvaluationJsonMsg())) {
|
|
|
+ // 解析 json
|
|
|
+ JSONObject evaluationJsonObj = JSONObject.parseObject(projectEntity.getEvaluationJsonMsg());
|
|
|
+ evaluationJsonObj.put("complexityEvaluationStatus", sceneEvaluationStatusPO.getEvaluationStatus());
|
|
|
+ evaluationJsonObj.put("complexityEvaluationErrorMsg", sceneEvaluationStatusPO.getEvaluationErrorMsg());
|
|
|
+ evaluationJsonObj.put("complexityStartEvaluationTime", sceneEvaluationStatusPO.getStartEvaluationTime());
|
|
|
+ evaluationJsonObj.put("complexityEndEvaluationTime", sceneEvaluationStatusPO.getEndEvaluationTime());
|
|
|
+ sceneEvaluationStatusMapper.updateManualProjectEvaluationStatus(sceneEvaluationStatusPO.getId(), evaluationJsonObj.toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (StringUtils.equals(sceneEvaluationComputeParam.getComputeType(), DictConstants.RISK)) {
|
|
|
+ SimulationManualProjectMapper simulationManualProjectMapper = ApplicationContextAwareImpl.getApplicationContext().getBean(SimulationManualProjectMapper.class);
|
|
|
+ ProjectEntity projectEntity = simulationManualProjectMapper.selectById(sceneEvaluationComputeParam.getTaskId());
|
|
|
+ if (StringUtil.isNotEmpty(projectEntity.getEvaluationJsonMsg())) {
|
|
|
+ JSONObject evaluationJsonObj = JSONObject.parseObject(projectEntity.getEvaluationJsonMsg());
|
|
|
+ evaluationJsonObj.put("riskEvaluationStatus", sceneEvaluationStatusPO.getEvaluationStatus());
|
|
|
+ evaluationJsonObj.put("riskEvaluationErrorMsg", sceneEvaluationStatusPO.getEvaluationErrorMsg());
|
|
|
+ evaluationJsonObj.put("riskStartEvaluationTime", sceneEvaluationStatusPO.getStartEvaluationTime());
|
|
|
+ evaluationJsonObj.put("riskEndEvaluationTime", sceneEvaluationStatusPO.getEndEvaluationTime());
|
|
|
+ sceneEvaluationStatusMapper.updateManualProjectEvaluationStatus(sceneEvaluationStatusPO.getId(), evaluationJsonObj.toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|