Files
FTC25009/docs/testing/2026-07-16-dense-outbound-relocation-dispatch-report.md

136 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 密集库出库、移库与 WCS 下发验收报告
## 验收结论
本次实现已完成代码级回归、生产构建、数据库迁移幂等验证、真实只读接口验证和浏览器页面验证。后端共执行 235 个测试,失败、错误和跳过均为 0;后端打包和前端生产构建均成功。
运行期验证使用本地 FTC25009-WMS 数据库和重新打包启动的后端,仅执行查询、预览、登录和页面访问,没有提交出库或移库作业,避免影响现有库存。
## 验证环境
- 日期:2026-07-16
- 分支:`codex/dense-outbound-relocation`
- Java:17
- Maven:`D:\BDevTools\maven\apache-maven-3.9.11\bin\mvn.cmd`
- 后端:`http://127.0.0.1:8080`
- 前端:`http://127.0.0.1`
- 数据库:FTC25009-WMS
## 自动化测试与构建
### 后端全量测试
```powershell
& 'D:\BDevTools\maven\apache-maven-3.9.11\bin\mvn.cmd' -pl ruoyi-admin -am test
```
结果:`BUILD SUCCESS`,`Tests run: 235, Failures: 0, Errors: 0, Skipped: 0`。
覆盖的核心测试包括:
- `OutboundDispatchServiceImplTest`:初次失败、最多 5 次自动重试、人工下发、并发抢占、密集库阻塞和类型路由。
- `DenseLaneServiceImplTest`、`DenseLaneMapperSqlTest`:端头顺序、遮挡集合、同层不同通道目标、显式字段映射。
- `RelocationJobServiceImplTest`、`RelocationJobMapperSqlTest`:类型 23 作业、准确预览汇总、库存搬移、货位切换、归档与真实供应商字段。
- `OutStockoutServiceImplTest`、`LocationOutboundServiceImplTest`:指定库存和指定货位遇到遮挡时的移库编排。
- `KpiDenseRelocationServiceTest`:03 仓、同层目标、容量、预览与生成复核。
- `DenseLaneOutboundServiceImplTest`:端头 N 托、完整库存明细、准确货位汇总、预览签名失效和出库口适配。
- `WcsClientTest`、`OutMydoJobDispatchControllerTest`:独立 WCS 地址和人工下发接口。
### 后端打包
```powershell
& 'D:\BDevTools\maven\apache-maven-3.9.11\bin\mvn.cmd' clean package -DskipTests
```
结果:`BUILD SUCCESS`。打包前停止了占用 JAR 的本地后端,完成后使用新 JAR 重新启动,并通过 `/captchaImage` 返回 HTTP 200 验证服务恢复。
### 前端生产构建
```powershell
Set-Location ruoyi-ui
npm run build:prod
```
结果:构建成功并生成 `dist`。存在项目原有的包体积提示,没有编译错误。
## 数据库迁移
连续执行两次:
```powershell
& '.\scripts\apply-sql-file.ps1' -SqlFile 'sql\20260716_dense_outbound_relocation_dispatch.sql'
& '.\scripts\apply-sql-file.ps1' -SqlFile 'sql\20260716_dense_outbound_relocation_dispatch.sql'
```
两次均成功。执行后计数如下:
| 对象 | 数量 |
| --- | ---: |
| `wcs_job_dispatch` 表 | 1 |
| `IX_wcs_job_dispatch_retry` 索引 | 1 |
| `IX_mydo_job_dense_dispatch` 索引 | 1 |
| `bas_task_no` 类型 23 | 1 |
| WCS 补偿 Quartz 任务 | 1 |
| 指定通道出库菜单权限 | 1 |
| 通道出库预览权限 | 1 |
| 通道出库生成权限 | 1 |
| 出库作业人工下发权限 | 1 |
## 真实接口验证
在新打包后端上登录并调用只读接口,得到以下结果:
| 项目 | 结果 |
| --- | --- |
| 03 仓指定通道列表 | 12 条 |
| 通道编码为空的记录 | 0 条 |
| 验证通道 | `03010101` |
| 端头预览 | 1 托 |
| 预览签名 | 存在 |
| 预览合计库存 | 1 |
| 库存明细合计 | 1 |
| KPI 同层移库源通道 | 7 条 |
| KPI 同层移库目标通道 | 44 条 |
预览合计与准确选中货位的库存明细合计一致,避免重复托盘码导致跨货位重复汇总。
## 页面验证
执行:
```powershell
$env:WMS_TEST_USERNAME='admin'
$env:WMS_TEST_PASSWORD='admin123'
python scripts\verify_dense_outbound_ui.py
```
结果:退出码 0,浏览器控制台错误 0,请求失败 0。桌面视口宽度 1440px 和窄屏视口宽度 390px 的页面文档宽度均等于视口宽度,没有页面级横向溢出。
截图:
- [出库作业 WCS 状态与人工下发](screenshots/2026-07-16-dense-outbound/outbound-job-desktop.png)
- [指定通道出库列表](screenshots/2026-07-16-dense-outbound/dense-lane-outbound-desktop.png)
- [真实数据出库预览弹窗](screenshots/2026-07-16-dense-outbound/dense-lane-outbound-dialog-real.png)
- [只读模拟数据完整弹窗](screenshots/2026-07-16-dense-outbound/dense-lane-outbound-dialog.png)
- [指定通道出库窄屏](screenshots/2026-07-16-dense-outbound/dense-lane-outbound-narrow.png)
- [KPI 货位平面图与指定移库](screenshots/2026-07-16-dense-outbound/kpi-plan-desktop.png)
真实弹窗截图在预览加载遮罩消失且托盘行渲染完成后生成,能看到准确托盘、货位和库存数量。
## 六项需求映射
| 需求 | 实现与直接证据 |
| --- | --- |
| WCS 失败补偿、最多 5 次自动重试、人工下发、最外侧校验 | Outbox 状态机、Quartz 任务、统一下发服务;`OutboundDispatchServiceImplTest` 15 项通过,出库作业页面验证通过。 |
| 指定托盘被遮挡时自动生成类型 23 移库 | 出库分配调用遮挡移库编排;`OutStockoutServiceImplTest`、`RelocationJobServiceImplTest` 通过。 |
| KPI 平面图指定同层移库 | 同仓同层、不同通道及容量复核;KPI 测试通过,真实选项为源 7、目标 44,页面正常。 |
| 入库、普通出库、指定货位/通道、移库分别使用 WCS 地址 | 按 `in_or_out` 路由到 putaway、retrieve、location-outbound、relocation;`WcsClientTest` 和 dispatch 路由测试通过。 |
| 指定货位出库被遮挡时先生成移库 | `LocationOutboundServiceImpl` 接入统一遮挡编排;对应服务测试通过。 |
| 指定通道按端头 N 托整托出库 | 列表、库存明细、准确预览签名、出库口适配和生成流程已实现;真实预览 1 托且合计一致,桌面与窄屏页面验证通过。 |
## 边界说明
- 本轮没有在现有业务库提交真实出库、移库或 WCS 失败作业;状态流转、库存搬移和失败补偿由自动化测试验证。
- 真实 WCS 联调仍需在可控测试单据和 WCS 测试地址下执行,避免向生产设备下发任务。
- 前端生产构建只有现有项目的包体积警告,不影响本次功能验收。