226 lines
11 KiB
Markdown
226 lines
11 KiB
Markdown
# 配送点管理系统需求
|
||
|
||
## 1. 文档目的
|
||
|
||
本文以 `docs/05-平台总后台需求.md` 的资源、权限、状态机和验收口径为基线,定义配送点管理系统的实施范围。
|
||
|
||
- 前端:`frontend/delivery_admin`。
|
||
- 后端:复用 `backend/api`,业务逻辑位于 `internal/logic/delivery`。
|
||
- API 前缀:`/heqi/delivery/v1`。
|
||
- 前端开发端口:`5176`。
|
||
- 数据模型:复用现有 `backend/api/internal/models`,本期不新增角色、菜单、邀请、库存或质控表。
|
||
|
||
## 2. 系统定位与边界
|
||
|
||
配送点管理系统面向配送点管理员,负责当前配送点的人员、用户、合同、订单调度、财务和邀请注册。所有资源必须以后端 JWT 中的 `delivery_basic_identity` 为数据范围。
|
||
|
||
本期包含:
|
||
|
||
- 本点运营概览及订单状态报表。
|
||
- 配送点资料只读视图。
|
||
- 本点配送人员、账号和资质管理。
|
||
- 本点用户、地址和唯一服务关系管理。
|
||
- 本点用户配送合同、合同气瓶和修订记录。
|
||
- 创建配送订单、调整金额、分配、回收及本点改派。
|
||
- 订单异常、恢复和取消。
|
||
- 本点钱包、银行卡、支付、流水、退款、充值、提现和结算。
|
||
- 基于所属气站及当前配送点 identity 的邀请二维码。
|
||
|
||
本期明确不包含:
|
||
|
||
- 库存、配送仓、库存流水、调拨和盘点。
|
||
- 电商商品、购物车、商城订单、评价和营销。
|
||
- 营业设置、班次、组织变更申请、独立质控记录、服务记录、用户变更申请和对账异议。
|
||
- 平台治理、生产设备和客服工单。
|
||
- Web 后台补录配送、定位、扫码、签收、收款或现场证据。
|
||
|
||
## 3. 配置、身份与鉴权
|
||
|
||
### 3.1 全局配置
|
||
|
||
气站端、配送点端和平台钱包共用:
|
||
|
||
```yaml
|
||
Global:
|
||
UserRegisterURL: http://localhost:5174/register
|
||
ManualRechargeMaxAmount: 100000000
|
||
```
|
||
|
||
充值上限单位为分。启动时必须校验注册地址为有效 HTTP/HTTPS URL,充值上限大于零。
|
||
|
||
### 3.2 登录与会话
|
||
|
||
- 配送点管理员账号由平台或所属气站创建。
|
||
- 仅启用、关联启用配送点且 `role_code = admin` 的 `delivery_account` 可以登录。
|
||
- JWT 客户端固定为 `delivery_admin`,与平台和气站管理端会话隔离。
|
||
- 菜单由后端 `delivery_menu` 接口按 `role_code` 返回,前端登录后据此渲染。
|
||
- 修改本人密码必须校验当前密码;新密码只要求不少于 6 位。
|
||
- 配送人员和用户账号新增或重置密码时同样只要求不少于 6 位。
|
||
- 不新增角色表或菜单表。
|
||
|
||
### 3.3 数据身份与归属
|
||
|
||
- HTTP、前端、日志和审计统一使用 `identity`,不暴露数据库自增 ID。
|
||
- 配送点只能访问 `delivery_basic_id` 为当前配送点的人员、用户关系、合同和订单。
|
||
- 当前配送点所属气站由后端解析,前端不能提交其他气站或配送点改变归属。
|
||
- 每个用户只能存在一条未归档服务关系,并固定归属一个气站和一个配送点。
|
||
- 所有删除均为归档;订单、合同修订、资金流水、轨迹、签收和支付事实不得物理删除。
|
||
|
||
## 4. 菜单与功能
|
||
|
||
### 4.1 数据概述
|
||
|
||
| 菜单 | 能力 |
|
||
| --- | --- |
|
||
| 运营概览 | 本点配送人员、用户、合同和订单数量 |
|
||
| 订单报表 | 本点订单状态分布 |
|
||
|
||
报表只使用当前配送点真实数据,不混入其他配送点或电商数据。
|
||
|
||
### 4.2 配送点资料
|
||
|
||
- 查看当前配送点编码、名称、负责人、地址、所属气站和状态。
|
||
- 配送点不能在本系统修改组织主数据、归属气站或状态。
|
||
|
||
### 4.3 配送人员管理
|
||
|
||
- 配送点可创建、编辑、启停、重置密码和归档本点配送人员。
|
||
- 新建人员的 `role_code` 由服务端固定为 `delivery`。
|
||
- 人员的气站及配送点归属由服务端固定为当前范围。
|
||
- 资质支持新增、编辑、启停和归档。
|
||
- 删除均为归档;存在未完成订单时禁止归档人员。
|
||
- 不允许创建安装、运维、仓管、调度员或质控角色账号。
|
||
|
||
### 4.4 用户管理
|
||
|
||
- 支持本点用户新增、编辑、启停、重置密码和归档。
|
||
- 创建用户时在同一事务内建立所属气站与当前配送点服务关系。
|
||
- 支持本点用户地址新增、编辑、启停和归档。
|
||
- 配送点不能将用户迁移到其他配送点或其他气站。
|
||
- 归档用户时同时归档地址及服务关系。
|
||
- 用户存在未完成订单、未关闭工单、钱包余额、可提现余额或待处理提现时禁止归档。
|
||
|
||
### 4.5 合同管理
|
||
|
||
- 配送点可完整管理当前配送点用户的配送合同。
|
||
- 支持创建、草稿编辑、启用、续签和终止。
|
||
- 支持绑定和受控解绑当前用户已有气瓶。
|
||
- 合同修订记录只读。
|
||
- 服务端强制合同所属气站和配送点为当前范围。
|
||
- 不得查看或操作所属气站下其他配送点的合同。
|
||
|
||
### 4.6 配送订单与调度
|
||
|
||
- 配送点可根据当前配送点生效合同创建订单。
|
||
- 服务端强制订单创建方为当前配送点。
|
||
- 商品金额依据合同气瓶单价由服务端计算。
|
||
- 配送点可分配、回收或在本点配送人员之间改派。
|
||
- 可选配送人员必须同时满足:
|
||
- 属于当前配送点及所属气站;
|
||
- 账号启用且未归档;
|
||
- `role_code = delivery`;
|
||
- `work_status = on_duty`;
|
||
- 至少有一条启用且未过期的资质。
|
||
- 不支持跨配送点调度。
|
||
- 配送点后台可执行:创建、分配、回收、改派、调整金额、标记异常、恢复、取消。
|
||
- 配送点后台不得执行:开始罐装、罐装完成、开始配送、到达、等待签收、完成订单。
|
||
- App 产生的定位、扫码、照片、视频、签名、收款、签收和现场证据只读,后台不得补造或修改。
|
||
|
||
### 4.7 订单金额调整
|
||
|
||
- 仅待处理或已分配订单允许调整。
|
||
- 存在成功支付记录后禁止调整。
|
||
- 只允许修改配送费和优惠金额。
|
||
- 商品金额保持合同计算结果。
|
||
- 应付金额由服务端重新计算:
|
||
|
||
```text
|
||
应付金额 = 商品金额 + 配送费 - 优惠金额
|
||
```
|
||
|
||
- 配送费和优惠金额不得为负,应付金额必须大于零,并校验整数溢出。
|
||
- 每次调整必须填写原因,记录调整操作人和不可变历史。
|
||
- 前端不得直接提交或覆盖商品金额和最终应付金额。
|
||
|
||
### 4.8 财务管理
|
||
|
||
- 本点钱包、银行卡、支付记录、钱包流水、退款和结算结果只读。
|
||
- 配送点可以创建提现申请,但不能审批、驳回或标记完成。
|
||
- 配送点管理员可以给当前配送点钱包自主充值。
|
||
- 充值必须填写幂等号、金额、原因和备注。
|
||
- 单笔充值金额必须大于零且不超过 `Global.ManualRechargeMaxAmount`。
|
||
- 充值在数据库事务内增加钱包余额并创建不可变 `wallet_record`。
|
||
- 自主充值不增加可提现余额,防止充值后直接提现。
|
||
- 充值流水记录配送点管理员 identity 和显示名称。
|
||
- 禁止给其他配送点充值,禁止修改或删除充值流水。
|
||
- 现有对账模型没有配送点归属字段,因此本期不展示平台全局对账记录,也不新增对账异议模型。
|
||
|
||
### 4.9 邀请注册
|
||
|
||
- 邀请二维码不持久化,不新增邀请表。
|
||
- 后端基于 `Global.UserRegisterURL` 实时生成:
|
||
|
||
```text
|
||
register?gas_identity={所属气站identity}&delivery_identity={当前配送点identity}
|
||
```
|
||
|
||
- 前端生成二维码并支持下载 PNG。
|
||
- 不提供启停、过期、扫码记录和邀请统计。
|
||
- 二维码不得携带数据库 ID、密码或 JWT。
|
||
|
||
## 5. 资源页面模式
|
||
|
||
| 资源 | 模式 | 说明 |
|
||
| --- | --- | --- |
|
||
| `delivery_profile` | `readonly` | 当前配送点资料 |
|
||
| `staff_account`、`staff_credential` | `writable` | 仅配送角色,删除为归档 |
|
||
| `user_account`、`user_address` | `writable` | 服务关系由服务端事务维护 |
|
||
| `gasorder_contract` | `managed` | 生命周期使用专用动作 |
|
||
| `gasorder_contract_product` | `append_only` | 解绑使用专用动作 |
|
||
| `gasorder_contract_revision`、`product_info` | `readonly` | 合同历史及可选气瓶 |
|
||
| `gasorder_basic` | `append_only` | 创建及专用调度/状态动作 |
|
||
| `wallet_basic`、`wallet_bank`、`wallet_payment`、`wallet_record`、`wallet_refund` | `readonly` | 当前配送点钱包范围 |
|
||
| `wallet_recharge`、`wallet_apply_cash` | `append_only` | 充值及提现申请 |
|
||
| `fin_settlement` | `readonly` | 当前配送点结算结果 |
|
||
|
||
## 6. 菜单输出
|
||
|
||
菜单定义位于 `backend/api/internal/logic/delivery/menu.go`,仅 `admin` 返回:
|
||
|
||
1. 数据概述:运营概览、订单报表。
|
||
2. 配送点资料:本点资料。
|
||
3. 配送人员管理:新增配送人员、配送人员列表;资质为隐藏子资源。
|
||
4. 用户管理:用户账户;地址和服务关系为隐藏子资源。
|
||
5. 合同管理:配送合同;合同气瓶、修订记录、可选气瓶为隐藏子资源。
|
||
6. 配送订单:创建订单、订单列表;分配、状态、轨迹、签收、支付记录为隐藏只读子资源。
|
||
7. 财务管理:钱包、银行卡、支付记录、钱包流水、退款记录、钱包充值、提现申请、结算结果。
|
||
8. 邀请注册:邀请二维码。
|
||
|
||
菜单中不得出现库存、配送仓、电商、平台治理、生产设备、客服工单或独立质控模块。
|
||
|
||
## 7. 接口与安全要求
|
||
|
||
- 匿名接口仅允许登录,其余接口必须验证 JWT、客户端、角色、账号状态和当前配送点。
|
||
- 路由、菜单、资源模式、后端契约和前端页面必须同步。
|
||
- 状态流转、金额、归属、调度资质、用户唯一服务关系和归档阻断均由服务端校验。
|
||
- 密码、银行卡密文和证件密文不得返回前端。
|
||
- 手机号、地址、定位、合同文件及现场证据遵循统一敏感数据保护规则。
|
||
- 订单创建、金额调整、分配、回收、改派、充值和提现必须记录操作人及原因。
|
||
- 充值、订单创建和提现使用幂等号,重复请求不得重复生成业务事实。
|
||
- 前端菜单隐藏和按钮禁用不构成权限控制。
|
||
|
||
## 8. 验收标准
|
||
|
||
1. 配送点管理员登录后由后端菜单渲染前端,非 `admin` 角色无菜单。
|
||
2. 平台、气站和配送点 JWT 互相隔离。
|
||
3. 所有业务资源只能访问当前配送点数据。
|
||
4. 配送人员、用户、合同、订单调度、财务和邀请功能可用。
|
||
5. 系统中没有库存、配送仓、电商和无模型支撑的规划功能。
|
||
6. 调度严格校验本点归属、配送角色、在岗状态和有效资质。
|
||
7. 金额调整只影响配送费和优惠金额,成功支付后不可调整。
|
||
8. Web 后台不暴露罐装、开始配送、到达、签收或完成订单动作。
|
||
9. 自主充值只增加余额、不增加可提现余额,并产生不可变资金流水。
|
||
10. 用户、人员等删除均为归档,并正确执行未完成业务阻断。
|
||
11. 邀请二维码实时生成且不持久化。
|
||
12. 后端测试、权限路由测试、契约检查、前端类型检查和生产构建全部通过。
|