From 413eae5cb4d5fe78fc25258bf7b5e3b53740b1f9 Mon Sep 17 00:00:00 2001
From: xyc <jc_xiong@hotmail.com>
Date: 星期三, 24 七月 2024 11:08:01 +0800
Subject: [PATCH] 1)新增仿真时模型及参数完整性检查 2)增加调用算法库后端接口

---
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/async/PythonLib.java                                    |  196 ++++++++++++++++-
 starter/src/main/resources/application.yml                                                                          |    8 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/ModelNodeAlgorithmDao.java          |    1 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/TaskService.java                |  211 +++++++++++++++++++
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/ModelLineController.java     |    4 
 modules/mainPart/src/main/resources/mapper/taskReliability/TaskBinoParamDao.xml                                     |   10 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/TaskController.java          |    8 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/dao/XhProductModelDao.java                    |    2 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskDao.java                        |    6 
 modules/mainPart/src/main/resources/mapper/taskReliability/OperatConditModelDao.xml                                 |   14 +
 modules/mainPart/src/main/resources/mapper/taskReliability/TaskDao.xml                                              |   54 ++++
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/OperatConditModelDao.java           |    2 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskBinoParamDao.java               |    1 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dto/TaskModelCheckResult.java           |   29 ++
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/dao/ParamDataDao.java                         |    1 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/SimulatAssessController.java |   33 ++
 modules/mainPart/src/main/resources/mapper/basicInfo/ParamDataDao.xml                                               |   11 +
 modules/mainPart/src/main/resources/mapper/taskReliability/ModelNodeAlgorithmDao.xml                                |    9 
 modules/mainPart/src/main/resources/mapper/basicInfo/XhProductModelDao.xml                                          |    8 
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/SimulatAssess.java                |    6 
 20 files changed, 582 insertions(+), 32 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 3da299e..19139d5 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
@@ -3,6 +3,7 @@
 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.SimulatAssess;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,22 +24,31 @@
     private String redisHost;
     @Value("${spring.redis.port}")
     private String redisPort;
+    @Value("${data.reliaSimLib.mainPy}")
+    private String reliaSimMain;
+    @Value("${data.reliaSimLib.resultHome}")
+    private String resultHome;
 
-    private Long taskId = 123L;
-    private String taskFlag = "relia";
+//    private Long taskId = 123L;
+//    private Long taskId = 124L;
+//    private Long taskId = 100L;     // =銆� model1.xml1
+    private String taskType = "calcreq";
 
     @Autowired
     private RedisTemplate redisTemplate;
 
