From cb356c816a56a633974b71927239592df6b9c8b1 Mon Sep 17 00:00:00 2001
From: xyc <jc_xiong@hotmail.com>
Date: 星期二, 29 十月 2024 08:57:47 +0800
Subject: [PATCH] 修改

---
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java |   86 +++++++++++++++++++++++++++++++++++-------
 1 files changed, 71 insertions(+), 15 deletions(-)

diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java
index d8696a3..ae1baa0 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java
@@ -5,6 +5,7 @@
 import cn.hutool.json.XML;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.spire.pdf.tables.table.convert.Convert;
+import com.zt.common.db.query.QueryFilter;
 import com.zt.common.exception.RenException;
 import com.zt.common.service.BaseService;
 import com.zt.common.servlet.Result;
@@ -24,6 +25,7 @@
 import com.zt.life.modules.mainPart.taskReliability.dto.TaskPhaseConstraintDto;
 import com.zt.life.modules.mainPart.taskReliability.model.*;
 import com.zt.life.modules.mainPart.utils.GetStringSpace;
+import com.zt.life.modules.mainPart.utils.OSUtils.ProcessUtils;
 import io.swagger.models.auth.In;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -115,7 +117,6 @@
     Map<Integer, String> templetsStrMap2 = new HashMap<>();
 
     private JSONObject xmlJSONObj;
