From 664db98c9e8595ce4dd636a27f480e3a08b81ff5 Mon Sep 17 00:00:00 2001
From: xyc <jc_xiong@hotmail.com>
Date: 星期五, 21 二月 2025 11:13:51 +0800
Subject: [PATCH] 新增可忽略的维修时间

---
 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/TaskService.java |  551 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 547 insertions(+), 4 deletions(-)

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 3a796df..0e5a5ad 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,22 +1,49 @@
 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.TaskModelCheckResultDto;
+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;
 
 
 /**
  * task
  *
- * @author zt generator 
+ * @author zt generator
  * @since 1.0.0 2024-03-15
  */
 @Service
-public class TaskService  extends BaseService<TaskDao, Task> {
+public class TaskService extends BaseService<TaskDao, Task> {
+
+    @Autowired
+    private OperatConditModelDao operatConditModelDao;
+    @Autowired
+    private ModelNodeAlgorithmDao modelNodeAlgorithmDao;
+    @Autowired
+    private ModelRbdDao modelRbdDao;
+    @Autowired
+    private AlgorithmDao algorithmDao;
+    @Autowired
+    private XhProductModelDao xhProductModelDao;
+    @Autowired
+    private ParamDataDao paramDataDao;
+    @Autowired
+    private TaskBinoParamDao taskBinoParamDao;
+    @Autowired
+    private ReliabilityAssessDao reliabilityAssessDao;
 
     /**
      * 鍒嗛〉鏌ヨ
@@ -37,4 +64,520 @@
         super.deleteLogic(ids);
     }
 
+    public List<Task> getTaskList(Long productId) {
+        return baseDao.getTaskList(productId);
+    }
+
+    /**
+     * 鍙潬鎬т豢鐪熻瘎浼帮細瀵逛换鍔″彲闈犳�фā鍨嬪強鍏跺弬鏁伴厤缃繘琛屽畬鏁存�ф鏌ワ紝骞舵寚鍑轰互涓�6绫婚敊璇細
+     * 1锛変换鍔℃�绘椂闀挎湭閰嶇疆
+     * 2锛夐樁娈垫椂闀挎湭閰嶇疆
+     * 3锛夊伐鍐垫椂闀挎湭閰嶇疆
+     * 4锛夊伐鍐垫ā鍨嬫爲涓嶅畬鏁�
+     * 5锛夊缓妯℃湭瀹屾垚
+     * 6锛夎澶囧弬鏁版湭閰嶇疆
+     * 鍙互瀵规墍鏈変换鍔℃ā鍨嬭繘琛屾鏌ワ紝涔熷彲浠ュ彧妫�鏌ュ叆鍙傛寚瀹氱殑浜у搧鑺傜偣涓嬬殑浠诲姟妯″瀷锛涘墠鑰呴�傚悎鍦ㄩ〉闈㈠垪琛ㄦ樉绀哄叏浣撳缓妯$姸鎬侊紝鍚庤�呴�傚悎瀵规煇浠诲姟杩涜浠跨湡鏃剁殑妫�鏌ャ��
+     *
+     * @param productId 浜у搧鑺傜偣ID锛堜竴鑸负鎬讳綋锛�
+     * @return 妫�鏌ュ嚭鐨勯敊璇殑List锛岄暱搴︿负0琛ㄧず娌℃湁閿欒锛屼笉浼氳繑鍥瀗ull
+     */
+    public List<TaskModelCheckResultDto> checkTaskModel(Long productId, Long taskId) {
+        List<TaskModelCheckResultDto> checkResult = new ArrayList<>();
+        List<XhProductModel> deviceUsedList = new ArrayList<>();    // 妫�鏌ュ璞℃ā鍨嬩腑浣跨敤鍒扮殑鎵�鏈夎澶�
+
+        // 1. 鑾峰彇鏁版嵁
+        // 1.1 鑾峰彇鎵�鏈変换鍔℃暟鎹甃ist
+        List<Task> taskList = baseDao.getTasks(productId, taskId);
+        // 1.2 鑾峰彇鎵�鏈変换鍔¢樁娈垫暟鎹甃ist
+        List<TaskPhase> taskPhaseList = baseDao.getTaskPhases(productId, taskId);
+        // 1.3 鑾峰彇鎵�鏈変换鍔″伐鍐垫暟鎹甃ist
+        List<TaskPhaseModel> taskPhaseModelList = baseDao.getTaskPhaseModels(productId, taskId);
+        // 1.4 鑾峰彇浜у搧缁撴瀯鏍戠粨鏋勬暟鎹�
+        List<XhProductModel> productTreeList = xhProductModelDao.getProductTree(productId);
+        // 1.5 鑾峰彇鎵�鏈夊伐鍐垫ā鍨嬫爲鏁版嵁List
+        List<OperatConditModel> gkModelList = operatConditModelDao.getGKModelTrees(productId);
+        // 1.6 鑾峰彇鎵�鏈塕BD鏁版嵁List
+        List<ModelRbd> modelRbdList = modelRbdDao.getListAll();
+        // 1.7 鑾峰彇鎵�鏈夋ā鍨嬪寘鍚殑鑺傜偣鏁版嵁
+        List<ModelNodeAlgorithm> rbdNodeList = modelNodeAlgorithmDao.getRbdNodes();
+        // 1.8 鑾峰彇璇ヨ埞鐨勬墍鏈夎澶囧弬鏁癓ist
+        List<ParamData> paramDataList = paramDataDao.getDeviceParams(productId);
+        // 1.8 鑾峰彇璇ヤ换鍔$殑浜岄」鍒嗗竷鍙傛暟List
+        List<TaskBinoParam> binoParamList = taskBinoParamDao.getBinoParams(taskId);
+
+        // 2. 妫�鏌ユ瘡涓换鍔℃ā鍨嬬殑鏁版嵁瀹屾暣鎬�
+        for (Task task : taskList) {
+            if (null == task.getTaskDuration() || 0.0 == task.getTaskDuration()) {
+                // 2.1 浠诲姟鎬绘椂闀挎湭閰嶇疆
+                setTaskModelCheckResult(task, null, null,
+                        null, null, null, null,
+                        TaskModelCheckResultDto.CATEGORY_TASK_TIME, checkResult);
+            }
+            List<TaskPhase> phases = taskPhaseList.stream().filter(item ->
+                    task.getId().equals(item.getTaskId())).collect(Collectors.toList());
+            for (TaskPhase phase : phases) {
+                if (null == phase.getPhaseDurationRate() || 0.0 == phase.getPhaseDurationRate()) {
+                    // 2.2 闃舵鏃堕暱鏈厤缃�
+                    setTaskModelCheckResult(task, phase, null,
+                            null, null, null, null,
+                            TaskModelCheckResultDto.CATEGORY_PHASE_TIME, checkResult);
+                }
+                List<TaskPhaseModel> phaseModels = taskPhaseModelList.stream().filter(item ->
+                        phase.getId().equals(item.getPhaseId()) && 0.0 != item.getOperatConditDurationRate()).
+                        collect(Collectors.toList());
+                if (phaseModels.size() <= 0) {
+                    // 2.3 宸ュ喌鏃堕暱鏈厤缃�
+                    setTaskModelCheckResult(task, phase, null,
+                            null, null, null, null,
+                            TaskModelCheckResultDto.CATEGORY_GK_TIME, checkResult);
+                } else {
+                    // 鏈夊伐鍐佃閫夌敤锛屾鏌ラ�夌敤鐨勫伐鍐�
+                    for (TaskPhaseModel taskPhaseModel : phaseModels) {
+                        List<OperatConditModel> gkModelTree = gkModelList.stream().filter(item ->
+                                taskPhaseModel.getOperatConditId().equals(item.getOperatConditId())).collect(Collectors.toList());
+                        if (gkModelTree.size() <= 0) {
+                            // 鏃犲伐鍐垫ā鍨嬫爲
+                            XhProductModel node = (XhProductModel) productTreeList.stream().filter(item ->
+                                    task.getProductId().equals(item.getId())).collect(Collectors.toList()).get(0);
+                            setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                    node, null, null, null,
+                                    TaskModelCheckResultDto.CATEGORY_GK_MODEL, checkResult);
+                        } else {
+                            // 鏈夊伐鍐垫ā鍨嬫爲锛屾鏌ュ叾瀹屾暣鎬�
+                            for (OperatConditModel gkModel : gkModelTree) {
+                                XhProductModel node = (XhProductModel) productTreeList.stream().filter(item ->
+                                        gkModel.getProductId().equals(item.getId())).collect(Collectors.toList()).get(0);
+                                if (isNodeInRbdOfParent(node, gkModelTree, rbdNodeList)) {
+                                    if (null == gkModel.getModelId()) {
+                                        // 宸ュ喌妯″瀷鏍戜笉瀹屾暣
+                                        setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                node, null, null, null,
+                                                TaskModelCheckResultDto.CATEGORY_GK_MODEL, checkResult);
+                                    } else {
+                                        List<ModelRbd> modelRbds = modelRbdList.stream().filter(item ->
+                                                gkModel.getModelId().equals(item.getId())).collect(Collectors.toList());
+                                        if (modelRbds.size() == 0) {
+                                            // 寤烘ā鏈畬鎴�
+                                            setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                    node, null, null, null,
+                                                    TaskModelCheckResultDto.CATEGORY_MODEL, checkResult);
+                                        } else {
+                                            if (!"宸插畬鎴�".equals(modelRbds.get(0).getModelState())) {
+                                                // 寤烘ā鏈畬鎴�
+                                                setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                        node, modelRbds.get(0), null, null,
+                                                        TaskModelCheckResultDto.CATEGORY_MODEL, checkResult);
+                                            } else {
+                                                List<ModelNodeAlgorithm> deviceNodes = rbdNodeList.stream().filter(item ->
+                                                        gkModel.getModelId().equals(item.getModelId())).collect(Collectors.toList());
+                                                for (ModelNodeAlgorithm deviceNode : deviceNodes) {
+                                                    XhProductModel device = (XhProductModel) productTreeList.stream().filter(item ->
+                                                            deviceNode.getDataId().equals(item.getId())).collect(Collectors.toList()).get(0);
+                                                    if ("5".equals(device.getProductType())) {
+                                                        // 璁惧
+                                                        List<ParamData> params = paramDataList.stream().filter(item ->
+                                                                deviceNode.getDataId().equals(item.getProductId())).collect(Collectors.toList());
+                                                        if (params.size() == 0) {
+                                                            // 璁惧鍙傛暟鏈厤缃�
+                                                            setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                    node, modelRbds.get(0), device, null,
+                                                                    TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                        } else {
+                                                            ParamData param = params.get(0);
+                                                            if (param.getReliabDistribType() == null) {
+                                                                setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                        node, modelRbds.get(0), device, "鍙潬鎬у垎甯冪被鍨�",
+                                                                        TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                            } else {
+                                                                if (param.getReliabDistribType() == 1) {
+                                                                    // 鎸囨暟鍒嗗竷
+                                                                    if (param.getTaskMtbcfRegulate() == null) {
+                                                                        setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                                node, modelRbds.get(0), device, "MTBCF",
+                                                                                TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                                    }
+                                                                }
+                                                                if (param.getReliabDistribType() == 2) {
+                                                                    // 濞佸竷灏斿垎甯�
+                                                                    if (param.getTaskMtbcfRegulate() == null) {
+                                                                        setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                                node, modelRbds.get(0), device, "MTBCF",
+                                                                                TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                                    }
+                                                                    if (param.getTaskMtbcfOtherParams2() == null) {
+                                                                        setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                                node, modelRbds.get(0), device, "MTBCF鍙傛暟2",
+                                                                                TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                                    }
+                                                                    if (param.getTaskMtbcfOtherParams3() == null) {
+                                                                        setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                                node, modelRbds.get(0), device, "MTBCF鍙傛暟3",
+                                                                                TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                                    }
+                                                                }
+                                                                if (param.getReliabDistribType() == 3) {
+                                                                    // 浜岄」鍒嗗竷
+                                                                    List<TaskBinoParam> binoParams = binoParamList.stream().filter(item ->
+                                                                            phase.getId().equals(item.getPhaseId()) &&
+                                                                                    taskPhaseModel.getOperatConditId().equals(item.getOperatConditId()) &&
+//                                                                                    modelRbds.get(0).getId().equals(item.getModelId()) &&
+                                                                                    device.getId().equals(item.getProductId())).collect(Collectors.toList());
+                                                                    if (binoParams.size() == 0) {
+                                                                        setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                                node, modelRbds.get(0), device, "浜岄」鍒嗗竷鍙傛暟",
+                                                                                TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                                    } else {
+                                                                        TaskBinoParam binoParam = binoParams.get(0);
+                                                                        if (binoParam.getSuccessRate() == null) {
+                                                                            setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                                    node, modelRbds.get(0), device, "鎴愬姛鐜�",
+                                                                                    TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                                        } else {
+                                                                            if (binoParam.getSuccessTimes() != null && binoParam.getSimulatTimes() == null) {
+                                                                                setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                                        node, modelRbds.get(0), device, "鎬绘鏁�",
+                                                                                        TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                                            }
+                                                                            if (binoParam.getSuccessTimes() == null && binoParam.getSimulatTimes() != null) {
+                                                                                setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                                        node, modelRbds.get(0), device, "鎴愬姛娆℃暟",
+                                                                                        TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                                            }
+                                                                        }
+                                                                    }
+                                                                }
+                                                                if (param.getRepairable() == null) {
+                                                                    setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                            node, modelRbds.get(0), device, "鏄惁鍙淮淇�",
+                                                                            TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                                } else {
+                                                                    if (1 == param.getRepairable()) {
+                                                                        // 鍙淮淇�
+                                                                        if (param.getRepairDistribType() == null) {
+                                                                            setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                                    node, modelRbds.get(0), device, "缁翠慨鍒嗗竷绫诲瀷",
+                                                                                    TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                                        }
+                                                                        if (param.getRepairDistribType() == 1) {
+                                                                            // 鎸囨暟鍒嗗竷
+                                                                            if (param.getRepairMttcr() == null) {
+                                                                                setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                                        node, modelRbds.get(0), device, "MTTCR",
+                                                                                        TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                                            }
+                                                                        }
+                                                                        if (param.getRepairDistribType() == 2) {
+                                                                            // 濞佸竷灏斿垎甯�
+                                                                            if (param.getRepairMttcr() == null) {
+                                                                                setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                                        node, modelRbds.get(0), device, "MTTCR",
+                                                                                        TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                                            }
+                                                                            if (param.getRepairMttcrOtherParams2() == null) {
+                                                                                setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                                        node, modelRbds.get(0), device, "MTTCR鍙傛暟2",
+                                                                                        TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                                            }
+                                                                            if (param.getRepairMttcrOtherParams3() == null) {
+                                                                                setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                                        node, modelRbds.get(0), device, "MTTCR鍙傛暟3",
+                                                                                        TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                                            }
+                                                                        }
+                                                                    }
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+
+            }
+        }
+        // 3. 杩斿洖妫�鏌ョ粨鏋�
+        return checkResult;
+
+    }
+
+    private boolean isNodeInRbdOfParent(XhProductModel node,
+                                        List<OperatConditModel> gkModelTree,
+                                        List<ModelNodeAlgorithm> rbdNodeList) {
+        boolean result = false;
+        List<OperatConditModel> parents = gkModelTree.stream().filter(item ->
+                item.getProductId().equals(node.getPid())).collect(Collectors.toList());
+        if (parents.size() > 0) {
+            OperatConditModel parent = parents.get(0);
+            if (parent.getModelId() != null) {
+                List<ModelNodeAlgorithm> nodes = rbdNodeList.stream().filter(item ->
+                        item.getModelId().equals(parent.getModelId()) && item.getDataId().equals(node.getId())).collect(Collectors.toList());
+                if (nodes.size() > 0) {
+                    result = true;
+                }
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 鍙潬鎬ц瘎瀹氾細瀵逛换鍔″彲闈犳�фā鍨嬨�佸弬鏁伴厤缃�佸彲闈犳�ц瘎瀹氭暟鎹繘琛屽畬鏁存�ф鏌ワ紝骞舵寚鍑轰互涓�11绫婚敊璇細
+     * 1锛変换鍔℃�绘椂闀挎湭閰嶇疆
+     * 2锛夌洰鍓嶄笉鏀寔澶氶樁娈�
+     * 3锛夐樁娈垫椂闀挎湭閰嶇疆
+     * 4锛夌洰鍓嶄笉鏀寔澶氬伐鍐�
+     * 5锛夊伐鍐垫椂闀挎湭閰嶇疆
+     * 6锛夊伐鍐垫ā鍨嬫爲涓嶅畬鏁�
+     * 7锛夊缓妯℃湭瀹屾垚
+     * 8锛夌洰鍓嶄笉鏀寔涓茶仈銆佸苟鑱斿拰琛ㄥ喅浠ュ鐨勬ā鍨�
+     * 9锛夎澶囧弬鏁版湭閰嶇疆
+     * 10锛夌洰鍓嶄笉鏀寔浜岄」鍒嗗竷鍜屾寚鏁板垎甯冧互澶栫殑鍒嗗竷绫诲瀷
+     * 11锛夎瘎瀹氭暟鎹湭褰曞叆
+     * 鍙互瀵规墍鏈変换鍔℃ā鍨嬭繘琛屾鏌ワ紝涔熷彲浠ュ彧妫�鏌ュ叆鍙傛寚瀹氱殑浜у搧鑺傜偣涓嬬殑浠诲姟妯″瀷锛涘墠鑰呴�傚悎鍦ㄩ〉闈㈠垪琛ㄦ樉绀哄叏浣撳缓妯$姸鎬侊紝鍚庤�呴�傚悎瀵规煇浠诲姟杩涜浠跨湡鏃剁殑妫�鏌ャ��
+     *
+     * @param productId 浜у搧鑺傜偣ID锛堜竴鑸负鎬讳綋锛�
+     * @return 妫�鏌ュ嚭鐨勯敊璇殑List锛岄暱搴︿负0琛ㄧず娌℃湁閿欒锛屼笉浼氳繑鍥瀗ull
+     */
+    public List<TaskModelCheckResultDto> checkTaskModelAssess(Long productId, Long taskId, Long itemId) {
+        List<TaskModelCheckResultDto> checkResult = new ArrayList<>();
+        List<XhProductModel> deviceUsedList = new ArrayList<>();    // 妫�鏌ュ璞℃ā鍨嬩腑浣跨敤鍒扮殑鎵�鏈夎澶�
+
+        // 1. 鑾峰彇鏁版嵁
+        // 1.1 鑾峰彇鎵�鏈変换鍔℃暟鎹甃ist
+        List<Task> taskList = baseDao.getTasks(productId, taskId);
+        // 1.2 鑾峰彇鎵�鏈変换鍔¢樁娈垫暟鎹甃ist
+        List<TaskPhase> taskPhaseList = baseDao.getTaskPhases(productId, taskId);
+        // 1.3 鑾峰彇鎵�鏈変换鍔″伐鍐垫暟鎹甃ist
+        List<TaskPhaseModel> taskPhaseModelList = baseDao.getTaskPhaseModels(productId, taskId);
+        // 1.4 鑾峰彇浜у搧缁撴瀯鏍戠粨鏋勬暟鎹�
+        List<XhProductModel> productTreeList = xhProductModelDao.getProductTree(productId);
+        // 1.5 鑾峰彇鎵�鏈夊伐鍐垫ā鍨嬫爲鏁版嵁List
+        List<OperatConditModel> gkModelList = operatConditModelDao.getGKModelTrees(productId);
+        // 1.6 鑾峰彇鎵�鏈塕BD鏁版嵁List
+        List<ModelRbd> modelRbdList = modelRbdDao.getListAll();
+        // 1.7 鑾峰彇鎵�鏈夋ā鍨嬪寘鍚殑鑺傜偣鏁版嵁
+        List<ModelNodeAlgorithm> rbdNodeList = modelNodeAlgorithmDao.getRbdNodes();
+        // 1.8 鑾峰彇璇ヨ埞鐨勬墍鏈夎澶囧弬鏁癓ist
+        List<ParamData> paramDataList = paramDataDao.getDeviceParams(productId);
+        // 1.8 鑾峰彇璇勫畾鏁版嵁List
+        List<ReliabilityAssess> assessDataList = reliabilityAssessDao.getProductList(productId, itemId);
+
+        // 2. 妫�鏌ユ瘡涓换鍔℃ā鍨嬬殑鏁版嵁瀹屾暣鎬�
+        for (Task task : taskList) {
+            if (null == task.getTaskDuration() || 0.0 == task.getTaskDuration()) {
+                // 2.1 浠诲姟鎬绘椂闀挎湭閰嶇疆
+                setTaskModelCheckResult(task, null, null,
+                        null, null, null, null,
+                        TaskModelCheckResultDto.CATEGORY_TASK_TIME, checkResult);
+            }
+            List<TaskPhase> phases = taskPhaseList.stream().filter(item ->
+                    task.getId().equals(item.getTaskId())).collect(Collectors.toList());
+            if (phases.size() > 1) {
+                // 2.2 鐩墠涓嶆敮鎸佸闃舵
+                setTaskModelCheckResult(task, null, null,
+                        null, null, null, null,
+                        TaskModelCheckResultDto.CATEGORY_MULTI_PHASE, checkResult);
+            } else if (phases.size() <= 0){
+                // 2.3 闃舵鏃堕暱鏈厤缃�
+                setTaskModelCheckResult(task, null, null,
+                        null, null, null, null,
+                        TaskModelCheckResultDto.CATEGORY_PHASE_TIME, checkResult);
+            } else {
+                TaskPhase phase = phases.get(0);
+                if (null == phase.getPhaseDurationRate() || 0.0 == phase.getPhaseDurationRate()) {
+                    // 2.3 闃舵鏃堕暱鏈厤缃�
+                    setTaskModelCheckResult(task, phase, null,
+                            null, null, null, null,
+                            TaskModelCheckResultDto.CATEGORY_PHASE_TIME, checkResult);
+                }
+                List<TaskPhaseModel> phaseModels = taskPhaseModelList.stream().filter(item ->
+                        phase.getId().equals(item.getPhaseId()) && 0.0 != item.getOperatConditDurationRate()).
+                        collect(Collectors.toList());
+                if (phaseModels.size() > 1) {
+                    // 2.4 鐩墠涓嶆敮鎸佸宸ュ喌
+                    setTaskModelCheckResult(task, phase, null,
+                            null, null, null, null,
+                            TaskModelCheckResultDto.CATEGORY_MULTI_GK, checkResult);
+                } else if (phaseModels.size() <= 0) {
+                    // 2.5 宸ュ喌鏃堕暱鏈厤缃�
+                    setTaskModelCheckResult(task, phase, null,
+                            null, null, null, null,
+                            TaskModelCheckResultDto.CATEGORY_GK_TIME, checkResult);
+                } else {
+                    // 鏈夊伐鍐佃閫夌敤锛屾鏌ラ�夌敤鐨勫伐鍐�
+                    TaskPhaseModel taskPhaseModel = phaseModels.get(0);
+                    List<OperatConditModel> gkModelTree = gkModelList.stream().filter(item ->
+                            taskPhaseModel.getOperatConditId().equals(item.getOperatConditId())).collect(Collectors.toList());
+                    if (gkModelTree.size() <= 0) {
+                        // 鏃犲伐鍐垫ā鍨嬫爲
+                        XhProductModel node = productTreeList.stream().filter(item ->
+                                task.getProductId().equals(item.getId())).collect(Collectors.toList()).get(0);
+                        // 2.6 宸ュ喌妯″瀷鏍戜笉瀹屾暣
+                        setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                node, null, null, null,
+                                TaskModelCheckResultDto.CATEGORY_GK_MODEL, checkResult);
+                    } else {
+                        // 鏈夊伐鍐垫ā鍨嬫爲锛屾鏌ュ叾瀹屾暣鎬�
+                        for (OperatConditModel gkModel : gkModelTree) {
+                            XhProductModel node = productTreeList.stream().filter(item ->
+                                    gkModel.getProductId().equals(item.getId())).collect(Collectors.toList()).get(0);
+                            if (isNodeInRbdOfParent(node, gkModelTree, rbdNodeList)) {
+                                if (null == gkModel.getModelId()) {
+                                    // 2.6 宸ュ喌妯″瀷鏍戜笉瀹屾暣
+                                    setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                            node, null, null, null,
+                                            TaskModelCheckResultDto.CATEGORY_GK_MODEL, checkResult);
+                                } else {
+                                    List<ModelRbd> modelRbds = modelRbdList.stream().filter(item ->
+                                            gkModel.getModelId().equals(item.getId())).collect(Collectors.toList());
+                                    if (modelRbds.size() == 0) {
+                                        // 2.7 寤烘ā鏈畬鎴�
+                                        setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                node, null, null, null,
+                                                TaskModelCheckResultDto.CATEGORY_MODEL, checkResult);
+                                    } else {
+                                        if (!"宸插畬鎴�".equals(modelRbds.get(0).getModelState())) {
+                                            // 2.7 寤烘ā鏈畬鎴�
+                                            setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                    node, modelRbds.get(0), null, null,
+                                                    TaskModelCheckResultDto.CATEGORY_MODEL, checkResult);
+                                        } else {
+                                            List<Algorithm> algorithmList = algorithmDao.getListByModelId(gkModel.getModelId());
+                                            if (hasNotSupportModel(algorithmList)) {
+                                                // 2.8 鐩墠涓嶆敮鎸佷覆鑱斻�佸苟鑱斿拰琛ㄥ喅浠ュ鐨勬ā鍨�
+                                                setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                        node, modelRbds.get(0), null, null,
+                                                        TaskModelCheckResultDto.CATEGORY_MODEL_NOT_SUPPORT, checkResult);
+                                            } else {
+                                                List<ModelNodeAlgorithm> deviceNodes = rbdNodeList.stream().filter(item ->
+                                                        gkModel.getModelId().equals(item.getModelId())).collect(Collectors.toList());
+                                                for (ModelNodeAlgorithm deviceNode : deviceNodes) {
+                                                    XhProductModel device = (XhProductModel) productTreeList.stream().filter(item ->
+                                                            deviceNode.getDataId().equals(item.getId())).collect(Collectors.toList()).get(0);
+                                                    if ("5".equals(device.getProductType())) {
+                                                        // 璁惧
+                                                        List<ParamData> params = paramDataList.stream().filter(item ->
+                                                                deviceNode.getDataId().equals(item.getProductId())).collect(Collectors.toList());
+                                                        if (params.size() == 0) {
+                                                            // 2.9 璁惧鍙傛暟鏈厤缃�
+                                                            setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                    node, modelRbds.get(0), device, null,
+                                                                    TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                        } else {
+                                                            ParamData param = params.get(0);
+                                                            if (param.getReliabDistribType() == null) {
+                                                                setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                        node, modelRbds.get(0), device, "鍙潬鎬у垎甯冪被鍨�",
+                                                                        TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
+                                                            } else {
+                                                                if (param.getReliabDistribType() != 1 && param.getReliabDistribType() != 3) {
+                                                                    // 2.10 鐩墠涓嶆敮鎸佷簩椤瑰垎甯冨拰鎸囨暟鍒嗗竷浠ュ鐨勫垎甯冪被鍨�
+                                                                    setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                            node, modelRbds.get(0), device, "鍙潬鎬у垎甯冪被鍨�",
+                                                                            TaskModelCheckResultDto.CATEGORY_DISTRIBUTION_NOT_SUPPORT, checkResult);
+                                                                } else {
+                                                                    List<ReliabilityAssess> assessDatas = assessDataList.stream().filter(item ->
+                                                                            item.getId().equals(device.getId())).collect(Collectors.toList());
+                                                                    if (assessDatas.size() ==0) {
+                                                                        // 2.11 璇勫畾鏁版嵁鏈綍鍏�
+                                                                        setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                                node, modelRbds.get(0), device, null,
+                                                                                TaskModelCheckResultDto.CATEGORY_NO_ASSESS_DATA, checkResult);
+                                                                    } else {
+                                                                        ReliabilityAssess assessData = assessDatas.get(0);
+                                                                        if (assessData.getFailNum() == null || assessData.getFailNum() == 0) {
+                                                                            // 2.11 璇勫畾鏁版嵁鏈綍鍏�
+                                                                            setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                                    node, modelRbds.get(0), device, "鏁呴殰娆℃暟",
+                                                                                    TaskModelCheckResultDto.CATEGORY_NO_ASSESS_DATA, checkResult);
+                                                                        }
+                                                                        if (param.getReliabDistribType() == 1 &&
+                                                                                (assessData.getRunTimes() == null || assessData.getRunTimes() == 0.0)) {
+                                                                            // 2.11 璇勫畾鏁版嵁鏈綍鍏�
+                                                                            setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                                    node, modelRbds.get(0), device, "璇曢獙鏃堕棿",
+                                                                                    TaskModelCheckResultDto.CATEGORY_NO_ASSESS_DATA, checkResult);
+                                                                        }
+                                                                        if (param.getReliabDistribType() == 3 &&
+                                                                                (assessData.getRunNum() == null || assessData.getRunNum() == 0.0)) {
+                                                                            // 2.11 璇勫畾鏁版嵁鏈綍鍏�
+                                                                            setTaskModelCheckResult(task, phase, taskPhaseModel,
+                                                                                    node, modelRbds.get(0), device, "璇曢獙娆℃暟",
+                                                                                    TaskModelCheckResultDto.CATEGORY_NO_ASSESS_DATA, checkResult);
+                                                                        }
+                                                                    }
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        // 3. 杩斿洖妫�鏌ョ粨鏋�
+        return checkResult;
+
+    }
+
+    private boolean hasNotSupportModel(List<Algorithm> algorithmList) {
+        boolean result = false;
+        for (Algorithm algorithm : algorithmList) {
+            if ("switch,bridge".contains(algorithm.getAlgorithmType())) {
+                result = true;
+                break;
+            }
+        }
+        return result;
+    }
+
+    private void setTaskModelCheckResult(Task task,
+                                         TaskPhase taskPhase,
+                                         TaskPhaseModel taskPhaseModel,
+                                         XhProductModel node,
+                                         ModelRbd model,
+                                         XhProductModel device,
+                                         String paramName,
+                                         String category,
+                                         List<TaskModelCheckResultDto> checkResult) {
+        TaskModelCheckResultDto result = new TaskModelCheckResultDto();
+        result.setCategory(category);
+        result.setProductId(task.getProductId());
+        result.setTaskId(task.getId());
+        result.setTaskName(task.getTaskName());
+        if (taskPhase != null) {
+            result.setTaskPhaseId(taskPhase.getId());
+            result.setTaskPhaseName(taskPhase.getPhaseName());
+        }
+        if (taskPhaseModel != null) {
+            result.setGkId(taskPhaseModel.getOperatConditId());
+            result.setGkName(taskPhaseModel.getOperatConditName());
+        }
+        if (node != null) {
+            result.setNodeId(node.getId());
+            result.setNodeName(node.getName());
+        }
+        if (model != null) {
+            result.setModelId(model.getId());
+            result.setModelName(model.getModelName());
+        }
+        if (device != null) {
+            result.setDeviceId(device.getId());
+            result.setDeviceName(device.getName());
+        }
+        result.setParamName(paramName);
+        checkResult.add(result);
+    }
 }

--
Gitblit v1.9.1