可靠性仿真评估时后端增加可修设备可修阶段可靠度固定为1的控制
4个文件已修改
93 ■■■■ 已修改文件
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dto/TaskPhaseConstraintDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/RepairModel.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ReliabilityAssessService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dto/TaskPhaseConstraintDto.java
@@ -17,7 +17,7 @@
    @ApiModelProperty(value = "阶段id")
    private Long phaseId;
    @ApiModelProperty(value = "工况模型id(当前未使用)")
    @ApiModelProperty(value = "工况模型id")
    private Long gkModelId;
    @ApiModelProperty(value = "产品结构树节点ID(当前未使用)")
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/RepairModel.java
@@ -6,9 +6,8 @@
@Data
public class RepairModel {
    public static final String TYPE_EXP = "exponential";
    public static final String TYPE_BIN = "binomial";
    public static final String TYPE_WBL = "weibull";
    public static final String TYPE_FIX = "fixed";
    public static final String TYPE_DIRAC = "dirac";
    @ApiModelProperty(value = "ID")
    private Long id;
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ReliabilityAssessService.java
@@ -376,9 +376,9 @@
            String NoEStr = "";
            String ToEStr = "";
            String FStr = "";
            for (ModelNode node : nodeList) {
//            for (ModelNode node : nodeList) {
                List<ReliabilityAssess> assessDatas = assessDataList.stream().filter(item ->
                        node.getDataId().equals(item.getId())).collect(Collectors.toList());
                        dataId.equals(item.getId())).collect(Collectors.toList());
                NoEStr += ",";
                ToEStr += ",";
                FStr += ",";
@@ -387,7 +387,7 @@
                    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);
@@ -406,7 +406,8 @@
            sameNameGroupTag.addAttribute("nums", String.valueOf(nodeList.size()));
            Element nodeTag = sameNameGroupTag.addElement("node");
            nodeTag.addAttribute("name",
                    nodeList.stream().map(item -> item.getDataId().toString()).collect(Collectors.joining(",")));
                    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) {
@@ -519,16 +520,17 @@
                    }
                }
                // 根据同类设备名称进行分组处理
                // 根据同类设备名称进行分组处理(改为根据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();
//                        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<>();
@@ -680,6 +682,7 @@
                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);