-
 
     /**
      * 鍒嗛〉鏌ヨ
@@ -354,9 +355,9 @@
                         currentStatusDto.setX2(nextStatusDto.getX1());
                         statusDtoListNew.add(new TimeDiagramStatusDto(nextStatusDto.getX1(), nextStatusDto.getX2(), nextStatusDto.getStatus()));
                     } else if (nextStatusDto.getX1() > currentStatusDto.getX1() && nextStatusDto.getX2() < currentStatusDto.getX2()) {
-                        currentStatusDto.setX2(nextStatusDto.getX1());
                         statusDtoListNew.add(new TimeDiagramStatusDto(nextStatusDto.getX1(), nextStatusDto.getX2(), nextStatusDto.getStatus()));
                         statusDtoListOld.add(new TimeDiagramStatusDto(nextStatusDto.getX2(), currentStatusDto.getX2(), currentStatusDto.getStatus()));
+                        currentStatusDto.setX2(nextStatusDto.getX1());
                     }
                 } else {
                     if (nextStatusDto.getX1() >= currentStatusDto.getX2()) {
@@ -581,6 +582,7 @@
                 this.processJSONArray(jsonArray, item, taskId);
             }
         }
+        childList.removeIf(item -> item.getStatusList().size() == 0);
         return childList;
     }
 
@@ -655,7 +657,6 @@
         return result;
     }
 
-    @Transactional(rollbackFor = Exception.class)
     public Boolean simulate(SimulatAssess simulatAssess) {
         Boolean result = false;
         // 2. 缁勮渚涚畻娉曞簱浠跨湡鐨勬ā鍨媥ml
@@ -665,6 +666,11 @@
         result = callReliaSimLib(simulatAssess);
 
         return result;
+    }
+
+    public List<SimulatAssess> process(QueryFilter queryFilter) {
+        List<SimulatAssess> page = baseDao.getProcessList(queryFilter.getParams());
+        return queryFilter.getPageList(page);
     }
 
     private Boolean callReliaSimLib(SimulatAssess simulatAssess) {
@@ -690,6 +696,8 @@
             } else {
                 throw new RenException("鏆備笉鏀寔璇ユ搷浣滅郴缁燂紝杩涜鍚姩绠楁硶搴撹绠楋紒");
             }
+            long pid = ProcessUtils.getProcessId(process);
+            logger.info("绠楁硶搴揚ID锛�" + pid);
             is = process.getInputStream();
             // 浠ュ懡浠よ鏂瑰紡璋冪敤绠楁硶搴撴椂锛屾帴鍙g害瀹氳繑鍥炵殑缁撴灉鏄痷tf-8缂栫爜
             br = new BufferedReader(new InputStreamReader(is, "utf-8"));
@@ -700,6 +708,8 @@
                 ReliaSimLibResult rtn = com.alibaba.fastjson.JSONObject.parseObject(line, ReliaSimLibResult.class);
                 if ("0".equals(rtn.getCode())) {
                     logger.info("鍚姩鍙潬鎬т豢鐪熻瘎浼扮畻娉曞簱鎴愬姛銆�");
+                    newProcess(simulatAssess, pid, command);
+                    update(simulatAssess);
                     result = true;
                 } else {
                     String errorMsg = rtn.getErrorMsg();
@@ -728,6 +738,14 @@
         }
 
         return result;
+    }
+
+    public void newProcess(SimulatAssess simulatAssess, long pid, String command) {
+        simulatAssess.setPid(pid);
+        simulatAssess.setCommandLine(command);
+        simulatAssess.setProcessIsAlive(true);
+        simulatAssess.setProcessStartTime(new Date());
+        simulatAssess.setProgress(0);
     }
 
     private void setParamToRedis(SimulatAssess simulatAssess) {
@@ -784,7 +802,8 @@
             Element root = document.addElement("des");
             root.addAttribute("name", "General system");
             addTasksTag(taskPhaseModelAll, root);
-            addModelsTag(taskId,
+            addModelsTag(simulatAssess,
+                    taskId,
                     productId,
                     product.getName(),
                     product.getNamePath(),
@@ -921,6 +940,10 @@
                     ele = repairModelTag.addElement("shape");
                     ele.addAttribute("value", String.valueOf(repairModel.getParam3()));
                     break;
+                case RepairModel.TYPE_DIRAC:
+                    ele = repairModelTag.addElement("repair-time");
+                    ele.addAttribute("value", String.valueOf(repairModel.getParam1()));
+                    break;
                 default:
                     break;
             }
@@ -963,7 +986,8 @@
         return taskPhases;
     }
 
-    private void addModelsTag(Long taskId,
+    private void addModelsTag(SimulatAssess simulatAssess,
+                              Long taskId,
                               Long productId,
                               String productName,
                               String productNamePath,
@@ -989,7 +1013,8 @@
                     "end".equals(item.getAlgorithmType())).collect(Collectors.toList()).get(0);
             ModelNode computerNode = modelNodeAndVnodeList.stream().filter(item ->
                     endAlgo.getComputerList().equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-            node2DOM(taskId,
+            node2DOM(simulatAssess,
+                    taskId,
                     taskPhaseModel,
                     gkModelTop.getModelId(),
                     productId,
@@ -1007,7 +1032,8 @@
     }
 
     // 閫掑綊鍑芥暟
-    private void node2DOM(Long taskId,
+    private void node2DOM(SimulatAssess simulatAssess,
+                          Long taskId,
                           TaskPhaseModel taskPhaseModel,
                           Long modelId,
                           Long productId,
@@ -1037,7 +1063,8 @@
                         "end".equals(item.getAlgorithmType())).collect(Collectors.toList()).get(0);
                 ModelNode computerNode = modelNodeAndVnodeListSub.stream().filter(item ->
                         endAlgo.getComputerList().equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                node2DOM(taskId,
+                node2DOM(simulatAssess,
+                        taskId,
                         taskPhaseModel,
                         gkModel.getModelId(),
                         product.getId(),
@@ -1088,7 +1115,12 @@
 
                 if (1 == paramData.getRepairable()) {
                     // 鍙淮淇�
-                    RepairModel repairModel = createRepairModel(paramData);
+                    RepairModel repairModel = null;
+                    if (isRepairDirac(simulatAssess.getRepairDiracFlag(), taskPhaseModel, product.getId())) {
+                        repairModel = createRepairModelDirac(0);
+                    } else {
+                        repairModel = createRepairModel(paramData);
+                    }
                     repairModels.add(repairModel);
                     Element repairTag = nodeTag.addElement("repair_model");
                     repairTag.addAttribute("name", repairModel.getId().toString());
@@ -1123,7 +1155,8 @@
             for (String nodeStr : computerNodeListStr) {
                 ModelNode mn = modelNodeAndVnodeList.stream().filter(item ->
                         nodeStr.equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                node2DOM(taskId,
+                node2DOM(simulatAssess,
+                        taskId,
                         taskPhaseModel,
                         modelId,
                         null,
@@ -1178,23 +1211,46 @@
         return failureModel;
     }
 
+    private boolean isRepairDirac(Boolean repairDiracFlag, TaskPhaseModel taskPhaseModel, Long productId) {
+        boolean result = false;
+
+        if (repairDiracFlag != null && repairDiracFlag) {
+            if (taskPhaseModel.getPhaseConstraints() == null) {
+                result = true;
+            } else {
+                List<TaskPhaseConstraintDto> list = taskPhaseModel.getPhaseConstraints().stream().filter(item ->
+                        productId.equals(item.getProductId())).collect(Collectors.toList());
+                if (list.size() == 0) {
+                    result = true;
+                }
+            }
+        }
+
+        return result;
+    }
+
+    private RepairModel createRepairModelDirac(double time) {
+        RepairModel repairModel = new RepairModel();
+        repairModel.setId(UUIDUtil.generateId());
+        repairModel.setType(RepairModel.TYPE_DIRAC);
+        repairModel.setParam1(0);
+        return repairModel;
+    }
+
     private RepairModel createRepairModel(ParamData paramData) {
         RepairModel repairModel = new RepairModel();
         repairModel.setId(UUIDUtil.generateId());
         switch (paramData.getRepairDistribType()) {
             case 1:
                 // 鎸囨暟鍒嗗竷
-                repairModel.setType(FailureModel.TYPE_EXP);
+                repairModel.setType(RepairModel.TYPE_EXP);
                 repairModel.setParam1(1.0 / paramData.getRepairMttcr());
                 break;
             case 2:
                 // 濞佸竷灏斿垎甯�
-                repairModel.setType(FailureModel.TYPE_WBL);
+                repairModel.setType(RepairModel.TYPE_WBL);
                 repairModel.setParam2(paramData.getRepairMttcrOtherParams2());
                 repairModel.setParam3(paramData.getRepairMttcrOtherParams3());
-                break;
-            case 3:
-                // 浜岄」鍒嗗竷锛堢淮淇病鏈夛級
                 break;
             default:
                 break;

--
Gitblit v1.9.1