This commit is contained in:
2026-10-21 21:30:28 +08:00
parent 5273422937
commit 8ebea7c4cb
3 changed files with 46 additions and 1 deletions
+2
View File
@@ -30,6 +30,8 @@
默认执行Maven测试;仅明确选择SKIP_TESTS时跳过执行,仍编译测试源码。总控先统一测试,再向固定commit的单服务任务传递跳过重复执行。发布前还须完成网关路由、部署拓扑、失败回滚和受影响前端合同。离线检查不能证明镜像健康或HTTP闭环。 默认执行Maven测试;仅明确选择SKIP_TESTS时跳过执行,仍编译测试源码。总控先统一测试,再向固定commit的单服务任务传递跳过重复执行。发布前还须完成网关路由、部署拓扑、失败回滚和受影响前端合同。离线检查不能证明镜像健康或HTTP闭环。
总控 `TEST_SCOPE=AUTO` 在单个 Lastleg 的可追踪局部 Java 变更中,按反向类型引用、接口实现、测试夹具和变更写入 SQL 的同表消费者选择测试;公开契约变更追加相关静态合同。基线仅取带有新门禁通过标记、确实测试了目标服务的成功构建;跳过测试、失败、取消或仅测过其他服务的构建均不能作基线。公共模块、共享模型、配置、Schema、未知路径、多服务、其他服务或基线不可用时保持完整模块测试;`TEST_SCOPE=MODULE` 可显式执行完整回归,临时灰度始终保持 MODULE。完整生产和测试源码编译及既有 1GB/单 fork/类隔离不变。定向测试必须逐类取得本轮非零执行报告;真实环境 opt-in 类单独列为未执行,不计为通过,仍由完整模块/专项授权入口负责。此静态筛选不能发现所有运行时耦合,涉及未被 Java/SQL 引用表达的跨业务影响时须选 MODULE。首次发布本次流水线变更需先执行完整模块测试建立新基线。流水线/发布脚本变化仍命中既有 AUTO 全服务规则,首次可使用 SELECT 仅选 Lastleg、TEST_SCOPE=MODULE 建立基线;后续 AUTO 才按关联范围执行。精确耗时以部署后 Jenkins 为准。
同机测试代理的执行器数量固定为1,避免构建与其他重任务挤占业务服务。总控测试和单服务打包还必须共用 `firstleg-test-maven` 跨Job锁,经 `deploy/scripts/run-ci-maven.sh` 执行;仅 `disableConcurrentBuilds()` 不能限制不同Job并发。入口按同一构建账号使用本机flock,控制端掉线后已有任务仍持锁时拒绝再起Maven,不删除锁文件绕过互斥。部署的SOURCE_COMMIT必须包含此入口及 `ci-bounded` POM配置,旧提交缺少防护时应失败,不能回退到裸mvn。 同机测试代理的执行器数量固定为1,避免构建与其他重任务挤占业务服务。总控测试和单服务打包还必须共用 `firstleg-test-maven` 跨Job锁,经 `deploy/scripts/run-ci-maven.sh` 执行;仅 `disableConcurrentBuilds()` 不能限制不同Job并发。入口按同一构建账号使用本机flock,控制端掉线后已有任务仍持锁时拒绝再起Maven,不删除锁文件绕过互斥。部署的SOURCE_COMMIT必须包含此入口及 `ci-bounded` POM配置,旧提交缺少防护时应失败,不能回退到裸mvn。
当前初始预算:Maven堆768MiB、测试堆1GiB、单测试fork,并分别限制元空间和直接内存;Surefire保留JaCoCo,启用父进程心跳检查、停止时kill、fork运行20分钟和退出30秒上限。宿主机GNU timeout提供45分钟期限及30秒强制终止,Jenkins内部另设50分钟上限。预算不是总RSS保证,须在真实Linux节点核对代理内存、memory.events/pressure和完整服务测试峰值;不足时按证据调整,不能重新放开三个Maven并发,也不能仅提高MemoryHigh挤占业务服务。代理服务保持 `KillMode=control-group`、`SendSIGKILL=yes`;代理掉线或构建中止后,先检查该服务cgroup是否仍有构建/测试子进程,确认退出再恢复,不把Job的ABORTED当作进程已清理。 当前初始预算:Maven堆768MiB、测试堆1GiB、单测试fork,并分别限制元空间和直接内存;Surefire保留JaCoCo,启用父进程心跳检查、停止时kill、fork运行20分钟和退出30秒上限。宿主机GNU timeout提供45分钟期限及30秒强制终止,Jenkins内部另设50分钟上限。预算不是总RSS保证,须在真实Linux节点核对代理内存、memory.events/pressure和完整服务测试峰值;不足时按证据调整,不能重新放开三个Maven并发,也不能仅提高MemoryHigh挤占业务服务。代理服务保持 `KillMode=control-group`、`SendSIGKILL=yes`;代理掉线或构建中止后,先检查该服务cgroup是否仍有构建/测试子进程,确认退出再恢复,不把Job的ABORTED当作进程已清理。
@@ -1,5 +1,28 @@
# 测试环境单机部署与配置契约 # 测试环境单机部署与配置契约
## 2026-10-21 TEST 客户保留名单清理与恢复
- 用户明确要求删除其他客户,最终保留 `TEN2097708157074210818`、`TEN2097867276078874626`、`TEN2097882345072295938` 三个客户。核对 TEST 入口、数据库身份和编号映射后,20:17(Asia/Shanghai)单事务删除 738 个客户、761 个专属客户账号及相关资料、配置、资金账户、客户销售报价和安全关联,共 30 张表 59,278 行;904 个平台账号及平台主体保留。公共仓库、车辆、自营数据、独立审计、物理文件和编号序列继续保留。
- 维护前备份 30 张受影响表,7 个 SQL 文件共 90,508,929 字节,完成标记及 SHA-256 均保存于本机凭据目录下独立备份批次。55 项保留内容摘要前后一致;全部外键检查通过,未关闭外键或修改触发器。定向撤销已删账号的 82 组 Redis 会话集合及 200 个仍有效会话键,共删除 282 个键,复核待删账号会话集合和有效键均为零。
- 首次维护复核发现保留客户新建了 8 票订单,保护检查在任何删除前退出并恢复服务;将这些订单及关联数据纳入完整性摘要后重试成功,新增订单完整保留。清理期间暂停 13 个后端服务造成短暂 502;原有容器和镜像均已恢复,13 个服务全部 running / healthy,未发布新版本。
- 恢复后实际登录及客户列表 HTTP 200,客户总数精确为 3、编号与保留名单一致。平台、客户、国内 PDA、海外 PDA 四类账号登录及退出成功,36 个列表与辅助查询请求正常;数据库范围、保留摘要、关联与 HTTP 合计 84 项核对通过,0 失败。证据唯一入口:`baiyue-firstleg/reports/customer-cleanup-20261021/summary.json`;此前列表巡检确认的空关键词接口边界问题见下一节,本次客户清理未修改该接口。
- 另经客户网页公开入口补验 Nginx 代理这一跳:配置中的保留客户真实登录、头程订单列表、工作台列表和退出全部 HTTP 200 / 业务码 200;平台和客户网页容器的匿名 API 请求均按预期返回 401,未再出现 502。本轮重启后无需再次重载 Nginx;单独证据为同目录 `client-web-entry-verification.json`。
## 2026-10-21 清库后列表只读巡检
- 使用 TEST 平台、客户、国内 PDA、海外 PDA 四类账号,经统一检查入口执行真实 HTTP,只读核对 203 个不同接口(平台 149、客户 41、国内 PDA 3、海外 PDA 10),覆盖列表、统计、选项及辅助查询。有效请求 229 次,227 次成功;2 次失败为同一接口空关键词边界复现。最慢响应 3,156 ms,未超过前端 15 秒超时;本轮无业务写入,自建登录会话均已退出。
- 唯一确认的接口错误:客户历史订单候选 `GET /api/merchant/v1/last-leg/relabel-applications/historical-orders`,有效仓库且不传可选 `keyword` 时 HTTP 200 / 业务码 `S0500`。服务端 `RelabelApplicationService.historicalOrders` 无条件创建 AND 分组,空关键词跳过内部条件后生成 `AND )`,服务日志确认 SQL 语法异常;带非空关键词的对照查询正常返回空列表。本轮仅检查,未修复或部署。
- 当前页面调用链为仓储转运选择库存来源,`selectTransferInventory` 对空值提前返回,调用时传入非空入仓码,因此上述边界错误不等于当前页面必现错误;其余按页面调用参数执行的已测请求正常。初始探针缺筛选参数、国内 PDA 前缀不完整等已纠正,不计为产品故障;未挂载旧模块和无调用助手亦不计为当前页面故障。
- 证据入口:`baiyue-firstleg/reports/list-requests-20261021/summary.json`,保留各批次原始报告和错误日志摘录。清库后无父单据的订单、柜次、账单、排车及退货明细子列表未重新造数验证;未执行页面截图或交互验收,不宣称全场景通过。
- 后续用户实际登录发现客户网页入口 502:此前 HTTP 矩阵走配置中的统一 API 入口,未覆盖客户网页 Nginx 这一跳。20:08 核实客户账号/成员/客户均 ACTIVE 且未锁定,客户 Nginx 的失败上游地址已不同于当前 Gateway 容器地址,日志为连接被拒绝;静态 `/healthz` 正常不代表 API 代理可用。20:09 在配置语法检查通过后,仅平滑重载原 `client-web-test` Nginx,容器和镜像未变,未改密码或业务数据。经客户网页实际入口用配置中的 TEST 客户账号复验登录、头程订单列表、工作台及退出均 HTTP 200 / 业务码 200;用户指定账号未提供密码,未猜测或代其登录。证据为同目录 `client-proxy-recovery.json`。后续 Gateway 地址变化仍须覆盖此前遗漏的网页代理检查,不能把此次重载视为已发布自动刷新 DNS 的配置修复。
## 2026-10-21 TEST 业务数据清理完成
- 用户明确授权清理全部客户的头程、海外仓、尾程及车队业务,资金记录和实际余额归零,保留基础资料、授信配置、自营数据、独立审计和物理文件;订单自身状态与作业历史随单清理。执行前核对 TEST 环境标记、数据库身份与测试入口指向,并暂停 13 个在用后端服务。
- 19:37(Asia/Shanghai)事务提交:351 张业务表清空 660,376 行,按业务类型白名单删除导出任务 683 行及关联 Outbox 38 行,合计 661,097 行。114 个资金账户释放实际余额、冻结和授信占用,可用余额按当天有效授信重算;保留全部授信额度和有效期。释放国内库位 98 个、海外真实库位 39 个、托盘 1,742 个,并重置预约扫描协调状态;停用、报废资源、托盘库位关联及车辆主档保留。
- 提交前核对 117 张保留表行数一致,115 项保留内容及混合表配置摘要一致,外键孤儿记录前后均为 0;客户、账户权限、仓库、报价、编号序列、人工船期、车辆运维、通知、自营采集、独立审计、文件元数据和物理文件均按范围保留。20 个删除保护触发器仅在停写期间临时移除,随后恢复并核对全部 64 个触发器定义一致。首次执行因 MySQL 默认库要求报 1046,事务回滚且触发器恢复后修正重试,首次未删除业务记录。
- 涉及变更的 359 张表已保存为本机凭据目录下独立备份批次,共 7 个 SQL 文件、475,359,482 字节,完成标记和 SHA-256 校验通过;恢复定义与操作记录随批次保留。19:41 复核全部 351 张业务表仍为空,资金及资源占用校验通过,原 13 个后端容器均 running / healthy、镜像保持不变。证据入口:`baiyue-firstleg/reports/business-reset-20261021-live/execution-verification.json`,其中记录备份位置与校验值;此前真实 HTTP 单据样本保留为历史验收证据,后续业务回归需重新造数。
## 2026-10-21 当前排车发布内部散板需求 ## 2026-10-21 当前排车发布内部散板需求
- 用户明确授权单字段 SQL 及 Lastleg、Admin 提交部署。仅向 TEST `baiyue_lastleg.ll_dispatch_order` 新增 `publish_looseboard_demand TINYINT(1) NOT NULL DEFAULT 1`,执行前确认列缺失,执行后核对类型、非空、默认值和中文注释;未执行业务回填或数据重置。源码及单独执行入口为 `lastleg-service/src/main/resources/db/dispatch-capacity-demand.sql`。 - 用户明确授权单字段 SQL 及 Lastleg、Admin 提交部署。仅向 TEST `baiyue_lastleg.ll_dispatch_order` 新增 `publish_looseboard_demand TINYINT(1) NOT NULL DEFAULT 1`,执行前确认列缺失,执行后核对类型、非空、默认值和中文注释;未执行业务回填或数据重置。源码及单独执行入口为 `lastleg-service/src/main/resources/db/dispatch-capacity-demand.sql`。
@@ -8,6 +31,17 @@
- 本地前端8文件115项、装车弹框21项、预约排车25项定向检查通过;受影响类型检查与发布构建通过。后端需求池持久化、装车/照片流转、版本及幂等、平台权限、Schema/OpenAPI及网关合同定向检查通过;未运行全量测试。真实HTTP只读复验:平台需求池返回28条当前排车,分页首屏20条,排车详情发布状态一致,匿名401、客户账号403。 - 本地前端8文件115项、装车弹框21项、预约排车25项定向检查通过;受影响类型检查与发布构建通过。后端需求池持久化、装车/照片流转、版本及幂等、平台权限、Schema/OpenAPI及网关合同定向检查通过;未运行全量测试。真实HTTP只读复验:平台需求池返回28条当前排车,分页首屏20条,排车详情发布状态一致,匿名401、客户账号403。
- 需求池数据及边界统一见[当前页面范围](海外仓业务/内部拼车需求池首版开发契约.md#当前页面范围2026-10-21)。装车和照片先后顺序的自动派送以定向持久化用例为依据,本轮未代用户执行真实装车、照片绑定或派送写入;1920×1080、100%页面视觉仍待人工截图确认。 - 需求池数据及边界统一见[当前页面范围](海外仓业务/内部拼车需求池首版开发契约.md#当前页面范围2026-10-21)。装车和照片先后顺序的自动派送以定向持久化用例为依据,本轮未代用户执行真实装车、照片绑定或派送写入;1920×1080、100%页面视觉仍待人工截图确认。
## 2026-10-21 原预排托盘按实收箱数拣货修复发布
- 用户授权 TEST Lastleg 发布;`baiyue-firstleg-lastleg-service #405` SUCCESS,精确提交 `ae361879e5f1e9647b7ae35047e9a553a1935f34`,18:01 已确认运行镜像 `ae361879e5f1` healthy。原计划估算 10+10 不再阻断实收 9+11 的原单拣货;规则见[排车列表统一作业改造契约](海外仓业务/排车列表统一作业改造契约.md)。本次没有执行 SQL 或真实拣货、装车写入。
- 前序自动流水线 `backend-java #711` 使用 `1ea7b4ff12c1`,Lastleg 汇总 3280 项中 1 failure、1 error、11 skipped,两处均为已移除操作入口的旧断言,未部署。后续提交已修正;同版本本地统一检查入口验证 16 类161项全通过,涵盖后续提交直接影响测试及托盘实收回归。#405 复用此结果,跳过重复测试执行但保留生产及测试代码编译;本轮重复排队的 #403、#404 已取消。
- 发布后从已登录本机 H5 只读核对 `PC202610210018`:两托分别返回计划/可拣数量 9、11,已拣均0,阶段 `LOADING`、版本5;选择首托默认9箱且真实拣货按钮可用,未实际提交。H5 随后按用户要求将拣货与装车拍照分为两个 Tab,40项排车定向测试通过,当前本机页面已验证切换和拣货草稿保留;不据此宣称 Android 包已发布。
- 用户实际提交后暴露发布前实际库结构核对遗漏:TEST `ll_dispatch_order` 缺少源基线与海外空库基线均已声明的 `exceptions_json JSON NULL`,`saveState` 报 Unknown column 并回滚;此前本地 H2 使用完整基线、线上只读验证不能证明写入可用。用户单独授权后,仅执行 `ALTER TABLE baiyue_lastleg.ll_dispatch_order ADD COLUMN exceptions_json JSON NULL COMMENT '派送异常登记记录及图片引用,不改变派送及库存状态'`,执行前确认缺失、后确认 JSON/可空,未重新发布 Java。随后从原 H5 恢复入口以原幂等键重试首托9箱,真实提交成功:原命令查询 `PICK/APPLIED`、版本6、已拣9;首托9/9且可用0、第二托0/11且可用11,页面待处理请求已清除。未提交第二托或装车完成。此条补齐首托真实写入证据,不代表全单装车/派送全流程验收。
- 同日按用户现场反馈取消装车逐托必填重量、体积、托位,服务端按已扫码实托去重计数并留存已有实测,缺失保持未知且不阻塞装车;保留未拣齐、来源/版本变化、已知超载及原键防重。TEST Lastleg **#406 SUCCESS**,精确提交 `632d35faafde104171fe0dbdbdae8bcd11e93dd3`,运行镜像 `632d35faafde` healthy;发布耗时108秒,复用本地9类85项定向测试,仍编译全部生产和测试源码。仅发布本次修复,不含同期其他任务散板需求字段;未执行额外SQL。
- 本机PDA装车弹框已改为标题与单号分行、托/箱数量摘要、等宽取消/确认按钮,无逐托输入;PDA API/页面60项与照片7项、Admin确认/照片相关57项、追加照片成功预览与车次未知测量读取19项、受影响类型检查及HTTP脚本离线合同84项通过(部分集合重叠,不合计为独立总数)。当前单由用户自行完成第二托,发布后只读核对仍为LOADING、version7、9/9+11/11、装车资格允许,未替用户执行装车确认。
- PDA实际上传的明确标识测试图已保存为第一槽;Admin鉴权GET可读当前5张照片,第一槽PNG为19505字节,SHA-256与原上传文件完全一致。Admin成功图片缩略图/大图属性和只读权限通过组件测试;未声称Admin人工截图验收。首槽仍为测试图片,正式使用前需用户替换为真实装车照片。
## 2026-10-21 到港事实来源 review 修复与验收 ## 2026-10-21 到港事实来源 review 修复与验收
- 已关闭下文清关提柜日期一致性修复的后续 review 边界:Firstleg 柜级 `arrivedDestinationPortAt` 与预约日历统一按 `observedAt`、事实记录顺序降序取最新非空实际到港事实,后续观测修正为更早日期时不再被历史最大时间覆盖;其他船节点推进规则保持。业务规则唯一入口为[船节点时间语义](海外仓业务/船节点标准化契约.md#3-时间语义与状态推进)。 - 已关闭下文清关提柜日期一致性修复的后续 review 边界:Firstleg 柜级 `arrivedDestinationPortAt` 与预约日历统一按 `observedAt`、事实记录顺序降序取最新非空实际到港事实,后续观测修正为更早日期时不再被历史最大时间覆盖;其他船节点推进规则保持。业务规则唯一入口为[船节点时间语义](海外仓业务/船节点标准化契约.md#3-时间语义与状态推进)。
@@ -2953,3 +2987,10 @@ Client #382(`a0736239e4ee4cd58b620dab912ffc0641360d9f`)正式页面在1920×
- 用户截图指出需求池仍可经“选择车次发布余位”进入已退出日常使用的旧车次页面。本次直接隐藏该按钮,并将需求详情中的车次号改为纯文本;原按钮、跳转及其它拼车处理代码保留,无新增开关。规则沿拼车主契约当前页面范围。 - 用户截图指出需求池仍可经“选择车次发布余位”进入已退出日常使用的旧车次页面。本次直接隐藏该按钮,并将需求详情中的车次号改为纯文本;原按钮、跳转及其它拼车处理代码保留,无新增开关。规则沿拼车主契约当前页面范围。
- 修复提交 `2ecf4cf3fe88d0b029fae96843fe32b60579a409`,保留远端其它已提交改动后合并推送 `7c43fcacc426844bf3da4aa09045418eb7afbe60`。35项直接页面及保留组件回归通过,包含具备调度及车次权限时两个旧入口仍隐藏、需求详情和联系方式保留。未跑全量测试。 - 修复提交 `2ecf4cf3fe88d0b029fae96843fe32b60579a409`,保留远端其它已提交改动后合并推送 `7c43fcacc426844bf3da4aa09045418eb7afbe60`。35项直接页面及保留组件回归通过,包含具备调度及车次权限时两个旧入口仍隐藏、需求详情和联系方式保留。未跑全量测试。
- `admin-web-test #683` 精确检出合并版本,类型检查、生产构建及部署 SUCCESS,耗时55.815秒;镜像 `admin-web-test:7c43fcacc426` Healthy,容器内 `/healthz` 通过。仅更新 TEST Admin,没有后端、SQL、Nacos或Gateway变更;流水线未运行全量测试。证据为私有环境目录 `looseboard-legacy-entry-release-20261021.json`。本轮未新增人工页面截图,不能用容器健康替代视觉验收。 - `admin-web-test #683` 精确检出合并版本,类型检查、生产构建及部署 SUCCESS,耗时55.815秒;镜像 `admin-web-test:7c43fcacc426` Healthy,容器内 `/healthz` 通过。仅更新 TEST Admin,没有后端、SQL、Nacos或Gateway变更;流水线未运行全量测试。证据为私有环境目录 `looseboard-legacy-entry-release-20261021.json`。本轮未新增人工页面截图,不能用容器健康替代视觉验收。
### 2026-10-21 固定客户排车装车至签收定向验收
- 本轮使用固定 TEST 客户通过正式 HTTP 创建两张仓储转运并实收,两托共两箱,确认合成 ONT8 预约后生成 `PC202610210019`。缺运输时间的提交被明确拒绝;补齐车辆、司机和计划时间,通过调度及理货审核后真实拣货。五张 TEST 装车图片齐全,确认装车后自动生成 `CK202610210003`(OUTBOUNDED)与 `DL202610210006`(DELIVERING),原请求重放未重复扣库存。初次验收脚本缺少编辑必填 `publishLooseboardDemand`,明确 A0400 后修正并沿原单继续,无 SQL 或状态绕过。
- 页面验收实际执行 PDA 登录、拍照 Tab、图片上传替换及 Admin 资料查看、TEST 签收文件上传和保存;回查排车与派送均 DELIVERED,签收前后库存流水不变。图片、预约、证照均明确为 TEST 合成材料,不代表真实承运或收货。临时 PDA 账号已停用。
- Admin 资料弹窗补齐密度样式祖先;整车五照片不再叠加派送单的另一组照片上传框,当前页签单独统计资料类别。提交 `d8fbc16fd77ecf5ffad6bbc4449a61552f598201`,`admin-web-test #688` 精确构建 SUCCESS(59.187 秒),发布后已回看资料页签、五照片及派送完成列表。仅发布 Admin,未发布后端或执行 SQL。
- 直接验证:资料组件 16 项、履约脚本 42 项、脚本登记 4 项通过;本轮未跑全量测试。HTTP 与页面证据在后端 `reports/dispatch-loading-DISPATCH20261021FLOW03/`、`reports/dispatch-loading-DISPATCH20261021FLOW04/`,最终结果为后者 `final-ui-http.json`。范围为实收入库至签收,不包含真机相机、真实司机出行、结算或车队资源收车。
@@ -6,6 +6,8 @@
## 一 用户已确认的业务目标 ## 一 用户已确认的业务目标
2026-10-21 用户最终澄清:允许先预排车辆和货物;FBA预约未确认、送达时间及计划来车/发车安排未核对时,客服不得提交有效审核、调度和理货不得批准,更不得开始实际拣货。审批拒绝入口保留,不能因通过条件不满足而无法驳回。两级审核展示当前有效收货确认及运输时间,按真实客户、来源、目的仓及确认覆盖量核验,不借同批其他客户的确认通过;原收货确认发生变化时审核依据失效。发车仍复验,不能等货物全部拣完才首次发现预约未就绪。当前已执行拣货事实不得清空、重建或伪造预约来强行发车。
2026-10-21 新增内部散板需求发布选项:新建排车默认勾选“发布公共散板需求”,可在维护车辆信息时修改;按车与新建/编辑命令同事务持久化。对派送排车的候选、满载退出及未知容量口径统一见[内部散板需求池当前范围](内部拼车需求池首版开发契约.md#当前页面范围2026-10-21),不改变排车审核、实际拣货、装车照片或发车流程。 2026-10-21 新增内部散板需求发布选项:新建排车默认勾选“发布公共散板需求”,可在维护车辆信息时修改;按车与新建/编辑命令同事务持久化。对派送排车的候选、满载退出及未知容量口径统一见[内部散板需求池当前范围](内部拼车需求池首版开发契约.md#当前页面范围2026-10-21),不改变排车审核、实际拣货、装车照片或发车流程。
1. 2026-10-21 用户最新确认:排车列表恢复装车前、装车中、装车后、派送中、派送完成五个作业阶段。装车中可同步上传资料;确认装车完成且资料齐全才进入派送中。装完但资料未齐留在装车后,资料先齐则确认装车时直接派送;此规则替代同日此前“装完即发车”的确认。 1. 2026-10-21 用户最新确认:排车列表恢复装车前、装车中、装车后、派送中、派送完成五个作业阶段。装车中可同步上传资料;确认装车完成且资料齐全才进入派送中。装完但资料未齐留在装车后,资料先齐则确认装车时直接派送;此规则替代同日此前“装完即发车”的确认。
@@ -17,7 +19,7 @@
4. 2026-10-21 用户确认:装车完成确认真实实载,Admin与PDA成功结果在资料未齐时为AFTER_LOADING、资料已齐时为DELIVERING。装车中及装车后均提供“装车照片1至5”五个固定框,两端均可拍照/选择图片、上传、预览及替换,按整张排车单共用当前照片与附加资料版本,不依赖派送单或按客户重复上传。五框全部绑定保存且已确认装车完成后自动进入派送中;不以选图、文件上传回执或重复槽位充数。保留真实拣货核平、实载校验、版本及防重复约束。 4. 2026-10-21 用户确认:装车完成确认真实实载,Admin与PDA成功结果在资料未齐时为AFTER_LOADING、资料已齐时为DELIVERING。装车中及装车后均提供“装车照片1至5”五个固定框,两端均可拍照/选择图片、上传、预览及替换,按整张排车单共用当前照片与附加资料版本,不依赖派送单或按客户重复上传。五框全部绑定保存且已确认装车完成后自动进入派送中;不以选图、文件上传回执或重复槽位充数。保留真实拣货核平、实载校验、版本及防重复约束。
5. 装车已完成时,第五张装车照片绑定与按客户和目的地生成出库/派送单、记录实际发车并进入派送中在同一事务完成;照片先齐时,这些动作随装车确认在同一事务完成,仍无人工安排派送及确认发车入口。上传和绑定各保留稳定原请求键;第五张绑定或派送失败时保留装车后、前四张及原上传文件,原请求可恢复,不能留下半车或重复派送。PDA每次按Token绑定仓校验,Admin沿排车list只读、edit上传保存。照片使用原整车附加记录及文件归属,不新增存储表;五个既有技术槽位仅映射装车照片1至5,不表示司机审核或真实签收。真实外接报价沿原费用路径发布,未知派送补充资料与费用保持未确认,不猜测金额或原费用覆盖、不填写零费;后续由既有后台资料/费用管理维护。装车中上传齐资料不会提前发车;照片先齐时派送失败回滚本次装车确认、保留已保存照片,原请求可重试。装车完成原键恢复本次事务原最终阶段(AFTER_LOADING或DELIVERING),资料保存原键恢复原保存结果,当前阶段须另读;不重复扣库存。 5. 装车已完成时,第五张装车照片绑定与按客户和目的地生成出库/派送单、记录实际发车并进入派送中在同一事务完成;照片先齐时,这些动作随装车确认在同一事务完成,仍无人工安排派送及确认发车入口。上传和绑定各保留稳定原请求键;第五张绑定或派送失败时保留装车后、前四张及原上传文件,原请求可恢复,不能留下半车或重复派送。PDA每次按Token绑定仓校验,Admin沿排车list只读、edit上传保存。照片使用原整车附加记录及文件归属,不新增存储表;五个既有技术槽位仅映射装车照片1至5,不表示司机审核或真实签收。真实外接报价沿原费用路径发布,未知派送补充资料与费用保持未确认,不猜测金额或原费用覆盖、不填写零费;后续由既有后台资料/费用管理维护。装车中上传齐资料不会提前发车;照片先齐时派送失败回滚本次装车确认、保留已保存照片,原请求可重试。装车完成原键恢复本次事务原最终阶段(AFTER_LOADING或DELIVERING),资料保存原键恢复原保存结果,当前阶段须另读;不重复扣库存。
6. 实际发车后为派送中;全部正常签收完成后自动进入配送完成。派送中可以“标记异常”:类型必填(拒收、部分签收、车辆异常),退货去向选填(退回海外仓、其他),说明和图片选填。登记沿排车维护权限,按本车版本及原请求键防重,异常记录和图片保存在主单并于现有“排车信息”详情回看;阶段仍为派送中,不自动创建退货、恢复库存或确认签收。异常后续处置由人工处理,本轮不新增线上异常闭环。 6. 实际发车后为派送中;全部正常签收完成后自动进入配送完成。派送中可以“标记异常”:类型必填(拒收、部分签收、车辆异常),退货去向选填(退回海外仓、其他),说明和图片选填。登记沿排车维护权限,按本车版本及原请求键防重,异常记录和图片保存在主单并于现有“排车信息”详情回看;阶段仍为派送中,不自动创建退货、恢复库存或确认签收。异常后续处置由人工处理,本轮不新增线上异常闭环。
2026-10-21 资料入口确认:装车中、装车后从“管理资料”打开整车五张照片;有效排车在派送中、配送完成统一从“管理资料”居中弹框进入,签收文件、油耗图片、装车资料三个页签;按本车真实关联派送单及客户范围切换。签收文件、BOL、装车照片复用派送单原附件记录,旧文件两处可见,签收文件保存即沿现行逻辑完成对应派送单,全车全部正常签收才汇总配送完成;其他资料后补,不作为完成门禁。车辆与司机审核附件只读回看,油耗图片按车复用车队附加照片、版本及历史;排车入口以dispatch:list读取、dispatch:edit上传两个油耗框,不改变车队原独立权限。外配任务原入口仍只输出五个装车框,但共享记录允许排车入口补充油耗图片;不复制派送签收文件为车队照片,不新增状态或数据库表。 2026-10-21 资料入口确认:装车中、装车后从“管理资料”打开整车五张照片;有效排车在派送中、配送完成统一从“管理资料”居中弹框进入,签收文件、油耗图片、装车资料三个页签;按本车真实关联派送单及客户范围切换。签收文件与 BOL 复用派送单原附件记录;排车装车资料只维护整车共用的五张照片,不再同时显示另一套派送单装车照片上传框。派送单既有附件仍可从派送单资料入口查看,当前页签的上传类别统计只包含该页签内容。签收文件保存即沿现行逻辑完成对应派送单,全车全部正常签收才汇总配送完成;其他资料后补,不作为完成门禁。车辆与司机审核附件只读回看,油耗图片按车复用车队附加照片、版本及历史;排车入口以dispatch:list读取、dispatch:edit上传两个油耗框,不改变车队原独立权限。外配任务原入口仍只输出五个装车框,但共享记录允许排车入口补充油耗图片;不复制派送签收文件为车队照片,不新增状态或数据库表。
2026-10-21 本轮登记契约:`POST /api/platform/v1/last-leg/dispatches/{dispatchNo}/exceptions`,动作`MARK_EXCEPTION`,`recordVersion/idempotencyKey/exceptionType`必填;`returnDirection/description/imageFileIds`选填。说明最多1000字、图片最多20张;异常图片类型`OVERSEAS_DISPATCH_EXCEPTION_EVIDENCE`,平台0、本车ID归属,非空JPG/PNG、单文件10MiB。主表新增可空`exceptions_json`,与原版本、历史、命令账本同事务保存;代码及基线已准备,未执行SQL或部署。 2026-10-21 本轮登记契约:`POST /api/platform/v1/last-leg/dispatches/{dispatchNo}/exceptions`,动作`MARK_EXCEPTION`,`recordVersion/idempotencyKey/exceptionType`必填;`returnDirection/description/imageFileIds`选填。说明最多1000字、图片最多20张;异常图片类型`OVERSEAS_DISPATCH_EXCEPTION_EVIDENCE`,平台0、本车ID归属,非空JPG/PNG、单文件10MiB。主表新增可空`exceptions_json`,与原版本、历史、命令账本同事务保存;代码及基线已准备,未执行SQL或部署。