| | |
| | | } |
| | | } |
| | | |
| | | /** 与取消接口一致:入库未执行、出库任务初始 */ |
| | | private static final List<Short> WK_ORDER_UNEXECUTED_EXCE_STATUSES = Collections.unmodifiableList( |
| | | Arrays.asList( |
| | | AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val, |
| | | AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val)); |
| | | |
| | | private void assertWkOrderExceStatusUnexecuted(WkOrder order, String actionVerb) { |
| | | if (!WK_ORDER_UNEXECUTED_EXCE_STATUSES.contains(order.getExceStatus())) { |
| | | throw new CoolException("仅未执行状态的单据可" + actionVerb + "!!"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @author Ryan |
| | | * @date 2025/8/15 |
| | |
| | | .eq(WkOrder::getPoCode, syncOrder.getOrderInternalCode())); |
| | | if (!Objects.isNull(order)) { |
| | | assertWkOrderNoLinkedTask(order.getId()); |
| | | // 仅未执行状态可被 order/add 修改(入库未执行、出库任务初始) |
| | | List<Short> editableStatus = Arrays.asList(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val |
| | | ,AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val |
| | | ,AsnExceStatus.ASN_EXCE_STATUS_RECEIPT_DONE.val |
| | | , AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val); |
| | | if (!editableStatus.contains(order.getExceStatus())) { |
| | | throw new CoolException("仅未执行状态的单据可修改!!"); |
| | | } |
| | | assertWkOrderExceStatusUnexecuted(order, "修改"); |
| | | // 存在则修改(1 和 2 均走此处),组托校验在 mergeOrderWithPakin/updateOrderNoPakin 内 |
| | | long pakinCount = waitPakinItemService.count(new LambdaQueryWrapper<WaitPakinItem>() |
| | | .eq(WaitPakinItem::getAsnId, order.getId()).eq(WaitPakinItem::getDeleted, 0)); |
| | |
| | | /** |
| | | * @author Ryan |
| | | * @date 2025/8/20 |
| | | * @description: 单据修改--收货通知单/出库单/盘点单 |
| | | * @description: 单据修改--收货通知单/出库单/盘点单(对外接口已由 syncCheckOrder 承接时可不调用) |
| | | * @version 1.0 |
| | | */ |
| | | @Override |
| | | @Transactional(timeout = 60, rollbackFor = Exception.class) |
| | | public R syncOrderUpdate(List<SyncOrderParams> orders) { |
| | | orders.forEach(order -> { |
| | | List<Short> list = Arrays.asList(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val, |
| | | AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val); |
| | | WkOrder wkOrder = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>() |
| | | .in(WkOrder::getExceStatus, list) |
| | | .eq(WkOrder::getCode, order.getOrderNo())); |
| | | if (Objects.isNull(wkOrder)) { |
| | | throw new CoolException("请确认单据:" + order.getOrderNo() + "是否已经执行或是否同步!!"); |
| | | } |
| | | assertWkOrderNoLinkedTask(wkOrder.getId()); |
| | | assertWkOrderExceStatusUnexecuted(wkOrder, "修改"); |
| | | order.getOrderItems().forEach(orderItem -> { |
| | | WkOrderItem wkOrderItem = asnOrderItemService.getOne(new LambdaUpdateWrapper<WkOrderItem>() |
| | | .eq(WkOrderItem::getMatnrCode, orderItem.getMatnr()) |
| | |
| | | if (pakinCount > 0) { |
| | | throw new CoolException("单据已组托,仅未组托状态可取消,请先解除组托!!"); |
| | | } |
| | | // 仅未执行状态可取消(入库未执行、出库任务初始) |
| | | List<Short> list = Arrays.asList(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val, |
| | | AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val); |
| | | if (!list.contains(finalWkOrder.getExceStatus())) { |
| | | throw new CoolException("仅未执行状态的单据可取消!!"); |
| | | } |
| | | assertWkOrderExceStatusUnexecuted(finalWkOrder, "取消"); |
| | | order.getOrderItems().forEach(orderItem -> { |
| | | if (!asnOrderItemService.remove(new LambdaQueryWrapper<WkOrderItem>() |
| | | .eq(WkOrderItem::getMatnrCode, orderItem.getMatnr()) |