# 供应商管理 — 功能需求

## 1. 文档说明

| 项 | 说明 |
| --- | --- |
| 模块名称 | 供应商管理（交易市场平台） |
| 目标 | 在业务后台维护交易市场**供应商主数据**（主体信息、联系方式、车辆及收费规则），支撑供应商检索、台账维护及后续交易、结算等业务引用 |
| 关联系统 | 业务后台；本模块为供应商**主档维护**，不替代交易开单、对账、支付等下游流程（若需与订单/结算联动，另出集成需求） |
| 修订依据 | 同目录 `供应商管理-草稿.md`、界面原型（`供应商管理.png`） |

本文档仅描述**功能需求与业务规则**，不涉及库表结构、接口路径、请求体字段命名、HTTP 报文及技术栈选型。

---

## 2. 术语与枚举

### 2.1 供应商（一条记录）

- 表示交易市场内的一个**供货/服务主体**（个体户或企业）。  
- 由运营人员在后台**登记与维护**；保存成功后可在列表检索，并供后续业务按编号或名称引用。  
- 单条记录包含：编号、名称、类型、身份识别号、联系方式、经营地点、车辆号牌集合、收费方式及与之关联的费率/标准字段。

### 2.2 供应商类型（单选，必填）

| 类型 | 含义 | 身份识别字段（界面标签） |
| --- | --- | --- |
| **个体户** | 自然人经营主体 | **身份证号** |
| **企业** | 法人或非法人组织主体 | **主体识别号**（统一社会信用代码等，见 **§2.5**） |

切换类型时，身份识别字段的**标签、校验规则**随之切换；已填写的识别号在切换类型后须**重新校验**，不符合新类型规则时拒绝保存并提示。

### 2.3 收费方式（单选，必填）

| 收费方式 | 含义概要 | 关联必填字段 |
| --- | --- | --- |
| **按户计费** | 按「户」为单位计费，不依赖头数与交易额比例 | **无**额外费率/标准字段 |
| **按头计费** | 按牲畜（或等价「头」）数量计费 | **收费标准**（元/头） |
| **按额计费** | 按交易金额比例计费 | **交易费率**、**管理费率**（均为百分比） |

**联动原则（保存时）：**

- 选择 **按户计费**：不校验、不保存「收费标准」「交易费率」「管理费率」的有效值；界面宜**隐藏或清空**上述三项，避免误填残留。  
- 选择 **按头计费**：**收费标准**必填且 &gt; 0；**交易费率、管理费率**不适用，宜隐藏或清空。  
- 选择 **按额计费**：**交易费率、管理费率**均必填，取值范围 **0～100**（单位 **%**，含 0 与 100 是否允许由产品确认，**默认允许 0、不允许超过 100**）；**收费标准**不适用，宜隐藏或清空。

> **说明：** 原型辅助说明中曾出现「‰」表述，与表单「%」展示不一致；**以百分比（%）为准**，全文统一。

### 2.4 供应商编号

- **系统自动生成**，用户**不可手工录入或修改**（新增弹窗中只读展示，修改时只读）。  
- 格式：**2 位数字**字符串，建议左侧补零（如 `01`、`02` … `99`）。  
- **全局唯一**：同一系统内不得重复；编号用尽（如已达 `99`）时拒绝继续新增并提示「供应商编号已达上限，请联系管理员」。  
- 生成时机：用户点击新增保存且校验通过时分配；未保存前可展示「保存后自动生成」类占位。

### 2.5 身份识别号校验（摘要）

| 供应商类型 | 规则摘要 |
| --- | --- |
| 个体户 · 身份证号 | **必填**；18 位居民身份证格式及校验位规则（末位可为 `X`/`x`），与项目全局身份证校验一致 |
| 企业 · 主体识别号 | **必填**；统一社会信用代码 **18 位**（字符集、校验位与项目全局规则一致）；若业务仅采集营业执照注册号，须在评审时单独约定并替换本节 |

### 2.6 车辆号码

- 一条供应商可登记 **0～N 个**号牌（**N 建议上限 10**，评审可调）。  
- 通过「新增一行 / +」增加号牌，每行一个；支持删除单行。  
- 列表与详情中多个号牌以**顿号、逗号或换行**等方式展示，风格与项目列表长文本一致。  
- 单条号牌格式校验与项目全局车牌规则一致（若暂无全局规则：允许中文省份简称 + 字母数字组合，长度宜 **7～8** 位，非法格式拒绝保存）。

