| | |
| | | package com.zt.life.modules.mainPart.taskReliability.service; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import cn.hutool.json.JSONArray; |
| | | import cn.hutool.json.JSONObject; |
| | | import cn.hutool.json.JSONArray; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.spire.pdf.tables.table.convert.Convert; |
| | | import com.zt.common.exception.RenException; |
| | |
| | | import com.zt.life.modules.mainPart.basicInfo.model.ParamData; |
| | | import com.zt.life.modules.mainPart.basicInfo.model.XhProductModel; |
| | | import com.zt.life.modules.mainPart.taskReliability.dao.*; |
| | | import com.zt.common.servlet.Result; |
| | | import com.zt.common.utils.JsonUtils2; |
| | | import com.zt.common.utils.UUIDUtil; |
| | | 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.ModelDto; |
| | | import com.zt.life.modules.mainPart.taskReliability.dto.ProductStatusDto; |
| | | import com.zt.life.modules.mainPart.taskReliability.dto.TaskModelCheckResult; |
| | | import com.zt.life.modules.mainPart.taskReliability.model.*; |
| | |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import com.zt.life.modules.mainPart.taskReliability.dto.StatusDto; |
| | | import com.zt.life.modules.mainPart.taskReliability.model.ModelRbd; |
| | | import com.zt.life.modules.mainPart.taskReliability.model.SimulatAssess; |
| | | import com.zt.life.modules.mainPart.taskReliability.model.SimulatAssessTaskPhaseModel; |
| | | import com.zt.life.modules.mainPart.taskReliability.model.TimeDiagram; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | |
| | | import java.util.HashMap; |
| | | import java.util.Hashtable; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | private XhProductModelDao xhProductModelDao; |
| | | @Autowired |
| | | private ParamDataDao paramDataDao; |
| | | @Autowired |
| | | private TaskBinoParamDao taskBinoParamDao; |
| | | @Autowired |
| | | private TaskRepairParamDao taskRepairParamDao; |
| | | |
| | | @Autowired |
| | | private TimeDiagramDao timeDiagramDao; |
| | | |
| | | @Value("${data.reliaSimLib.resultHome}") |
| | | private String path; |
| | | |
| | | |
| | | private JSONObject dialgramJson; |
| | | |
| | |
| | | } else { |
| | | setlineXy(modelJson2, x2, y1, x2, y2, null); |
| | | } |
| | | |
| | | jsonArray.add(modelJson2); |
| | | |
| | | //判断是否有模型 |
| | | ModelRbd modelRbd = baseDao.getModelByProductGk(modelDto.getGkId(), productId); |
| | | String modelName = "未用"; |
| | | String modelId = ""; |
| | | if (modelRbd != null) { |
| | | modelName = modelRbd.getModelName(); |
| | | modelId = modelRbd.getId().toString(); |
| | | } |
| | | |
| | | JSONObject textJson = new JSONObject(templetsStrMap.get("text")); |
| | | JsonUtils2.setJsonValueByPath(textJson, "data/dataId".split("/"), modelDto.getGkId()); |
| | | JsonUtils2.setJsonValueByPath(textJson, "data/dataId".split("/"), modelId); |
| | | JsonUtils2.setJsonValueByPath(textJson, "id".split("/"), UUIDUtil.generateId().toString()); |
| | | JsonUtils2.setJsonValueByPath(textJson, "attrs/label/textWrap/text".split("/"), modelDto.getGkName()); |
| | | JsonUtils2.setJsonValueByPath(textJson, "attrs/label/textWrap/text".split("/"), modelName); |
| | | JsonUtils2.setJsonValueByPath(textJson, "position/x".split("/"), x1 + 30); |
| | | JsonUtils2.setJsonValueByPath(textJson, "position/y".split("/"), y1); |
| | | jsonArray.add(textJson); |
| | |
| | | logger.info("算法库返回结果:" + line); |
| | | // int exitCode = process.waitFor(); // 异步方式,不等待算法库计算完毕,所以要注释掉该行 |
| | | if (line != null) { |
| | | ReliaSimLibResult rtn = JSONObject.parseObject(line, ReliaSimLibResult.class); |
| | | ReliaSimLibResult rtn = com.alibaba.fastjson.JSONObject.parseObject(line, ReliaSimLibResult.class); |
| | | if ("0".equals(rtn.getCode())) { |
| | | logger.info("启动算法库成功。"); |
| | | result = Result.ok(); |
| | |
| | | private void setParamToRedis(SimulatAssess simulatAssess) { |
| | | String key = simulatAssess.getId().toString() + RELIA_SIM_TASK_TYPE_SIMULATION; |
| | | logger.info("redis key:" + key); |
| | | JSONObject jsonObject = new JSONObject(); |
| | | com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject(); |
| | | jsonObject.put("xmlfile", simulatAssess.getXml()); |
| | | // 仿真次数 |
| | | jsonObject.put("simulate_times", simulatAssess.getSimulatFrequency()); |
| | |
| | | List<ParamData> paramDataList = paramDataDao.getDeviceParams(productId); |
| | | 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); |
| | | // 2. 计算各工况模型的运行时长 |
| | |
| | | productList, |
| | | paramDataList, |
| | | taskPhaseModelAll, |
| | | binoParams, |
| | | taskRepairParams, |
| | | root, |
| | | failureModels, repairModels); |
| | | addFailureModelsTag(failureModels, root); |
| | |
| | | taskPhaseModelAll.add(taskPhaseModel); |
| | | } |
| | | // 把零头补到最后一个工况模型 |
| | | taskPhaseModels.get(taskPhaseModels.size()-1).setOperatConditDuration(taskPhase.getPhaseDuration() - sum); |
| | | double duration = taskPhaseModels.get(taskPhaseModels.size()-1).getOperatConditDuration(); |
| | | taskPhaseModels.get(taskPhaseModels.size()-1).setOperatConditDuration(duration + taskPhase.getPhaseDuration() - sum); |
| | | } |
| | | |
| | | private List<TaskPhase> calcTaskPhaseDuration(Task task) { |
| | |
| | | sum += duration; |
| | | } |
| | | // 把零头补到最后一个阶段 |
| | | taskPhases.get(taskPhases.size()-1).setPhaseDuration(task.getTaskDuration() - sum); |
| | | double duration = taskPhases.get(taskPhases.size()-1).getPhaseDuration(); |
| | | taskPhases.get(taskPhases.size()-1).setPhaseDuration(duration + task.getTaskDuration() - sum); |
| | | |
| | | return taskPhases; |
| | | } |
| | |
| | | List<XhProductModel> productList, |
| | | List<ParamData> paramDataList, |
| | | List<TaskPhaseModel> taskPhaseModelAll, |
| | | List<TaskBinoParam> binoParams, |
| | | List<TaskRepairParam> taskRepairParams, |
| | | Element root, |
| | | List<FailureModel> failureModels, |
| | | List<RepairModel> repairModels) { |
| | |
| | | gkModelsAssembled, |
| | | algorithmList, |
| | | modelNodeAndVnodeList, |
| | | binoParams, |
| | | taskRepairParams, |
| | | computerNode, modelTag, |
| | | failureModels, repairModels); |
| | | } |
| | |
| | | List<OperatConditModel> gkModelsAssembled, |
| | | List<Algorithm> algorithmList, |
| | | List<ModelNode> modelNodeAndVnodeList, |
| | | List<TaskBinoParam> binoParams, |
| | | List<TaskRepairParam> taskRepairParams, |
| | | ModelNode node, |
| | | Element parent, |
| | | List<FailureModel> failureModels, |
| | |
| | | Long dataId = node.getDataId(); |
| | | XhProductModel product = productList.stream().filter(item -> |
| | | dataId.equals(item.getId())).collect(Collectors.toList()).get(0); |
| | | if ("3,4,10".equals(product.getProductType())) { |
| | | if ("3,4,10".contains(product.getProductType())) { |
| | | // 系统、分系统、虚单元 |
| | | OperatConditModel gkModel = gkModelsAssembled.stream().filter(item -> |
| | | dataId.equals(item.getProductId())).collect(Collectors.toList()).get(0); |
| | |
| | | gkModelsAssembled, |
| | | algorithmListSub, |
| | | modelNodeAndVnodeListSub, |
| | | binoParams, |
| | | taskRepairParams, |
| | | computerNode, parent, |
| | | failureModels, repairModels); |
| | | } else if ("5".equals(product.getProductType())) { |
| | |
| | | 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()); |
| | | failureModels.add(failureModel); |
| | | |
| | | Element failureTag = nodeTag.addElement("failure_model"); |
| | | failureTag.addAttribute("name", failureModel.getId().toString()); |
| | | if (1 == paramData.getRepairable()) { |
| | |
| | | } |
| | | String[] computerNodeListStr = algo.getComputerList().split(","); |
| | | for (String nodeStr : computerNodeListStr) { |
| | | ModelNode md = modelNodeAndVnodeList.stream().filter(item -> |
| | | ModelNode mn = modelNodeAndVnodeList.stream().filter(item -> |
| | | nodeStr.equals(item.getId().toString())).collect(Collectors.toList()).get(0); |
| | | node2DOM(productList, |
| | | paramDataList, |
| | | gkModelsAssembled, |
| | | algorithmList, |
| | | modelNodeAndVnodeList, |
| | | md, element, |
| | | binoParams, |
| | | taskRepairParams, |
| | | mn, element, |
| | | failureModels, repairModels); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private FailureModel createFailureModel(ParamData paramData) { |
| | | 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); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | return failureModel; |
| | | } |
| | | } |