From a86c2eb2db34d2d350e5c2eb72bf6416ec89c0d2 Mon Sep 17 00:00:00 2001 From: xyc <jc_xiong@hotmail.com> Date: 星期二, 19 十一月 2024 11:43:03 +0800 Subject: [PATCH] 1)可靠性评定时新增模型检查处理; 2)获取任务二项分布参数时,去掉模型的匹配。 --- modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/TaskService.java | 599 ++++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 469 insertions(+), 130 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 c0d7577..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 @@ -22,11 +22,11 @@ /** * 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; @@ -35,11 +35,15 @@ @Autowired private ModelRbdDao modelRbdDao; @Autowired + private AlgorithmDao algorithmDao; + @Autowired private XhProductModelDao xhProductModelDao; @Autowired private ParamDataDao paramDataDao; @Autowired private TaskBinoParamDao taskBinoParamDao; + @Autowired + private ReliabilityAssessDao reliabilityAssessDao; /** * 鍒嗛〉鏌ヨ @@ -61,109 +65,235 @@ } public List<Task> getTaskList(Long productId) { - return baseDao.getTaskList(productId); + return baseDao.getTaskList(productId); } /** - * 瀵逛换鍔″彲闈犳�фā鍨嬪強鍏跺弬鏁伴厤缃繘琛屽畬鏁存�ф鏌ワ紝骞舵寚鍑轰互涓�5绫婚敊璇細 - * 0锛変换鍔℃�绘椂闀挎湭閰嶇疆 - * 1锛夐樁娈垫椂闀挎湭閰嶇疆 - * 2锛夊伐鍐垫椂闀挎湭閰嶇疆 - * 3锛夊伐鍐垫ā鍨嬫爲涓嶅畬鏁� - * 4锛夊缓妯℃湭瀹屾垚 - * 5锛夎澶囧弬鏁版湭閰嶇疆 + * 鍙潬鎬т豢鐪熻瘎浼帮細瀵逛换鍔″彲闈犳�фā鍨嬪強鍏跺弬鏁伴厤缃繘琛屽畬鏁存�ф鏌ワ紝骞舵寚鍑轰互涓�6绫婚敊璇細 + * 1锛変换鍔℃�绘椂闀挎湭閰嶇疆 + * 2锛夐樁娈垫椂闀挎湭閰嶇疆 + * 3锛夊伐鍐垫椂闀挎湭閰嶇疆 + * 4锛夊伐鍐垫ā鍨嬫爲涓嶅畬鏁� + * 5锛夊缓妯℃湭瀹屾垚 + * 6锛夎澶囧弬鏁版湭閰嶇疆 * 鍙互瀵规墍鏈変换鍔℃ā鍨嬭繘琛屾鏌ワ紝涔熷彲浠ュ彧妫�鏌ュ叆鍙傛寚瀹氱殑浜у搧鑺傜偣涓嬬殑浠诲姟妯″瀷锛涘墠鑰呴�傚悎鍦ㄩ〉闈㈠垪琛ㄦ樉绀哄叏浣撳缓妯$姸鎬侊紝鍚庤�呴�傚悎瀵规煇浠诲姟杩涜浠跨湡鏃剁殑妫�鏌ャ�� + * * @param productId 浜у搧鑺傜偣ID锛堜竴鑸负鎬讳綋锛� * @return 妫�鏌ュ嚭鐨勯敊璇殑List锛岄暱搴︿负0琛ㄧず娌℃湁閿欒锛屼笉浼氳繑鍥瀗ull */ - public List<TaskModelCheckResultDto> checkTaskModel(Long productId, Long taskModelId) { + public List<TaskModelCheckResultDto> checkTaskModel(Long productId, Long taskId) { List<TaskModelCheckResultDto> 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.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<ModelNodeAlgorithm> rbdNodeList = modelNodeAlgorithmDao.getRbdNodes(); - // 1.6 鑾峰彇鎵�鏈夊伐鍐垫ā鍨嬫爲鏁版嵁List + // 1.5 鑾峰彇鎵�鏈夊伐鍐垫ā鍨嬫爲鏁版嵁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 + // 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); - List<TaskBinoParam> binoParamList = taskBinoParamDao.getBinoParams(taskModelId); + // 1.8 鑾峰彇璇ヤ换鍔$殑浜岄」鍒嗗竷鍙傛暟List + List<TaskBinoParam> binoParamList = taskBinoParamDao.getBinoParams(taskId); - // 2. 妫�鏌ユ瘡涓换鍔℃ā鍨嬬殑鏁版嵁瀹屾暣鎬э紙閫掑綊锛� - for (Task taskModel : taskModelList) { - if (null == taskModel.getTaskDuration() || 0.0 == taskModel.getTaskDuration()) { + // 2. 妫�鏌ユ瘡涓换鍔℃ā鍨嬬殑鏁版嵁瀹屾暣鎬� + for (Task task : taskList) { + if (null == task.getTaskDuration() || 0.0 == task.getTaskDuration()) { // 2.1 浠诲姟鎬绘椂闀挎湭閰嶇疆 - setTaskModelCheckResult(taskModel, - null, - null, null, null, + setTaskModelCheckResult(task, null, null, + null, null, null, null, TaskModelCheckResultDto.CATEGORY_TASK_TIME, checkResult); } - List<TaskPhase> phases = taskModelPhaseList.stream().filter(item -> - taskModel.getId().equals(item.getTaskId())).collect(Collectors.toList()); + 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(taskModel, - phase, - null, null, null, + setTaskModelCheckResult(task, phase, null, + null, null, null, null, TaskModelCheckResultDto.CATEGORY_PHASE_TIME, checkResult); } - List<TaskPhaseModel> phaseModels = taskModelPhaseModelList.stream().filter(item -> - phase.getId().equals(item.getPhaseId())).collect(Collectors.toList()); + 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(taskModel, - phase, - null, null, null, + setTaskModelCheckResult(task, phase, null, + null, null, null, null, TaskModelCheckResultDto.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, - TaskModelCheckResultDto.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) { - // 鏃犲伐鍐垫ā鍨嬫爲鏍硅妭鐐癸紝鍗虫剰鍛崇潃鏃犲伐鍐垫ā鍨嬫爲 + // 鏈夊伐鍐佃閫夌敤锛屾鏌ラ�夌敤鐨勫伐鍐� + 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 -> - taskModel.getProductId().equals(item.getId())).collect(Collectors.toList()).get(0); - setTaskModelCheckResult(taskModel, - phase, - taskPhaseModel, - null, - node, - TaskModelCheckResultDto.CATEGORY_GK_MODEL, checkResult); - } else { - // 鏈夊伐鍐垫ā鍨嬫爲锛屾鏌ュ叾瀹屾暣鎬� -// checkGkModel(taskModel, phase, taskPhaseModel, gkModelTops.get(0), -// deviceUsedList, checkResult); + 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); + } + } + } + } + } + } + } + } + } + } + } + } } } } @@ -176,69 +306,278 @@ } - // 閫掑綊鍑芥暟 - private void checkGkModel(Task taskModel, - TaskPhase phase, - TaskPhaseModel taskPhaseModel, - OperatConditModel gkModelTreeTop, - List<OperatConditModel> gkModelList, - List<ModelNodeAlgorithm> rbdNodeList, - List<XhProductModel> productTreeList, - List<XhProductModel> deviceUsedList, - List<TaskModelCheckResultDto> 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, - TaskModelCheckResultDto.CATEGORY_GK_MODEL, 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; } - private void setTaskModelCheckResult(Task taskModel, - TaskPhase taskModelPhase, - TaskPhaseModel taskModelPhaseModel, - OperatConditModel gkModel, + /** + * 鍙潬鎬ц瘎瀹氾細瀵逛换鍔″彲闈犳�фā鍨嬨�佸弬鏁伴厤缃�佸彲闈犳�ц瘎瀹氭暟鎹繘琛屽畬鏁存�ф鏌ワ紝骞舵寚鍑轰互涓�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(taskModel.getProductId()); - result.setTaskModelId(taskModel.getId()); - result.setTaskModelName(taskModel.getTaskName()); - switch(category) { - case TaskModelCheckResultDto.CATEGORY_TASK_TIME: - break; - case TaskModelCheckResultDto.CATEGORY_PHASE_TIME: - result.setTaskModelPhaseId(taskModelPhase.getId()); - result.setTaskModelPhaseName(taskModelPhase.getPhaseName()); - break; - case TaskModelCheckResultDto.CATEGORY_GK_TIME: - result.setTaskModelPhaseId(taskModelPhase.getId()); - result.setTaskModelPhaseName(taskModelPhase.getPhaseName()); - if (null != taskModelPhaseModel) { - result.setGkId(taskModelPhaseModel.getOperatConditId()); - result.setGkName(taskModelPhaseModel.getOperatConditName()); - } - break; - case TaskModelCheckResultDto.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; + 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