### 2.7 平台账号分配

- 列表提供「**分配账号**」操作：为当前供应商创建若依平台登录用户，供其登录业务后台或关联端使用。  
- **默认登录名**：供应商名称的**汉字拼音首字母**（小写，连续拼接）+ 该条记录的**数据库主键 id**（如名称「扎西供应商」、id=12 → `zxgys12`）。  
- **默认角色**：绑定平台角色编号 **103**（供应商端角色，以 `sys_role.role_id` 为准）。  
- **仅可成功分配一次**：`account_assigned=已分配` 后不可再次分配；登录名冲突等失败时**不**标记为已分配，允许在满足前置条件下重试。  
- **删除联动**：逻辑删除供应商时，若已分配账号，**同时删除**关联的 `sys_user`（与畜牧医疗资源管理一致）。

### 2.8 删除与可见性

- 删除采用与项目其他业务台账一致的**逻辑删除**：删除后默认不在列表与常规查询中展示，数据保留供审计。  
- **本期不提供**回收站界面；物理清除须单独审批。  
- 若供应商存在**未结算**的结算单（`settlement_status=待结算`），**禁止删除**并提示「存在未结算的结算单，无法删除」；仅**已完成**结算单不阻止删除。

### 2.9 列表筛选项与记录字段的关系

| 筛选项 | 与记录字段关系 |
| --- | --- |
| 供应商编号 | 与记录中「供应商编号」**完全一致**（精确匹配）；空则不过滤 |
| 供应商名称 | 与记录中「供应商名称」**完全一致**（精确匹配）；空则不过滤 |

---

## 3. 功能范围

**本期实现：**

| 能力 | 说明 |
| --- | --- |
| 供应商列表 | 编号、名称精确筛选；分页；见 **§5.2** |
| 新增供应商 | 录入业务字段；编号自动生成；见 **§5.1** |
| 修改供应商 | 除编号外字段均可改；收费方式联动校验；见 **§5.3** |
| 查看详情 | 只读展示全部业务字段；见 **§5.4** |
| 删除供应商 | 单条删除；见 **§5.5** |
| 分配账号 | 为供应商创建平台用户；每条仅成功一次；见 **§5.6** |
| 工具栏 | 搜索、重置、新增 |

**本期不实现（除非后续单独立项）：**

- 供应商准入审批流、黑名单、资质证照附件上传与到期提醒  
- 供应商批量导入/导出、编号手工指定或跳号规则配置界面  
- 与交易订单、结算单、对账单的自动联动（仅维护主档）  
- 供应商评分、合同管理、银行账户子模块  
- 按区域、收费方式的列表筛选（原型未要求则不做）  

---

## 4. 业务流程概览

```mermaid
flowchart TD
    A[进入供应商管理] --> B{用户操作}
    B -->|登记| C[新增供应商]
    C --> D[选择类型与收费方式]
    D --> E[填写并联动校验]
    E -->|通过| F[系统分配编号并保存]
    E -->|未通过| C
    F --> G[返回列表]
    B -->|检索| H[输入编号/名称]
    H --> I[搜索列表]
    I --> J{行操作}
    J -->|查看| K[只读详情]
    J -->|编辑| L[修改供应商]
    L --> E
    J -->|分配账号| Q[创建平台用户]
    Q --> G
    J -->|删除| M[二次确认]
    M -->|允许| N[逻辑删除]
    M -->|有关联| O[提示不可删]
    N --> G
    K --> I
    B -->|重置| P[清空筛选]
    P --> I
```

**典型使用顺序：**

1. 运营人员**新增**供应商，选择个体户/企业与收费方式，填写身份号、联系方式及按收费方式要求的费率/标准。  
2. 系统**自动分配**两位编号并落库。  
3. 日常按**编号**或**名称**精确查询台账。  
4. 需要供应商登录平台时，对未分配行执行**分配账号**。  
5. 信息变更时**修改**（编号不变）；无效或重复登记**删除**（无关联时）。  
6. 需要核对完整收费规则时**查看**详情。

---

## 5. 详细功能需求

### 5.1 新增供应商

#### 5.1.1 业务字段

