From ecd2f8acec4e743e18d978b7e0a1bb92bd17e70e Mon Sep 17 00:00:00 2001
From: xyc <jc_xiong@hotmail.com>
Date: 星期二, 13 八月 2024 15:38:25 +0800
Subject: [PATCH] 修改仿真后台

---
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java |  130 +++++++++++++++++++++++++++++++++----------
 1 files changed, 100 insertions(+), 30 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 10595e9..ec36a1c 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
@@ -17,7 +17,8 @@
 import com.zt.life.modules.mainPart.taskReliability.dao.SimulatAssessDao;
 import com.zt.life.modules.mainPart.taskReliability.dao.TimeDiagramDao;
 import com.zt.life.modules.mainPart.taskReliability.dto.ProductStatusDto;
-import com.zt.life.modules.mainPart.taskReliability.dto.TaskModelCheckResult;
+import com.zt.life.modules.mainPart.taskReliability.dto.TaskModelCheckResultDto;
+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 org.dom4j.Document;
@@ -675,7 +676,7 @@
     public Result simulate(SimulatAssess simulatAssess) {
         Result result = null;
         // 1. 妫�鏌ユā鍨嬪畬鏁存��
-        List<TaskModelCheckResult> chkResult = taskService.checkTaskModel(simulatAssess.getProductId(),
+        List<TaskModelCheckResultDto> chkResult = taskService.checkTaskModel(simulatAssess.getProductId(),
                 simulatAssess.getTaskModelId());
         if (chkResult.size() > 0) {
             result = Result.error("妯″瀷涓嶅畬鏁达紝璇锋鏌ユā鍨嬪畾涔夊強鍙傛暟閰嶇疆銆�");
@@ -782,7 +783,6 @@
         Long taskId = simulatAssess.getTaskModelId();
         Task task = taskService.get(taskId);
         List<TaskBinoParam> binoParams = taskBinoParamDao.getBinoParams(taskId);
-        List<TaskRepairParam> taskRepairParams = taskRepairParamDao.getTaskRepairParams(taskId);
 
         // 1. 璁$畻鍚勪换鍔¢樁娈电殑杩愯鏃堕暱
         List<TaskPhase> taskPhases = calcTaskPhaseDuration(task);
@@ -801,12 +801,12 @@
             Element root = document.addElement("des");
             root.addAttribute("name", "General system");
             addTasksTag(taskPhaseModelAll, root);
-            addModelsTag(productId,
+            addModelsTag(taskId,
+                    productId,
                     productList,
                     paramDataList,
                     taskPhaseModelAll,
                     binoParams,
-                    taskRepairParams,
                     root,
                     failureModels, repairModels);
             addFailureModelsTag(failureModels, root);
@@ -854,7 +854,8 @@
             satpm.setPhaseName(phase.getPhaseName());
             satpm.setPhaseDurationRate(phase.getPhaseDurationRate());
             satpm.setPhaseDuration(phase.getPhaseDuration());
-            satpm.setPhaseConstraint(null); // TODO
+            satpm.setPhaseConstraint(tpm.getPhaseConstraints().stream().map(item ->
+                    item.getProductId().toString()).collect(Collectors.joining(",")));
             satpm.setGkId(tpm.getOperatConditId());
             satpm.setGkName(tpm.getOperatConditName());
             satpm.setGkDurationRate(tpm.getOperatConditDurationRate());
@@ -871,6 +872,11 @@
             Element taskTag = tasksTag.addElement("task");
             taskTag.addAttribute("duration", String.valueOf(taskPhaseModel.getOperatConditDuration()));
             taskTag.addAttribute("model", taskPhaseModel.getOperatConditId().toString());
+            if (null != taskPhaseModel.getPhaseConstraints() && taskPhaseModel.getPhaseConstraints().size() > 0) {
+                taskTag.addAttribute("NAM",
+                        taskPhaseModel.getPhaseConstraints().stream().map(item ->
+                                item.getProductId().toString()).collect(Collectors.joining(",")));
+            }
         }
     }
 
@@ -902,7 +908,7 @@
                     ele.addAttribute("value", String.valueOf(failureModel.getParam3()));
                     break;
                 case FailureModel.TYPE_FIX:
-                    ele = failureModelTag.addElement("unreliability");
+                    ele = failureModelTag.addElement("reliability");
                     ele.addAttribute("value", String.valueOf(failureModel.getParam1()));
                     break;
                 default:
@@ -945,6 +951,10 @@
             double duration = taskPhase.getPhaseDuration() * taskPhaseModel.getOperatConditDurationRate() / totalRate;
             taskPhaseModel.setOperatConditDuration(duration);
             sum += duration;
+
+            List<TaskPhaseConstraintDto> taskRepairConstraints = taskRepairParamDao.getTaskRepairConstraints(taskPhase.getTaskId(),
+                    taskPhaseModel.getPhaseId(), taskPhaseModel.getOperatConditId());
+            taskPhaseModel.setPhaseConstraints(taskRepairConstraints);
             taskPhaseModelAll.add(taskPhaseModel);
         }
         // 鎶婇浂澶磋ˉ鍒版渶鍚庝竴涓伐鍐垫ā鍨�
@@ -968,12 +978,12 @@
         return taskPhases;
     }
 
