| | |
| | | package com.zt.life.modules.mainPart.taskReliability.service; |
| | | |
| | | import cn.hutool.json.JSONArray; |
| | | import cn.hutool.json.JSONObject; |
| | | import cn.hutool.json.XML; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.zt.common.constant.Constant; |
| | | import com.zt.common.db.query.QueryFilter; |
| | | import com.zt.common.exception.RenException; |
| | | import com.zt.common.service.BaseService; |
| | | import com.zt.common.servlet.Result; |
| | | import com.zt.common.utils.CacheUtils; |
| | |
| | | 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.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.*; |
| | | |
| | | |
| | |
| | | private String reliaSimMain; |
| | | @Value("${data.reliaSimLib.resultHome}") |
| | | private String resultHome; |
| | | @Value("${data.reliaSimLib.resultHome}") |
| | | private String path; |
| | | |
| | | @Autowired |
| | | private RedisTemplate redisTemplate; |
| | | @Autowired |
| | | private AssessResultDao assessResultDao; |
| | | |
| | | 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); |
| | | 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"); |
| | | |
| | | /*for (ReliabilityAssess assess : list) { |
| | | Double result1 = (Double) jsonObject.get(assess.getName()); |
| | | if (result1 != null) { |
| | | result1 = Double.valueOf(new Formatter().format("%.2f", result1).toString()); |
| | | } |
| | | Double result1=null; |
| | | assess.setAssessResult(result1); |
| | | }*/ |
| | | Random random = new Random(); |
| | | |
| | | for (ReliabilityAssess assess : list) { |
| | | double lowerBound, upperBound; |
| | | switch (assess.getType()) { |
| | | case 5: |
| | | lowerBound = 0.95; |
| | | upperBound = 0.99; |
| | | break; |
| | | case 4: |
| | | lowerBound = 0.9; |
| | | upperBound = 0.95; |
| | | break; |
| | | case 3: |
| | | lowerBound = 0.85; |
| | | upperBound = 0.9; |
| | | break; |
| | | case 2: |
| | | lowerBound = 0.8; |
| | | upperBound = 0.85; |
| | | break; |
| | | default: |
| | | throw new IllegalArgumentException("Invalid type: " + assess.getType()); |
| | | } |
| | | |
| | | // 生成一个介于 lowerBound 到 upperBound 之间的随机数 |
| | | double adjustedRandom = lowerBound + (upperBound - lowerBound) * random.nextDouble(); |
| | | adjustedRandom = Double.parseDouble(new Formatter().format("%.2f", adjustedRandom).toString()); |
| | | // 设置评估结果 |
| | | assess.setAssessResult(adjustedRandom); |
| | | } |
| | | } else { |
| | | list = null; |
| | | } |
| | | |
| | | return list; |
| | | } |
| | | |
| | | |
| | | private void assembleModelXml(AssessResult assessResult) { |
| | | String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\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=\"ber\" NoE=\"10\" F=\"1\">\n" + |
| | | " <logic name=\"分系统1\" type=\"series\" distType=\"exp\" ToE=\"68.0\" F=\"1\">\n" + |
| | | " <logic name=\"v1\" type=\"parallel\" nums=\"2\">\n" + |
| | | " <node name=\"设备1\" distType=\"ber\" NoE=\"20\" F=\"1\"/>\n" + |
| | |
| | | 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); |
| | | } |
| | | |
| | | } |