martin 3 gadi atpakaļ
vecāks
revīzija
6223490db2

+ 5 - 3
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/IndexTemplateMapper.java

@@ -22,7 +22,7 @@ public interface IndexTemplateMapper {
             @Result(column = "scene_statue_ids", property = "sceneStatueIds", jdbcType = JdbcType.VARCHAR),
             @Result(column = "weight", property = "weight", jdbcType = JdbcType.VARCHAR),
             @Result(column = "parent_id", property = "parentId", jdbcType = JdbcType.VARCHAR),
-            @Result(column = "root_id", property = "parentId", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "root_id", property = "rootId", jdbcType = JdbcType.VARCHAR),
             @Result(column = "rule_name", property = "ruleName", jdbcType = JdbcType.VARCHAR),
             @Result(column = "rule_details", property = "ruleDetails", jdbcType = JdbcType.VARCHAR)
     })
@@ -36,17 +36,19 @@ public interface IndexTemplateMapper {
     List<IndexTemplatePO> selectLeafIndexByPackageId(@Param("packageId") String packageId);
 
     @ResultMap("index")
-    @Select("select sps.sublist_id," +
+    @Select("select sps.sublist_id,\n" +
             "       sps.scene_natural_ids,\n" +
             "       sps.scene_traffic_ids,\n" +
             "       sps.scene_statue_ids,\n" +
             "       sps.weight,\n" +
             "       sps.parent_id,\n" +
+            "       sps.root_id,\n" +
             "       sr.rule_name,\n" +
             "       sr.rule_details\n" +
             "from scene_package_sublist sps\n" +
             "         left join scoring_rules sr on sps.package_and_rules = sr.rules_id\n" +
-            "where root_id = #{packageId}\n" +
+            "where sps.is_deleted = '0'\n" +
+            "  and root_id = #{packageId}\n" +
             "  and package_and_rules is not null\n" +
             "  and package_and_rules != ''")
     List<IndexTemplatePO> selectLeafIndexWithRuleDetailsByPackageId(@Param("packageId") String packageId);

+ 12 - 12
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/TaskIndexMapper.java

@@ -47,21 +47,21 @@ public interface TaskIndexMapper {
             "                                             modify_time,\n" +
             "                                             modify_user_id,\n" +
             "                                             is_deleted)\n" +
-            "values (#{total.id},\n" +
-            "        #{total.pId},\n" +
-            "        #{total.target},\n" +
-            "        #{total.score},\n" +
-            "        #{total.createTime},\n" +
-            "        #{total.createUserId},\n" +
-            "        #{total.modifyTime},\n" +
-            "        #{total.modifyUserId},\n" +
-            "        #{total.isDeleted})")
-    void insertTotalIndex(@Param("total")TaskIndexPO totalTaskIndex);
+            "values (#{first.id},\n" +
+            "        #{first.pId},\n" +
+            "        #{first.target},\n" +
+            "        #{first.score},\n" +
+            "        #{first.createTime},\n" +
+            "        #{first.createUserId},\n" +
+            "        #{first.modifyTime},\n" +
+            "        #{first.modifyUserId},\n" +
+            "        #{first.isDeleted})")
+    void insertFirstIndex(@Param("first")TaskIndexPO firstTaskIndex);
 
 
-    @Delete("delete from simulation_mpt_first_target_score where p_id = #{project}")
+    @Delete("delete from simulation_mpt_first_target_score where p_id = #{projectId}")
     void deleteFirstByProjectId(@Param("projectId")String projectId);
 
-    @Delete("delete from simulation_mpt_last_target_score where p_id = #{project}")
+    @Delete("delete from simulation_mpt_last_target_score where p_id = #{projectId}")
     void deleteLastByProjectId(@Param("projectId")String projectId);
 }

+ 4 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/po/TaskIndexPO.java

@@ -12,7 +12,11 @@ public class TaskIndexPO extends CommonPO {
 
     private String id;
     private String pId; // 项目 id
+    private String indexId; // 对应的指标 id
+    private String parentId;  // 父指标 id
+    private String rootId;  // 场景测试包 id
     private String target;
     private Integer notStandardSceneNum;
     private Double score; // 得分
+    private String weight; // 得分
 }

