Files
shanxia2.0/openspec/changes/dibang-migration/specs/dibang-backend/spec.md
T
2026-06-10 22:59:34 +08:00

84 lines
4.0 KiB
Markdown

## ADDED Requirements
### Requirement: 地磅后端子域路由注册
系统 SHALL 在 shanxia2.0 Python 后端提供 `db` 子域 API,并在 `app/main.py` 与 `app/api/__init__.py` 注册路由。所有业务接口 SHALL 经过门户鉴权中间件,且查询与写入 SHALL 按当前用户 `tenant_no` 隔离。
#### Scenario: 路由可访问
- **WHEN** 已登录管理员请求地磅计划列表 API
- **THEN** 返回 `{ code: 0, data: ... }` 且仅含当前租户数据
### Requirement: 车牌管理 CRUD
系统 SHALL 提供 `db_vehicle` 的列表(分页)、详情、新增、修改、软删除 API。车牌号在同一租户下 SHALL 唯一(未删除记录)。
#### Scenario: 新增车牌
- **WHEN** 用户提交车牌号「皖A12345」
- **THEN** 创建成功并返回 UUID 主键,`del_flag=0`
#### Scenario: 重复车牌拒绝
- **WHEN** 用户提交已存在且未删除的车牌号
- **THEN** 返回业务错误提示车牌已存在
### Requirement: 计划管理 CRUD 与计划号生成
系统 SHALL 提供计划的分页列表、详情、新增、修改、软删除 API。新增计划时 SHALL 自动生成 `plan_no`(格式与原系统一致:`SX-` + 时间戳序号)。计划 SHALL 支持 `auto_generate_enabled` 等自动生成相关字段的读写。
#### Scenario: 创建计划
- **WHEN** 用户创建入库计划并填写产品名称、计划数量
- **THEN** 系统生成唯一 `plan_no` 并持久化,`execution_status` 为初始待执行状态
### Requirement: 出入库管理 CRUD
系统 SHALL 提供出入库单的分页列表、详情、新增、修改、软删除 API,字段语义与原 `inbound_outbound` 一致(含 `partner_company`、`quantity` 吨、`status` 等)。
#### Scenario: 查询出入库列表
- **WHEN** 用户按日期范围筛选出入库列表
- **THEN** 返回匹配记录,默认按 `create_time DESC` 排序
### Requirement: 地磅单管理与联动事务
系统 SHALL 提供地磅单的列表、详情、新增、修改、作废 API。保存地磅单时 SHALL 在同一数据库事务内:更新关联计划的 `executed_quantity` 与 `execution_status`;创建或更新关联 `db_inbound_outbound` 记录;回写 `purchase_plan_id` 与 `inbound_outbound_id`。作废地磅单 SHALL 设置 `is_voided=1` 并回滚已计入计划的执行量(若适用)。
#### Scenario: 保存地磅单联动计划
- **WHEN** 用户保存一张关联计划的地磅单且净重有效
- **THEN** 关联计划的 `executed_quantity` 增加,`last_weighing_slip_id` 更新为当前地磅单 id
#### Scenario: 作废地磅单
- **WHEN** 用户对已保存地磅单执行作废
- **THEN** 该记录 `is_voided=1`,计划执行量相应回滚,列表默认不展示作废单(或按原系统规则过滤)
### Requirement: 仪表盘统计 API
系统 SHALL 提供仪表盘聚合 API,至少包含与原系统对等的统计维度(如计划/地磅/出入库数量概览、近期趋势),数据 SHALL 按 `tenant_no` 过滤。
#### Scenario: 仪表盘数据
- **WHEN** 用户打开地磅仪表盘页并请求统计 API
- **THEN** 返回当前租户下的汇总指标 JSON
### Requirement: 计划按月自动生成任务
系统 SHALL 提供定时任务,每月对 `auto_generate_enabled=1` 且未过 `auto_generate_end_month` 的计划复制生成新月计划,并更新 `auto_generate_last_month` 以防重复,逻辑与原 `auto-create-plan` 脚本等价。
#### Scenario: 月初自动生成
- **WHEN** 定时任务在新区间第一天运行且存在符合条件的模板计划
- **THEN** 生成新计划记录且模板计划的 `auto_generate_last_month` 更新为当前月
### Requirement: 主数据下拉只读 CRM
计划/地磅/出入库表单所需产品、客户选项 SHALL 通过已有 CRM API 获取;后端 SHALL NOT 新建 cargos/companies 表或对应 CRUD 路由。
#### Scenario: 产品下拉数据源
- **WHEN** 前端请求 CRM 产品列表用于地磅单表单
- **THEN** 使用现有 CRM 产品 API,选中后仅将 `product_name` 写入地磅业务字段