Files

128 lines
12 KiB
Markdown
Raw Permalink Normal View History

2026-10-20 11:33:20 +08:00
# 新增订单页签本地验收
2026-10-19,目标仅为本机 Gateway/MySQL/Nacos。此前已执行的结构补齐见同目录《验收记录.md》。本轮没有通过直接写业务表生成任何物流事实,没有远程部署。
## 本轮修复
复现发现,运行中的 Order 仍为旧版代码:新增 mainStatus 参数返回“统一订单主状态不合法”,status-counts 未生效。当前代码已支持这些状态,因此重新编译并重启 Order、Firstleg、Lastleg,并为本地跨服务调用配置 localhost 地址。
编译通过。当前后台服务为 Order PID 54860(9204)、Firstleg PID 33804(9202)、Lastleg PID 48016(9303)。进程由本轮启动;以后使用 IDE 启动前先核对端口占用,避免双启动。
本轮没有发现需要额外补齐的页签 SQL 表或字段;此前新建的 fl_chargeable_weight_confirmation、ll_delivery_facts_changed 等结构已被实际查询使用。
## 真实 HTTP 读取
通过既有本地平台账号登录统一 Gateway,19 个状态列表、status-counts 均 HTTP 200 / code 200。19 个状态列表 total 均与汇总对应数量一致,包括所有零数据状态。原有页签继续可读取。
| 页签 | 本轮最后核对数量 |
|---|---:|
| 待审核 | 127 |
| 待测量数据 | 195 |
| 测量审核 | 120 |
| 待客户确认计费重 | 125 |
| 已确认数据 | 1 |
| 待上传资料 | 0 |
| 一件代发打托 | 6 |
| 待分柜 | 126 |
| 装柜中 | 9 |
| 装柜完成 | 73 |
| 出口报关 | 0 |
| 已开船/待清关 | 0 |
| 待拆柜 | 0 |
| 待排车 | 0 |
| 出库单 | 0 |
| 派送 | 0 |
| 签收 | 0 |
| 派送完成 | 0 |
| 已完成 | 2 |
证据:tab-smoke.json、tab-count-consistency.json。数量是检查时刻的本地事实,不是固定产品配置。此次未完成全部浏览器页面的人工视觉验收。
## 真实本地业务流转
通过正式 IAM 代登录与 Auth 交换接口取得既有 ACTIVE 测试企业会话;仅确认一条该测试企业既有待确认计费重,没有改费用金额或物流主状态。
测试订单 2085341741574098946、入仓单 2085341749429522434:
1. 通过客户 API 读取当前审核通过的计费重及 fingerprint。
2. 使用当前 fingerprint 与独立幂等键提交确认。
3. 读回 confirmed=true;同一命令重放仍成功。
4. 平台按同入仓码查询:进入 WEIGHT_CONFIRMED,退出 WAIT_WEIGHT_CONFIRM。
5. 全量数量从待确认 126 / 已确认 0,变为待确认 125 / 已确认 1。
证据:weight-flow.json。测试确认历史予以保留。其他客户未被修改。
## 定向回归
Order / Firstleg 共 96 项通过;尾程独立定向编译与两项测试通过,共 98 项。覆盖当前来源的确认、重复命令、旧版本拒绝、重测失效、分柜父子来源、资料客户归属、清关上传、报关、卸柜事实、建出库单、取消回显、实际出库、派送及客户隔离。
尾程为临时 POM 限定 workflow 测试编译及独立测试输出目录,未视作尾程完整测试套件通过。临时 POM 已删除,正常构建配置没有修改。证据:tab-regression.log、lastleg-tab-regression.log。
Mapper 扫描合同通过:10 个持久化模块、396 个 Mapper。
截至 21:08 运行日志未发现 ERROR、BadSqlGrammarException、SQLSyntaxErrorException 或预约同步失败。两业务服务健康检查均为 UP。
## 后半程现场数据边界
本地 fl_carrier_schedule_node_fact 当前为 0 行,fl_customs_container 当前无 DECLARING 记录,因此待排车等后半程页签没有符合前置事实的订单。清关资料已有记录,不能单凭资料存在假设已实际开船。历史尾程来源主要为旧 CN 等标识,不能直接改成当前 FIRSTLEG 或伪造离港记录来证明流转。
后半程已通过隔离库真实 Mapper 和领域定向回归;尚未使用新生成的一票业务单,在本机通过完整装柜交接、实际离港录入、卸柜、出库和签收命令完成整链路真实 HTTP 验收。因此不能将本报告称为全部真实业务流验收通过。
此前保留的历史重复来源唯一索引冲突、历史必填事实为空及其他页面权限问题仍见《验收记录.md》,本轮未扩大账号授权。
## 2026-10-19 页签数量接口修复补验
纠正此前验证缺口:旧的统计接口验收请求额外带了 page/size,未覆盖浏览器实际不带分页的调用。此次修复前,以不带参数的 `/api/platform/v1/orders/status-counts` 成功复现 A0422(page 的 null 无法绑定 long),见 tab-smoke-before.log。旧验收结论不能证明该请求正常。
修复:统计入口使用独立的无分页筛选 DTO,转换为共用查询条件;保留筛选校验、平台权限及客户范围,忽略页签和分页,不改业务数量口径。前端已有“名称(数量)”显示,包括零数量,全部不显示数量,本轮无需改动布局。
验证:Order 定向 69 项、Admin 数量 API/页面定向 27 项全部通过;新增 MVC 用例覆盖不传分页、false 筛选、日期、客户范围、忽略额外分页/状态和非法税务类型。证据:status-count-binding-test.log、status-count-frontend-test.log。
本地仅重启 Order,PID 15788。实际经过 Gateway 的无分页统计请求成功(业务码200),19个状态列表均成功,逐项统计数量与各列表总数一致,见 tab-smoke.json、tab-count-consistency.json。当前待客户确认125、已确认数据1、测量数据审核120,无符合业务事实的状态返回0。Firstleg/Lastleg健康检查正常;Order本次启动日志未发现ERROR或SQL语法错误。
本轮未取得刷新后人工页面截图,未宣称完整视觉验收或后半程真实全链路验收通过。
## 2026-10-19 报关与开船链路口径补充
用户明确:待上传资料为报关资料;出口报关汇总本票资料已上传且装柜完成的订单。实际开船(目前人工节点,后续拉取节点)后进入已开船/待清关,头程上传清关资料后进入待拆柜,持续到实际卸柜完成。
已调整 WorkflowFactMapper 与 WorkflowTabService:出口报关不再仅匹配 DECLARING,也不要求整柜全部客户资料齐全或点击开始报关;按当前独立来源、本客户、本柜的有效报关资料与真实装柜证据汇总。买单票沿用既有无需客户退税资料的业务规则。实际开船后移出报关前序页签,按清关资料事实分类;预计日期不能替代实际离港。资料已上传但尚未实际开船时,不提前进入待拆柜。现有报关资料上传入口按完成装柜后的柜次关联,本轮未扩大到装柜前上传。原报关四态和实际报关命令保持原有规则。
手动及外部船节点均由 CarrierScheduleQueryService.addNode 保存到 fl_carrier_schedule_node_fact,统一按 DEPARTED_ORIGIN_PORT 且 actual_at 非空判断;不增加另一套人工开船标志。
自动回归:Order 69项、Firstleg 28项,共97项通过(customs-tab-flow-test.log)。真实 Mapper + H2 隔离库验证资料上传即进入、删除后回显、其他客户及其他柜资料不能覆盖、装柜未完成或无实拣数量不能进入、报关状态等待/就绪/申报/完成均不替代资料事实,以及买单资料豁免;领域测试覆盖开船、清关上传、实际卸柜退出及独立分柜来源。隔离库测试未写本机业务事实。
本机生效补验:仅重启 Firstleg(PID45432),启动成功,本次日志未见ERROR或SQL语法异常。通过Gateway重新读取无分页数量及19个状态列表,全部成功且数量逐项一致(customs-tab-live.log、customs-tab-consistency.json)。出口报关从0变为12,待上传报关资料0。
只读核对说明:当前满足独立实装关联的来源为BUY_DECLARATION 12条、历史tax_mode空值2条,无TAX_REFUND来源;因此12条是沿用买单免客户退税资料规则,并不表示伪造了12次资料上传。历史空税务模式没有自行补成买单。实际离港节点0条,后半程无数据符合进入条件。本轮没有为填充列表修改业务资料、装柜或船节点事实;真实本机完整开船到签收链路仍未验收。
## 2026-10-20 本地尾程节点与清关资料流转补验
当前显示口径:派送改为“派送中”,签收改为“签收完成”,签收完成仍显示括号数量;移除“派送完成”“已完成”页签,历史状态及接口保留。
修复实际阻塞:
- 当前部分装柜模型为来源单承接实装、REMAINDER 子单承接余量。统一页签不再把这种来源单当作纯父汇总排除;真正由 LOADED 子票承接的旧父汇总仍不重复计票。
- 尾程来源按客户、来源入仓单精确字符串匹配,避免 MySQL 连接默认排序规则冲突和大整数隐式比较;record 参数使用 MyBatis 可读取的 record 访问器。
- 目的港清关资料读取、上传、下载及完成入口接受有效货柜已确认离仓或已有 DEPARTED_ORIGIN_PORT 实际节点;预计节点不放行。保留国内出仓、国外工作台和 DO 原有门禁,未创建虚假的国内出仓确认。
- 本地补齐 Warehouse 的 wh_location_block / wh_location_block_slot;仅对本轮既有测试票按真实历史预占和占用恢复缺失块表示,保留原预占与占用。部分拣货由正式结算接口转移至余量票。
- 本地手动节点表 query_id 改为允许空,唯一键使用 container_booking_id/event_key,按当前正式基线支持无拉取任务的手动节点。
- 本地执行 IAM 正式 container-workspace-permissions.sql 补齐清关入口权限,并更新默认角色相关账号权限版本;旧登录建议重新登录。
测试来源:NYEXX2608270051(入仓单 2092814880129130499),柜 CSQU3054383;本轮正式 PDA 装柜完成后尾程新单 2112376565948878849 创建成功,装柜事件与手动开船事件均已处理。来源票实装1箱、独立余量票 NYEXX2608270051-1 为3箱,余量未被错误带入开船页签。
经本机 Gateway 的正式业务命令实测:
1. 装柜完成并保存手动实际开船节点后,已开船/待清关=1、待拆柜=0、待排车=1。
2. 上传 LOCAL-TAIL-20261020-clearance.txt 后,已开船/待清关=0、待拆柜=1、待排车=1;未点击“清关完成”,读回 completedAt 为空,证明按上传事实流转。
3. 待拆柜和待排车列表均精确返回本票来源;待清关列表不再返回。清关附件通过正式下载接口校验内容,HTTP200。
4. 无分页统计、19个状态列表、Firstleg/Lastleg 两个健康检查共23项均成功,各列表 total(字符串)与统计数值规范化后逐项一致,未用失败伪造零值。当前派送中和签收完成均为0,本轮没有真实发车或全签样本。
证据:tail-flow-state.json、tail-final-consistency.json、tab-smoke.json、tail-final-smoke.log。头程30项定向测试通过(tail-clearance-access-test.log);此前来源分柜/取消回显/派送/全签分类等12项通过(tail-flow-source-test.log)。Admin 405文件/3375测试及构建类型检查通过(tail-tabs-frontend-test.log、tail-tabs-frontend-build.log)。Gateway入口5项与Mapper扫描397个均通过。
边界:PDA照片是明确命名的合成测试图片,清关文件为本机测试文本;不能作为现场装柜或真实报关证据。本轮没有实际卸柜、出库发车和全签命令,后续环节仍以隔离库领域/Mapper测试覆盖;不能宣称真实物流全链路验收完成。浏览器临时页打开后处于登录页,未获得登录后截图,因此不宣称人工视觉验收通过。尾程常规测试编译仍被其他在途模块旧签名阻断,单独回归结果另记,不等于全量通过。
尾程补验:tail-workflow-isolated-test.log 最终 BUILD SUCCESS,完整生产源码编译及2项 workflow 隔离测试通过(含相邻长整型ID精确隔离、出库取消、实际派送/卸柜事实、内部令牌);读出键直接由JDBC按long映射,避免 H2 SIGNED 被解释为32位整数。临时模块/聚合POM已删除,正常构建配置未修改。
最终生效复核:Firstleg PID56348、Lastleg PID17412。尾程最终修复重启后,重新通过23项HTTP/健康检查且19项数量与列表total一致;清关文件下载及精确来源页签验证再次通过。两个本次启动日志未发现ERROR、BadSqlGrammarException或SQLSyntaxErrorException。头程没有新增代码变更,因此复用已通过的30项及此前12项回归,不重复占用其他任务的共享构建槽。