+ 49 - 31
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/service/TaskService.java

@@ -131,6 +131,7 @@ public class TaskService {
         SshUtil.execute(sessionKafka, topicDeleteCommand);
         SshUtil.stop(clientKafka, sessionKafka);
         List<TaskPO> taskList = taskMapper.selectTaskListByProjectId(projectId);  // 所有任务信息
+        log.info("------- /state 共有 " + taskList.size() + "个任务!");
         taskIndexMapper.deleteFirstByProjectId(projectId);
         taskIndexMapper.deleteLastByProjectId(projectId);
         // -------------------------------- 查询叶子指标 --------------------------------
@@ -143,6 +144,9 @@ public class TaskService {
         for (int i = 0; i < leafIndexTemplateList.size(); i++) {
             IndexTemplatePO indexTemplatePO = leafIndexTemplateList.get(i);
             String indexId = indexTemplatePO.getIndexId();
+            String parentId = indexTemplatePO.getParentId();
+            String rootId = indexTemplatePO.getRootId();
+            String weight = indexTemplatePO.getWeight();
             log.info("------- /state 开始执行对第 " + (i + 1) + " 个叶子节点 " + indexId + " 进行打分!");
             String ruleName = indexTemplatePO.getRuleName();    // 打分脚本名称,例如 AEB_1-1
             String ruleDetails = indexTemplatePO.getRuleDetails();    // 打分脚本内容
@@ -231,6 +235,10 @@ public class TaskService {
                     .target(indexTemplatePO.getIndexId())
                     .notStandardSceneNum((int) notStandardSceneNum)
                     .score(leafIndexScore)
+                    .indexId(indexId)
+                    .parentId(parentId)
+                    .rootId(rootId)
+                    .weight(weight)
                     .build();
             leafTaskIndex.setCreateUserId(USER_ID);
             leafTaskIndex.setCreateTime(TimeUtil.getNowForMysql());
@@ -246,7 +254,7 @@ public class TaskService {
         taskIndexManager.batchInsertLeafIndex(leafTaskIndexList);
         // 保存一级指标分数
         log.info("------- /state 根据每个指标的得分和权重算出各个一级指标的得分(即 project 对应的场景测试包下的一级指标)!");
-        computeFirst(leafIndexTemplateList, projectId);
+        computeFirst(leafTaskIndexList, projectId);
 
         // 调用 server 的接口,计算评价等级
         String tokenUrl = tokenUri + "?grant_type=client_credentials"
@@ -260,7 +268,7 @@ public class TaskService {
         log.info("------- /state 仿真云平台 token 为:" + accessToken);
         Map<String, String> headers = new HashMap<>();
         headers.put("Authorization", "Bearer " + accessToken);
-        log.info("------- /state 访问仿真云平台评价等级接口:" + accessToken);
+        log.info("------- /state 访问仿真云平台评价等级接口:" + evaluationLevelUri);
         HttpUtil.post(closeableHttpClient, requestConfig, evaluationLevelUri, headers, null);
         log.info("------- /state 项目 " + projectId + " 打分完成");
 
@@ -275,39 +283,49 @@ public class TaskService {
     }
 
 
-    public void computeFirst(List<IndexTemplatePO> leaf, String projectId) {
-        Map<String, List<IndexTemplatePO>> parentIndexMap = leaf.stream().collect(Collectors.groupingBy(IndexTemplatePO::getParentId));
-        Set<String> parentIdSet = parentIndexMap.keySet();
-        List<String> parentIdList = CollectionUtil.setToList(parentIdSet);
-        log.info("------- /state 将叶子指标按父指标分组父指标集合为:" + parentIdSet);
-        List<IndexTemplatePO> parentIndexList = indexTemplateMapper.selectByIdList(parentIdList);
-        // 计算父指标得分
-        parentIndexList.forEach(index1 -> {
-            double sum = parentIndexMap.get(index1.getIndexId()).stream().mapToDouble(index2 -> index2.getTempScore() * Double.parseDouble(index2.getWeight())).sum();
-            index1.setTempScore(sum);
-        });
-        Iterator<IndexTemplatePO> parentIndexIterator = parentIndexList.iterator();
-        while (parentIndexIterator.hasNext()) {
-            IndexTemplatePO parentIndex = parentIndexIterator.next();
-            String parentId = parentIndex.getParentId();
-            String rootId = parentIndex.getRootId();
+    public void computeFirst(List<TaskIndexPO> leafTaskIndexList, String projectId) {
+
+        log.info("------- /state computeFirst 计算父指标得分:" + leafTaskIndexList);
+        Iterator<TaskIndexPO> leafTaskIndexIterator = leafTaskIndexList.iterator();
+        while (leafTaskIndexIterator.hasNext()) {
+            TaskIndexPO leafTaskIndex = leafTaskIndexIterator.next();
+            String parentId = leafTaskIndex.getParentId();
+            String rootId = leafTaskIndex.getRootId();
             if (parentId.equals(rootId)) {
-                TaskIndexPO totalTaskIndex = TaskIndexPO.builder()
+                taskIndexMapper.insertFirstIndex(leafTaskIndex);
+            }
+            leafTaskIndexIterator.remove();
+        }
+        if (leafTaskIndexList.size() > 0) {
+            Map<String, List<TaskIndexPO>> sonTaskIndexMap = leafTaskIndexList.stream().collect(Collectors.groupingBy(TaskIndexPO::getParentId));
+            Set<String> parentIdSet = sonTaskIndexMap.keySet();
+            List<String> parentIdList = CollectionUtil.setToList(parentIdSet);
+            List<IndexTemplatePO> parentIndexTemplateList = indexTemplateMapper.selectByIdList(parentIdList);
+            // 计算父指标得分
+            List<TaskIndexPO> parentIndexList = new ArrayList<>();
+            parentIndexTemplateList.forEach(indexTemplate -> {
+                String weight = indexTemplate.getWeight();
+
+                List<TaskIndexPO> sonTaskIndexList = sonTaskIndexMap.get(indexTemplate.getIndexId());
+                double parentScore = sonTaskIndexList.stream().mapToDouble(taskIndex -> taskIndex.getScore() * Double.parseDouble(taskIndex.getWeight())).sum();
+                TaskIndexPO parentTaskIndex = TaskIndexPO.builder()
                         .id(StringUtil.getRandomUUID())
                         .pId(projectId)
-                        .target(parentIndex.getIndexId())
-                        .score(parentIndex.getTempScore())
+                        .target(indexTemplate.getIndexId())
+                        .score(parentScore)
+                        .indexId(indexTemplate.getIndexId())
+                        .parentId(indexTemplate.getParentId())
+                        .rootId(indexTemplate.getRootId())
+                        .weight(weight)
                         .build();
-                totalTaskIndex.setCreateUserId(USER_ID);
-                totalTaskIndex.setCreateTime(TimeUtil.getNowForMysql());
-                totalTaskIndex.setModifyUserId(USER_ID);
-                totalTaskIndex.setModifyTime(TimeUtil.getNowForMysql());
-                totalTaskIndex.setIsDeleted("0");
-                taskIndexMapper.insertTotalIndex(totalTaskIndex);
-                parentIndexIterator.remove();
-            }
-        }
-        if (parentIndexList.size() > 1) {
+                parentTaskIndex.setCreateUserId(USER_ID);
+                parentTaskIndex.setCreateTime(TimeUtil.getNowForMysql());
+                parentTaskIndex.setModifyUserId(USER_ID);
+                parentTaskIndex.setModifyTime(TimeUtil.getNowForMysql());
+                parentTaskIndex.setIsDeleted("0");
+                parentIndexList.add(parentTaskIndex);
+            });
+            // 将父指标作为叶子指标递归
             computeFirst(parentIndexList, projectId);
         }
     }