From a8ce806c8a81f685fa9fafaa453820197ced9961 Mon Sep 17 00:00:00 2001 From: jinlin <jinlin> Date: 星期二, 10 十二月 2024 10:39:39 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java | 210 +++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 166 insertions(+), 44 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 b574501..a38a8d1 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,6 +26,7 @@ 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; @@ -44,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.*; @@ -115,7 +121,6 @@ Map<Integer, String> templetsStrMap2 = new HashMap<>(); private JSONObject xmlJSONObj; - /** * 鍒嗛〉鏌ヨ @@ -252,7 +257,7 @@ JsonUtils2.setJsonValueByPath(textJson, "id".split("/"), UUIDUtil.generateId().toString()); JsonUtils2.setJsonValueByPath(textJson, "attrs/label/textWrap/text".split("/"), dto.getName()); JsonUtils2.setJsonValueByPath(textJson, "position/x".split("/"), 20); - JsonUtils2.setJsonValueByPath(textJson, "position/y".split("/"), y - 15); + JsonUtils2.setJsonValueByPath(textJson, "position/y".split("/"), y + 10); jsonArray3.add(textJson); } @@ -354,9 +359,9 @@ 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.getX1() >= currentStatusDto.getX2()) { @@ -556,22 +561,28 @@ 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(); + int sameNum = item.getSameSbNum() == null ? 1 : item.getSameSbNum(); + for (int i = 1; i <= sameNum; i++) { + try { + ProductStatusDto newRow = null; + if (sameNum > 1) { + newRow = item.clone(); + } else + newRow = item; + if ("5".equals(newRow.getProductType())) { newRow.setDeviceNo(i); - newRow.setName(item.getName() + "-" + i); newRow.setDataId(item.getId().toString() + "-" + i); - childList.add(newRow); - } catch (CloneNotSupportedException e) { - e.printStackTrace(); + if (i > 1) { + newRow.setName(item.getName() + "-" + i); + } + } else { + newRow.setDeviceNo(0); + newRow.setDataId(item.getId().toString()); } + 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())); @@ -581,6 +592,7 @@ this.processJSONArray(jsonArray, item, taskId); } } + childList.removeIf(item -> item.getStatusList().size() == 0); return childList; } @@ -595,7 +607,7 @@ if (jsonArray3.size() == 0) { StatusDto statusDto = new StatusDto(); statusDto.setTimes(phaseModelList.get(j).getGkDuration()); - statusDto.setStatus(""); + statusDto.setStatus("M"); productStatusDto.getStatusList().add(statusDto); } else { for (int a = 0; a < jsonArray3.size(); a++) { @@ -609,6 +621,9 @@ } } if (status != null || times != null) { + if (StringUtils.isBlank(status)) { + status = "M"; + } StatusDto statusDto = new StatusDto(); statusDto.setTimes(times); statusDto.setStatus(status); @@ -655,7 +670,6 @@ return result; } - @Transactional(rollbackFor = Exception.class) public Boolean simulate(SimulatAssess simulatAssess) { Boolean result = false; // 2. 缁勮渚涚畻娉曞簱浠跨湡鐨勬ā鍨媥ml @@ -665,6 +679,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) { @@ -690,6 +709,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")); @@ -700,6 +721,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(); @@ -728,6 +751,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) { @@ -857,7 +888,8 @@ for (TaskPhaseModel taskPhaseModel : taskPhaseModelAll) { Element taskTag = tasksTag.addElement("task"); taskTag.addAttribute("duration", String.valueOf(taskPhaseModel.getOperatConditDuration())); - taskTag.addAttribute("model", taskPhaseModel.getOperatConditId().toString()); +// taskTag.addAttribute("model", taskPhaseModel.getOperatConditId().toString()); + taskTag.addAttribute("model", taskPhaseModel.getId().toString()); if (null != taskPhaseModel.getPhaseConstraints() && taskPhaseModel.getPhaseConstraints().size() > 0) { taskTag.addAttribute("NAM", taskPhaseModel.getPhaseConstraints().stream().map(item -> @@ -983,7 +1015,8 @@ Element modelsTag = root.addElement("models"); for (TaskPhaseModel taskPhaseModel : taskPhaseModelAll) { Element modelTag = modelsTag.addElement("model"); - modelTag.addAttribute("name", taskPhaseModel.getOperatConditId().toString()); +// modelTag.addAttribute("name", taskPhaseModel.getOperatConditId().toString()); + modelTag.addAttribute("name", taskPhaseModel.getId().toString()); List<OperatConditModel> gkModelsAssembled = operatConditModelDao.getGKModelAssembled( taskPhaseModel.getOperatConditId()); OperatConditModel gkModelTop = gkModelsAssembled.stream().filter(item -> @@ -1064,15 +1097,16 @@ // 璁惧 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"); ParamData paramData = paramDataList.stream().filter(item -> dataId.equals(item.getProductId())).collect(Collectors.toList()).get(0); Double ratio = paramData.getTaskMtbcfOperatingRatio(); - if (null != ratio && ratio > 0) { +// if (null != ratio && ratio > 0) { + if (null != ratio && ratio != 1.0) { // 闂存柇鍨嬭澶囩殑澶勭悊 double cycon = taskPhaseModel.getOperatConditDuration() * ratio; double cycdown = taskPhaseModel.getOperatConditDuration() - cycon; @@ -1086,7 +1120,7 @@ .filter(item -> taskId.equals(item.getTaskId())) .filter(item -> taskPhaseModel.getPhaseId().equals(item.getPhaseId())) .filter(item -> taskPhaseModel.getOperatConditId().equals(item.getOperatConditId())) - .filter(item -> modelId.equals(item.getModelId())) +// .filter(item -> modelId.equals(item.getModelId())) .filter(item -> dataId.equals(item.getProductId())) .collect(Collectors.toList()).get(0); } @@ -1193,11 +1227,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) { @@ -1212,6 +1248,7 @@ private RepairModel createRepairModelDirac(double time) { RepairModel repairModel = new RepairModel(); repairModel.setId(UUIDUtil.generateId()); + repairModel.setType(RepairModel.TYPE_DIRAC); repairModel.setParam1(0); return repairModel; } @@ -1264,7 +1301,6 @@ 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; String nameValue = jsonArray.getJSONObject(i).get("name").toString(); if (StringUtils.isNotBlank(nameValue)) { @@ -1289,12 +1325,14 @@ } 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); + if (map.get(item.getId()) != null) { + 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<>(); @@ -1309,13 +1347,15 @@ private void getIsweak(List<WeakDto> treeList) { WeakDto minDto = null; for (WeakDto dto : treeList) { - if (dto.getProductType() == 10) - continue; - if (minDto == null) { - minDto = dto; - } - if (dto.getMtbfTime() < minDto.getMtbfTime()) { - minDto = dto; + if (dto.getMtbfTime() != null) { + if (dto.getProductType() == 10) + continue; + if (minDto == null) { + minDto = dto; + } + if (dto.getMtbfTime() < minDto.getMtbfTime()) { + minDto = dto; + } } } minDto.setIsWeak(1); @@ -1377,8 +1417,7 @@ public SimulaDataDto getResultXML(SimulatAssess simulatAssess) { if (simulatAssess.getDataType() != null && simulatAssess.getDataType().equals("fz")) { - Integer num = this.getNumById(simulatAssess.getProductId(), simulatAssess.getTaskModelId()); - simulatAssess.setName("浠跨湡璁板綍" + (num + 1)); + simulatAssess.setName(simulatAssess.getName()); this.update(simulatAssess); } String filePath = path + "/" + simulatAssess.getId() + "/" + "result.xml"; @@ -1436,9 +1475,11 @@ String[] arr = availability.split(" "); // 閬嶅巻瀛愬瓧绗︿覆鏁扮粍锛屽皢姣忎釜鍏冪礌杞崲涓篸ouble骞跺瓨鍌ㄥ埌double鏁扮粍涓� Double j = 0.0; - for (int a = 0; a < arr.length; a++) { + for (int a = 0; a < arr.length - 1; a++) { j = samplPeriod + j; - doubleArray.add(Double.parseDouble(arr[a])); + if (!StringUtils.isEmpty(arr[a])) { + doubleArray.add(Double.parseDouble(arr[a])); + } xList.add(j); } @@ -1576,6 +1617,7 @@ SchemeComparCurve curve = new SchemeComparCurve(); curve.setName(task.getTaskName()); + curve.setSymbol("none"); curve.setSmooth(true); curve.setType("line"); curve.setData(resultData.getCurveParam().getYData()); @@ -1586,4 +1628,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