From 4df461673ff8b350df032429c07bc973a3b83c7f Mon Sep 17 00:00:00 2001
From: xyc <jc_xiong@hotmail.com>
Date: 星期五, 02 八月 2024 09:58:35 +0800
Subject: [PATCH] 修改仿真后台

---
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/async/PythonLib.java                                    |    9 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/TaskPhase.java                    |    4 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/TaskService.java                |    8 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/TaskController.java          |    5 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskPhaseModelDao.java              |    2 
 modules/mainPart/src/main/resources/mapper/taskReliability/OperatConditModelDao.xml                                 |   12 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/TaskPhaseModel.java               |    4 
 modules/mainPart/src/main/resources/mapper/taskReliability/TaskPhaseDao.xml                                         |    9 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java       |  459 ++++++++++++++++++++++++++++++++++++++
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskPhaseDao.java                   |    1 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/SimulatAssessTaskPhaseModel.java  |    6 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/OperatConditModelDao.java           |    1 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ReliaSimLibResult.java            |    2 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/RepairModel.java                  |   27 ++
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java           |  128 ----------
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/SimulatAssessController.java |    3 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/FailureModel.java                 |   27 ++
 modules/mainPart/src/main/resources/mapper/taskReliability/TaskPhaseModelDao.xml                                    |    8 
 18 files changed, 567 insertions(+), 148 deletions(-)

diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/async/PythonLib.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/async/PythonLib.java
index 8562456..43d6bdb 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/async/PythonLib.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/async/PythonLib.java
@@ -2,14 +2,13 @@
 
 import com.alibaba.fastjson.JSONObject;
 import com.zt.common.servlet.Result;
-import com.zt.life.modules.mainPart.taskReliability.model.PythonResult;
+import com.zt.life.modules.mainPart.taskReliability.model.ReliaSimLibResult;
 import com.zt.life.modules.mainPart.taskReliability.model.SimulatAssess;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
 import java.io.BufferedReader;