-    public Result callPython() {
+    public Result callPython(SimulatAssess simulatAssess) {
         Result result = null;
         InputStream is = null;
         BufferedReader br = null;
         try {
+            setParamToRedis(simulatAssess);
+
             Process process = null;
-            String command = "python D:\\work\\python\\relia_calc.py";
-            command += " " + redisHost + " " + redisPort;
-            command += " " + taskFlag + " " + taskId.toString();
+//            String command = "python D:\\work\\python\\relia_calc.py";
+            String command = "python " + reliaSimMain;
+            command += " -ip " + redisHost + " -port " + redisPort;
+            command += " -taskType " + taskType + " -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});
@@ -48,12 +58,12 @@
                 throw new Exception("鏆備笉鏀寔璇ユ搷浣滅郴缁燂紝杩涜鍚姩python璁$畻锛�");
             }
             is = process.getInputStream();
-            // 浠ュ懡浠よ鏂瑰紡璋冪敤python鏃讹紝杩斿洖鐨勭粨鏋滄槸GBK缂栫爜鐨勶紝鑰岄潪utf-8
-            br = new BufferedReader(new InputStreamReader(is,"gb2312"));
+            // 浠ュ懡浠よ鏂瑰紡璋冪敤python鏃讹紝杩斿洖鐨勭粨鏋滄槸utf-8缂栫爜
+            br = new BufferedReader(new InputStreamReader(is,"utf-8"));
             String line = br.readLine();
             logger.info("python杩斿洖缁撴灉锛�" + line);
-            int exitCode = process.waitFor();
-            if (exitCode == 0) {
+//            int exitCode = process.waitFor();
+//            if (exitCode == 0) {
                 logger.info("鍚姩python璁$畻鎴愬姛");
                 if (line != null) {
                     PythonResult rtn = JSONObject.parseObject(line, PythonResult.class);
@@ -64,23 +74,23 @@
                         throw new RuntimeException("鍚姩python璁$畻澶辫触: errorMsg=" + errorMsg);
                     }
                 }
-            } else {
-                logger.error("鍚姩python璁$畻澶辫触: exitCode=" + exitCode);
-                throw new RuntimeException("鍚姩python璁$畻澶辫触: exitCode=" + exitCode);
-            }
+//            } else {
+//                logger.error("鍚姩python璁$畻澶辫触: exitCode=" + exitCode);
+//                throw new RuntimeException("鍚姩python璁$畻澶辫触: exitCode=" + exitCode);
+//            }
         } catch (Exception e) {
             logger.error("鍚姩python璁$畻鏃跺彂鐢烢xception锛�", e);
             e.printStackTrace();
             result = Result.error(e.getMessage());
         } finally {
-            if (is == null) {
+            if (is != null) {
                 try {
                     is.close();
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
             }
-            if (br == null) {
+            if (br != null) {
                 try {
                     br.close();
                 } catch (Exception e) {
@@ -92,11 +102,163 @@
         return result;
     }
 
+/*
     public String getPythonCalcResult() {
-        String key = taskFlag + taskId.toString();
+        String key = taskId.toString() + "calcprog";
         logger.info("redis key锛�" + key);
         String progress = (String)redisTemplate.opsForValue().get(key);
         if (progress==null) progress = "0";
         return progress;
     }
+*/
+
+    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" +
+                "        <task duration=\"200\" model=\"model1\"/>\n" +
+                "        <task duration=\"100\" model=\"model2\"/>\n" +
+                "    </tasks>\n" +
+                "    <models>\n" +
+                "        <model name =\"model1\">\n" +
+                "            <logic name=\"鎬讳綋\" type=\"series\">                \n" +
+                "\t\t\t\t<logic name=\"绯荤粺1\" type=\"series\">                \n" +
+                "\t\t\t\t\t<logic name=\"p1\" type=\"parallel\">                \n" +
+                "\t\t\t\t\t\t<node name=\"X1\" type=\"node\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm1\"/>\n" +
+                "                            <repair_model name=\"rm1\"/>\n" +
+                "\t\t\t\t\t\t</node>                \n" +
+                "\t\t\t\t\t\t<node name=\"X2\" type=\"node\" cycon=\"15\" cycdown=\"5\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm1\"/>\n" +
+                "\t\t\t\t\t\t</node>\n" +
+                "\t\t\t\t\t</logic>\n" +
+                "                    <logic name=\"v1\" type=\"vote\" k=\"2\">\n" +
+                "\t\t\t\t\t\t<node name=\"X3\" type=\"node\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm1\"/>\n" +
+                "                            <repair_model name=\"rm2\"/>\n" +
+                "\t\t\t\t\t\t</node>                \n" +
+                "\t\t\t\t\t\t<node name=\"X4\" type=\"node\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm2\"/>\n" +
+                "\t\t\t\t\t\t</node>\n" +
+                "\t\t\t\t\t\t<node name=\"X5\" type=\"node\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm1\"/>\n" +
+                "\t\t\t\t\t\t</node>                \n" +
+                "\t\t\t\t\t</logic>\n" +
+                "                    <logic name=\"s1\" type=\"parallel\">\n" +
+                "\t\t\t\t\t\t<node name=\"X6\" type=\"node\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm1\"/>\n" +
+                "\t\t\t\t\t\t</node>                \n" +
+                "\t\t\t\t\t\t<node name=\"X7\" type=\"node\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm2\"/>\n" +
+                "\t\t\t\t\t\t</node>\n" +
+                "\t\t\t\t\t\t<node name=\"X8\" type=\"node\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm1\"/>\n" +
+                "\t\t\t\t\t\t</node>                \n" +
+                "\t\t\t\t\t</logic>\n" +
+                "\t\t\t\t</logic>\n" +
+                "\t\t\t\t<logic name=\"绯荤粺2\" type=\"series\">                \n" +
+                "\t\t\t\t\t<node name =\"X14\" type=\"node\">\n" +
+                "\t\t\t\t\t\t<failure_model name=\"fm1\"/>\n" +
+                "\t\t\t\t\t</node>\n" +
+                "\t\t\t\t\t<node name=\"X15\" type=\"node\">\n" +
+                "\t\t\t\t\t\t<failure_model name=\"fm2\"/>\n" +
+                "\t\t\t\t\t</node>\n" +
+                "\t\t\t\t\t<node name=\"X16\" type=\"node\">\n" +
+                "\t\t\t\t\t\t<failure_model name=\"fm3\"/>\n" +
+                "\t\t\t\t\t</node>\n" +
+                "\t\t\t\t</logic>\n" +
+                "            </logic>\n" +
+                "        </model>\n" +
+                "        <model name =\"model2\">\n" +
+                "            <logic name=\"鎬讳綋\" type=\"series\">                \n" +
+                "\t\t\t\t<logic name=\"绯荤粺1\" type=\"series\">\n" +
+                "\t\t\t\t\t<logic name=\"p1\" type=\"parallel\">                \n" +
+                "\t\t\t\t\t\t<node name=\"X1\" type=\"node\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm1\"/>\n" +
+                "\t\t\t\t\t\t</node>                \n" +
+                "\t\t\t\t\t\t<node name=\"X2\" type=\"node\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm2\"/>\n" +
+                "\t\t\t\t\t\t</node>\n" +
+                "\t\t\t\t\t</logic>\n" +
+                "                    <logic name=\"v1\" type=\"vote\" k=\"2\">\n" +
+                "\t\t\t\t\t\t<node name=\"X3\" type=\"node\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm1\"/>\n" +
+                "\t\t\t\t\t\t</node>                \n" +
+                "\t\t\t\t\t\t<node name=\"X4\" type=\"node\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm2\"/>\n" +
+                "\t\t\t\t\t\t</node>\n" +
+                "\t\t\t\t\t\t<node name=\"X5\" type=\"node\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm1\"/>\n" +
+                "\t\t\t\t\t\t</node>                \n" +
+                "\t\t\t\t\t</logic>\n" +
+                "                    <logic name=\"s1\" type=\"parallel\">\n" +
+                "\t\t\t\t\t\t<node name=\"X6\" type=\"node\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm1\"/>\n" +
+                "\t\t\t\t\t\t</node>                \n" +
+                "\t\t\t\t\t\t<node name=\"X7\" type=\"node\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm2\"/>\n" +
+                "\t\t\t\t\t\t</node>\n" +
+                "\t\t\t\t\t\t<node name=\"X8\" type=\"node\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm1\"/>\n" +
+                "\t\t\t\t\t\t</node>                \n" +
+                "\t\t\t\t\t</logic>\n" +
+                "\t\t\t\t</logic>\n" +
+                "\t\t\t\t<logic name=\"绯荤粺2\" type=\"series\">                \n" +
+                "\t\t\t\t\t<logic name=\"p2\" type=\"parallel\">                \n" +
+                "\t\t\t\t\t\t<node name=\"X14\" type=\"node\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm1\"/>\n" +
+                "\t\t\t\t\t\t</node>                \n" +
+                "\t\t\t\t\t\t<node name=\"X15\" type=\"node\">\n" +
+                "\t\t\t\t\t\t\t<failure_model name=\"fm2\"/>\n" +
+                "\t\t\t\t\t\t</node>\n" +
+                "\t\t\t\t\t</logic>\n" +
+                "\t\t\t\t\t<node name=\"X17\" type=\"node\">\n" +
+                "\t\t\t\t\t\t<failure_model name=\"fm1\"/>\n" +
+                "\t\t\t\t\t</node>\n" +
+                "\t\t\t\t</logic>\n" +
+                "            </logic>\n" +
+                "        </model>\n" +
+                "    </models>\n" +
+                "    <failure_models>\n" +
+                "        <failure_model name=\"fm1\" type=\"exponential\">\n" +
+                "            <failure-rate value=\"0.004\"/>\n" +
+                "        </failure_model>\n" +
+                "        <failure_model name=\"fm2\" type=\"fixed\">\n" +
+                "            <unreliability value=\"0.04\"/>\n" +
+                "        </failure_model>\n" +
+                "        <failure_model name=\"fm3\" type=\"weibull\">\n" +
+                "            <scale value=\"100\"/>\n" +
+                "            <shape value=\"2\"/>\n" +
+                "        </failure_model>\n" +
+                "    </failure_models>\n" +
+                "    <repair_models>\n" +
+                "        <repair_model name=\"rm1\" type=\"exponential\">\n" +
+                "            <repair-rate value=\"0.1\"/>\n" +
+                "        </repair_model>\n" +
+                "        <repair_model name=\"rm2\" type=\"weibull\">\n" +
+                "            <scale value=\"13\"/>\n" +
+                "            <shape value=\"2\"/>\n" +
+                "        </repair_model>\n" +
+                "    </repair_models>\n" +
+                "</des>";
+        JSONObject jsonObject = new JSONObject();
+/*
+        Long simulate_times = 10000L;
+        Long timeslice = 10L;
+        jsonObject.put("xmlfile", xmlfile);
+        jsonObject.put("simulate_times", simulate_times);
+        jsonObject.put("seed", 1000);
+        jsonObject.put("timeslice", 1);
+//        jsonObject.put("timeslice", timeslice/60.0);
+//        jsonObject.put("timeslice", timeslice);
+*/
+        jsonObject.put("xmlfile", xmlfile);
+        jsonObject.put("simulate_times", simulatAssess.getSimulatFrequency());
+        jsonObject.put("seed", 1000);
+        jsonObject.put("timeslice", simulatAssess.getSamplPeriod()/60.0);
+        jsonObject.put("result_home", resultHome);
+        redisTemplate.opsForValue().set(key, jsonObject.toJSONString());
+    }
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/dao/ParamDataDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/dao/ParamDataDao.java
index bc3297c..92dd5f3 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/dao/ParamDataDao.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/dao/ParamDataDao.java
@@ -22,6 +22,7 @@
     ParamData getParamData(Long productId, String pageCode);
 
     List<ParamData> getByShipId(Long shipId);
+    List<ParamData> getDeviceParams(Long shipId);
 
     void deleteByShipId(Long shipId);
 
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/dao/XhProductModelDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/dao/XhProductModelDao.java
index ca3a09a..164c3c5 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/dao/XhProductModelDao.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/dao/XhProductModelDao.java
@@ -33,5 +33,7 @@
 
     List<XhProductModel> getByShipId(Long shipId);
 
+    List<XhProductModel> getProductTree(Long shipId);
+
     void deleteByShipId(Long shipId);
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/ModelLineController.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/ModelLineController.java
index 84fe38d..34ec34f 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/ModelLineController.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/ModelLineController.java
@@ -50,6 +50,7 @@
     @Autowired
     private PythonLib pythonLib;
 
+/*
     @GetMapping("callPythonCalc")
     @ApiOperation("淇℃伅")
     public Result callPythonCalc() {
@@ -57,7 +58,9 @@
 
         return result;
     }
+*/
 
+/*
     @GetMapping("getPythonCalcResult")
     @ApiOperation("淇℃伅")
     public Result<String> getPythonCalcResult() {
@@ -65,6 +68,7 @@
 
         return Result.ok(result);
     }
+*/
 
     @GetMapping("page")
     @ApiOperation("鍒嗛〉")
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 88d71d9..c56ef67 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
@@ -1,32 +1,29 @@
 package com.zt.life.modules.mainPart.taskReliability.controller;
 
 
-import cn.hutool.http.HttpUtil;
 import com.zt.common.annotation.LogOperation;
 import com.zt.common.constant.Constant;
 import com.zt.common.annotation.QueryParam;
 import com.zt.common.db.query.QueryFilter;
 import com.zt.common.servlet.Result;
 import com.zt.common.servlet.PageResult;
-import com.zt.common.utils.UUIDUtil;
 import com.zt.common.validator.AssertUtils;
 import com.zt.common.validator.ValidatorUtils;
-import com.zt.common.validator.group.AddGroup;
 import com.zt.common.validator.group.DefaultGroup;
 import com.zt.common.validator.group.UpdateGroup;
+import com.zt.life.modules.mainPart.async.PythonLib;
 import com.zt.life.modules.mainPart.taskReliability.model.SimulatAssess;
 import com.zt.life.modules.mainPart.taskReliability.service.SimulatAssessService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
-
-import javax.servlet.http.HttpServletResponse;
-import java.util.HashMap;
-import java.util.List;
 
 
 /**
@@ -39,6 +36,15 @@
 @RequestMapping("/taskReliability/SimulatAssess/")
 @Api(tags = "simulat_assess")
 public class SimulatAssessController {
+    private static final Logger logger = LoggerFactory.getLogger(SimulatAssessController.class);
+    private static final String taskTypeProgress = "calcreq";
+
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+    @Autowired
+    private PythonLib pythonLib;
+
     @Autowired
     private SimulatAssessService simulatAssessService;
 
@@ -66,6 +72,7 @@
     @PostMapping("analyze")
     public Result<Long> analyze(@RequestBody SimulatAssess simulatAssess) {
         //鏁堥獙鏁版嵁
+/*
         ValidatorUtils.validateEntity(simulatAssess, AddGroup.class, DefaultGroup.class);
         Long taskId = UUIDUtil.generateId();
         Integer time = simulatAssess.getSamplPeriod();
@@ -76,8 +83,10 @@
         paramMap.put("Frequency", Frequency);
         paramMap.put("url", "http://localhost:8050/test-project//taskReliability/SimulatAssess/calculate");
         String result1 = HttpUtil.get("http://localhost:8080/system/user/get", paramMap);
+*/
+        Result result = pythonLib.callPython(simulatAssess);
 
-        return Result.ok(taskId);
+        return result;
     }
 
     @GetMapping("calculate")
@@ -92,6 +101,14 @@
         return Result.ok();
     }
 
+    @GetMapping("getCalcProgress")
+    public String getCalcProgress(Long taskId) {
+        String key = taskId.toString() + taskTypeProgress;
+        String progress = (String)redisTemplate.opsForValue().get(key);
+        if (progress==null) progress = "0";
+        return progress;
+    }
+
     @PutMapping
     @ApiOperation("淇敼")
     @LogOperation("淇敼")
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 1bd2725..183d77c 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
@@ -11,6 +11,7 @@
 import com.zt.common.validator.group.AddGroup;
 import com.zt.common.validator.group.DefaultGroup;
 import com.zt.common.validator.group.UpdateGroup;
+import com.zt.life.modules.mainPart.taskReliability.dto.TaskModelCheckResult;
 import com.zt.life.modules.mainPart.taskReliability.model.Task;
 import com.zt.life.modules.mainPart.taskReliability.service.TaskService;
 import io.swagger.annotations.Api;
@@ -62,6 +63,13 @@
         return Result.ok(taskService.getTaskList(productId));
     }
 
+    @GetMapping("checkTaskModel")
+    @ApiOperation("浠诲姟妯″瀷瀹屾暣鎬ф鏌�")
+    public Result<List<TaskModelCheckResult>> checkTaskModel(Long productId){
+        List<TaskModelCheckResult> checkResult = taskService.checkTaskModel(productId);
+        return Result.ok(checkResult);
+    }
+
     @PostMapping
     @ApiOperation("鏂板")
     @LogOperation("鏂板")
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/ModelNodeAlgorithmDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/ModelNodeAlgorithmDao.java
index 6e356bc..e25e1d6 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/ModelNodeAlgorithmDao.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/ModelNodeAlgorithmDao.java
@@ -22,4 +22,5 @@
     List<ModelNode> getListByModelId(Long modelId);
     void deleteByModelId(Long modelId);
 
+    List<ModelNodeAlgorithm> getRbdNodes();
 }
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 0ccc3be..9e9d362 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
@@ -28,4 +28,6 @@
     List<ModelNodes> getModelNodes(Long shipId);
 
     void deleteByOperatConditId(Long operatConditId);
