cl
17 小时以前 91831843f3b9fa4c9f29e518e10dae5d3f9aead8
增加几种出入库单类型
5个文件已修改
258 ■■■■■ 已修改文件
rsf-admin/src/page/orders/asnOrder/orderWorkTypeInbound.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/asnOrder/orderWorkTypeInbound.js
@@ -2,9 +2,10 @@
 * 订单业务类型(sys_order_work_type):入库通知单仅展示入库侧
 * 与后端 OrderWorkType 枚举中的出库类 value 对齐
 */
// 与后端 OrderWorkType.getOrderType:ORDER_OUT 一致(不含 D004)
// 与后端 OrderWorkType.getOrderType:ORDER_OUT 一致(不含 D004 等入库字母码)
export const OUTBOUND_ORDER_WORK_TYPE_VALUES = new Set([
  '11', '12', '13', '14', '15', '18', '19',
  'D001', 'A008', 'B003', 'C036',
]);
export function filterInboundOrderWorkTypeRecords(records) {
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -387,6 +387,7 @@
        item.setTrackCode(dto.getBarcode())
                .setAreaName(areasItem.getName())
                .setAreaId(areasItem.getId())
                .setPlatItemId(orderItem.getPlatItemId())
                .setAsnItemId(orderItem.getId())
                .setAsnCode(wkOrder.getCode())
                .setAsnId(wkOrder.getId())
@@ -414,16 +415,8 @@
        //TODO 供应商标识未设置,标识由PO单供应商编码转换
        LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new LambdaQueryWrapper<WarehouseAreasItem>()
//                .eq(WarehouseAreasItem::getAsnItemId, item.getAsnItemId())
                .eq(WarehouseAreasItem::getMatnrCode, item.getMatnrCode())
                .eq(!Cools.isEmpty(item.getFieldsIndex()), WarehouseAreasItem::getFieldsIndex, item.getFieldsIndex())
                .eq(WarehouseAreasItem::getAsnCode, item.getAsnCode())
                .eq(StringUtils.isNotBlank(item.getSplrBatch()), WarehouseAreasItem::getSplrBatch, item.getSplrBatch());
        if (Objects.isNull(orderItem.getIsptResult())) {
            queryWrapper.isNull(WarehouseAreasItem::getIsptResult);
        } else {
            queryWrapper.eq(WarehouseAreasItem::getIsptResult, orderItem.getIsptResult());
        }
                .eq(WarehouseAreasItem::getAsnItemId, item.getAsnItemId())
                .eq(WarehouseAreasItem::getAsnId, wkOrder.getId());
        WarehouseAreasItem serviceOne = warehouseAreasItemService.getOne(queryWrapper);
@@ -661,6 +654,7 @@
                if (!Cools.isEmpty(batch)) receiptWrapper.eq(WarehouseAreasItem::getSplrBatch, batch);
                if (!Objects.isNull(fieldIndex)) receiptWrapper.eq(WarehouseAreasItem::getFieldsIndex, fieldIndex);
                if (!Cools.isEmpty(code)) receiptWrapper.eq(WarehouseAreasItem::getTrackCode, code);
                receiptWrapper.orderByAsc(WarehouseAreasItem::getPlatItemId).orderByAsc(WarehouseAreasItem::getAsnItemId);
                List<WarehouseAreasItem> receiptList = warehouseAreasItemService.list(receiptWrapper);
                // 组托通知档(WaitPakinItem)的已组托数量也要扣减:收货区 workQty 仅反映从收货区组托的部分,从订单直接组托的在此汇总
                Map<Long, Double> waitPakinSumByItemId = new java.util.HashMap<>();
@@ -698,6 +692,7 @@
            if (!Cools.isEmpty(batch)) itemWrapper.eq(WkOrderItem::getSplrBatch, batch);
            if (!Objects.isNull(fieldIndex)) itemWrapper.eq(WkOrderItem::getFieldsIndex, fieldIndex);
            if (!Cools.isEmpty(code)) itemWrapper.eq(WkOrderItem::getTrackCode, code);
            itemWrapper.orderByAsc(WkOrderItem::getPlatItemId).orderByAsc(WkOrderItem::getId);
            List<WkOrderItem> orderItems = asnOrderItemMapper.selectList(itemWrapper);
            List<WarehouseAreasItem> list = new ArrayList<>();
            for (WkOrderItem oi : orderItems) {
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
@@ -406,64 +406,58 @@
            return R.error("单据信息不存在!!");
        }
        List<TaskItem> taskItems = params.getTaskItems();
        Map<String, List<TaskItem>> listMap = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getMatnrCode));
        // 拣货完成仅扣减库位数量并累加 TaskItem.qty,不更新出库单/订单;待托盘全部拣完在 saveWavePick 再按顺序更新库存并校验
        // 按订单明细行区分:同单同物料多行不得按 matnr 合并
        Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.ALLOW_OVER_CHANGE));
        listMap.keySet().forEach(code -> {
            List<TaskItem> items = listMap.get(code);
            WkOrderItem orderItem = asnOrderItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
                    .eq(WkOrderItem::getMatnrCode, code)
                    .eq(WkOrderItem::getOrderId, order.getId()));
        Map<Long, Double> batchPickSumByOrderItem = new HashMap<>();
        for (TaskItem taskItemParam : taskItems) {
            TaskItem item = taskItemService.getById(taskItemParam.getId());
            if (Objects.isNull(item)) {
                throw new CoolException("任务明细不存在!!");
            }
            WkOrderItem orderItem = resolveOrderItemForPick(item, order.getId());
            if (Objects.isNull(orderItem)) {
                throw new CoolException("数据错误,拣料不在单据需求中!!");
            }
            Double summed = items.stream().mapToDouble(ti -> ti.getAnfme() != null ? ti.getAnfme() : 0.0).sum();
            Double pickQty = Math.round((orderItem.getQty() != null ? orderItem.getQty() : 0.0) + summed) * 1000000.0 / 1000000.0;
            Double pickInc = taskItemParam.getAnfme() != null ? taskItemParam.getAnfme() : 0.0;
            Double prevBatch = batchPickSumByOrderItem.getOrDefault(orderItem.getId(), 0.0);
            Double pickQty = Math.round((orderItem.getQty() != null ? orderItem.getQty() : 0.0) + prevBatch + pickInc) * 1000000.0 / 1000000.0;
            if (!Objects.isNull(config) && !Boolean.parseBoolean(config.getVal())) {
                if (pickQty.compareTo(orderItem.getAnfme()) > 0.0) {
                    throw new CoolException("播种数量不能超出订单需求数量");
                }
                Double v = Math.round(((item.getQty() != null ? item.getQty() : 0.0) + pickInc) * 1000000.0) / 1000000.0;
                if (item.getAnfme() != null && item.getAnfme().compareTo(v) < 0.0) {
                    throw new CoolException("当前物料已超出可拣范围,请核对后再操作!!");
                }
            }
            items.forEach(taskItem -> {
                TaskItem item = taskItemService.getById(taskItem.getId());
                if (Objects.isNull(item)) {
                    throw new CoolException("任务明细不存在!!");
                }
                if (!Objects.isNull(config) && !Boolean.parseBoolean(config.getVal())) {
                    Double v = Math.round(((item.getQty() != null ? item.getQty() : 0.0) + (taskItem.getAnfme() != null ? taskItem.getAnfme() : 0.0)) * 1000000.0) / 1000000.0;
                    if (item.getAnfme() != null && item.getAnfme().compareTo(v) < 0.0) {
                        throw new CoolException("当前物料已超出可拣范围,请核对后再操作!!");
                    }
                }
                Double picQty = Math.round(((item.getQty() != null ? item.getQty() : 0.0) + (taskItem.getAnfme() != null ? taskItem.getAnfme() : 0.0)) * 1000000.0) / 1000000.0;
                item.setQty(picQty).setOrderId(order.getId()).setOrderItemId(orderItem.getId());
                if (!taskItemService.updateById(item)) {
                    throw new CoolException("拣货数量更新失败!!");
                }
                if (StringUtils.isNotBlank(task.getOrgLoc())) {
                    LocItem locItem = locItemService.getOne(new LambdaQueryWrapper<LocItem>()
                            .eq(LocItem::getLocCode, task.getOrgLoc())
                            .eq(LocItem::getMatnrId, item.getMatnrId())
                            .eq(StringUtils.isNotBlank(item.getBatch()), LocItem::getBatch, item.getBatch())
                            .eq(StringUtils.isNotBlank(item.getFieldsIndex()), LocItem::getFieldsIndex, item.getFieldsIndex()));
                    if (Objects.nonNull(locItem)) {
                        Double pickAmt = taskItem.getAnfme() != null ? taskItem.getAnfme() : 0.0;
                        Double newAnfme = Math.round((locItem.getAnfme() - pickAmt) * 1000000.0) / 1000000.0;
                        if (newAnfme.compareTo(0.0) <= 0) {
                            locItemService.removeById(locItem.getId());
                        } else {
                            locItem.setAnfme(newAnfme)
                                    .setUpdateBy(SystemAuthUtils.getLoginUserId())
                                    .setUpdateTime(new Date());
                            if (!locItemService.updateById(locItem)) {
                                throw new CoolException("库位明细数量扣减失败!!");
                            }
            batchPickSumByOrderItem.merge(orderItem.getId(), pickInc, (a, b) -> (a != null ? a : 0.0) + (b != null ? b : 0.0));
            Double picQty = Math.round(((item.getQty() != null ? item.getQty() : 0.0) + pickInc) * 1000000.0) / 1000000.0;
            item.setQty(picQty).setOrderId(order.getId()).setOrderItemId(orderItem.getId());
            if (!taskItemService.updateById(item)) {
                throw new CoolException("拣货数量更新失败!!");
            }
            if (StringUtils.isNotBlank(task.getOrgLoc())) {
                LocItem locItem = locItemService.getOne(new LambdaQueryWrapper<LocItem>()
                        .eq(LocItem::getLocCode, task.getOrgLoc())
                        .eq(LocItem::getMatnrId, item.getMatnrId())
                        .eq(StringUtils.isNotBlank(item.getBatch()), LocItem::getBatch, item.getBatch())
                        .eq(StringUtils.isNotBlank(item.getFieldsIndex()), LocItem::getFieldsIndex, item.getFieldsIndex()));
                if (Objects.nonNull(locItem)) {
                    Double pickAmt = pickInc;
                    Double newAnfme = Math.round((locItem.getAnfme() - pickAmt) * 1000000.0) / 1000000.0;
                    if (newAnfme.compareTo(0.0) <= 0) {
                        locItemService.removeById(locItem.getId());
                    } else {
                        locItem.setAnfme(newAnfme)
                                .setUpdateBy(SystemAuthUtils.getLoginUserId())
                                .setUpdateTime(new Date());
                        if (!locItemService.updateById(locItem)) {
                            throw new CoolException("库位明细数量扣减失败!!");
                        }
                    }
                }
            });
        });
            }
        }
        return R.ok();
    }
@@ -607,18 +601,27 @@
            WkOrder order = asnOrderService.getById(orderId);
            if (order == null) continue;
            List<TaskItem> items = byOrder.get(orderId);
            Map<String, List<TaskItem>> byMatnr = items.stream().collect(Collectors.groupingBy(TaskItem::getMatnrCode));
            for (String code : byMatnr.keySet()) {
                List<TaskItem> matItems = byMatnr.get(code);
                WkOrderItem orderItem = asnOrderItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
                        .eq(WkOrderItem::getMatnrCode, code)
                        .eq(WkOrderItem::getOrderId, orderId));
                if (orderItem == null) continue;
            Map<Long, List<TaskItem>> byOrderItem = new LinkedHashMap<>();
            for (TaskItem ti : items) {
                WkOrderItem oi = resolveOrderItemForPick(ti, orderId);
                if (oi == null) {
                    continue;
                }
                byOrderItem.computeIfAbsent(oi.getId(), k -> new ArrayList<>()).add(ti);
            }
            for (Map.Entry<Long, List<TaskItem>> e : byOrderItem.entrySet()) {
                WkOrderItem orderItem = asnOrderItemService.getById(e.getKey());
                if (orderItem == null) {
                    continue;
                }
                List<TaskItem> matItems = e.getValue();
                Double summed = matItems.stream().mapToDouble(t -> t.getQty() != null ? t.getQty() : 0.0).sum();
                orderItem.setQty(summed);
                asnOrderItemService.updateById(orderItem);
                String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_STOCK_CODE, null);
                if (StringUtils.isBlank(ruleCode)) continue;
                if (StringUtils.isBlank(ruleCode)) {
                    continue;
                }
                Stock stock = new Stock();
                stock.setCode(ruleCode)
                        .setUpdateBy(loginUserId)
@@ -630,7 +633,9 @@
                        .setSourceCode(orderItem.getOrderCode())
                        .setUpdateTime(new Date())
                        .setAnfme(summed);
                if (!stockService.save(stock)) continue;
                if (!stockService.save(stock)) {
                    continue;
                }
                List<StockItem> stockItems = new ArrayList<>();
                for (TaskItem ti : matItems) {
                    StockItem si = new StockItem();
@@ -666,6 +671,31 @@
    }
    /**
     * 波次拣货:任务明细与订单行对应(orderItemId 优先,否则行内码 platItemId),避免同单同料多行只命中一条
     */
    private WkOrderItem resolveOrderItemForPick(TaskItem taskItem, Long orderId) {
        if (taskItem.getOrderItemId() != null) {
            WkOrderItem oi = asnOrderItemService.getById(taskItem.getOrderItemId());
            if (oi != null && orderId.equals(oi.getOrderId())) {
                return oi;
            }
        }
        if (StringUtils.isNotBlank(taskItem.getPlatItemId())) {
            WkOrderItem oi = asnOrderItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
                    .eq(WkOrderItem::getOrderId, orderId)
                    .eq(WkOrderItem::getPlatItemId, taskItem.getPlatItemId())
                    .last("LIMIT 1"));
            if (oi != null) {
                return oi;
            }
        }
        return asnOrderItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
                .eq(WkOrderItem::getMatnrCode, taskItem.getMatnrCode())
                .eq(WkOrderItem::getOrderId, orderId)
                .last("LIMIT 1"));
    }
    private Boolean checkWaveComplete(TaskItem taskItem) {
        Wave wave = waveService.getById(taskItem.getSourceId());
        List<WkOrder> wkOrderList = asnOrderService.list(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getWaveId, wave.getId()));
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java
@@ -12,10 +12,10 @@
    ORDER_WORK_TYPE_DONE_IN("1", "采购入库单"),
    ORDER_WORK_TYPE_PROD("2", "生产入库单"),
    /** ERP 单别,生产入库(入库类) */
    ORDER_WORK_TYPE_PROD_B017("B017", "生产入库"),
    ORDER_WORK_TYPE_PROD_B017("B017", "生产入库-工单入库"),
    ORDER_WORK_TYPE_PURCHASE("3", "领料退回入库单"),
    ORDER_WORK_TYPE_SALE("4", "销售退回入库单"),
    ORDER_WORK_TYPE_SALES_RETURN_D004("D004", "销售退货"),
    ORDER_WORK_TYPE_SALES_RETURN_D004("D004", "退货入库-销售退货"),
    ORDER_WORK_TYPE_OTHER_IN("5", "其它入库单"),
    ORDER_WORK_TYPE_OTHER_TERANSFER_IN("6", "调拔入库单"),
    ORDER_WORK_TYPE_OTHER_TERANSFER("8", "调拔入库单"),//项目临时修改
