Files
xiaoqu_mcp_service/xiaoqu-agent-service/doc/warehouse-out-mcp-tools-design.md
T

92 lines
4.9 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.
# 出库单 MCP 工具设计
## 1. 背景与范围
参考旧系统 `POST /myWarehouseOut/allListByPage` 和 `GET /myWarehouseOut/lookDetail`,在
`xiaoqu-agent-service` 新增两个只读工具:
| 工具 | 分类 | 用途 |
|---|---|---|
| `warehouse.out.list.query` | warehouse/read | 分页查询出库单 |
| `warehouse.out.detail.query` | warehouse/read | 按主键或出库单号查询完整详情 |
只读取 m0/m1/m2,主要数据表为 m2 的 `warehouse_out`、`warehouse_out_details`、
`warehouse`、`warehouse_out_audit_process`、`warehouse_in_out_pic`、
`warehouse_out_certificate`;收货地址和物流信息按需读取 m1。
本次不返回关联入库单详情,不修改旧模块和业务表,不新增 Flyway migration。新工具由现有
`ToolSyncService` 自动登记,初始不属于任何 Scope,发布后需在管理后台授权。
## 2. 列表工具
### 2.1 入参
- 单号模糊查询:`outOrderNo`、`allocationOrderNo`、`mallOrderNo`、`deliveryOrderNo`、
`installOrderNo`、`pickupOrderNo`。
- 归属精确查询:`agentId`、`warehouseId`、`warehouseTypeId`、`applyUserId`。
- 状态精确查询:`orderState`、`sendMode`、`outSynchronizeState`、`assetSynchronizeState`。
- 客户查询:`useCustomerType`、`useCustomerId` 精确查询,`useCustomerName` 模糊查询。
- 日期:`outDateFrom/outDateTo` 过滤 `out_date`;`applyDateFrom/applyDateTo` 过滤
`apply_date`。日期格式固定为 `yyyy-MM-dd`,业务时区为 `Asia/Shanghai`,结束日期包含当天。
- 分页:`page` 默认 1;`rows` 默认 20、上限 100,超出上限截断并返回 `notice`。
旧接口错误地把出库日期条件改写为申请日期条件,本工具不复制该行为。
### 2.2 出参
顶层统一返回 `total/page/rows/records`。每条记录包含主单号、来源类型、代理商、出库类型、
仓库集合、数量、状态及状态文案、申请人及申请时间、客户、待办人、出库确认人及日期、物流、
同步状态、关联工单号和备注。
`sourceType`:有调拨单号为 `ALLOCATION`,否则有商城订单号为 `MALL`,其余为 `NORMAL`。
`orderState`:0=待审核、1=被驳回、2=待出库、3=已完成、4=已撤销、5=作废。
列表页的仓库、待办人、出库人均按本页主单 ID 批量查询和内存聚合,禁止逐单 N+1 查询。
## 3. 详情工具
### 3.1 入参
- `id`、`outOrderNo` 至少传一个;同时传入时必须指向同一条可见记录。
- `includeSerials` 默认 `false`。
- `serialLimit` 默认 100、最大 500;只限制返回数量,`serialTotal` 始终返回完整数量。
### 3.2 出参
- `record`:主单字段、来源、状态文案、客户、同步状态和关联工单号。
- `warehouses`:出库明细涉及的仓库 ID/名称去重集合。
- `items`:`parent_id=0` 的物料汇总行,含物料编号、名称、分类、规格、仓库、数量、单价、
总额、出库人及时间。
- `serials`:仅 `includeSerials=true` 返回 SN 子行;另返回 `serialTotal/serialTruncated`。
- `processes`:`schedule_state=2` 的已处理记录,按操作时间、ID 正序,状态码与文案同时返回。
- `address`:商城订单地址或主单地址。
- `logistics`:发货方式、快递公司、运单号、配送人和收货信息。
- `files.application/files.confirmation`:申请图片和确认出库图片。服务不持有 OSS 签名密钥,
返回文件 ID、文件名及存储对象定位信息,不生成临时访问 URL。
- `certificate`:凭证备注与 `file_type=4/in_out_allocation_type=99` 的凭证文件。
调拨出库单允许直接查询,并以 `sourceType=ALLOCATION` 标识。
## 4. 行级权限
列表和详情使用完全相同的主查询权限条件,业务筛选只能缩小结果:
- 总部身份(权限组 `isagent=0`):不过滤。
- 代理商身份(权限组 `isagent=1`):可见范围为以下条件的并集:
- 主单 `agent_id` 属于自己、直属下级或 `warehouse_agent_auth` 授权代管代理;
- 出库明细涉及的仓库,其 `warehouse.agent_id` 或 `warehouse.manager_agent_id` 属于上述代理范围;
- 当前用户存在该主单的未删除审核/处理记录。
- 代理商用户未关联代理商、权限组不存在或配置异常时失败关闭。
详情不存在与无权访问统一抛出 `NOT_FOUND_OR_FORBIDDEN`,防止通过 ID/单号探测数据。
权限通过主表查询中的关联 `EXISTS` 条件完成,不先查询大量 ID 再拼接 `IN`。
## 5. 测试与验收
- 列表:分页上限、各类日期/状态/仓库条件、批量聚合和状态文案。
- 详情:ID/单号参数校验、双条件一致性、调拨单、SN 默认关闭与截断、附件/凭证分组。
- 权限:总部、代理范围、负责管理仓库、处理人、无代理失败关闭;详情查询必须复用相同过滤器。
- 构建:固定 `TZ=Asia/Shanghai` 执行后端测试;不连接生产数据库、不执行部署。