| | |
| | | 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 com.zt.life.modules.mainPart.utils.GetStringSpace; |
| | | import org.dom4j.Document; |
| | | import org.dom4j.DocumentHelper; |
| | | import org.dom4j.Element; |
| | |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.awt.*; |
| | | import java.io.BufferedReader; |
| | | import java.io.InputStream; |
| | | import java.io.InputStreamReader; |
| | |
| | | * @since 1.0.0 2024-03-20 |
| | | */ |
| | | @Service |
| | | public class SimulatAssessService extends BaseService<SimulatAssessDao, SimulatAssess> { |
| | | public class SimulatAssessService extends BaseService<SimulatAssessDao, SimulatAssess> { |
| | | private static final Logger logger = LoggerFactory.getLogger(SimulatAssessService.class); |
| | | private static final String RELIA_SIM_TASK_TYPE_SIMULATION = "calcreq"; |
| | | |
| | |
| | | x2 = x1 + status.getTimes() * pointNumPerHour + 5; |
| | | JSONObject lineJson = new JSONObject(templetsStrMap.get(status.getStatus())); |
| | | setlineXy(lineJson, x1, y, x2, y, ""); |
| | | |
| | | JsonUtils2.setJsonValueByPath(lineJson,"data/status".split("/"),status.getStatus()); |
| | | JsonUtils2.setJsonValueByPath(lineJson,"data/startTimes".split("/"),String.format("%.4f", x1)); |
| | | JsonUtils2.setJsonValueByPath(lineJson,"data/endTimes".split("/"),String.format("%.4f", x1 + status.getTimes())); |
| | | JsonUtils2.setJsonValueByPath(lineJson, "id".split("/"), UUIDUtil.generateId().toString()); |
| | | x1 = x2 - 5; |
| | | jsonArray.add(lineJson); |
| | |
| | | int spaceWitdth = 80; |
| | | x1 = -spaceWitdth; |
| | | x2 = -11; |
| | | y = -100; |
| | | y = -130; |
| | | String[] tlArr = "O,F,I,S,M".split(","); |
| | | for (String s : tlArr) { |
| | | JSONObject f = templetsMap.get(s); |
| | |
| | | //阶段模型及刻度 |
| | | x1 = 0; |
| | | x2 = 0; |
| | | double y1 = -60; |
| | | y = -30; |
| | | double y2 = -10; |
| | | JSONObject modelJson = new JSONObject(templetsStrMap.get("model")); |
| | | double y1 = -100; |
| | | y = -70; |
| | | double y2 = -50; |
| | | |
| | | setlineXy(modelJson, x1, y1, x1, y2, null); |
| | | JSONObject modelJson = new JSONObject(templetsStrMap.get("model")); |
| | | setlineXy(modelJson, 2, y1, 2, y2, null); |
| | | jsonArray.add(modelJson); |
| | | double totalHours = 0; |
| | | for (int i = 0; i < modelDtoList.size(); i++) { |
| | | JSONObject modelJson2 = new JSONObject(templetsStrMap.get("model")); |
| | | SimulatAssessTaskPhaseModel modelDto = modelDtoList.get(i); |
| | | totalHours = totalHours + modelDto.getGkDuration(); |
| | | x2 = x2 + modelDto.getGkDuration() * pointNumPerHour; |
| | | double gkPoint = modelDto.getGkDuration() * pointNumPerHour; |
| | | x2 = x2 + gkPoint; |
| | | if (i < modelDtoList.size() - 1) { |
| | | setlineXy(modelJson2, x2, y1, x2, y, null); |
| | | } else { |
| | |
| | | modelName = modelRbd.getModelName(); |
| | | modelId = modelRbd.getId().toString(); |
| | | } |
| | | |
| | | Map<String, Integer> mapSpace = GetStringSpace.getStringSpaceSize(modelName, null, 18); |
| | | JSONObject textJson = new JSONObject(templetsStrMap.get("text")); |
| | | JsonUtils2.setJsonValueByPath(textJson, "data/dataId".split("/"), modelId); |
| | | JsonUtils2.setJsonValueByPath(textJson, "id".split("/"), UUIDUtil.generateId().toString()); |
| | | JsonUtils2.setJsonValueByPath(textJson, "attrs/label/textWrap/text".split("/"), modelName); |
| | | JsonUtils2.setJsonValueByPath(textJson, "position/x".split("/"), x1 + 30); |
| | | |
| | | JsonUtils2.setJsonValueByPath(textJson, "size/width".split("/"), mapSpace.get("width") + 20); |
| | | |
| | | double x11 = x1 + ((gkPoint - mapSpace.get("width") - 20) / 2); |
| | | JsonUtils2.setJsonValueByPath(textJson, "position/x".split("/"), x11); |
| | | JsonUtils2.setJsonValueByPath(textJson, "position/y".split("/"), y1); |
| | | jsonArray.add(textJson); |
| | | x1 = x2; |
| | |
| | | setlineXy(modelJson3, 0, y, x2, y, null); |
| | | jsonArray.add(modelJson3); |
| | | |
| | | double curPointHour = 10, periodHour = 50; |
| | | Integer curPointHour = 50, periodHour = 50; |
| | | while (curPointHour < totalHours) { |
| | | JSONObject modelJson4 = new JSONObject(templetsStrMap.get("model")); |
| | | double x = curPointHour * pointNumPerHour; |
| | | setlineXy(modelJson4, x, y, x, y, null); |
| | | setlineXy(modelJson4, x, y, x, y2, null); |
| | | jsonArray.add(modelJson4); |
| | | curPointHour += 10.0; |
| | | |
| | | Map<String, Integer> mapSpace = GetStringSpace.getStringSpaceSize(curPointHour.toString(), null, 20); |
| | | JSONObject textJson = new JSONObject(templetsStrMap.get("text")); |
| | | JsonUtils2.setJsonValueByPath(textJson, "id".split("/"), UUIDUtil.generateId().toString()); |
| | | JsonUtils2.setJsonValueByPath(textJson, "attrs/label/textWrap/text".split("/"), curPointHour.toString()); |
| | | |
| | | JsonUtils2.setJsonValueByPath(textJson, "size/width".split("/"), mapSpace.get("width") + 20); |
| | | |
| | | double x11 = x - mapSpace.get("width") / 2 - 5; |
| | | JsonUtils2.setJsonValueByPath(textJson, "position/x".split("/"), x11); |
| | | JsonUtils2.setJsonValueByPath(textJson, "position/y".split("/"), y2); |
| | | jsonArray.add(textJson); |
| | | |
| | | curPointHour += periodHour; |
| | | } |
| | | |
| | | |
| | | return jsonObject.toString(); |
| | | } |
| | |
| | | JsonUtils2.setJsonValueByPath(lineJson, "source/y".split("/"), y1); |
| | | JsonUtils2.setJsonValueByPath(lineJson, "target/x".split("/"), x2); |
| | | JsonUtils2.setJsonValueByPath(lineJson, "target/y".split("/"), y2); |
| | | JsonUtils2.setJsonValueByPath(lineJson, "id".split("/"), UUIDUtil.generateId().toString()); |
| | | if (text != null) { |
| | | JsonUtils2.setArrJsonValueByPath(lineJson, "labels".split("/"), null, "0", "attrs/text/text", ""); |
| | | } |
| | |
| | | command += " -ip " + redisHost + " -port " + redisPort; |
| | | command += " -taskType " + RELIA_SIM_TASK_TYPE_SIMULATION + " -taskId " + simulatAssess.getId().toString(); |
| | | logger.info("cmd命令为:" + command); |
| | | if(System.getProperty("os.name").toLowerCase().indexOf("windows") > -1){ |
| | | if (System.getProperty("os.name").toLowerCase().indexOf("windows") > -1) { |
| | | process = Runtime.getRuntime().exec(new String[]{"cmd", "/c", command}); |
| | | }else if(System.getProperty("os.name").toLowerCase().indexOf("linux") > -1){ |
| | | } else if (System.getProperty("os.name").toLowerCase().indexOf("linux") > -1) { |
| | | process = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", command}); |
| | | }else{ |
| | | } else { |
| | | throw new Exception("暂不支持该操作系统,进行启动算法库计算!"); |
| | | } |
| | | is = process.getInputStream(); |
| | | // 以命令行方式调用算法库时,接口约定返回的结果是utf-8编码 |
| | | br = new BufferedReader(new InputStreamReader(is,"utf-8")); |
| | | br = new BufferedReader(new InputStreamReader(is, "utf-8")); |
| | | String line = br.readLine(); |
| | | logger.info("算法库返回结果:" + line); |
| | | // int exitCode = process.waitFor(); // 异步方式,不等待算法库计算完毕,所以要注释掉该行 |
| | |
| | | // 仿真次数 |
| | | jsonObject.put("simulate_times", simulatAssess.getSimulatFrequency()); |
| | | // 采样周期 |
| | | jsonObject.put("timeslice", simulatAssess.getSamplPeriod()/60.0); // 单位统一换算为小时 |
| | | jsonObject.put("timeslice", simulatAssess.getSamplPeriod() / 60.0); // 单位统一换算为小时 |
| | | jsonObject.put("result_home", resultHome); |
| | | jsonObject.put("seed", 1000); |
| | | redisTemplate.opsForValue().set(key, jsonObject.toJSONString()); |
| | |
| | | } |
| | | |
| | | private void addRepairModelsTag(List<RepairModel> repairModels, |
| | | Element root) { |
| | | Element root) { |
| | | Element ele = null; |
| | | Element repairModelsTag = root.addElement("repair_models"); |
| | | for (RepairModel repairModel : repairModels) { |
| | |
| | | } |
| | | |
| | | private void calcTaskPhaseModelDuration(TaskPhase taskPhase, |
| | | List<TaskPhaseModel> taskPhaseModelAll) { |
| | | List<TaskPhaseModel> taskPhaseModelAll) { |
| | | List<TaskPhaseModel> taskPhaseModels = taskPhaseModelDao.getListByPhaseId(taskPhase.getId()); |
| | | double totalRate = taskPhaseModels.stream().mapToDouble(TaskPhaseModel::getOperatConditDurationRate).sum(); |
| | | double sum = 0.0; |
| | |
| | | taskPhaseModelAll.add(taskPhaseModel); |
| | | } |
| | | // 把零头补到最后一个工况模型 |
| | | double duration = taskPhaseModels.get(taskPhaseModels.size()-1).getOperatConditDuration(); |
| | | taskPhaseModels.get(taskPhaseModels.size()-1).setOperatConditDuration(duration + 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; |
| | | } |
| | | // 把零头补到最后一个阶段 |
| | | double duration = taskPhases.get(taskPhases.size()-1).getPhaseDuration(); |
| | | taskPhases.get(taskPhases.size()-1).setPhaseDuration(duration + task.getTaskDuration() - sum); |
| | | double duration = taskPhases.get(taskPhases.size() - 1).getPhaseDuration(); |
| | | taskPhases.get(taskPhases.size() - 1).setPhaseDuration(duration + task.getTaskDuration() - sum); |
| | | |
| | | return taskPhases; |
| | | } |