+
+    List<OperatConditModel> getGKModelTrees(Long productId);
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskBinoParamDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskBinoParamDao.java
index 075412c..54f9a60 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskBinoParamDao.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskBinoParamDao.java
@@ -19,5 +19,6 @@
 public interface TaskBinoParamDao extends BaseDao<TaskBinoParam> {
 
     List<TaskBinoParam> getList(Map<String, Object> params);
+    List<TaskBinoParam> getBinoParams(Long taskModelId);
 
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskDao.java
index 87c7740..92c01f3 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskDao.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/TaskDao.java
@@ -2,6 +2,8 @@
 
 import com.zt.common.dao.BaseDao;
 import com.zt.life.modules.mainPart.taskReliability.model.Task;
+import com.zt.life.modules.mainPart.taskReliability.model.TaskPhase;
+import com.zt.life.modules.mainPart.taskReliability.model.TaskPhaseModel;
 import org.apache.ibatis.annotations.Mapper;
 
 
@@ -21,4 +23,8 @@
     List<Task> getList(Map<String, Object> params);
 
     List<Task> getTaskList(Long productId);
+
+    List<Task> getTaskModels(Long productId, Long taskModelId);
+    List<TaskPhase> getTaskModelPhases(Long productId, Long taskModelId);
+    List<TaskPhaseModel> getTaskModelPhaseModels(Long productId, Long taskModelId);
 }
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dto/TaskModelCheckResult.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dto/TaskModelCheckResult.java
new file mode 100644
index 0000000..b7d307c
--- /dev/null
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dto/TaskModelCheckResult.java
@@ -0,0 +1,29 @@
+package com.zt.life.modules.mainPart.taskReliability.dto;
+
+import lombok.Data;
+
+@Data
+public class TaskModelCheckResult {
+    public final static String CATEGORY_TASK_TIME = "浠诲姟鎬绘椂闀挎湭閰嶇疆";
+    public final static String CATEGORY_PHASE_TIME = "闃舵鏃堕暱鏈厤缃�";
+    public final static String CATEGORY_GK_TIME = "宸ュ喌鏃堕暱鏈厤缃�";
+    public final static String CATEGORY_GK_MODEL = "宸ュ喌妯″瀷鏍戜笉瀹屾暣";
+    public final static String CATEGORY_MODEL = "寤烘ā鏈畬鎴�";
+    public final static String CATEGORY_PARAM = "璁惧鍙傛暟鏈厤缃�";
+    private String category; // 妫�鏌ョ粨鏋滃垎绫�
+    private Long productId; // 浜у搧缁撴瀯鏍戣妭鐐笽D锛堜负浠诲姟鍙潬鎬у缓妯″璞¤妭鐐癸紝涓�鑸负鎬讳綋锛�
+    private Long taskModelId; // 浠诲姟妯″瀷ID
+    private String taskModelName; // 浠诲姟妯″瀷鍚嶇О
+    private Long taskModelPhaseId; // 浠诲姟闃舵ID
+    private String taskModelPhaseName; // 浠诲姟闃舵鍚嶇О
+    private Long gkId; // 宸ュ喌ID
+    private String gkName; // 宸ュ喌鍚嶇О
+    private Long nodeId; // 鑺傜偣ID
+    private String nodeName; // 鑺傜偣鍚嶇О
+    private Long modelId; // 鑺傜偣閫夋嫨鐨勬ā鍨婭D
+    private String modelName; // 鑺傜偣閫夋嫨鐨勬ā鍨嬪悕绉�
+    private Long deviceId; // 璁惧ID
+    private String deviceName; // 璁惧鍚嶇О
+    private Long paramId; // 璁惧鍙傛暟ID
+    private String paramName; // 璁惧鍙傛暟鍚嶇О
+}
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/SimulatAssess.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/SimulatAssess.java
index cb1ef09..f93e4b9 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/SimulatAssess.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/SimulatAssess.java
@@ -31,9 +31,6 @@
 	@ApiModelProperty(value = "鎬讳綋浠诲姟妯″瀷ID")
 	private Long taskModelId;
 
