| | |
| | | import com.zt.life.modules.mainPart.taskReliability.dao.SimulatAssessDao; |
| | | import com.zt.life.modules.mainPart.taskReliability.dao.TimeDiagramDao; |
| | | import com.zt.life.modules.mainPart.taskReliability.dto.*; |
| | | import com.zt.life.modules.mainPart.taskReliability.dto.ProductStatusDto; |
| | | import com.zt.life.modules.mainPart.taskReliability.dto.TaskModelCheckResultDto; |
| | | 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 org.apache.commons.io.IOUtils; |
| | |
| | | public Result simulate(SimulatAssess simulatAssess) { |
| | | Result result = null; |
| | | // 1. 检查模型完整性 |
| | | List<TaskModelCheckResult> chkResult = taskService.checkTaskModel(simulatAssess.getProductId(), |
| | | List<TaskModelCheckResultDto> chkResult = taskService.checkTaskModel(simulatAssess.getProductId(), |
| | | simulatAssess.getTaskModelId()); |
| | | if (chkResult.size() > 0) { |
| | | result = Result.error("模型不完整,请检查模型定义及参数配置。"); |
| | |
| | | Long taskId = simulatAssess.getTaskModelId(); |
| | | Task task = taskService.get(taskId); |
| | | List<TaskBinoParam> binoParams = taskBinoParamDao.getBinoParams(taskId); |
| | | List<TaskRepairParam> taskRepairParams = taskRepairParamDao.getTaskRepairParams(taskId); |
| | | |
| | | // 1. 计算各任务阶段的运行时长 |
| | | List<TaskPhase> taskPhases = calcTaskPhaseDuration(task); |
| | |
| | | Element root = document.addElement("des"); |
| | | root.addAttribute("name", "General system"); |
| | | addTasksTag(taskPhaseModelAll, root); |
| | | addModelsTag(productId, |
| | | addModelsTag(taskId, |
| | | productId, |
| | | productList, |
| | | paramDataList, |
| | | taskPhaseModelAll, |
| | | binoParams, |
| | | taskRepairParams, |
| | | root, |
| | | failureModels, repairModels); |
| | | addFailureModelsTag(failureModels, root); |
| | |
| | | satpm.setPhaseName(phase.getPhaseName()); |
| | | satpm.setPhaseDurationRate(phase.getPhaseDurationRate()); |
| | | satpm.setPhaseDuration(phase.getPhaseDuration()); |
| | | satpm.setPhaseConstraint(null); // TODO |
| | | satpm.setPhaseConstraint(tpm.getPhaseConstraints().stream().map(item -> |
| | | item.getProductId().toString()).collect(Collectors.joining(","))); |
| | | satpm.setGkId(tpm.getOperatConditId()); |
| | | satpm.setGkName(tpm.getOperatConditName()); |
| | | satpm.setGkDurationRate(tpm.getOperatConditDurationRate()); |
| | |
| | | Element taskTag = tasksTag.addElement("task"); |
| | | taskTag.addAttribute("duration", String.valueOf(taskPhaseModel.getOperatConditDuration())); |
| | | taskTag.addAttribute("model", taskPhaseModel.getOperatConditId().toString()); |
| | | if (null != taskPhaseModel.getPhaseConstraints() && taskPhaseModel.getPhaseConstraints().size() > 0) { |
| | | taskTag.addAttribute("NAM", |
| | | taskPhaseModel.getPhaseConstraints().stream().map(item -> |
| | | item.getProductId().toString()).collect(Collectors.joining(","))); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | ele.addAttribute("value", String.valueOf(failureModel.getParam3())); |
| | | break; |
| | | case FailureModel.TYPE_FIX: |
| | | ele = failureModelTag.addElement("unreliability"); |
| | | ele = failureModelTag.addElement("reliability"); |
| | | ele.addAttribute("value", String.valueOf(failureModel.getParam1())); |
| | | break; |
| | | default: |
| | |
| | | double duration = taskPhase.getPhaseDuration() * taskPhaseModel.getOperatConditDurationRate() / totalRate; |
| | | taskPhaseModel.setOperatConditDuration(duration); |
| | | sum += duration; |
| | | |
| | | List<TaskPhaseConstraintDto> taskRepairConstraints = taskRepairParamDao.getTaskRepairConstraints(taskPhase.getTaskId(), |
| | | taskPhaseModel.getPhaseId(), taskPhaseModel.getOperatConditId()); |
| | | taskPhaseModel.setPhaseConstraints(taskRepairConstraints); |
| | | taskPhaseModelAll.add(taskPhaseModel); |
| | | } |
| | | // 把零头补到最后一个工况模型 |
| | |
| | | return taskPhases; |
| | | } |
| | | |
| | | private void addModelsTag(Long productId, |
| | | private void addModelsTag(Long taskId, |
| | | Long productId, |
| | | List<XhProductModel> productList, |
| | | List<ParamData> paramDataList, |
| | | List<TaskPhaseModel> taskPhaseModelAll, |
| | | List<TaskBinoParam> binoParams, |
| | | List<TaskRepairParam> taskRepairParams, |
| | | Element root, |
| | | List<FailureModel> failureModels, |
| | | List<RepairModel> repairModels) { |
| | |
| | | "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); |
| | | node2DOM(productId, |
| | | node2DOM(taskId, |
| | | taskPhaseModel, |
| | | gkModelTop.getModelId(), |
| | | productId, |
| | | productList, |
| | | paramDataList, |
| | | gkModelsAssembled, |
| | | algorithmList, |
| | | modelNodeAndVnodeList, |
| | | binoParams, |
| | | taskRepairParams, |
| | | computerNode, modelTag, |
| | | failureModels, repairModels); |
| | | } |
| | | } |
| | | |
| | | // 递归函数 |
| | | private void node2DOM(Long productId, |
| | | private void node2DOM(Long taskId, |
| | | TaskPhaseModel taskPhaseModel, |
| | | Long modelId, |
| | | Long productId, |
| | | List<XhProductModel> productList, |
| | | List<ParamData> paramDataList, |
| | | List<OperatConditModel> gkModelsAssembled, |
| | | List<Algorithm> algorithmList, |
| | | List<ModelNode> modelNodeAndVnodeList, |
| | | List<TaskBinoParam> binoParams, |
| | | List<TaskRepairParam> taskRepairParams, |
| | | ModelNode node, |
| | | Element parent, |
| | | List<FailureModel> failureModels, |
| | |
| | | "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); |
| | | node2DOM(product.getId(), |
| | | node2DOM(taskId, |
| | | taskPhaseModel, |
| | | gkModel.getModelId(), |
| | | product.getId(), |
| | | productList, |
| | | paramDataList, |
| | | gkModelsAssembled, |
| | | algorithmListSub, |
| | | modelNodeAndVnodeListSub, |
| | | binoParams, |
| | | taskRepairParams, |
| | | computerNode, parent, |
| | | failureModels, repairModels); |
| | | } else if ("5".equals(product.getProductType())) { |
| | | // 设备 |
| | | ParamData paramData = paramDataList.stream().filter(item -> |
| | | dataId.equals(item.getProductId())).collect(Collectors.toList()).get(0); |
| | | Element nodeTag = parent.addElement("node"); |
| | | nodeTag.addAttribute("name", dataId.toString()); |
| | | nodeTag.addAttribute("type", "node"); |
| | | |
| | | FailureModel failureModel = new FailureModel(); |
| | | failureModel.setId(UUIDUtil.generateId()); |
| | | failureModel.setType(FailureModel.TYPE_EXP); |
| | | failureModel.setParam1(1.0 / paramData.getTaskMtbcfRegulate()); |
| | | ParamData paramData = paramDataList.stream().filter(item -> |
| | | dataId.equals(item.getProductId())).collect(Collectors.toList()).get(0); |
| | | Double ratio = paramData.getTaskMtbcfOperatingRatio(); |
| | | if (null != ratio && ratio > 0) { |
| | | // 间断型设备的处理 |
| | | double cycon = taskPhaseModel.getOperatConditDuration() * ratio; |
| | | double cycdown = taskPhaseModel.getOperatConditDuration() - cycon; |
| | | nodeTag.addAttribute("cycon", String.valueOf(cycon)); |
| | | nodeTag.addAttribute("cycdown", String.valueOf(cycdown)); |
| | | } |
| | | TaskBinoParam taskBinoParam = null; |
| | | if (3 == paramData.getReliabDistribType()) { |
| | | // 二项分布处理 |
| | | taskBinoParam = binoParams.stream() |
| | | .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 -> dataId.equals(item.getProductId())) |
| | | .collect(Collectors.toList()).get(0); |
| | | } |
| | | FailureModel failureModel = createFailureModel(paramData, taskBinoParam); |
| | | failureModels.add(failureModel); |
| | | |
| | | Element failureTag = nodeTag.addElement("failure_model"); |
| | | failureTag.addAttribute("name", failureModel.getId().toString()); |
| | | |
| | | if (1 == paramData.getRepairable()) { |
| | | RepairModel repairModel = new RepairModel(); |
| | | repairModel.setId(UUIDUtil.generateId()); |
| | | repairModel.setType(RepairModel.TYPE_EXP); |
| | | repairModel.setParam1(1.0 / paramData.getRepairMttcr()); |
| | | // 可维修 |
| | | RepairModel repairModel = createRepairModel(paramData); |
| | | repairModels.add(repairModel); |
| | | Element repairTag = nodeTag.addElement("repair_model"); |
| | | repairTag.addAttribute("name", repairModel.getId().toString()); |
| | |
| | | for (String nodeStr : computerNodeListStr) { |
| | | ModelNode mn = modelNodeAndVnodeList.stream().filter(item -> |
| | | nodeStr.equals(item.getId().toString())).collect(Collectors.toList()).get(0); |
| | | node2DOM(null, |
| | | node2DOM(taskId, |
| | | taskPhaseModel, |
| | | modelId, |
| | | null, |
| | | productList, |
| | | paramDataList, |
| | | gkModelsAssembled, |
| | | algorithmList, |
| | | modelNodeAndVnodeList, |
| | | binoParams, |
| | | taskRepairParams, |
| | | mn, element, |
| | | failureModels, repairModels); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private FailureModel createFailureModel(ParamData paramData) { |
| | | private FailureModel createFailureModel(ParamData paramData, TaskBinoParam taskBinoParam) { |
| | | FailureModel failureModel = new FailureModel(); |
| | | failureModel.setId(UUIDUtil.generateId()); |
| | | switch (paramData.getReliabDistribType()) { |
| | | case 1: |
| | | // 指数分布 |
| | | failureModel.setType(FailureModel.TYPE_EXP); |
| | | failureModel.setParam1(1.0 / paramData.getTaskMtbcfRegulate()); |
| | | break; |
| | | case 2: |
| | | // 威布尔分布 |
| | | failureModel.setType(FailureModel.TYPE_WBL); |
| | | failureModel.setParam2(paramData.getTaskMtbcfOtherParams2()); |
| | | failureModel.setParam3(paramData.getTaskMtbcfOtherParams3()); |
| | | break; |
| | | case 3: |
| | | failureModel.setType(FailureModel.TYPE_BIN); |
| | | // 二项分布 |
| | | if (taskBinoParam.getSimulatTimes().intValue() == taskBinoParam.getSuccessTimes().intValue()) { |
| | | // 相等则为成败型 |
| | | failureModel.setType(FailureModel.TYPE_FIX); |
| | | failureModel.setParam1(taskBinoParam.getSuccessRate()); |
| | | } else { |
| | | // 二项分布 |
| | | failureModel.setType(FailureModel.TYPE_BIN); |
| | | failureModel.setParam1(taskBinoParam.getSuccessRate()); |
| | | failureModel.setParam2(taskBinoParam.getSimulatTimes()); |
| | | failureModel.setParam3(taskBinoParam.getSuccessTimes()); |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | return failureModel; |
| | | } |
| | | |
| | | private RepairModel createRepairModel(ParamData paramData) { |
| | | RepairModel repairModel = new RepairModel(); |
| | | repairModel.setId(UUIDUtil.generateId()); |
| | | switch (paramData.getRepairDistribType()) { |
| | | case 1: |
| | | // 指数分布 |
| | | repairModel.setType(FailureModel.TYPE_EXP); |
| | | repairModel.setParam1(1.0 / paramData.getRepairMttcr()); |
| | | break; |
| | | case 2: |
| | | // 威布尔分布 |
| | | repairModel.setType(FailureModel.TYPE_WBL); |
| | | repairModel.setParam2(paramData.getRepairMttcrOtherParams2()); |
| | | repairModel.setParam3(paramData.getRepairMttcrOtherParams3()); |
| | | break; |
| | | case 3: |
| | | // 二项分布(维修没有) |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | return repairModel; |
| | | } |
| | | |
| | | public List<WeakDto> getReliabilityWeakness(Long fzId, Long taskId, Long productId) { |
| | |
| | | } |
| | | } |
| | | |
| | | public SchemeComparDto SchemeCompar(String[] taskList) { |
| | | public SchemeComparDto SchemeCompar(String[] taskList, Long showProductId) { |
| | | SchemeComparDto dto = new SchemeComparDto(); |
| | | List<SimulaDataDto> dataDtoList = new ArrayList<>(); |
| | | List<SchemeComparCurve> curveList = new ArrayList<>(); |
| | |
| | | Long taskModelId = Long.parseLong(taskId); |
| | | task = taskService.get(taskModelId); |
| | | simulatAssess = this.getByTaskId(taskModelId); |
| | | SimulaDataDto resultData = this.getResultXML(simulatAssess); |
| | | SimulaDataDto resultData; |
| | | if (showProductId!=null){ |
| | | simulatAssess.setShowProductId(showProductId); |
| | | resultData =this.getResultData(simulatAssess); |
| | | }else{ |
| | | resultData = this.getResultXML(simulatAssess); |
| | | } |
| | | |
| | | data = resultData; |
| | | data.setName(task.getTaskName()); |
| | | dataDtoList.add(data); |