| | |
| | | } |
| | | productSalesLineMapper.updateById(updateObj); |
| | | |
| | | // 检查是否需要创建 OQC 检验单:从不需要检验变为需要检验 |
| | | if (Boolean.TRUE.equals(updateReqVO.getOqcCheckFlag()) |
| | | && !Boolean.TRUE.equals(oldLine.getOqcCheckFlag())) { |
| | | // 获取出库单信息 |
| | | MesWmProductSalesDO sales = productSalesService.getProductSales(updateReqVO.getSalesId()); |
| | | if (sales == null) { |
| | | log.warn("[updateProductSalesLine] 出库单不存在,salesId={}", updateReqVO.getSalesId()); |
| | | return; |
| | | } |
| | | |
| | | // 构建出库明细 DO |
| | | MesWmProductSalesLineDO line = new MesWmProductSalesLineDO(); |
| | | line.setId(updateReqVO.getId()); |
| | | line.setItemId(updateReqVO.getItemId()); |
| | | line.setSaleOrderItemId(updateObj.getSaleOrderItemId() != null |
| | | ? updateObj.getSaleOrderItemId() : oldLine.getSaleOrderItemId()); |
| | | line.setBatchCode(updateReqVO.getBatchCode()); |
| | | line.setQuantity(updateReqVO.getQuantity()); |
| | | |
| | | // 创建 OQC 检验单,让异常抛出 |
| | | Long oqcId = oqcService.createOqcFromProductSales( |
| | | sales.getId(), line, sales.getCode(), sales.getClientId()); |
| | | |
| | | // 更新出库明细的 oqcId 和质量状态 |
| | | productSalesLineMapper.updateById(new MesWmProductSalesLineDO() |
| | | .setId(updateReqVO.getId()) |
| | | .setOqcId(oqcId) |
| | | .setQualityStatus(MesWmQualityStatusEnum.PENDING.getStatus())); |
| | | } |
| | | // 提交出库单后由质检人员选择已完成的出厂检验单。 |
| | | } |
| | | |
| | | @Override |
| | |
| | | Long salesId = currentLine.getSalesId(); |
| | | List<MesWmProductSalesLineDO> allLines = productSalesLineMapper.selectListBySalesId(salesId); |
| | | |
| | | // 2.1 检查是否有不合格行 → 取消出库单 |
| | | // 不合格行留待后续处置,不能因为检验结果自动取消整张出库单。 |
| | | boolean hasNg = CollectionUtils.anyMatch(allLines, |
| | | line -> Boolean.TRUE.equals(line.getOqcCheckFlag()) |
| | | && Objects.equals(line.getQualityStatus(), MesWmQualityStatusEnum.FAIL.getStatus())); |
| | | if (hasNg) { |
| | | log.info("[updateProductSalesLineWhenOqcFinish][销售出库单({}) 存在质检不合格行,取消出库单]", salesId); |
| | | productSalesService.cancelProductSales(salesId); |
| | | log.info("[updateProductSalesLineWhenOqcFinish][销售出库单({}) 存在质检不合格行,等待后续处置]", salesId); |
| | | return; |
| | | } |
| | | |
| | | // 2.2 检查是否所有 OQC 行都已完成,自动流转 CONFIRMED → APPROVING |
| | | boolean hasUnchecked = CollectionUtils.anyMatch(allLines, |
| | | line -> Boolean.TRUE.equals(line.getOqcCheckFlag()) && line.getOqcId() == null); |
| | | line -> Boolean.TRUE.equals(line.getOqcCheckFlag()) && !Objects.equals(line.getQualityStatus(), MesWmQualityStatusEnum.PASS.getStatus())); |
| | | if (!hasUnchecked) { |
| | | log.info("[updateProductSalesLineWhenOqcFinish][销售出库单({}) 所有 OQC 行检验完成,流转到待拣货]", salesId); |
| | | productSalesService.confirmProductSales(salesId); |