| 字段 | 必填 | 规则摘要 |
| --- | --- | --- |
| 供应商编号 | — | **只读**；保存成功后展示系统生成的 2 位数字编号 |
| 供应商名称 | 是 | **1～20** 个字符（与草稿「限制 20 字」一致）；去除首尾空白后非空 |
| 供应商类型 | 是 | **个体户** / **企业**，单选 |
| 身份证号 / 主体识别号 | 是 | 标签随类型切换；校验见 **§2.5** |
| 联系方式 | 是 | **中国大陆手机号**格式校验（11 位、号段与项目全局一致） |
| 经营地点 | 否 | 文本；长度宜 **0～50** 字（有内容时按 1～50 校验） |
| 车辆号码 | 否 | 0～N 个；见 **§2.6** |
| 收费方式 | 是 | **按户计费** / **按头计费** / **按额计费**，单选 |
| 收费标准 | 条件 | **按头计费**时必填；数值 **&gt; 0**；单位展示 **元/头** |
| 交易费率 | 条件 | **按额计费**时必填；**0～100**，单位 **%** |
| 管理费率 | 条件 | **按额计费**时必填；**0～100**，单位 **%** |

#### 5.1.2 界面联动（与原型一致）

| 用户操作 | 界面行为 |
| --- | --- |
| 选择「个体户」 | 身份字段标签为「身份证号」 |
| 选择「企业」 | 身份字段标签为「主体识别号」 |
| 选择「按户计费」 | 隐藏或禁用「收费标准」「交易费率」「管理费率」 |
| 选择「按头计费」 | 显示「收费标准（元/头）」；隐藏或禁用两项费率 |
| 选择「按额计费」 | 显示「交易费率（%）」「管理费率（%）」；隐藏或禁用「收费标准」 |

#### 5.1.3 保存与取消

| 操作 | 行为 |
| --- | --- |
| **确定** | 全量校验通过后保存；分配供应商编号；关闭弹窗并刷新列表 |
| **取消** | 关闭弹窗，不保存 |

#### 5.1.4 校验摘要

| 规则 | 说明 |
| --- | --- |
| 收费方式联动 | 未选收费方式或条件字段缺失/非法时拒绝保存 |
| 必填 | 任一必填为空或仅空白时拒绝保存 |
| 名称唯一 | 若业务要求**供应商名称不可重复**，须在评审时确认；**默认建议名称唯一**，重复时提示「供应商名称已存在」 |
| 身份号唯一 | 若业务要求同一身份识别号不可重复登记，须在评审时确认；**默认建议唯一** |

---

### 5.2 查询供应商列表

#### 5.2.1 筛选

| 条件 | 规则 |
| --- | --- |
| 供应商编号 | 选填；**精确**匹配；空则不过滤 |
| 供应商名称 | 选填；**精确**匹配；空则不过滤 |

支持**编号 + 名称**组合筛选（同时满足）。

#### 5.2.2 列表规则

- 默认每页 **20** 条。  
- 默认排序：**供应商编号升序**（或 **创建时间倒序**，产品择一后全文一致；**默认建议编号升序**便于人工查找）。  
- 工具栏：**搜索**、**重置**、**新增**。

#### 5.2.3 展示列（与原型一致）

供应商编号、供应商名称、供应商类型、身份证号/主体识别号、联系方式、经营地点、车辆号码、收费方式、**账号分配**、操作。

| 列 | 展示说明 |
| --- | --- |
| 供应商类型 | 中文：个体户 / 企业 |
| 身份证号/主体识别号 | 列表统一列展示对应类型的识别号；无则「—」 |
| 经营地点 | 过长时省略，详情可看全 |
| 车辆号码 | 多个号牌合并展示；无则「—」 |
| 收费方式 | 中文：按户计费 / 按头计费 / 按额计费 |
| 账号分配 | 未分配显示「否」；已分配显示「是」及登录名（若有） |
| 操作 | 查看、编辑、删除；**未分配**时显示「分配账号」（权限见 **§6**） |

> **说明：** 列表可不单独展示「收费标准」「交易费率」「管理费率」列，以免过宽；完整数值在**详情**中展示（见 **§5.4**）。若产品要求在列表增加摘要列（如「10元/头」或「交易2%/管理1%」），可评审后补充。

---

### 5.3 修改供应商

| 项 | 要求 |
| --- | --- |
| 入口 | 列表「编辑」；详情页可提供「编辑」快捷入口（与列表等价） |
| 不可改字段 | **供应商编号**（只读） |
| 可改范围 | **§5.1.1** 中其余全部字段 |
| 类型/收费方式变更 | 切换后按 **§5.1.2** 联动显示与 **§2.3** 重新校验；不适用字段须清空，避免脏数据 |
| 校验 | 与新增 **§5.1.4** 一致 |
| 保存 | **确定** 保存并刷新列表；**取消** 放弃修改 |

