xiaoyi
7 天以前 481d8165f26fc7e37f0e87f6444ac0340bb563a3
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderParamRecordServiceImpl.java
@@ -69,18 +69,9 @@
                .collect(Collectors.toMap(MesPdProcessParamTemplateDetailDO::getId, d -> d));
        // 4. 校验必填参数都有值
        for (MesProWorkOrderParamRecordSaveReqVO.DetailItem item : createReqVO.getDetails()) {
            MesPdProcessParamTemplateDetailDO templateDetail = detailMap.get(item.getTemplateDetailId());
            if (templateDetail == null) {
                throw exception(PRO_WORK_ORDER_PARAM_RECORD_DETAIL_NOT_IN_TEMPLATE);
            }
            if (Boolean.TRUE.equals(templateDetail.getRequired())
                    && (item.getParamValue() == null || item.getParamValue().isBlank())) {
                throw exception(PRO_WORK_ORDER_PARAM_RECORD_REQUIRED_PARAM_MISSING, templateDetail.getParamName());
            }
        }
        MesProTaskDO task = mesProTaskService.getTask(taskId);
        MesProWorkOrderDO workOrder = mesProWorkOrderService.getWorkOrder(task.getWorkOrderId());
        validateParamDetails(templateDetails, createReqVO.getDetails());
        MesProTaskDO task = mesProTaskService.validateTaskExists(taskId);
        MesProWorkOrderDO workOrder = mesProWorkOrderService.validateWorkOrderExists(task.getWorkOrderId());
        // 5. 插入主表(快照模板编码、名称)
        MesProWorkOrderParamRecordDO record = MesProWorkOrderParamRecordDO.builder()
                .workOrderId(workOrder.getId())
@@ -112,6 +103,37 @@
        return record.getId();
    }
    /** 校验模板中的全部必填项,不能通过省略明细绕过校验。 */
    private void validateParamDetails(List<MesPdProcessParamTemplateDetailDO> templateDetails,
                                      List<MesProWorkOrderParamRecordSaveReqVO.DetailItem> values) {
        if (CollUtil.isEmpty(templateDetails)) {
            throw exception(PRO_WORK_ORDER_PARAM_RECORD_TEMPLATE_NO_DETAIL);
        }
        Map<Long, MesPdProcessParamTemplateDetailDO> expected = templateDetails.stream()
                .collect(Collectors.toMap(MesPdProcessParamTemplateDetailDO::getId, d -> d));
        if (CollUtil.isEmpty(values)) {
            throw exception(PRO_WORK_ORDER_PARAM_RECORD_DETAIL_NOT_IN_TEMPLATE);
        }
        Map<Long, String> submitted = new java.util.HashMap<>();
        if (values != null) {
            for (MesProWorkOrderParamRecordSaveReqVO.DetailItem item : values) {
                if (item == null || item.getTemplateDetailId() == null || !expected.containsKey(item.getTemplateDetailId())) {
                    throw exception(PRO_WORK_ORDER_PARAM_RECORD_DETAIL_NOT_IN_TEMPLATE);
                }
                if (submitted.containsKey(item.getTemplateDetailId())) {
                    throw exception(PRO_WORK_ORDER_PARAM_RECORD_DUPLICATE_DETAIL);
                }
                submitted.put(item.getTemplateDetailId(), item.getParamValue());
            }
        }
        for (MesPdProcessParamTemplateDetailDO detail : templateDetails) {
            String value = submitted.get(detail.getId());
            if (Boolean.TRUE.equals(detail.getRequired()) && (value == null || value.isBlank())) {
                throw exception(PRO_WORK_ORDER_PARAM_RECORD_REQUIRED_PARAM_MISSING, detail.getParamName());
            }
        }
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateParamRecord(MesProWorkOrderParamRecordSaveReqVO updateReqVO) {
@@ -129,16 +151,7 @@
        Map<Long, MesPdProcessParamTemplateDetailDO> detailMap = templateDetails.stream()
                .collect(Collectors.toMap(MesPdProcessParamTemplateDetailDO::getId, d -> d));
        for (MesProWorkOrderParamRecordSaveReqVO.DetailItem item : updateReqVO.getDetails()) {
            MesPdProcessParamTemplateDetailDO templateDetail = detailMap.get(item.getTemplateDetailId());
            if (templateDetail == null) {
                throw exception(PRO_WORK_ORDER_PARAM_RECORD_DETAIL_NOT_IN_TEMPLATE);
            }
            if (Boolean.TRUE.equals(templateDetail.getRequired())
                    && (item.getParamValue() == null || item.getParamValue().isBlank())) {
                throw exception(PRO_WORK_ORDER_PARAM_RECORD_REQUIRED_PARAM_MISSING, templateDetail.getParamName());
            }
        }
        validateParamDetails(templateDetails, updateReqVO.getDetails());
        // 4. 更新主表
        MesProWorkOrderParamRecordDO updateObj = new MesProWorkOrderParamRecordDO();