@@ -687,7 +690,8 @@
        FStr = FStr.substring(1);
        nodeTag.addAttribute("name",
                nodes.stream().map(item -> item.getDataId().toString()).collect(Collectors.joining(",")));
                nodes.stream().map(item -> item.getDataId().toString()+"-"+item.getDeviceNo().toString()).
                        collect(Collectors.joining(",")));
        if (distTypes.get(0) == 3) {
            // 二项分布
            nodeTag.addAttribute("distType", "ber");
@@ -742,14 +746,17 @@
                ReliaSimLibResult rtn = com.alibaba.fastjson.JSONObject.parseObject(line, ReliaSimLibResult.class);
                if ("0".equals(rtn.getCode())) {
                    logger.info("启动可靠性评定算法库成功。");
                    if (exitCode ==0) {
                        deleteAssessInfoInRedis(assessResult.getId());
                    result = Result.ok();
                    } else {
                        result = Result.error("可靠性评定算法库计算失败: exitCode=" + exitCode);
                    }
                } else {
                    String errorMsg = rtn.getErrorMsg();
                    throw new RenException("启动可靠性评定算法库失败: errorMsg=" + errorMsg);
                }
            }
            deleteAssessInfoInRedis(assessResult.getId());
        } catch (Exception e) {
            logger.error("启动可靠性评定算法库时发生Exception:", e);
            e.printStackTrace();
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java
@@ -758,7 +758,8 @@
            Element root = document.addElement("des");
            root.addAttribute("name", "General system");
            addTasksTag(taskPhaseModelAll, root);
            addModelsTag(taskId,
            addModelsTag(simulatAssess,
                    taskId,
                    productId,
                    product.getName(),
                    product.getNamePath(),
@@ -895,6 +896,10 @@
                    ele = repairModelTag.addElement("shape");
                    ele.addAttribute("value", String.valueOf(repairModel.getParam3()));
                    break;
                case RepairModel.TYPE_DIRAC:
                    ele = repairModelTag.addElement("repair-time");
                    ele.addAttribute("value", String.valueOf(repairModel.getParam1()));
                    break;
                default:
                    break;
            }
@@ -937,7 +942,8 @@
        return taskPhases;
    }
    private void addModelsTag(Long taskId,
    private void addModelsTag(SimulatAssess simulatAssess,
                              Long taskId,
                              Long productId,
                              String productName,
                              String productNamePath,
@@ -963,7 +969,8 @@
                    "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);
            node2DOM(taskId,
            node2DOM(simulatAssess,
                    taskId,
                    taskPhaseModel,
                    gkModelTop.getModelId(),
                    productId,
@@ -981,7 +988,8 @@
    }
    // 递归函数
    private void node2DOM(Long taskId,
    private void node2DOM(SimulatAssess simulatAssess,
                          Long taskId,
                          TaskPhaseModel taskPhaseModel,
                          Long modelId,
                          Long productId,
@@ -1011,7 +1019,8 @@
                        "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);
                node2DOM(taskId,
                node2DOM(simulatAssess,
                        taskId,
                        taskPhaseModel,
                        gkModel.getModelId(),
                        product.getId(),
@@ -1062,7 +1071,12 @@
                if (1 == paramData.getRepairable()) {
                    // 可维修
                    RepairModel repairModel = createRepairModel(paramData);
                    RepairModel repairModel = null;
                    if (isRepairDirac(simulatAssess.getRepairDiracFlag(), taskPhaseModel, product.getId())) {
                        repairModel = createRepairModelDirac(0);
                    } else {
                        repairModel = createRepairModel(paramData);
                    }
                    repairModels.add(repairModel);
                    Element repairTag = nodeTag.addElement("repair_model");
                    repairTag.addAttribute("name", repairModel.getId().toString());
@@ -1097,7 +1111,8 @@
            for (String nodeStr : computerNodeListStr) {
                ModelNode mn = modelNodeAndVnodeList.stream().filter(item ->
                        nodeStr.equals(item.getId().toString())).collect(Collectors.toList()).get(0);
                node2DOM(taskId,
                node2DOM(simulatAssess,
                        taskId,
                        taskPhaseModel,
                        modelId,
                        null,
@@ -1152,23 +1167,43 @@
        return failureModel;
    }
    private boolean isRepairDirac(boolean repairDiracFlag, TaskPhaseModel taskPhaseModel, Long productId) {
        boolean result = false;
        if (repairDiracFlag) {
            if (taskPhaseModel.getPhaseConstraints() != null) {
                List<TaskPhaseConstraintDto> list = taskPhaseModel.getPhaseConstraints().stream().filter(item ->
                        productId.equals(item.getProductId())).collect(Collectors.toList());
                if (list.size() == 0) {
                    result = true;
                }
            }
        }
        return result;
    }
    private RepairModel createRepairModelDirac(double time) {
        RepairModel repairModel = new RepairModel();
        repairModel.setId(UUIDUtil.generateId());
        repairModel.setParam1(0);
        return repairModel;
    }
    private RepairModel createRepairModel(ParamData paramData) {
        RepairModel repairModel = new RepairModel();
        repairModel.setId(UUIDUtil.generateId());
        switch (paramData.getRepairDistribType()) {
            case 1:
                // 指数分布
                repairModel.setType(FailureModel.TYPE_EXP);
                repairModel.setType(RepairModel.TYPE_EXP);
                repairModel.setParam1(1.0 / paramData.getRepairMttcr());
                break;
            case 2:
                // 威布尔分布
                repairModel.setType(FailureModel.TYPE_WBL);
                repairModel.setType(RepairModel.TYPE_WBL);
                repairModel.setParam2(paramData.getRepairMttcrOtherParams2());
                repairModel.setParam3(paramData.getRepairMttcrOtherParams3());
                break;
            case 3:
                // 二项分布(维修没有)
                break;
            default:
                break;