-	@ApiModelProperty(value = "浠跨湡ID")
-	private Long taskId;
-
 	@ApiModelProperty(value = "鏁版嵁绫诲瀷")
 	private Integer dataType;
 
@@ -54,4 +51,7 @@
 	private String errorMsg;
 	private String curveData;
 
+	@ApiModelProperty(value = "浼犵粰绠楁硶搴撶殑xml")
+	private String xml;
+
 }
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 b4e4d06..af3f35b 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
@@ -1,12 +1,22 @@
 package com.zt.life.modules.mainPart.taskReliability.service;
 
 import com.zt.common.service.BaseService;
-import com.zt.life.modules.mainPart.taskReliability.dao.TaskDao;
-import com.zt.life.modules.mainPart.taskReliability.model.Task;
+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.TaskModelCheckResult;
+import com.zt.life.modules.mainPart.taskReliability.model.*;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.zt.common.db.query.QueryFilter;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /**
@@ -17,6 +27,19 @@
  */
 @Service
 public class TaskService  extends BaseService<TaskDao, Task> {
+
+    @Autowired
+    private OperatConditModelDao operatConditModelDao;
+    @Autowired
+    private ModelNodeAlgorithmDao modelNodeAlgorithmDao;
+    @Autowired
+    private ModelRbdDao modelRbdDao;
+    @Autowired
+    private XhProductModelDao xhProductModelDao;
+    @Autowired
+    private ParamDataDao paramDataDao;
+    @Autowired
+    private TaskBinoParamDao taskBinoParamDao;
 
     /**
      * 鍒嗛〉鏌ヨ
@@ -40,4 +63,188 @@
     public List<Task> getTaskList(Long productId) {
         return  baseDao.getTaskList(productId);
     }
+
+    /**
+     * 瀵逛换鍔″彲闈犳�фā鍨嬪強鍏跺弬鏁伴厤缃繘琛屽畬鏁存�ф鏌ワ紝骞舵寚鍑轰互涓�5绫婚敊璇細
+     * 0锛変换鍔℃�绘椂闀挎湭閰嶇疆
+     * 1锛夐樁娈垫椂闀挎湭閰嶇疆
+     * 2锛夊伐鍐垫椂闀挎湭閰嶇疆
+     * 3锛夊伐鍐垫ā鍨嬫爲涓嶅畬鏁�
+     * 4锛夊缓妯℃湭瀹屾垚
+     * 5锛夎澶囧弬鏁版湭閰嶇疆
+     * 鍙互瀵规墍鏈変换鍔℃ā鍨嬭繘琛屾鏌ワ紝涔熷彲浠ュ彧妫�鏌ュ叆鍙傛寚瀹氱殑浜у搧鑺傜偣涓嬬殑浠诲姟妯″瀷锛涘墠鑰呴�傚悎鍦ㄩ〉闈㈠垪琛ㄦ樉绀哄叏浣撳缓妯$姸鎬侊紝鍚庤�呴�傚悎瀵规煇浠诲姟杩涜浠跨湡鏃剁殑妫�鏌ャ��
+     * @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) {
+        List<TaskModelCheckResult> checkResult = new ArrayList<>();
+        List<XhProductModel> deviceUsedList = new ArrayList<>();    // 妫�鏌ュ璞℃ā鍨嬩腑浣跨敤鍒扮殑鎵�鏈夎澶�
+
+        // 1. 鑾峰彇鏁版嵁
+        // 1.1 鑾峰彇鎵�鏈変换鍔℃ā鍨嬫暟鎹甃ist
+        List<Task> taskModelList = baseDao.getTaskModels(productId, taskModelId);
+        // 1.2 鑾峰彇鎵�鏈変换鍔℃ā鍨嬮樁娈垫暟鎹甃ist
+        List<TaskPhase> taskModelPhaseList = baseDao.getTaskModelPhases(productId, taskModelId);
+        // 1.3 鑾峰彇鎵�鏈変换鍔℃ā鍨嬪伐鍐垫暟鎹甃ist
+        List<TaskPhaseModel> taskModelPhaseModelList = baseDao.getTaskModelPhaseModels(productId, taskModelId);
+        // 1.4 鑾峰彇浜у搧缁撴瀯鏍戠粨鏋勬暟鎹�
+        List<XhProductModel> productTreeList = xhProductModelDao.getProductTree(productId);
+        // 1.5 鑾峰彇鎵�鏈夋ā鍨嬪寘鍚殑鑺傜偣鏁版嵁
+        List<ModelNodeAlgorithm> rbdNodeList = modelNodeAlgorithmDao.getRbdNodes();
+        // 1.6 鑾峰彇鎵�鏈夊伐鍐垫ā鍨嬫爲鏁版嵁List
+        List<OperatConditModel> gkModelList = operatConditModelDao.getGKModelTrees(productId);
+        // 1.7 鑾峰彇鎵�鏈塕BD鏁版嵁List
+        Map<String, Object> mapFilter = new HashMap<>();
+        mapFilter.put("productId", productId);
+        List<ModelRbd> modelRbdList = modelRbdDao.getList(mapFilter);
+        // 1.8 鑾峰彇鎵�鏈夎澶囧弬鏁帮紙鍚换鍔℃ā鍨嬬殑浜岄」鍒嗗竷鍙傛暟锛塋ist
+        List<ParamData> paramDataList = paramDataDao.getDeviceParams(productId);
+        List<TaskBinoParam> binoParamList = taskBinoParamDao.getBinoParams(taskModelId);
+
+        // 2. 妫�鏌ユ瘡涓换鍔℃ā鍨嬬殑鏁版嵁瀹屾暣鎬э紙閫掑綊锛�
+        for (Task taskModel : taskModelList) {
+            if (null == taskModel.getTaskDuration() || 0.0 == taskModel.getTaskDuration()) {
+                // 2.1 浠诲姟鎬绘椂闀挎湭閰嶇疆
+                setTaskModelCheckResult(taskModel,
+                        null,
+                        null, null, null,
+                        TaskModelCheckResult.CATEGORY_TASK_TIME, checkResult);
+            }
+            List<TaskPhase> phases = taskModelPhaseList.stream().filter(item ->
+                    taskModel.getId().equals(item.getTaskId())).collect(Collectors.toList());
+            for (TaskPhase phase : phases) {
+                if (null == phase.getPhaseDurationRate() || 0.0 == phase.getPhaseDurationRate()) {
+                    // 2.2 闃舵鏃堕暱鏈厤缃�
+                    setTaskModelCheckResult(taskModel,
+                            phase,
+                            null, null, null,
+                            TaskModelCheckResult.CATEGORY_PHASE_TIME, checkResult);
+                }
+                List<TaskPhaseModel> phaseModels = taskModelPhaseModelList.stream().filter(item ->
+                        phase.getId().equals(item.getPhaseId())).collect(Collectors.toList());
+                if (phaseModels.size() <= 0) {
+                    // 鏃犲伐鍐垫ā鍨嬫暟鎹�
+                    // 2.3 宸ュ喌鏃堕暱鏈厤缃�
+                    setTaskModelCheckResult(taskModel,
+                            phase,
+                            null, null, null,
+                            TaskModelCheckResult.CATEGORY_GK_TIME, checkResult);
+                } else {
+                    // 鏈夊伐鍐垫ā鍨嬫暟鎹�
+                    List<TaskPhaseModel> phaseModelWithDurations = taskModelPhaseModelList.stream().filter(item ->
+                            0.0 != item.getOperatConditDurationRate()).collect(Collectors.toList());
+                    if (phaseModelWithDurations.size() <= 0) {
+                        // 鏃犲伐鍐垫ā鍨嬭閫夌敤
+                        // 2.3 宸ュ喌鏃堕暱鏈厤缃�
+                        for (TaskPhaseModel taskPhaseModel : phaseModels) {
+                            setTaskModelCheckResult(taskModel,
+                                    phase,
+                                    taskPhaseModel,
+                                    null, null,
+                                    TaskModelCheckResult.CATEGORY_GK_TIME, checkResult);
+                        }
+                    } else {
+                        // 鏈夊伐鍐垫ā鍨嬭閫夌敤锛屾鏌ラ�夌敤鐨勫伐鍐垫ā鍨�
+                        for (TaskPhaseModel taskPhaseModel : phaseModelWithDurations) {
+                            // 棣栧厛鎵惧埌椤跺眰妯″瀷
+                            List<OperatConditModel> gkModelTops = gkModelList.stream().filter(item ->
+                                    taskPhaseModel.getOperatConditId().equals(item.getOperatConditId())
+                                            && taskModel.getProductId().equals(item.getProductId())).collect(Collectors.toList());
+                            if (gkModelTops.size() <= 0) {
+                                // 鏃犲伐鍐垫ā鍨嬫爲鏍硅妭鐐癸紝鍗虫剰鍛崇潃鏃犲伐鍐垫ā鍨嬫爲
+                                XhProductModel node = (XhProductModel) productTreeList.stream().filter(item ->
+                                        taskModel.getProductId().equals(item.getId())).collect(Collectors.toList()).get(0);
+                                setTaskModelCheckResult(taskModel,
+                                        phase,
+                                        taskPhaseModel,
+                                        null,
+                                        node,
+                                        TaskModelCheckResult.CATEGORY_GK_MODEL, checkResult);
+                            } else {
+                                // 鏈夊伐鍐垫ā鍨嬫爲锛屾鏌ュ叾瀹屾暣鎬�
+//                                checkGkModel(taskModel, phase, taskPhaseModel, gkModelTops.get(0),
+//                                        deviceUsedList, checkResult);
+                            }
+                        }
+                    }
+                }
+
+            }
+        }
+        // 3. 杩斿洖妫�鏌ョ粨鏋�
+        return checkResult;
+
+    }
+
+    // 閫掑綊鍑芥暟
+    private void checkGkModel(Task taskModel,
+                              TaskPhase phase,
+                              TaskPhaseModel taskPhaseModel,
+                              OperatConditModel gkModelTreeTop,
+                              List<OperatConditModel> gkModelList,
+                              List<ModelNodeAlgorithm> rbdNodeList,
+                              List<XhProductModel> productTreeList,
+                              List<XhProductModel> deviceUsedList,
+                              List<TaskModelCheckResult> checkResult) {
+        // 棣栧厛鎵惧埌椤跺眰妯″瀷
+        List<OperatConditModel> gkModelTops = gkModelList.stream().filter(item ->
+                taskPhaseModel.getOperatConditId().equals(item.getOperatConditId())
+                        && taskModel.getProductId().equals(item.getProductId())).collect(Collectors.toList());
+        if (gkModelTops.size() <= 0) {
+            // 宸ュ喌妯″瀷鏍戜笉瀹屾暣锛堥《灞傝妭鐐规湭閰嶇疆妯″瀷锛�
+            XhProductModel node = (XhProductModel) productTreeList.stream().filter(item ->
+                    taskModel.getProductId().equals(item.getId())).collect(Collectors.toList()).get(0);
+            setTaskModelCheckResult(taskModel,
+                    phase,
+                    taskPhaseModel,
+                    null,
+                    node,
+                    TaskModelCheckResult.CATEGORY_GK_MODEL, checkResult);
+        }
+    }
+
+    private void setTaskModelCheckResult(Task taskModel,
+                                         TaskPhase taskModelPhase,
+                                         TaskPhaseModel taskModelPhaseModel,
+                                         OperatConditModel gkModel,
+                                         XhProductModel node,
+                                         String category,
+                                         List<TaskModelCheckResult> checkResult) {
+        TaskModelCheckResult result = new TaskModelCheckResult();
+        result.setCategory(category);
+        result.setProductId(taskModel.getProductId());
+        result.setTaskModelId(taskModel.getId());
+        result.setTaskModelName(taskModel.getTaskName());
+        switch(category) {
+            case TaskModelCheckResult.CATEGORY_TASK_TIME:
+                break;
+            case TaskModelCheckResult.CATEGORY_PHASE_TIME:
+                result.setTaskModelPhaseId(taskModelPhase.getId());
+                result.setTaskModelPhaseName(taskModelPhase.getPhaseName());
+                break;
+            case TaskModelCheckResult.CATEGORY_GK_TIME:
+                result.setTaskModelPhaseId(taskModelPhase.getId());
+                result.setTaskModelPhaseName(taskModelPhase.getPhaseName());
+                if (null != taskModelPhaseModel) {
+                    result.setGkId(taskModelPhaseModel.getOperatConditId());
+                    result.setGkName(taskModelPhaseModel.getOperatConditName());
+                }
+                break;
+            case TaskModelCheckResult.CATEGORY_GK_MODEL:
+                result.setTaskModelPhaseId(taskModelPhase.getId());
+                result.setTaskModelPhaseName(taskModelPhase.getPhaseName());
+                result.setGkId(taskModelPhaseModel.getOperatConditId());
+                result.setGkName(taskModelPhaseModel.getOperatConditName());
+                result.setNodeId(node.getId());
+                result.setNodeName(node.getName());
+                break;
+        }
+        checkResult.add(result);
+    }
 }
diff --git a/modules/mainPart/src/main/resources/mapper/basicInfo/ParamDataDao.xml b/modules/mainPart/src/main/resources/mapper/basicInfo/ParamDataDao.xml
index 02d292a..388ff9c 100644
--- a/modules/mainPart/src/main/resources/mapper/basicInfo/ParamDataDao.xml
+++ b/modules/mainPart/src/main/resources/mapper/basicInfo/ParamDataDao.xml
@@ -51,4 +51,15 @@
           and a.ship_id = #{shipId}
     </select>
 
+    <select id="getDeviceParams" resultType="com.zt.life.modules.mainPart.basicInfo.model.ParamData">
+        SELECT a.*
+        FROM param_data a
+        inner join product_model b on b.id=a.product_id
+        where a.is_delete = 0
+          and b.is_delete = 0
+          and b.product_type = '5'
+        <if test="shipId!=null">
+            and a.ship_id = #{shipId}
+        </if>
+    </select>
 </mapper>
diff --git a/modules/mainPart/src/main/resources/mapper/basicInfo/XhProductModelDao.xml b/modules/mainPart/src/main/resources/mapper/basicInfo/XhProductModelDao.xml
index d111bc8..d4016bb 100644
--- a/modules/mainPart/src/main/resources/mapper/basicInfo/XhProductModelDao.xml
+++ b/modules/mainPart/src/main/resources/mapper/basicInfo/XhProductModelDao.xml
@@ -121,4 +121,12 @@
           and a.product_type &gt; 2
     </select>
 
+    <select id="getProductTree" resultType="com.zt.life.modules.mainPart.basicInfo.model.XhProductModel">
+        select a.*
+        from product_model a
+        where a.is_delete = 0
+        <if test="shipId!=null">
+            and a.ship_id = #{shipId}
+        </if>
+    </select>
 </mapper>
diff --git a/modules/mainPart/src/main/resources/mapper/taskReliability/ModelNodeAlgorithmDao.xml b/modules/mainPart/src/main/resources/mapper/taskReliability/ModelNodeAlgorithmDao.xml
index 6dc4b80..08d8a54 100644
--- a/modules/mainPart/src/main/resources/mapper/taskReliability/ModelNodeAlgorithmDao.xml
+++ b/modules/mainPart/src/main/resources/mapper/taskReliability/ModelNodeAlgorithmDao.xml
@@ -24,6 +24,15 @@
             and model_id=#{modelId}
     </select>
 
+    <select id="getRbdNodes" resultType="com.zt.life.modules.mainPart.taskReliability.model.ModelNodeAlgorithm">
+        select a.*
+        from model_node_algorithm a
+        where
+            a.is_delete = 0
+          and a.node_type = 'node'
+        order by a.model_id, a.data_id
+    </select>
+
     <update id="deleteByModelId">
         delete from model_node_algorithm where model_id=#{modelId}
     </update>
diff --git a/modules/mainPart/src/main/resources/mapper/taskReliability/OperatConditModelDao.xml b/modules/mainPart/src/main/resources/mapper/taskReliability/OperatConditModelDao.xml
index 900b8cb..84d252a 100644
--- a/modules/mainPart/src/main/resources/mapper/taskReliability/OperatConditModelDao.xml
+++ b/modules/mainPart/src/main/resources/mapper/taskReliability/OperatConditModelDao.xml
@@ -53,4 +53,18 @@
         group by model_id
     </select>
 
+    <select id="getGKModelTrees" resultType="com.zt.life.modules.mainPart.taskReliability.model.OperatConditModel">
+        select
+        a.*
+        FROM
+        operat_condit_model a
+        inner join operat_condit b on b.id=a.operat_condit_id
+        where
+        a.is_delete = 0
+        and b.is_delete = 0
+        <if test="productId!=null">
+            and b.product_id=${productId}
+        </if>
+        ORDER BY a.operat_condit_id, a.product_id
+    </select>
 </mapper>
diff --git a/modules/mainPart/src/main/resources/mapper/taskReliability/TaskBinoParamDao.xml b/modules/mainPart/src/main/resources/mapper/taskReliability/TaskBinoParamDao.xml
index 94eee5f..bab87f4 100644
--- a/modules/mainPart/src/main/resources/mapper/taskReliability/TaskBinoParamDao.xml
+++ b/modules/mainPart/src/main/resources/mapper/taskReliability/TaskBinoParamDao.xml
@@ -62,4 +62,14 @@
         order by a.phase_id, a.operat_condit_id, a.product_id
     </select>
 
+    <select id="getBinoParams" resultType="com.zt.life.modules.mainPart.taskReliability.model.TaskBinoParam">
+        select a.*
+        from
+            task_bino_param a
+        where
+            a.IS_DELETE=0
+        <if test="shipId!=null">
+            and a.task_id = #{taskModelId}
+        </if>
+    </select>
 </mapper>
diff --git a/modules/mainPart/src/main/resources/mapper/taskReliability/TaskDao.xml b/modules/mainPart/src/main/resources/mapper/taskReliability/TaskDao.xml
index b2b188c..0f7f89b 100644
--- a/modules/mainPart/src/main/resources/mapper/taskReliability/TaskDao.xml
+++ b/modules/mainPart/src/main/resources/mapper/taskReliability/TaskDao.xml
@@ -26,4 +26,58 @@
         and a.product_id=${productId}
     </select>
 
+    <select id="getTaskModels" resultType="com.zt.life.modules.mainPart.taskReliability.model.Task">
+        select
+            a.*
+        FROM
+            task a
+        where
+            a.is_delete = 0
+        <if test="productId!=null">
+            and a.product_id=${productId}
+        </if>
+        <if test="taskModelId!=null">
+            and a.id=${taskModelId}
+        </if>
+        ORDER BY a.task_sort
+    </select>
+    <select id="getTaskModelPhases" resultType="com.zt.life.modules.mainPart.taskReliability.model.TaskPhase">
+        select
+            b.*
+        FROM
+            task a
+            inner join task_phase b on b.task_id=a.id
+        where
+            a.is_delete = 0
+            and b.is_delete = 0
+        <if test="productId!=null">
+            and a.product_id=${productId}
+        </if>
+        <if test="taskModelId!=null">
+            and a.id=${taskModelId}
+        </if>
+        ORDER BY a.task_sort, b.phase_sort
+    </select>
+    <select id="getTaskModelPhaseModels" resultType="com.zt.life.modules.mainPart.taskReliability.model.TaskPhaseModel">
+        select
+            c.*
+        FROM
+            task a
+            inner join task_phase b on b.task_id=a.id
+            inner join task_phase_model c on c.phase_id=b.id
+            inner join operat_condit d on d.id=c.operat_condit_id
+        where
+            a.is_delete = 0
+            and b.is_delete = 0
+            and c.is_delete = 0
+            and d.is_delete = 0
+        <if test="productId!=null">
+            and a.product_id=${productId}
+            and d.product_id=${productId}
+        </if>
+        <if test="taskModelId!=null">
+            and a.id=${taskModelId}
+        </if>
+        ORDER BY a.task_sort, b.phase_sort
+    </select>
 </mapper>
diff --git a/starter/src/main/resources/application.yml b/starter/src/main/resources/application.yml
index 52ff66e..e529845 100644
--- a/starter/src/main/resources/application.yml
+++ b/starter/src/main/resources/application.yml
@@ -4,7 +4,7 @@
     uri-encoding: UTF-8
     max-threads: 1000
     min-spare-threads: 30
-  port: 8050
+  port: 8066
   servlet:
     context-path: /test-project
     session:
@@ -145,4 +145,8 @@
   tokenTimeout: 60
   # 鍗曚綅鍒嗛挓
 
-
+  reliaSimLib:
+    # 绠楁硶搴撳惎鍔ㄨ剼鏈紙鍏ㄨ矾寰勶級
+    mainPy: D:/relia_sim/main.py
+    # 绠楁硶搴撲豢鐪熺粨鏋滃瓨鏀炬牴鐩綍
+    resultHome: d:/relia_sim/sim_result

--
Gitblit v1.9.1