xyc
2024-08-02 a43fd8f15c7da7f4a14ba4ebb79970dad4ce1fae
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java
@@ -1,8 +1,7 @@
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;
@@ -14,12 +13,9 @@
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.*;
@@ -31,13 +27,13 @@
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;
@@ -51,7 +47,6 @@
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;
@@ -98,13 +93,16 @@
    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;
@@ -257,13 +255,21 @@
            } 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);
@@ -688,7 +694,7 @@
            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();
@@ -724,7 +730,7 @@
    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());
@@ -741,6 +747,9 @@
        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. 计算各工况模型的运行时长
@@ -762,6 +771,8 @@
                    productList,
                    paramDataList,
                    taskPhaseModelAll,
                    binoParams,
                    taskRepairParams,
                    root,
                    failureModels, repairModels);
            addFailureModelsTag(failureModels, root);
@@ -901,7 +912,8 @@
            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) {
@@ -914,7 +926,8 @@
            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;
    }
@@ -923,6 +936,8 @@
                              List<XhProductModel> productList,
                              List<ParamData> paramDataList,
                              List<TaskPhaseModel> taskPhaseModelAll,
                              List<TaskBinoParam> binoParams,
                              List<TaskRepairParam> taskRepairParams,
                              Element root,
                              List<FailureModel> failureModels,
                              List<RepairModel> repairModels) {
@@ -946,6 +961,8 @@
                    gkModelsAssembled,
                    algorithmList,
                    modelNodeAndVnodeList,
                    binoParams,
                    taskRepairParams,
                    computerNode, modelTag,
                    failureModels, repairModels);
        }
@@ -957,6 +974,8 @@
                          List<OperatConditModel> gkModelsAssembled,
                          List<Algorithm> algorithmList,
                          List<ModelNode> modelNodeAndVnodeList,
                          List<TaskBinoParam> binoParams,
                          List<TaskRepairParam> taskRepairParams,
                          ModelNode node,
                          Element parent,
                          List<FailureModel> failureModels,
@@ -965,7 +984,7 @@
            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);
@@ -980,6 +999,8 @@
                        gkModelsAssembled,
                        algorithmListSub,
                        modelNodeAndVnodeListSub,
                        binoParams,
                        taskRepairParams,
                        computerNode, parent,
                        failureModels, repairModels);
            } else if ("5".equals(product.getProductType())) {
@@ -989,11 +1010,13 @@
                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()) {
@@ -1026,16 +1049,41 @@
            }
            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;
    }
}