From 3c54f403c6c9756725f9d016e7ff05c5b64327d0 Mon Sep 17 00:00:00 2001 From: jinlin <jinlin> Date: 星期二, 22 十月 2024 14:36:53 +0800 Subject: [PATCH] 关于修改可靠性产品重复 --- modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java | 339 +++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 250 insertions(+), 89 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 f6132a6..e9557ad 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 @@ -24,6 +24,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 io.swagger.models.auth.In; import org.apache.commons.io.IOUtils; import org.dom4j.Document; import org.dom4j.DocumentHelper; @@ -43,7 +44,10 @@ import org.springframework.transaction.annotation.Transactional; import java.io.*; +import java.nio.file.FileAlreadyExistsException; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -196,9 +200,9 @@ double pointNumPerHour = 60.0 / simulatAssess.getSamplPeriod(); //鏃跺簭鍥剧嚎 - List<List<TimeDiagramStatusDto>> lineArray = new ArrayList(); + List<TimeDiagramStatusDto> statusDtoList = new ArrayList<>(); + List<TimeDiagramStatusDto> statusDtoListOld = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { - List<TimeDiagramStatusDto> statusDtoList = new ArrayList<>(); x1 = 0; groupY = groupHeight * i; ProductStatusDto dto = list.get(i); @@ -228,7 +232,11 @@ break; } x2 = x1 + status.getTimes() * pointNumPerHour + 5; - statusDtoList.add(new TimeDiagramStatusDto(x1, x2, status2)); + if (i == 0) { + statusDtoList.add(new TimeDiagramStatusDto(x1, x2, status2)); + } else { + statusDtoListOld.add(new TimeDiagramStatusDto(x1, x2, status2)); + } JSONObject lineJson = new JSONObject(templetsStrMap.get(status.getStatus())); setlineXy(lineJson, x1, y, x2, y, ""); JsonUtils2.setJsonValueByPath(lineJson, "data/status".split("/"), status.getStatus()); @@ -239,8 +247,6 @@ x1 = x2 - 5; jsonArray.add(lineJson); } - lineArray.add(statusDtoList); - JSONObject textJson = new JSONObject(templetsStrMap.get("text")); JsonUtils2.setJsonValueByPath(textJson, "id".split("/"), UUIDUtil.generateId().toString()); JsonUtils2.setJsonValueByPath(textJson, "attrs/label/textWrap/text".split("/"), dto.getName()); @@ -324,67 +330,73 @@ curPointHour += periodHour; } + List<TimeDiagramStatusDto> statusDtoListNew = new ArrayList<>(); + while (statusDtoListOld.size() > 0) { + statusDtoListOld.stream().sorted(Comparator.comparing(TimeDiagramStatusDto::getX1)).collect(Collectors.toList()); + TimeDiagramStatusDto nextStatusDto = statusDtoListOld.get(0); + if (statusDtoListNew.size() == 0) { + statusDtoListNew.add(nextStatusDto); + } else { + TimeDiagramStatusDto currentStatusDto = statusDtoListNew.get(statusDtoListNew.size() - 1); + if (nextStatusDto.getStatus() < currentStatusDto.getStatus()) { + if (nextStatusDto.getX1() == currentStatusDto.getX1() && nextStatusDto.getX2() == currentStatusDto.getX2()) { + currentStatusDto.setStatus(nextStatusDto.getStatus()); + } else if (nextStatusDto.getX1() == currentStatusDto.getX1() && nextStatusDto.getX2() < currentStatusDto.getX2()) { + statusDtoListOld.add(new TimeDiagramStatusDto(nextStatusDto.getX2(), currentStatusDto.getX2(), currentStatusDto.getStatus())); + currentStatusDto.setStatus(nextStatusDto.getStatus()); + currentStatusDto.setX2(nextStatusDto.getX2()); + } else if (nextStatusDto.getX1() == currentStatusDto.getX1() && nextStatusDto.getX2() > currentStatusDto.getX2()) { + currentStatusDto.setStatus(nextStatusDto.getStatus()); + currentStatusDto.setX2(nextStatusDto.getX2()); + } else if (nextStatusDto.getX1() > currentStatusDto.getX1() && nextStatusDto.getX2() >= currentStatusDto.getX2()) { + 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())); + } + } else { + if (nextStatusDto.getX2() > currentStatusDto.getX2()) { + statusDtoListOld.add(new TimeDiagramStatusDto(currentStatusDto.getX2(), nextStatusDto.getX2(), nextStatusDto.getStatus())); + } + } + } + statusDtoListOld.remove(0); + } timeDiagramDto.setTotalWidth(x2); double pointRate = timeDiagramDto.getTotalWidth() / timeDiagramDto.getSmallWidth(); - List<TimeDiagramStatusDto> subStatusDtoList = new ArrayList<>(); - int lastStatus = 5; - boolean isFirst = true; - x1 = 0; - for (double i = 0; i < timeDiagramDto.getSmallWidth(); i = i + timeDiagramDto.getMinPointNum()) { - int netStatus = 5; - for (int j = 1; j < list.size(); j++) { - if (i >= 448) { - System.out.println(111); - } - int tmpStatus = getPointStatus(lineArray.get(j), i * pointRate, (i + timeDiagramDto.getMinPointNum()) * pointRate - 1); - if (tmpStatus < netStatus) { - netStatus = tmpStatus; - } - } - if (!isFirst) { - if (lastStatus != netStatus) { - subStatusDtoList.add(new TimeDiagramStatusDto(x1, x2, lastStatus)); - lastStatus = netStatus; - x1 = i; - } - } else { - lastStatus = netStatus; - isFirst = false; - } - x2 = i + timeDiagramDto.getMinPointNum() - 1; - } - subStatusDtoList.add(new TimeDiagramStatusDto(x1, x2, lastStatus)); + List<List<TimeDiagramStatusDto>> lineArray = new ArrayList(); + lineArray.add(statusDtoList); + lineArray.add(statusDtoListNew); - List<TimeDiagramStatusDto> parentStatusDtoList = new ArrayList<>(); - lastStatus = 5; - isFirst = true; - x1 = 0; - for (double i = 0; i < timeDiagramDto.getSmallWidth(); i = i + timeDiagramDto.getMinPointNum()) { - if (i >= 448) { - System.out.println(111); - } - int netStatus = getPointStatus(lineArray.get(0), i * pointRate, (i + timeDiagramDto.getMinPointNum()) * pointRate - 1); - if (!isFirst) { - if (lastStatus != netStatus) { - parentStatusDtoList.add(new TimeDiagramStatusDto(x1, x2, lastStatus)); + List<List<TimeDiagramStatusDto>> smallStatusDtoList = new ArrayList<>(); + for (int j = 0; j < lineArray.size(); j++) { + List<TimeDiagramStatusDto> tmpStatusDtoList = new ArrayList<>(); + int lastStatus = 5; + Boolean isFirst = true; + x1 = 0; + for (double i = 0; i < timeDiagramDto.getSmallWidth(); i = i + timeDiagramDto.getMinPointNum()) { + int netStatus = getPointStatus(lineArray.get(j), i * pointRate, (i + timeDiagramDto.getMinPointNum()) * pointRate - 1); + if (!isFirst) { + if (lastStatus != netStatus) { + tmpStatusDtoList.add(new TimeDiagramStatusDto(x1, x2, lastStatus)); + lastStatus = netStatus; + x1 = i; + } + } else { lastStatus = netStatus; - x1 = i; + isFirst = false; } - } else { - lastStatus = netStatus; - isFirst = false; + x2 = i + timeDiagramDto.getMinPointNum() - 1; } - x2 = i + timeDiagramDto.getMinPointNum() - 1; + tmpStatusDtoList.add(new TimeDiagramStatusDto(x1, x2, lastStatus)); + smallStatusDtoList.add(tmpStatusDtoList); } - parentStatusDtoList.add(new TimeDiagramStatusDto(x1, x2, lastStatus)); JSONObject jsonObject2 = new JSONObject(modelStr2); JSONArray jsonArray2 = jsonObject2.getJSONArray("cells"); - List<List<TimeDiagramStatusDto>> smallStatusDtoList = new ArrayList<>(); - smallStatusDtoList.add(parentStatusDtoList); - smallStatusDtoList.add(subStatusDtoList); - y = 10; for (int i = 0; i < smallStatusDtoList.size(); i++) { for (TimeDiagramStatusDto status : smallStatusDtoList.get(i)) { @@ -606,16 +618,20 @@ } @Transactional(rollbackFor = Exception.class) - public Result simulate(SimulatAssess simulatAssess) { - Result result = null; + public List<TaskModelCheckResultDto> simulateChecK(SimulatAssess simulatAssess) { + List<TaskModelCheckResultDto> result = null; // 1. 妫�鏌ユā鍨嬪畬鏁存�� List<TaskModelCheckResultDto> chkResult = taskService.checkTaskModel(simulatAssess.getProductId(), simulatAssess.getTaskModelId()); if (chkResult.size() > 0) { - result = Result.ok(chkResult); - return result; + return chkResult; } + return result; + } + @Transactional(rollbackFor = Exception.class) + public Boolean simulate(SimulatAssess simulatAssess) { + Boolean result = false; // 2. 缁勮渚涚畻娉曞簱浠跨湡鐨勬ā鍨媥ml assembleModelXml(simulatAssess); @@ -625,8 +641,8 @@ return result; } - private Result callReliaSimLib(SimulatAssess simulatAssess) { - Result result = null; + private Boolean callReliaSimLib(SimulatAssess simulatAssess) { + Boolean result = false; InputStream is = null; BufferedReader br = null; try { @@ -658,7 +674,7 @@ ReliaSimLibResult rtn = com.alibaba.fastjson.JSONObject.parseObject(line, ReliaSimLibResult.class); if ("0".equals(rtn.getCode())) { logger.info("鍚姩鍙潬鎬т豢鐪熻瘎浼扮畻娉曞簱鎴愬姛銆�"); - result = Result.ok(); + result = true; } else { String errorMsg = rtn.getErrorMsg(); throw new RenException("鍚姩鍙潬鎬т豢鐪熻瘎浼扮畻娉曞簱澶辫触: errorMsg=" + errorMsg); @@ -720,6 +736,9 @@ List<ParamData> paramDataList = paramDataDao.getDeviceParams(productId); Long taskId = simulatAssess.getTaskModelId(); Task task = taskService.get(taskId); + if (simulatAssess.getTaskDuration() != null) { + task.setTaskDuration(simulatAssess.getTaskDuration()); + } List<TaskBinoParam> binoParams = taskBinoParamDao.getBinoParams(taskId); // 1. 璁$畻鍚勪换鍔¢樁娈电殑杩愯鏃堕暱 @@ -1248,43 +1267,55 @@ } } - public SchemeComparDto SchemeCompar(String[] taskList, Long showProductId) { - SchemeComparDto dto = new SchemeComparDto(); + public SimulatResult SchemeCompar(String[] taskList, Long showProductId, Integer samplPeriod, Integer simulatFrequency) { + SimulatResult simulatResult = new SimulatResult(); + List<Long> idList = new ArrayList<>(); + List<TaskModelCheckResultDto> result = null; +/* SchemeComparDto dto = new SchemeComparDto(); List<SimulaDataDto> dataDtoList = new ArrayList<>(); List<SchemeComparCurve> curveList = new ArrayList<>(); List<Double> xData = new ArrayList<>(); - SimulatAssess simulatAssess; - SimulaDataDto data; + + SimulaDataDto data;*/ + + List<SimulatAssess> simulatAssessList = new ArrayList<>(); Task task; + double maxTaskDuration = 0.0; for (String taskId : taskList) { - Long taskModelId = Long.parseLong(taskId); - task = taskService.get(taskModelId); - simulatAssess = this.getByTaskId(taskModelId); - SimulaDataDto resultData; - if (showProductId != null) { - simulatAssess.setProductId(showProductId); - resultData = this.getResultXML(simulatAssess); - } else { - resultData = this.getResultXML(simulatAssess); + task = taskService.get(Long.parseLong(taskId)); + if (task.getTaskDuration() > maxTaskDuration) { + maxTaskDuration = task.getTaskDuration(); } - data = resultData; - data.setName(task.getTaskName()); - dataDtoList.add(data); - xData = resultData.getCurveParam().getXData(); + SimulatAssess simulatAssess = new SimulatAssess(); + Long id = UUIDUtil.generateId(); + simulatAssess.setId(id); + simulatAssess.setName(""); + simulatAssess.setProductId(showProductId); + simulatAssess.setSamplPeriod(samplPeriod); + simulatAssess.setSimulatFrequency(simulatFrequency); + simulatAssess.setTaskDuration(maxTaskDuration); + simulatAssess.setTaskModelId(Long.parseLong(taskId)); - SchemeComparCurve curve = new SchemeComparCurve(); - curve.setName(task.getTaskName()); - curve.setSmooth(true); - curve.setType("line"); - curve.setData(resultData.getCurveParam().getYData()); - curveList.add(curve); + simulatAssessList.add(simulatAssess); + result = simulateChecK(simulatAssess); + if (result!=null){ + simulatResult.setType("errorList"); + simulatResult.setErrList(result); + return simulatResult; + } + idList.add(id); } - dto.setXDataList(xData); - dto.setDataList(dataDtoList); - dto.setCurveList(curveList); - return dto; + + for (SimulatAssess simulatAssess : simulatAssessList) { + simulatAssess.setTaskDuration(maxTaskDuration); + this.simulate(simulatAssess); + } + + simulatResult.setType("idList"); + simulatResult.setIdList(idList); + return simulatResult; } public SimulaDataDto getResultXML(SimulatAssess simulatAssess) { @@ -1371,4 +1402,134 @@ } return data; } + + public String verify(Long taskId) { + StringBuilder result = new StringBuilder(); + Task task = taskService.get(taskId); + double taskTime = task.getTaskDuration(); + List<OperatConditModel> list = baseDao.getModel(taskId); + List<Double> reliabiyList = new ArrayList<>(); + String modelStr2 = ""; + for (OperatConditModel model : list) { + if (model.getProductId().equals(task.getProductId())) { + modelStr2 = model.getContent(); + continue; + } + List<verifyDto> listNodes = baseDao.getNode(model.getModelId()); + for (verifyDto node : listNodes) { + //lmd,reliabiy,failRate + double lmd = 1 / node.getMtbf(); + double reliabiy = Math.exp(-1 * lmd * taskTime); + double failRate = 1 - reliabiy; + node.setLmd(lmd); + node.setReliabiy(reliabiy); + node.setFailRate(failRate); + } + int total = listNodes.size(); + String modelStr = model.getContent(); + //鎵惧埌琛ㄥ喅鏁伴噺 + + if (modelStr.contains("switch")) { + double a = 0; + double lmd = listNodes.get(0).getLmd(); + result.append("\n").append(total).append("涓浉鍚岃澶囨梺鑱�,3閫�1,MTTBCF鏄�").append(listNodes.get(0).getMtbf()).append("\n"); + for (int i = 0; i <= total - 1; i++) { + double ijc = getjc(i); + double b = Math.pow(taskTime * lmd, i) * Math.exp(-1 * lmd * taskTime) / ijc; + a = a + b; + result.append("鏈�").append(i + 1).append("涓澶囧ソ鐨勭殑姒傜巼涓�").append(b).append("\n"); + } + result.append("鏁翠釜鏃佽仈绯荤粺鐨勫彲闈犲害涓�").append(new Formatter().format("%.4f", a)).append("\n"); + reliabiyList.add(a); + } else if (modelStr.contains("parallel")) { + double a = 1; + result.append("\n骞惰仈璁惧鏈�").append(total).append("涓猏n"); + for (int i = 0; i < listNodes.size(); i++) { + a = a * listNodes.get(i).getFailRate(); + result.append("绗�").append(i + 1).append("涓澶囩殑MTBCF涓�").append(listNodes.get(i).getMtbf()).append(",").append(i + 1).append("涓澶囧苟鑱旂殑澶辨晥鐜囦负").append(a).append("\n"); + } + double reliabiy = 1 - a; + result.append("鏁翠釜骞惰仈绯荤粺鐨勫け鏁堢巼涓�").append(a).append("鏁翠釜骞惰仈绯荤粺鐨勫彲闈犲害涓�").append(new Formatter().format("%.4f", reliabiy)).append("\n"); + reliabiyList.add(reliabiy); + } else if (modelStr.contains("vote")) { + Integer voteNum = baseDao.getVoteNum(model.getModelId()); + if (voteNum != null) { + result.append("\n").append(total).append("涓浉鍚岃澶囪〃鍐�,MTBCF涓�").append(listNodes.get(0).getMtbf()).append("琛ㄥ喅鏁伴噺涓�").append(voteNum).append("涓猏n"); + double a = 0; + double zjc = getjc(total); + double reliabiy = listNodes.get(0).getReliabiy(); + for (int i = voteNum; i <= total; i++) { + double ijc = getjc(i); + double nijc = getjc(total - i); + double b = (zjc / (ijc * nijc)) * Math.pow(reliabiy, i) * Math.pow(1 - reliabiy, total - i); + a = a + b; + result.append("鏈�").append(i).append("涓澶囨槸濂界殑姒傜巼涓�").append(b).append("\n"); + } + result.append("鏁翠釜琛ㄥ喅绯荤粺鐨勫彲闈犲害涓�").append(new Formatter().format("%.4f", a)).append("\n"); + reliabiyList.add(a); + } + + } + } + double totalReliabiy = 1; + if (modelStr2.contains("parallel")) { + for (Double reliabiy : reliabiyList) { + totalReliabiy = totalReliabiy * (1 - reliabiy); + } + totalReliabiy = 1 - totalReliabiy; + } else { + for (Double reliabiy : reliabiyList) { + totalReliabiy = totalReliabiy * reliabiy; + } + } + result.append("\n鏁翠釜鎬讳綋绯荤粺鐨勫彲闈犲害涓�").append(totalReliabiy).append("\n"); + return String.valueOf(result); + } + + Double getjc(int a) { + double result = 1.0; + for (int i = a; i > 0; i--) + result = result * i; + return result; + } + + public SchemeComparDto getEcharts(String[] taskList, Long showProductId) { + SchemeComparDto dto = new SchemeComparDto(); + List<SimulaDataDto> dataDtoList = new ArrayList<>(); + List<SchemeComparCurve> curveList = new ArrayList<>(); + List<Double> xData = new ArrayList<>(); + SimulatAssess simulatAssess; + SimulaDataDto data; + + Task task; + for (String taskId : taskList) { + Long taskModelId = Long.parseLong(taskId); + task = taskService.get(taskModelId); + simulatAssess = this.getByTaskId(taskModelId); + simulatAssess.setDataType("fz"); + SimulaDataDto resultData; + if (showProductId != null) { + simulatAssess.setProductId(showProductId); + resultData = this.getResultXML(simulatAssess); + } else { + resultData = this.getResultXML(simulatAssess); + } + + data = resultData; + data.setName(task.getTaskName()); + dataDtoList.add(data); + xData = resultData.getCurveParam().getXData(); + + SchemeComparCurve curve = new SchemeComparCurve(); + curve.setName(task.getTaskName()); + curve.setSmooth(true); + curve.setType("line"); + curve.setData(resultData.getCurveParam().getYData()); + curveList.add(curve); + } + dto.setXDataList(xData); + dto.setDataList(dataDtoList); + dto.setCurveList(curveList); + return dto; + } } -- Gitblit v1.9.1