528 lines
27 KiB
Markdown
528 lines
27 KiB
Markdown
# 外部专家注册模块
|
||
|
||
| 文档名称 | 智慧招标平台(STP)外部专家注册模块详细设计 |
|
||
| :--- | :--- |
|
||
| **文档版本** | V1.1 |
|
||
| **编制日期** | 2026-06-29 |
|
||
| **关联文档** | 《需求分析说明书 V1.4》《评委管理规定》《SRM 与 STP 数据交换接口方案说明书》 |
|
||
|
||
---
|
||
|
||
## 1. 模块概述
|
||
|
||
### 1.1 建设目标
|
||
建立面向**社会外部评标专家**的在线注册、准入审核与档案管理体系,实现专家信息的结构化采集、AI辅助资质核验,并与后续的**专家抽取、智能匹配、在线评标、劳务报酬结算**全流程贯通。
|
||
|
||
|
||
### 1.2 设计原则
|
||
| 原则 | 说明 |
|
||
| :------- | :--------------------------------------- |
|
||
| **准入严控** | 严格遵循《评委管理规定》4.1/4.2要求,设置多级审核(AI初筛+人工复核)。 |
|
||
| **信息完备** | 采集字段覆盖专业能力、执业资格、收款账户等全维度。 |
|
||
| **隐私保护** | 身份证号、手机号、银行账户等敏感信息采用**字段级加密**存储(内存级密钥)。 |
|
||
| **智能提效** | AI自动识别证件、校验真伪、关联风险图谱,大幅降低人工审核成本。 |
|
||
| **统一身份** | 注册完成后自动生成STP平台账号,支持手机号/邮箱登录,无需二次注册。 |
|
||
|
||
### 1.3 适用角色与场景
|
||
| 角色 | 场景 |
|
||
| :--- | :--- |
|
||
| **外部专家申请人** | 通过招标门户“专家注册”入口提交申请,查询审核进度。 |
|
||
| **专家管理员(招标专员)** | 在后台审核专家资料、激活/驳回/冻结专家账户。 |
|
||
| **合规审计人员** | 查阅专家注册审计轨迹、关联关系图谱。 |
|
||
| **AI 审核服务** | 自动执行OCR识别、证件验真、利益冲突初筛(仅作后台参考,不要求专家主动声明)。 |
|
||
|
||
---
|
||
|
||
## 2. 页面布局与 UI 设计
|
||
|
||
### 2.1 整体注册流程步骤条(SVG 线框图 - 顶部引导)
|
||
|
||
```svg
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 120" font-family="'Microsoft YaHei', sans-serif">
|
||
<rect width="1000" height="120" fill="#f8f9fc" rx="8"/>
|
||
|
||
<!-- 步骤条背景 -->
|
||
<rect x="50" y="40" width="900" height="40" rx="20" fill="#fff" stroke="#e0e4ec"/>
|
||
|
||
<!-- 步骤1:已激活 -->
|
||
<circle cx="200" cy="60" r="18" fill="#c2185b"/>
|
||
<text x="200" y="66" text-anchor="middle" font-size="14" fill="#fff" font-weight="bold">1</text>
|
||
<text x="200" y="100" text-anchor="middle" font-size="13" fill="#c2185b" font-weight="bold">基本信息</text>
|
||
|
||
<!-- 连接线1 -->
|
||
<line x1="218" y1="60" x2="292" y2="60" stroke="#c2185b" stroke-width="3"/>
|
||
|
||
<!-- 步骤2:进行中 -->
|
||
<circle cx="310" cy="60" r="18" fill="#c2185b"/>
|
||
<text x="310" y="66" text-anchor="middle" font-size="14" fill="#fff" font-weight="bold">2</text>
|
||
<text x="310" y="100" text-anchor="middle" font-size="13" fill="#c2185b" font-weight="bold">专业资质</text>
|
||
|
||
<!-- 连接线2 -->
|
||
<line x1="328" y1="60" x2="402" y2="60" stroke="#e0e4ec" stroke-width="3"/>
|
||
|
||
<!-- 步骤3:未开始 -->
|
||
<circle cx="420" cy="60" r="18" fill="#e0e4ec"/>
|
||
<text x="420" y="66" text-anchor="middle" font-size="14" fill="#8895aa">3</text>
|
||
<text x="420" y="100" text-anchor="middle" font-size="13" fill="#8895aa">收款账户</text>
|
||
|
||
<!-- 连接线3 -->
|
||
<line x1="438" y1="60" x2="512" y2="60" stroke="#e0e4ec" stroke-width="3"/>
|
||
|
||
<!-- 步骤4 -->
|
||
<circle cx="530" cy="60" r="18" fill="#e0e4ec"/>
|
||
<text x="530" y="66" text-anchor="middle" font-size="14" fill="#8895aa">4</text>
|
||
<text x="530" y="100" text-anchor="middle" font-size="13" fill="#8895aa">提交审核</text>
|
||
|
||
<!-- 提示文字 -->
|
||
<text x="900" y="35" text-anchor="end" font-size="12" fill="#8895aa">* 带红色星号均为必填项</text>
|
||
</svg>
|
||
```
|
||
|
||
### 2.2 注册主表单页面(SVG 线框图 - 以“基本信息”页为例)
|
||
|
||
```svg
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1100 900" font-family="'Microsoft YaHei', 'PingFang SC', sans-serif">
|
||
<defs>
|
||
<filter id="shadowLight" x="-2%" y="-2%" width="104%" height="104%">
|
||
<feDropShadow dx="0" dy="4" stdDeviation="8" flood-color="#000" flood-opacity="0.04"/>
|
||
</filter>
|
||
<linearGradient id="brandGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
||
<stop offset="0%" stop-color="#c2185b"/>
|
||
<stop offset="100%" stop-color="#e91e63"/>
|
||
</linearGradient>
|
||
</defs>
|
||
|
||
<!-- 背景 -->
|
||
<rect width="1100" height="900" fill="#f5f7fa"/>
|
||
|
||
<!-- 主卡片 -->
|
||
<rect x="80" y="30" width="940" height="840" rx="16" fill="#fff" filter="url(#shadowLight)"/>
|
||
|
||
<!-- 标题区 -->
|
||
<text x="120" y="80" font-size="22" font-weight="bold" fill="#1a2332">外部专家注册</text>
|
||
<text x="120" y="108" font-size="14" fill="#8895aa">请完整填写以下信息,所有数据将受到严格加密保护</text>
|
||
<line x1="120" y1="125" x2="980" y2="125" stroke="#f0f2f7" stroke-width="2"/>
|
||
|
||
<!-- ===== 第一行:姓名 + 性别 ===== -->
|
||
<text x="120" y="170" font-size="14" fill="#4a5568">真实姓名 <tspan fill="#e91e63">*</tspan></text>
|
||
<rect x="120" y="180" width="260" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
|
||
<text x="135" y="206" font-size="14" fill="#b0bbcc">请输入中文姓名</text>
|
||
|
||
<text x="430" y="170" font-size="14" fill="#4a5568">性别 <tspan fill="#e91e63">*</tspan></text>
|
||
<rect x="430" y="180" width="260" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
|
||
<text x="445" y="206" font-size="14" fill="#b0bbcc">请选择</text>
|
||
<path d="M 670 200 L 678 208 L 686 200" stroke="#b0bbcc" stroke-width="2" fill="none"/>
|
||
|
||
<!-- ===== 第二行:身份证号(脱敏提示) ===== -->
|
||
<text x="120" y="250" font-size="14" fill="#4a5568">身份证号码 <tspan fill="#e91e63">*</tspan></text>
|
||
<rect x="120" y="260" width="420" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
|
||
<text x="135" y="286" font-size="14" fill="#b0bbcc">请输入18位身份证号</text>
|
||
<text x="560" y="286" font-size="12" fill="#8895aa">🔒 将使用AES-256加密存储</text>
|
||
|
||
<!-- ===== 第三行:出生日期(自动计算) ===== -->
|
||
<text x="120" y="330" font-size="14" fill="#4a5568">出生日期</text>
|
||
<rect x="120" y="340" width="260" height="40" rx="6" fill="#f5f6fa" stroke="#e0e4ec"/>
|
||
<text x="135" y="366" font-size="14" fill="#b0bbcc">由身份证自动识别</text>
|
||
<text x="430" y="330" font-size="14" fill="#4a5568">年龄</text>
|
||
<rect x="430" y="340" width="260" height="40" rx="6" fill="#f5f6fa" stroke="#e0e4ec"/>
|
||
<text x="445" y="366" font-size="14" fill="#b0bbcc">自动计算</text>
|
||
|
||
<!-- ===== 第四行:手机号 + 邮箱 ===== -->
|
||
<text x="120" y="410" font-size="14" fill="#4a5568">手机号码 <tspan fill="#e91e63">*</tspan></text>
|
||
<rect x="120" y="420" width="260" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
|
||
<text x="135" y="446" font-size="14" fill="#b0bbcc">请输入手机号</text>
|
||
|
||
<text x="430" y="410" font-size="14" fill="#4a5568">电子邮箱 <tspan fill="#e91e63">*</tspan></text>
|
||
<rect x="430" y="420" width="260" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
|
||
<text x="445" y="446" font-size="14" fill="#b0bbcc">请输入常用邮箱</text>
|
||
|
||
<!-- ===== 第五行:工作单位 + 职务 ===== -->
|
||
<text x="120" y="490" font-size="14" fill="#4a5568">工作单位</text>
|
||
<rect x="120" y="500" width="260" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
|
||
<text x="135" y="526" font-size="14" fill="#b0bbcc">请输入单位全称</text>
|
||
|
||
<text x="430" y="490" font-size="14" fill="#4a5568">现从事专业 <tspan fill="#e91e63">*</tspan></text>
|
||
<rect x="430" y="500" width="260" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
|
||
<text x="445" y="526" font-size="14" fill="#b0bbcc">如:化工工艺、设备管理</text>
|
||
|
||
<!-- ===== 第六行:职称 ===== -->
|
||
<text x="120" y="570" font-size="14" fill="#4a5568">技术职称 <tspan fill="#e91e63">*</tspan></text>
|
||
<rect x="120" y="580" width="260" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
|
||
<text x="135" y="606" font-size="14" fill="#b0bbcc">高级/副高级/中级/初级</text>
|
||
<rect x="440" y="580" width="260" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
|
||
<text x="455" y="606" font-size="14" fill="#b0bbcc">职称专业(如:化工工程)</text>
|
||
|
||
<!-- ===== 第七行:文件上传(资质证书) ===== -->
|
||
<text x="120" y="660" font-size="14" fill="#4a5568">职称/资质证书扫描件 <tspan fill="#e91e63">*</tspan></text>
|
||
<rect x="120" y="670" width="560" height="70" rx="6" stroke-dasharray="6,4" fill="#fafbfc" stroke="#c2185b"/>
|
||
<text x="400" y="700" text-anchor="middle" font-size="14" fill="#c2185b">📄 点击上传或拖拽文件(支持 PDF/JPG/PNG,≤20MB)</text>
|
||
<text x="400" y="725" text-anchor="middle" font-size="12" fill="#8895aa">已上传:职称证.pdf (2.3MB) <tspan fill="#4caf50">✅ 识别完成</tspan></text>
|
||
|
||
<!-- ===== 底部按钮 ===== -->
|
||
<line x1="120" y1="770" x2="980" y2="770" stroke="#f0f2f7" stroke-width="2"/>
|
||
|
||
<rect x="740" y="790" width="120" height="40" rx="6" fill="#e0e4ec"/>
|
||
<text x="800" y="816" text-anchor="middle" font-size="14" fill="#8895aa">上一步</text>
|
||
|
||
<rect x="880" y="790" width="140" height="40" rx="6" fill="url(#brandGrad)"/>
|
||
<text x="950" y="816" text-anchor="middle" font-size="14" font-weight="bold" fill="#fff">下一步 →</text>
|
||
|
||
<!-- 右侧信息浮窗 -->
|
||
<rect x="720" y="140" width="260" height="180" rx="8" fill="#fff3e0" stroke="#ffcc80"/>
|
||
<text x="740" y="168" font-size="14" font-weight="bold" fill="#e65100">📌 注册须知</text>
|
||
<text x="740" y="195" font-size="12" fill="#bf360c">1. 所有信息须与身份证及职称证书一致</text>
|
||
<text x="740" y="218" font-size="12" fill="#bf360c">2. 集团公司将对信息进行真实性核验</text>
|
||
<text x="740" y="241" font-size="12" fill="#bf360c">3. 入库专家须遵守《评委管理规定》</text>
|
||
<text x="740" y="264" font-size="12" fill="#bf360c">4. 个人信息变更需及时在线更新</text>
|
||
</svg>
|
||
```
|
||
|
||
|
||
---
|
||
|
||
## 3. 详细业务流程
|
||
|
||
```mermaid
|
||
%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#c2185b','primaryTextColor':'#fff','primaryBorderColor':'#880e4f','lineColor':'#555','secondaryColor':'#fce4ec'}}}%%
|
||
flowchart TD
|
||
subgraph 专家申请人端
|
||
A[访问招标门户] --> B[点击“专家注册”]
|
||
B --> C[填写基本信息<br>(姓名/身份证/手机/邮箱等)]
|
||
C --> D[填写专业资质<br>(职称/执业资格/工作经历)]
|
||
D --> E[签署评标纪律承诺书]
|
||
E --> F[填写收款账户信息]
|
||
F --> G[提交注册申请]
|
||
G --> H[查看审核状态]
|
||
H -- 驳回 --> I[根据驳回原因修改信息]
|
||
I --> G
|
||
H -- 通过 --> J[收到激活通知邮件/短信]
|
||
J --> K[首次登录设置密码]
|
||
K --> L[进入专家工作台]
|
||
end
|
||
|
||
subgraph STP平台后端
|
||
STP1[接收注册申请] --> STP2[触发AI初审]
|
||
STP2 --> STP3{AI检查项}
|
||
STP3 -->|OCR识别证件| STP4[提取姓名/身份证号/有效期]
|
||
STP3 -->|真伪核验| STP5[对接公安部/学信网/天眼查]
|
||
STP3 -->|利益冲突图谱(参考)| STP6[扫描与黑名单/关联企业关系]
|
||
STP4 --> STP7[生成AI审核报告]
|
||
STP5 --> STP7
|
||
STP6 --> STP7
|
||
STP7 --> STP8{AI评估结果}
|
||
STP8 -->|高风险/不通过| STP9[自动驳回 + 发送原因]
|
||
STP8 -->|中风险/待人工| STP10[推送至专家管理员待办]
|
||
STP8 -->|低风险/通过| STP11[自动进入人工抽检池]
|
||
|
||
STP10 --> STP12[人工复核资料]
|
||
STP11 --> STP12
|
||
STP12 --> STP13{复核决定}
|
||
STP13 -->|驳回| STP14[记录驳回原因 + 通知专家]
|
||
STP13 -->|需补充材料| STP15[发起补充通知]
|
||
STP13 -->|通过| STP16[生成专家档案编号]
|
||
|
||
STP16 --> STP17[写入专家库主数据]
|
||
STP17 --> STP18[自动创建STP登录账号]
|
||
STP18 --> STP19[发送激活通知]
|
||
STP19 --> STP20[记录全流程审计日志]
|
||
end
|
||
|
||
subgraph 外部系统
|
||
EXT1[公安身份认证库]
|
||
EXT2[学信网/职称系统]
|
||
EXT3[天眼查/企查查]
|
||
EXT4[邮件短信网关]
|
||
end
|
||
|
||
STP5 -.-> EXT1
|
||
STP5 -.-> EXT2
|
||
STP6 -.-> EXT3
|
||
STP19 -.-> EXT4
|
||
|
||
H -- 补充材料 --> STP15
|
||
STP14 --> H
|
||
```
|
||
|
||
---
|
||
|
||
## 4. 核心流程时序图
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant U as 专家申请人
|
||
participant FE as STP前端
|
||
participant GW as API网关
|
||
participant RegSvc as 注册服务
|
||
participant AISvc as AI审核服务
|
||
participant IDSvc as 身份认证服务(外部)
|
||
participant DB as 专家库数据库
|
||
participant Admin as 专家管理员
|
||
participant Notify as 通知服务
|
||
|
||
U->>FE: 填写注册表单 + 上传证件
|
||
FE->>FE: 前端校验(非空/手机格式/身份证校验位)
|
||
FE->>GW: POST /api/v1/expert/register
|
||
GW->>RegSvc: 转发请求
|
||
|
||
RegSvc->>DB: 校验身份证号是否已注册(防重)
|
||
alt 已存在
|
||
DB-->>RegSvc: 记录已存在
|
||
RegSvc-->>FE: 409 Conflict { message: "该身份证已注册" }
|
||
else 未注册
|
||
RegSvc->>AISvc: 异步启动AI审核任务(OCR+验真+图谱)
|
||
RegSvc-->>FE: 202 Accepted { applicationId: "EXP_2024001" }
|
||
FE-->>U: 显示“提交成功,审核中...”
|
||
|
||
AISvc->>IDSvc: 调用公安接口校验身份证号与姓名
|
||
IDSvc-->>AISvc: 实名验证通过/失败
|
||
|
||
AISvc->>AISvc: OCR识别职称证书关键字段
|
||
AISvc->>AISvc: 扫描企业关联图谱(作为利益冲突参考,不要求专家声明)
|
||
|
||
AISvc-->>RegSvc: 返回AI审核结论(Pass/Review/Reject)
|
||
|
||
alt AI高风险或敏感
|
||
RegSvc->>DB: 状态更新为 PENDING_MANUAL
|
||
RegSvc->>Admin: 推送待办任务(站内+邮件)
|
||
Admin->>RegSvc: POST /api/v1/expert/audit { action: approve/reject }
|
||
else AI低风险
|
||
RegSvc->>DB: 状态更新为 APPROVED(自动)
|
||
end
|
||
|
||
RegSvc->>DB: 生成专家档案(EXP_XXXXX)
|
||
RegSvc->>RegSvc: 创建STP登录账号(默认手机号+随机密码)
|
||
RegSvc->>Notify: 发送激活通知(含账号及首次登录链接)
|
||
Notify-->>U: 短信+邮件
|
||
U->>FE: 点击激活链接
|
||
FE->>RegSvc: POST /api/v1/expert/activate { password }
|
||
RegSvc->>DB: 更新密码哈希(Argon2id)
|
||
RegSvc-->>FE: 激活成功,跳转至专家工作台
|
||
end
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 专家激活流程
|
||
以下是专家激活设置密码的详细流程图,清晰展示了从审核通过到账号激活的全过程:
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[人工/AI审核通过] --> B[系统自动创建STP账号]
|
||
B --> C[生成随机临时密码(仅系统内部占位)]
|
||
C --> D[发送激活通知邮件/短信<br>(内含激活链接,不含密码)]
|
||
D --> E[专家收到通知,点击激活链接]
|
||
E --> F[跳转至激活页面]
|
||
F --> G[专家填写新密码及确认密码]
|
||
G --> H{前端校验}
|
||
H -->|格式不符| I[提示密码不满足安全策略<br>(长度≥8,含大小写、数字、特殊字符)]
|
||
I --> G
|
||
H -->|通过| J[提交激活请求<br>POST /api/v1/expert/activate]
|
||
J --> K[后端校验链接有效性及过期时间]
|
||
K -->|无效/过期| L[提示链接失效,重新发送]
|
||
L --> E
|
||
K -->|有效| M[对密码进行Argon2id哈希加密]
|
||
M --> N[更新数据库:<br>密码哈希 + 状态ACTIVATED + 激活时间]
|
||
N --> O[记录审计日志]
|
||
O --> P[返回激活成功]
|
||
P --> Q[专家跳转至专家工作台]
|
||
Q --> R[流程结束]
|
||
|
||
style A fill:#e8f5e9,stroke:#388e3c
|
||
style R fill:#e0e0e0,stroke:#616161
|
||
style C fill:#fff3e0,stroke:#ff9800
|
||
style M fill:#fce4ec,stroke:#c2185b
|
||
```
|
||
|
||
**流程要点说明:**
|
||
- **随机密码未告知专家**:系统生成后仅用于初始化账户,专家通过激活链接自行设置密码,全程无需接触该临时密码。
|
||
- **密码安全策略**:前端校验密码复杂度(长度、字符类型),后端再次校验并哈希存储(Argon2id)。
|
||
- **链接安全性**:激活链接包含唯一token,后端校验其有效性与过期时间(通常24小时内有效),防止重放攻击。
|
||
- **审计追踪**:所有操作(创建账号、发送通知、激活成功)均有日志记录。
|
||
|
||
## 6. 数据模型设计
|
||
|
||
### 6.1 外部专家主表 `t_expert_profile`
|
||
|
||
| 字段名 | 类型 | 约束 | 说明 |
|
||
| :--------------------- | :----------- | :--------------- | :----------------------------------------------------------------- |
|
||
| `expert_id` | VARCHAR(32) | PK | 专家档案编号(EXP_YYYYMMDD_XXX) |
|
||
| `user_id` | VARCHAR(32) | FK | 关联STP用户账号表(登录凭证) |
|
||
| `real_name` | VARCHAR(64) | NOT NULL | 真实姓名 |
|
||
| `id_card_no` | VARCHAR(256) | NOT NULL, UNIQUE | 身份证号(**字段级加密存储**) |
|
||
| `gender` | TINYINT | | 1-男,2-女 |
|
||
| `birth_date` | DATE | | 出生日期(由身份证提取) |
|
||
| `phone` | VARCHAR(256) | NOT NULL | 手机号(字段级加密) |
|
||
| `email` | VARCHAR(128) | NOT NULL | 电子邮箱 |
|
||
| `company` | VARCHAR(128) | | 工作单位 |
|
||
| `profession` | VARCHAR(64) | NOT NULL | 从事专业 |
|
||
| `title` | VARCHAR(32) | NOT NULL | 职称等级(高级/副高/中级) |
|
||
| `title_major` | VARCHAR(64) | | 职称专业 |
|
||
| `qualification_files` | JSON | | 资质证书文件URL列表(含OCR元数据) |
|
||
| `bank_name` | VARCHAR(64) | | 开户银行 |
|
||
| `bank_account` | VARCHAR(256) | | 银行账号(字段级加密) |
|
||
| `expertise_tags` | JSON | | 擅长领域标签(用于智能匹配) |
|
||
| `status` | VARCHAR(20) | NOT NULL | DRAFT/PENDING_AI/PENDING_MANUAL/REJECTED/APPROVED/ACTIVATED/LOCKED |
|
||
| `ai_audit_report` | JSON | | AI审核报告(含评分、风险点) |
|
||
| `manual_audit_comment` | TEXT | | 人工审核备注 |
|
||
| `discipline_signed` | BOOLEAN | DEFAULT 0 | 是否签署评标纪律承诺书 |
|
||
| `created_at` | DATETIME | | 注册时间 |
|
||
| `updated_at` | DATETIME | | 更新时间 |
|
||
| `activated_at` | DATETIME | | 首次激活时间 |
|
||
|
||
|
||
### 6.3 审核记录表 `t_expert_audit_log`
|
||
|
||
| 字段名 | 类型 | 约束 | 说明 |
|
||
| :------------ | :---------- | :-- | :-------------------------- |
|
||
| `audit_id` | VARCHAR(32) | PK | |
|
||
| `expert_id` | VARCHAR(32) | FK | |
|
||
| `auditor` | VARCHAR(64) | | 审核人(AI/人工) |
|
||
| `action` | VARCHAR(20) | | APPROVE/REJECT/REQUEST_INFO |
|
||
| `reason` | TEXT | | 原因 |
|
||
| `attachments` | JSON | | 附件URL |
|
||
| `created_at` | DATETIME | | |
|
||
|
||
---
|
||
|
||
## 7. 接口详细定义
|
||
|
||
### 7.1 提交注册申请
|
||
| 项目 | 内容 |
|
||
| :--- | :--- |
|
||
| **路径** | `/api/v1/expert/register` |
|
||
| **方法** | `POST` |
|
||
| **认证** | 否(公开接口,需图形验证码) |
|
||
|
||
**请求体(部分字段)**
|
||
```json
|
||
{
|
||
"realName": "王建国",
|
||
"idCardNo": "110101199003074477",
|
||
"gender": 1,
|
||
"phone": "13800138000",
|
||
"email": "wangjianguo@example.com",
|
||
"company": "清华大学化工系",
|
||
"profession": "化学工程",
|
||
"title": "SENIOR", // SENIOR/VICE_SENIOR/MIDDLE/JUNIOR
|
||
"titleMajor": "化学工程",
|
||
"expertiseTags": ["石油化工", "反应工程", "分离技术"],
|
||
"bankName": "中国银行北京分行",
|
||
"bankAccount": "6217850000000000",
|
||
"qualificationFiles": [
|
||
{
|
||
"fileName": "professor_cert.pdf",
|
||
"fileUrl": "https://oss.stp.com/...",
|
||
"ocrResult": { "title": "教授", "issueDate": "2018-06" }
|
||
}
|
||
],
|
||
"disciplineAccepted": true, // 是否同意评标纪律
|
||
"captchaToken": "a1b2c3d4"
|
||
}
|
||
```
|
||
|
||
**成功响应(异步)**
|
||
```json
|
||
{
|
||
"code": "0",
|
||
"data": {
|
||
"applicationId": "EXP_20260628_001",
|
||
"status": "PENDING_AI",
|
||
"estimatedTime": "预计24小时内完成初审"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 7.2 查询审核进度
|
||
| 项目 | 内容 |
|
||
| :----- | :---------------------------------- |
|
||
| **路径** | `/api/v1/expert/application/status` |
|
||
| **方法** | `GET` |
|
||
| **参数** | `applicationId` |
|
||
|
||
### 7.3 专家激活
|
||
|
||
| 项目 | 内容 |
|
||
| :----- | :------------------------ |
|
||
| **路径** | `/api/v1/expert/activate` |
|
||
| **方法** | `POST` |
|
||
|
||
**请求体**
|
||
```json
|
||
{
|
||
"applicationId": "EXP_20260628_001",
|
||
"password": "Abcd@2026#",
|
||
"confirmPassword": "Abcd@2026#"
|
||
}
|
||
```
|
||
|
||
### 7.4 后台专家审核(管理员)
|
||
| 项目 | 内容 |
|
||
| :--- | :--- |
|
||
| **路径** | `/api/v1/admin/expert/audit` |
|
||
| **方法** | `POST` |
|
||
| **认证** | 需 ADMIN/EXPERT_MANAGER 角色 |
|
||
|
||
**请求体**
|
||
```json
|
||
{
|
||
"applicationId": "EXP_20260628_001",
|
||
"action": "APPROVE", // APPROVE / REJECT / REQUEST_INFO
|
||
"reason": "职称证书已验证,资质符合要求",
|
||
"notifyExpert": true
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 8. AI 赋能详细设计
|
||
|
||
| AI 能力 | 实现方式 | 输出 | 优先级 |
|
||
| :------------- | :---------------------------------------- | :----- | :-- |
|
||
| **身份证 OCR 解析** | 调用OCR服务(如百度/阿里)提取姓名、号码、有效期,自动回填表单。 | 结构化字段 | P0 |
|
||
| **实名认证** | ==对接公安部CTID接口核验身份证号与姓名一致性。== | 通过/不通过 | P0 |
|
||
| **职称证书验真** | ==对接人社部/学信网接口(或基于图像防伪特征识别)验证证书真伪。== | 可信度评分 | P1 |
|
||
| **专业标签智能推荐** | 根据专家填写的从事专业与历史项目品类,自动匹配并推荐擅长的采购品类标签。 | 标签列表 | P1 |
|
||
| **AI初审报告生成** | 汇总各项检查结果,生成带评分(0-100)的建议结论(自动通过/人工复核/拒绝)。 | 审核报告 | P0 |
|
||
|
||
---
|
||
|
||
## 9. 业务规则与异常处理
|
||
|
||
| 场景 | 规则/处理方式 |
|
||
| :------------ | :------------------------------------------------------- |
|
||
| **身份证号唯一性** | 系统全局唯一,已注册或审核中的身份证不得重复提交。 |
|
||
| **手机号/邮箱唯一性** | 同一手机号或邮箱仅能注册一次(支持找回账号)。 |
|
||
| **职称等级门槛** | 至少具备**中级及以上**职称方可入库(《评委管理规定》4.2.1)。 |
|
||
| **驳回后重提** | 允许在 30 天内修改后重新提交,保留历史审核记录供查。 |
|
||
| **虚假信息处理** | 一经发现虚假注册,永久拉入黑名单,并通报集团内各单位。 |
|
||
| **评标纪律签署** | 注册时须同意《评标纪律承诺书》,否则无法提交。 |
|
||
| **敏感信息脱敏展示** | 后台管理中,身份证号显示为 `110101********4477`,银行账号显示为 `******0000`。 |
|
||
| **数据导出** | 支持按专家状态、专业分类、注册时间段导出加密Excel(需二次审批)。 |
|
||
|
||
---
|
||
|
||
## 10. 安全与合规设计
|
||
|
||
| 安全维度 | 落地措施 |
|
||
| :--------- | :------------------------------------------------------------ |
|
||
| **传输安全** | 全链路 HTTPS + TLS 1.3,文件上传使用预签名URL直传OSS。 |
|
||
| **敏感字段加密** | 身份证、手机号、银行账号使用 **AES-256-GCM** 应用层字段级加密,DEK内存漂移(见《需求说明书》4.2)。 |
|
||
| **防机器人** | 注册提交需通过图形验证码 + 滑动验证(极验/人机识别)。 |
|
||
| **密码策略** | 首次激活强制设置密码(长度≥8,含大写、小写、数字、特殊字符)。 |
|
||
| **审计日志** | 记录每次提交、审核、激活操作的IP、设备指纹、操作人,写入哈希链防篡改(见《需求说明书》4.8.1)。 |
|
||
| **个人信息保护** | 遵循《个人信息保护法》,注册前弹出《隐私政策》与《用户协议》,须勾选同意。 |
|
||
|
||
---
|
||
|
||
## 11. 通知策略矩阵
|
||
|
||
| 触发事件 | 通知方式 | 通知对象 | 文案要点 |
|
||
| :--- | :--- | :--- | :--- |
|
||
| 提交注册成功 | 站内信 | 申请人 | 已收到申请,预计24小时反馈 |
|
||
| AI 审核不通过 | 邮件+短信 | 申请人 | 详细说明不通过原因及修改指引 |
|
||
| 转入人工审核 | 站内信+邮件 | 专家管理员 | 新专家待审核,附AI报告摘要 |
|
||
| 人工审核通过 | 邮件+短信 | 申请人 | 恭喜通过审核,请点击链接激活账号 |
|
||
| 账号激活成功 | 站内信 | 申请人 | 欢迎成为STP评标专家,可开始接受评标任务 |
|
||
| 补充材料通知 | 邮件+短信 | 申请人 | 请于X月X日前补充如下材料... |
|
||
|