cl
22 小时以前 880621206ae152e69104cabc30200ff3a098eabb
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
@@ -147,6 +147,26 @@
        }
    }
    /** 修改/出库取消:入库未执行、出库任务初始(入库取消见 assertWkOrderExceStatusForCancel) */
    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 + "!!");
        }
    }
    /** 取消:入库单组托前即可(组托数已校验);出库单仍须未执行/出库初始 */
    private void assertWkOrderExceStatusForCancel(WkOrder order) {
        if (order.getType() != null && order.getType().equals(OrderType.ORDER_IN.type)) {
            return;
        }
        assertWkOrderExceStatusUnexecuted(order, "取消");
    }
    /**
     * @author Ryan
     * @date 2025/8/15
@@ -493,14 +513,7 @@
                            .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));
@@ -956,22 +969,20 @@
    /**
     * @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())
@@ -1042,12 +1053,7 @@
            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("仅未执行状态的单据可取消!!");
            }
            assertWkOrderExceStatusForCancel(finalWkOrder);
            order.getOrderItems().forEach(orderItem -> {
                if (!asnOrderItemService.remove(new LambdaQueryWrapper<WkOrderItem>()
                        .eq(WkOrderItem::getMatnrCode, orderItem.getMatnr())