---

### 5.4 查看供应商详情

| 项 | 要求 |
| --- | --- |
| 展示内容 | **§5.1.1** 全部字段；按收费方式展示适用的收费标准或费率；车辆号码全文展示；**是否已分配账号**、**已分配登录名**（若有） |
| 只读 | 全部字段不可编辑 |
| 操作 | 可提供 **编辑**、**删除**（权限与列表一致）；**未分配**时可提供 **分配账号**；**关闭** 返回列表 |
| 收费规则展示示例 | 按头：`收费标准：XX 元/头`；按额：`交易费率：XX%`；`管理费率：XX%`；按户：仅展示收费方式，不展示费率行 |

宜含**创建人、创建时间、修改人、修改时间**等审计信息（与项目其他台账一致）。

---

### 5.5 删除供应商

| 项 | 要求 |
| --- | --- |
| 入口 | 列表「删除」；详情可提供「删除」 |
| 确认 | 删除前**二次确认**（宜展示编号、名称） |
| 删除方式 | **逻辑删除**（**§2.7**） |
| 关联约束 | 存在**未结算**结算单时**拒绝删除**，提示「存在未结算的结算单，无法删除」 |
| 批量删除 | **本期不提供** |

---

## 6. 操作与权限矩阵（汇总）

在**已授权**前提下：

| 操作 | 列表/详情 | 说明 |
| --- | --- | --- |
| 查询列表、筛选 | ✓ | 需列表查询权限 |
| 新增 | 工具栏「新增」 | 需新增权限 |
| 查看 | 行内/详情 | 需查看权限 |
| 修改 | 行内/详情 | 需修改权限；编号不可改 |
| 删除 | 行内/详情 | 需删除权限；受关联约束 |
| 分配账号 | 行内/详情 | 需分配账号权限；**仅未分配**行可用 |

无权限的按钮**不展示或禁用**（与若依按钮权限惯例一致）。

---

## 7. 收费方式与字段适用对照（自查）

| 收费方式 | 收费标准 | 交易费率 | 管理费率 |
| --- | --- | --- | --- |
| 按户计费 | 不适用 | 不适用 | 不适用 |
| 按头计费 | **必填**（元/头，&gt;0） | 不适用 | 不适用 |
| 按额计费 | 不适用 | **必填**（%，0～100） | **必填**（%，0～100） |

---

## 8. 异常与提示（业务侧）

面向使用方的提示须**可读、可区分**，例如：

| 场景 | 提示方向（示例） |
| --- | --- |
| 手机号格式错误 | 请输入正确的手机号码 |
| 身份证/主体识别号错误 | 请输入正确的身份证号 / 主体识别号 |
| 收费方式未选 | 请选择收费方式 |
| 按头未填收费标准 | 请填写收费标准（元/头） |
| 按额未填费率 | 请填写交易费率 / 管理费率 |
| 费率超范围 | 费率须在 0～100% 之间 |
| 名称/身份号重复 | 供应商名称已存在 / 该身份识别号已登记 |
| 编号用尽 | 供应商编号已达上限，请联系管理员 |
| 删除受阻 | 存在未结算的结算单，无法删除 |
| 车牌格式错误 | 请输入正确的车辆号码 |
| 重复分配账号 | 该供应商已分配账号，不可重复分配 |
| 账号创建失败 | 账号创建失败：登录名已存在 / 用户保存失败 |

**本期不涉及**统一 HTTP 响应结构、错误码表等技术约定。

---

## 9. 非功能需求（摘要）

| 项 | 要求 |
| --- | --- |
| 易用性 | 类型、收费方式切换时联动及时，避免用户填写无效字段 |
| 一致性 | 校验规则、逻辑删除、分页默认值与项目其他台账模块保持一致 |
| 安全 | 联系方式、身份识别号在列表是否脱敏由项目统一规范（**默认列表不脱敏、按角色可扩展脱敏**） |

---

## 10. 修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0 | 初稿：依据草稿与原型整理；明确收费方式联动、编号自动生成、类型与身份字段切换；剔除接口与技术栈描述 |
| 1.1 | 新增 §2.7、§5.6 分配账号：拼音首字母+id 登录名、角色 103、仅一次；删除联动删平台用户 |
| 1.3 | §2.8、§5.5：存在未结算结算单时禁止删除 |
