From f770e36d5ec735f53df298445a6940daa20d0bfa Mon Sep 17 00:00:00 2001
From: xyc <jc_xiong@hotmail.com>
Date: 星期一, 18 十一月 2024 11:12:05 +0800
Subject: [PATCH] 修复bug:1)一键排版时不要自动保存; 2)无论设备数量多少,deviceNo统一改成从1开始。
---
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java | 299 ++++++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 211 insertions(+), 88 deletions(-)
diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java
index b32a5ea..989600b 100644
--- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java
+++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java
@@ -5,11 +5,13 @@
import cn.hutool.json.XML;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.spire.pdf.tables.table.convert.Convert;
+import com.zt.common.db.query.QueryFilter;
import com.zt.common.exception.RenException;
import com.zt.common.service.BaseService;
import com.zt.common.servlet.Result;
import com.zt.common.utils.TreeUtils;
import com.zt.common.utils.UUIDUtil;
+import com.zt.life.export.service.DownloadService;
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;
@@ -24,8 +26,10 @@
import com.zt.life.modules.mainPart.taskReliability.dto.TaskPhaseConstraintDto;
import com.zt.life.modules.mainPart.taskReliability.model.*;
import com.zt.life.modules.mainPart.utils.GetStringSpace;
+import com.zt.life.modules.mainPart.utils.OSUtils.ProcessUtils;
import io.swagger.models.auth.In;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
@@ -43,6 +47,9 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.nio.file.FileAlreadyExistsException;
import java.util.*;
@@ -114,7 +121,6 @@
Map<Integer, String> templetsStrMap2 = new HashMap<>();
private JSONObject xmlJSONObj;
-
/**
* 鍒嗛〉鏌ヨ
@@ -332,7 +338,8 @@
List<TimeDiagramStatusDto> statusDtoListNew = new ArrayList<>();
while (statusDtoListOld.size() > 0) {
- statusDtoListOld.stream().sorted(Comparator.comparing(TimeDiagramStatusDto::getX1)).collect(Collectors.toList());
+ //statusDtoListOld.stream().sorted(Comparator.comparing(TimeDiagramStatusDto::getX1)).collect(Collectors.toList());
+ statusDtoListOld.sort(Comparator.comparing(TimeDiagramStatusDto::getX1, Comparator.naturalOrder()));
TimeDiagramStatusDto nextStatusDto = statusDtoListOld.get(0);
if (statusDtoListNew.size() == 0) {
statusDtoListNew.add(nextStatusDto);
@@ -352,12 +359,14 @@
currentStatusDto.setX2(nextStatusDto.getX1());
statusDtoListNew.add(new TimeDiagramStatusDto(nextStatusDto.getX1(), nextStatusDto.getX2(), nextStatusDto.getStatus()));
} else if (nextStatusDto.getX1() > currentStatusDto.getX1() && nextStatusDto.getX2() < currentStatusDto.getX2()) {
- currentStatusDto.setX2(nextStatusDto.getX1());
statusDtoListNew.add(new TimeDiagramStatusDto(nextStatusDto.getX1(), nextStatusDto.getX2(), nextStatusDto.getStatus()));
statusDtoListOld.add(new TimeDiagramStatusDto(nextStatusDto.getX2(), currentStatusDto.getX2(), currentStatusDto.getStatus()));
+ currentStatusDto.setX2(nextStatusDto.getX1());
}
} else {
- if (nextStatusDto.getX2() > currentStatusDto.getX2()) {
+ if (nextStatusDto.getX1() >= currentStatusDto.getX2()) {
+ statusDtoListNew.add(new TimeDiagramStatusDto(nextStatusDto.getX1(), nextStatusDto.getX2(), nextStatusDto.getStatus()));
+ } else if (nextStatusDto.getX2() > currentStatusDto.getX2()) {
statusDtoListOld.add(new TimeDiagramStatusDto(currentStatusDto.getX2(), nextStatusDto.getX2(), nextStatusDto.getStatus()));
}
}
@@ -548,13 +557,36 @@
}
public List<ProductStatusDto> getStatusData(Long productId, Long taskId) {
- List<ProductStatusDto> childList = this.getProduct(productId, taskId);
+
+ List<ProductStatusDto> dbList = this.getProduct(productId, taskId);
+ List<ProductStatusDto> childList = new ArrayList<>();
+ for (ProductStatusDto item : dbList) {
+ if (item.getSameSbNum() > 1) {
+ for (int i = 1; i <= item.getSameSbNum(); i++) {
+ try {
+ ProductStatusDto newRow = item.clone();
+ newRow.setDeviceNo(i);
+ newRow.setName(item.getName() + "-" + i);
+ newRow.setDataId(item.getId().toString() + "-" + i);
+ childList.add(newRow);
+ } catch (CloneNotSupportedException e) {
+ e.printStackTrace();
+ }
+ }
+ } else {
+ item.setDeviceNo(0);
+ item.setDataId(item.getId().toString());
+ childList.add(item);
+ }
+ }
+ childList.sort(Comparator.comparing(ProductStatusDto::getDeviceNo, Comparator.naturalOrder()));
for (ProductStatusDto item : childList) {
- JSONArray jsonArray = dialgramJson.getJSONArray(String.valueOf(item.getId()));
+ JSONArray jsonArray = dialgramJson.getJSONArray(item.getDataId());
if (jsonArray != null) {
this.processJSONArray(jsonArray, item, taskId);
}
}
+ childList.removeIf(item -> item.getStatusList().size() == 0);
return childList;
}
@@ -629,7 +661,6 @@
return result;
}
- @Transactional(rollbackFor = Exception.class)
public Boolean simulate(SimulatAssess simulatAssess) {
Boolean result = false;
// 2. 缁勮渚涚畻娉曞簱浠跨湡鐨勬ā鍨媥ml
@@ -639,6 +670,11 @@
result = callReliaSimLib(simulatAssess);
return result;
+ }
+
+ public List<SimulatAssess> process(QueryFilter queryFilter) {
+ List<SimulatAssess> page = baseDao.getProcessList(queryFilter.getParams());
+ return queryFilter.getPageList(page);
}
private Boolean callReliaSimLib(SimulatAssess simulatAssess) {
@@ -664,6 +700,8 @@
} else {
throw new RenException("鏆備笉鏀寔璇ユ搷浣滅郴缁燂紝杩涜鍚姩绠楁硶搴撹绠楋紒");
}
+ long pid = ProcessUtils.getProcessId(process);
+ logger.info("绠楁硶搴揚ID锛�" + pid);
is = process.getInputStream();
// 浠ュ懡浠よ鏂瑰紡璋冪敤绠楁硶搴撴椂锛屾帴鍙g害瀹氳繑鍥炵殑缁撴灉鏄痷tf-8缂栫爜
br = new BufferedReader(new InputStreamReader(is, "utf-8"));
@@ -674,6 +712,8 @@
ReliaSimLibResult rtn = com.alibaba.fastjson.JSONObject.parseObject(line, ReliaSimLibResult.class);
if ("0".equals(rtn.getCode())) {
logger.info("鍚姩鍙潬鎬т豢鐪熻瘎浼扮畻娉曞簱鎴愬姛銆�");
+ newProcess(simulatAssess, pid, command);
+ update(simulatAssess);
result = true;
} else {
String errorMsg = rtn.getErrorMsg();
@@ -702,6 +742,14 @@
}
return result;
+ }
+
+ public void newProcess(SimulatAssess simulatAssess, long pid, String command) {
+ simulatAssess.setPid(pid);
+ simulatAssess.setCommandLine(command);
+ simulatAssess.setProcessIsAlive(true);
+ simulatAssess.setProcessStartTime(new Date());
+ simulatAssess.setProgress(0);
}
private void setParamToRedis(SimulatAssess simulatAssess) {
@@ -1038,8 +1086,8 @@
// 璁惧
Integer deviceNo = node.getDeviceNo();
Element nodeTag = parent.addElement("node");
- nodeTag.addAttribute("name", deviceNo == 0 ? dataId.toString() : dataId.toString()+"-"+deviceNo);
- nodeTag.addAttribute("real_name", deviceNo == 0 ? product.getName() : product.getName()+"-"+deviceNo);
+ nodeTag.addAttribute("name", dataId.toString() + "-" + deviceNo);
+ nodeTag.addAttribute("real_name", product.getName() + "-" + deviceNo);
nodeTag.addAttribute("name_path", product.getNamePath());
nodeTag.addAttribute("type", "node");
@@ -1167,11 +1215,13 @@
return failureModel;
}
- private boolean isRepairDirac(boolean repairDiracFlag, TaskPhaseModel taskPhaseModel, Long productId) {
+ private boolean isRepairDirac(Boolean repairDiracFlag, TaskPhaseModel taskPhaseModel, Long productId) {
boolean result = false;
- if (repairDiracFlag) {
- if (taskPhaseModel.getPhaseConstraints() != null) {
+ if (repairDiracFlag != null && repairDiracFlag) {
+ if (taskPhaseModel.getPhaseConstraints() == null) {
+ result = true;
+ } else {
List<TaskPhaseConstraintDto> list = taskPhaseModel.getPhaseConstraints().stream().filter(item ->
productId.equals(item.getProductId())).collect(Collectors.toList());
if (list.size() == 0) {
@@ -1186,6 +1236,7 @@
private RepairModel createRepairModelDirac(double time) {
RepairModel repairModel = new RepairModel();
repairModel.setId(UUIDUtil.generateId());
+ repairModel.setType(RepairModel.TYPE_DIRAC);
repairModel.setParam1(0);
return repairModel;
}
@@ -1214,8 +1265,7 @@
public List<WeakDto> getReliabilityWeakness(Long fzId, Long taskId, Long productId) {
String filePath = path + "/" + fzId + "/" + "result.xml";
- List<WeakDto> list = new ArrayList<>();
- Map<Long, WeakDto> map = new HashMap<>();
+
String xml;
InputStream in = null;
try {
@@ -1235,50 +1285,46 @@
}
- List<WeakDto> productList = baseDao.getProductList(taskId, productId);
- for (WeakDto dto : productList) {
- map.put(dto.getId(), dto);
- }
+ Map<Long, WeakDto> map = new HashMap<>();
JSONObject xmlJSONObj = XML.toJSONObject(xml);
JSONArray jsonArray = xmlJSONObj.getJSONObject("ResultNodes").getJSONArray("ResultNode");
for (int i = 0; i < jsonArray.size(); i++) {
WeakDto data = new WeakDto();
Long productId1;
- Object nameValue = jsonArray.getJSONObject(i).get("name");
- if (nameValue instanceof Long) {
- productId1 = (Long) nameValue;
- if (map.get(productId1) != null) {
- WeakDto weakDto = map.get(productId1);
- Double mtbfTime = null;
+ String nameValue = jsonArray.getJSONObject(i).get("name").toString();
+ if (StringUtils.isNotBlank(nameValue)) {
+ productId1 = Convert.toLong(nameValue.split("-")[0]);
- Double mtbf = (Double) jsonArray.getJSONObject(i).get("mttf");
- Double mttr = (Double) jsonArray.getJSONObject(i).get("mttr");
- Double msr = (Double) jsonArray.getJSONObject(i).get("msr");
-
- data.setMtbf(mtbf);
- data.setMttr(mttr);
- data.setMsr(msr);
-
- if (weakDto != null) {
- data.setId(weakDto.getId());
- data.setSort(weakDto.getSort());
- data.setPid(weakDto.getPid());
- data.setName(weakDto.getName());
- data.setProductType(weakDto.getProductType());
- data.setTimeRate(weakDto.getTimeRate());
- mtbfTime = mtbf / weakDto.getTimeRate();
+ Double mtbf = (Double) jsonArray.getJSONObject(i).get("mttf");
+ Double mttr = (Double) jsonArray.getJSONObject(i).get("mttr");
+ Double msr = (Double) jsonArray.getJSONObject(i).get("msr");
+ WeakDto weakDto = new WeakDto();
+ weakDto.setId(productId1);
+ weakDto.setMtbf(mtbf);
+ weakDto.setMttr(mttr);
+ weakDto.setMsr(msr);
+ if (map.get(productId1) == null) {
+ map.put(productId1, weakDto);
+ } else {
+ if (weakDto.getMsr() < map.get(productId1).getMsr()) {
+ map.put(productId1, weakDto);
}
-
- data.setMtbfTime(mtbfTime);
- data.setIsWeak(0);
-
- list.add(data);
}
}
}
+ List<WeakDto> productList = baseDao.getProductList(taskId, productId);
+ for (WeakDto item : productList) {
+ WeakDto dto = map.get(item.getId());
+ item.setMtbf(dto.getMtbf());
+ item.setMttr(dto.getMttr());
+ item.setMsr(dto.getMsr());
+ item.setMtbfTime(dto.getMtbf() / item.getTimeRate());
+ item.setIsWeak(0);
+ }
+
List<WeakDto> treeList = new ArrayList<>();
- if (list.size() > 0) {
- treeList = TreeUtils.build(list);
+ if (productList.size() > 0) {
+ treeList = TreeUtils.build(productList);
this.getIsweak(treeList.get(0).getChildren());
}
@@ -1336,7 +1382,7 @@
simulatAssessList.add(simulatAssess);
result = simulateChecK(simulatAssess);
- if (result!=null){
+ if (result != null) {
simulatResult.setType("errorList");
simulatResult.setErrList(result);
return simulatResult;
@@ -1380,7 +1426,7 @@
}
}
xmlJSONObj = XML.toJSONObject(xml);
- simulatAssess.setShowProductId(simulatAssess.getProductId());
+ simulatAssess.setShowProductId(simulatAssess.getProductId().toString());
SimulaDataDto data = this.getResultData(simulatAssess);
return data;
}
@@ -1392,50 +1438,47 @@
samplPeriod = samplPeriod / 60;
JSONArray jsonArray = xmlJSONObj.getJSONObject("ResultNodes").getJSONArray("ResultNode");
for (int i = 0; i < jsonArray.size(); i++) {
- Long productId = null;
- Object nameValue = jsonArray.getJSONObject(i).get("name");
- if (nameValue instanceof Long) {
- productId = (Long) nameValue;
- if (productId.equals(simulatAssess.getShowProductId())) {
- Object object = jsonArray.getJSONObject(i).get("phase");
- List<Double> doubleArray = new ArrayList<>();
- List<Double> xList = new ArrayList<>();
- String availability = null;
- if (object instanceof JSONArray) {
- JSONArray jsonArray2 = jsonArray.getJSONObject(i).getJSONArray("phase");
- for (int j = 0; j < jsonArray2.size(); j++) {
- if (availability != null) {
- availability = availability + " " + jsonArray2.getJSONObject(j).get("availability");
- } else {
- availability = (String) jsonArray2.getJSONObject(j).get("availability");
- }
+ String nameValue = jsonArray.getJSONObject(i).get("name").toString();
+ if (nameValue.equals(simulatAssess.getShowProductId())) {
+ Object object = jsonArray.getJSONObject(i).get("phase");
+ List<Double> doubleArray = new ArrayList<>();
+ List<Double> xList = new ArrayList<>();
+ String availability = null;
+ if (object instanceof JSONArray) {
+ JSONArray jsonArray2 = jsonArray.getJSONObject(i).getJSONArray("phase");
+ for (int j = 0; j < jsonArray2.size(); j++) {
+ if (availability != null) {
+ availability = availability + " " + jsonArray2.getJSONObject(j).get("availability");
+ } else {
+ availability = (String) jsonArray2.getJSONObject(j).get("availability");
}
- } else {
- JSONObject jsonObject2 = jsonArray.getJSONObject(i).getJSONObject("phase");
- availability = (String) jsonObject2.get("availability");
}
-
- String[] arr = availability.split(" ");
- // 閬嶅巻瀛愬瓧绗︿覆鏁扮粍锛屽皢姣忎釜鍏冪礌杞崲涓篸ouble骞跺瓨鍌ㄥ埌double鏁扮粍涓�
- Double j = 0.0;
- for (int a = 0; a < arr.length; a++) {
- j = samplPeriod + j;
- doubleArray.add(Double.parseDouble(arr[a]));
- xList.add(j);
- }
-
- param.setXData(xList);
- param.setYData(doubleArray);
- Double mtbf = (Double) jsonArray.getJSONObject(i).get("mttf");
- Double mttr = (Double) jsonArray.getJSONObject(i).get("mttr");
- Double msr = (Double) jsonArray.getJSONObject(i).get("msr");
- data.setMtbf(mtbf);
- data.setMttr(mttr);
- data.setMsr(msr);
+ } else {
+ JSONObject jsonObject2 = jsonArray.getJSONObject(i).getJSONObject("phase");
+ availability = (String) jsonObject2.get("availability");
}
- data.setCurveParam(param);
+
+ String[] arr = availability.split(" ");
+ // 閬嶅巻瀛愬瓧绗︿覆鏁扮粍锛屽皢姣忎釜鍏冪礌杞崲涓篸ouble骞跺瓨鍌ㄥ埌double鏁扮粍涓�
+ Double j = 0.0;
+ for (int a = 0; a < arr.length; a++) {
+ j = samplPeriod + j;
+ doubleArray.add(Double.parseDouble(arr[a]));
+ xList.add(j);
+ }
+
+ param.setXData(xList);
+ param.setYData(doubleArray);
+ Double mtbf = (Double) jsonArray.getJSONObject(i).get("mttf");
+ Double mttr = (Double) jsonArray.getJSONObject(i).get("mttr");
+ Double msr = (Double) jsonArray.getJSONObject(i).get("msr");
+ data.setMtbf(mtbf);
+ data.setMttr(mttr);
+ data.setMsr(msr);
}
+ data.setCurveParam(param);
}
+
return data;
}
@@ -1568,4 +1611,84 @@
dto.setCurveList(curveList);
return dto;
}
+
+ public void downloadXml(HttpServletRequest request, HttpServletResponse response, String type, Long id, Integer xml) {
+ if (type.equals("fz")) {
+ if (xml == 1) {
+ SimulatAssess simulatAssess = this.get(id);
+ String xml1 = simulatAssess.getXml();
+ writeToTxt(request, response, xml1, "浠跨湡杈撳叆");
+ } else {
+ String filePath = path + "/" + id + "/" + "result.xml";
+ String xml1;
+ InputStream in = null;
+
+ try {
+ in = new FileInputStream(filePath);
+ xml1 = IOUtils.toString(in);
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new RenException("鏂囦欢涓嶅瓨鍦ㄦ垨鑰呮枃浠舵墦涓嶅紑");
+ } finally {
+ try {
+ if (in != null) {
+ in.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ writeToTxt(request, response, xml1, "浠跨湡杈撳嚭");
+ }
+ } else if (type.equals("sxt")) {
+ if (xml == 1) {
+ String filePath = path + "/" + id + "/" + "status.json";
+ ObjectMapper mapper = new ObjectMapper();
+ String jsonStr = null;
+ try {
+ // 浣跨敤 ObjectMapper 鐨� readValue 鏂规硶锛屽皢鏂囦欢涓殑 JSON 鏁版嵁杞崲涓轰竴涓� Java 瀵硅薄
+ // 杩欓噷浣跨敤 Object 绫讳綔涓烘硾鍨嬪弬鏁帮紝琛ㄧず浠绘剰绫诲瀷鐨勫璞�
+ Object obj = mapper.readValue(new File(filePath), Object.class);
+ // 浣跨敤 ObjectMapper 鐨� writeValueAsString 鏂规硶锛屽皢 Java 瀵硅薄杞崲涓� JSON 瀛楃涓�
+ jsonStr = mapper.writeValueAsString(obj);
+
+ } catch (IOException e) {
+ // 澶勭悊寮傚父
+ e.printStackTrace();
+ throw new RenException("鏂囦欢涓嶅瓨鍦ㄦ垨鑰呮枃浠舵墦涓嶅紑");
+ }
+ writeToTxt(request, response, jsonStr, "鏃跺簭鍥捐緭鍏�");
+ } else {
+ SimulatAssess simulatAssess = this.get(id);
+ TimeDiagramDto timeDiagram = getTimeDiagram(simulatAssess.getProductId(), simulatAssess.getTaskModelId(), simulatAssess.getId(), 1200, 5);
+ String xml2 = timeDiagram.getDiagramJson();
+ writeToTxt(request, response, xml2, "鏃跺簭鍥捐緭鍑�");
+ }
+ }
+ }
+
+ public void writeToTxt(HttpServletRequest request, HttpServletResponse response, String jsonString, String name) {//璁剧疆鍝嶅簲鐨勫瓧绗﹂泦
+ //璁剧疆鍝嶅簲鍐呭鐨勭被鍨�
+ BufferedOutputStream buff = null;
+ ServletOutputStream outStr = null;
+ try {
+ response.setContentType("text/plain;charset=UTF-8");
+ String encodedFilename = DownloadService.getNameEncoder(request, name + "xml.txt");
+ response.addHeader("Content-Disposition", "attachment;filename=" + encodedFilename);
+ outStr = response.getOutputStream();
+ buff = new BufferedOutputStream(outStr);
+ buff.write(jsonString.getBytes("UTF-8"));
+ buff.flush();
+ buff.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ buff.close();
+ outStr.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
}
--
Gitblit v1.9.1