# 运营平台服务商配置 - PRD

## 文档信息

| 项目 | 内容 |
|------|------|
| 文档版本 | v1.2.0 |
| 创建日期 | 2026-02-26 |
| 更新日期 | 2026-03-09 |
| 模块名称 | 运营平台服务商配置 |
| 文档状态 | 待评审 |

---

## 一、模块概述

### 1.1 模块定位

运营平台服务商配置是支付中台的基础配置模块,负责管理运营平台的基础信息,以及运营平台在各支付服务商申请的服务商商户信息。作为支付中台的配置层,为小区支付配置和支付交易处理提供服务商凭证和接口信息。

### 1.2 核心功能

1. **运营平台管理** - 管理运营平台基础信息
2. **支付服务商基础信息管理** - 管理支付服务商基础信息 (微信、支付宝、易宝等)
3. **运营平台服务商配置** - 为运营平台配置服务商商户参数 (服务商商户号、密钥等)
4. **一体化配置** - 支持运营平台和服务商一站式配置 (v1.2.0新增)
5. **证书有效期管理** - 证书到期提醒和自动预警 (v1.2.0新增)
6. **配置健康检查** - 定时检测服务商连通性 (v1.2.0新增)

### 1.3 使用角色

- **系统管理员** - 管理运营平台
- **运营平台管理员** - 配置本平台的服务商参数
- **超级管理员** - 查看和管理所有配置

### 1.4 v1.2.0版本说明

**本次优化:**
- 支持一体化配置流程：创建运营平台时可同时配置服务商
- 服务商配置改为卡片式展示，直观显示配置状态
- 新增证书/密钥有效期管理，支持到期提醒
- 新增配置健康检查，定时检测连通性
- 新增批量测试连接功能
- 支持从其他平台复制配置

---

## 二、功能详细说明

### 2.1 运营平台管理 (v1.1新增)

#### 2.1.1 功能描述

系统管理员创建和管理运营平台基础信息。运营平台是管理多个小区的运营主体,每个运营平台独立管理自己的支付服务商配置。

#### 2.1.2 业务规则

1. **唯一性约束**
   - 运营平台代码(platform_code)只能配置一次
   - 运营平台代码建议使用英文简称,如:OP01, OP02

2. **状态管理**
   - 新建运营平台默认状态为"已启用"
   - 停用运营平台后,该平台下的小区无法发起新支付
   - 停用不影响已有订单的查询和退款

3. **数据初始化**
   - 系统首次部署时创建默认运营平台
   - 用于兼容v1.0数据迁移

#### 2.1.3 页面交互

**运营平台列表页**
- 展示所有运营平台
- 显示字段:运营平台代码、运营平台名称、已配置服务商数量、配置状态、创建时间
- 配置状态显示规则 (v1.2.0新增):
  - 🟢 正常：所有服务商配置正常
  - 🟡 警告：有证书即将到期（30天内）
  - 🔴 异常：有服务商连接失败或证书已过期
  - ⚪ 未配置：未配置任何服务商
- 支持按名称、状态筛选
- 支持启用/停用操作
- 支持查看详情、编辑、删除(无关联数据时可删除)

**新增运营平台 - 一体化配置 (v1.2.0优化)**

采用一体化表单，创建运营平台时可同时配置服务商：

```
┌─────────────────────────────────────────────────────────────┐
│  新建运营平台                                                │
├─────────────────────────────────────────────────────────────┤
│  基础信息                                                    │
│  ├─ 平台代码*: [OP_SOUTH        ]                           │
│  ├─ 平台名称*: [华南运营平台     ]                           │
│  └─ 备注说明:  [负责华南区域小区  ]                          │
├─────────────────────────────────────────────────────────────┤
│  服务商配置（可选，也可稍后配置）                              │
│  ┌───────────────────────────────────────────────────────┐  │
│  │ ☑ 微信支付                              [展开配置 ▼]  │  │
│  │   商户号*: [1900001234  ]                              │  │
│  │   应用ID:  [wx_xxx      ]                              │  │
│  │   密钥*:   [••••••••    ] [显示]                       │  │
│  │   证书:    [选择文件...]   到期日: [2027-03-01]        │  │
│  │   沙箱模式: ○ 开启  ● 关闭                              │  │
│  ├───────────────────────────────────────────────────────┤  │
│  │ ☑ 支付宝                                [展开配置 ▼]  │  │
│  │   商户号*: [2088xxx     ]                              │  │
│  │   ...                                                  │  │
│  ├───────────────────────────────────────────────────────┤  │
│  │ ☐ 易宝支付                              [未配置]      │  │
│  ├───────────────────────────────────────────────────────┤  │
│  │ ☐ 银联支付                              [未配置]      │  │
│  └───────────────────────────────────────────────────────┘  │
│                                                             │
│  [从其他平台复制配置...]                                     │
│                                                             │
│              [取消]  [保存草稿]  [保存并验证]               │
└─────────────────────────────────────────────────────────────┘
```

- 勾选服务商后展开配置表单，未勾选的折叠隐藏
- 支持"保存草稿"，配置未完成可暂存
- "保存并验证"一键测试所有服务商连通性
- "从其他平台复制配置"快速复用已有配置

**编辑运营平台**
- 基础信息区可修改（代码除外）
- 服务商配置在独立Tab中管理

**详情页**
- 展示运营平台完整信息
- 展示关联的服务商配置列表（卡片式）
- 展示关联的小区列表
- 支持快速编辑、启用/停用

#### 2.1.4 表单验证

| 字段 | 验证规则 |
|------|---------|
| 运营平台代码 | 必填,仅支持字母数字下划线,2-32位 |
| 运营平台名称 | 必填,2-100字符 |

#### 2.1.5 操作提示

| 操作 | 提示信息 |
|------|---------|
| 保存成功 | "运营平台保存成功" |
| 保存失败 | "保存失败:[具体错误原因]" |
| 停用确认 | "停用后该平台下的小区将无法发起新支付,确认停用?" |
| 删除确认 | "删除后数据不可恢复,确认删除?" |
| 删除失败 | "该运营平台已被使用,无法删除" |

---

### 2.2 支付服务商管理

#### 2.2.1 功能描述

运营平台管理员在系统中管理支付服务商基础信息。v1.1版本中,支付服务商只存储基础信息,不再存储平台配置。

#### 2.2.2 业务规则

1. **唯一性约束**
   - 同一服务商代码(provider_code)只能配置一次

2. **状态管理**
   - 新建服务商默认状态为"已启用"
   - 停用服务商后,使用该服务商的小区无法发起新支付
   - 停用不影响已有订单的查询和退款

3. **数据调整(v1.1)**
   - 删除平台商户号、平台应用ID、平台密钥、平台证书、接口基础地址、沙箱模式等字段
   - 这些配置移至运营平台服务商配置表

#### 2.2.3 页面交互

**列表页**
- 展示所有支付服务商
- 显示字段:服务商名称、服务商代码、服务商类型、状态、创建时间
- 支持按服务商名称、状态筛选
- 支持启用/停用操作
- 支持查看详情、编辑、删除(无关联数据时可删除)

**新增/编辑页**
- 基础信息区
  - 服务商代码(必填,下拉选择:WECHAT/ALIPAY/YEEPAY/BANK等)
  - 服务商名称(必填,根据代码自动填充,可修改)
  - 服务商类型(必填,单选:第三方支付/银行)

- 其他
  - 备注说明(可选,文本域)

- 操作按钮
  - 保存:保存配置
  - 取消:返回列表

**详情页**
- 展示服务商完整信息
- 展示关联的支付方式列表
- 展示关联的业务场景列表
- 展示关联的运营平台配置列表 (v1.1新增)
- 支持快速编辑、启用/停用

#### 2.2.4 表单验证

| 字段 | 验证规则 |
|------|---------|
| 服务商代码 | 必填,仅支持大写字母和下划线 |
| 服务商名称 | 必填,2-50字符 |

#### 2.2.5 操作提示

| 操作 | 提示信息 |
|------|---------|
| 保存成功 | "支付服务商配置保存成功" |
| 保存失败 | "保存失败:[具体错误原因]" |
| 停用确认 | "停用后使用该服务商的小区将无法发起新支付,确认停用?" |
| 删除确认 | "删除后数据不可恢复,确认删除?" |
| 删除失败 | "该服务商已被使用,无法删除" |

---

### 2.3 运营平台服务商配置 (v1.1新增)

#### 2.3.1 功能描述

运营平台管理员为本运营平台配置服务商的平台商户号、平台应用ID、平台密钥等参数。每个运营平台可以配置多个服务商,每个服务商在每个运营平台下只能配置一次。

#### 2.3.2 业务规则

1. **唯一性约束**
   - 同一运营平台下,同一服务商只能配置一次 (platform_id + provider_id唯一)
   - 平台商户号(platform_merchant_no)全局唯一

2. **密钥安全**
   - 密钥和证书必须加密存储
   - 密钥显示时脱敏处理(显示前4位和后4位)
   - 修改密钥需要二次确认

3. **沙箱环境**
   - 支持配置沙箱模式用于测试
   - **沙箱模式下，系统默认支付金额为0.01元（1分钱），方便测试支付流程**
   - 沙箱模式下的订单需明确标识"测试订单"
   - 沙箱模式开关在服务商配置界面可控制

4. **应用信息关联**
   - AppID等小程序/应用相关信息从"运营平台及应用管理"模块获取
   - 支付配置只关注商户号、密钥、证书等纯支付相关配置
   - 回调URL等代码层配置由系统自动处理，无需在界面配置

4. **状态管理**
   - 停用配置后,该运营平台无法使用该服务商发起新支付
   - 停用不影响已有订单

#### 2.3.3 页面交互

**在运营平台详情页中展示和管理**

**运营平台详情页 - 服务商配置Tab - 卡片式布局 (v1.2.0优化)**

采用卡片式布局展示服务商配置，直观显示状态：

```
┌─────────────────────────────────────────────────────────────────────────┐
│  华南运营平台 - 服务商配置                [+ 添加服务商] [批量测试连接]  │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  ┌─────────────────────┐  ┌─────────────────────┐  ┌─────────────────┐  │
│  │  🟢 微信支付        │  │  🟢 支付宝          │  │  🟡 易宝支付    │  │
│  │  ────────────────  │  │  ────────────────  │  │  ────────────── │  │
│  │  商户号: 190****34  │  │  商户号: 208****01  │  │  商户号: yb_*** │  │
│  │  状态: 正常         │  │  状态: 正常         │  │  状态: 证书即将 │  │
│  │                     │  │                     │  │        到期     │  │
│  │  最近验证: 2小时前  │  │  最近验证: 2小时前  │  │  到期: 15天后   │  │
│  │  ────────────────  │  │  ────────────────  │  │  ────────────── │  │
│  │  [验证] [编辑] [⋮] │  │  [验证] [编辑] [⋮] │  │  [续期] [编辑]  │  │
│  └─────────────────────┘  └─────────────────────┘  └─────────────────┘  │
│                                                                         │
│  ┌─────────────────────┐                                                │
│  │  🔴 银联支付        │  图例：🟢 正常  🟡 警告  🔴 异常  ⚪ 停用     │
│  │  ────────────────  │                                                │
│  │  商户号: union_***  │  警告条件：证书30天内到期                      │
│  │  状态: 连接失败     │  异常条件：连接失败或证书已过期                 │
│  │                     │                                                │
│  │  最近验证: 失败     │                                                │
│  │  ────────────────  │                                                │
│  │  [重试] [编辑] [⋮] │                                                │
│  └─────────────────────┘                                                │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

**卡片操作菜单 [⋮]**
- 查看详情
- 测试连接
- 复制配置
- 停用/启用
- 删除

**新增/编辑服务商配置(弹窗)**
- 选择服务商
  - 支付服务商(必填,下拉选择,仅显示已启用的服务商)

- 平台配置区
  - 平台商户号(必填)
  - 平台应用ID(可选,微信/支付宝需填)
  - 平台密钥(必填,密码框,支持查看/隐藏)
  - 平台证书(可选,文件上传)
  - 证书到期日期(可选,日期选择,用于到期提醒) (v1.2.0新增)

- 接口配置区
  - 接口基础地址(必填,默认提供常用地址)
  - 沙箱模式(开关,默认关闭)

- 其他
  - 备注说明(可选,文本域)

- 操作按钮
  - 保存:保存配置
  - 测试连接:验证配置是否正确(调用服务商测试接口)
  - 取消:关闭弹窗

**批量测试连接 (v1.2.0新增)**
- 一键测试该运营平台下所有服务商的连通性
- 显示测试进度和结果汇总
- 失败项高亮显示并提供快捷修复入口

#### 2.3.4 表单验证

| 字段 | 验证规则 |
|------|---------|
| 支付服务商 | 必填,必须选择已启用的服务商 |
| 平台商户号 | 必填,最长64位,字母数字组合 |
| 平台应用ID | 可选,最长64位 |
| 平台密钥 | 必填,最长512位 |
| 接口基础地址 | 必填,URL格式验证 |

#### 2.3.5 操作提示

| 操作 | 提示信息 |
|------|---------|
| 保存成功 | "服务商配置保存成功" |
| 保存失败 | "保存失败:[具体错误原因]" |
| 测试连接成功 | "连接测试成功,配置正确" |
| 测试连接失败 | "连接测试失败:[具体错误]" |
| 停用确认 | "停用后该运营平台将无法使用该服务商,确认停用?" |
| 删除确认 | "删除后数据不可恢复,确认删除?" |
| 删除失败 | "该服务商配置已被使用,无法删除" |
| 商户号重复 | "该平台商户号已被使用" |
| 证书即将到期 | "证书将于X天后到期，请及时更新" |
| 批量测试完成 | "测试完成：成功X个，失败X个" |

---

### 2.4 证书有效期管理 (v1.2.0新增)

#### 2.4.1 功能描述

管理服务商证书的有效期，提供到期提醒和自动预警，避免证书过期导致支付失败。

#### 2.4.2 业务规则

1. **到期提醒**
   - 证书到期前30天：显示黄色警告标识
   - 证书到期前7天：显示红色警告，发送通知
   - 证书已过期：显示红色异常，阻止新支付

2. **通知方式**
   - 系统内消息通知
   - 邮件通知（如配置）
   - 运营平台首页显示待处理事项

#### 2.4.3 页面交互

**证书到期预警列表**
```
┌─────────────────────────────────────────────────────────────────────────┐
│  证书到期预警                                                            │
├─────────────────────────────────────────────────────────────────────────┤
│  🔴 已过期 (1)                                                          │
│  ├─ 华北运营平台 - 银联支付   过期时间: 2026-03-01   [立即更新]          │
│                                                                         │
│  🟡 即将到期 (2)                                                        │
│  ├─ 华南运营平台 - 易宝支付   到期时间: 2026-03-24 (15天后) [更新证书]   │
│  └─ 华东运营平台 - 微信支付   到期时间: 2026-04-05 (27天后) [更新证书]   │
└─────────────────────────────────────────────────────────────────────────┘
```

---

### 2.5 配置健康检查 (v1.2.0新增)

#### 2.5.1 功能描述

定时检测所有服务商配置的连通性，异常时主动告警。

#### 2.5.2 业务规则

1. **检查频率**
   - 自动检查：每6小时执行一次
   - 手动检查：支持单个或批量触发

2. **检查内容**
   - 接口连通性
   - 商户信息有效性
   - 证书有效性

3. **异常处理**
   - 连续3次检查失败：标记为异常状态
   - 发送告警通知
   - 记录检查日志

#### 2.5.3 页面交互

**健康检查面板**
```
┌─────────────────────────────────────────────────────────────────────────┐
│  配置健康检查                                    [立即检查所有配置]      │
├─────────────────────────────────────────────────────────────────────────┤
│  上次检查时间: 2026-03-09 10:00:00                                      │
│                                                                         │
│  检查结果汇总:                                                          │
│  ├─ 🟢 正常: 15个                                                       │
│  ├─ 🟡 警告: 2个 (证书即将到期)                                         │
│  └─ 🔴 异常: 1个 (连接失败)                                             │
│                                                                         │
│  异常详情:                                                              │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │  华北运营平台 - 银联支付                                         │   │
│  │  错误信息: 连接超时，请检查网络或接口地址                          │   │
│  │  失败次数: 3次                                                   │   │
│  │  [重试] [查看详情] [编辑配置]                                    │   │
│  └─────────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────────┘
```

---

### 2.6 与业务场景管理模块的关系

本模块管理的服务商基础信息和服务商配置被"业务场景管理"模块引用:
- 业务场景管理模块配置支付方式时需要关联服务商
- 业务场景管理模块配置业务场景时需要关联服务商

详见《业务场景管理_PRD》文档。

---

## 三、数据库设计

### 3.1 运营平台表 (operation_platform) - v1.1新增

#### 3.1.1 表说明
存储运营平台基础信息

#### 3.1.2 字段设计

| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|-------|------|------|-------|-------|------|
| id | BIGINT | - | 否 | 自增 | 主键ID |
| platform_code | VARCHAR | 32 | 否 | - | 运营平台代码,如:OP01/OP02 |
| platform_name | VARCHAR | 100 | 否 | - | 运营平台名称 |
| status | VARCHAR | 20 | 否 | enabled | 状态:enabled(已启用)/disabled(已停用) |
| created_at | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | 否 | CURRENT_TIMESTAMP ON UPDATE | 更新时间 |
| remark | VARCHAR | 500 | 是 | NULL | 备注说明 |

#### 3.1.3 索引设计

| 索引名 | 索引类型 | 字段 | 说明 |
|-------|---------|------|------|
| PRIMARY | 主键 | id | 主键索引 |
| uk_platform_code | 唯一索引 | platform_code | 运营平台代码唯一 |
| idx_status | 普通索引 | status | 状态查询 |
| idx_created_at | 普通索引 | created_at | 时间排序 |

#### 3.1.4 示例数据

```sql
INSERT INTO operation_platform (platform_code, platform_name, status, remark) VALUES
-- 默认平台 (数据迁移用)
('default_platform', '默认运营平台', 'enabled', '系统初始化创建,用于数据迁移'),

-- 区域运营平台 (正常运营)
('OP_SOUTH', '华南运营平台', 'enabled', '负责广东、广西、海南、福建等华南区域'),
('OP_NORTH', '华北运营平台', 'enabled', '负责北京、天津、河北、山西、内蒙古等华北区域'),
('OP_EAST', '华东运营平台', 'enabled', '负责上海、江苏、浙江、安徽、山东等华东区域'),
('OP_CENTRAL', '华中运营平台', 'enabled', '负责湖北、湖南、河南、江西等华中区域'),
('OP_WEST', '西南运营平台', 'enabled', '负责四川、重庆、云南、贵州、西藏等西南区域'),
('OP_NORTHWEST', '西北运营平台', 'enabled', '负责陕西、甘肃、青海、宁夏、新疆等西北区域'),
('OP_NORTHEAST', '东北运营平台', 'enabled', '负责辽宁、吉林、黑龙江等东北区域'),

-- 特殊运营平台
('OP_HEAD', '总部直营平台', 'enabled', '总部直接管理的重点项目'),
('OP_PARTNER_A', '合作方A运营平台', 'enabled', '与合作方A的联合运营项目'),

-- 已停用的运营平台
('OP_TEST', '测试运营平台', 'disabled', '测试环境专用,生产环境已停用'),
('OP_LEGACY', '旧系统运营平台', 'disabled', '旧系统迁移后已停用');
```

---

### 3.2 支付服务商表 (payment_provider) - v1.1调整

#### 3.2.1 表说明
存储支付服务商的基础信息 (v1.1版本删除平台配置字段)

#### 3.2.2 字段设计

| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|-------|------|------|-------|-------|------|
| id | BIGINT | - | 否 | 自增 | 主键ID |
| provider_code | VARCHAR | 32 | 否 | - | 服务商代码,如:WECHAT/ALIPAY/YEEPAY |
| provider_name | VARCHAR | 100 | 否 | - | 服务商名称,如:微信支付/支付宝/易宝支付 |
| provider_type | VARCHAR | 20 | 否 | - | 服务商类型:third_party(第三方支付)/bank(银行) |
| status | VARCHAR | 20 | 否 | enabled | 状态:enabled(已启用)/disabled(已停用) |
| created_at | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | 否 | CURRENT_TIMESTAMP ON UPDATE | 更新时间 |
| remark | VARCHAR | 500 | 是 | NULL | 备注说明 |

**v1.1版本删除的字段:**
- ~~platform_merchant_no~~ (移至platform_provider_config表)
- ~~platform_app_id~~ (移至platform_provider_config表)
- ~~platform_secret_key~~ (移至platform_provider_config表)
- ~~platform_cert~~ (移至platform_provider_config表)
- ~~api_base_url~~ (移至platform_provider_config表)
- ~~sandbox_mode~~ (移至platform_provider_config表)

#### 3.2.3 索引设计

| 索引名 | 索引类型 | 字段 | 说明 |
|-------|---------|------|------|
| PRIMARY | 主键 | id | 主键索引 |
| uk_provider_code | 唯一索引 | provider_code | 服务商代码唯一 |
| idx_status | 普通索引 | status | 状态查询 |
| idx_created_at | 普通索引 | created_at | 时间排序 |

#### 3.2.4 示例数据

```sql
INSERT INTO payment_provider (provider_code, provider_name, provider_type, status, remark) VALUES
-- 主流第三方支付
('WECHAT', '微信支付', 'third_party', 'enabled', '微信支付服务商,支持公众号/小程序/扫码/H5等'),
('ALIPAY', '支付宝', 'third_party', 'enabled', '支付宝服务商,支持当面付/手机网站/生活缴费等'),

-- 聚合支付/托收服务商
('YEEPAY', '易宝支付', 'third_party', 'enabled', '易宝支付,支持银行托收/代扣代缴'),
('UNIONPAY', '银联支付', 'third_party', 'enabled', '银联在线支付,支持云闪付/二维码'),
('LAKALA', '拉卡拉', 'third_party', 'enabled', '拉卡拉聚合支付'),

-- 银行直连
('ICBC', '工商银行', 'bank', 'enabled', '工商银行代收代付'),
('CCB', '建设银行', 'bank', 'enabled', '建设银行代收代付'),
('CMB', '招商银行', 'bank', 'enabled', '招商银行一网通'),

-- 已停用服务商
('BESTPAY', '翼支付', 'third_party', 'disabled', '翼支付,已停止合作');
```

---

### 3.3 运营平台服务商配置表 (platform_provider_config) - v1.1新增

#### 3.3.1 表说明
存储运营平台在各服务商的配置信息

#### 3.3.2 字段设计

| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|-------|------|------|-------|-------|------|
| id | BIGINT | - | 否 | 自增 | 主键ID |
| platform_id | BIGINT | - | 否 | - | 运营平台ID,外键关联operation_platform.id |
| provider_id | BIGINT | - | 否 | - | 支付服务商ID,外键关联payment_provider.id |
| platform_merchant_no | VARCHAR | 64 | 否 | - | 平台商户号 |
| platform_app_id | VARCHAR | 64 | 是 | NULL | 平台应用ID |
| platform_secret_key | VARCHAR | 512 | 否 | - | 平台密钥(加密存储) |
| platform_cert | TEXT | - | 是 | NULL | 平台证书(加密存储) |
| cert_expire_date | DATE | - | 是 | NULL | 证书到期日期 (v1.2.0新增) |
| api_base_url | VARCHAR | 255 | 否 | - | 接口基础地址 |
| sandbox_mode | TINYINT | 1 | 否 | 0 | 是否沙箱环境:0-否,1-是 |
| status | VARCHAR | 20 | 否 | enabled | 状态:enabled(已启用)/disabled(已停用) |
| last_check_time | DATETIME | - | 是 | NULL | 最后健康检查时间 (v1.2.0新增) |
| check_status | VARCHAR | 20 | 否 | unknown | 检查状态:success/failed/unknown (v1.2.0新增) |
| check_message | VARCHAR | 500 | 是 | NULL | 检查结果信息 (v1.2.0新增) |
| created_at | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | 否 | CURRENT_TIMESTAMP ON UPDATE | 更新时间 |
| remark | VARCHAR | 500 | 是 | NULL | 备注说明 |

#### 3.3.3 索引设计

| 索引名 | 索引类型 | 字段 | 说明 |
|-------|---------|------|------|
| PRIMARY | 主键 | id | 主键索引 |
| uk_platform_provider | 唯一索引 | platform_id, provider_id | 同一运营平台同一服务商唯一 |
| uk_platform_merchant_no | 唯一索引 | platform_merchant_no | 平台商户号全局唯一 |
| idx_platform_id | 普通索引 | platform_id | 运营平台查询 |
| idx_provider_id | 普通索引 | provider_id | 服务商查询 |
| idx_status | 普通索引 | status | 状态查询 |
| idx_cert_expire | 普通索引 | cert_expire_date | 证书到期查询 (v1.2.0新增) |
| idx_check_status | 普通索引 | check_status | 检查状态查询 (v1.2.0新增) |

#### 3.3.4 外键约束

```sql
ALTER TABLE platform_provider_config
ADD CONSTRAINT fk_platform_provider_platform
FOREIGN KEY (platform_id) REFERENCES operation_platform(id)
ON DELETE RESTRICT ON UPDATE CASCADE;

ALTER TABLE platform_provider_config
ADD CONSTRAINT fk_platform_provider_provider
FOREIGN KEY (provider_id) REFERENCES payment_provider(id)
ON DELETE RESTRICT ON UPDATE CASCADE;
```

#### 3.3.5 示例数据

```sql
INSERT INTO platform_provider_config (platform_id, provider_id, platform_merchant_no, platform_app_id, platform_secret_key, api_base_url, sandbox_mode, status, remark) VALUES
-- 华南运营平台配置 (platform_id=2, 对应OP_SOUTH)
(2, 1, '1900001234', 'wx_south_app_001', 'encrypted_wechat_south_key', 'https://api.mch.weixin.qq.com', 0, 'enabled', '华南平台-微信支付-生产环境'),
(2, 2, '2088south001', 'ali_south_app_001', 'encrypted_alipay_south_key', 'https://openapi.alipay.com/gateway.do', 0, 'enabled', '华南平台-支付宝-生产环境'),
(2, 3, 'yb_south_001', NULL, 'encrypted_yeepay_south_key', 'https://yeepay.com/api', 0, 'enabled', '华南平台-易宝托收'),

-- 华北运营平台配置 (platform_id=3, 对应OP_NORTH)
(3, 1, '1900002345', 'wx_north_app_001', 'encrypted_wechat_north_key', 'https://api.mch.weixin.qq.com', 0, 'enabled', '华北平台-微信支付-生产环境'),
(3, 2, '2088north001', 'ali_north_app_001', 'encrypted_alipay_north_key', 'https://openapi.alipay.com/gateway.do', 0, 'enabled', '华北平台-支付宝-生产环境'),
(3, 4, 'union_north_001', NULL, 'encrypted_union_north_key', 'https://gateway.95516.com', 0, 'enabled', '华北平台-银联支付'),

-- 华东运营平台配置 (platform_id=4, 对应OP_EAST)
(4, 1, '1900003456', 'wx_east_app_001', 'encrypted_wechat_east_key', 'https://api.mch.weixin.qq.com', 0, 'enabled', '华东平台-微信支付'),
(4, 2, '2088east001', 'ali_east_app_001', 'encrypted_alipay_east_key', 'https://openapi.alipay.com/gateway.do', 0, 'enabled', '华东平台-支付宝'),
(4, 3, 'yb_east_001', NULL, 'encrypted_yeepay_east_key', 'https://yeepay.com/api', 0, 'enabled', '华东平台-易宝托收'),
(4, 5, 'lkl_east_001', NULL, 'encrypted_lakala_east_key', 'https://api.lakala.com', 0, 'enabled', '华东平台-拉卡拉'),

-- 总部直营平台配置 (platform_id=9, 对应OP_HEAD)
(9, 1, '1900009999', 'wx_head_app_001', 'encrypted_wechat_head_key', 'https://api.mch.weixin.qq.com', 0, 'enabled', '总部直营-微信支付'),
(9, 2, '2088head001', 'ali_head_app_001', 'encrypted_alipay_head_key', 'https://openapi.alipay.com/gateway.do', 0, 'enabled', '总部直营-支付宝'),
(9, 6, 'icbc_head_001', NULL, 'encrypted_icbc_head_key', 'https://b2c.icbc.com.cn', 0, 'enabled', '总部直营-工商银行代收'),

-- 测试运营平台配置 (platform_id=11, 对应OP_TEST) - 沙箱模式
(11, 1, 'test_wechat_001', 'wx_sandbox_app', 'encrypted_sandbox_key', 'https://api.mch.weixin.qq.com/sandboxnew', 1, 'disabled', '测试平台-微信沙箱'),
(11, 2, 'test_alipay_001', 'sandbox_ali_app', 'encrypted_sandbox_ali_key', 'https://openapi.alipaydev.com/gateway.do', 1, 'disabled', '测试平台-支付宝沙箱'),

-- 默认运营平台配置 (platform_id=1) - 用于数据迁移
(1, 1, '1234567890', 'wx1234567890abcdef', 'encrypted_secret_key_xxx', 'https://api.mch.weixin.qq.com', 0, 'enabled', '默认平台-微信支付'),
(1, 2, '2088123456789012', '2021001234567890', 'encrypted_secret_key_yyy', 'https://openapi.alipay.com/gateway.do', 0, 'enabled', '默认平台-支付宝');
```

---

### 3.4 关联表说明

以下表在"业务场景管理"模块中定义:
- **支付方式表 (payment_method)** - 详见《业务场景管理_PRD》
- **业务场景表 (payment_scene)** - 详见《业务场景管理_PRD》

---

## 四、业务流程

### 4.1 运营平台服务商配置流程

```
系统管理员
  │
  ├─ 1. 创建运营平台 (operation_platform)
  │
  ▼
运营平台管理员
  │
  ├─ 2. 为本运营平台配置服务商
  │    ├─ 进入运营平台详情页
  │    ├─ 切换到"服务商配置"Tab
  │    ├─ 点击"添加服务商配置"
  │    ├─ 选择服务商 (微信/支付宝/易宝)
  │    ├─ 填写服务商商户号
  │    ├─ 填写服务商应用ID (如需要)
  │    ├─ 填写服务商密钥
  │    ├─ 上传服务商证书 (如需要)
  │    ├─ 设置接口基础地址
  │    ├─ 设置是否沙箱模式
  │    ├─ 点击"测试连接"验证配置
  │    └─ 点击"保存"
  │
  └─ 3. 支付方式和业务场景配置
       └─ 详见《业务场景管理_PRD》
```

### 4.2 v1.0到v1.1数据迁移流程

```
数据迁移
  │
  ├─ 1. 创建默认运营平台
  │    └─ INSERT INTO operation_platform (platform_code, platform_name)
  │        VALUES ('default_platform', '默认运营平台')
  │
  ├─ 2. 迁移payment_provider数据到platform_provider_config
  │    └─ INSERT INTO platform_provider_config
  │        (platform_id, provider_id, platform_merchant_no, ...)
  │        SELECT (默认平台ID), id, platform_merchant_no, ...
  │        FROM payment_provider
  │
  ├─ 3. 更新community_payment_config表
  │    └─ UPDATE community_payment_config
  │        SET platform_id = (默认平台ID)
  │
  └─ 4. 删除payment_provider表的旧字段
       └─ ALTER TABLE payment_provider
           DROP COLUMN platform_merchant_no,
           DROP COLUMN platform_app_id,
           ...
```

---

## 五、异常处理

### 5.1 配置异常

| 异常场景 | 处理方式 |
|---------|---------|
| 运营平台代码重复 | 提示"该运营平台代码已存在" |
| 服务商代码重复 | 提示"该服务商已存在,请勿重复添加" |
| 平台商户号重复 | 提示"该商户号已被使用" |
| 同一平台重复配置同一服务商 | 提示"该运营平台已配置该服务商" |
| 密钥配置错误 | 测试连接时提示具体错误,不允许保存 |
| 服务商被使用时删除 | 提示"该服务商已被使用,无法删除" |
| 支付方式被使用时删除 | 提示"该支付方式已被使用,无法删除" |
| 业务场景被使用时删除 | 提示"该业务场景已被使用,无法删除" |
| 运营平台被使用时删除 | 提示"该运营平台已被使用,无法删除" |

### 5.2 状态异常

| 异常场景 | 处理方式 |
|---------|---------|
| 停用正在使用的运营平台 | 提示"该运营平台正在被X个小区使用,停用后这些小区将无法发起新支付,确认停用?" |
| 停用正在使用的服务商 | 提示"该服务商正在被X个小区使用,停用后这些小区将无法发起新支付,确认停用?" |
| 停用正在使用的支付方式 | 提示"该支付方式正在被X个小区使用,确认停用?" |
| 停用正在使用的业务场景 | 提示"该业务场景正在被X个小区使用,确认停用?" |

---

## 六、数据约束

### 6.1 必填字段

**运营平台**
- 运营平台代码
- 运营平台名称

**支付服务商**
- 服务商代码
- 服务商名称
- 服务商类型

**运营平台服务商配置**
- 运营平台ID
- 支付服务商ID
- 服务商商户号
- 服务商密钥
- 接口基础地址

### 6.2 唯一性约束

| 表 | 唯一性约束 |
|----|-----------|
| operation_platform | platform_code |
| payment_provider | provider_code |
| platform_provider_config | platform_id + provider_id, platform_merchant_no |

### 6.3 外键约束

| 表 | 外键字段 | 引用表 | 引用字段 | 删除规则 |
|----|---------|--------|---------|---------|
| platform_provider_config | platform_id | operation_platform | id | RESTRICT |
| platform_provider_config | provider_id | payment_provider | id | RESTRICT |

---

## 七、安全要求

### 7.1 数据加密

| 字段 | 加密方式 | 说明 |
|------|---------|------|
| platform_secret_key | AES-256-GCM | 密钥加密存储 |
| platform_cert | AES-256-GCM | 证书加密存储 |

### 7.2 数据脱敏

| 字段 | 脱敏规则 | 示例 |
|------|---------|------|
| platform_secret_key | 显示前4位+***+后4位 | 1234***5678 |

### 7.3 密钥管理方案 (v1.1新增)

**KEK管理方案 (生产环境):**
- 使用KMS (密钥管理服务)
- KEK不落地,存储在KMS中
- 支持密钥轮转
- 满足合规要求

**参考CHANGELOG第3.9节的详细说明**

### 7.4 操作日志

需记录以下操作日志:
- 新增运营平台
- 编辑运营平台
- 停用/启用运营平台
- 删除运营平台
- 新增服务商
- 编辑服务商(尤其是修改密钥)
- 停用/启用服务商
- 删除服务商
- 新增/编辑/删除运营平台服务商配置
- 新增/编辑/删除支付方式
- 新增/编辑/删除业务场景

---

## 八、与其他模块的关系

### 8.1 被依赖关系

本模块作为基础配置模块,被以下模块依赖:

1. **业务场景管理模块**
   - 引用 payment_provider (为服务商配置支付方式和业务场景)

2. **小区支付配置模块**
   - 引用 operation_platform (选择运营平台)
   - 引用 payment_provider (选择支付服务商)
   - 引用 platform_provider_config (获取服务商配置)
   - **v1.1.2说明**: 小区支持混合商户模式,同一小区不同服务商可使用不同商户模式
     - 子商户模式: 引用本模块的platform_provider_config获取服务商配置
     - 独立商户模式: 小区自行配置商户信息,不引用本模块

3. **用户签约管理模块**
   - 引用 payment_provider (签约服务商)

4. **支付交易管理模块**
   - 引用 platform_provider_config (获取服务商商户号和密钥)

5. **流水与对账模块**
   - 引用 payment_provider (对账服务商)

6. **支付报表模块**
   - 引用 payment_provider (报表维度)

### 8.2 数据流向

```
运营平台服务商配置 (本模块)
  │
  ├─ 提供运营平台信息 → 小区支付配置、支付交易管理
  │
  ├─ 提供服务商信息 → 业务场景管理、小区支付配置
  │
  └─ 提供服务商配置 → 支付交易管理 (调用服务商接口)
