|  |  | 
 |  |  | package com.zt.life.modules.mainPart.taskReliability.service; | 
 |  |  |  | 
 |  |  | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
 |  |  | import com.zt.common.constant.Constant; | 
 |  |  | import com.zt.common.db.query.QueryFilter; | 
 |  |  | import cn.hutool.json.JSONArray; | 
 |  |  | import cn.hutool.json.JSONObject; | 
 |  |  | import cn.hutool.json.XML; | 
 |  |  | import com.zt.common.exception.RenException; | 
 |  |  | import com.zt.common.service.BaseService; | 
 |  |  | import com.zt.common.servlet.Result; | 
 |  |  | import com.zt.common.utils.CacheUtils; | 
 |  |  | 
 |  |  | import com.zt.common.utils.TreeUtils; | 
 |  |  | import com.zt.common.utils.UUIDUtil; | 
 |  |  | import com.zt.core.shiro.ImportUtil; | 
 |  |  | 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; | 
 |  |  | import com.zt.life.modules.mainPart.basicInfo.model.ProductImg; | 
 |  |  | import com.zt.life.modules.mainPart.basicInfo.model.XhProductModel; | 
 |  |  | import com.zt.life.modules.mainPart.basicInfo.service.ParamDataService; | 
 |  |  | import com.zt.life.modules.mainPart.sysPictureBase.service.SysPictureBaseService; | 
 |  |  | import com.zt.life.modules.mainPart.taskReliability.dao.AssessResultDao; | 
 |  |  | import com.zt.life.modules.mainPart.taskReliability.dao.ReliabilityAssessDao; | 
 |  |  | import com.zt.life.modules.mainPart.taskReliability.dto.TaskModelCheckResultDto; | 
 |  |  | import com.zt.life.modules.mainPart.taskReliability.dao.*; | 
 |  |  | import com.zt.life.modules.mainPart.taskReliability.model.*; | 
 |  |  | import org.apache.commons.io.IOUtils; | 
 |  |  | import org.apache.commons.lang3.StringUtils; | 
 |  |  | import org.apache.poi.hssf.usermodel.HSSFWorkbook; | 
 |  |  | import org.apache.poi.ss.usermodel.Row; | 
 |  |  | 
 |  |  | import org.springframework.transaction.annotation.Transactional; | 
 |  |  | import org.springframework.web.multipart.MultipartFile; | 
 |  |  |  | 
 |  |  | import java.io.BufferedReader; | 
 |  |  | import java.io.InputStream; | 
 |  |  | import java.io.InputStreamReader; | 
 |  |  | import java.io.StringWriter; | 
 |  |  | import java.io.*; | 
 |  |  | import java.util.*; | 
 |  |  | import java.util.stream.Collectors; | 
 |  |  |  | 
 |  |  |  | 
 |  |  | /** | 
 |  |  | 
 |  |  |     private String redisHost; | 
 |  |  |     @Value("${spring.redis.port}") | 
 |  |  |     private String redisPort; | 
 |  |  |     @Value("${data.reliaSimLib.mainPy}") | 
 |  |  |     private String reliaSimMain; | 
 |  |  |     @Value("${data.reliaSimLib.resultHome}") | 
 |  |  |     @Value("${data.assessLib.mainPy}") | 
 |  |  |     private String assessMain; | 
 |  |  |     @Value("${data.assessLib.resultHome}") | 
 |  |  |     private String resultHome; | 
 |  |  |     @Value("${data.assessLib.resultHome}") | 
 |  |  |     private String path; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private RedisTemplate redisTemplate; | 
 |  |  |     @Autowired | 
 |  |  |     private TaskService taskService; | 
 |  |  |     @Autowired | 
 |  |  |     private SimulatAssessService simulatAssessService; | 
 |  |  |     @Autowired | 
 |  |  |     private AssessResultDao assessResultDao; | 
 |  |  |     @Autowired | 
 |  |  |     private XhProductModelDao xhProductModelDao; | 
 |  |  |     @Autowired | 
 |  |  |     private ParamDataDao paramDataDao; | 
 |  |  |     @Autowired | 
 |  |  |     private ModelNodeAlgorithmDao modelNodeAlgorithmDao; | 
 |  |  |     @Autowired | 
 |  |  |     private AlgorithmDao algorithmDao; | 
 |  |  |     @Autowired | 
 |  |  |     private OperatConditModelDao operatConditModelDao; | 
 |  |  |     @Autowired | 
 |  |  |     private ReliabilityAssessDao reliabilityAssessDao; | 
 |  |  |  | 
 |  |  |     public List<ReliabilityAssess> page(AssessResult assessResult) { | 
 |  |  |         Long assessId = baseDao.getAssessId(assessResult.getItemId(), assessResult.getProductId(), assessResult.getTaskId()); | 
 |  |  |         List<ReliabilityAssess> list = this.getAssess(assessResult, assessId); | 
 |  |  |         if (list != null) { | 
 |  |  |             list = TreeUtils.build(list); | 
 |  |  |         } | 
 |  |  |         return list; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Transactional(rollbackFor = Exception.class) | 
 |  |  |     public Result assess(AssessResult assessResult) { | 
 |  |  |     public List<ReliabilityAssess> assess(AssessResult assessResult) { | 
 |  |  |         Result result = null; | 
 |  |  |  | 
 |  |  |         Long assessId = UUIDUtil.generateId(); | 
 |  |  | 
 |  |  |  | 
 |  |  |         // 3. 调用算法库,进行评定计算 | 
 |  |  |         result = callReliaAssessLib(assessResult); | 
 |  |  |         if (result.getCode() != 0) throw new RenException(result.getMsg()); | 
 |  |  |  | 
 |  |  |         assessResultDao.insert(assessResult); | 
 |  |  |  | 
 |  |  |         return Result.ok(); | 
 |  |  |         List<ReliabilityAssess> list = this.getAssess(assessResult, assessId); | 
 |  |  |         if (list != null) { | 
 |  |  |             list = TreeUtils.build(list); | 
 |  |  |         } | 
 |  |  |         return list; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public List<ReliabilityAssess> getAssess(AssessResult assessResult, Long assessId) { | 
 |  |  |         List<ReliabilityAssess> list = baseDao.getProductList(assessResult.getProductId(), assessResult.getItemId()); | 
 |  |  |  | 
 |  |  |         String filePath = path + "/" + assessId + "/" + "result.xml"; | 
 |  |  |         String xml; | 
 |  |  |         InputStream in = null; | 
 |  |  |  | 
 |  |  |         File file = new File(filePath); | 
 |  |  |         if (file.exists()) { | 
 |  |  |             try { | 
 |  |  |                 in = new FileInputStream(filePath); | 
 |  |  |                 xml = IOUtils.toString(in); | 
 |  |  |             } catch (IOException e) { | 
 |  |  |                 throw new RenException("文件不存在或者文件打不开"); | 
 |  |  |             } finally { | 
 |  |  |                 try { | 
 |  |  |                     in.close(); | 
 |  |  |                 } catch (IOException e) { | 
 |  |  |                     e.printStackTrace(); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             JSONObject xmlJSONObj = XML.toJSONObject(xml); | 
 |  |  |             //JSONObject jsonObject = xmlJSONObj.getJSONObject("Results"); | 
 |  |  |             JSONArray jsonArray = xmlJSONObj.getJSONObject("Results").getJSONArray("Result"); | 
 |  |  |             for (ReliabilityAssess assess : list) { | 
 |  |  |                 Double result1 = null; | 
 |  |  |                 for (int i = 0; i < jsonArray.size(); i++) { | 
 |  |  |                     String nameValue = jsonArray.getJSONObject(i).get("name").toString(); | 
 |  |  |                     if (nameValue.contains(assess.getId().toString())) { | 
 |  |  |                         // 获取对应的值 | 
 |  |  |                         if (jsonArray.getJSONObject(i).get("value") instanceof Double){ | 
 |  |  |                             result1 = (Double)  jsonArray.getJSONObject(i).get("value"); | 
 |  |  |                         }else{ | 
 |  |  |                             String[] values = jsonArray.getJSONObject(i).get("value").toString().split(","); | 
 |  |  |                             result1 = Double.valueOf(values[1]); | 
 |  |  |                         } | 
 |  |  |                         break; // 如果找到就退出循环 | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 if (result1 != null) { | 
 |  |  |                     result1 = Double.valueOf(new Formatter().format("%.2f", result1).toString()); | 
 |  |  |                 } | 
 |  |  |                 assess.setAssessResult(result1); | 
 |  |  |             } | 
 |  |  |         } else { | 
 |  |  |             list = null; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return list; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     // 建立产品结构树时,相同的设备多个使用时,多个设备使用相同的名称。这样,在此处通过名称来判断是否是相同的设备,相同的设备,需要拿出来作为子标签嵌套进xml。 | 
 |  |  |     private void assembleModelXml(AssessResult assessResult) { | 
 |  |  |         String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + | 
 |  |  |                 "\n" + | 
 |  |  |                 "<des name=\"General system\" gama=\"0.7\">\n" + | 
 |  |  | /* | 
 |  |  |         // 测试算法库用 | 
 |  |  |         String xml = "<des name=\"General system\" gama=\"0.7\">\n" + | 
 |  |  |                 "  <tasks>\n" + | 
 |  |  |                 "    <task duration=\"1\" model=\"1819282257303678978\"/>\n" + | 
 |  |  |                 "  </tasks>\n" + | 
 |  |  |                 "  <models>\n" + | 
 |  |  |                 "    <model name=\"1819282257303678978\">\n" + | 
 |  |  |                 "      <logic name=\"系统\" type=\"series\" distType=\"ber\" NoE=\"10\" F=\"1\">\n" + | 
 |  |  |                 "        <logic name=\"分系统1\" type=\"series\" distType=\"exp\" ToE=\"68.0\" F=\"1\">\n" + | 
 |  |  |                 "      <logic name=\"系统\" type=\"series\" >\n" + | 
 |  |  |                 "        <logic name=\"分系统1\" type=\"series\"  >\n" + | 
 |  |  |                 "          <logic name=\"v1\" type=\"parallel\" nums=\"2\">\n" + | 
 |  |  |                 "              <node name=\"设备1\" distType=\"ber\" NoE=\"20\" F=\"1\"/>\n" + | 
 |  |  |                 "              <node name=\"设备1\" distType=\"exp\" ToE=\"20\" F=\"1\"/>\n" + | 
 |  |  |                 "          </logic>\n" + | 
 |  |  |                 "          <node name=\"设备2\" distType=\"exp\" ToE=\"62.0\" F=\"1\"/>\n" + | 
 |  |  |                 "          <node name=\"设备2\" distType=\"exp\" ToE=\"0.3\" F=\"1\"/>\n" + | 
 |  |  |                 "        </logic>\n" + | 
 |  |  |                 "        <logic name=\"分系统2\" type=\"series\" distType=\"ber\" NoE=\"14\" F=\"0\">\n" + | 
 |  |  |                 "          <node name=\"设备3\" distType=\"ber\" NoE=\"58\" F=\"0\"/>\n" + | 
 |  |  |                 "        <logic name=\"分系统2\" type=\"series\" >\n" + | 
 |  |  |                 "          <node name=\"设备3\" distType=\"exp\" ToE=\"0.2\" F=\"0\"/>\n" + | 
 |  |  |                 "          <node name=\"设备4\" distType=\"ber\"  NoE=\"18\" F=\"0\"/>\n" + | 
 |  |  |                 "          <logic name=\"v2\" type=\"series\" nums=\"2\">\n" + | 
 |  |  |                 "              <node name=\"设备5\" distType=\"exp\" ToE=\"88.0\" F=\"1\"/>\n" + | 
 |  |  |                 "              <node name=\"设备5\" distType=\"exp\" ToE=\"0.5,0,6\" F=\"1,2\"/>\n" + | 
 |  |  |                 "          </logic>          \n" + | 
 |  |  |                 "          <node name=\"设备6\" distType=\"ber\"  NoE=\"71.52\" F=\"1\"/>\n" + | 
 |  |  |                 "          <node name=\"设备6\" distType=\"exp\"  ToE=\"0.3\" F=\"1\"/>\n" + | 
 |  |  |                 "        </logic>\n" + | 
 |  |  |                 "        <logic name=\"分系统3\" type=\"vote\" distType=\"exp\" nums=\"3\" k=\"2\" ToE=\"68.0\" F=\"2\">\n" + | 
 |  |  |                 "          <node name=\"设备7\" distType=\"exp\"  ToE=\"86\" F=\"1\"/>\n" + | 
 |  |  |                 "        <logic name=\"分系统3\" type=\"vote\" nums=\"3\" k=\"2\" >\n" + | 
 |  |  |                 "          <node name=\"设备7\" distType=\"exp\"  ToE=\"87\" F=\"1\"/>\n" + | 
 |  |  |                 "        </logic>\n" + | 
 |  |  |                 "      </logic>\n" + | 
 |  |  |                 "    </model>\n" + | 
 |  |  |                 "  </models>\n" + | 
 |  |  |                 "</des>"; | 
 |  |  |         assessResult.setXml(xml); | 
 |  |  | /* | 
 |  |  |         Long productId = simulatAssess.getProductId(); | 
 |  |  |         String xml1 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + | 
 |  |  |                 "\n" + | 
 |  |  |                 "<des name=\"General system\" gama=\"0.6\">\n" + | 
 |  |  |                 "  <tasks>\n" + | 
 |  |  |                 "    <task duration=\"1.0\" model=\"1839217232446533633\"/>\n" + | 
 |  |  |                 "  </tasks>\n" + | 
 |  |  |                 "  <models>\n" + | 
 |  |  |                 "    <model name=\"1839217232446533633\">\n" + | 
 |  |  |                 "      <logic name=\"1727338143768926498\" real_name=\"评审用船A\" type=\"series\">\n" + | 
 |  |  |                 "        <logic name=\"1727338125295232953\" real_name=\"通信系统\" name_path=\"通信系统\" type=\"series\">\n" + | 
 |  |  |                 "            <logic name=\"v1\" type=\"parallel\" nums=\"2\">\n" + | 
 |  |  |                 "              <node name=\"1727338347041863487,1727338104458428136\" real_name=\"对讲机\" name_path=\"通信系统,对讲机b\" distType=\"ber\" NoE=\"0,10\" F=\"0,1\"/>\n" + | 
 |  |  |                 "            </logic>\n" + | 
 |  |  |                 "          <node name=\"1727338109884317860\" real_name=\"交换机\" name_path=\"通信系统,交换机\" distType=\"exp\" ToE=\"10\" F=\"1\"/>\n" + | 
 |  |  |                 "        </logic>\n" + | 
 |  |  |                 "        <logic name=\"1727338132480394459\" real_name=\"空调系统\" name_path=\"空调系统\" type=\"vote\" k=\"2\" nums=\"3\">\n" + | 
 |  |  |                 "            <node name=\"1727338148414415252,1727338894880570868,1727338666019181419\" real_name=\"空调\" name_path=\"空调系统,空调c\" distType=\"exp\" ToE=\"88,87,86\" F=\"8,7,6\"/>\n" + | 
 |  |  |                 "        </logic>\n" + | 
 |  |  |                 "        <logic name=\"1727338199831104683\" real_name=\"电力系统\" name_path=\"电力系统\" type=\"series\">\n" + | 
 |  |  |                 "          <node name=\"1727338129701280729\" real_name=\"发电机2\" name_path=\"电力系统,发电机2\" distType=\"ber\" NoE=\"20\" F=\"2\"/>\n" + | 
 |  |  |                 "          <node name=\"1727338865212183133\" real_name=\"发电机1\" name_path=\"电力系统,发电机1\" distType=\"exp\" ToE=\"20\" F=\"2\"/>\n" + | 
 |  |  |                 "          <node name=\"1727338589328410328\" real_name=\"配电板\" name_path=\"电力系统,配电板\" distType=\"exp\" ToE=\"50\" F=\"5\"/>\n" + | 
 |  |  |                 "          <logic name=\"v3\" type=\"series\" nums=\"2\">\n" + | 
 |  |  |                 "            <node name=\"1727338101737644187,1727338554151292452\" real_name=\"蓄电池\" name_path=\"电力系统,蓄电池a\" distType=\"exp\" ToE=\"30,40\" F=\"3,4\"/>\n" + | 
 |  |  |                 "          </logic>\n" + | 
 |  |  |                 "        </logic>\n" + | 
 |  |  |                 "      </logic>\n" + | 
 |  |  |                 "    </model>\n" + | 
 |  |  |                 "  </models>\n" + | 
 |  |  |                 "</des>"; | 
 |  |  |         assessResult.setXml(xml1); | 
 |  |  | */ | 
 |  |  |         Long productId = assessResult.getProductId(); | 
 |  |  |         Long taskId = assessResult.getTaskId(); | 
 |  |  |         Long itemId = assessResult.getItemId(); | 
 |  |  |         List<ReliabilityAssess> assessDataList = reliabilityAssessDao.getProductList(productId, itemId); | 
 |  |  |         Task task = taskService.get(taskId); | 
 |  |  |         XhProductModel product = xhProductModelDao.getById(productId); | 
 |  |  |         List<XhProductModel> productList = xhProductModelDao.getByShipId(productId); | 
 |  |  |         List<ParamData> paramDataList = paramDataDao.getDeviceParams(productId); | 
 |  |  |         Long taskId = simulatAssess.getTaskModelId(); | 
 |  |  |         Task task = taskService.get(taskId); | 
 |  |  |         List<TaskBinoParam> binoParams = taskBinoParamDao.getBinoParams(taskId); | 
 |  |  |  | 
 |  |  |         // 1. 计算各任务阶段的运行时长 | 
 |  |  |         List<TaskPhase> taskPhases = calcTaskPhaseDuration(task); | 
 |  |  |         List<TaskPhase> taskPhases = simulatAssessService.calcTaskPhaseDuration(task); | 
 |  |  |         // 2. 计算各工况模型的运行时长 | 
 |  |  |         List<TaskPhaseModel> taskPhaseModelAll = new ArrayList<>(); | 
 |  |  |         for (TaskPhase taskPhase : taskPhases) { | 
 |  |  |             calcTaskPhaseModelDuration(taskPhase, taskPhaseModelAll); | 
 |  |  |             simulatAssessService.calcTaskPhaseModelDuration(taskPhase, taskPhaseModelAll); | 
 |  |  |         } | 
 |  |  |         // 3. 将各工况模型递归拆解为完整的可供算法包仿真计算的模型 | 
 |  |  |         try { | 
 |  |  |             List<FailureModel> failureModels = new ArrayList<>(); | 
 |  |  |             List<RepairModel> repairModels = new ArrayList<>(); | 
 |  |  |  | 
 |  |  |             Document document = DocumentHelper.createDocument(); | 
 |  |  |             // 添加root节点 | 
 |  |  |             Element root = document.addElement("des"); | 
 |  |  |             root.addAttribute("name", "General system"); | 
 |  |  |             root.addAttribute("gama", assessResult.getConfidence().toString()); | 
 |  |  |             addTasksTag(taskPhaseModelAll, root); | 
 |  |  |             addModelsTag(taskId, | 
 |  |  |                     productId, | 
 |  |  | 
 |  |  |                     productList, | 
 |  |  |                     paramDataList, | 
 |  |  |                     taskPhaseModelAll, | 
 |  |  |                     binoParams, | 
 |  |  |                     root, | 
 |  |  |                     failureModels, repairModels); | 
 |  |  |             addFailureModelsTag(failureModels, root); | 
 |  |  |             addRepairModelsTag(repairModels, root); | 
 |  |  |             saveSimulatAssessTaskPhaseModel(simulatAssess, | 
 |  |  |                     task, | 
 |  |  |                     taskPhases, | 
 |  |  |                     taskPhaseModelAll); | 
 |  |  |                     assessDataList, | 
 |  |  |                     root); | 
 |  |  |  | 
 |  |  |             // 输出格式化xml | 
 |  |  |             XMLWriter xmlWriter = null; | 
 |  |  | 
 |  |  |                 StringWriter writer = new StringWriter(); | 
 |  |  |                 xmlWriter = new XMLWriter(writer, format); | 
 |  |  |                 xmlWriter.write(document); | 
 |  |  |                 simulatAssess.setXml(writer.toString()); | 
 |  |  |                 assessResult.setXml(writer.toString()); | 
 |  |  |             } finally { | 
 |  |  |                 if (xmlWriter != null) xmlWriter.close(); | 
 |  |  |             } | 
 |  |  |             // XML存盘 | 
 |  |  |             insert(simulatAssess); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             e.printStackTrace(); | 
 |  |  |             throw new RuntimeException("组装算法库仿真计算用模型XML失败: " + e.getMessage()); | 
 |  |  |             throw new RenException("组装算法库仿真计算用模型XML失败: " + e.getMessage()); | 
 |  |  |         } | 
 |  |  | */ | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private void addModelsTag(Long taskId, | 
 |  |  |                               Long productId, | 
 |  |  |                               String productName, | 
 |  |  |                               String productNamePath, | 
 |  |  |                               List<XhProductModel> productList, | 
 |  |  |                               List<ParamData> paramDataList, | 
 |  |  |                               List<TaskPhaseModel> taskPhaseModelAll, | 
 |  |  |                               List<ReliabilityAssess> assessDataList, | 
 |  |  |                               Element root) { | 
 |  |  |         Map<String, Integer> vCounter = new HashMap<>(); | 
 |  |  |         vCounter.put("v", 0); | 
 |  |  |         Element modelsTag = root.addElement("models"); | 
 |  |  |         for (TaskPhaseModel taskPhaseModel : taskPhaseModelAll) { | 
 |  |  |             Element modelTag = modelsTag.addElement("model"); | 
 |  |  |             modelTag.addAttribute("name", taskPhaseModel.getOperatConditId().toString()); | 
 |  |  |             List<OperatConditModel> gkModelsAssembled = operatConditModelDao.getGKModelAssembled( | 
 |  |  |                     taskPhaseModel.getOperatConditId()); | 
 |  |  |             OperatConditModel gkModelTop = gkModelsAssembled.stream().filter(item -> | 
 |  |  |                     productId.equals(item.getProductId())).collect(Collectors.toList()).get(0); | 
 |  |  |             List<ModelNode> modelNodeAndVnodeList = modelNodeAlgorithmDao.getListByModelId(gkModelTop.getModelId()); | 
 |  |  |             List<Algorithm> algorithmList = algorithmDao.getListByModelId(gkModelTop.getModelId()); | 
 |  |  |             // 将模型转换为DOM,添加到model标签 | 
 |  |  |             Algorithm endAlgo = algorithmList.stream().filter(item -> | 
 |  |  |                     "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); | 
 |  |  |             List<ModelNode> list = new ArrayList<>(); | 
 |  |  |             list.add(computerNode); | 
 |  |  |             node2DOM(taskId, | 
 |  |  |                     taskPhaseModel, | 
 |  |  |                     gkModelTop.getModelId(), | 
 |  |  |                     productId, | 
 |  |  |                     productName, | 
 |  |  |                     productNamePath, | 
 |  |  |                     productList, | 
 |  |  |                     paramDataList, | 
 |  |  |                     gkModelsAssembled, | 
 |  |  |                     algorithmList, | 
 |  |  |                     modelNodeAndVnodeList, | 
 |  |  |                     assessDataList, | 
 |  |  |                     false, | 
 |  |  |                     null, | 
 |  |  |                     list, | 
 |  |  |                     null, null, null, null, | 
 |  |  |                     modelTag, | 
 |  |  |                     vCounter); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 递归函数 | 
 |  |  |     private void node2DOM(Long taskId, | 
 |  |  |                           TaskPhaseModel taskPhaseModel, | 
 |  |  |                           Long modelId, | 
 |  |  |                           Long productId, | 
 |  |  |                           String productName, | 
 |  |  |                           String productNamePath, | 
 |  |  |                           List<XhProductModel> productList, | 
 |  |  |                           List<ParamData> paramDataList, | 
 |  |  |                           List<OperatConditModel> gkModelsAssembled, | 
 |  |  |                           List<Algorithm> algorithmList, | 
 |  |  |                           List<ModelNode> modelNodeAndVnodeList, | 
 |  |  |                           List<ReliabilityAssess> assessDataList, | 
 |  |  |                           boolean sameNameGroup, | 
 |  |  |                           String sameNameGroupAlgorithmType, | 
 |  |  |                           List<ModelNode> nodeList, | 
 |  |  |                           Integer distType, | 
 |  |  |                           String NoE, | 
 |  |  |                           String ToE, | 
 |  |  |                           String F, | 
 |  |  |                           Element parent, | 
 |  |  |                           Map<String, Integer> vCounter) { | 
 |  |  |         if (sameNameGroup) { | 
 |  |  |             // 相同设备的分组 | 
 |  |  |             Long dataId = nodeList.get(0).getDataId(); | 
 |  |  |             XhProductModel product = productList.stream().filter(item -> | 
 |  |  |                     dataId.equals(item.getId())).collect(Collectors.toList()).get(0); | 
 |  |  |             ParamData paramData = paramDataList.stream().filter(item -> | 
 |  |  |                     dataId.equals(item.getProductId())).collect(Collectors.toList()).get(0); | 
 |  |  |             String NoEStr = ""; | 
 |  |  |             String ToEStr = ""; | 
 |  |  |             String FStr = ""; | 
 |  |  | //            for (ModelNode node : nodeList) { | 
 |  |  |                 List<ReliabilityAssess> assessDatas = assessDataList.stream().filter(item -> | 
 |  |  |                         dataId.equals(item.getId())).collect(Collectors.toList()); | 
 |  |  |                 NoEStr += ","; | 
 |  |  |                 ToEStr += ","; | 
 |  |  |                 FStr += ","; | 
 |  |  |                 if (assessDatas.size() > 0) { | 
 |  |  |                     NoEStr += assessDatas.get(0).getRunNum() != null ? assessDatas.get(0).getRunNum().toString() : "0"; | 
 |  |  |                     ToEStr += assessDatas.get(0).getRunTimes() != null ? assessDatas.get(0).getRunTimes().toString() : "0"; | 
 |  |  |                     FStr += assessDatas.get(0).getFailNum() != null ? assessDatas.get(0).getFailNum().toString() : "0"; | 
 |  |  |                 } | 
 |  |  | //            } | 
 |  |  |             NoEStr = NoEStr.substring(1); | 
 |  |  |             ToEStr = ToEStr.substring(1); | 
 |  |  |             FStr = FStr.substring(1); | 
 |  |  |  | 
 |  |  |             int counter = vCounter.get("v"); | 
 |  |  |             counter++; | 
 |  |  |             vCounter.put("v", counter); | 
 |  |  |             Element sameNameGroupTag = parent.addElement("logic"); | 
 |  |  |             sameNameGroupTag.addAttribute("name", | 
 |  |  |                     "v"+counter); | 
 |  |  |             if ("parallel".equals(sameNameGroupAlgorithmType)) { | 
 |  |  |                 sameNameGroupTag.addAttribute("type", "parallel"); | 
 |  |  |             } else { | 
 |  |  |                 sameNameGroupTag.addAttribute("type", "series"); | 
 |  |  |             } | 
 |  |  |             sameNameGroupTag.addAttribute("nums", String.valueOf(nodeList.size())); | 
 |  |  |             Element nodeTag = sameNameGroupTag.addElement("node"); | 
 |  |  |             nodeTag.addAttribute("name", | 
 |  |  |                     nodeList.stream().map(item -> item.getDataId().toString()+"-"+item.getDeviceNo().toString()). | 
 |  |  |                             collect(Collectors.joining(","))); | 
 |  |  |             nodeTag.addAttribute("real_name", product.getSameSbName()); | 
 |  |  |             nodeTag.addAttribute("name_path", product.getNamePath()); | 
 |  |  |             if (paramData.getReliabDistribType() == 3) { | 
 |  |  |                 // 二项分布 | 
 |  |  |                 nodeTag.addAttribute("distType", "ber"); | 
 |  |  |                 nodeTag.addAttribute("NoE", NoEStr); | 
 |  |  |             } else { | 
 |  |  |                 nodeTag.addAttribute("distType", "exp"); | 
 |  |  |                 nodeTag.addAttribute("ToE", ToEStr); | 
 |  |  |             } | 
 |  |  |             nodeTag.addAttribute("F", FStr); | 
 |  |  |         } else { | 
 |  |  |             // 不同设备(只有1个) | 
 |  |  |             ModelNode node = nodeList.get(0); | 
 |  |  |             if ("node".equals(node.getNodeType())) { | 
 |  |  |                 Long dataId = node.getDataId(); | 
 |  |  |                 XhProductModel product = productList.stream().filter(item -> | 
 |  |  |                         dataId.equals(item.getId())).collect(Collectors.toList()).get(0); | 
 |  |  |                 if ("3,4,10".contains(product.getProductType())) { | 
 |  |  |                     // 系统、分系统、虚单元 | 
 |  |  |                     OperatConditModel gkModel = gkModelsAssembled.stream().filter(item -> | 
 |  |  |                             dataId.equals(item.getProductId())).collect(Collectors.toList()).get(0); | 
 |  |  |                     List<Algorithm> algorithmListSub = algorithmDao.getListByModelId(gkModel.getModelId()); | 
 |  |  |                     List<ModelNode> modelNodeAndVnodeListSub = modelNodeAlgorithmDao.getListByModelId(gkModel.getModelId()); | 
 |  |  |                     Algorithm endAlgo = algorithmListSub.stream().filter(item -> | 
 |  |  |                             "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); | 
 |  |  |                     List<ModelNode> list = new ArrayList<>(); | 
 |  |  |                     list.add(computerNode); | 
 |  |  |                     node2DOM(taskId, | 
 |  |  |                             taskPhaseModel, | 
 |  |  |                             gkModel.getModelId(), | 
 |  |  |                             product.getId(), | 
 |  |  |                             product.getName(), | 
 |  |  |                             product.getNamePath(), | 
 |  |  |                             productList, | 
 |  |  |                             paramDataList, | 
 |  |  |                             gkModelsAssembled, | 
 |  |  |                             algorithmListSub, | 
 |  |  |                             modelNodeAndVnodeListSub, | 
 |  |  |                             assessDataList, | 
 |  |  |                             false, | 
 |  |  |                             null, | 
 |  |  |                             list, | 
 |  |  |                             null, null, null, null, | 
 |  |  |                             parent, | 
 |  |  |                             vCounter); | 
 |  |  |                 } else if ("5".equals(product.getProductType())) { | 
 |  |  |                     // 设备 | 
 |  |  |                     Element nodeTag = parent.addElement("node"); | 
 |  |  |                     nodeTag.addAttribute("name", dataId.toString()); | 
 |  |  |                     nodeTag.addAttribute("real_name", product.getName()); | 
 |  |  |                     nodeTag.addAttribute("name_path", product.getNamePath()); | 
 |  |  |                     if (distType == 3) { | 
 |  |  |                         // 二项分布 | 
 |  |  |                         nodeTag.addAttribute("distType", "ber"); | 
 |  |  |                         nodeTag.addAttribute("NoE", NoE); | 
 |  |  |                     } else { | 
 |  |  |                         nodeTag.addAttribute("distType", "exp"); | 
 |  |  |                         nodeTag.addAttribute("ToE", ToE); | 
 |  |  |                     } | 
 |  |  |                     nodeTag.addAttribute("F", F); | 
 |  |  |                 } | 
 |  |  |             } else { | 
 |  |  |                 // vnode(运算节点) | 
 |  |  |                 Algorithm algo = algorithmList.stream().filter(item -> | 
 |  |  |                         node.getId().equals(item.getId())).collect(Collectors.toList()).get(0); | 
 |  |  |                 if (!"series,parallel,vote".contains(algo.getAlgorithmType())) { | 
 |  |  |                     throw new RenException("可靠性评定功能目前只支持串联、并联和表决。"); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 Element element = parent.addElement("logic"); | 
 |  |  |                 if (null == productId) { | 
 |  |  |                     element.addAttribute("name", algo.getId().toString()); | 
 |  |  |                 } else { | 
 |  |  |                     element.addAttribute("name", productId.toString()); | 
 |  |  |                     element.addAttribute("real_name", productName); | 
 |  |  |                     element.addAttribute("name_path", productNamePath); | 
 |  |  |                 } | 
 |  |  |                 element.addAttribute("type", algo.getAlgorithmType()); | 
 |  |  |  | 
 |  |  |                 String[] computerNodeListStr = algo.getComputerList().split(","); | 
 |  |  |  | 
 |  |  |                 List<Integer> distTypes = new ArrayList<>(); | 
 |  |  |                 List<ModelNode> nodes = new ArrayList<>(); | 
 |  |  |                 List<ReliabilityAssess> assessDatas = new ArrayList<>(); | 
 |  |  |                 for (String nodeStr : computerNodeListStr) { | 
 |  |  |                     ModelNode mn = modelNodeAndVnodeList.stream().filter(item -> | 
 |  |  |                             nodeStr.equals(item.getId().toString())).collect(Collectors.toList()).get(0); | 
 |  |  |                     nodes.add(mn); | 
 |  |  |                     if (mn.getDataId() == null) { | 
 |  |  |                         distTypes.add(null); | 
 |  |  |                         assessDatas.add(null); | 
 |  |  |                     } else { | 
 |  |  |                         List<ParamData> paramDatas1 = paramDataList.stream().filter(item -> | 
 |  |  |                                 mn.getDataId().equals(item.getProductId())).collect(Collectors.toList()); | 
 |  |  |                         if (paramDatas1.size() > 0) { | 
 |  |  |                             distTypes.add(paramDatas1.get(0).getReliabDistribType()); | 
 |  |  |                         } else { | 
 |  |  |                             distTypes.add(null); | 
 |  |  |                         } | 
 |  |  |                         List<ReliabilityAssess> assessDatas1 = assessDataList.stream().filter(item -> | 
 |  |  |                                 mn.getDataId().equals(item.getId())).collect(Collectors.toList()); | 
 |  |  |                         if (assessDatas1.size() > 0) { | 
 |  |  |                             assessDatas.add(assessDatas1.get(0)); | 
 |  |  |                         } else { | 
 |  |  |                             assessDatas.add(null); | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 // 根据同类设备名称进行分组处理(改为根据dataId进行分组) | 
 |  |  |                 Map<String, List<ModelNode>> groupByNameMap = new HashMap<>(); | 
 |  |  |                 for (String nodeStr : computerNodeListStr) { | 
 |  |  |                     ModelNode mn = modelNodeAndVnodeList.stream().filter(item -> | 
 |  |  |                             nodeStr.equals(item.getId().toString())).collect(Collectors.toList()).get(0); | 
 |  |  |                     String sameSbName = null; | 
 |  |  |                     if (mn.getDataId() != null) { | 
 |  |  | //                        XhProductModel product = productList.stream().filter(item -> | 
 |  |  | //                                mn.getDataId().equals(item.getId())).collect(Collectors.toList()).get(0); | 
 |  |  | //                        if ("5".equals(product.getProductType())) sameSbName = product.getSameSbName(); | 
 |  |  |                         sameSbName = mn.getDataId().toString(); | 
 |  |  |                     } | 
 |  |  |                     if (sameSbName == null) { | 
 |  |  |                         List<ModelNode> list = new ArrayList<>(); | 
 |  |  |                         list.add(mn); | 
 |  |  |                         groupByNameMap.put(mn.getId().toString(), list); | 
 |  |  |                     } else { | 
 |  |  |                         if (groupByNameMap.containsKey(sameSbName)) { | 
 |  |  |                             groupByNameMap.get(sameSbName).add(mn); | 
 |  |  |                         } else { | 
 |  |  |                             List<ModelNode> list = new ArrayList<>(); | 
 |  |  |                             list.add(mn); | 
 |  |  |                             groupByNameMap.put(sameSbName, list); | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 // 表决 | 
 |  |  |                 if ("vote".equals(algo.getAlgorithmType())) { | 
 |  |  |                     element.addAttribute("k", algo.getVoteNum().toString()); | 
 |  |  |                     if (groupByNameMap.size() == 1) { | 
 |  |  |                         // 只有1个分组,说明设备都相同 | 
 |  |  |                         element.addAttribute("nums", String.valueOf(computerNodeListStr.length)); | 
 |  |  |                         Element nodeTag = element.addElement("node"); | 
 |  |  |                         createNodeTagSameDevice(nodes, distTypes, assessDatas, nodeTag); | 
 |  |  |                     } else { | 
 |  |  |                         // 不全是相同设备,按不同设备处理 | 
 |  |  |                         for (int i = 0; i < computerNodeListStr.length; i++) { | 
 |  |  |                             List<ModelNode> list = new ArrayList<>(); | 
 |  |  |                             list.add(nodes.get(i)); | 
 |  |  |                             String NoEStr = "0"; | 
 |  |  |                             String ToEStr = "0"; | 
 |  |  |                             String FStr = "0"; | 
 |  |  |                             if (assessDatas.get(i) != null) { | 
 |  |  |                                 NoEStr = assessDatas.get(i).getRunNum() != null ? assessDatas.get(i).getRunNum().toString() : "0"; | 
 |  |  |                                 ToEStr = assessDatas.get(i).getRunTimes() != null ? assessDatas.get(i).getRunTimes().toString() : "0"; | 
 |  |  |                                 FStr = assessDatas.get(i).getFailNum() != null ? assessDatas.get(i).getFailNum().toString() : "0"; | 
 |  |  |                             } | 
 |  |  |                             node2DOM(taskId, | 
 |  |  |                                     taskPhaseModel, | 
 |  |  |                                     modelId, | 
 |  |  |                                     null, | 
 |  |  |                                     null, | 
 |  |  |                                     null, | 
 |  |  |                                     productList, | 
 |  |  |                                     paramDataList, | 
 |  |  |                                     gkModelsAssembled, | 
 |  |  |                                     algorithmList, | 
 |  |  |                                     modelNodeAndVnodeList, | 
 |  |  |                                     assessDataList, | 
 |  |  |                                     false, | 
 |  |  |                                     null, | 
 |  |  |                                     list, | 
 |  |  |                                     distTypes.get(i), NoEStr, ToEStr, FStr, | 
 |  |  |                                     element, | 
 |  |  |                                     vCounter); | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     return; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 if ("parallel".equals(algo.getAlgorithmType())) { | 
 |  |  |                     if (groupByNameMap.size() == 1) { | 
 |  |  |                         // 只有1个分组,说明设备都相同 | 
 |  |  |                         element.addAttribute("nums", String.valueOf(computerNodeListStr.length)); | 
 |  |  |                         Element nodeTag = element.addElement("node"); | 
 |  |  |                         createNodeTagSameDevice(nodes, distTypes, assessDatas, nodeTag); | 
 |  |  |                         return; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 Iterator<String> iterator = groupByNameMap.keySet().iterator(); | 
 |  |  |                 while (iterator.hasNext()) { | 
 |  |  |                     String name = iterator.next(); | 
 |  |  |                     List<ModelNode> list = groupByNameMap.get(name); | 
 |  |  |                     if (list.size() > 1) { | 
 |  |  |                         // 相同名称的设备 | 
 |  |  |                         node2DOM(taskId, | 
 |  |  |                                 taskPhaseModel, | 
 |  |  |                                 modelId, | 
 |  |  |                                 null, | 
 |  |  |                                 null, | 
 |  |  |                                 null, | 
 |  |  |                                 productList, | 
 |  |  |                                 paramDataList, | 
 |  |  |                                 gkModelsAssembled, | 
 |  |  |                                 algorithmList, | 
 |  |  |                                 modelNodeAndVnodeList, | 
 |  |  |                                 assessDataList, | 
 |  |  |                                 true, | 
 |  |  |                                 algo.getAlgorithmType(), | 
 |  |  |                                 list, | 
 |  |  |                                 null, null, null, null, | 
 |  |  |                                 element, | 
 |  |  |                                 vCounter); | 
 |  |  |                     } else { | 
 |  |  |                         // 不同名称节点(1个节点) | 
 |  |  |                         Integer distTypeParam = null; | 
 |  |  |                         String NoEStr = null; | 
 |  |  |                         String ToEStr = null; | 
 |  |  |                         String FStr = null; | 
 |  |  |                         ModelNode oneNode = list.get(0); | 
 |  |  |                         if (oneNode.getDataId() != null) { | 
 |  |  |                             List<ParamData> paramDatas = paramDataList.stream().filter(item -> | 
 |  |  |                                     oneNode.getDataId().equals(item.getProductId())).collect(Collectors.toList()); | 
 |  |  |                             if (paramDatas.size() > 0) { | 
 |  |  |                                 distTypeParam = paramDatas.get(0).getReliabDistribType(); | 
 |  |  |                             } | 
 |  |  |                             List<ReliabilityAssess> assessDatas1 = assessDataList.stream().filter(item -> | 
 |  |  |                                     oneNode.getDataId().equals(item.getId())).collect(Collectors.toList()); | 
 |  |  |                             if (assessDatas1.size() > 0) { | 
 |  |  |                                 NoEStr = assessDatas1.get(0).getRunNum() != null ? assessDatas1.get(0).getRunNum().toString() : "0"; | 
 |  |  |                                 ToEStr = assessDatas1.get(0).getRunTimes() != null ? assessDatas1.get(0).getRunTimes().toString() : "0"; | 
 |  |  |                                 FStr = assessDatas1.get(0).getFailNum() != null ? assessDatas1.get(0).getFailNum().toString() : "0"; | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                         node2DOM(taskId, | 
 |  |  |                                 taskPhaseModel, | 
 |  |  |                                 modelId, | 
 |  |  |                                 null, | 
 |  |  |                                 null, | 
 |  |  |                                 null, | 
 |  |  |                                 productList, | 
 |  |  |                                 paramDataList, | 
 |  |  |                                 gkModelsAssembled, | 
 |  |  |                                 algorithmList, | 
 |  |  |                                 modelNodeAndVnodeList, | 
 |  |  |                                 assessDataList, | 
 |  |  |                                 false, | 
 |  |  |                                 null, | 
 |  |  |                                 list, | 
 |  |  |                                 distTypeParam, NoEStr, ToEStr, FStr, | 
 |  |  |                                 element, | 
 |  |  |                                 vCounter); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private void createNodeTagSameDevice(List<ModelNode> nodes, | 
 |  |  |                                          List<Integer> distTypes, | 
 |  |  |                                          List<ReliabilityAssess> assessDatas, | 
 |  |  |                                          Element nodeTag) { | 
 |  |  |         String NoEStr = ""; | 
 |  |  |         String ToEStr = ""; | 
 |  |  |         String FStr = ""; | 
 |  |  |         for (ReliabilityAssess assessData : assessDatas) { | 
 |  |  |             if (assessData != null) { | 
 |  |  |                 NoEStr += "," + (assessData.getRunNum() != null ? assessData.getRunNum().toString() : "0"); | 
 |  |  |                 ToEStr += "," + (assessData.getRunTimes() != null ? assessData.getRunTimes().toString() : "0"); | 
 |  |  |                 FStr += "," + (assessData.getFailNum() != null ? assessData.getFailNum().toString() : "0"); | 
 |  |  |                 break; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         NoEStr = NoEStr.substring(1); | 
 |  |  |         ToEStr = ToEStr.substring(1); | 
 |  |  |         FStr = FStr.substring(1); | 
 |  |  |  | 
 |  |  |         nodeTag.addAttribute("name", | 
 |  |  |                 nodes.stream().map(item -> item.getDataId().toString()+"-"+item.getDeviceNo().toString()). | 
 |  |  |                         collect(Collectors.joining(","))); | 
 |  |  |         if (distTypes.get(0) == 3) { | 
 |  |  |             // 二项分布 | 
 |  |  |             nodeTag.addAttribute("distType", "ber"); | 
 |  |  |             nodeTag.addAttribute("NoE", NoEStr); | 
 |  |  |         } else { | 
 |  |  |             nodeTag.addAttribute("distType", "exp"); | 
 |  |  |             nodeTag.addAttribute("ToE", ToEStr); | 
 |  |  |         } | 
 |  |  |         nodeTag.addAttribute("F", FStr); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private void addTasksTag(List<TaskPhaseModel> taskPhaseModelAll, | 
 |  |  |                              Element root) { | 
 |  |  |         Element tasksTag = root.addElement("tasks"); | 
 |  |  |         for (TaskPhaseModel taskPhaseModel : taskPhaseModelAll) { | 
 |  |  |             Element taskTag = tasksTag.addElement("task"); | 
 |  |  |             taskTag.addAttribute("duration", String.valueOf(taskPhaseModel.getOperatConditDuration())); | 
 |  |  |             taskTag.addAttribute("model", taskPhaseModel.getOperatConditId().toString()); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private Result callReliaAssessLib(AssessResult assessResult) { | 
 |  |  | 
 |  |  |         InputStream is = null; | 
 |  |  |         BufferedReader br = null; | 
 |  |  |         try { | 
 |  |  |             setParamToRedis(assessResult); | 
 |  |  |             try { | 
 |  |  |                 setParamToRedis(assessResult); | 
 |  |  |             } catch (Exception e) { | 
 |  |  |                 throw new RenException("访问Redis失败。请检查Redis是否已启动。"); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             Process process = null; | 
 |  |  |             String command = "python " + reliaSimMain; | 
 |  |  |             String command = "python " + assessMain; | 
 |  |  |             command += " -ip " + redisHost + " -port " + redisPort; | 
 |  |  |             command += " -taskType " + RELIA_ASSESS_TASK_TYPE_SIMULATION + " -taskId " + assessResult.getId().toString(); | 
 |  |  |             logger.info("cmd命令为:" + command); | 
 |  |  | 
 |  |  |             } else if (System.getProperty("os.name").toLowerCase().indexOf("linux") > -1) { | 
 |  |  |                 process = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", command}); | 
 |  |  |             } else { | 
 |  |  |                 throw new Exception("暂不支持该操作系统,进行启动算法库计算!"); | 
 |  |  |                 throw new RenException("暂不支持该操作系统,进行启动算法库计算!"); | 
 |  |  |             } | 
 |  |  |             is = process.getInputStream(); | 
 |  |  |             // 以命令行方式调用算法库时,接口约定返回的结果是utf-8编码 | 
 |  |  | 
 |  |  |             if (line != null) { | 
 |  |  |                 ReliaSimLibResult rtn = com.alibaba.fastjson.JSONObject.parseObject(line, ReliaSimLibResult.class); | 
 |  |  |                 if ("0".equals(rtn.getCode())) { | 
 |  |  |                     logger.info("启动算法库成功。"); | 
 |  |  |                     result = Result.ok(); | 
 |  |  |                     logger.info("启动可靠性评定算法库成功。"); | 
 |  |  |                     if (exitCode ==0) { | 
 |  |  |                         deleteAssessInfoInRedis(assessResult.getId()); | 
 |  |  |                         result = Result.ok(); | 
 |  |  |                     } else { | 
 |  |  |                         result = Result.error("可靠性评定算法库计算失败: exitCode=" + exitCode); | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  |                     String errorMsg = rtn.getErrorMsg(); | 
 |  |  |                     throw new RuntimeException("启动算法库失败: errorMsg=" + errorMsg); | 
 |  |  |                     throw new RenException("启动可靠性评定算法库失败: errorMsg=" + errorMsg); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             logger.error("启动可靠性评定算法库时发生Exception:", e); | 
 |  |  |             e.printStackTrace(); | 
 |  |  |             result = Result.error(e.getMessage()); | 
 |  |  |             throw new RenException("启动可靠性评定算法库失败: errorMsg=" + e.getMessage()); | 
 |  |  |         } finally { | 
 |  |  |             if (is != null) { | 
 |  |  |                 try { | 
 |  |  | 
 |  |  |         redisTemplate.opsForValue().set(key, jsonObject.toJSONString()); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void deleteAssessInfoInRedis(Long simId) { | 
 |  |  |         redisTemplate.delete(simId.toString() + RELIA_ASSESS_TASK_TYPE_SIMULATION); | 
 |  |  |     public void deleteAssessInfoInRedis(Long assessId) { | 
 |  |  |         redisTemplate.delete(assessId.toString() + RELIA_ASSESS_TASK_TYPE_SIMULATION); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | 
 |  |  |             for (int i = 0; i < sheets; i++) { | 
 |  |  |                 Sheet sheet = workbook.getSheetAt(i); | 
 |  |  |                 int num = sheet.getLastRowNum(); // 一共有多少行 | 
 |  |  |                 String sheetName = sheet.getSheetName(); //获取当前sheet名称 | 
 |  |  |                 for (int j = 1; j <= num; j++) { | 
 |  |  |                     CacheUtils.put(progressId, "speed", CommonUtils.getPercent(j, num)); | 
 |  |  |                     CacheUtils.put(progressId, "msg", "共" + num + "行,已完成第" + j + "行"); | 
 |  |  | 
 |  |  |                     row1 = j; | 
 |  |  |                     String pattern = "yyyy-MM-dd"; | 
 |  |  |                     Row row = sheet.getRow(row1); | 
 |  |  |                    // String sort = ImportUtil.getCellValue(row, 0, pattern); //序号 | 
 |  |  |  | 
 |  |  |                     String name = ImportUtil.getCellValue(row, 1, pattern); //节点名称 | 
 |  |  |                     String type = ImportUtil.getCellValue(row, 2, pattern);//节点类型 | 
 |  |  |                     String runNum = ImportUtil.getCellValue(row, 3, pattern); //运行时长 | 
 |  |  |                     String runTime = ImportUtil.getCellValue(row, 4, pattern); //运行次数 | 
 |  |  |                     String failNum = ImportUtil.getCellValue(row, 5, pattern); //失败次数 | 
 |  |  |                     String runNumStr = ImportUtil.getCellValue(row, 3, pattern); //运行时长 | 
 |  |  |                     String runTimeStr = ImportUtil.getCellValue(row, 4, pattern); //运行次数 | 
 |  |  |                     String failNumStr = ImportUtil.getCellValue(row, 5, pattern); //失败次数 | 
 |  |  |  | 
 |  |  |                     if (StringUtils.isBlank(name) || StringUtils.isBlank(type)) | 
 |  |  |                         continue; | 
 |  |  |  | 
 |  |  |                     Integer runNum = 0; | 
 |  |  |                     Double runTime = 0.0; | 
 |  |  |                     Integer failNum = 0; | 
 |  |  |                     if (StringUtils.isNotBlank(runNumStr)) { | 
 |  |  |                         runNum = Integer.valueOf(runNumStr); | 
 |  |  |                     } | 
 |  |  |                     if (StringUtils.isNotBlank(runTimeStr)) { | 
 |  |  |                         runTime = Double.valueOf(runTimeStr); | 
 |  |  |                     } | 
 |  |  |                     if (StringUtils.isNotBlank(failNumStr)) { | 
 |  |  |                         failNum = Integer.valueOf(failNumStr); | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     Long productId = null; | 
 |  |  |                     if (type.equals("总体")) { | 
 |  |  | 
 |  |  |                         fxtPath = ""; | 
 |  |  |                         sbPath = ""; | 
 |  |  |                         productId = shipId; | 
 |  |  |                     }else { | 
 |  |  |                     } else { | 
 |  |  |                         if (type.equals("系统")) { | 
 |  |  |                             if (StringUtils.isNotBlank(shipPath)) { | 
 |  |  |                                 path = xtPath = name; | 
 |  |  | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |                     ReliabilityAssess assess = new ReliabilityAssess(); | 
 |  |  |                     assess.setFailNum(Integer.valueOf(failNum)); | 
 |  |  |                     if (StringUtils.isNotBlank(runNum)){ | 
 |  |  |                         assess.setRunNum(Integer.valueOf(runNum)); | 
 |  |  |                     } | 
 |  |  |                     if (StringUtils.isNotBlank(runTime)){ | 
 |  |  |                         assess.setRunTimes(Double.valueOf(runTime)); | 
 |  |  |                     } | 
 |  |  |                     assess.setFailNum(failNum); | 
 |  |  |                     assess.setRunNum(runNum); | 
 |  |  |                     assess.setRunTimes(runTime); | 
 |  |  |  | 
 |  |  |                     assess.setItemId(itemId); | 
 |  |  |                     assess.setProductId(productId); | 
 |  |  |                     this.insert(assess); | 
 |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         Date nowDate = new Date(); | 
 |  |  |         String msg = "产品模型导入时间:" + CommonUtils.getDatePoor(nowDate, beginDate) + "\r\n"; | 
 |  |  |         String msg = "导入时间:" + CommonUtils.getDatePoor(nowDate, beginDate) + "\r\n"; | 
 |  |  |         System.out.println(msg); | 
 |  |  |         suc = sum - err; | 
 |  |  |         map = new HashMap<>(); | 
 |  |  | 
 |  |  |     public List<AssessItem> getAssessDataList(Long productId) { | 
 |  |  |         return baseDao.getAssessDataList(productId); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |