|
@@ -118,6 +118,9 @@ public class TaskService {
|
|
taskMapper.updateState(taskId, state);
|
|
taskMapper.updateState(taskId, state);
|
|
}
|
|
}
|
|
ProjectPO projectPO = projectMapper.selectById(taskId);
|
|
ProjectPO projectPO = projectMapper.selectById(taskId);
|
|
|
|
+ if (projectPO == null) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
String projectId = projectPO.getId();
|
|
String projectId = projectPO.getId();
|
|
String scenePackageId = projectPO.getScenePackageId(); // 场景测试包 id,指标根 id
|
|
String scenePackageId = projectPO.getScenePackageId(); // 场景测试包 id,指标根 id
|
|
// log.info("------- /state 任务 " + taskId + " 的父项目为:" + projectId);
|
|
// log.info("------- /state 任务 " + taskId + " 的父项目为:" + projectId);
|
|
@@ -160,65 +163,75 @@ public class TaskService {
|
|
log.info("------- /state 将叶子节点 " + indexId + " 对应的打分规则保存到临时目录:" + ruleFilePath);
|
|
log.info("------- /state 将叶子节点 " + indexId + " 对应的打分规则保存到临时目录:" + ruleFilePath);
|
|
FileUtil.writeInputStreamToLocalFile(IoUtil.stringToInputStream(ruleDetails), ruleFilePath);
|
|
FileUtil.writeInputStreamToLocalFile(IoUtil.stringToInputStream(ruleDetails), ruleFilePath);
|
|
|
|
|
|
- List<TaskPO> taskListOfLeafIndex = taskList.stream().filter(task -> indexId.equals(task.getLastTargetId())).collect(Collectors.toList());
|
|
|
|
|
|
+ List<TaskPO> taskListOfLeafIndex = taskList.stream()
|
|
|
|
+ .filter(task -> indexId.equals(task.getLastTargetId()) && DictConstants.TASK_ANALYSIS.equals(task.getRunState()))
|
|
|
|
+ .collect(Collectors.toList());
|
|
int resultNumberOfCurrentIndex = taskListOfLeafIndex.size();
|
|
int resultNumberOfCurrentIndex = taskListOfLeafIndex.size();
|
|
log.info("------- /state 叶子节点 " + indexId + " 包括 " + resultNumberOfCurrentIndex + " 个任务!");
|
|
log.info("------- /state 叶子节点 " + indexId + " 包括 " + resultNumberOfCurrentIndex + " 个任务!");
|
|
log.info("------- /state 计算叶子节点 " + indexId + " 的得分!");
|
|
log.info("------- /state 计算叶子节点 " + indexId + " 的得分!");
|
|
double sum = taskListOfLeafIndex.stream()
|
|
double sum = taskListOfLeafIndex.stream()
|
|
.mapToDouble(task2 -> {
|
|
.mapToDouble(task2 -> {
|
|
- String task2Id = task2.getId();
|
|
|
|
- taskMapper.updateState(task2Id, DictConstants.TASK_ANALYSING);
|
|
|
|
- // 计算每个任务的得分
|
|
|
|
|
|
+ String runState = task2.getRunState();
|
|
|
|
+ if (!DictConstants.TASK_ANALYSIS.equals(runState)) {
|
|
|
|
+ return 0.0;
|
|
|
|
+ } else {
|
|
|
|
+ String task2Id = task2.getId();
|
|
|
|
+ taskMapper.updateState(task2Id, DictConstants.TASK_ANALYSING);
|
|
|
|
+ // 计算每个任务的得分
|
|
|
|
|
|
- String runResultMinio = task2.getRunResultFilePath() + "/Ego.csv";
|
|
|
|
- String runResultLinux = linuxTempPath + runResultMinio;
|
|
|
|
|
|
+ String runResultMinio = task2.getRunResultFilePath() + "/Ego.csv";
|
|
|
|
+ String runResultLinux = linuxTempPath + runResultMinio;
|
|
|
|
|
|
// python3 /home/ubuntu/test/Evaluate/main.py /home/ubuntu/test/test_data.csv 4 AEB_1-2
|
|
// python3 /home/ubuntu/test/Evaluate/main.py /home/ubuntu/test/test_data.csv 4 AEB_1-2
|
|
// String command = "python3 " + pyPath + " " + runResultLinux + " " + task2.getSceneType(); // 默认使用场景名称找打分脚本
|
|
// String command = "python3 " + pyPath + " " + runResultLinux + " " + task2.getSceneType(); // 默认使用场景名称找打分脚本
|
|
- String command = "python3 " + pyPath + "main.py " + runResultLinux + " " + task2.getSceneType() + " " + ruleName; // 指定打分脚本
|
|
|
|
- String scoreResult;
|
|
|
|
- try {
|
|
|
|
|
|
+ String command = "python3 " + pyPath + "main.py " + runResultLinux + " " + task2.getSceneType() + " " + ruleName; // 指定打分脚本
|
|
|
|
+ String scoreResult;
|
|
try {
|
|
try {
|
|
- log.info("------- /state 下载 minio 上的结果文件 " + runResultMinio + " 到本地:" + runResultLinux);
|
|
|
|
- MinioUtil.downloadToFile(minioClient, bucketName, runResultMinio, runResultLinux); // 也可改成下载到指定ip的服务器上,需要保证和打分脚本在一台机器上。
|
|
|
|
|
|
+ try {
|
|
|
|
+ log.info("------- /state 下载 minio 上的结果文件 " + runResultMinio + " 到本地:" + runResultLinux);
|
|
|
|
+ MinioUtil.downloadToFile(minioClient, bucketName, runResultMinio, runResultLinux); // 也可改成下载到指定ip的服务器上,需要保证和打分脚本在一台机器上。
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ throw new RuntimeException("------- /state 下载 minio 上的结果文件出错:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+ log.info("------- /state 开始执行打分命令:" + command);
|
|
|
|
+ scoreResult = SshUtil.execute(sessionScore, command);
|
|
|
|
+ log.info("------- /state 打分结束,结果为:" + scoreResult);
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ throw new RuntimeException("------- /state 任务 " + task2Id + " 打分出错,命令为:" + command + " 修改状态为:" + DictConstants.TASK_ABORTED + "\n" + e.getMessage());
|
|
|
|
+ }
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
- throw new RuntimeException("------- /state 下载 minio 上的结果文件出错:" + e.getMessage());
|
|
|
|
|
|
+ taskMapper.updateState(task2Id, DictConstants.TASK_ABORTED);
|
|
|
|
+ throw new RuntimeException(e.getMessage());
|
|
}
|
|
}
|
|
|
|
+ ScoreTO score = null;
|
|
try {
|
|
try {
|
|
- log.info("------- /state 开始执行打分命令:" + command);
|
|
|
|
- scoreResult = SshUtil.execute(sessionScore, command);
|
|
|
|
- log.info("------- /state 打分结束,结果为:" + scoreResult);
|
|
|
|
- } catch (IOException e) {
|
|
|
|
- throw new RuntimeException("------- /state 任务 " + task2Id + " 打分出错,命令为:" + command + " 修改状态为:" + DictConstants.TASK_ABORTED + "\n" + e.getMessage());
|
|
|
|
|
|
+ String replace = StringUtil.replace(scoreResult, "'", "\"");
|
|
|
|
+ score = JsonUtil.jsonToBean(replace, ScoreTO.class);
|
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
|
+ e.printStackTrace();
|
|
}
|
|
}
|
|
- } catch (Exception e) {
|
|
|
|
- taskMapper.updateState(task2Id, DictConstants.TASK_ABORTED);
|
|
|
|
- throw new RuntimeException(e.getMessage());
|
|
|
|
- }
|
|
|
|
- ScoreTO score = null;
|
|
|
|
- try {
|
|
|
|
- String replace = StringUtil.replace(scoreResult, "'", "\"");
|
|
|
|
- score = JsonUtil.jsonToBean(replace, ScoreTO.class);
|
|
|
|
- } catch (JsonProcessingException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- }
|
|
|
|
- assert score != null;
|
|
|
|
- task2.setReturnSceneId(score.getUnit_scene_ID());
|
|
|
|
- task2.setScore(score.getUnit_scene_score());
|
|
|
|
- task2.setTargetEvaluate(score.getEvaluate_item());
|
|
|
|
- task2.setScoreExplain(score.getScore_description());
|
|
|
|
- task2.setModifyUserId(USER_ID);
|
|
|
|
- task2.setModifyTime(TimeUtil.getNowForMysql());
|
|
|
|
- scoreExplain.set(score.getScore_description());
|
|
|
|
|
|
+ assert score != null;
|
|
|
|
+ task2.setReturnSceneId(score.getUnit_scene_ID());
|
|
|
|
+ task2.setScore(score.getUnit_scene_score());
|
|
|
|
+ task2.setTargetEvaluate(score.getEvaluate_item());
|
|
|
|
+ task2.setScoreExplain(score.getScore_description());
|
|
|
|
+ task2.setModifyUserId(USER_ID);
|
|
|
|
+ task2.setModifyTime(TimeUtil.getNowForMysql());
|
|
|
|
+ scoreExplain.set(score.getScore_description());
|
|
|
|
|
|
- taskMapper.updateState(task2Id, DictConstants.TASK_COMPLETED);
|
|
|
|
|
|
+ taskMapper.updateState(task2Id, DictConstants.TASK_COMPLETED);
|
|
|
|
+
|
|
|
|
+ return score.getUnit_scene_score();
|
|
|
|
+ }
|
|
|
|
|
|
- return score.getUnit_scene_score();
|
|
|
|
}).sum();
|
|
}).sum();
|
|
- // 计算不合格的任务数(不到100分就是不合格)
|
|
|
|
- long notStandardSceneNum = taskListOfLeafIndex.stream().filter(task -> task.getScore() < 100).count();
|
|
|
|
- // 叶子指标的得分(叶子指标下所有场景得分的平均值)
|
|
|
|
- double leafIndexScore = sum / resultNumberOfCurrentIndex;
|
|
|
|
|
|
+ // 计算不合格的任务数(不到100分就是不合格,执行失败的不算)
|
|
|
|
+ long notStandardSceneNum = taskListOfLeafIndex.stream()
|
|
|
|
+ .filter(task -> task.getScore() < 100 && task.getScore() != 0.0 && DictConstants.TASK_COMPLETED.equals(task.getRunState()))
|
|
|
|
+ .count();
|
|
|
|
+ // 叶子指标的得分(叶子指标下所有场景得分的平均值,执行失败的不算)
|
|
|
|
+ double leafIndexScore = (int) (sum / resultNumberOfCurrentIndex * 100) / 100.0;
|
|
// -------------------------------- 保存叶子指标得分 --------------------------------
|
|
// -------------------------------- 保存叶子指标得分 --------------------------------
|
|
indexTemplatePO.setTempScore(leafIndexScore);
|
|
indexTemplatePO.setTempScore(leafIndexScore);
|
|
TaskIndexPO leafTaskIndex = TaskIndexPO.builder()
|
|
TaskIndexPO leafTaskIndex = TaskIndexPO.builder()
|
|
@@ -246,6 +259,7 @@ public class TaskService {
|
|
// 保存末级指标分数
|
|
// 保存末级指标分数
|
|
taskIndexManager.batchInsertLeafIndex(leafTaskIndexList);
|
|
taskIndexManager.batchInsertLeafIndex(leafTaskIndexList);
|
|
// 保存一级指标分数
|
|
// 保存一级指标分数
|
|
|
|
+ log.info("------- /state 项目 " + projectId + " 的所有任务分数为:" + taskList);
|
|
log.info("------- /state 根据每个指标的得分和权重算出各个一级指标的得分(即 project 对应的场景测试包下的一级指标)!");
|
|
log.info("------- /state 根据每个指标的得分和权重算出各个一级指标的得分(即 project 对应的场景测试包下的一级指标)!");
|
|
computeFirst(leafTaskIndexList, projectId);
|
|
computeFirst(leafTaskIndexList, projectId);
|
|
|
|
|
|
@@ -271,7 +285,6 @@ public class TaskService {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
public Boolean taskConfirm(String taskId) {
|
|
public Boolean taskConfirm(String taskId) {
|
|
// 查询 task 如果不是 pending 则不执行
|
|
// 查询 task 如果不是 pending 则不执行
|
|
String state = taskMapper.selectStateById(taskId);
|
|
String state = taskMapper.selectStateById(taskId);
|
|
@@ -314,7 +327,7 @@ public class TaskService {
|
|
.id(StringUtil.getRandomUUID())
|
|
.id(StringUtil.getRandomUUID())
|
|
.pId(projectId)
|
|
.pId(projectId)
|
|
.target(indexTemplate.getIndexId())
|
|
.target(indexTemplate.getIndexId())
|
|
- .score(parentScore)
|
|
|
|
|
|
+ .score(((int) parentScore * 100) / 100.0)
|
|
.indexId(indexTemplate.getIndexId())
|
|
.indexId(indexTemplate.getIndexId())
|
|
.parentId(indexTemplate.getParentId())
|
|
.parentId(indexTemplate.getParentId())
|
|
.rootId(indexTemplate.getRootId())
|
|
.rootId(indexTemplate.getRootId())
|