1)可靠性评定时新增模型检查处理;
2)获取任务二项分布参数时,去掉模型的匹配。
5个文件已修改
265 ■■■■ 已修改文件
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/ReliabilityAssessController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ReliabilityAssessService.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/TaskService.java 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/taskReliability/ReliabilityAssess.vue 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/ReliabilityAssessController.java
@@ -15,16 +15,19 @@
import com.zt.life.modules.mainPart.baseReliability.service.ParamDataBasicService;
import com.zt.life.modules.mainPart.basicInfo.model.ParamData;
import com.zt.life.modules.mainPart.taskReliability.dao.AssessItemDao;
import com.zt.life.modules.mainPart.taskReliability.dto.TaskModelCheckResultDto;
import com.zt.life.modules.mainPart.taskReliability.model.AssessItem;
import com.zt.life.modules.mainPart.taskReliability.model.AssessResult;
import com.zt.life.modules.mainPart.taskReliability.model.OperatCondit;
import com.zt.life.modules.mainPart.taskReliability.model.ReliabilityAssess;
import com.zt.life.modules.mainPart.taskReliability.service.ReliabilityAssessService;
import com.zt.life.modules.mainPart.taskReliability.service.TaskService;
import com.zt.life.util.ImportUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -44,6 +47,8 @@
    @Autowired
    AssessItemDao assessItemDao;
    @Autowired
    TaskService taskService;
    @PostMapping("page")
    @ApiOperation("分页")
@@ -82,6 +87,17 @@
        return Result.ok();
    }
    @PostMapping("assessCheck")
    @ApiOperation("评定模型检查")
    @LogOperation("评定模型检查")
    public Result<List<TaskModelCheckResultDto>> assessCheck(@RequestBody AssessResult assessResult){
        List<TaskModelCheckResultDto> list = taskService.checkTaskModelAssess(assessResult.getProductId(),
                assessResult.getTaskId(),
                assessResult.getItemId());
        return Result.ok(list);
    }
    @PostMapping("assess")
    @ApiOperation("评定")
    @LogOperation("评定")
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ReliabilityAssessService.java
@@ -103,20 +103,11 @@
        Long assessId = UUIDUtil.generateId();
        assessResult.setId(assessId);
/*
        // 1. 检查参数完整性
        List<TaskModelCheckResultDto> chkResult = taskService.checkTaskModel(simulatAssess.getProductId(),
                simulatAssess.getTaskModelId());
        if (chkResult.size() > 0) {
            result = Result.error("模型不完整,请检查模型定义及参数配置。");
            return result;
        }
*/
        // 2. 组装供算法库评定的模型xml
        // 1. 组装供算法库评定的模型xml
        assembleModelXml(assessResult);
        // 3. 调用算法库,进行评定计算
        // 2. 调用算法库,进行评定计算
        result = callReliaAssessLib(assessResult);
        if (result.getCode() != 0) throw new RenException(result.getMsg());
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java
@@ -1108,7 +1108,7 @@
                            .filter(item -> taskId.equals(item.getTaskId()))
                            .filter(item -> taskPhaseModel.getPhaseId().equals(item.getPhaseId()))
                            .filter(item -> taskPhaseModel.getOperatConditId().equals(item.getOperatConditId()))
                            .filter(item -> modelId.equals(item.getModelId()))