@@ -66,7 +65,7 @@
 //            if (exitCode == 0) {
                 logger.info("鍚姩python璁$畻鎴愬姛");
                 if (line != null) {
-                    PythonResult rtn = JSONObject.parseObject(line, PythonResult.class);
+                    ReliaSimLibResult rtn = JSONObject.parseObject(line, ReliaSimLibResult.class);
                     if ("0".equals(rtn.getCode())) {
                         result = Result.ok();
                     } else {
@@ -115,7 +114,6 @@
     private void setParamToRedis(SimulatAssess simulatAssess) {
         String key = simulatAssess.getId().toString() + taskType;
         logger.info("redis key锛�" + key);
-/*
         String xmlfile = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                 "<des name=\"General system\">\n" +
                 "    <tasks>\n" +
@@ -244,7 +242,7 @@
                 "        </repair_model>\n" +
                 "    </repair_models>\n" +
                 "</des>";
-*/
+/*
         String xmlfile = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                 "<des name=\"General system\">\n" +
                 "    <tasks>\n" +
@@ -345,6 +343,7 @@
                 "        </repair_model>\n" +
                 "    </repair_models>\n" +
                 "</des>";
+*/
         JSONObject jsonObject = new JSONObject();
 /*
         Long simulate_times = 10000L;
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/SimulatAssessController.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/SimulatAssessController.java
index 0932a48..992308e 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/SimulatAssessController.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/SimulatAssessController.java
@@ -113,7 +113,8 @@
     @PostMapping("analyze")
     public Result<Long> analyze(@RequestBody SimulatAssess simulatAssess) {
         //鏁堥獙鏁版嵁
-        Result result = pythonLib.callPython(simulatAssess);
+//        Result result = pythonLib.callPython(simulatAssess);
+        Result result = simulatAssessService.simulate(simulatAssess);
 
         return result;
     }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/TaskController.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/TaskController.java
index 183d77c..ed86acf 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/TaskController.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/TaskController.java
@@ -66,8 +66,9 @@
     @GetMapping("checkTaskModel")
     @ApiOperation("浠诲姟妯″瀷瀹屾暣鎬ф鏌�")
     public Result<List<TaskModelCheckResult>> checkTaskModel(Long productId){
-        List<TaskModelCheckResult> checkResult = taskService.checkTaskModel(productId);
-        return Result.ok(checkResult);
+//        List<TaskModelCheckResult> checkResult = taskService.checkTaskModel(productId);
+//        return Result.ok(checkResult);
+        return Result.ok();
     }
 
     @PostMapping
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/OperatConditModelDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/OperatConditModelDao.java
index 9e9d362..75a0b8c 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/OperatConditModelDao.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/OperatConditModelDao.java
@@ -30,4 +30,5 @@
     void deleteByOperatConditId(Long operatConditId);
 
     List<OperatConditModel> getGKModelTrees(Long productId);
+    List<OperatConditModel> getGKModelAssembled(Long gkId);
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskPhaseDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskPhaseDao.java
index 1ae594b..fdcba0c 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskPhaseDao.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskPhaseDao.java
@@ -23,4 +23,5 @@
     Integer getMaxSort(Long taskId);
 
     List<Long> getPhaseByTask(Long taskId);
+    List<TaskPhase> getListByTaskId(Long taskId);
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskPhaseModelDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskPhaseModelDao.java
index 7c74423..d05a613 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskPhaseModelDao.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskPhaseModelDao.java
@@ -1,6 +1,7 @@
 package com.zt.life.modules.mainPart.taskReliability.dao;
 
 import com.zt.common.dao.BaseDao;
+import com.zt.life.modules.mainPart.taskReliability.model.TaskPhase;
 import com.zt.life.modules.mainPart.taskReliability.model.TaskPhaseModel;
 import org.apache.ibatis.annotations.Mapper;
 
@@ -20,4 +21,5 @@
 
     List<TaskPhaseModel> getList(Map<String, Object> params);
 
+    List<TaskPhaseModel> getListByPhaseId(Long phaseId);
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/FailureModel.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/FailureModel.java
new file mode 100644
index 0000000..83a3553
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/FailureModel.java
@@ -0,0 +1,27 @@
+package com.zt.life.modules.mainPart.taskReliability.model;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class FailureModel {
+    public static final String TYPE_EXP = "exponential";
+    public static final String TYPE_BIN = "binomial";
+    public static final String TYPE_WBL = "weibull";
+    public static final String TYPE_FIX = "fixed";
+
+    @ApiModelProperty(value = "ID")
+    private Long id;
+
+    @ApiModelProperty(value = "type")
+    private String type;
+
+    @ApiModelProperty(value = "鍙傛暟1")
+    private double param1;
+
+    @ApiModelProperty(value = "鍙傛暟2")
+    private double param2;
+
+    @ApiModelProperty(value = "鍙傛暟3")
+    private double param3;
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/PythonResult.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ReliaSimLibResult.java
similarity index 89%
rename from modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/PythonResult.java
rename to modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ReliaSimLibResult.java
index 1f7685f..bf6399b 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/PythonResult.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ReliaSimLibResult.java
@@ -4,7 +4,7 @@
 import lombok.Data;
 
 @Data
-public class PythonResult {
+public class ReliaSimLibResult {
     @ApiModelProperty(value = "code")
     private String code;
 
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/RepairModel.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/RepairModel.java
new file mode 100644
index 0000000..17e3026
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/RepairModel.java
@@ -0,0 +1,27 @@
+package com.zt.life.modules.mainPart.taskReliability.model;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class RepairModel {
+    public static final String TYPE_EXP = "exponential";
+    public static final String TYPE_BIN = "binomial";
+    public static final String TYPE_WBL = "weibull";
+    public static final String TYPE_FIX = "fixed";
+
+    @ApiModelProperty(value = "ID")
+    private Long id;
+
+    @ApiModelProperty(value = "type")
+    private String type;
+
+    @ApiModelProperty(value = "鍙傛暟1")
+    private double param1;
+
+    @ApiModelProperty(value = "鍙傛暟2")
+    private double param2;
+
+    @ApiModelProperty(value = "鍙傛暟3")
+    private double param3;
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/SimulatAssessTaskPhaseModel.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/SimulatAssessTaskPhaseModel.java
index 055353a..707c092 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/SimulatAssessTaskPhaseModel.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/SimulatAssessTaskPhaseModel.java
@@ -45,6 +45,9 @@
 	@ApiModelProperty(value = "闃舵鏃堕暱")
 	private Double phaseDuration;
 
+	@ApiModelProperty(value = "闃舵绾︽潫锛堜笉鍙淮淇澶囩被鍨嬪垪琛紝鐢ㄩ�楀彿闅斿紑锛�")
+	private String phaseConstraint;
+
 	@ApiModelProperty(value = "宸ュ喌妯″瀷ID")
 	private Long gkId;
 
@@ -57,6 +60,9 @@
 	@ApiModelProperty(value = "宸ュ喌妯″瀷鏃堕暱")
 	private Double gkDuration;
 
+	@ApiModelProperty(value = "宸ュ喌妯″瀷鎺掑簭")
+	private Integer sort;
+
 	@ApiModelProperty(value = "澶囨敞")
 	private String remark;
 
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/TaskPhase.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/TaskPhase.java
index f9246d5..33523e2 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/TaskPhase.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/TaskPhase.java
@@ -46,4 +46,8 @@
 
 	@TableField(exist = false)
 	private Double operatConditDuration;
+
+	@ApiModelProperty(value = "闃舵鏃堕暱")
+	@TableField(exist = false)
+	private Double phaseDuration;
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/TaskPhaseModel.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/TaskPhaseModel.java
index defaef1..29f5673 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/TaskPhaseModel.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/TaskPhaseModel.java
@@ -48,5 +48,9 @@
 	@TableField(exist = false)
 	private String isCheck;
 
+	@ApiModelProperty(value = "宸ュ喌杩愯鏃堕暱")
+	@TableField(exist = false)
+	private double operatConditDuration;
+
 
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java
index 8c2af11..9836118 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ModelLineService.java
@@ -189,134 +189,6 @@
         modelLineList.addAll(linesToAdd);
     }
 
-    private boolean createIfXmlFromRbd(ModelRbd modelRbd,
-                                       List<Algorithm> algorithmList,
-                                       List<ModelNode> modelNodeAndVnodeList) {
-        boolean result = true;
-
-        try {
-            Document document = DocumentHelper.createDocument();
-            // 娣诲姞root鑺傜偣
-            Element root = document.addElement("DES");
-            root.addAttribute("Name", "A System");
-            // 娣诲姞terminal鑺傜偣鍒皉oot1
-            Element terminal = root.addElement("Node");
-            terminal.addAttribute("Name", "Terminal");
-            terminal.addAttribute("Type", "NODE");
-
-            // 灏嗘ā鍨嬭浆鎹负DOM锛屾坊鍔犲埌root
-            Algorithm endAlgo = algorithmList.stream().filter(item ->
-                    "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(algorithmList, modelNodeAndVnodeList, computerNode, root);
-
-            // 娣诲姞start鑺傜偣鍒皉oot
-            Element start = root.addElement("Node");
-            start.addAttribute("Name", "Start");
-            start.addAttribute("Type", "NODE");
-            // 娣诲姞link锛堣矾寰勶級鍒皉oot
-            Element link = root.addElement("Link");
-            Element block = link.addElement("Block");
-            block.addAttribute("Name", "Terminal");
-            block = link.addElement("Block");
-            block.addAttribute("Name", computerNode.getId().toString());
-            block = link.addElement("Block");
-            block.addAttribute("Name", "Start");
-
-//            document.setXMLEncoding("UTF-8");
-//            String xmlString = document.asXML();
-            // 杈撳嚭鏍煎紡鍖杧ml
-            XMLWriter xmlWriter = null;
-            try {
-                OutputFormat format = OutputFormat.createPrettyPrint();
-                format.setEncoding("UTF-8");
-                StringWriter writer = new StringWriter();
-                xmlWriter = new XMLWriter(writer, format);
-                xmlWriter.write(document);
-                modelRbd.setPublishedXml(writer.toString());
-            } finally {
-                if (xmlWriter!=null) xmlWriter.close();
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            result = false;
-        }
-
-        return result;
-    }
-
-    // 閫掑綊鍑芥暟
-    private void node2DOM(List<Algorithm> algorithmList,
-                          List<ModelNode> modelNodeAndVnodeList,
-                          ModelNode node,
-                          Element parent) {
-        if ("node".equals(node.getNodeType())) {
-            Long dataId = node.getDataId();
-            XhProductModel xhProductModel = xhProductModelDao.getById(dataId);
-            if (xhProductModel == null) return;
-            if ("5".equals(xhProductModel.getProductType())) {
-                // 璁惧
-                ParamData paramData = paramDataDao.getParamData(dataId, "expect");
-                if (paramData == null) return;
-                Element element = parent.addElement("Node");
-                element.addAttribute("Name", dataId.toString());
-                element.addAttribute("Type", "NODE");
-                Element failureTag = element.addElement("Failure");
-                failureTag.addAttribute("Dist", "EXP"); // TODO:闇�璁句负鍏蜂綋鐨勫垎甯�
-                Element argsTag = failureTag.addElement("Args");
-                Double value = new Double(paramData.getTaskMtbcfRegulate());
-                value = 1.0/value;
-                argsTag.addAttribute("value", value.toString());
-                if (1==paramData.getRepairable()) {
-                    Element repairTag = element.addElement("Repair");
-                    repairTag.addAttribute("Dist", "EXP"); // TODO:闇�璁句负鍏蜂綋鐨勫垎甯�
-                    argsTag = repairTag.addElement("Args");
-                    value = new Double(paramData.getRepairMttcr());
-                    value = 1.0/value;
-                    argsTag.addAttribute("value", value.toString());
-                    Element repairTimeLimitTag = element.addElement("RepairTimeLimit");
-                    repairTimeLimitTag.setText(String.valueOf(paramData.getRepairMttcr()));
-                }
-            } else if ("10".equals(xhProductModel.getProductType())) {
-                // 铏氬崟浣�
-                ModelRbd rbdXDY = modelRbdDao.getDiagramOfXDY(dataId);
-                if (rbdXDY == null) return;
-                List<Algorithm> algorithmListXDY = algorithmDao.getListByModelId(rbdXDY.getId());
-                List<ModelNode> modelNodeAndVnodeListXDY =modelNodeAlgorithmDao.getListByModelId(rbdXDY.getId());
-                Algorithm endAlgo = algorithmListXDY.stream().filter(item ->
-                        "end".equals(item.getAlgorithmType())).collect(Collectors.toList()).get(0);
-                ModelNode computerNode = modelNodeAndVnodeListXDY.stream().filter(item ->
-                        endAlgo.getComputerList().equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                node2DOM(algorithmListXDY, modelNodeAndVnodeListXDY, computerNode, parent);
-            }
-        } else {
-            // vnode锛堣繍绠楄妭鐐癸級
-            Algorithm algo = algorithmList.stream().filter(item ->
-                    node.getId().equals(item.getId())).collect(Collectors.toList()).get(0);
-            Element element = parent.addElement("Logic");
-            element.addAttribute("Name", algo.getId().toString());
-            if ("series".equals(algo.getAlgorithmType())) {
-                element.addAttribute("Type", "SERIES");
-            } else if ("parallel".equals(algo.getAlgorithmType())) {
-                element.addAttribute("Type", "PARALLEL");
-            } else if ("vote".equals(algo.getAlgorithmType())) {
-                element.addAttribute("Type", "VOTE");
-                element.addAttribute("VoteValue", algo.getVoteNum().toString());
-            } else if ("switch".equals(algo.getAlgorithmType())) {
-                element.addAttribute("Type", "STANDBY");
-            } else if ("bridge".equals(algo.getAlgorithmType())) {
-                element.addAttribute("Type", "BRIDGE");
-            }
-            String[] computerNodeListStr = algo.getComputerList().split(",");
-            for (String nodeStr : computerNodeListStr) {
-                ModelNode nd = modelNodeAndVnodeList.stream().filter(item ->
-                        nodeStr.equals(item.getId().toString())).collect(Collectors.toList()).get(0);
-                node2DOM(algorithmList, modelNodeAndVnodeList, nd, element);
-            }
-        }
-    }
-
     private boolean getAlgorithmFromRbd(ModelRbd modelRbd,
                                         List<ModelNode> modelNodeList,
                                         List<ModelLine> modelLineList,
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 a5c5b9d..9709216 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
@@ -1,13 +1,37 @@
 package com.zt.life.modules.mainPart.taskReliability.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.zt.common.service.BaseService;
-import com.zt.life.modules.mainPart.taskReliability.dao.SimulatAssessDao;
+import com.zt.common.servlet.Result;
+import com.zt.common.utils.UUIDUtil;
+import com.zt.life.modules.mainPart.basicInfo.dao.ParamDataDao;
+import com.zt.life.modules.mainPart.basicInfo.dao.XhProductModelDao;
+import com.zt.life.modules.mainPart.basicInfo.model.ParamData;
+import com.zt.life.modules.mainPart.basicInfo.model.XhProductModel;
+import com.zt.life.modules.mainPart.taskReliability.dao.*;
 import com.zt.life.modules.mainPart.taskReliability.dto.ProductStatusDto;
-import com.zt.life.modules.mainPart.taskReliability.model.SimulatAssess;
+import com.zt.life.modules.mainPart.taskReliability.dto.TaskModelCheckResult;
+import com.zt.life.modules.mainPart.taskReliability.model.*;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.io.OutputFormat;
+import org.dom4j.io.XMLWriter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.StringWriter;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 /**
@@ -17,9 +41,41 @@
  * @since 1.0.0 2024-03-20
  */
 @Service
-public class SimulatAssessService extends BaseService<SimulatAssessDao, SimulatAssess> {
+public class SimulatAssessService  extends BaseService<SimulatAssessDao, SimulatAssess> {
+    private static final Logger logger = LoggerFactory.getLogger(SimulatAssessService.class);
+    private static final String RELIA_SIM_TASK_TYPE_SIMULATION = "calcreq";
+
+    @Value("${spring.redis.host}")
+    private String redisHost;
+    @Value("${spring.redis.port}")
+    private String redisPort;
+    @Value("${data.reliaSimLib.mainPy}")
+    private String reliaSimMain;
+    @Value("${data.reliaSimLib.resultHome}")
+    private String resultHome;
+
+    @Autowired
+    private RedisTemplate redisTemplate;
+    @Autowired
+    private TaskService taskService;
     @Autowired
     private TaskPhaseService taskPhaseService;
+    @Autowired
+    private SimulatAssessTaskPhaseModelService simulatAssessTaskPhaseModelService;
+    @Autowired
+    private TaskPhaseDao taskPhaseDao;
+    @Autowired
+    private TaskPhaseModelDao taskPhaseModelDao;
+    @Autowired
+    private OperatConditModelDao operatConditModelDao;
+    @Autowired
+    private ModelNodeAlgorithmDao modelNodeAlgorithmDao;
+    @Autowired
+    private AlgorithmDao algorithmDao;
+    @Autowired
+    private XhProductModelDao xhProductModelDao;
+    @Autowired
+    private ParamDataDao paramDataDao;
 
     /**
      * 鍒嗛〉鏌ヨ
@@ -55,4 +111,401 @@
     public List<ProductStatusDto> getChildren(Long productId, Long taskId) {
         return baseDao.getChildren(productId, taskId);
     }
+
+    @Transactional(rollbackFor = Exception.class)
+    public Result simulate(SimulatAssess simulatAssess) {
+        Result result = null;
+        // 1. 妫�鏌ユā鍨嬪畬鏁存��
+        List<TaskModelCheckResult> chkResult = taskService.checkTaskModel(simulatAssess.getProductId(),
+                simulatAssess.getTaskModelId());
+        if (chkResult.size() > 0) {
+            result = Result.error("妯″瀷涓嶅畬鏁达紝璇锋鏌ユā鍨嬪畾涔夊強鍙傛暟閰嶇疆銆�");
+            return result;
+        }
+
+        // 2. 缁勮渚涚畻娉曞簱浠跨湡鐨勬ā鍨媥ml
+        assembleModelXml(simulatAssess);
+
+        // 3. 璋冪敤绠楁硶搴擄紝杩涜浠跨湡璁$畻
+        result = callReliaSimLib(simulatAssess);
+
+        return result;
+    }
+
+    private Result callReliaSimLib(SimulatAssess simulatAssess) {
+        Result result = null;
+        InputStream is = null;
+        BufferedReader br = null;
+        try {
+            setParamToRedis(simulatAssess);
+
+            Process process = null;
+            String command = "python " + reliaSimMain;
+            command += " -ip " + redisHost + " -port " + redisPort;
+            command += " -taskType " + RELIA_SIM_TASK_TYPE_SIMULATION + " -taskId " + simulatAssess.getId().toString();
+            logger.info("cmd鍛戒护涓猴細" + command);
+            if(System.getProperty("os.name").toLowerCase().indexOf("windows") > -1){
+                process = Runtime.getRuntime().exec(new String[]{"cmd", "/c", command});
+            }else if(System.getProperty("os.name").toLowerCase().indexOf("linux") > -1){
+                process = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", command});
+            }else{
+                throw new Exception("鏆備笉鏀寔璇ユ搷浣滅郴缁燂紝杩涜鍚姩绠楁硶搴撹绠楋紒");
+            }
+            is = process.getInputStream();
+            // 浠ュ懡浠よ鏂瑰紡璋冪敤绠楁硶搴撴椂锛屾帴鍙g害瀹氳繑鍥炵殑缁撴灉鏄痷tf-8缂栫爜
+            br = new BufferedReader(new InputStreamReader(is,"utf-8"));
+            String line = br.readLine();
+            logger.info("绠楁硶搴撹繑鍥炵粨鏋滐細" + line);
+//            int exitCode = process.waitFor(); // 寮傛鏂瑰紡锛屼笉绛夊緟绠楁硶搴撹绠楀畬姣曪紝鎵�浠ヨ娉ㄩ噴鎺夎琛�
+            if (line != null) {
+                ReliaSimLibResult rtn = JSONObject.parseObject(line, ReliaSimLibResult.class);
+                if ("0".equals(rtn.getCode())) {
+                    logger.info("鍚姩绠楁硶搴撴垚鍔熴��");
+                    result = Result.ok();
+                } else {
+                    String errorMsg = rtn.getErrorMsg();
+                    throw new RuntimeException("鍚姩绠楁硶搴撳け璐�: errorMsg=" + errorMsg);
+                }
+            }
+        } catch (Exception e) {
+            logger.error("鍚姩绠楁硶搴撲豢鐪熸椂鍙戠敓Exception锛�", e);
+            e.printStackTrace();
+            result = Result.error(e.getMessage());
+        } finally {
+            if (is != null) {
+                try {
+                    is.close();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+            if (br != null) {
+                try {
+                    br.close();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+
+        return result;
+    }
+
+    private void setParamToRedis(SimulatAssess simulatAssess) {
+        String key = simulatAssess.getId().toString() + RELIA_SIM_TASK_TYPE_SIMULATION;
+        logger.info("redis key锛�" + key);
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("xmlfile", simulatAssess.getXml());
+        // 浠跨湡娆℃暟
+        jsonObject.put("simulate_times", simulatAssess.getSimulatFrequency());
+        // 閲囨牱鍛ㄦ湡
+        jsonObject.put("timeslice", simulatAssess.getSamplPeriod()/60.0);   // 鍗曚綅缁熶竴鎹㈢畻涓哄皬鏃�
+        jsonObject.put("result_home", resultHome);
+        jsonObject.put("seed", 1000);
+        redisTemplate.opsForValue().set(key, jsonObject.toJSONString());
+    }
+
+    private void assembleModelXml(SimulatAssess simulatAssess) {
+        Long productId = simulatAssess.getProductId();
+        List<XhProductModel> productList = xhProductModelDao.getByShipId(productId);
+        List<ParamData> paramDataList = paramDataDao.getDeviceParams(productId);
+        Long taskId = simulatAssess.getTaskModelId();
+        Task task = taskService.get(taskId);
+        // 1. 璁$畻鍚勪换鍔¢樁娈电殑杩愯鏃堕暱
+        List<TaskPhase> taskPhases = calcTaskPhaseDuration(task);
+        // 2. 璁$畻鍚勫伐鍐垫ā鍨嬬殑杩愯鏃堕暱
+        List<TaskPhaseModel> taskPhaseModelAll = new ArrayList<>();
+        for (TaskPhase taskPhase : taskPhases) {
+            calcTaskPhaseModelDuration(taskPhase, taskPhaseModelAll);
+        }
+        // 3. 灏嗗悇宸ュ喌妯″瀷閫掑綊鎷嗚В涓哄畬鏁寸殑鍙緵绠楁硶鍖呬豢鐪熻绠楃殑妯″瀷
+        try {
+            List<FailureModel> failureModels = new ArrayList<>();
+            List<RepairModel> repairModels = new ArrayList<>();
+
+            Document document = DocumentHelper.createDocument();
+            // 娣诲姞root鑺傜偣
+            Element root = document.addElement("des");
+            root.addAttribute("name", "General system");
+            addTasksTag(taskPhaseModelAll, root);
+            addModelsTag(productId,
+                    productList,
+                    paramDataList,
+                    taskPhaseModelAll,
+                    root,
+                    failureModels, repairModels);
+            addFailureModelsTag(failureModels, root);
+            addRepairModelsTag(repairModels, root);
+            saveSimulatAssessTaskPhaseModel(simulatAssess,
+                    task,
+                    taskPhases,
+                    taskPhaseModelAll);
+
+            // 杈撳嚭鏍煎紡鍖杧ml
+            XMLWriter xmlWriter = null;
+            try {
+                OutputFormat format = OutputFormat.createPrettyPrint();
+                format.setEncoding("UTF-8");
+                StringWriter writer = new StringWriter();
+                xmlWriter = new XMLWriter(writer, format);
+                xmlWriter.write(document);
+                simulatAssess.setXml(writer.toString());
+            } finally {
+                if (xmlWriter != null) xmlWriter.close();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("缁勮绠楁硶搴撲豢鐪熻绠楃敤妯″瀷XML澶辫触: " + e.getMessage());
+        }
+    }
+
+    private void saveSimulatAssessTaskPhaseModel(SimulatAssess simulatAssess,
+                                                 Task task,
+                                                 List<TaskPhase> taskPhases,
+                                                 List<TaskPhaseModel> taskPhaseModelAll) {
+        int sort = 1;
+        for (TaskPhaseModel tpm : taskPhaseModelAll) {
+            TaskPhase phase = taskPhases.stream().filter(item ->
+                    tpm.getPhaseId().equals(item.getId())).collect(Collectors.toList()).get(0);
+            SimulatAssessTaskPhaseModel satpm = new SimulatAssessTaskPhaseModel();
+            satpm.setId(UUIDUtil.generateId());
+            satpm.setFzId(simulatAssess.getId());
+            satpm.setTaskId(task.getId());
+            satpm.setTaskName(task.getTaskName());
+            satpm.setTaskDuration(task.getTaskDuration());
+            satpm.setPhaseId(tpm.getPhaseId());
+            satpm.setPhaseName(phase.getPhaseName());
+            satpm.setPhaseDurationRate(phase.getPhaseDurationRate());
+            satpm.setPhaseDuration(phase.getPhaseDuration());
+            satpm.setPhaseConstraint(null); // TODO
+            satpm.setGkId(tpm.getOperatConditId());
+            satpm.setGkName(tpm.getOperatConditName());
+            satpm.setGkDurationRate(tpm.getOperatConditDurationRate());
+            satpm.setGkDuration(tpm.getOperatConditDuration());
+            satpm.setSort(sort++);
+            simulatAssessTaskPhaseModelService.insert(satpm);
+        }
+    }
+
+    private void addTasksTag(List<TaskPhaseModel> taskPhaseModelAll,
+                             Element root) {
+        Element tasksTag = root.addElement("tasks");
+        for (TaskPhaseModel taskPhaseModel : taskPhaseModelAll) {
+            Element taskTag = tasksTag.addElement("task");
+            taskTag.addAttribute("duration", String.valueOf(taskPhaseModel.getOperatConditDuration()));
+            taskTag.addAttribute("model", taskPhaseModel.getOperatConditId().toString());
+        }
+    }
+
+    private void addFailureModelsTag(List<FailureModel> failureModels,
+                                     Element root) {
+        Element ele = null;
+        Element failureModelsTag = root.addElement("failure_models");
+        for (FailureModel failureModel : failureModels) {
+            Element failureModelTag = failureModelsTag.addElement("failure_model");
+            failureModelTag.addAttribute("name", failureModel.getId().toString());
+            failureModelTag.addAttribute("type", failureModel.getType());
+            switch (failureModel.getType()) {
+                case FailureModel.TYPE_EXP:
+                    ele = failureModelTag.addElement("failure-rate");
+                    ele.addAttribute("value", String.valueOf(failureModel.getParam1()));
+                    break;
+                case FailureModel.TYPE_BIN:
+                    ele = failureModelTag.addElement("reliability");
+                    ele.addAttribute("value", String.valueOf(failureModel.getParam1()));
+                    ele = failureModelTag.addElement("n");
+                    ele.addAttribute("value", String.valueOf(failureModel.getParam2()));
+                    ele = failureModelTag.addElement("k");
+                    ele.addAttribute("value", String.valueOf(failureModel.getParam3()));
+                    break;
+                case FailureModel.TYPE_WBL:
+                    ele = failureModelTag.addElement("scale");
+                    ele.addAttribute("value", String.valueOf(failureModel.getParam2()));
+                    ele = failureModelTag.addElement("shape");
+                    ele.addAttribute("value", String.valueOf(failureModel.getParam3()));
+                    break;
+                case FailureModel.TYPE_FIX:
+                    ele = failureModelTag.addElement("unreliability");
+                    ele.addAttribute("value", String.valueOf(failureModel.getParam1()));
+                    break;
+                default:
+                    break;
+            }
+        }
+    }
+
+    private void addRepairModelsTag(List<RepairModel> repairModels,
+                                     Element root) {
+        Element ele = null;
+        Element repairModelsTag = root.addElement("repair_models");
+        for (RepairModel repairModel : repairModels) {
+            Element repairModelTag = repairModelsTag.addElement("repair_model");
+            repairModelTag.addAttribute("name", repairModel.getId().toString());
+            repairModelTag.addAttribute("type", repairModel.getType());
+            switch (repairModel.getType()) {
+                case RepairModel.TYPE_EXP:
+                    ele = repairModelTag.addElement("repair-rate");
+                    ele.addAttribute("value", String.valueOf(repairModel.getParam1()));
+                    break;
+                case RepairModel.TYPE_WBL:
+                    ele = repairModelTag.addElement("scale");
+                    ele.addAttribute("value", String.valueOf(repairModel.getParam2()));
+                    ele = repairModelTag.addElement("shape");
+                    ele.addAttribute("value", String.valueOf(repairModel.getParam3()));
+                    break;
+                default:
+                    break;
+            }
+        }
+    }
+
+    private void calcTaskPhaseModelDuration(TaskPhase taskPhase,
+                                                            List<TaskPhaseModel> taskPhaseModelAll) {
+        List<TaskPhaseModel> taskPhaseModels = taskPhaseModelDao.getListByPhaseId(taskPhase.getId());
+        double totalRate = taskPhaseModels.stream().mapToDouble(TaskPhaseModel::getOperatConditDurationRate).sum();
+        double sum = 0.0;
+        for (TaskPhaseModel taskPhaseModel : taskPhaseModels) {
+            double duration = taskPhaseModel.getOperatConditDurationRate() * taskPhase.getPhaseDuration() / totalRate;
+            taskPhaseModel.setOperatConditDuration(duration);
+            sum += duration;
+            taskPhaseModelAll.add(taskPhaseModel);
+        }
+        // 鎶婇浂澶磋ˉ鍒版渶鍚庝竴涓伐鍐垫ā鍨�
+        taskPhaseModels.get(taskPhaseModels.size()-1).setOperatConditDuration(totalRate - sum);
+    }
+
+    private List<TaskPhase> calcTaskPhaseDuration(Task task) {
+        List<TaskPhase> taskPhases = taskPhaseDao.getListByTaskId(task.getId());
+        double totalRate = taskPhases.stream().mapToDouble(TaskPhase::getPhaseDurationRate).sum();
+        double sum = 0.0;
+        for (TaskPhase taskPhase : taskPhases) {
+            double duration = task.getTaskDuration() * taskPhase.getPhaseDurationRate() / totalRate;
+            taskPhase.setPhaseDuration(duration);
+            sum += duration;
+        }
+        // 鎶婇浂澶磋ˉ鍒版渶鍚庝竴涓樁娈�
+        taskPhases.get(taskPhases.size()-1).setPhaseDuration(task.getTaskDuration() - sum);
+
+        return taskPhases;
+    }
+
+    private void addModelsTag(Long productId,
+                              List<XhProductModel> productList,
+                              List<ParamData> paramDataList,
+                              List<TaskPhaseModel> taskPhaseModelAll,
+                              Element root,
+                              List<FailureModel> failureModels,
+                              List<RepairModel> repairModels) {
+        Element modelsTag = root.addElement("models");
+        for (TaskPhaseModel taskPhaseModel : taskPhaseModelAll) {
+            Element modelTag = modelsTag.addElement("model");
+            modelTag.addAttribute("name", taskPhaseModel.getOperatConditId().toString());
+            List<OperatConditModel> gkModelsAssembled = operatConditModelDao.getGKModelAssembled(
+                    taskPhaseModel.getOperatConditId());
+            OperatConditModel gkModelTop = gkModelsAssembled.stream().filter(item ->
+                    productId.equals(item.getProductId())).collect(Collectors.toList()).get(0);
+            List<ModelNode> modelNodeAndVnodeList = modelNodeAlgorithmDao.getListByModelId(gkModelTop.getModelId());
+            List<Algorithm> algorithmList = algorithmDao.getListByModelId(gkModelTop.getModelId());
+            // 灏嗘ā鍨嬭浆鎹负DOM锛屾坊鍔犲埌model鏍囩
+            Algorithm endAlgo = algorithmList.stream().filter(item ->
+                    "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(productList,
+                    paramDataList,
+                    gkModelsAssembled,
+                    algorithmList,
+                    modelNodeAndVnodeList,
+                    computerNode, modelTag,
+                    failureModels, repairModels);
+        }
+    }
+
+    // 閫掑綊鍑芥暟
+    private void node2DOM(List<XhProductModel> productList,
+                          List<ParamData> paramDataList,
+                          List<OperatConditModel> gkModelsAssembled,
+                          List<Algorithm> algorithmList,
+                          List<ModelNode> modelNodeAndVnodeList,
+                          ModelNode node,
+                          Element parent,
+                          List<FailureModel> failureModels,
+                          List<RepairModel> repairModels) {
+        if ("node".equals(node.getNodeType())) {
+            Long dataId = node.getDataId();
+            XhProductModel product = productList.stream().filter(item ->
+                    dataId.equals(item.getId())).collect(Collectors.toList()).get(0);
+            if ("3,4,10".equals(product.getProductType())) {
+                // 绯荤粺銆佸垎绯荤粺銆佽櫄鍗曞厓
+                OperatConditModel gkModel = gkModelsAssembled.stream().filter(item ->
+                        dataId.equals(item.getProductId())).collect(Collectors.toList()).get(0);
+                List<Algorithm> algorithmListSub = algorithmDao.getListByModelId(gkModel.getModelId());
+                List<ModelNode> modelNodeAndVnodeListSub = modelNodeAlgorithmDao.getListByModelId(gkModel.getModelId());
+                Algorithm endAlgo = algorithmListSub.stream().filter(item ->
+                        "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(productList,
+                        paramDataList,
+                        gkModelsAssembled,
+                        algorithmListSub,
+                        modelNodeAndVnodeListSub,
+                        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());
+                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());
+                    repairModels.add(repairModel);
+                    Element repairTag = nodeTag.addElement("repair_model");
+                    repairTag.addAttribute("name", repairModel.getId().toString());
+                }
+            }
+        } else {
+            // vnode锛堣繍绠楄妭鐐癸級
+            Algorithm algo = algorithmList.stream().filter(item ->
+                    node.getId().equals(item.getId())).collect(Collectors.toList()).get(0);
+            Element element = parent.addElement("logic");
+            element.addAttribute("name", algo.getId().toString());
+            if ("series".equals(algo.getAlgorithmType())) {
+                element.addAttribute("type", "series");
+            } else if ("parallel".equals(algo.getAlgorithmType())) {
+                element.addAttribute("type", "parallel");
+            } else if ("vote".equals(algo.getAlgorithmType())) {
+                element.addAttribute("type", "vote");
+                element.addAttribute("k", algo.getVoteNum().toString());
+            } else if ("switch".equals(algo.getAlgorithmType())) {
+                element.addAttribute("type", "standby");
+            } else if ("bridge".equals(algo.getAlgorithmType())) {
+                element.addAttribute("type", "bridge");
+            }
+            String[] computerNodeListStr = algo.getComputerList().split(",");
+            for (String nodeStr : computerNodeListStr) {
+                ModelNode md = modelNodeAndVnodeList.stream().filter(item ->
+                        nodeStr.equals(item.getId().toString())).collect(Collectors.toList()).get(0);
+                node2DOM(productList,
+                        paramDataList,
+                        gkModelsAssembled,
+                        algorithmList,
+                        modelNodeAndVnodeList,
+                        md, element,
+                        failureModels, repairModels);
+            }
+        }
+    }
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/TaskService.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/TaskService.java
index af3f35b..3a77b32 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/TaskService.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/TaskService.java
@@ -76,13 +76,7 @@
      * @param productId 浜у搧鑺傜偣ID锛堜竴鑸负鎬讳綋锛�
      * @return 妫�鏌ュ嚭鐨勯敊璇殑List锛岄暱搴︿负0琛ㄧず娌℃湁閿欒锛屼笉浼氳繑鍥瀗ull
      */
-    public List<TaskModelCheckResult> checkTaskModel(Long productId) {
-        List<TaskModelCheckResult> result = new ArrayList<>();
-        result = doCheckTaskModel(productId, null);
-        return result;
-    }
-
-    private List<TaskModelCheckResult> doCheckTaskModel(Long productId, Long taskModelId) {
+    public List<TaskModelCheckResult> checkTaskModel(Long productId, Long taskModelId) {
         List<TaskModelCheckResult> checkResult = new ArrayList<>();
         List<XhProductModel> deviceUsedList = new ArrayList<>();    // 妫�鏌ュ璞℃ā鍨嬩腑浣跨敤鍒扮殑鎵�鏈夎澶�
 
diff --git a/modules/mainPart/src/main/resources/mapper/taskReliability/OperatConditModelDao.xml b/modules/mainPart/src/main/resources/mapper/taskReliability/OperatConditModelDao.xml
index 84d252a..84acf4f 100644
--- a/modules/mainPart/src/main/resources/mapper/taskReliability/OperatConditModelDao.xml
+++ b/modules/mainPart/src/main/resources/mapper/taskReliability/OperatConditModelDao.xml
@@ -63,8 +63,18 @@
         a.is_delete = 0
         and b.is_delete = 0
         <if test="productId!=null">
-            and b.product_id=${productId}
+            and b.product_id=#{productId}
         </if>
         ORDER BY a.operat_condit_id, a.product_id
     </select>
+    <select id="getGKModelAssembled" resultType="com.zt.life.modules.mainPart.taskReliability.model.OperatConditModel">
+        select
+            a.*
+        FROM
+            operat_condit_model a
+        where
+            a.is_delete = 0
+        and a.is_disabled = 0
+        and a.operat_condit_id=#{gkId}
+    </select>
 </mapper>
diff --git a/modules/mainPart/src/main/resources/mapper/taskReliability/TaskPhaseDao.xml b/modules/mainPart/src/main/resources/mapper/taskReliability/TaskPhaseDao.xml
index 84856c9..d48ad1c 100644
--- a/modules/mainPart/src/main/resources/mapper/taskReliability/TaskPhaseDao.xml
+++ b/modules/mainPart/src/main/resources/mapper/taskReliability/TaskPhaseDao.xml
@@ -30,5 +30,14 @@
           and task_id =${taskId}
         order by phase_sort
     </select>
+    <select id="getListByTaskId" resultType="com.zt.life.modules.mainPart.taskReliability.model.TaskPhase">
+        SELECT
+            a.*
+        FROM
+            task_phase a
+        where a.is_delete = 0
+          and a.task_id=#{taskId}
+        ORDER BY a.phase_sort
+    </select>
 
 </mapper>
diff --git a/modules/mainPart/src/main/resources/mapper/taskReliability/TaskPhaseModelDao.xml b/modules/mainPart/src/main/resources/mapper/taskReliability/TaskPhaseModelDao.xml
index 88819da..d7edc5b 100644
--- a/modules/mainPart/src/main/resources/mapper/taskReliability/TaskPhaseModelDao.xml
+++ b/modules/mainPart/src/main/resources/mapper/taskReliability/TaskPhaseModelDao.xml
@@ -18,5 +18,13 @@
           and a.product_id = ${productId}
         order by a.CREATE_DATE
     </select>
+    <select id="getListByPhaseId" resultType="com.zt.life.modules.mainPart.taskReliability.model.TaskPhaseModel">
+        SELECT
+            a.*
+        FROM
+            task_phase_model a
+        where a.is_delete = 0
+          and a.phase_id=#{phaseId}
+    </select>
 
 </mapper>

--
Gitblit v1.9.1