| | |
| | | // 1.2 校验来源单据参数,并验证数据存在 |
| | | String sourceDocCode = validateAndGetSourceDocCode( |
| | | createReqVO.getSourceDocType(), createReqVO.getSourceDocId(), createReqVO.getSourceLineId()); |
| | | // 1.3 确定质检方案:显式指定时校验方案本身可用(不要求与产品物料绑定);未指定时按物料已绑定方案兜底 |
| | | // 1.3 确定质检方案:质检方案与产品物料不绑定,显式指定时只校验方案本身可用;未指定时走默认方案解析 |
| | | Long templateId; |
| | | if (createReqVO.getTemplateId() != null) { |
| | | MesQcTemplateDO template = templateService.getTemplate(createReqVO.getTemplateId()); |
| | |
| | | } |
| | | templateId = template.getId(); |
| | | } else { |
| | | templateId = templateItemService.getRequiredTemplateByItemIdAndType( |
| | | createReqVO.getItemId(), MesQcTypeEnum.IQC.getType()).getTemplateId(); |
| | | templateId = resolveDefaultIqcTemplateId(createReqVO.getItemId()); |
| | | } |
| | | |
| | | // 2. 插入主表 |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long createIqcFromArrivalNotice(Long noticeId, MesWmArrivalNoticeLineDO line, String noticeCode, Long vendorId) { |
| | | // 1. 校验物料是否配置了 IQC 检验模板 |
| | | MesQcTemplateItemDO templateItem; |
| | | try { |
| | | templateItem = templateItemService.getRequiredTemplateByItemIdAndType( |
| | | line.getItemId(), MesQcTypeEnum.IQC.getType()); |
| | | } catch (Exception e) { |
| | | // 获取物料信息,提供更明确的错误提示 |
| | | String itemInfo = getItemInfo(line.getItemId()); |
| | | throw exception(QC_NO_TEMPLATE_FOR_ITEM, itemInfo); |
| | | } |
| | | Long templateId = templateItem.getTemplateId(); |
| | | // 1. 确定质检方案:质检方案与产品物料不绑定,物料未绑定方案时取任一启用的来料检验方案 |
| | | Long templateId = resolveDefaultIqcTemplateId(line.getItemId()); |
| | | |
| | | // 2. 生成检验单编码 |
| | | String code = "IQC" + System.currentTimeMillis(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取物料信息(编码+名称) |
| | | * 解析来料检验的默认质检方案:质检方案与产品物料不绑定。 |
| | | * |
| | | * 1. 物料已绑定来料检验方案时,优先沿用(兼容存量配置); |
| | | * 2. 物料未绑定时,取任一启用且检测种类包含来料检验的方案(按编号取最早创建的一个)。 |
| | | * |
| | | * @param itemId 产品物料编号 |
| | | * @return 质检方案编号 |
| | | */ |
| | | private String getItemInfo(Long itemId) { |
| | | if (itemId == null) { |
| | | return "未知物料"; |
| | | private Long resolveDefaultIqcTemplateId(Long itemId) { |
| | | List<MesQcTemplateItemDO> boundList = templateItemService.getTemplateItemList( |
| | | itemId, MesQcTypeEnum.IQC.getType(), null, null); |
| | | if (CollUtil.isNotEmpty(boundList)) { |
| | | return boundList.get(0).getTemplateId(); |
| | | } |
| | | try { |
| | | cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO item = mdmItemApi.getItem(itemId).getCheckedData(); |
| | | if (item != null) { |
| | | return item.getCode() + "-" + item.getName(); |
| | | } |
| | | } catch (Exception e) { |
| | | // 忽略异常 |
| | | List<MesQcTemplateDO> enabledTemplates = templateService.getEnabledTemplateListByType(MesQcTypeEnum.IQC.getType()); |
| | | if (CollUtil.isEmpty(enabledTemplates)) { |
| | | throw exception(QC_IQC_NO_ENABLED_TEMPLATE); |
| | | } |
| | | return "物料ID:" + itemId; |
| | | return enabledTemplates.stream() |
| | | .map(MesQcTemplateDO::getId) |
| | | .min(Comparator.naturalOrder()) |
| | | .orElseThrow(() -> exception(QC_IQC_NO_ENABLED_TEMPLATE)); |
| | | } |
| | | |
| | | @Override |