@@ -28,7 +28,18 @@
    ORDER_WORK_TYPE_STOCK_OUT("15", "库存出库"),
    ORDER_WORK_TYPE_STOCK_CHECK("16", "盘点出库"),
    ORDER_WORK_TYPE_STOCK_TERANSFER("17", "调拔出库单"),
    ORDER_WORK_TYPE_OTHER("14", "其它出库单");
    ORDER_WORK_TYPE_OTHER("14", "其它出库单"),
    ORDER_WORK_TYPE_D001("D001", "销售出库"),
    ORDER_WORK_TYPE_A008("A008", "采购仓退"),
    /** ERP 同码多场景时共用 B003 */
    ORDER_WORK_TYPE_B003_ERP("B003", "领料出库-工单发料/超领"),
    ORDER_WORK_TYPE_C036("C036", "借出-出库"),
    ORDER_WORK_TYPE_A005("A005", "采购入库"),
    ORDER_WORK_TYPE_D022("D022", "退货入库-工单退料"),
    ORDER_WORK_TYPE_B042("B042", "生产入库-工单超入"),
    ORDER_WORK_TYPE_B007("B007", "生产入库-入库上架"),
    ORDER_WORK_TYPE_C037("C037", "调拨入库-借出归还");
    OrderWorkType(String type, String desc) {
@@ -48,6 +59,8 @@
            return OrderWorkType.ORDER_WORK_TYPE_PROD_B017.type;
        } else if (desc.equalsIgnoreCase(OrderWorkType.ORDER_WORK_TYPE_PROD_B017.type)) {
            return OrderWorkType.ORDER_WORK_TYPE_PROD_B017.type;
        } else if ("生产入库".equals(desc)) {
            return OrderWorkType.ORDER_WORK_TYPE_PROD_B017.type;
        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE.desc)) {
            return OrderWorkType.ORDER_WORK_TYPE_PURCHASE.type;
        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_SALE.desc)) {
@@ -55,6 +68,8 @@
        } else if (desc.equalsIgnoreCase(OrderWorkType.ORDER_WORK_TYPE_SALES_RETURN_D004.type)) {
            return OrderWorkType.ORDER_WORK_TYPE_SALES_RETURN_D004.type;
        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_SALES_RETURN_D004.desc)) {
            return OrderWorkType.ORDER_WORK_TYPE_SALES_RETURN_D004.type;
        } else if ("销售退货".equals(desc)) {
            return OrderWorkType.ORDER_WORK_TYPE_SALES_RETURN_D004.type;
        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.desc)) {
            return OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type;
@@ -78,8 +93,33 @@
            return OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type;
        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_REVISE.desc)) {
            return OrderWorkType.ORDER_WORK_TYPE_STOCK_REVISE.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_D001)) {
            return OrderWorkType.ORDER_WORK_TYPE_D001.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_A008)) {
            return OrderWorkType.ORDER_WORK_TYPE_A008.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_B003_ERP)) {
            return OrderWorkType.ORDER_WORK_TYPE_B003_ERP.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_C036)) {
            return OrderWorkType.ORDER_WORK_TYPE_C036.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_A005)) {
            return OrderWorkType.ORDER_WORK_TYPE_A005.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_D022)) {
            return OrderWorkType.ORDER_WORK_TYPE_D022.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_B042)) {
            return OrderWorkType.ORDER_WORK_TYPE_B042.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_B007)) {
            return OrderWorkType.ORDER_WORK_TYPE_B007.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_C037)) {
            return OrderWorkType.ORDER_WORK_TYPE_C037.type;
        }
        return null;
    }
    private static boolean matchErpCode(String desc, OrderWorkType t) {
        if (desc == null) {
            return false;
        }
        return desc.equalsIgnoreCase(t.type) || desc.equals(t.desc);
    }
    /**
@@ -93,9 +133,7 @@
            return OrderType.ORDER_IN.type;
        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_PROD.desc)) {
            return OrderType.ORDER_IN.type;
        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_PROD_B017.desc)) {
            return OrderType.ORDER_IN.type;
        } else if (desc.equalsIgnoreCase(OrderWorkType.ORDER_WORK_TYPE_PROD_B017.type)) {
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_PROD_B017) || "生产入库".equals(desc)) {
            return OrderType.ORDER_IN.type;
        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE.desc)) {
            return OrderType.ORDER_IN.type;
@@ -125,6 +163,24 @@
            return OrderType.ORDER_TRANSFER.type;
        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_REVISE.desc)) {
            return OrderType.ORDER_REVISE.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_D001)) {
            return OrderType.ORDER_OUT.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_A008)) {
            return OrderType.ORDER_OUT.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_B003_ERP)) {
            return OrderType.ORDER_OUT.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_C036)) {
            return OrderType.ORDER_OUT.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_A005)) {
            return OrderType.ORDER_IN.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_D022)) {
            return OrderType.ORDER_IN.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_B042)) {
            return OrderType.ORDER_IN.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_B007)) {
            return OrderType.ORDER_IN.type;
        } else if (matchErpCode(desc, OrderWorkType.ORDER_WORK_TYPE_C037)) {
            return OrderType.ORDER_IN.type;
        }
        return null;
    }
@@ -164,6 +220,24 @@
            return OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.desc;
        } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_REVISE.type)) {
            return OrderWorkType.ORDER_WORK_TYPE_STOCK_REVISE.desc;
        } else if (type != null && type.equalsIgnoreCase(OrderWorkType.ORDER_WORK_TYPE_D001.type)) {
            return OrderWorkType.ORDER_WORK_TYPE_D001.desc;
        } else if (type != null && type.equalsIgnoreCase(OrderWorkType.ORDER_WORK_TYPE_A008.type)) {
            return OrderWorkType.ORDER_WORK_TYPE_A008.desc;
        } else if (type != null && type.equalsIgnoreCase(OrderWorkType.ORDER_WORK_TYPE_B003_ERP.type)) {
            return OrderWorkType.ORDER_WORK_TYPE_B003_ERP.desc;
        } else if (type != null && type.equalsIgnoreCase(OrderWorkType.ORDER_WORK_TYPE_C036.type)) {
            return OrderWorkType.ORDER_WORK_TYPE_C036.desc;
        } else if (type != null && type.equalsIgnoreCase(OrderWorkType.ORDER_WORK_TYPE_A005.type)) {
            return OrderWorkType.ORDER_WORK_TYPE_A005.desc;
        } else if (type != null && type.equalsIgnoreCase(OrderWorkType.ORDER_WORK_TYPE_D022.type)) {
            return OrderWorkType.ORDER_WORK_TYPE_D022.desc;
        } else if (type != null && type.equalsIgnoreCase(OrderWorkType.ORDER_WORK_TYPE_B042.type)) {
            return OrderWorkType.ORDER_WORK_TYPE_B042.desc;
        } else if (type != null && type.equalsIgnoreCase(OrderWorkType.ORDER_WORK_TYPE_B007.type)) {
            return OrderWorkType.ORDER_WORK_TYPE_B007.desc;
        } else if (type != null && type.equalsIgnoreCase(OrderWorkType.ORDER_WORK_TYPE_C037.type)) {
            return OrderWorkType.ORDER_WORK_TYPE_C037.desc;
        }
        return null;
    }
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
@@ -2,7 +2,6 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.common.config.SysStockProperties;
import com.vincent.rsf.server.common.utils.DateUtils;
@@ -162,17 +161,10 @@
                .setWeight(matnr.getWeight())
                .setFieldsIndex(orderItem.getFieldsIndex())
                .setShipperId(matnr.getShipperId());
        // 同票号 fields_index 可能对应多条 ASN 明细(不同 plat_item),不得在此处整段 return;否则仅第一条写入收货区,其余数量丢失。合并逻辑见下方 queryWrapper。
        // 按 ASN 明细唯一标识落收货区,同一单据不同行不因物料/票号相同而合并成一行
        LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new LambdaQueryWrapper<WarehouseAreasItem>()
                .eq(WarehouseAreasItem::getMatnrCode, orderItem.getMatnrCode())
                .eq(!Cools.isEmpty(orderItem.getFieldsIndex()), WarehouseAreasItem::getFieldsIndex, orderItem.getFieldsIndex())
                .eq(WarehouseAreasItem::getAsnCode, orderItem.getOrderCode())
                .eq(StringUtils.isNotBlank(orderItem.getSplrBatch()), WarehouseAreasItem::getSplrBatch, orderItem.getSplrBatch());
        if (Objects.isNull(orderItem.getIsptResult())) {
            queryWrapper.isNull(WarehouseAreasItem::getIsptResult);
        } else {
            queryWrapper.eq(WarehouseAreasItem::getIsptResult, orderItem.getIsptResult());
        }
                .eq(WarehouseAreasItem::getAsnItemId, orderItem.getId())
                .eq(WarehouseAreasItem::getAsnId, wkOrder.getId());
        WarehouseAreasItem serviceOne = warehouseAreasItemService.getOne(queryWrapper);
        if (Objects.nonNull(serviceOne)) {
            item.setId(serviceOne.getId());