| | |
| | | .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()) |
| | |
| | | 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) { |
| | |
| | | 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(); |