From 5f7101c8de0603c876b70735a881caa2d8437130 Mon Sep 17 00:00:00 2001
From: wente <329538422@qq.com>
Date: 星期三, 30 十月 2024 12:12:20 +0800
Subject: [PATCH] 时序图
---
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ReliabilityAssessService.java | 697 +++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 616 insertions(+), 81 deletions(-)
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ReliabilityAssessService.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ReliabilityAssessService.java
index 3ab3536..b93cfba 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ReliabilityAssessService.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ReliabilityAssessService.java
@@ -1,8 +1,9 @@
package com.zt.life.modules.mainPart.taskReliability.service;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.zt.common.constant.Constant;
-import com.zt.common.db.query.QueryFilter;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.XML;
+import com.zt.common.exception.RenException;
import com.zt.common.service.BaseService;
import com.zt.common.servlet.Result;
import com.zt.common.utils.CacheUtils;
@@ -10,16 +11,13 @@
import com.zt.common.utils.TreeUtils;
import com.zt.common.utils.UUIDUtil;
import com.zt.core.shiro.ImportUtil;
+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.ProductImg;
import com.zt.life.modules.mainPart.basicInfo.model.XhProductModel;
-import com.zt.life.modules.mainPart.basicInfo.service.ParamDataService;
-import com.zt.life.modules.mainPart.sysPictureBase.service.SysPictureBaseService;
-import com.zt.life.modules.mainPart.taskReliability.dao.AssessResultDao;
-import com.zt.life.modules.mainPart.taskReliability.dao.ReliabilityAssessDao;
-import com.zt.life.modules.mainPart.taskReliability.dto.TaskModelCheckResultDto;
+import com.zt.life.modules.mainPart.taskReliability.dao.*;
import com.zt.life.modules.mainPart.taskReliability.model.*;
+import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
@@ -40,11 +38,9 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.StringWriter;
+import java.io.*;
import java.util.*;
+import java.util.stream.Collectors;
/**
@@ -62,18 +58,45 @@
private String redisHost;
@Value("${spring.redis.port}")
private String redisPort;
- @Value("${data.reliaSimLib.mainPy}")
- private String reliaSimMain;
- @Value("${data.reliaSimLib.resultHome}")
+ @Value("${data.assessLib.mainPy}")
+ private String assessMain;
+ @Value("${data.assessLib.resultHome}")
private String resultHome;
+ @Value("${data.assessLib.resultHome}")
+ private String path;
@Autowired
private RedisTemplate redisTemplate;
@Autowired
+ private TaskService taskService;
+ @Autowired
+ private SimulatAssessService simulatAssessService;
+ @Autowired
private AssessResultDao assessResultDao;
+ @Autowired
+ private XhProductModelDao xhProductModelDao;
+ @Autowired
+ private ParamDataDao paramDataDao;
+ @Autowired
+ private ModelNodeAlgorithmDao modelNodeAlgorithmDao;
+ @Autowired
+ private AlgorithmDao algorithmDao;
+ @Autowired
+ private OperatConditModelDao operatConditModelDao;
+ @Autowired
+ private ReliabilityAssessDao reliabilityAssessDao;
+
+ public List<ReliabilityAssess> page(AssessResult assessResult) {
+ Long assessId = baseDao.getAssessId(assessResult.getItemId(), assessResult.getProductId(), assessResult.getTaskId());
+ List<ReliabilityAssess> list = this.getAssess(assessResult, assessId);
+ if (list != null) {
+ list = TreeUtils.build(list);
+ }
+ return list;
+ }
@Transactional(rollbackFor = Exception.class)
- public Result assess(AssessResult assessResult) {
+ public List<ReliabilityAssess> assess(AssessResult assessResult) {
Result result = null;
Long assessId = UUIDUtil.generateId();
@@ -93,68 +116,156 @@
// 3. 璋冪敤绠楁硶搴擄紝杩涜璇勫畾璁$畻
result = callReliaAssessLib(assessResult);
+ if (result.getCode() != 0) throw new RenException(result.getMsg());
+
assessResultDao.insert(assessResult);
- return Result.ok();
+ List<ReliabilityAssess> list = this.getAssess(assessResult, assessId);
+ if (list != null) {
+ list = TreeUtils.build(list);
+ }
+ return list;
}
+ public List<ReliabilityAssess> getAssess(AssessResult assessResult, Long assessId) {
+ List<ReliabilityAssess> list = baseDao.getProductList(assessResult.getProductId(), assessResult.getItemId());
+
+ String filePath = path + "/" + assessId + "/" + "result.xml";
+ String xml;
+ InputStream in = null;
+
+ File file = new File(filePath);
+ if (file.exists()) {
+ try {
+ in = new FileInputStream(filePath);
+ xml = IOUtils.toString(in);
+ } catch (IOException e) {
+ throw new RenException("鏂囦欢涓嶅瓨鍦ㄦ垨鑰呮枃浠舵墦涓嶅紑");
+ } finally {
+ try {
+ in.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ JSONObject xmlJSONObj = XML.toJSONObject(xml);
+ //JSONObject jsonObject = xmlJSONObj.getJSONObject("Results");
+ JSONArray jsonArray = xmlJSONObj.getJSONObject("Results").getJSONArray("Result");
+ for (ReliabilityAssess assess : list) {
+ Double result1 = null;
+ for (int i = 0; i < jsonArray.size(); i++) {
+ String nameValue = jsonArray.getJSONObject(i).get("name").toString();
+ if (nameValue.contains(assess.getId().toString())) {
+ // 鑾峰彇瀵瑰簲鐨勫��
+ if (jsonArray.getJSONObject(i).get("value") instanceof Double){
+ result1 = (Double) jsonArray.getJSONObject(i).get("value");
+ }else{
+ String[] values = jsonArray.getJSONObject(i).get("value").toString().split(",");
+ result1 = Double.valueOf(values[1]);
+ }
+ break; // 濡傛灉鎵惧埌灏遍��鍑哄惊鐜�
+ }
+ }
+ if (result1 != null) {
+ result1 = Double.valueOf(new Formatter().format("%.2f", result1).toString());
+ }
+ assess.setAssessResult(result1);
+ }
+ } else {
+ list = null;
+ }
+
+ return list;
+ }
+
+
+ // 寤虹珛浜у搧缁撴瀯鏍戞椂锛岀浉鍚岀殑璁惧澶氫釜浣跨敤鏃讹紝澶氫釜璁惧浣跨敤鐩稿悓鐨勫悕绉般�傝繖鏍凤紝鍦ㄦ澶勯�氳繃鍚嶇О鏉ュ垽鏂槸鍚︽槸鐩稿悓鐨勮澶囷紝鐩稿悓鐨勮澶囷紝闇�瑕佹嬁鍑烘潵浣滀负瀛愭爣绛惧祵濂楄繘xml銆�
private void assembleModelXml(AssessResult assessResult) {
- String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
- "\n" +
- "<des name=\"General system\" gama=\"0.7\">\n" +
+/*
+ // 娴嬭瘯绠楁硶搴撶敤
+ String xml = "<des name=\"General system\" gama=\"0.7\">\n" +
" <tasks>\n" +
" <task duration=\"1\" model=\"1819282257303678978\"/>\n" +
" </tasks>\n" +
" <models>\n" +
" <model name=\"1819282257303678978\">\n" +
- " <logic name=\"绯荤粺\" type=\"series\" distType=\"ber\" NoE=\"10\" F=\"1\">\n" +
- " <logic name=\"鍒嗙郴缁�1\" type=\"series\" distType=\"exp\" ToE=\"68.0\" F=\"1\">\n" +
+ " <logic name=\"绯荤粺\" type=\"series\" >\n" +
+ " <logic name=\"鍒嗙郴缁�1\" type=\"series\" >\n" +
" <logic name=\"v1\" type=\"parallel\" nums=\"2\">\n" +
- " <node name=\"璁惧1\" distType=\"ber\" NoE=\"20\" F=\"1\"/>\n" +
+ " <node name=\"璁惧1\" distType=\"exp\" ToE=\"20\" F=\"1\"/>\n" +
" </logic>\n" +
- " <node name=\"璁惧2\" distType=\"exp\" ToE=\"62.0\" F=\"1\"/>\n" +
+ " <node name=\"璁惧2\" distType=\"exp\" ToE=\"0.3\" F=\"1\"/>\n" +
" </logic>\n" +
- " <logic name=\"鍒嗙郴缁�2\" type=\"series\" distType=\"ber\" NoE=\"14\" F=\"0\">\n" +
- " <node name=\"璁惧3\" distType=\"ber\" NoE=\"58\" F=\"0\"/>\n" +
+ " <logic name=\"鍒嗙郴缁�2\" type=\"series\" >\n" +
+ " <node name=\"璁惧3\" distType=\"exp\" ToE=\"0.2\" F=\"0\"/>\n" +
" <node name=\"璁惧4\" distType=\"ber\" NoE=\"18\" F=\"0\"/>\n" +
" <logic name=\"v2\" type=\"series\" nums=\"2\">\n" +
- " <node name=\"璁惧5\" distType=\"exp\" ToE=\"88.0\" F=\"1\"/>\n" +
+ " <node name=\"璁惧5\" distType=\"exp\" ToE=\"0.5,0,6\" F=\"1,2\"/>\n" +
" </logic> \n" +
- " <node name=\"璁惧6\" distType=\"ber\" NoE=\"71.52\" F=\"1\"/>\n" +
+ " <node name=\"璁惧6\" distType=\"exp\" ToE=\"0.3\" F=\"1\"/>\n" +
" </logic>\n" +
- " <logic name=\"鍒嗙郴缁�3\" type=\"vote\" distType=\"exp\" nums=\"3\" k=\"2\" ToE=\"68.0\" F=\"2\">\n" +
- " <node name=\"璁惧7\" distType=\"exp\" ToE=\"86\" F=\"1\"/>\n" +
+ " <logic name=\"鍒嗙郴缁�3\" type=\"vote\" nums=\"3\" k=\"2\" >\n" +
+ " <node name=\"璁惧7\" distType=\"exp\" ToE=\"87\" F=\"1\"/>\n" +
" </logic>\n" +
" </logic>\n" +
" </model>\n" +
" </models>\n" +
"</des>";
- assessResult.setXml(xml);
-/*
- Long productId = simulatAssess.getProductId();
+ String xml1 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "\n" +
+ "<des name=\"General system\" gama=\"0.6\">\n" +
+ " <tasks>\n" +
+ " <task duration=\"1.0\" model=\"1839217232446533633\"/>\n" +
+ " </tasks>\n" +
+ " <models>\n" +
+ " <model name=\"1839217232446533633\">\n" +
+ " <logic name=\"1727338143768926498\" real_name=\"璇勫鐢ㄨ埞A\" type=\"series\">\n" +
+ " <logic name=\"1727338125295232953\" real_name=\"閫氫俊绯荤粺\" name_path=\"閫氫俊绯荤粺\" type=\"series\">\n" +
+ " <logic name=\"v1\" type=\"parallel\" nums=\"2\">\n" +
+ " <node name=\"1727338347041863487,1727338104458428136\" real_name=\"瀵硅鏈篭" name_path=\"閫氫俊绯荤粺,瀵硅鏈篵\" distType=\"ber\" NoE=\"0,10\" F=\"0,1\"/>\n" +
+ " </logic>\n" +
+ " <node name=\"1727338109884317860\" real_name=\"浜ゆ崲鏈篭" name_path=\"閫氫俊绯荤粺,浜ゆ崲鏈篭" distType=\"exp\" ToE=\"10\" F=\"1\"/>\n" +
+ " </logic>\n" +
+ " <logic name=\"1727338132480394459\" real_name=\"绌鸿皟绯荤粺\" name_path=\"绌鸿皟绯荤粺\" type=\"vote\" k=\"2\" nums=\"3\">\n" +
+ " <node name=\"1727338148414415252,1727338894880570868,1727338666019181419\" real_name=\"绌鸿皟\" name_path=\"绌鸿皟绯荤粺,绌鸿皟c\" distType=\"exp\" ToE=\"88,87,86\" F=\"8,7,6\"/>\n" +
+ " </logic>\n" +
+ " <logic name=\"1727338199831104683\" real_name=\"鐢靛姏绯荤粺\" name_path=\"鐢靛姏绯荤粺\" type=\"series\">\n" +
+ " <node name=\"1727338129701280729\" real_name=\"鍙戠數鏈�2\" name_path=\"鐢靛姏绯荤粺,鍙戠數鏈�2\" distType=\"ber\" NoE=\"20\" F=\"2\"/>\n" +
+ " <node name=\"1727338865212183133\" real_name=\"鍙戠數鏈�1\" name_path=\"鐢靛姏绯荤粺,鍙戠數鏈�1\" distType=\"exp\" ToE=\"20\" F=\"2\"/>\n" +
+ " <node name=\"1727338589328410328\" real_name=\"閰嶇數鏉縗" name_path=\"鐢靛姏绯荤粺,閰嶇數鏉縗" distType=\"exp\" ToE=\"50\" F=\"5\"/>\n" +
+ " <logic name=\"v3\" type=\"series\" nums=\"2\">\n" +
+ " <node name=\"1727338101737644187,1727338554151292452\" real_name=\"钃勭數姹燶" name_path=\"鐢靛姏绯荤粺,钃勭數姹燼\" distType=\"exp\" ToE=\"30,40\" F=\"3,4\"/>\n" +
+ " </logic>\n" +
+ " </logic>\n" +
+ " </logic>\n" +
+ " </model>\n" +
+ " </models>\n" +
+ "</des>";
+ assessResult.setXml(xml1);
+*/
+ Long productId = assessResult.getProductId();
+ Long taskId = assessResult.getTaskId();
+ Long itemId = assessResult.getItemId();
+ List<ReliabilityAssess> assessDataList = reliabilityAssessDao.getProductList(productId, itemId);
+ Task task = taskService.get(taskId);
XhProductModel product = xhProductModelDao.getById(productId);
List<XhProductModel> productList = xhProductModelDao.getByShipId(productId);
List<ParamData> paramDataList = paramDataDao.getDeviceParams(productId);
- Long taskId = simulatAssess.getTaskModelId();
- Task task = taskService.get(taskId);
- List<TaskBinoParam> binoParams = taskBinoParamDao.getBinoParams(taskId);
// 1. 璁$畻鍚勪换鍔¢樁娈电殑杩愯鏃堕暱
- List<TaskPhase> taskPhases = calcTaskPhaseDuration(task);
+ List<TaskPhase> taskPhases = simulatAssessService.calcTaskPhaseDuration(task);
// 2. 璁$畻鍚勫伐鍐垫ā鍨嬬殑杩愯鏃堕暱
List<TaskPhaseModel> taskPhaseModelAll = new ArrayList<>();
for (TaskPhase taskPhase : taskPhases) {
- calcTaskPhaseModelDuration(taskPhase, taskPhaseModelAll);
+ simulatAssessService.calcTaskPhaseModelDuration(taskPhase, taskPhaseModelAll);
}
// 3. 灏嗗悇宸ュ喌妯″瀷閫掑綊鎷嗚В涓哄畬鏁寸殑鍙緵绠楁硶鍖呬豢鐪熻绠楃殑妯″瀷
try {
- List<FailureModel> failureModels = new ArrayList<>();
- List<RepairModel> repairModels = new ArrayList<>();
-
Document document = DocumentHelper.createDocument();
// 娣诲姞root鑺傜偣
Element root = document.addElement("des");
root.addAttribute("name", "General system");
+ root.addAttribute("gama", assessResult.getConfidence().toString());
addTasksTag(taskPhaseModelAll, root);
addModelsTag(taskId,
productId,
@@ -163,15 +274,8 @@
productList,
paramDataList,
taskPhaseModelAll,
- binoParams,
- root,
- failureModels, repairModels);
- addFailureModelsTag(failureModels, root);
- addRepairModelsTag(repairModels, root);
- saveSimulatAssessTaskPhaseModel(simulatAssess,
- task,
- taskPhases,
- taskPhaseModelAll);
+ assessDataList,
+ root);
// 杈撳嚭鏍煎紡鍖杧ml
XMLWriter xmlWriter = null;
@@ -181,17 +285,432 @@
StringWriter writer = new StringWriter();
xmlWriter = new XMLWriter(writer, format);
xmlWriter.write(document);
- simulatAssess.setXml(writer.toString());
+ assessResult.setXml(writer.toString());
} finally {
if (xmlWriter != null) xmlWriter.close();
}
- // XML瀛樼洏
- insert(simulatAssess);
} catch (Exception e) {
e.printStackTrace();
- throw new RuntimeException("缁勮绠楁硶搴撲豢鐪熻绠楃敤妯″瀷XML澶辫触: " + e.getMessage());
+ throw new RenException("缁勮绠楁硶搴撲豢鐪熻绠楃敤妯″瀷XML澶辫触: " + e.getMessage());
}
-*/
+ }
+
+ private void addModelsTag(Long taskId,
+ Long productId,
+ String productName,
+ String productNamePath,
+ List<XhProductModel> productList,
+ List<ParamData> paramDataList,
+ List<TaskPhaseModel> taskPhaseModelAll,
+ List<ReliabilityAssess> assessDataList,
+ Element root) {
+ Map<String, Integer> vCounter = new HashMap<>();
+ vCounter.put("v", 0);
+ Element modelsTag = root.addElement("models");
+ for (TaskPhaseModel taskPhaseModel : taskPhaseModelAll) {
+ Element modelTag = modelsTag.addElement("model");
+ modelTag.addAttribute("name", taskPhaseModel.getOperatConditId().toString());
+ List<OperatConditModel> gkModelsAssembled = operatConditModelDao.getGKModelAssembled(
+ taskPhaseModel.getOperatConditId());
+ OperatConditModel gkModelTop = gkModelsAssembled.stream().filter(item ->
+ productId.equals(item.getProductId())).collect(Collectors.toList()).get(0);
+ List<ModelNode> modelNodeAndVnodeList = modelNodeAlgorithmDao.getListByModelId(gkModelTop.getModelId());
+ List<Algorithm> algorithmList = algorithmDao.getListByModelId(gkModelTop.getModelId());
+ // 灏嗘ā鍨嬭浆鎹负DOM锛屾坊鍔犲埌model鏍囩
+ Algorithm endAlgo = algorithmList.stream().filter(item ->
+ "end".equals(item.getAlgorithmType())).collect(Collectors.toList()).get(0);
+ ModelNode computerNode = modelNodeAndVnodeList.stream().filter(item ->
+ endAlgo.getComputerList().equals(item.getId().toString())).collect(Collectors.toList()).get(0);
+ List<ModelNode> list = new ArrayList<>();
+ list.add(computerNode);
+ node2DOM(taskId,
+ taskPhaseModel,
+ gkModelTop.getModelId(),
+ productId,
+ productName,
+ productNamePath,
+ productList,
+ paramDataList,
+ gkModelsAssembled,
+ algorithmList,
+ modelNodeAndVnodeList,
+ assessDataList,
+ false,
+ null,
+ list,
+ null, null, null, null,
+ modelTag,
+ vCounter);
+ }
+ }
+
+ // 閫掑綊鍑芥暟
+ private void node2DOM(Long taskId,
+ TaskPhaseModel taskPhaseModel,
+ Long modelId,
+ Long productId,
+ String productName,
+ String productNamePath,
+ List<XhProductModel> productList,
+ List<ParamData> paramDataList,
+ List<OperatConditModel> gkModelsAssembled,
+ List<Algorithm> algorithmList,
+ List<ModelNode> modelNodeAndVnodeList,
+ List<ReliabilityAssess> assessDataList,
+ boolean sameNameGroup,
+ String sameNameGroupAlgorithmType,
+ List<ModelNode> nodeList,
+ Integer distType,
+ String NoE,
+ String ToE,
+ String F,
+ Element parent,
+ Map<String, Integer> vCounter) {
+ if (sameNameGroup) {
+ // 鐩稿悓璁惧鐨勫垎缁�
+ Long dataId = nodeList.get(0).getDataId();
+ XhProductModel product = productList.stream().filter(item ->
+ dataId.equals(item.getId())).collect(Collectors.toList()).get(0);
+ ParamData paramData = paramDataList.stream().filter(item ->
+ dataId.equals(item.getProductId())).collect(Collectors.toList()).get(0);
+ String NoEStr = "";
+ String ToEStr = "";
+ String FStr = "";
+// for (ModelNode node : nodeList) {
+ List<ReliabilityAssess> assessDatas = assessDataList.stream().filter(item ->
+ dataId.equals(item.getId())).collect(Collectors.toList());
+ NoEStr += ",";
+ ToEStr += ",";
+ FStr += ",";
+ if (assessDatas.size() > 0) {
+ NoEStr += assessDatas.get(0).getRunNum() != null ? assessDatas.get(0).getRunNum().toString() : "0";
+ ToEStr += assessDatas.get(0).getRunTimes() != null ? assessDatas.get(0).getRunTimes().toString() : "0";
+ FStr += assessDatas.get(0).getFailNum() != null ? assessDatas.get(0).getFailNum().toString() : "0";
+ }
+// }
+ NoEStr = NoEStr.substring(1);
+ ToEStr = ToEStr.substring(1);
+ FStr = FStr.substring(1);
+
+ int counter = vCounter.get("v");
+ counter++;
+ vCounter.put("v", counter);
+ Element sameNameGroupTag = parent.addElement("logic");
+ sameNameGroupTag.addAttribute("name",
+ "v"+counter);
+ if ("parallel".equals(sameNameGroupAlgorithmType)) {
+ sameNameGroupTag.addAttribute("type", "parallel");
+ } else {
+ sameNameGroupTag.addAttribute("type", "series");
+ }
+ sameNameGroupTag.addAttribute("nums", String.valueOf(nodeList.size()));
+ Element nodeTag = sameNameGroupTag.addElement("node");
+ nodeTag.addAttribute("name",
+ nodeList.stream().map(item -> item.getDataId().toString()+"-"+item.getDeviceNo().toString()).
+ collect(Collectors.joining(",")));
+ nodeTag.addAttribute("real_name", product.getSameSbName());
+ nodeTag.addAttribute("name_path", product.getNamePath());
+ if (paramData.getReliabDistribType() == 3) {
+ // 浜岄」鍒嗗竷
+ nodeTag.addAttribute("distType", "ber");
+ nodeTag.addAttribute("NoE", NoEStr);
+ } else {
+ nodeTag.addAttribute("distType", "exp");
+ nodeTag.addAttribute("ToE", ToEStr);
+ }
+ nodeTag.addAttribute("F", FStr);
+ } else {
+ // 涓嶅悓璁惧锛堝彧鏈�1涓級
+ ModelNode node = nodeList.get(0);
+ if ("node".equals(node.getNodeType())) {
+ Long dataId = node.getDataId();
+ XhProductModel product = productList.stream().filter(item ->
+ dataId.equals(item.getId())).collect(Collectors.toList()).get(0);
+ if ("3,4,10".contains(product.getProductType())) {
+ // 绯荤粺銆佸垎绯荤粺銆佽櫄鍗曞厓
+ OperatConditModel gkModel = gkModelsAssembled.stream().filter(item ->
+ dataId.equals(item.getProductId())).collect(Collectors.toList()).get(0);
+ List<Algorithm> algorithmListSub = algorithmDao.getListByModelId(gkModel.getModelId());
+ List<ModelNode> modelNodeAndVnodeListSub = modelNodeAlgorithmDao.getListByModelId(gkModel.getModelId());
+ Algorithm endAlgo = algorithmListSub.stream().filter(item ->
+ "end".equals(item.getAlgorithmType())).collect(Collectors.toList()).get(0);
+ ModelNode computerNode = modelNodeAndVnodeListSub.stream().filter(item ->
+ endAlgo.getComputerList().equals(item.getId().toString())).collect(Collectors.toList()).get(0);
+ List<ModelNode> list = new ArrayList<>();
+ list.add(computerNode);
+ node2DOM(taskId,
+ taskPhaseModel,
+ gkModel.getModelId(),
+ product.getId(),
+ product.getName(),
+ product.getNamePath(),
+ productList,
+ paramDataList,
+ gkModelsAssembled,
+ algorithmListSub,
+ modelNodeAndVnodeListSub,
+ assessDataList,
+ false,
+ null,
+ list,
+ null, null, null, null,
+ parent,
+ vCounter);
+ } else if ("5".equals(product.getProductType())) {
+ // 璁惧
+ Element nodeTag = parent.addElement("node");
+ nodeTag.addAttribute("name", dataId.toString());
+ nodeTag.addAttribute("real_name", product.getName());
+ nodeTag.addAttribute("name_path", product.getNamePath());
+ if (distType == 3) {
+ // 浜岄」鍒嗗竷
+ nodeTag.addAttribute("distType", "ber");
+ nodeTag.addAttribute("NoE", NoE);
+ } else {
+ nodeTag.addAttribute("distType", "exp");
+ nodeTag.addAttribute("ToE", ToE);
+ }
+ nodeTag.addAttribute("F", F);
+ }
+ } else {
+ // vnode锛堣繍绠楄妭鐐癸級
+ Algorithm algo = algorithmList.stream().filter(item ->
+ node.getId().equals(item.getId())).collect(Collectors.toList()).get(0);
+ if (!"series,parallel,vote".contains(algo.getAlgorithmType())) {
+ throw new RenException("鍙潬鎬ц瘎瀹氬姛鑳界洰鍓嶅彧鏀寔涓茶仈銆佸苟鑱斿拰琛ㄥ喅銆�");
+ }
+
+ Element element = parent.addElement("logic");
+ if (null == productId) {
+ element.addAttribute("name", algo.getId().toString());
+ } else {
+ element.addAttribute("name", productId.toString());
+ element.addAttribute("real_name", productName);
+ element.addAttribute("name_path", productNamePath);
+ }
+ element.addAttribute("type", algo.getAlgorithmType());
+
+ String[] computerNodeListStr = algo.getComputerList().split(",");
+
+ List<Integer> distTypes = new ArrayList<>();
+ List<ModelNode> nodes = new ArrayList<>();
+ List<ReliabilityAssess> assessDatas = new ArrayList<>();
+ for (String nodeStr : computerNodeListStr) {
+ ModelNode mn = modelNodeAndVnodeList.stream().filter(item ->
+ nodeStr.equals(item.getId().toString())).collect(Collectors.toList()).get(0);
+ nodes.add(mn);
+ if (mn.getDataId() == null) {
+ distTypes.add(null);
+ assessDatas.add(null);
+ } else {
+ List<ParamData> paramDatas1 = paramDataList.stream().filter(item ->
+ mn.getDataId().equals(item.getProductId())).collect(Collectors.toList());
+ if (paramDatas1.size() > 0) {
+ distTypes.add(paramDatas1.get(0).getReliabDistribType());
+ } else {
+ distTypes.add(null);
+ }
+ List<ReliabilityAssess> assessDatas1 = assessDataList.stream().filter(item ->
+ mn.getDataId().equals(item.getId())).collect(Collectors.toList());
+ if (assessDatas1.size() > 0) {
+ assessDatas.add(assessDatas1.get(0));
+ } else {
+ assessDatas.add(null);
+ }
+ }
+ }
+
+ // 鏍规嵁鍚岀被璁惧鍚嶇О杩涜鍒嗙粍澶勭悊锛堟敼涓烘牴鎹甦ataId杩涜鍒嗙粍锛�
+ Map<String, List<ModelNode>> groupByNameMap = new HashMap<>();
+ for (String nodeStr : computerNodeListStr) {
+ ModelNode mn = modelNodeAndVnodeList.stream().filter(item ->
+ nodeStr.equals(item.getId().toString())).collect(Collectors.toList()).get(0);
+ String sameSbName = null;
+ if (mn.getDataId() != null) {
+// XhProductModel product = productList.stream().filter(item ->
+// mn.getDataId().equals(item.getId())).collect(Collectors.toList()).get(0);
+// if ("5".equals(product.getProductType())) sameSbName = product.getSameSbName();
+ sameSbName = mn.getDataId().toString();
+ }
+ if (sameSbName == null) {
+ List<ModelNode> list = new ArrayList<>();
+ list.add(mn);
+ groupByNameMap.put(mn.getId().toString(), list);
+ } else {
+ if (groupByNameMap.containsKey(sameSbName)) {
+ groupByNameMap.get(sameSbName).add(mn);
+ } else {
+ List<ModelNode> list = new ArrayList<>();
+ list.add(mn);
+ groupByNameMap.put(sameSbName, list);
+ }
+ }
+ }
+
+ // 琛ㄥ喅
+ if ("vote".equals(algo.getAlgorithmType())) {
+ element.addAttribute("k", algo.getVoteNum().toString());
+ if (groupByNameMap.size() == 1) {
+ // 鍙湁1涓垎缁勶紝璇存槑璁惧閮界浉鍚�
+ element.addAttribute("nums", String.valueOf(computerNodeListStr.length));
+ Element nodeTag = element.addElement("node");
+ createNodeTagSameDevice(nodes, distTypes, assessDatas, nodeTag);
+ } else {
+ // 涓嶅叏鏄浉鍚岃澶囷紝鎸変笉鍚岃澶囧鐞�
+ for (int i = 0; i < computerNodeListStr.length; i++) {
+ List<ModelNode> list = new ArrayList<>();
+ list.add(nodes.get(i));
+ String NoEStr = "0";
+ String ToEStr = "0";
+ String FStr = "0";
+ if (assessDatas.get(i) != null) {
+ NoEStr = assessDatas.get(i).getRunNum() != null ? assessDatas.get(i).getRunNum().toString() : "0";
+ ToEStr = assessDatas.get(i).getRunTimes() != null ? assessDatas.get(i).getRunTimes().toString() : "0";
+ FStr = assessDatas.get(i).getFailNum() != null ? assessDatas.get(i).getFailNum().toString() : "0";
+ }
+ node2DOM(taskId,
+ taskPhaseModel,
+ modelId,
+ null,
+ null,
+ null,
+ productList,
+ paramDataList,
+ gkModelsAssembled,
+ algorithmList,
+ modelNodeAndVnodeList,
+ assessDataList,
+ false,
+ null,
+ list,
+ distTypes.get(i), NoEStr, ToEStr, FStr,
+ element,
+ vCounter);
+ }
+ }
+ return;
+ }
+
+ if ("parallel".equals(algo.getAlgorithmType())) {
+ if (groupByNameMap.size() == 1) {
+ // 鍙湁1涓垎缁勶紝璇存槑璁惧閮界浉鍚�
+ element.addAttribute("nums", String.valueOf(computerNodeListStr.length));
+ Element nodeTag = element.addElement("node");
+ createNodeTagSameDevice(nodes, distTypes, assessDatas, nodeTag);
+ return;
+ }
+ }
+
+ Iterator<String> iterator = groupByNameMap.keySet().iterator();
+ while (iterator.hasNext()) {
+ String name = iterator.next();
+ List<ModelNode> list = groupByNameMap.get(name);
+ if (list.size() > 1) {
+ // 鐩稿悓鍚嶇О鐨勮澶�
+ node2DOM(taskId,
+ taskPhaseModel,
+ modelId,
+ null,
+ null,
+ null,
+ productList,
+ paramDataList,
+ gkModelsAssembled,
+ algorithmList,
+ modelNodeAndVnodeList,
+ assessDataList,
+ true,
+ algo.getAlgorithmType(),
+ list,
+ null, null, null, null,
+ element,
+ vCounter);
+ } else {
+ // 涓嶅悓鍚嶇О鑺傜偣锛�1涓妭鐐癸級
+ Integer distTypeParam = null;
+ String NoEStr = null;
+ String ToEStr = null;
+ String FStr = null;
+ ModelNode oneNode = list.get(0);
+ if (oneNode.getDataId() != null) {
+ List<ParamData> paramDatas = paramDataList.stream().filter(item ->
+ oneNode.getDataId().equals(item.getProductId())).collect(Collectors.toList());
+ if (paramDatas.size() > 0) {
+ distTypeParam = paramDatas.get(0).getReliabDistribType();
+ }
+ List<ReliabilityAssess> assessDatas1 = assessDataList.stream().filter(item ->
+ oneNode.getDataId().equals(item.getId())).collect(Collectors.toList());
+ if (assessDatas1.size() > 0) {
+ NoEStr = assessDatas1.get(0).getRunNum() != null ? assessDatas1.get(0).getRunNum().toString() : "0";
+ ToEStr = assessDatas1.get(0).getRunTimes() != null ? assessDatas1.get(0).getRunTimes().toString() : "0";
+ FStr = assessDatas1.get(0).getFailNum() != null ? assessDatas1.get(0).getFailNum().toString() : "0";
+ }
+ }
+ node2DOM(taskId,
+ taskPhaseModel,
+ modelId,
+ null,
+ null,
+ null,
+ productList,
+ paramDataList,
+ gkModelsAssembled,
+ algorithmList,
+ modelNodeAndVnodeList,
+ assessDataList,
+ false,
+ null,
+ list,
+ distTypeParam, NoEStr, ToEStr, FStr,
+ element,
+ vCounter);
+ }
+ }
+ }
+ }
+ }
+
+ private void createNodeTagSameDevice(List<ModelNode> nodes,
+ List<Integer> distTypes,
+ List<ReliabilityAssess> assessDatas,
+ Element nodeTag) {
+ String NoEStr = "";
+ String ToEStr = "";
+ String FStr = "";
+ for (ReliabilityAssess assessData : assessDatas) {
+ if (assessData != null) {
+ NoEStr += "," + (assessData.getRunNum() != null ? assessData.getRunNum().toString() : "0");
+ ToEStr += "," + (assessData.getRunTimes() != null ? assessData.getRunTimes().toString() : "0");
+ FStr += "," + (assessData.getFailNum() != null ? assessData.getFailNum().toString() : "0");
+ break;
+ }
+ }
+ NoEStr = NoEStr.substring(1);
+ ToEStr = ToEStr.substring(1);
+ FStr = FStr.substring(1);
+
+ nodeTag.addAttribute("name",
+ nodes.stream().map(item -> item.getDataId().toString()+"-"+item.getDeviceNo().toString()).
+ collect(Collectors.joining(",")));
+ if (distTypes.get(0) == 3) {
+ // 浜岄」鍒嗗竷
+ nodeTag.addAttribute("distType", "ber");
+ nodeTag.addAttribute("NoE", NoEStr);
+ } else {
+ nodeTag.addAttribute("distType", "exp");
+ nodeTag.addAttribute("ToE", ToEStr);
+ }
+ nodeTag.addAttribute("F", FStr);
+ }
+
+ private void addTasksTag(List<TaskPhaseModel> taskPhaseModelAll,
+ Element root) {
+ Element tasksTag = root.addElement("tasks");
+ for (TaskPhaseModel taskPhaseModel : taskPhaseModelAll) {
+ Element taskTag = tasksTag.addElement("task");
+ taskTag.addAttribute("duration", String.valueOf(taskPhaseModel.getOperatConditDuration()));
+ taskTag.addAttribute("model", taskPhaseModel.getOperatConditId().toString());
+ }
}
private Result callReliaAssessLib(AssessResult assessResult) {
@@ -199,10 +718,14 @@
InputStream is = null;
BufferedReader br = null;
try {
- setParamToRedis(assessResult);
+ try {
+ setParamToRedis(assessResult);
+ } catch (Exception e) {
+ throw new RenException("璁块棶Redis澶辫触銆傝妫�鏌edis鏄惁宸插惎鍔ㄣ��");
+ }
Process process = null;
- String command = "python " + reliaSimMain;
+ String command = "python " + assessMain;
command += " -ip " + redisHost + " -port " + redisPort;
command += " -taskType " + RELIA_ASSESS_TASK_TYPE_SIMULATION + " -taskId " + assessResult.getId().toString();
logger.info("cmd鍛戒护涓猴細" + command);
@@ -211,7 +734,7 @@
} else if (System.getProperty("os.name").toLowerCase().indexOf("linux") > -1) {
process = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", command});
} else {
- throw new Exception("鏆備笉鏀寔璇ユ搷浣滅郴缁燂紝杩涜鍚姩绠楁硶搴撹绠楋紒");
+ throw new RenException("鏆備笉鏀寔璇ユ搷浣滅郴缁燂紝杩涜鍚姩绠楁硶搴撹绠楋紒");
}
is = process.getInputStream();
// 浠ュ懡浠よ鏂瑰紡璋冪敤绠楁硶搴撴椂锛屾帴鍙g害瀹氳繑鍥炵殑缁撴灉鏄痷tf-8缂栫爜
@@ -222,17 +745,22 @@
if (line != null) {
ReliaSimLibResult rtn = com.alibaba.fastjson.JSONObject.parseObject(line, ReliaSimLibResult.class);
if ("0".equals(rtn.getCode())) {
- logger.info("鍚姩绠楁硶搴撴垚鍔熴��");
- result = Result.ok();
+ logger.info("鍚姩鍙潬鎬ц瘎瀹氱畻娉曞簱鎴愬姛銆�");
+ if (exitCode ==0) {
+ deleteAssessInfoInRedis(assessResult.getId());
+ result = Result.ok();
+ } else {
+ result = Result.error("鍙潬鎬ц瘎瀹氱畻娉曞簱璁$畻澶辫触: exitCode=" + exitCode);
+ }
} else {
String errorMsg = rtn.getErrorMsg();
- throw new RuntimeException("鍚姩绠楁硶搴撳け璐�: errorMsg=" + errorMsg);
+ throw new RenException("鍚姩鍙潬鎬ц瘎瀹氱畻娉曞簱澶辫触: errorMsg=" + errorMsg);
}
}
} catch (Exception e) {
logger.error("鍚姩鍙潬鎬ц瘎瀹氱畻娉曞簱鏃跺彂鐢烢xception锛�", e);
e.printStackTrace();
- result = Result.error(e.getMessage());
+ throw new RenException("鍚姩鍙潬鎬ц瘎瀹氱畻娉曞簱澶辫触: errorMsg=" + e.getMessage());
} finally {
if (is != null) {
try {
@@ -263,8 +791,8 @@
redisTemplate.opsForValue().set(key, jsonObject.toJSONString());
}
- public void deleteAssessInfoInRedis(Long simId) {
- redisTemplate.delete(simId.toString() + RELIA_ASSESS_TASK_TYPE_SIMULATION);
+ public void deleteAssessInfoInRedis(Long assessId) {
+ redisTemplate.delete(assessId.toString() + RELIA_ASSESS_TASK_TYPE_SIMULATION);
}
@@ -308,7 +836,6 @@
for (int i = 0; i < sheets; i++) {
Sheet sheet = workbook.getSheetAt(i);
int num = sheet.getLastRowNum(); // 涓�鍏辨湁澶氬皯琛�
- String sheetName = sheet.getSheetName(); //鑾峰彇褰撳墠sheet鍚嶇О
for (int j = 1; j <= num; j++) {
CacheUtils.put(progressId, "speed", CommonUtils.getPercent(j, num));
CacheUtils.put(progressId, "msg", "鍏�" + num + "琛岋紝宸插畬鎴愮" + j + "琛�");
@@ -316,16 +843,28 @@
row1 = j;
String pattern = "yyyy-MM-dd";
Row row = sheet.getRow(row1);
- // String sort = ImportUtil.getCellValue(row, 0, pattern); //搴忓彿
String name = ImportUtil.getCellValue(row, 1, pattern); //鑺傜偣鍚嶇О
String type = ImportUtil.getCellValue(row, 2, pattern);//鑺傜偣绫诲瀷
- String runNum = ImportUtil.getCellValue(row, 3, pattern); //杩愯鏃堕暱
- String runTime = ImportUtil.getCellValue(row, 4, pattern); //杩愯娆℃暟
- String failNum = ImportUtil.getCellValue(row, 5, pattern); //澶辫触娆℃暟
+ String runNumStr = ImportUtil.getCellValue(row, 3, pattern); //杩愯鏃堕暱
+ String runTimeStr = ImportUtil.getCellValue(row, 4, pattern); //杩愯娆℃暟
+ String failNumStr = ImportUtil.getCellValue(row, 5, pattern); //澶辫触娆℃暟
if (StringUtils.isBlank(name) || StringUtils.isBlank(type))
continue;
+
+ Integer runNum = 0;
+ Double runTime = 0.0;
+ Integer failNum = 0;
+ if (StringUtils.isNotBlank(runNumStr)) {
+ runNum = Integer.valueOf(runNumStr);
+ }
+ if (StringUtils.isNotBlank(runTimeStr)) {
+ runTime = Double.valueOf(runTimeStr);
+ }
+ if (StringUtils.isNotBlank(failNumStr)) {
+ failNum = Integer.valueOf(failNumStr);
+ }
Long productId = null;
if (type.equals("鎬讳綋")) {
@@ -334,7 +873,7 @@
fxtPath = "";
sbPath = "";
productId = shipId;
- }else {
+ } else {
if (type.equals("绯荤粺")) {
if (StringUtils.isNotBlank(shipPath)) {
path = xtPath = name;
@@ -364,16 +903,11 @@
}
}
-
-
ReliabilityAssess assess = new ReliabilityAssess();
- assess.setFailNum(Integer.valueOf(failNum));
- if (StringUtils.isNotBlank(runNum)){
- assess.setRunNum(Integer.valueOf(runNum));
- }
- if (StringUtils.isNotBlank(runTime)){
- assess.setRunTimes(Double.valueOf(runTime));
- }
+ assess.setFailNum(failNum);
+ assess.setRunNum(runNum);
+ assess.setRunTimes(runTime);
+
assess.setItemId(itemId);
assess.setProductId(productId);
this.insert(assess);
@@ -386,7 +920,7 @@
}
Date nowDate = new Date();
- String msg = "浜у搧妯″瀷瀵煎叆鏃堕棿锛�" + CommonUtils.getDatePoor(nowDate, beginDate) + "\r\n";
+ String msg = "瀵煎叆鏃堕棿锛�" + CommonUtils.getDatePoor(nowDate, beginDate) + "\r\n";
System.out.println(msg);
suc = sum - err;
map = new HashMap<>();
@@ -401,4 +935,5 @@
public List<AssessItem> getAssessDataList(Long productId) {
return baseDao.getAssessDataList(productId);
}
+
}
--
Gitblit v1.9.1