```

---

## 九、验收标准

### 9.1 功能验收

- [ ] 支持新增、编辑、查看、删除运营平台
- [ ] 支持启用/停用运营平台
- [ ] 支持为运营平台配置服务商参数
- [ ] 支持测试连接功能,验证配置正确性
- [ ] 支持新增、编辑、查看、删除支付服务商
- [ ] 支持启用/停用支付服务商
- [ ] 密钥和证书加密存储
- [ ] 密钥显示时脱敏
- [ ] 被使用的配置禁止删除
- [ ] 所有操作记录日志
- [ ] v1.0数据成功迁移到v1.1

### 9.2 性能验收

- [ ] 列表页查询响应时间 ≤ 200ms
- [ ] 详情页查询响应时间 ≤ 100ms
- [ ] 保存操作响应时间 ≤ 300ms
- [ ] 支持1000+服务商配置

### 9.3 安全验收

- [ ] 密钥加密存储,数据库不可见明文
- [ ] 密钥编辑需二次确认
- [ ] 关键操作记录审计日志
- [ ] 操作权限控制正确

---

## 十、FAQ

### 10.1 为什么要新增运营平台维度?

**回答**: v1.0版本中,支付服务商配置是全局唯一的,无法支持多个运营平台各自管理自己的服务商商户号。实际业务场景中,不同运营平台在微信/支付宝处申请的是不同的服务商商户号,需要独立配置。

### 10.2 v1.0数据如何迁移到v1.1?

**回答**: 系统会自动创建"默认运营平台",将v1.0的全局配置迁移到该平台下,所有小区默认关联到该平台。详见"四、业务流程"中的数据迁移流程。

### 10.3 同一服务商可以在多个运营平台配置吗?

**回答**: 可以。同一服务商(如微信支付)可以在多个运营平台下配置,每个运营平台使用不同的服务商商户号。例如:
- 运营平台A在微信支付的服务商商户号: 1234567890
- 运营平台B在微信支付的服务商商户号: 2345678901

### 10.4 停用服务商后会影响什么?

**回答**:
- 已有订单: 不受影响,仍可查询、退款
- 新订单: 使用该服务商的小区无法发起新支付
- 配置: 小区支付配置中仍可看到该服务商,但会标记为"已停用"

### 10.5 支付方式和业务场景在哪里配置?

**回答**: v1.1.1版本将原"支付渠道管理"模块拆分:
- 本模块(运营平台服务商配置): 管理运营平台和服务商配置
- 业务场景管理模块: 管理支付方式和业务场景配置

详见《业务场景管理_PRD》文档。

---

## 十一、变更记录

| 版本 | 日期 | 修改人 | 修改内容 |
|------|------|-------|---------|
| v1.0 | 2026-02-25 | 产品经理 | 初始版本(支付渠道管理) |
| v1.1 | 2026-02-26 | 产品经理 | 架构调整:<br>1. 新增运营平台管理功能<br>2. 新增运营平台服务商配置功能<br>3. 调整payment_provider表结构<br>4. 支持多运营平台独立管理支付配置 |
| v1.1.1 | 2026-03-05 | 产品经理 | 模块拆分:<br>1. 原"支付渠道管理"拆分为"运营平台服务商配置"和"业务场景管理"<br>2. 本文档专注于运营平台和服务商配置管理<br>3. 支付方式和业务场景配置移至《业务场景管理_PRD》 |
