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/taskReliability/service/TaskService.java | 211 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 209 insertions(+), 2 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 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);
+ }
}
--
Gitblit v1.9.1