From 40224c34a1ab2706039c0752321151f8e975c1ca Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Wed, 30 Sep 2026 17:13:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Admin排车列表样式试点.md | 4 +++ Admin高密度界面规范.md | 1 + README.md | 4 +-- 业务快速索引.md | 32 ++++++++++++------- .../头程至实际开船节点冻结矩阵与缺口清单.md | 5 ++- .../阶段六-海外排车出库派送与回写.md | 2 ++ 平台客户层级与权限契约.md | 6 ++++ 独立任务协作登记.md | 27 ++++++++++++++-- 8 files changed, 63 insertions(+), 18 deletions(-) diff --git a/Admin排车列表样式试点.md b/Admin排车列表样式试点.md index b2bee0d..2b631a5 100644 --- a/Admin排车列表样式试点.md +++ b/Admin排车列表样式试点.md @@ -23,6 +23,10 @@ 页面自行关闭列表路由 `showPageHeading`,避免重复标题;详情路由保留原配置。样式唯一维护位置为 `src/shared/components/DataTable.vue`,业务页不复制样式。未在本轮范围内的页面继续保持默认外观。 +一体式列表的搜索区默认输入框、选择框、日期框和按钮共用 `--el-component-size: 36px`。选择框默认外框的最小高度由公共 DataTable 同步,避免 Element Plus 固定的 `32px` 与输入框产生高度差;显式 small/large 尺寸及多选换行继续按组件自身规则处理。该规则同时覆盖 QueryToolbar 和搜索插槽内直接使用的选择框。 + +Admin 仍使用 Element Plus。普通 `el-select` 由构建组件解析器统一接入 `src/shared/components/AdminSelect.ts`,仅将 `filterable` 默认值设为 `true`,使用 Element Plus 原有渲染、插槽、事件和公开方法;列表、表单、弹框及分页选择框均可输入关键词筛选当前选项。已有 `remote-method`、`filter-method`、多选、禁用和清空行为保持原有配置;搜索不改变候选业务范围,也不会自动新增远程接口调用。虚拟托盘选择框 `el-select-v2` 已显式启用远程搜索。 + 已接入列表的表格“操作”列使用纯文字按钮:无描边、填充或装饰图标,字重为普通正文的 `400`,普通操作蓝色,取消等危险操作红色,悬停无下划线;禁用为灰色,保留加载反馈、键盘焦点和危险确认。通过 `RowActions` 的 `text-actions` 接入,更多菜单使用相同配色与普通字重;已有手写按钮组使用 `row-actions density-actions admin-text-actions`,危险语义仍由原来的 `data-tone="danger"` 或 `type="danger"` 显式提供。搜索区、顶部字段设置、分页、列设置面板及弹框按钮保持原样。公共行操作外观维护在 `src/styles/adminTextActions.css`,随 `adminDensity.css` 加载;未接入页面默认不启用。 推广时列设置显式使用 `column-settings-mode="show"`。已有 `preference-key` 保持,新接入的退货库存、流水和箱号各使用独立偏好键。存在非阻断警告时使用 `notices` 插槽,列表失败时通过 `results-visible` 隐藏结果和分页,标题、查询与重试保持可用;`before-results` 保留原统计与汇总。特殊工作台可使用 `results` 插槽承载原内容和自身分页,公共表格不重置它的页码与每页数量。 diff --git a/Admin高密度界面规范.md b/Admin高密度界面规范.md index 0cf04e8..c4b7e15 100644 --- a/Admin高密度界面规范.md +++ b/Admin高密度界面规范.md @@ -186,6 +186,7 @@ | 表格行高、输入高度、操作按钮高度、页签高度 | `--admin-row-height`、`--admin-control-height`、`--admin-action-height`、`--admin-tab-height` | 使用已有公共组件和公共类 | | 常用间距、圆角、普通数据区底色 | `--admin-space-*`、`--admin-radius`、`--admin-surface` 等 | 业务布局引用变量;不可在页面重定义变量默认值 | | 描边按钮外观、悬停/禁用/焦点状态 | `adminDensity.css` 的 `.density-action` | 只选择 `data-tone` 与业务事件 | +| 列表状态/分类页签(国内订单、尾程订单、车辆、供应商、整柜业务、国内/海外货柜工作台、退货库存) | `adminDensity.css` 的 `.density-status-tabs` | 原生按钮使用 `is-active`,Element 页签同时保留 `density-element-tabs`;保留业务分类、图标、数量、查询与切换,不在页面复制页签样式;详情页签继续使用原有详情规则 | | 详情返回导航 | `.density-back` | 使用 `link`,保留返回事件和可访问名称;客户管理按纯文字约定保留返回文字 | | 详情页头与业务摘要 | `.density-detail-header` / `.density-detail-heading` / `.density-detail-title` / `.density-detail-overview` | 与国内订单样板共用排版;页面提供实际业务编号、状态及摘要,不复制标题字号和摘要间距 | | 连续白底独立详情容器 | `DetailPageLayout` 上的 `.density-detail-layout` | 显式接入统一页头分隔线、正文间距与零区块间隙;正文去掉重复面板,业务仅保留列数和长字段跨列 | diff --git a/README.md b/README.md index 63065ef..4aa1d29 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,6 @@ - 新文档按业务域归档,不新增以开发批次编号命名的目录、文件、标题、任务或范围标签。 - 已完成开发阶段的流程手册、规划、进度和验收资料统一放入 `归档/`;后续流程变更只从[头程到尾程当前维护入口](头程到尾程/README.md)进入。 - 当前交付范围始终按端到端全流程理解;业务域目录只用于检索和职责归属,不用于排除上下游流程。 -- 范围、字段或流程冲突时,按“当前对话确认 > 正式契约与确认记录 > 项目指引与代码 > 原型 > 历史记录”判断。 -- 新增或修改业务能力时,同步更新业务域 README、跨端契约、接口、权限、SQL、测试和验收入口。 +- 范围、字段或流程冲突时遵循根 AGENTS.md 的事实优先级;归档确认记录不覆盖当前正式契约。文档角色按当前入口和明确标记判断,不只按文件名判断。 +- 业务事实变化只修改其当前主文档及实际受影响的接口、权限、SQL、代码和测试;业务域 README 与索引仅在入口或职责变化时更新。历史规划、确认和验收记录冻结,不为追随当前规则批量改写。 - 原型中出现的功能不自动成为有效实现;必须由正式契约、代码和验收证据共同确认。 diff --git a/业务快速索引.md b/业务快速索引.md index 62bb0c1..b791114 100644 --- a/业务快速索引.md +++ b/业务快速索引.md @@ -8,12 +8,20 @@ 仓储转运审核、转运驳回:Admin 尾程订单 `apps/admin-web/src/modules/overseas-warehouse/pages/LastMileOrdersView.vue` → `apps/admin-web/src/modules/overseas-warehouse/components/WarehouseTransferReviewDialog.vue`;权限、状态及 API 见该模块 `AGENTS.md` 的“仓储转运审核、通过与驳回”。不要把该入口当作头程订单审单,也不要按“转运”误入排车转派送。 -先从任务中取“终端 + 业务对象 + 动作”,如“海外 PDA + 柜号 + 收货”。下面是检索提示,不替代业务契约;代码路径均从工作区根起算。用短词检索,不拿整句自然语言做精确匹配。 +先从任务中取“终端 + 业务对象 + 动作”,如“海外 PDA + 柜号 + 收货”。优先检索下面列出的组合词,不拿整句自然语言做精确匹配;命中后沿指定模块继续,不把所有含同一宽词的行全部读入。代码路径从工作区根起算,检索提示不替代业务契约。 + +- 审核:订单审核 / 测量审核 / 仓储转运审核,分别进入 Order / Firstleg / Admin 海外仓模块。 +- 库位:海外库位 / 整票库位块,分别进入 Warehouse Overseas / 国内 Warehouse,按任务只选其一。 +- 收货:柜号签收 / 到仓测量,分别进入 Lastleg `ReceivingContainerService` / Firstleg 测量入口。 +- 拖车:订舱级拖车 / 目的港码头拖车,分别进入 Firstleg `TruckAppointmentService` / `TerminalDrayageService`。 +- 托盘:自动生成托盘 / 托盘标签,前者进入 Lastleg `ContainerInboundPlanConversionCoordinator`;后者先区分国内散货、一件代发与海外资源。 + +先在本节定位组合词,再只查命中的一行或模块。仍无法区分且会改变修改范围时,补问终端、对象或操作阶段。 ### 高频任务最小读取集 - 订单审核:根 `AGENTS.md` → `docs/业务快速索引.md` 本节 → `apps/admin-web/src/modules/unified-orders/` → `baiyue-firstleg/order/AGENTS.md`;只有审核门禁跨到履约时才增加 `firstleg/AGENTS.md`。不读海外仓审核或全量权限 SQL。 -- PDA 出库:根 `AGENTS.md` → `apps/pda-overseas-uniapp/AGENTS.md` → `src/pages/dispatch/` 和 `src/api/fulfillment.js` → `lastleg-service/AGENTS.md`;只有网关路径或 Token 失败才增加 `gateway-overseas/AGENTS.md`。不读 Admin 排车配置,除非问题涉及平台转派送资格。 +- PDA 出库:根 `AGENTS.md` → `apps/pda-overseas-uniapp/AGENTS.md` → `src/pages/dispatch/` 和 `src/api/fulfillment.js` → `lastleg-service/AGENTS.md`;只有网关路径或 Token 失败才增加 `gateway/AGENTS.md`。不读 Admin 排车配置,除非问题涉及平台转派送资格。 - 客户账单:根 `AGENTS.md` → Client `apps/client-web/AGENTS.md` → `src/modules/finance/` → `baiyue-firstleg/finance/AGENTS.md`;平台账单才切换 Admin Finance。不要因“账单”自动加载柜费分摊或海外费用契约。 - 退货、异常、拖车:先用终端、阶段和动作分流;无法确定时只读取本节对应行,不全文加载海外仓 README 或 Lastleg 全部业务索引。 @@ -43,7 +51,7 @@ | 拖车、派车、提柜、还柜 | 国内订舱拖车与目的港码头车队是不同业务;海外配送排车另属 Lastleg | 国内 `apps/admin-web/src/modules/trucking/`;目的港 `apps/admin-web/src/modules/container-loading/api/terminalDrayages.ts`;配送查“海外出库、排车” | | 报关资料、退税资料、完成文件 | 平台整柜操作与客户订单上传先按终端区分 | Admin `apps/admin-web/src/modules/container-loading/components/ContainerCustomsPanel.vue`;Client `apps/client-web/src/modules/first-leg/components/CustomsDocumentsDialog.vue` | | 退货、退货预报、退货换标、退货签收、退货合箱 | 客户退货预报及签收库存,区别于派送异常退回 | Client `apps/client-web/src/modules/overseas-warehouse/views/ReturnOrdersView.vue`;Admin `apps/admin-web/src/modules/overseas-warehouse/pages/ReturnInventoryManagementView.vue`;PDA `apps/pda-overseas-uniapp/AGENTS.md`;Lastleg `returnreceipt/`,见下文“退货预报、签收、库存与合箱” | -| PDA 出库、PDA 发车、扫码出库、整托出库 | 海外 PDA 执行排车和出库,不是平台排车配置或客户派送查询 | 海外 PDA `apps/pda-overseas-uniapp/src/pages/dispatch/dispatch.vue`、`src/api/fulfillment.js`;Backend `baiyue-firstleg/lastleg-service/dispatch/pda/`;统一经 `gateway-overseas/` | +| PDA 出库、PDA 发车、扫码出库、整托出库 | 海外 PDA 执行排车和出库,不是平台排车配置或客户派送查询 | 海外 PDA `apps/pda-overseas-uniapp/src/pages/dispatch/dispatch.vue`、`src/api/fulfillment.js`;Backend `baiyue-firstleg/lastleg-service/dispatch/pda/`;统一经 `gateway/` | | 异常、退回、退仓、回访 | 派送异常退回与库存退货业务不可混用 | 派送查 `apps/admin-web/src/modules/overseas-warehouse/pages/ExceptionOrdersView.vue`;退货预报/库存查 Lastleg `returnreceipt/` | ## 定位步骤与反馈 @@ -63,7 +71,7 @@ | 业务 | 范围依据 | 首个代码入口 | |---|---|---| -| 登录认证 | `docs/订单与客户/README.md` | Admin `modules/auth/`、`core/auth/`;Client `modules/auth/`;Backend `auth/`、`iam/`。海外 Token 不携带角色或权限集,Admin/Client/海外 PDA 从 Auth 登录与刷新响应的顶层授权快照读取,海外 Gateway 再按 IAM 安全投影校验 | +| 登录认证 | `docs/订单与客户/README.md` | Admin `modules/auth/`、`core/auth/`;Client `modules/auth/`;Backend `auth/`、`iam/`。统一 Token 不携带角色或权限集;各端读取 Auth 登录/刷新响应的顶层授权快照用于展示,Gateway 与业务服务通过统一会话及 Auth 权威校验执行授权,不再依赖 Lastleg 安全投影 | | 客户与企业 | `docs/订单与客户/README.md`、`docs/订单与客户/订单与客户头程订单闭环设计.md` | Admin `modules/customers/`;Client `modules/tenant-management/`、`modules/account/`;Backend `iam/`、`auth/`、`file/`。公司联系电话/邮箱是企业资料,不作为成员登录标识且不要求跨企业唯一;成员登录手机号归账号链路,修改时同步 Auth 并撤销该账号会话。审核必填资质仅营业执照与统一社会信用代码;法人身份证选填,可在已有营业执照后单独补传或替换,营业执照仍须与统一社会信用代码整包提交;默认尺寸配置由 IAM 持久任务异步调用 `firstleg/`,未就绪不得审核通过 | | 供应商与国内整柜 | `docs/国内货柜履约/国内货柜履约需求确认表.md` | Admin `modules/suppliers/`、`modules/domestic-containers/`;Backend `warehouse/`;OpenAPI `supplier-v1.yaml`、`domestic-container-v1.yaml` | | 平台收货仓 | `docs/订单与客户/订单与客户头程订单闭环设计.md` | Admin `modules/warehouses/`;Client `modules/first-leg/`;Backend `warehouse/` | @@ -75,13 +83,13 @@ | 平台/企业 RBAC | 订单与客户契约;公共语义见 `docs/平台客户层级与权限契约.md` | Admin `modules/iam/`、`core/access/`;Client `modules/tenant-management/`;Backend `iam/`、`auth/` | | 消息中心与站内通知 | 触发业务的阶段/专题契约,收件箱以 IAM OpenAPI 为准 | Admin/Client `modules/notifications/`;Backend `iam/.../notification/`;生产者留在所属服务 | | PDA 拣货与柜级装柜证据 | 国内 PDA README、拣货原型、国内货柜履约需求确认 | PDA `pages/picking/`、`stores/picking.js`、`api/pda-loading.js`;证据以 `taskId + warehouseId` 进入任务专用 API,业务所有权固定真实 `containerBookingId`,不得按入仓单或客户拆分;上传以幂等键绑定包含文件内容的请求哈希,完全重放直接返回已有结果且不得重复上传 File;Backend `firstleg/`、`warehouse/`、`file/` | -| 到仓测量、测量库位、箱规策略与头程计费 | `docs/入库测量与计费/README.md`、测量计费入库主流程 | Admin 测量 `modules/inbounds/measurement/InboundMeasurementDialog.vue`、`InboundMeasurementPanel.vue`,称重 `modules/inbounds/weight/components/WeightOcrPanel.vue`,以及 `warehouse-resources/`、`fba-pricing/`、`dimension-config/`、`fee-items/`;Backend `firstleg/` 的 `InboundMeasurementService`、`MeasurementLocationOccupationService`、`MeasurementSubmissionService`、`CustomerDimensionConfigService`、`CustomerDimensionWeightingService`、`FbaPricingService`,并联查 `warehouse/`、`file/`、`integration-service/`。整票库位按确认图片数与有效体积容量需求的较大值尽力预留,扩容只追加且删除图片保留空槽;库位指引失败不阻断称重确认或测量提交。客户固定四档箱规可选择 `ADD/MULTIPLY`,计价和费用确认以服务端及当前实际测量明细为准 | +| 到仓测量、测量库位、箱规策略与头程计费 | `docs/入库测量与计费/README.md`;规则查 `baiyue-firstleg/firstleg/AGENTS.md` 对应入口 | Admin `modules/inbounds/measurement/InboundMeasurementDialog.vue`、`InboundMeasurementPanel.vue`,称重 `modules/inbounds/weight/components/WeightOcrPanel.vue`;Backend `firstleg/` 的 `InboundMeasurementService`、`MeasurementLocationOccupationService`、`FbaPricingService`。库位归 `warehouse/`,图片归 `file/`,OCR 归 `integration-service/`;只按实际调用增加服务指引 | | 客户专属报价、柜级阶梯运费与费用调整 | 当前 Firstleg 计价契约、`docs/入库测量与计费/README.md` | Admin `modules/fba-pricing/carrier-rates/`、`modules/inbounds/fee/`、`modules/unified-orders/components/InboundFeeDetailManager.vue`;Backend `firstleg/` 的 `PlatformPriceBookService`、`ActivePriceBookEstimator`、`FbaPricingService`、`ContainerTierAmountAllocator`、`InboundFeeDetailService` 与 `fba-pricing-v1.yaml`。公共报价使用 `customerId=0`,客户专属报价按客户独立版本化并优先于公共 ACTIVE 版本;柜级区域重量阶梯只聚合同柜同客户中费用快照同为 `REGION_WEIGHT_TIER` 的成员并守恒分摊,混柜的固定仓价等其他模型不参与阶梯且保持原费用,装柜成员变化只重算未锁定的区域阶梯费用。人工调整计费量限系统基准上下 10% 且必须带版本、原因和二次确认;`PRIVATE_LAST_MILE_DELIVERY` 只允许私人目的仓;一件代发在预装确认前完成计价,`WAIT_PALLETIZE` 试算不得回退托盘化状态 | | 箱唛、箱码与单箱测量 | `docs/入库测量与计费/入库测量与计费需求优化版-v2-测量计费入库主流程.md`、`docs/墨家设备测量上传接口说明-V3.md` | Admin `modules/inbounds/measurement/`;Client `modules/first-leg/`;Backend 按 `firstleg/AGENTS.md` 的箱唛与测量入口 | -| 称重确认、整票库位块与部分拣货资源结算 | 入库测量与计费主流程、国内货柜履约 PDA 契约 | Admin `modules/inbounds/weight/components/WeightOcrPanel.vue`;Backend `firstleg/` 的 `MeasurementLocationOccupationService`、`InboundMeasurementService`、`MeasurementSubmissionService` 与 `warehouse/` 的 `LocationBlockService`。测量提交审核前至少上传并确认一张称重图片,单箱也不得免称重;称重确认尽力建立整票块,提交时再次补齐,库位指引失败不阻断称重确认或测量提交。容量按确认图片数与有效体积折算的较大值,最新测量批次内实测/冻结申报体积取有效较大值;删除图片只清空绑定不释放槽位。部分拣货有余量时整段转移给子单,整票拣完才一次性释放全部普通位与共享 A0,资源身份以 `reservationId` 为准 | +| 称重确认、整票库位块与部分拣货资源结算 | `baiyue-firstleg/firstleg/AGENTS.md` 的称重入口、`baiyue-firstleg/warehouse/AGENTS.md` 的 A0/资源结算规则 | Admin `modules/inbounds/weight/components/WeightOcrPanel.vue`;Backend Firstleg `MeasurementLocationOccupationService`、`InboundMeasurementService`、`MeasurementSubmissionService` → Warehouse `LocationBlockService`。国内整票资源结算按 `reservationId` 定位;称重、槽位容量和部分拣货的详细门禁留在所属服务指引 | | 入库扣货、解除与凭证 | 入库测量与计费、国内货柜履约契约 | Admin `modules/unified-orders/pages/UnifiedOrdersView.vue`、`modules/inbounds/core/api.ts`;Backend `firstleg/` 的 `InboundHoldService`、`InboundHoldGuard`、`InboundHoldEvidenceService`,文件归 `file/` 的 `INBOUND_HOLD_EVIDENCE`。扣货状态必须阻断后续物理履约写入;已发生拣货、装柜或出仓时禁止手工扣货/解除,命令携带版本与幂等键,只有进入不可变历史的凭证可下载 | | 财务管理与柜级公共费用分摊 | `docs/财务管理/` 产品确认、五页验收契约、Firstleg-Finance 跨服务契约 | Admin `modules/finance/`、`modules/loading-lists/components/ContainerFeesPanel.vue`;Client `modules/finance/views/FinanceBillsView.vue`,账单行按 `inboundCode` 复用头程入仓关系详情;Backend `finance/`、`firstleg/`,契约 `container-fees-v1.yaml`;导出与凭证归 `file/`。跨客户公共柜费按柜内真实客户与订单归属原子建组,金额合计等于柜费总额,审核、驳回、调整和作废整组处理,单行入口不得破坏组一致性 | -| 客户资金账户、充值、授信与业务扣费 | `docs/财务管理/README.md`、跨区域认证与服务通信契约 | Admin `modules/finance/pages/FinanceCustomerAccountsView.vue`;Client `modules/finance/views/FinanceAccountView.vue`;Backend `finance/` 的 `FinanceWalletService` 与三类 Wallet Controller。充值申请经 File 保存凭证,平台审核或手工充扣;余额、授信、冻结、结算和释放以 Finance 主账为准。海外业务经 `WALLET_COMMAND_REQUESTED/COMPLETED` Outbox/Event Bridge 往返,不跨区同步调用钱包 | +| 客户资金账户、充值、授信与业务扣费 | `docs/财务管理/README.md`、统一认证与服务通信契约 | Admin `modules/finance/pages/FinanceCustomerAccountsView.vue`;Client `modules/finance/views/FinanceAccountView.vue`;Backend `finance/` 的 `FinanceWalletService` 与三类 Wallet Controller。充值申请经 File 保存凭证,平台审核或手工充扣;余额、授信、冻结、结算和释放以 Finance 主账为准。海外业务经 `WALLET_COMMAND_REQUESTED/COMPLETED` Outbox 直接投递往返,不跨区同步调用钱包 | | 订单编排、分柜、同柜不可拆组与柜次 | `docs/国内货柜履约/README.md`、`docs/国内货柜履约/国内货柜履约需求确认表.md`、`docs/统一订单主状态与操作契约.md` | Admin `modules/unified-orders/api/coLoadGroups.ts`、`modules/unified-orders/`、`container-loading/`;Client `modules/first-leg/`;Backend `firstleg/loading/coload/`、`firstleg/split/`、`firstleg/loading/`、`order/`;同柜组按订单创建,由服务端冻结每票全部可用入仓片段,仅要求同国内仓、同渠道,允许跨客户及不同目的仓港 | | 全局智能排柜、预装与真实集装箱号后补 | 同上 | Admin `modules/container-loading/components/SmartLoadingDialog.vue` 内嵌 `pages/GlobalSmartLoadingView.vue`,柜次页 `SmartLoadingWorkbenchView.vue`,预装详情 `loading-lists/pages/PreloadPlanDetailView.vue`;PDA `pages/picking/`;Backend `firstleg/` 的 `PlatformSmartLoadingController`、`SmartLoadingService`、`PendingReviewOrderClient`、`loading/`,待审核事实来自 Order `PendingReviewOrderQueryService`。全局候选覆盖 `PENDING_REVIEW/WAIT_MEASURE/WAIT_SPLIT/LOADING`,状态只用于筛选展示,能否加入以服务端 `canAssign` 为准;待审核/待测量可提前占位,但确认预装或启动 PDA 前必须进入 `WAIT_SPLIT`。暂估明细的 `totalPackageCount/remainingPackageCount` 在测量前取 Order 原始申报箱数,测量完成后取最新已审核测量箱数,读取补充失败只回退当前已分配数,写入调整仍重新校验权威数量。同柜不可拆组仅在全员命中状态集合时作为一个分页与分配单元;人工加入允许跨渠道,智能推荐仍按柜次渠道。计划可一次性移除全部未拣明细,但任一成员已拣的同柜组必须整组保留。创建柜次时原子生成唯一预装计划,加入入仓码即建立关联;真实集装箱号不阻塞订舱关联,但确认预装和创建 PDA 任务前必须补齐。历史缺号任务允许在预装详情首次补录,保存后恢复 PDA 可进入状态 | | 客户入库结果与头程费用确认 | 入库测量与计费主流程、当前 Firstleg 契约 | Client `modules/first-leg/components/InboundBillingPanel.vue`、`api/inboundBilling.ts`;Backend `firstleg/` 的 `MerchantInboundBillingController`、`MerchantInboundBillingService`、`FbaPricingService` 与 `firstleg-v1.yaml`。客户仅能确认本客户 `SENT` 的最新费用版本,提交 `expectedFeeVersion` 与幂等键;确认记录当前成员和时间并永久锁定该版本,平台不得再修改 | @@ -92,13 +100,13 @@ | 客户统计与平台日志 | 当前统计/审计契约 | Admin `modules/customers/`、`modules/audit/`;Backend `firstleg/customerstatistics/`、`audit-service/` | | 客户工作台账户与设置 | 订单与客户契约 | Client `modules/account/`、`system/`、`tenant-management/`;Backend `iam/`、`auth/` | | 企业订单与跨境业务 | 订单与客户、国内货柜履约契约 | Client `modules/order-management/`、`cross-border/`;Backend `order/`、`firstleg/`、`integration-service/` | -| 海外接柜、入库与库内库存 | `docs/海外仓业务/README.md` | Admin 按 `apps/admin-web/AGENTS.md` 海外模块入口;海外入口 `gateway-overseas/`;尾程/入仓/换标/库存 `lastleg-service/`;仓库主档归国内 `warehouse/`,库位/托盘/锁归 `warehouse-overseas-service/` 并只引用国内 warehouseId;与排车、出库、派送共同组成海外仓全流程 | +| 海外接柜、入库与库内库存 | `docs/海外仓业务/README.md` | Admin 按 `apps/admin-web/AGENTS.md` 海外模块入口;海外入口 `gateway/`;尾程/入仓/换标/库存 `lastleg-service/`;仓库主档归国内 `warehouse/`,库位/托盘/锁归 `warehouse-overseas-service/` 并只引用国内 warehouseId;与排车、出库、派送共同组成海外仓全流程 | | 尾程订单控制与柜级入仓计划转换 | `docs/海外仓业务/README.md` | Admin `modules/overseas-warehouse/pages/LastMileOrdersView.vue`、`LastMileOrderDetailView.vue`、`api/lastMileOrders.ts`;Backend `lastleg-service/` 的 `LastlegOrderController`、`LastlegOrderCommandService`、`InboundPlanService`、`ContainerInboundPlanConversionCoordinator`,资源归 `warehouse-overseas-service/` 的 `WarehousePalletBatchService`。`orders/container-summaries` 按 `sourceContainerBookingId` 跨客户聚合并分页返回全部稳定来源柜,已完成计划转换的柜仍保留用于接柜仓查询与修改;生成动作只消费 `allPlansReady/pendingPlanCount/resourcePendingPlanCount`,详情不受列表分页截断。确认前从 `/inbound-plans/container-preview` 读取服务端分组、托数、阻断项与 `snapshotVersion/snapshotHash`;`convert-container` 锁柜重算后先批量预留真实托盘,再本地原子生成剩余独立计划并确认资源,失败仅补偿未确认资源,同柜重放不得产生第二批资源。单票手工计划保存后,全柜计划齐全且预览就绪时自动生成并绑定托盘资源,一票柜立即触发;`resourcePendingPlanCount` 表示自动生成异常后的重试入口,资源未齐不得进入 PDA 接柜。自动入口见 Lastleg `ContainerInboundPlanConversionCoordinator.convertManualAndAutoMaterialize`。单票可维护完整入库计划、暂扣/解除及八行人工节点快照;命令提交订单版本与幂等键,新增暂扣只允许完成入库后执行并仅阻断该票后续排车/出库,不阻断入库计划或入库作业;人工节点首次保存后固定 `MANUAL` 来源且不得回退柜级节点 | -| 海外仓 PDA | `docs/海外仓业务/README.md` | Overseas PDA 入仓 `api/inbound.js`、`api/receiving-adapter.js`、`pages/operation/`,库内/换标按工作台入口,排车与出库 `pages/dispatch/`、`pages/outbound/`;Backend `lastleg-service/inboundplan/pda/`、`pda/`、`dispatch/pda/`、`delivery/`;统一经 `gateway-overseas/`。接柜候选、会话、照片和整柜完成按 `sourceContainerBookingId + containerNo` 聚合且不绑定客户,允许同柜多客户;各入仓码的计划、任务、SKU、托盘与库存仍按自身客户隔离。多计划同柜按服务端返回的 `assigned/mergeAllowed/urgent` 展示,合托只是现场可选提示;扫码实收确认计划生成时预留的真实托盘与库位,不重新分配资源;派送与回访由 Admin/Client 承载 | -| 海外采购、本土卡车与散板 | `docs/海外仓业务/README.md` | Admin `modules/overseas-business/`;Client `modules/cross-border/`;Backend `lastleg-service/` 的 `procurement/`、`trucking/`、`looseboard/`;统一经 `gateway-overseas/` | +| 海外仓 PDA | `apps/pda-overseas-uniapp/AGENTS.md`;执行规则查 `baiyue-firstleg/lastleg-service/AGENTS.md`,跨模块流程才查海外仓 README | 入仓 `src/pages/operation/`、`src/api/inbound.js`;排车与出库 `src/pages/dispatch/`、`src/pages/outbound/`、`src/api/fulfillment.js`。Backend `lastleg-service/inboundplan/pda/`、`dispatch/pda/`、`delivery/`;统一经 `gateway/`。柜级收货与单票客户隔离按 Lastleg“PDA 入仓”规则核对 | +| 海外采购、本土卡车与散板 | `docs/海外仓业务/README.md` | Admin `modules/overseas-business/`;Client `modules/cross-border/`;Backend `lastleg-service/` 的 `procurement/`、`trucking/`、`looseboard/`;统一经 `gateway/` | | 海外仓库与通用资料 | `docs/海外仓业务/README.md` | 全部仓库主档进入 Admin `modules/warehouses/` 与国内 `warehouse/`;海外库位/托盘/锁进入 `warehouse-overseas-service/` 并引用国内 warehouseId;报价、汇率、车辆按海外服务实际契约 | | 国内出仓后船节点 | `docs/海外仓业务/README.md` | Admin `modules/port-schedules/`、`ocean-bookings/`、货柜详情;Backend `firstleg/portschedule/`、`integration-service/`;从确认国内出仓查询至目的港到达、提柜和还柜。节点按 `containerBookingId` 柜级聚合,跨区事件使用 `tenantId=0` 平台技术范围,不携带或校验客户 | -| 海外出库、排车、派送、异常与回访 | 当前海外履约契约 | Admin `modules/overseas-warehouse/pages/OutboundsView.vue`、`DeliveryOrdersView.vue`、`ExceptionOrdersView.vue`、`CustomerVisitsView.vue`;Backend `lastleg-service/dispatch/`、`delivery/`、`dropship/`、`exceptionorder/`、`customervisit/`;统一经 `gateway-overseas/`。异常单按 `PENDING → PROCESSING → COMPLETED` 流转,处理完成必须引用归属为 `OVERSEAS_EXCEPTION_EVIDENCE` 的证据;派送退回只从原出库拣货事实选择可退明细,退回海外仓时先把实收恢复到指定真实托盘/库位,再原子完成异常单并将派送置为 `RETURNED` | -| 海外业务费用来源与客户财务 | 当前实现查财务契约与跨区域通信契约;阶段 0A—0E 开发再读 `docs/财务管理/海外仓费用统一接入阶段0技术契约.md` | 当前 V1 由 `lastleg-service/financefee/` 校验海外入仓、采购、美国卡车、本土散板和海外仓服务费,通过完整快照、Event Bridge 和 Finance 内部入口入池;阶段 0 目标改为收费身份/候选版本、Finance 接受或拒绝结果事件及版本化资金计划。必须沿代码确认落地范围,不把技术契约当成已实现状态;Client 仍只读取获准客户财务 | +| 海外出库、排车、派送、异常与回访 | 当前海外履约契约 | Admin `modules/overseas-warehouse/pages/OutboundsView.vue`、`DeliveryOrdersView.vue`、`ExceptionOrdersView.vue`、`CustomerVisitsView.vue`;Backend `lastleg-service/dispatch/`、`delivery/`、`dropship/`、`exceptionorder/`、`customervisit/`;统一经 `gateway/`。异常单按 `PENDING → PROCESSING → COMPLETED` 流转,处理完成必须引用归属为 `OVERSEAS_EXCEPTION_EVIDENCE` 的证据;派送退回只从原出库拣货事实选择可退明细,退回海外仓时先把实收恢复到指定真实托盘/库位,再原子完成异常单并将派送置为 `RETURNED` | +| 海外业务费用来源与客户财务 | 当前实现查财务契约与统一认证与服务通信契约;阶段 0A—0E 开发再读 `docs/财务管理/海外仓费用统一接入阶段0技术契约.md` | 当前 V1 由 `lastleg-service/financefee/` 校验海外入仓、采购、美国卡车、本土散板和海外仓服务费,通过完整快照和 Outbox 直接投递 Finance 内部入口入池;阶段 0 目标改为收费身份/候选版本、Finance 接受或拒绝结果事件及版本化资金计划。必须沿代码确认落地范围,不把技术契约当成已实现状态;Client 仍只读取获准客户财务 | 散货托盘码生成、打印与跨区传递:Admin `modules/loading-lists/components/PalletLabelPrintDialog.vue`;Firstleg `LoadingPalletLabelService`、`LoadingCompletedOutboxService`;Lastleg `LastlegSourcePalletMapper`、`InboundPlanService`。从各项目最近指引继续定位;散货 FBA 标签与一件代发实装托盘分别取各自冻结事实。 diff --git a/头程到尾程/头程至实际开船节点冻结矩阵与缺口清单.md b/头程到尾程/头程至实际开船节点冻结矩阵与缺口清单.md index 182b55b..34a881f 100644 --- a/头程到尾程/头程至实际开船节点冻结矩阵与缺口清单.md +++ b/头程到尾程/头程至实际开船节点冻结矩阵与缺口清单.md @@ -46,11 +46,14 @@ - 新尾程 r3 于 14:29(上海时间)结束:5,830 项检查,5,828 通过、2 失败,99 次模块执行、75 个独立模块、3,536 次请求、0 跳过模块。正式 PDA 冻结的全部来源位置、原始余额、汇总余额和 SHIP 流水扣减及重放检查通过;r2 的代表入仓码过滤漏取同托其他来源问题已在脚本纠正,保留原失败报告。两项失败均为平台/客户统一订单期望 `COMPLETED`;实际只读诊断确认该根订单原有 4 箱,仅装运签收 1 箱,另有 3 箱真实余量子单未履约。根保持 `PROCESSING`,自身 `OVERSEAS_DELIVERED` 事实只有一次,统一展示 `DELIVERED` 符合未全部完成的门禁;需纠正旧样本预期,并另验两片全部实际签收。证据:`reports/fulfillment-stock-receipt-current-20260930-r3.json`、`reports/root-completion-r3-diagnostic-20260930.json`。 - 真实 Firstleg → Lastleg 装柜完成事件故障演练已通过:同一事件 12 次真实 ACK 丢失进入 DEAD,受保护接口重试原事件后得到 DUPLICATE 并最终 PUBLISHED,42 项检查全部通过,业务单据/消费事实零新增,生产服务原配置和健康状态已恢复、故障代理已停止。证据:`reports/event-ack-fault-current-20260930.json`。这不外推为反向卸柜/签收事件已取得同事件幂等证据。 - F40 修复已实现根自身签收事实与全部有效子单完成门禁、最后余量取消后的聚合、事务内历史/事件及 Firstleg 摘要可靠同步;92 项本地测试全部通过,含真实 SQL、事务回滚和并发,API 路由门禁 5 项通过。`041a27c3` 已经 Order #173、Firstleg #463 部署,容器健康;服务测试分别为 317 项零失败/零跳过和 1,500 项零失败/9 跳过。真实两箱、两柜根/余量子单的根先签和子先签专项已实现、本地合同通过,尚待实际 HTTP 和完成 Outbox 唯一发布验收。六阶段 77 项完成条件复核仍有 19 项证据不足,客户页面实际下载也未通过;这些不能按总断言数量折算完成率。 +- 后续补验发现人工完成接口仍能绕过余量完成门禁,以及真实余量子单再次装柜时托盘标签数量为 0。两项已分别由 `71202bce`、`1a7e4800` 修复,统一提交 `1a7e4800` 经 Order #174、Firstleg #464 部署且健康;服务测试分别为 318 项零失败/零跳过、1,517 项零失败/9 跳过。原失败余量子柜重新准备标签及全部/指定仓 PDF 打印均通过;旧人工完成入口返回 `A0404`,原未完成根单的状态、版本、历史及完成事件零变化,8 项真实检查全部通过。证据:`reports/node-closure-original-regression-20260930-r1.json`。两片全部签收和合法取消末票余量仍待实际验收。 +- 尾程补充只读取证已核对 123 项事实、11 项负向自检:8 个来源各唯一关联尾程/入仓单;标准 6 票在途共 12 箱,全部 8 票的 13 条入库流水及 13 条收货记录共 20 箱且完整键匹配;每票各有一次 `INBOUND_COMPLETED`;5 柜首次收货时间及完成结果一致,5 组卸柜 Outbox/Inbox 各一次、事件 ID/摘要/负载一致且均已发布/处理,国内还空预估精确为卸柜后 72 小时。原 r1 错误事件字面量的查询不作为事件结论,实际事件证据取修正后的 r2。核验结果为 `reports/tail-node-readonly-evidence-20260930-r1-verified.json`;这是当前/不可变事实,不能替代收货重放前后完整库存零漂移,不能换算为 77 项完成条件全部通过。 +- 最新逐条审计 `reports/fba-stage-completion-audit-current-20260930-r2.json` 已按现行六阶段正文重新核对 77 条完成条件,65 条具备本轮限定范围证据,12 条仍待闭环;这不表示 65 条已完成全部产品/页面验收,不换算总体完成率。待补条件为 C05 订单类型/申报组合、C21 同退税柜改船前后报关摘要稳定、C36/C37 共托逐箱权属与冻结快照、C39 不提前创建国内库存、C49 收货重放完整库存前后、C52 排车线路目的地集合、C60 反向完成同事件去重、C62 根/余量全部签收与合法取消完成回写、C63 客户最终状态及页面下载、C66 独立船异常、C77 重试资源锁数量。已由用户确认拆为 4 个独立任务,总控在本对话汇总;稳定职责与任务 ID 见 `docs/独立任务协作登记.md`。 - 阶段三、四、六文档已统一客户文件确认链、原柜人工改船、统一 Gateway 和事件直接投递。船期任务可在出仓确认后创建并查询进港事实,只有实际开航才推进海运节点。全部业务页面仍无逐节点完整操作证据。 本轮证据位于后端仓库:`reports/firstleg-node-convergence-deploy-20260930.json`、`reports/firstleg-node-convergence-local-20260930.log`、`reports/admin-full-current-20260930-r1.json`、`reports/fba-stage-coverage-audit-20260930.json`、`reports/customs-open-exception-deploy-20260930.json`、`reports/customs-auto-dispatch-atomic-deploy-20260930.json`、`reports/customs-multi-customer-current-20260930-r4.json`、`reports/lastleg-return-receipts-deploy-20260930.json`、`reports/lastleg-return-sku-source-deploy-20260930.json`、`reports/dispatch-return-same-exception-current-20260930-r2.json`、`reports/client-receipt-download-deploy-20260930.json`。静态审查、局部修复通过和单票完成均不能替代全流程验收。 -最新专项证据:`reports/customs-multi-customer-current-20260930-r5.json`、`reports/carrier-platform-scope-deploy-20260930.json`、`reports/lastleg-canonical-return-deploy-20260930.json`、`reports/dispatch-return-current-reconciliation-20260930-r2.json`、`reports/fulfillment-stock-receipt-current-20260930-r1.json`、`reports/fulfillment-stock-receipt-current-20260930-r2.json`、`reports/client-order-navigation-deploy-20260930-r2.json`、`reports/root-completion-local-20260930-r2.json`。本地完成门禁修复提交为 `13028d8a`,尚未部署。 +最新专项证据:`reports/customs-multi-customer-current-20260930-r5.json`、`reports/carrier-platform-scope-deploy-20260930.json`、`reports/lastleg-canonical-return-deploy-20260930.json`、`reports/dispatch-return-current-reconciliation-20260930-r2.json`、`reports/fulfillment-stock-receipt-current-20260930-r3.json`、`reports/client-order-navigation-deploy-20260930-r2.json`、`reports/root-completion-local-20260930-r2.json`、`reports/node-closure-order-deploy-20260930.json`、`reports/node-closure-firstleg-deploy-20260930.json`、`reports/node-closure-original-regression-20260930-r1.json`、`reports/tail-node-readonly-evidence-20260930-r1-verified.json`。完成门禁和后续修复已部署;剩余实际验收边界见上文。 ### 2026-09-29 对应版本历史证据 diff --git a/头程到尾程分阶段流程/阶段六-海外排车出库派送与回写.md b/头程到尾程分阶段流程/阶段六-海外排车出库派送与回写.md index 3cb073b..58ee3d0 100644 --- a/头程到尾程分阶段流程/阶段六-海外排车出库派送与回写.md +++ b/头程到尾程分阶段流程/阶段六-海外排车出库派送与回写.md @@ -229,6 +229,8 @@ Firstleg 检查同一来源 Order 的全部有效入库单。只有全部都为 Order 在同一事务内写完成状态、历史和完成 Outbox,经内部接口可靠同步 Firstleg 订单状态摘要。来源单与根的状态分别返回,根尚未完成时不得把根摘要提前标成完成。 +平台不提供人工完成订单接口。普通订单状态操作不得直接设置 `COMPLETED`,完成状态只能由真实签收回写及符合上述门禁的取消后聚合产生,不能绕过仍有效的余量子单。 + 部分装载形成的余量子单、另一柜或另一目的仓尚未完成时,Order 不能提前完成。重复事件不得重复推进、重复写历史或重复生成费用。 ## 11. 状态和数据流 diff --git a/平台客户层级与权限契约.md b/平台客户层级与权限契约.md index 944396d..5050989 100644 --- a/平台客户层级与权限契约.md +++ b/平台客户层级与权限契约.md @@ -14,6 +14,12 @@ - 当前尚未上线;同一资源已有 `*:list` 时,不保留或新增独立 `*:view` 兼容分支。前端不得使用 `permissionAnyOf` 接受旧 `view`,后端不得使用 `hasAnyAuthority(list, view)`,初始化 SQL 应停用或删除旧 `view` 资源及其角色关联。 - 供应商固定使用 `platform:supplier:list` 作为菜单、列表和详情唯一只读权限;`platform:supplier:view` 必须停用或移除,不得在导航、路由、页面、Controller、OpenAPI 或 SQL 中恢复兼容。 +### Admin 菜单结构与显示 + +- 一级、二级菜单的名称、分组和顺序以当前确认原型为准,唯一代码入口为 `apps/admin-web/src/core/navigation/adminNavigation.ts`。当前已实现的一级结构为首页数据看板、客户管理、国内头程、货柜管理、海外尾程、车辆管理、海外业务、客户服务、财务管理、通用、系统管理;二级菜单统一在该入口维护,实际显示继续由权限过滤。 +- 已实现菜单继续使用正式路由及服务端权限,不因改名、移动或仅调整菜单结构改变接口、状态和操作资格。当前原型未展示的既有入口通过 `hidden` 退出侧栏,正式路由和权限仍按现行合同管理;角色权限设置仍保留这些正式页面及操作的可分配权限。 +- 尚无正式页面的菜单不显示,不保留禁用占位或空分组,不接入原型假数据、虚构权限码或新增业务接口。后续功能实现时再核对正式页面、权限与服务端合同。 + ## 跨层同步 - 菜单结构、路由权限、页面按钮、Controller `@PreAuthorize`、OpenAPI 权限说明及 IAM 初始化/统一增量 SQL 必须同步核对,不能以局部测试通过替代跨层一致性。 diff --git a/独立任务协作登记.md b/独立任务协作登记.md index 330c479..25ec862 100644 --- a/独立任务协作登记.md +++ b/独立任务协作登记.md @@ -1,7 +1,28 @@ # 测试环境独立任务协作登记 -已按用户要求清空全部任务登记与调度规则(2026-09-09)。当前无登记任务。 +2026-09-09 的旧登记保持作废。下列任务根据用户 2026-09-30 的明确请求重新创建:用户要求“使用多个独立任务处理(不是子智能体)”,并确认“按4个创建,你直接负责汇总”。不根据旧台账恢复或派工。 -任务由用户手动创建、处理和归档,不根据旧登记、历史消息或历史台账自动派工、恢复任务或回传进度。 +## 所属总控与项目 -本文件仅保留空登记说明,避免已有文档链接失效。历史需求与验收证据保留在《测试任务盘点与需求台账》,不作为当前调度或授权依据。 +- 总控:`退税报关`,`task_id=01a0d0da-130f-7d43-97b5-9c76abc1b5f1`,host `local`。 +- 项目:测试环境,`projectId=c64729ff-6710-43c6-8ef2-d84e9666cc1e`。 +- 唯一工作目录:`C:/Users/BY-OY/Desktop/code/chongchong-global`。不操作开发或生产环境,不创建分支、worktree、项目副本或内部子代理。 +- 目标:按当前正式文档完成 F01–F40 逐节点验收。实现、服务测试、部署、真实 HTTP、页面验证分别记录,不能用局部绿灯代替全流程完成。 + +## 稳定职责与文件归属 + +| task_id | 独立任务 | 稳定职责及写入边界 | +|---|---|---| +| `01a0f14c-9262-7b43-990a-0e3beddcdd8a` | 全流程节点验收|头程与海运 F01–F24 | 头程与海运未闭环完成条件;只改对应头程/海运验收模块及其合同。国内 Firstleg 报关/船节点实现如需修改,先向总控列明精确文件,避开完成回写任务负责的消费者。Order 实现由完成回写任务维护。 | +| `01a0f14c-962f-73c3-b1aa-9df555b91586` | 全流程节点验收|海外收货库存与出库 F25–F37 | 接柜、收货、库存、出库及完整库存重放取证;维护 Phase4 收货脚本/合同、只读收货取证器,以及 Lastleg 后端实现与直接测试。跨到派送的 Lastleg 修改统一由本任务落地,避免后端多人写入。 | +| `01a0f14c-9a66-7f61-bc2b-6ad17a6c940a` | 全流程节点验收|签收余量与完成回写 F38–F40 | 双片真实签收、合法末票余量取消、根订单完成和反向回写;维护 F40/Phase5 专项脚本及合同、Order 完成聚合、Firstleg 完成消费者。涉及 Lastleg 实现的缺陷经总控转交海外库存任务。 | +| `01a0f14c-9e33-7a01-903d-a5febd50774b` | 全流程节点验收|平台客户页面与下载 | Admin/Client 真实页面操作、状态、文件上传下载和隔离;维护直接涉及的前端业务代码/合同。已有排车样式任务的文件不在本任务写入范围,遇重叠由总控协调。 | + +## 调度与环境约束 + +- 用户已授权本轮测试数据库、真实 HTTP、页面及测试环境部署操作;具体环境文件只从用户指定的 `C:/Users/BY-OY/.codex/env/chongchong-global` 定向读取,凭据及 Token 不写入代码、文档或报告。 +- 独立任务先由总控发送精确交接,再开展所属职责。当前文件尚有前序写入者时先只读,收到明确释放后才能写入。禁止覆盖、提交或回滚他人修改。 +- 总控负责共享部署、Jenkins、SQL 执行、Maven 构建串行调度、共享入口/权限/初始化 SQL 和主流程文档汇总。独立任务不得自行部署、执行 SQL 写入、重置或删除数据/文件;需要这些操作时交付具体内容由总控处理。 +- 独立任务可在正式派工指定范围内执行测试 HTTP;每个任务使用独立标记及新造测试客户/订单,只操作自己创建的数据。共享托盘、库位等资源变更须先协调,不能触碰其他任务的原验收样本。 +- 必要派工及汇报仅围绕这四个任务与所属总控开展;独立任务把当前事实、文件、检查结果和阻断交给总控汇总,不扩大到其他聊天或新任务。 +- 不改变统一架构专项及其他已在进行任务的范围。当前事实依据正式维护入口;历史报告仅证明对应版本和范围。