| | |
| | | .eq(MesWmArrivalNoticeLineDO::getId, iqc.getSourceLineId()).last("FOR UPDATE")); |
| | | if (notice == null || line == null || !Objects.equals(line.getNoticeId(), notice.getId()) |
| | | || !Objects.equals(line.getIqcId(), iqc.getId()) |
| | | || !Objects.equals(notice.getStatus(), MesWmArrivalNoticeStatusEnum.PENDING_QC.getStatus()) |
| | | || !isDispositionAllowedNoticeStatus(notice.getStatus()) |
| | | || !Objects.equals(line.getItemId(), iqc.getItemId()) |
| | | || !Objects.equals(ncr.getItemId(), iqc.getItemId()) |
| | | || !samePositive(ncr.getUnqualifiedQuantity(), iqc.getUnqualifiedQuantity()) |
| | |
| | | return new Source(iqc, notice, line); |
| | | } |
| | | |
| | | /** |
| | | * 不合格处置允许的到货通知状态。 |
| | | * |
| | | * 来料检验完成时,到货通知会在同一事务里从「待质检」推进到「待入库」并自动生成采购入库单 |
| | | * (只取合格数量),随后确认入库后变为「已完成」。不合格部分的退货/让步由不合格单单独处置, |
| | | * 不再受通知状态限制,否则单行通知(或最后一行检验完成时)的不合格单将永远无法处置。 |
| | | */ |
| | | private boolean isDispositionAllowedNoticeStatus(Integer status) { |
| | | return Objects.equals(status, MesWmArrivalNoticeStatusEnum.PENDING_QC.getStatus()) |
| | | || Objects.equals(status, MesWmArrivalNoticeStatusEnum.PENDING_RECEIPT.getStatus()) |
| | | || Objects.equals(status, MesWmArrivalNoticeStatusEnum.FINISHED.getStatus()); |
| | | } |
| | | |
| | | private boolean samePositive(BigDecimal a, BigDecimal b) { |
| | | return a != null && b != null && a.signum() > 0 && a.compareTo(b) == 0; |
| | | } |