# 阶段三:国内货柜履约与出仓 > 对应全景流程:F14~F23。 > 阶段起点:入库单主状态为 `WAIT_SPLIT`,不存在有效 HOLD。 > 阶段终点:装柜后完成退税报关并进入待发区,再完成送港线的仓库离开/进港事实;实际开船 `VESSEL_DEPARTED` 由阶段四承接。 > 本阶段复用订单、入库单、柜次和装柜计划,不新建独立“出仓单”。`LOADED` 后先推进报关协同,报关完成后进入待发区,再推进送港;费用确认是并行事实,装柜完成后对已装范围的当前有效费用版本执行系统默认确认。 ## 1. 阶段目标和边界 本阶段把可分柜货物转化为可追溯的真实整柜离仓事实,覆盖: 1. 模拟柜、智能推荐、人工分配和同柜不可拆组; 2. 海运订舱草稿、资料补齐和放舱; 3. 订舱级国内拖车预约; 4. 模拟柜与订舱柜型需求、真实集装箱号关联; 5. 预装确认、动态增减和普通散货托盘标签; 6. 国内 PDA 拣货、整托装柜和异常闭环; 7. 空仓、半仓、满仓、锁仓、带锁码照五类装柜证据与锁码文本; 8. 装柜完成、部分装载分片和跨区交接快照; 9. `LOADED` 后通知报关行、客户资料收集、回执确认、整柜正式申报和海关结果; 10. 送港、进港、甩柜/改配、实际离仓和拖车费用归集。 `LOADED` 表示货物已经完成实际装柜。此时先触发报关线:收集退税客户资料、发送报关行、处理回执和客户确认;报关完成后进入待发区,才允许推进拖车、离仓和进港。已进港不代表报关完成,容量不足时记录甩柜和改配船次;甩柜不影响已完成报关资料、回执和客户确认。只有实际开船后才进入海运节点。国内 Admin/PDA 不得把订单推进到海外派送完成 `DELIVERED`。 ## 2. 角色、终端和对象 | 角色 | 终端 | 主要操作 | |---|---|---| | 排柜操作员 | Admin | 创建模拟柜、搜索候选、推荐/人工加入、调整预装 | | 订舱操作员 | Admin | 建订舱草稿、维护运输资料、上传文件、放舱 | | 国内调度 | Admin | 建订舱级拖车预约、选择供应商、维护时间和附件 | | 仓库主管 | Admin | 预装确认、真实柜号补录、任务和证据监督 | | PDA 拣货员 | 国内 PDA | 领取唯一柜次任务、扫码、异常、拍照、完成装柜 | | 报关操作员 | Admin | 汇总整柜资料、开始报关、上传完成文件、完成报关 | | 企业操作员 | Client | 上传本客户退税/报关资料、查看本企业进度和回执 | | 出仓操作员 | Admin | 查看组合门禁,必要时人工确认离仓 | 核心对象: | 对象 | 业务作用 | 稳定标识 | |---|---|---| | 入库单 | 每票/分片货物履约主体 | `inboundId`、入仓码 | | 模拟柜/柜次 | 多票货物共享的装载容器 | `containerBookingId`、`cabinetNo` | | 装柜计划 | 柜次唯一预装/PDA 作业聚合 | `loadingPlanId` | | 海运订舱 | 船司运输和柜型需求聚合 | `oceanBookingId`、`OB-yyMMdd-####` | | 拖车预约 | 一个已放舱订舱的国内提柜/送柜任务 | `truckAppointmentId` | | PDA 任务 | 单柜次单作业员的现场任务 | `taskId`、任务版本 | | 整柜报关 | 柜次级资料冻结和回执 | 柜次及报关记录标识 | ## 3. 前置检查 - 候选入库单已完成阶段二,实际箱数、重量和体积可用; - 一件代发已按实际托盘封托; - 当前入库单无有效 HOLD; - 柜型规格、国内中转仓、有效渠道和供应商主档可用; - 操作员理解模拟柜、真实柜号、订舱和拖车是不同对象; - 同柜不可拆组、已占用数量和版本冲突均以服务端返回为准; - 费用仍可并行维护,客户未确认不阻断排柜、预装、PDA 或装柜;装柜完成后对已装范围的当前有效已发布版本记录系统默认确认。客户确认和系统默认确认来源分开审计;缺少有效费用版本不伪造确认,部分装载不得把余量一起确认。 ## 4. F14 模拟柜与智能排柜 ### 4.1 创建模拟柜 入口:Admin → 国内货柜/智能装柜。 1. 选择正式装柜仓; 2. 选择九类计划渠道组之一; 3. 选择平台有效柜型,核对额定容量和限重; 4. 填写计划日期和必要备注; 5. 提交后系统原子创建稳定柜次、`cabinetNo` 和唯一装柜计划; 6. 此时可以没有真实集装箱号,也不会因创建模拟柜自动产生订舱。 容量和重量当前允许达到柜型额定值的 150%,超过时服务端拒绝。页面显示仅用于预判,最终以服务端重新计算为准。 ### 4.2 查询候选 工作台可查询 `PENDING_REVIEW`、`WAIT_MEASURE`、`WAIT_SPLIT`、`LOADING` 等未完成候选。状态是展示维度,能否加入必须看响应中的 `canAssign` 和原因。 - 待审核或待测量订单可提前占位; - 预装确认和启动 PDA 前,实际作业成员必须进入 `WAIT_SPLIT`; - 普通订单按剩余箱数分配; - 一件代发按每个未占用的已封托托盘独立返回和分配,禁止拆托; - 同柜不可拆组必须成员完整、满箱并原子加入; - 推荐顺序以入库时间先进先出为基础。 ### 4.3 智能推荐和人工加入 智能推荐:设置筛选范围和装载目标,系统逐项校验渠道、仓库、剩余箱数、体积、重量、托盘完整性、组锁和占用,再返回推荐结果。 人工加入:选择候选,填写普通货分配箱数或选择一件代发整托,携带计划版本提交。系统重新校验资格;页面旧结果不能作为写入依据。 一件代发一票多托时逐托展示,其中一托已分配不得隐藏其他未分配托盘。容量不足时跳过整托,不能回退成按箱拆托。 ### 4.4 调整与费用影响 - 未产生物理拣货的普通明细可增减或移除; - 已拣数量是可调整下限; - 同柜组只有全组都未拣时才能整组移除; - 单行一件代发只能按该行 `palletId` 整托移除; - 成员变化需要重算未冻结的柜级/客户级费用; - 已确认、已发送或客户已确认的费用版本不得直接改写,应按费用规则生成新版本或拒绝。 ## 5. F15 海运订舱与放舱 ### 5.1 创建草稿 入口:Admin → 海运订舱。 1. 选择启用的国内中转仓; 2. 选择该仓当前有效渠道; 3. 选择 `ACTIVE/BOOKING` 订舱供应商; 4. 填写三类参与方和已知运输资料; 5. 至少维护一项、最多二十项柜型需求,数量为正整数; 6. 保存为 `DRAFT`,系统生成 `OB-yyMMdd-####` 订舱号。 草稿允许资料不完整、替换文件和继续编辑。柜型需求只表达需要多少个什么柜型,不创建真实货柜行。 ### 5.2 补齐并放舱 放舱前核对: - 提单号全局唯一; - 船名、航次、起运港、目的港、ETD、ETA 和运输条款完整; - 渠道仍有效; - 柜型需求与平台规格一致; - 存在有效 `BOOKING_CONFIRMATION` 或 `BILL_OF_LADING` 文件; - 订舱供应商仍为有效主档。 点击放舱后状态从 `DRAFT` 进入 `RELEASED`,运输快照永久只读。放舱不要求真实柜号,不得为了通过校验伪造柜号。 ## 6. F16 订舱级国内拖车 入口:Admin → 国内拖车预约。 1. 从服务端候选中选择已 `RELEASED`、有提单号和有效订舱文件的订舱; 2. 选择 `ACTIVE/TRUCKING/DOMESTIC` 供应商; 3. 填写计划装柜时间、联系人和附件; 4. 保存/提交预约; 5. 重复创建时返回现有非终态预约,不生成第二张。 拖车单只绑定订舱,不绑定客户、柜次、装柜计划或真实柜号。一个订舱最多一张非终态预约,已有有效完成单不能再次创建收费。 PDA 装柜完成不推进拖车状态。只有订舱要求的全部柜型数量均已关联,并且所有柜均确认国内离仓后,拖车才自动完成。正金额应付拖车费按各柜最终实装体积守恒分摊并发送 Finance;缺供应商归属、有效体积或费用配置时失败关闭,不做伪造均分。 ## 7. F17 柜次关联和真实柜号 入口:Admin → 柜次详情 → 关联订舱/补录柜号。 1. 选择已放舱订舱的未满配柜型需求; 2. 选择对应模拟柜; 3. 校验仓库、渠道映射、柜型、容量、限重和需求剩余数量; 4. 录入真实集装箱号; 5. 提交后在原柜次上冻结订舱、需求和柜号快照。 关联不会更换 `containerBookingId`、`cabinetNo`、装柜计划或明细。真实集装箱号在同一订舱内唯一,不同提单可按业务规则复用。 订舱关联、预装确认和任务创建技术上可先于柜号,但正式操作应在 PDA 最终完成前补齐。已有柜号纠正仅限计划 `EDITING`、任务未领取且没有物理作业事实。 ## 8. F18 预装确认、动态增减与标签 ### 8.1 预装核对与确认 入口:Admin → 预装清单。 1. 打开柜次唯一预装计划; 2. 核对每个入仓码、客户、目的仓、普通箱数或一件代发托盘; 3. 查看容量、重量、已占用和异常提示; 4. 确认所有现场成员已到 `WAIT_SPLIT` 且未 HOLD; 5. 点击计划级确认,生成或开放唯一 PDA 任务; 6. 记录确认快照、操作人和版本。 预装进入 `CONFIRMING/CONFIRMED` 只冻结确认快照,不锁死尚未完成柜次。计划仍为 `EDITING/LOADING` 时可继续增加合法明细;未拣明细可调整,已拣明细保持锁定。 新增或调整后计划和任务版本递增,PDA 旧版本必须刷新再作业。 ### 8.2 普通散货托盘标签 普通、非一件代发 FBA 明细在计划 `LOADING/COMPLETED` 且真实柜号有效时生成正式托盘标签: 1. 系统按平台柜次号、FBA 地址内部编号和三位序号生成冻结托盘码;新柜次号为全局连续且不按日期重置的 `D0001`、`D0002`,托盘码不依赖可跨提单复用的真实柜号; 2. 地址内部编号从 Warehouse 启用主数据读取; 3. 缺编号或同柜重复时拒绝生成; 4. 重复生成必须与已有明细一致; 5. Admin 全部打印或按仓指定张数打印; 6. A4 横版每托一页,标签与海外补打复用同一编号。 该标签与阶段二一件代发 `DP` 托盘不同:一件代发托盘在测量后已实际清点封托,装柜时按冻结整托分配。 ## 9. F19 国内 PDA 拣货装柜 ### 9.1 领取和开始 入口:国内 PDA → 拣货装柜。 1. 操作员选择当前作业仓; 2. 打开或扫描柜次任务; 3. 核对真实柜号、装柜计划和任务版本; 4. 领取任务后绑定当前作业员、任务和柜次; 5. 单柜次只允许一名作业员,不支持多人并行或无审计接管; 6. 进入任务后计划/入库履约按规则进入 `LOADING`。 正式作业当前只支持在线。设备本地草稿按作业员、任务和柜次隔离;批量提交是否具备完整原子事务仍需在优化/验收中持续核实。 ### 9.2 普通散货扫码 - 扫描稳定箱码,一箱一码; - 不能用 SKU、件数、入仓码或自由文本代替箱码; - 系统核对箱码属于当前入库单、当前任务且尚未处理; - 连续扫描先进入当前任务草稿,操作员核对后批量提交; - 重复扫描不重复增加实装数量。 ### 9.3 一件代发整托装柜 - 扫描 `DP` 托盘码,或扫描成员箱码定位所属已封托托盘; - 页面展示托盘、入仓码、箱数和 SKU 汇总; - 使用 `PICK_PALLET` 一次提交整托; - 禁止部分拣货、拆托或将同托不同订单成员分开提交; - 装柜完成按 `palletId` 精确冻结每托箱唛和 SKU,不能按整票模糊复制。 ### 9.4 部分拣货、跳拣和异常 允许分批扫描和暂时跳过,但每个未完成项必须选择/填写异常原因。存在未解决异常、缺少处理单元、数量不平或版本冲突时不能完成任务。 提交超时后先查询任务明细和操作结果,禁止更换幂等键盲目重复提交。版本冲突时刷新任务,保留未提交草稿并重新核对。 ## 10. F20 装柜证据与铅封 PDA 按现场要求采集五类证据: 1. `EMPTY`:空仓照片; 2. `HALF`:半仓照片; 3. `FULL`:满仓照片; 4. `LOCKED`:锁仓照片; 5. `SEAL`:带有效铅封号的带锁码照片。 每类至少一张有效照片,同类允许追加。PDA 仅允许现场相机拍摄;有权限的 Admin 操作员/理货员可人工补充,普通拣货员不开放后台上传。 证据先上传 File 获得合法文件引用,再绑定柜次/任务。错误图片只能作废,不能硬删除;需保留上传、作废、操作者、时间、文件哈希和幂等记录。照片及铅封号当前不对客户展示。 ## 11. F21 装柜完成与分片 PDA 点击“完成装柜”时,服务端重新校验: - 任务属于当前柜次和仓库且版本一致; - 真实集装箱号存在; - 所有普通箱码或一件代发整托均核平; - 没有未解决异常; - 空仓、半仓、满仓、锁仓、带锁码照五类证据和锁码文本完整; - 计划明细、已拣数量和最终实装数量守恒。 校验通过后: 1. PDA 任务和装柜计划进入 `COMPLETED`; 2. 实装来源入库单进入 `LOADED`; 3. 生成最终实装箱码、托盘、SKU 和证据快照; 4. 对部分装载执行一次分片; 5. 生成跨区 Outbox,但后续消费必须保持幂等。 部分装载时,已装数量形成当前柜次的 `LOADED` 子入库单,余量形成可继续 `WAIT_SPLIT` 的后续子单;只允许一层分片,所有子项总和必须等于来源数量。客户订单身份和入仓码关联不能丢失。 ## 12. F22 客户资料与整柜出口报关 ### 12.1 F22-A `LOADED` 后通知报关并建立客户案例 入口:`LOADED` 事件 → Admin/Client → 报关资料。 1. 装柜完成后按最终实装清单通知报关行,建立本柜报关批次和每个客户/入仓码的 `customerCustomsCase`; 2. 客户上传本企业资料,平台校验客户、订单、入仓码、实际装载数量和文件归属; 3. 平台将资料发送给报关行,记录发送时间、资料版本和 `roundNo`; 4. 报关行返回本轮回执,平台保存文件和回执字段,并向对应客户展示确认任务。 柜前可以存在资料准备或历史附件,但不创建本柜正式客户确认轮次,也不能显示“已通知报关”。客户资料缺失形成报关补件待办,未完成报关不得进入待发区或推进送港。 ### 12.2 F22-B 报关行回执与客户确认循环 客户查看报关行回执后有两个结果: 1. **确认**:当前客户案例进入 `CUSTOMER_CONFIRMED`,保存确认人、确认时间、回执版本和幂等键; 2. **打回**:当前案例进入 `NEEDS_RESUBMIT`,保存打回原因;客户重新上传/替换资料,平台重新发送报关行,报关行生成新回执,`roundNo` 加一后再次发客户确认。 客户打回只重开对应客户案例,不重置其他客户已经确认的轮次。直到柜内所有客户案例都为 `CUSTOMER_CONFIRMED`,才允许进入整柜正式提交。 ### 12.3 F22-C 所有客户通过后的整柜正式申报 1. 平台检查所有客户案例均已确认,冻结本柜最终实装和资料版本,生成整柜正式申报批次; 2. 将整柜资料提交报关行确认,报关行完成正式申报;首版不做外部系统直连,保留人工提交和审计记录; 3. 海关结果独立记录为查验、免查验放行、补件/退回、扣货等,不把客户确认回执直接当成海关放行; 4. 报关完成后进入待发区;报关事实不覆盖送港线的离仓、进港、甩柜事实。甩柜只改变运输船期,不回退报关资料、回执或客户确认。 ## 13. F23 送港、进港与甩柜 ### 13.1 出仓硬门禁 送港线的离仓/进港门禁逐项检查: - 无有效 HOLD; - 入库单为 `LOADED`; - 装柜计划为 `COMPLETED`; - PDA 柜次任务为 `COMPLETED`; - 订舱已 `RELEASED` 且分配当前柜次; - 五类证据与有效锁码文本完整; - 送港任务和当前船次分配完整; - 报关完成是进入待发区以及后续仓库离开、送港和进港的前置。 订舱、拖车、仓库离开和港口进场属于待发区之后的送港线事实。容量不足时记录 `ROLLED_OVER`,保存原船次、滚动次数、新船次、预计开船时间和客户通知;不重新生成报关批次或客户确认任务。 ### 13.2 自动与人工确认离仓 送港状态变化或其他送港门禁满足时系统自动尝试收敛。未自动完成时,平台在柜次/送港页面: 1. 打开门禁清单; 2. 逐项处理未通过原因; 3. 全部通过后点击确认离仓; 4. 携带当前版本和幂等键提交; 5. 查看唯一离仓历史和第一条实际节点。 成功后系统: - 写入整柜唯一国内离仓事实; - 写入实际 `DEPARTED_WAREHOUSE` 节点; - 写入 `PORT_RECEIVED` 或 `ROLLED_OVER`; - 维护船次和开船前等待,不把预计 ETD 记成海运在途; - 检查并尝试完成订舱级拖车; - 保持跨区交接事件可重试且不重复建单。 实际离仓和进港节点产生后禁止撤销。发现错误转入线下和后续阶段异常处理,不提供修改历史伪装未离仓或未进港的能力。报关线的客户打回、重新发送和海关查验单独记录,不回滚送港事实。 ## 14. 状态和动作总表 | 对象 | 关键状态 | 推进动作 | |---|---|---| | 入库单 | `WAIT_SPLIT → LOADING → LOADED` | 分配/开始 PDA/完成装柜 | | 装柜计划 | `EDITING → LOADING → COMPLETED` | 预装调整/PDA 作业/最终完成 | | 订舱 | `DRAFT → RELEASED` | 补齐资料并放舱 | | 拖车 | 非终态 → `COMPLETED` | 所有要求柜次实际离仓后自动完成 | | 报关 | `WAITING_DOCUMENTS → SENT_TO_BROKER → RECEIPT_PENDING_CUSTOMER_CONFIRM → CUSTOMER_CONFIRMED / NEEDS_RESUBMIT → ALL_CUSTOMERS_CONFIRMED → FORMAL_SUBMITTED → INSPECTION/RELEASED` | 装柜后通知报关行;回执必须经对应客户确认,打回则新资料/新回执轮次 | | 送港 | `WAITING_FOR_LOADING → PORT_DELIVERY_PENDING → DEPARTED_WAREHOUSE → IN_TRANSIT_TO_PORT → PORT_RECEIVED / ROLLED_OVER` | 报关完成后进入待发区,再安排拖车和进港;容量不足时在原柜船期上人工修改船信息并留痕 | | 海运 | `WAITING_SAILING → VESSEL_DEPARTED → IN_TRANSIT` | 只有承运船舶真实开航才进入海运节点 | 主状态只表达阶段结果。订舱、拖车、PDA、证据和报关保持关联子状态,页面应汇聚展示,但不能互相覆盖。 ## 15. 异常与恢复 | 场景 | 处理方式 | |---|---| | 候选显示可用但提交失败 | 以服务端最新占用/版本为准,刷新后重排 | | 待测量订单已占位 | 可保留计划占位,确认预装前必须到 `WAIT_SPLIT` | | 一件代发整托容量不足 | 跳过整托或换柜,禁止拆托 | | 订舱资料不全 | 保持 `DRAFT`,补齐后再放舱 | | 放舱后资料错误 | 不原地篡改冻结快照,按业务异常处置 | | 真实柜号暂缺 | 可先关联/确认,但最终装柜前必须补齐 | | PDA 旧版本 | 刷新计划,不以旧版本覆盖新增明细 | | 扫描错箱/重复箱 | 拒绝或提示已处理,核对稳定箱码 | | 未完成项有异常 | 记录原因并解决,禁止完成任务 | | 照片错误 | 作废并重拍,不硬删除证据 | | 部分装载 | 一次分片,已装与余量数量守恒 | | 报关资料缺失 | 定位对应客户/入仓码补件,办理批次不伪造完成 | | 出仓门禁未齐 | 展示具体阻断项,条件变化后受控重试 | | 离仓请求超时 | 查询唯一离仓历史/节点后再处理,不重复写事实 | ## 16. 数据流和阶段完成判定 ```text WAIT_SPLIT 入库单/已封托托盘 → 模拟柜与唯一装柜计划 → 已放舱订舱 + 真实柜号 + 订舱级拖车 → 预装确认/动态调整 → PDA 实装 + 五类证据 → COMPLETED / LOADED + 数量分片 + 跨区快照 ├─ 报关线:通知报关 → 客户资料 → 报关行回执 → 客户确认/打回重做 │ → 所有客户通过 → 整柜正式申报 → 查验/放行 └─ 送港线:拖车 → DEPARTED_WAREHOUSE → PORT_RECEIVED → 甩柜/改配(如发生)→ 等待实际开船 → VESSEL_DEPARTED → 海运节点查询 ``` 阶段完成必须同时满足: - [ ] 最终柜次、装柜计划、订舱、真实柜号关联可追溯 - [ ] 全部实装箱/托盘/SKU 与入库单数量守恒 - [ ] PDA 任务完成且无未解决异常 - [ ] 五类证据和锁码文本完整有效 - [ ] 装柜计划 `COMPLETED`,实装入库单 `LOADED` - [ ] 部分装载时已装子单和余量子单正确 - [ ] 报关线已为每个客户建立案例,回执、确认/打回和每轮资料版本可追溯 - [ ] 送港线已记录唯一国内离仓历史;如已进港,存在 `PORT_RECEIVED`,如甩柜,存在原船次/改配船次历史 - [ ] 客户全部确认后才允许整柜正式提交;正式申报后的查验/放行结果单独记录 - [ ] 船舶实际开航后才写入 `VESSEL_DEPARTED` 并启动海运节点查询 - [ ] 跨区事件可幂等重试;甩柜/改配只新增船期事实,不覆盖报关资料、回执和客户确认 ## 17. 易用性与数据流评审问题 1. 排柜工作台是否充分解释“可提前占位”和“可实际作业”的差别? 2. 推荐结果是否应逐项展示未入选原因、容量影响和费用影响? 3. 模拟柜、柜次编号、真实柜号、订舱号和提单号是否在页面上容易混淆? 4. 订舱、拖车、预装、PDA、报关是否需要一个柜次级总控清单,而不是跨页面查找? 5. 预装确认后仍可动态增减时,如何提示 PDA 版本已过期并保护未提交草稿? 6. PDA 批量提交需要补齐怎样的原子性、离线/弱网和失败整批回滚验收? 7. 五类证据是否要提供拍摄引导轮廓、清晰度检查和缺图计数? 8. 部分装载分片在 Client 应如何展示,避免客户误以为整票已经全部装柜? 9. 报关资料清单、补件责任人、截止时间和回执匹配是否需要结构化待办? 10. 出仓门禁失败是否需要直接跳转到对应处理页面? 11. 拖车不作为出仓硬门禁的现行口径,是否与现场调度责任一致? 12. 实际离仓不可撤销后,错误柜号或错误时间的合规更正流程由谁负责? ## 18. 阶段四交接包 交给阶段四的权威数据包括: - 柜次、真实集装箱号、订舱号、提单号、船名和航次; - 起运港、目的港、ETD/ETA 和运输条款快照; - 最终实装订单、入仓单、箱码、托盘、SKU、重量和体积; - 装柜五类证据引用和报关完成事实; - 国内离仓时间和 `DEPARTED_WAREHOUSE` 实际节点; - 跨区事件版本、事件 ID 和有效载荷哈希; - `CarrierScheduleQuery` 及后续船节点查询上下文; - 未冻结费用和拖车应付等并行财务结果。 ## 19. 事实来源 - `docs/国内货柜履约/README.md` - `docs/国内货柜履约/国内货柜履约页面与原型清单.md` - `docs/归档/头程到尾程/头程下单到尾程出库现状流程全景清单.md` - `docs/统一订单主状态与操作契约.md` - `apps/admin-web/src/modules/container-loading/` - `apps/admin-web/src/modules/loading-lists/` - `apps/pda-uniapp/AGENTS.md` - `apps/pda-uniapp/pages/picking/picking.vue` - `baiyue-firstleg/firstleg/AGENTS.md` - `baiyue-firstleg/firstleg/src/main/resources/openapi/loading-lists-v1.yaml` - `baiyue-firstleg/firstleg/src/main/resources/openapi/ocean-bookings-v1.yaml` - `baiyue-firstleg/firstleg/src/main/resources/openapi/truck-appointments-v1.yaml` - `baiyue-firstleg/firstleg/src/main/resources/openapi/customs-v1.yaml` - `baiyue-firstleg/firstleg/src/main/java/com/baiyue/firstleg/service/SmartLoadingService.java` - `baiyue-firstleg/firstleg/src/main/java/com/baiyue/firstleg/service/LoadingPickService.java` - `baiyue-firstleg/firstleg/src/main/java/com/baiyue/firstleg/outbound/dispatch/service/OutboundDispatchService.java`