//                            .filter(item -> modelId.equals(item.getModelId()))
                            .filter(item -> dataId.equals(item.getProductId()))
                            .collect(Collectors.toList()).get(0);
                }
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/TaskService.java
@@ -42,6 +42,8 @@
    private ParamDataDao paramDataDao;
    @Autowired
    private TaskBinoParamDao taskBinoParamDao;
    @Autowired
    private ReliabilityAssessDao reliabilityAssessDao;
    /**
     * 分页查询
@@ -100,7 +102,7 @@
        List<ModelNodeAlgorithm> rbdNodeList = modelNodeAlgorithmDao.getRbdNodes();
        // 1.8 获取该船的所有设备参数List
        List<ParamData> paramDataList = paramDataDao.getDeviceParams(productId);
        // 1.8 获取该任务的二项分布参数)List
        // 1.8 获取该任务的二项分布参数List
        List<TaskBinoParam> binoParamList = taskBinoParamDao.getBinoParams(taskId);
        // 2. 检查每个任务模型的数据完整性
@@ -218,7 +220,7 @@
                                                                    List<TaskBinoParam> binoParams = binoParamList.stream().filter(item ->
                                                                            phase.getId().equals(item.getPhaseId()) &&
                                                                                    taskPhaseModel.getOperatConditId().equals(item.getOperatConditId()) &&
                                                                                    modelRbds.get(0).getId().equals(item.getModelId()) &&
//                                                                                    modelRbds.get(0).getId().equals(item.getModelId()) &&
                                                                                    device.getId().equals(item.getProductId())).collect(Collectors.toList());
                                                                    if (binoParams.size() == 0) {
                                                                        setTaskModelCheckResult(task, phase, taskPhaseModel,
@@ -342,7 +344,7 @@
     * @param productId 产品节点ID(一般为总体)
     * @return 检查出的错误的List,长度为0表示没有错误,不会返回null
     */
    public List<TaskModelCheckResultDto> checkTaskModelAssess(Long productId, Long taskId) {
    public List<TaskModelCheckResultDto> checkTaskModelAssess(Long productId, Long taskId, Long itemId) {
        List<TaskModelCheckResultDto> checkResult = new ArrayList<>();
        List<XhProductModel> deviceUsedList = new ArrayList<>();    // 检查对象模型中使用到的所有设备
@@ -363,8 +365,8 @@
        List<ModelNodeAlgorithm> rbdNodeList = modelNodeAlgorithmDao.getRbdNodes();
        // 1.8 获取该船的所有设备参数List
        List<ParamData> paramDataList = paramDataDao.getDeviceParams(productId);
        // 1.8 获取该任务的二项分布参数)List
        List<TaskBinoParam> binoParamList = taskBinoParamDao.getBinoParams(taskId);
        // 1.8 获取评定数据List
        List<ReliabilityAssess> assessDataList = reliabilityAssessDao.getProductList(productId, itemId);
        // 2. 检查每个任务模型的数据完整性
        for (Task task : taskList) {
@@ -425,142 +427,90 @@
                        for (OperatConditModel gkModel : gkModelTree) {
                            XhProductModel node = productTreeList.stream().filter(item ->
                                    gkModel.getProductId().equals(item.getId())).collect(Collectors.toList()).get(0);
                            if (null == gkModel.getModelId()) {
                                // 2.6 工况模型树不完整
                                setTaskModelCheckResult(task, phase, taskPhaseModel,
                                        node, null, null, null,
                                        TaskModelCheckResultDto.CATEGORY_GK_MODEL, checkResult);
                            } else {
                                List<ModelRbd> modelRbds = modelRbdList.stream().filter(item ->
                                        gkModel.getModelId().equals(item.getId())).collect(Collectors.toList());
                                if (modelRbds.size() == 0) {
                                    // 2.7 建模未完成
                            if (isNodeInRbdOfParent(node, gkModelTree, rbdNodeList)) {
                                if (null == gkModel.getModelId()) {
                                    // 2.6 工况模型树不完整
                                    setTaskModelCheckResult(task, phase, taskPhaseModel,
                                            node, null, null, null,
                                            TaskModelCheckResultDto.CATEGORY_MODEL, checkResult);
                                            TaskModelCheckResultDto.CATEGORY_GK_MODEL, checkResult);
                                } else {
                                    if (!"已完成".equals(modelRbds.get(0).getModelState())) {
                                    List<ModelRbd> modelRbds = modelRbdList.stream().filter(item ->
                                            gkModel.getModelId().equals(item.getId())).collect(Collectors.toList());
                                    if (modelRbds.size() == 0) {
                                        // 2.7 建模未完成
                                        setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                node, modelRbds.get(0), null, null,
                                                node, null, null, null,
                                                TaskModelCheckResultDto.CATEGORY_MODEL, checkResult);
                                    } else {
                                        List<Algorithm> algorithmList = algorithmDao.getListByModelId(gkModel.getModelId());
                                        if (hasNotSupportModel(algorithmList)) {
                                            // 2.8 目前不支持串联、并联和表决以外的模型
                                        if (!"已完成".equals(modelRbds.get(0).getModelState())) {
                                            // 2.7 建模未完成
                                            setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                    node, modelRbds.get(0), null, null,
                                                    TaskModelCheckResultDto.CATEGORY_MODEL_NOT_SUPPORT, checkResult);
                                                    TaskModelCheckResultDto.CATEGORY_MODEL, checkResult);
                                        } else {
                                            List<ModelNodeAlgorithm> deviceNodes = rbdNodeList.stream().filter(item ->
                                                    gkModel.getModelId().equals(item.getModelId())).collect(Collectors.toList());
                                            for (ModelNodeAlgorithm deviceNode : deviceNodes) {
                                                XhProductModel device = (XhProductModel) productTreeList.stream().filter(item ->
                                                        deviceNode.getDataId().equals(item.getId())).collect(Collectors.toList()).get(0);
                                                if ("5".equals(device.getProductType())) {
                                                    // 设备
                                                    List<ParamData> params = paramDataList.stream().filter(item ->
                                                            deviceNode.getDataId().equals(item.getProductId())).collect(Collectors.toList());
                                                    if (params.size() == 0) {
                                                        // 设备参数未配置
                                                        setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                                node, modelRbds.get(0), device, null,
                                                                TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
                                                    } else {
                                                        ParamData param = params.get(0);
                                                        if (param.getReliabDistribType() == null) {
                                            List<Algorithm> algorithmList = algorithmDao.getListByModelId(gkModel.getModelId());
                                            if (hasNotSupportModel(algorithmList)) {
                                                // 2.8 目前不支持串联、并联和表决以外的模型
                                                setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                        node, modelRbds.get(0), null, null,
                                                        TaskModelCheckResultDto.CATEGORY_MODEL_NOT_SUPPORT, checkResult);
                                            } else {
                                                List<ModelNodeAlgorithm> deviceNodes = rbdNodeList.stream().filter(item ->
                                                        gkModel.getModelId().equals(item.getModelId())).collect(Collectors.toList());
                                                for (ModelNodeAlgorithm deviceNode : deviceNodes) {
                                                    XhProductModel device = (XhProductModel) productTreeList.stream().filter(item ->
                                                            deviceNode.getDataId().equals(item.getId())).collect(Collectors.toList()).get(0);
                                                    if ("5".equals(device.getProductType())) {
                                                        // 设备
                                                        List<ParamData> params = paramDataList.stream().filter(item ->
                                                                deviceNode.getDataId().equals(item.getProductId())).collect(Collectors.toList());
                                                        if (params.size() == 0) {
                                                            // 2.9 设备参数未配置
                                                            setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                                    node, modelRbds.get(0), device, "可靠性分布类型",
                                                                    node, modelRbds.get(0), device, null,
                                                                    TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
                                                        } else {
                                                            if (param.getReliabDistribType() == 1) {
                                                                // 指数分布
                                                                if (param.getTaskMtbcfRegulate() == null) {
                                                            ParamData param = params.get(0);
                                                            if (param.getReliabDistribType() == null) {
                                                                setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                                        node, modelRbds.get(0), device, "可靠性分布类型",
                                                                        TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
                                                            } else {
                                                                if (param.getReliabDistribType() != 1 && param.getReliabDistribType() != 3) {
                                                                    // 2.10 目前不支持二项分布和指数分布以外的分布类型
                                                                    setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                                            node, modelRbds.get(0), device, "MTBCF",
                                                                            TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
                                                                }
                                                            }
                                                            if (param.getReliabDistribType() == 2) {
                                                                // 威布尔分布
                                                                if (param.getTaskMtbcfRegulate() == null) {
                                                                    setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                                            node, modelRbds.get(0), device, "MTBCF",
                                                                            TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
                                                                }
                                                                if (param.getTaskMtbcfOtherParams2() == null) {
                                                                    setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                                            node, modelRbds.get(0), device, "MTBCF参数2",
                                                                            TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
                                                                }
                                                                if (param.getTaskMtbcfOtherParams3() == null) {
                                                                    setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                                            node, modelRbds.get(0), device, "MTBCF参数3",
                                                                            TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
                                                                }
                                                            }
                                                            if (param.getReliabDistribType() == 3) {
                                                                // 二项分布
                                                                List<TaskBinoParam> binoParams = binoParamList.stream().filter(item ->
                                                                        phase.getId().equals(item.getPhaseId()) &&
                                                                                taskPhaseModel.getOperatConditId().equals(item.getOperatConditId()) &&
                                                                                modelRbds.get(0).getId().equals(item.getModelId()) &&
                                                                                device.getId().equals(item.getProductId())).collect(Collectors.toList());
                                                                if (binoParams.size() == 0) {
                                                                    setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                                            node, modelRbds.get(0), device, "二项分布参数",
                                                                            TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
                                                                            node, modelRbds.get(0), device, "可靠性分布类型",
                                                                            TaskModelCheckResultDto.CATEGORY_DISTRIBUTION_NOT_SUPPORT, checkResult);
                                                                } else {
                                                                    TaskBinoParam binoParam = binoParams.get(0);
                                                                    if (binoParam.getSuccessRate() == null) {
                                                                    List<ReliabilityAssess> assessDatas = assessDataList.stream().filter(item ->
                                                                            item.getId().equals(device.getId())).collect(Collectors.toList());
                                                                    if (assessDatas.size() ==0) {
                                                                        // 2.11 评定数据未录入
                                                                        setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                                                node, modelRbds.get(0), device, "成功率",
                                                                                TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
                                                                                node, modelRbds.get(0), device, null,
                                                                                TaskModelCheckResultDto.CATEGORY_NO_ASSESS_DATA, checkResult);
                                                                    } else {
                                                                        if (binoParam.getSuccessTimes() != null && binoParam.getSimulatTimes() == null) {
                                                                        ReliabilityAssess assessData = assessDatas.get(0);
                                                                        if (assessData.getFailNum() == null || assessData.getFailNum() == 0) {
                                                                            // 2.11 评定数据未录入
                                                                            setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                                                    node, modelRbds.get(0), device, "总次数",
                                                                                    TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
                                                                                    node, modelRbds.get(0), device, "故障次数",
                                                                                    TaskModelCheckResultDto.CATEGORY_NO_ASSESS_DATA, checkResult);
                                                                        }
                                                                        if (binoParam.getSuccessTimes() == null && binoParam.getSimulatTimes() != null) {
                                                                        if (param.getReliabDistribType() == 1 &&
                                                                                (assessData.getRunTimes() == null || assessData.getRunTimes() == 0.0)) {
                                                                            // 2.11 评定数据未录入
                                                                            setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                                                    node, modelRbds.get(0), device, "成功次数",
                                                                                    TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
                                                                                    node, modelRbds.get(0), device, "试验时间",
                                                                                    TaskModelCheckResultDto.CATEGORY_NO_ASSESS_DATA, checkResult);
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                            if (1 == param.getRepairable()) {
                                                                // 可维修
                                                                if (param.getRepairDistribType() == null) {
                                                                    setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                                            node, modelRbds.get(0), device, "维修分布类型",
                                                                            TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
                                                                }
                                                                if (param.getRepairDistribType() == 1) {
                                                                    // 指数分布
                                                                    if (param.getRepairMttcr() == null) {
                                                                        setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                                                node, modelRbds.get(0), device, "MTTCR",
                                                                                TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
                                                                    }
                                                                }
                                                                if (param.getRepairDistribType() == 2) {
                                                                    // 威布尔分布
                                                                    if (param.getRepairMttcr() == null) {
                                                                        setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                                                node, modelRbds.get(0), device, "MTTCR",
                                                                                TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
                                                                    }
                                                                    if (param.getRepairMttcrOtherParams2() == null) {
                                                                        setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                                                node, modelRbds.get(0), device, "MTTCR参数2",
                                                                                TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
                                                                    }
                                                                    if (param.getRepairMttcrOtherParams3() == null) {
                                                                        setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                                                node, modelRbds.get(0), device, "MTTCR参数3",
                                                                                TaskModelCheckResultDto.CATEGORY_PARAM, checkResult);
                                                                        if (param.getReliabDistribType() == 3 &&
                                                                                (assessData.getRunNum() == null || assessData.getRunNum() == 0.0)) {
                                                                            // 2.11 评定数据未录入
                                                                            setTaskModelCheckResult(task, phase, taskPhaseModel,
                                                                                    node, modelRbds.get(0), device, "试验次数",
                                                                                    TaskModelCheckResultDto.CATEGORY_NO_ASSESS_DATA, checkResult);
                                                                        }
                                                                    }
                                                                }
                                                            }
@@ -575,7 +525,6 @@
                        }
                    }
                }
            }
        }
        // 3. 返回检查结果
web/src/views/modules/taskReliability/ReliabilityAssess.vue
@@ -47,6 +47,24 @@
        </el-table>
        <add-or-update @refreshDataList="refreshData" ref="AddOrUpdate"/>
      </zt-table-wraper>
      <el-dialog v-dialogDrag :close-on-click-modal="false" top="8vh" :visible.sync="dialogVisible" title="模型检查"
                 width="60%" @close="dialogVisible = false">
        <el-tag type="danger" style="margin-bottom: 10px">模型定义/参数配置/评定数据里存在以下问题:</el-tag>
        <el-table :data="modelCheckResult" height="350"
                  :header-cell-style="{'text-align':'center'}">
          <el-table-column prop="category" label="检查结果" align="center" width="150"/>
          <el-table-column prop="taskName" label="任务名称" align="center"/>
          <el-table-column prop="taskPhaseName" label="任务阶段名称" align="center"/>
          <el-table-column prop="gkName" label="工况名称" align="center"/>
          <el-table-column prop="nodeName" label="节点名称" align="center"/>
          <el-table-column prop="modelName" label="模型名称" align="center"/>
          <el-table-column prop="deviceName" label="设备名称" align="center"/>
          <el-table-column prop="paramName" label="参数名称" align="center"/>
        </el-table>
        <div slot="footer" class="dialog-footer">
          <el-button type="primary" @click="dialogVisible = false">关 闭</el-button>
        </div>
      </el-dialog>
    </div>
  </div>
</template>
@@ -78,7 +96,9 @@
        flag2: false,
        defultKey: [],
        isExpand:false,
        expandText:"一键展开"
        expandText:"一键展开",
        dialogVisible: false,
        modelCheckResult: [],
      }
    },
    components: {
@@ -152,13 +172,28 @@
        })
      },
      async assess() {
        this.dialogVisible = false
        this.modelCheckResult = []
        if (!this.dataForm.productId || !this.dataForm.taskId || !this.dataForm.itemId || !this.dataForm.confidence) {
          this.$tip.alert("有未填写的数据")
          return
        }
        let res = await this.$http.post('/taskReliability/ReliabilityAssess/assess', this.dataForm)
        console.log(res.data)
        this.dataList = res.data
        let res = await this.$http.post('/taskReliability/ReliabilityAssess/assessCheck', this.dataForm)
        if (res.success) {
          if (res.data && res.data.length > 0) {
            this.modelCheckResult = res.data
            this.dialogVisible = true
          } else {
            let res = await this.$http.post('/taskReliability/ReliabilityAssess/assess', this.dataForm)
            if (res.success) {
              console.log(res.data)
              this.dataList = res.data
              this.$alert('评定成功', '提示', {
                confirmButtonText: '确定'
              })
            }
          }
        }
      },
      async getProductList() {
        let res = await this.$http.get('/basicInfo/XhProductModel/getTaskProductList')