-    private void addModelsTag(Long productId,
+    private void addModelsTag(Long taskId,
+                              Long productId,
                               List<XhProductModel> productList,
                               List<ParamData> paramDataList,
                               List<TaskPhaseModel> taskPhaseModelAll,
                               List<TaskBinoParam> binoParams,
-                              List<TaskRepairParam> taskRepairParams,
                               Element root,
                               List<FailureModel> failureModels,
                               List<RepairModel> repairModels) {
@@ -992,28 +1002,32 @@
                     "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(productId,
+            node2DOM(taskId,
+                    taskPhaseModel,
+                    gkModelTop.getModelId(),
+                    productId,
                     productList,
                     paramDataList,
                     gkModelsAssembled,
                     algorithmList,
                     modelNodeAndVnodeList,
                     binoParams,
-                    taskRepairParams,
                     computerNode, modelTag,
                     failureModels, repairModels);
         }
     }
 
     // 閫掑綊鍑芥暟
-    private void node2DOM(Long productId,
+    private void node2DOM(Long taskId,
+                          TaskPhaseModel taskPhaseModel,
+                          Long modelId,
+                          Long productId,
                           List<XhProductModel> productList,
                           List<ParamData> paramDataList,
                           List<OperatConditModel> gkModelsAssembled,
                           List<Algorithm> algorithmList,
                           List<ModelNode> modelNodeAndVnodeList,
                           List<TaskBinoParam> binoParams,
-                          List<TaskRepairParam> taskRepairParams,
                           ModelNode node,
                           Element parent,
                           List<FailureModel> failureModels,
@@ -1032,37 +1046,53 @@
                         "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(product.getId(),
+                node2DOM(taskId,
+                        taskPhaseModel,
+                        gkModel.getModelId(),
+                        product.getId(),
                         productList,
                         paramDataList,
                         gkModelsAssembled,
                         algorithmListSub,
                         modelNodeAndVnodeListSub,
                         binoParams,
-                        taskRepairParams,
                         computerNode, parent,
                         failureModels, repairModels);
             } else if ("5".equals(product.getProductType())) {
                 // 璁惧
-                ParamData paramData = paramDataList.stream().filter(item ->
-                        dataId.equals(item.getProductId())).collect(Collectors.toList()).get(0);
                 Element nodeTag = parent.addElement("node");
                 nodeTag.addAttribute("name", dataId.toString());
                 nodeTag.addAttribute("type", "node");
 
-                FailureModel failureModel = new FailureModel();
-                failureModel.setId(UUIDUtil.generateId());
-                failureModel.setType(FailureModel.TYPE_EXP);
-                failureModel.setParam1(1.0 / paramData.getTaskMtbcfRegulate());
+                ParamData paramData = paramDataList.stream().filter(item ->
+                        dataId.equals(item.getProductId())).collect(Collectors.toList()).get(0);
+                Double ratio = paramData.getTaskMtbcfOperatingRatio();
+                if (null != ratio && ratio > 0) {
+                    // 闂存柇鍨嬭澶囩殑澶勭悊
+                    double cycon = taskPhaseModel.getOperatConditDuration() * ratio;
+                    double cycdown = taskPhaseModel.getOperatConditDuration() - cycon;
+                    nodeTag.addAttribute("cycon", String.valueOf(cycon));
+                    nodeTag.addAttribute("cycdown", String.valueOf(cycdown));
+                }
+                TaskBinoParam taskBinoParam = null;
+                if (3 == paramData.getReliabDistribType()) {
+                    // 浜岄」鍒嗗竷澶勭悊
+                    taskBinoParam = binoParams.stream()
+                            .filter(item -> taskId.equals(item.getTaskId()))
+                            .filter(item -> taskPhaseModel.getPhaseId().equals(item.getPhaseId()))
+                            .filter(item -> taskPhaseModel.getOperatConditId().equals(item.getOperatConditId()))
+                            .filter(item -> modelId.equals(item.getModelId()))
+                            .filter(item -> dataId.equals(item.getProductId()))
+                            .collect(Collectors.toList()).get(0);
+                }
+                FailureModel failureModel = createFailureModel(paramData, taskBinoParam);
                 failureModels.add(failureModel);
-
                 Element failureTag = nodeTag.addElement("failure_model");
                 failureTag.addAttribute("name", failureModel.getId().toString());
+
                 if (1 == paramData.getRepairable()) {
-                    RepairModel repairModel = new RepairModel();
-                    repairModel.setId(UUIDUtil.generateId());
-                    repairModel.setType(RepairModel.TYPE_EXP);
-                    repairModel.setParam1(1.0 / paramData.getRepairMttcr());
+                    // 鍙淮淇�
+                    RepairModel repairModel = createRepairModel(paramData);
                     repairModels.add(repairModel);
                     Element repairTag = nodeTag.addElement("repair_model");
                     repairTag.addAttribute("name", repairModel.getId().toString());
@@ -1094,35 +1124,50 @@
             for (String nodeStr : computerNodeListStr) {
                 ModelNode mn = modelNodeAndVnodeList.stream().filter(item ->
                         nodeStr.equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                node2DOM(null,
+                node2DOM(taskId,
+                        taskPhaseModel,
+                        modelId,
+                        null,
                         productList,
                         paramDataList,
                         gkModelsAssembled,
                         algorithmList,
                         modelNodeAndVnodeList,
                         binoParams,
-                        taskRepairParams,
                         mn, element,
                         failureModels, repairModels);
             }
         }
     }
 
-    private FailureModel createFailureModel(ParamData paramData) {
+    private FailureModel createFailureModel(ParamData paramData, TaskBinoParam taskBinoParam) {
         FailureModel failureModel = new FailureModel();
         failureModel.setId(UUIDUtil.generateId());
         switch (paramData.getReliabDistribType()) {
             case 1:
+                // 鎸囨暟鍒嗗竷
                 failureModel.setType(FailureModel.TYPE_EXP);
                 failureModel.setParam1(1.0 / paramData.getTaskMtbcfRegulate());
                 break;
             case 2:
+                // 濞佸竷灏斿垎甯�
                 failureModel.setType(FailureModel.TYPE_WBL);
                 failureModel.setParam2(paramData.getTaskMtbcfOtherParams2());
                 failureModel.setParam3(paramData.getTaskMtbcfOtherParams3());
                 break;
             case 3:
-                failureModel.setType(FailureModel.TYPE_BIN);
+                // 浜岄」鍒嗗竷
+                if (taskBinoParam.getSimulatTimes().intValue() == taskBinoParam.getSuccessTimes().intValue()) {
+                    // 鐩哥瓑鍒欎负鎴愯触鍨�
+                    failureModel.setType(FailureModel.TYPE_FIX);
+                    failureModel.setParam1(taskBinoParam.getSuccessRate());
+                } else {
+                    // 浜岄」鍒嗗竷
+                    failureModel.setType(FailureModel.TYPE_BIN);
+                    failureModel.setParam1(taskBinoParam.getSuccessRate());
+                    failureModel.setParam2(taskBinoParam.getSimulatTimes());
+                    failureModel.setParam3(taskBinoParam.getSuccessTimes());
+                }
                 break;
             default:
                 break;
@@ -1130,4 +1175,29 @@
 
         return failureModel;
     }
+
+    private RepairModel createRepairModel(ParamData paramData) {
+        RepairModel repairModel = new RepairModel();
+        repairModel.setId(UUIDUtil.generateId());
+        switch (paramData.getRepairDistribType()) {
+            case 1:
+                // 鎸囨暟鍒嗗竷
+                repairModel.setType(FailureModel.TYPE_EXP);
+                repairModel.setParam1(1.0 / paramData.getRepairMttcr());
+                break;
+            case 2:
+                // 濞佸竷灏斿垎甯�
+                repairModel.setType(FailureModel.TYPE_WBL);
+                repairModel.setParam2(paramData.getRepairMttcrOtherParams2());
+                repairModel.setParam3(paramData.getRepairMttcrOtherParams3());
+                break;
+            case 3:
+                // 浜岄」鍒嗗竷锛堢淮淇病鏈夛級
+                break;
+            default:
+                break;
+        }
+
+        return repairModel;
+    }
 }

--
Gitblit v1.9.1