xyc
2024-10-23 48dcf2c7f01de5078f6a7f94dbc59400100e9ab6
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java
@@ -784,7 +784,8 @@
            Element root = document.addElement("des");
            root.addAttribute("name", "General system");
            addTasksTag(taskPhaseModelAll, root);
            addModelsTag(taskId,
            addModelsTag(simulatAssess,
                    taskId,
                    productId,
                    product.getName(),
                    product.getNamePath(),
@@ -921,6 +922,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;
            }
@@ -963,7 +968,8 @@
        return taskPhases;
    }
    private void addModelsTag(Long taskId,
    private void addModelsTag(SimulatAssess simulatAssess,
                              Long taskId,
                              Long productId,
                              String productName,
                              String productNamePath,
@@ -989,7 +995,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,
@@ -1007,7 +1014,8 @@
    }
    // 递归函数
    private void node2DOM(Long taskId,
    private void node2DOM(SimulatAssess simulatAssess,
                          Long taskId,
                          TaskPhaseModel taskPhaseModel,
                          Long modelId,
                          Long productId,
@@ -1037,7 +1045,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(),
@@ -1088,7 +1097,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());
@@ -1123,7 +1137,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,
@@ -1178,23 +1193,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;