SchedulerTest.java 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package com.css.simulation.resource.scheduler;
  2. import api.common.util.CollectionUtil;
  3. import api.common.util.StringUtil;
  4. import api.common.util.TimeUtil;
  5. import com.css.simulation.resource.scheduler.mapper.IndexTemplateMapper;
  6. import com.css.simulation.resource.scheduler.mapper.TaskIndexMapper;
  7. import com.css.simulation.resource.scheduler.mapper.TaskMapper;
  8. import com.css.simulation.resource.scheduler.pojo.po.IndexTemplatePO;
  9. import com.css.simulation.resource.scheduler.pojo.po.TaskIndexPO;
  10. import io.kubernetes.client.openapi.ApiClient;
  11. import io.kubernetes.client.openapi.ApiException;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.junit.Test;
  14. import org.junit.runner.RunWith;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.boot.test.context.SpringBootTest;
  17. import org.springframework.data.redis.core.StringRedisTemplate;
  18. import org.springframework.test.context.junit4.SpringRunner;
  19. import java.util.*;
  20. import java.util.stream.Collectors;
  21. @Slf4j
  22. @SpringBootTest
  23. @RunWith(SpringRunner.class)
  24. public class SchedulerTest {
  25. @Autowired
  26. TaskIndexMapper taskIndexMapper;
  27. @Autowired
  28. TaskMapper taskMapper;
  29. @Autowired
  30. IndexTemplateMapper indexTemplateMapper;
  31. @Autowired
  32. StringRedisTemplate redisTemplate;
  33. @Autowired
  34. ApiClient apiClient;
  35. private final String USER_ID = "simulation-resource-scheduler";
  36. @Test
  37. public void redisTemplate() throws ApiException {
  38. redisTemplate.opsForValue().set("a:b","test");
  39. redisTemplate.opsForValue().set("a:b:c","test");
  40. }
  41. @Test
  42. public void test() {
  43. List<TaskIndexPO> leafTaskIndexList = new ArrayList<>();
  44. TaskIndexPO taskIndexPO1 = TaskIndexPO.builder()
  45. .id("9e64a4aa3df7414097ffd1c82a8bdaa3")
  46. .pId("7586e4196699414d87f63ffbbf281122")
  47. .indexId("12db82c7acbf49a6a9274243e7eebc6a")
  48. .parentId("046155104e934910b19305a6ba27a784")
  49. .rootId("059c582c7cf3422b8d9bb8583f6b7c5a")
  50. .target("12db82c7acbf49a6a9274243e7eebc6a")
  51. .notStandardSceneNum(0)
  52. .score(100.0)
  53. .weight("50")
  54. .scoreExplain("1) 未发生碰撞,得分 100;2) 发生碰撞,得分 0。)")
  55. .build();
  56. leafTaskIndexList.add(taskIndexPO1);
  57. TaskIndexPO taskIndexPO2 = TaskIndexPO.builder()
  58. .id("fc16c0aa3292496fb37daa635dd2d506")
  59. .pId("7586e4196699414d87f63ffbbf281122")
  60. .indexId("393a4b959d684eec9b5b777c8fc38bcf")
  61. .parentId("046155104e934910b19305a6ba27a784")
  62. .rootId("059c582c7cf3422b8d9bb8583f6b7c5a")
  63. .target("393a4b959d684eec9b5b777c8fc38bcf")
  64. .notStandardSceneNum(0)
  65. .score(100.0)
  66. .weight("50")
  67. .scoreExplain("1) 未发生碰撞,得分 100;2) 发生碰撞,得分 0。)")
  68. .build();
  69. leafTaskIndexList.add(taskIndexPO2);
  70. TaskIndexPO taskIndexPO3 = TaskIndexPO.builder()
  71. .id("300fbafab2d3432aac2b7926bb89456a")
  72. .pId("7586e4196699414d87f63ffbbf281122")
  73. .indexId("5b95a89d5a764af0ad93164753ab8caa")
  74. .parentId("059c582c7cf3422b8d9bb8583f6b7c5a")
  75. .rootId("059c582c7cf3422b8d9bb8583f6b7c5a")
  76. .target("5b95a89d5a764af0ad93164753ab8caa")
  77. .notStandardSceneNum(0)
  78. .score(100.0)
  79. .weight("60")
  80. .scoreExplain("1) 未发生碰撞,得分 100;2) 发生碰撞,得分 0。)")
  81. .build();
  82. leafTaskIndexList.add(taskIndexPO3);
  83. computeFirst(leafTaskIndexList, "7586e4196699414d87f63ffbbf281122");
  84. }
  85. public void computeFirst(List<TaskIndexPO> leafTaskIndexList, String projectId) {
  86. log.info("------- /state computeFirst 计算父指标得分:" + leafTaskIndexList);
  87. Iterator<TaskIndexPO> leafTaskIndexIterator = leafTaskIndexList.iterator();
  88. while (leafTaskIndexIterator.hasNext()) {
  89. TaskIndexPO leafTaskIndex = leafTaskIndexIterator.next();
  90. String parentId = leafTaskIndex.getParentId();
  91. String rootId = leafTaskIndex.getRootId();
  92. if (parentId.equals(rootId)) {
  93. leafTaskIndex.setCreateUserId(USER_ID);
  94. leafTaskIndex.setCreateTime(TimeUtil.getNowForMysql());
  95. leafTaskIndex.setModifyUserId(USER_ID);
  96. leafTaskIndex.setModifyTime(TimeUtil.getNowForMysql());
  97. leafTaskIndex.setIsDeleted("0");
  98. taskIndexMapper.insertFirstIndex(leafTaskIndex);
  99. leafTaskIndexIterator.remove();
  100. }
  101. }
  102. if (leafTaskIndexList.size() > 0) {
  103. Map<String, List<TaskIndexPO>> sonTaskIndexMap = leafTaskIndexList.stream().collect(Collectors.groupingBy(TaskIndexPO::getParentId));
  104. Set<String> parentIdSet = sonTaskIndexMap.keySet();
  105. List<String> parentIdList = CollectionUtil.setToList(parentIdSet);
  106. List<IndexTemplatePO> parentIndexTemplateList = indexTemplateMapper.selectByIdList(parentIdList);
  107. // 计算父指标得分
  108. List<TaskIndexPO> parentIndexList = new ArrayList<>();
  109. parentIndexTemplateList.forEach(indexTemplate -> {
  110. String weight = indexTemplate.getWeight();
  111. List<TaskIndexPO> sonTaskIndexList = sonTaskIndexMap.get(indexTemplate.getIndexId());
  112. double parentScore = sonTaskIndexList.stream().mapToDouble(taskIndex -> taskIndex.getScore() * Double.parseDouble(taskIndex.getWeight()) / 100).sum();
  113. TaskIndexPO parentTaskIndex = TaskIndexPO.builder()
  114. .id(StringUtil.getRandomUUID())
  115. .pId(projectId)
  116. .target(indexTemplate.getIndexId())
  117. .score(parentScore)
  118. .indexId(indexTemplate.getIndexId())
  119. .parentId(indexTemplate.getParentId())
  120. .rootId(indexTemplate.getRootId())
  121. .weight(weight)
  122. .build();
  123. parentIndexList.add(parentTaskIndex);
  124. });
  125. // 将父指标作为叶子指标递归
  126. computeFirst(parentIndexList, projectId);
  127. }
  128. }
  129. }