# 评标专家信息维护模块详细设计 ## 1. 概述 ### 1.1 设计目标 评标专家信息维护模块是专家登录后管理个人档案的核心枢纽,设计目标包括: - **信息统一管理**:集中维护个人基本信息、专业资质、执业资格、联系方式等。 - **财务信息独立维护**:管理银行账户信息,确保评审劳务报酬准确发放。 - **安全自主可控**:支持密码修改、手机/邮箱更换、登录设备管理等安全操作。 ### 1.2 适用角色 - 已注册并通过审核的外部评标专家。 - 集团内部专家仅适用于部分功能。 - 不同专家根据其专业领域和职称等级,展示差异化内容(如高级职称可参评更高级别项目)。 ### 1.3 核心功能模块 | 模块 | 功能简述 | | :--- | :--- | | **个人资料** | 查看与修改基本信息(工作单位、从事专业、职称等),敏感字段变更需审核 | | **专业资质** | 上传/更新职称证书、执业资格证书,AI辅助识别与真伪校验 | | **银行账户** | 维护开户银行及账号(加密存储),用于劳务报酬发放 | | **安全设置** | 修改密码、更换手机号/邮箱、踢出设备、查看登录日志 | ## 2. 页面布局总览 ```svg 智慧招标平台 Smart Tendering Platform 首页 招标公告 定标公告 企业新闻 王建国 王建国 高级工程师 · 化工专业 ✅ 专家库已入库 👤 个人资料 🎓 专业资质 🏦 银行账户 🔐 安全设置 👤 个人资料 维护您的个人信息,确保资料准确无误 真实姓名 * 王建国 性别 * 身份证号码 * 110101********4477 ✅ 已实名认证 出生日期 1975-03-07 工作单位 * 请输入工作单位 现从事专业 * 请输入专业名称 技术职称 * 请选择职称等级 职称专业 * 请输入职称专业 手机号码 * 138****8000 ✅ 已验证 电子邮箱 * wangjg@example.com ✅ 已验证 取消 保存修改 小滨 AI 助手 💡 温馨提示 · 修改手机号/邮箱需双因子验证 · 银行账号变更需验证登录密码 ``` ## 3. 各功能模块详细说明 ### 3.1 左侧菜单栏 | 菜单项 | 图标 | 说明 | 高亮规则 | | :------- | :-- | :-------------------------- | :------------------- | | **个人资料** | 👤 | 基本信息维护(姓名、身份证、单位、职称、联系方式等) | 默认高亮 | | **专业资质** | 🎓 | 职称证书、执业资格证书的上传与更新,AI辅助识别 | 点击切换 | | **银行账户** | 🏦 | 维护开户行、户名、银行账号,用于评审劳务报酬发放 | **仅适用外部专家** | | **安全设置** | 🔐 | 修改密码、更换手机号/邮箱、登录设备管理、查看登录日志 | 密码修改和更换手机、邮箱仅适用外部专家。 | ### 3.2 个人资料(默认激活页) **页面功能**: - 展示并允许修改专家的基本档案信息。 - **所有字段均来自注册时提交的数据,除联系方式外,其他字段(姓名、身份证、职称等)变更需经过“AI审核”或“人工复核”**(与供应商营业执照变更逻辑一致,确保资质真实性)。 **字段列表**: | 字段名 | 组件类型 | 是否必填 | 适用对象 | 备注 | | :---- | :----- | :--- | :--- | :---------------- | | 真实姓名 | 只读文本 | 是 | 全体 | 变更需提交证明材料人工审核 | | 性别 | 只读文本 | 是 | 全体 | 从身份证自动识别 | | 身份证号码 | 只读(脱敏) | 是 | 外部专家 | 变更需人工审核(关键标识) | | 出生日期 | 只读文本 | 否 | 外部专家 | 从身份证自动计算 | | 工作单位 | 文本输入框 | 是 | 全体 | 可修改(需人工复核) | | 现从事专业 | 文本输入框 | 是 | 全体 | 可修改 | | 技术职称 | 下拉选择 | 是 | 全体 | 高级/副高级/中级/初级 | | 职称专业 | 文本输入框 | 是 | 全体 | 如:化学工程与工艺 | | 手机号码 | 文本输入框 | 是 | 外部专家 | **修改需双因子验证(旧+新)** | | 电子邮箱 | 文本输入框 | 是 | 外部专家 | **修改需双因子验证(旧+新)** | **关键字段变更规则**: | 字段 | 变更是否需要审核 | 审核方式 | | :--- | :--- | :--- | | 姓名 | 是 | 需上传身份证正反面扫描件,AI比对+人工复核 | | 身份证号 | 是(阻断) | **系统唯一标识,变更走特殊流程(人工/线下)** | | 职称/专业 | 是 | 需上传新职称证书扫描件,AI识别+人工审核 | | 工作单位 | 是 | 人工审核(原单位离职风险) | | 手机/邮箱 | 否(即时生效) | 双因子验证通过即可 | ### 3.3 专业资质 **页面功能**: - 展示当前上传的职称/执业资格证书文件列表(类似供应商的资质文件管理)。 - 支持上传新证书、重命名、删除旧证书。 - AI 自动识别证书真伪(防篡改检测)和信息提取(证书编号、发证机关、有效期等)。 **文件列表示例**: | 文件名称 | 上传时间 | 大小 | 状态 | 操作 | | :--- | :--- | :--- | :--- | :--- | | 职称证书_教授.pdf | 2026-06-15 | 2.1MB | ✅ 已认证 | 重命名 / 删除 | | 注册化工工程师资格证书.pdf | 2026-05-20 | 3.4MB | ⏳ 审核中 | 删除 | **操作**: - 上传新资质文件(支持 PDF/JPG/PNG,≤20MB)。 - 删除/重命名。 - 点击文件名预览文件。 ### 3.4 银行账户 **页面功能**: - 维护专家的银行账户信息,用于支付评审报酬。 - 字段:开户银行名称、开户行网点、户名、银行账号。 - **银行账号加密存储**(AES-256-GCM,与全局安全策略一致)。 - 修改需验证当前登录密码(或短信验证码)防止盗用。 **字段列表**: | 字段名 | 组件类型 | 是否必填 | 备注 | | :--- | :--- | :--- | :--- | | 开户银行名称 | 下拉选择/文本输入 | 是 | 如:中国银行、工商银行 | | 开户行网点 | 文本输入框 | 是 | 如:中国银行北京分行营业部 | | 户名 | 只读文本 | 是 | 与专家真实姓名一致(自动关联) | | 银行账号 | 文本输入框(掩码) | 是 | 显示后4位,修改时需输入完整账号 | | 确认银行账号 | 文本输入框(掩码) | 是 | 修改时需二次输入确认 | **安全要求**: - 银行账号仅显示后 4 位(如 `**** **** **** 8888`)。 - 修改时需进行身份二次验证(短信验证码或当前登录密码)。 ### 3.5 安全设置 **功能与供应商安全设置一致**,包括: | 功能项 | 验证强度 | 说明 | | :--- | :--- | :--- | | **修改登录密码** | 高(验证旧密码) | 强制密码复杂度;修改后清除所有会话,重新登录 | | **更换绑定手机号** | 最高(旧+新双因子) | 新号全局唯一,30天内限3次 | | **更换绑定邮箱** | 最高(旧+新双因子) | 新邮箱全局唯一,30天内限3次 | | **登录设备管理** | 中(登录态+二次确认) | 查看在线设备列表,支持“踢出所有设备” | | **登录日志查看** | 低(仅登录态) | 最近90天登录记录,异常登录自动标记(红底) | ## 4. 关键业务流程 ### 4.1 联系人信息变更(手机号/邮箱)流程 ```mermaid flowchart TD A[专家点击修改手机号] --> B[输入新手机号] B --> C[系统校验新号是否已被占用] C -->|已被占用| D[提示“该手机号已被其他专家绑定”] C -->|未被占用| E[发送验证码至旧手机] E --> F[专家输入旧手机验证码] F --> G{验证通过?} G -->|否| H[提示错误,可重试(5次锁定)] G -->|是| I[发送验证码至新手机] I --> J[输入新手机验证码] J --> K{验证通过?} K -->|否| L[提示错误] K -->|是| M[提交变更请求] M --> N[数据库更新手机号] N --> O[更新登录名(若为登录凭证)] O --> P[清除所有验证码缓存] P --> Q[记录审计日志] Q --> R[发送通知至新旧手机号] ``` ### 4.2 资质证书更新(AI审核)流程 ```mermaid flowchart TD A[专家上传新职称证书] --> B[文件上传至OSS] B --> C[调用OCR服务提取文字字段] C --> D[AI真实性审查(ELA/翻拍检测)] D -->|不通过| E[驳回:证书疑似伪造或翻拍] D -->|通过| F[AI提取信息:证书编号/发证机关/有效期等] F --> G[与数据库现有字段比对] G --> H{关键信息是否变更?} H -->|否| I[仅更新文件URL] H -->|是| J[记录变更差异,触发人工复核] J --> K[推送待办至管理员] K --> L[管理员审核] L -->|通过| M[更新主表+记录审计] L -->|不通过| N[驳回并通知专家] ``` ### 4.3 银行账户修改流程 ```mermaid flowchart TD A[专家点击“修改银行账户”] --> B[弹窗显示当前账户信息(脱敏)] B --> C[输入新开户行、新账号、确认账号] C --> D[点击“下一步”] D --> E[发送短信验证码至绑定手机] E --> F[输入短信验证码] F --> G{验证通过?} G -->|否| H[提示错误,可重试] G -->|是| I[提交变更请求] I --> J[数据库更新银行账号(加密存储)] J --> K[记录审计日志(含新旧账号)] K --> L[发送通知至手机/邮箱] ``` ### 4.4 安全设置 —— 修改密码流程 ```mermaid sequenceDiagram participant U as 专家 participant FE as 前端 participant Svc as 账户服务 participant DB as 数据库 participant Cache as Redis U->>FE: 填写旧密码+新密码 FE->>FE: 前端校验(非空/强度/新旧不同) FE->>Svc: PUT /api/v1/expert/password Svc->>DB: 查询当前密码哈希 DB-->>Svc: password_hash Svc->>Svc: 比对旧密码 alt 旧密码错误 Svc->>Cache: INCR fail_count alt fail_count >= 5 Svc-->>FE: 403 账号已锁定30分钟 else <5 Svc-->>FE: 401 当前密码错误 end else 旧密码正确 Svc->>Cache: DEL fail_count Svc->>Svc: 新密码哈希 Svc->>DB: UPDATE password_hash Svc->>Cache: DEL 所有会话 Svc-->>FE: 200 成功,请重新登录 FE->>FE: 清除本地Token,跳转登录页 end ``` ## 5. 数据模型 ### 5.1 专家信息表 `t_expert_profile`(核心字段) | 字段名 | 类型 | 约束 | 说明 | | :--- | :--- | :--- | :--- | | `expert_id` | VARCHAR(32) | PK | 专家档案编号 | | `user_id` | VARCHAR(32) | FK | 关联STP用户账号表 | | `real_name` | VARCHAR(64) | NOT NULL | 真实姓名 | | `id_card_no` | VARCHAR(128) | NOT NULL, UNIQUE | 身份证号(AES-256加密) | | `id_card_md5` | CHAR(32) | UNIQUE | MD5盲索引 | | `gender` | TINYINT | | 1-男,2-女 | | `birth_date` | DATE | | 出生日期 | | `company` | VARCHAR(128) | | 工作单位 | | `profession` | VARCHAR(64) | NOT NULL | 从事专业 | | `title` | VARCHAR(32) | NOT NULL | 职称等级 | | `title_major` | VARCHAR(64) | | 职称专业 | | `phone` | VARCHAR(128) | NOT NULL, UNIQUE | 手机号(加密) | | `phone_md5` | CHAR(32) | UNIQUE | MD5 | | `email` | VARCHAR(128) | NOT NULL | 邮箱 | | `bank_name` | VARCHAR(64) | | 开户银行 | | `bank_branch` | VARCHAR(128) | | 开户行网点 | | `bank_account` | VARCHAR(128) | | 银行账号(加密) | | `bank_account_md5` | CHAR(32) | | MD5 | | `status` | VARCHAR(20) | NOT NULL | ACTIVE/LOCKED/REJECTED | | `activated_at` | DATETIME | | 激活时间 | | `updated_at` | DATETIME | | 更新时间 | ### 5.2 资质证书表 `t_expert_qualification` | 字段名 | 类型 | 说明 | | :--- | :--- | :--- | | `id` | BIGINT | PK | | `expert_id` | VARCHAR(32) | FK | | `file_name` | VARCHAR(256) | 文件显示名称 | | `file_url` | VARCHAR(512) | OSS存储URL | | `file_size` | BIGINT | 文件大小(字节) | | `ocr_result` | JSON | OCR识别结果(含证书编号、发证机关、有效期) | | `audit_status` | VARCHAR(20) | PASS / PENDING / FAIL | | `audit_comment` | TEXT | 审核备注 | | `upload_time` | DATETIME | 上传时间 | | `status` | VARCHAR(20) | ACTIVE / DELETED | ## 6. API 接口设计 ### 6.1 获取专家信息 | 项目 | 内容 | | :--- | :--- | | **路径** | `GET /api/v1/expert/profile` | | **响应** | 返回完整的专家信息(敏感字段脱敏) | ### 6.2 更新专家信息(普通字段) | 项目 | 内容 | | :--- | :--- | | **路径** | `PUT /api/v1/expert/profile` | | **请求体** | `{ "company": "新单位", "profession": "新专业" }` | | **限制** | 姓名、身份证号、职称不允许通过此接口修改(或触发审核) | ### 6.3 更新手机号/邮箱 | 项目 | 内容 | | :--- | :--- | | **路径** | `PUT /api/v1/expert/contact` | | **请求体** | `{ "field":"phone", "newValue":"...", "oldOtpToken":"...", "newOtpToken":"..." }` | ### 6.4 上传资质证书 | 项目 | 内容 | | :--- | :--- | | **路径** | `POST /api/v1/expert/qualification` | | **方法** | `multipart/form-data` | | **响应** | `{ "fileId":"...", "auditStatus":"PENDING" }` | ### 6.5 删除资质证书 | 项目 | 内容 | | :--- | :--- | | **路径** | `DELETE /api/v1/expert/qualification/{fileId}` | ### 6.6 更新银行账户 | 项目 | 内容 | | :--- | :--- | | **路径** | `PUT /api/v1/expert/bank-account` | | **请求体** | `{ "bankName":"...", "bankBranch":"...", "bankAccount":"...", "confirmAccount":"...", "smsCode":"..." }` | ### 6.7 修改密码 | 项目 | 内容 | | :--- | :--- | | **路径** | `PUT /api/v1/expert/password` | | **请求体** | `{ "oldPassword":"...", "newPassword":"..." }` | ## 7. 业务规则汇总 | ID | 规则 | 适用场景 | | :--- | :--- | :--- | | R01 | 身份证号全局唯一,不可重复注册(包括审核中状态) | 注册/信息变更 | | R02 | 修改手机号/邮箱必须双因子验证(旧+新),即时生效 | 联系人变更 | | R03 | 修改姓名、职称、身份证号必须经 AI 审核或人工复核 | 个人资料变更 | | R04 | 银行账号加密存储,修改需短信验证码二次确认 | 银行账户 | | R05 | 上传资质证书自动触发 AI 真实性审查(ELA/翻拍检测) | 专业资质 | | R06 | 所有信息变更均需记录审计日志(哈希链防篡改) | 全场景 | | R07 | 专家账户锁定后,不可参与评标抽取(需管理员解封) | 违规处理 | | R08 | 修改银行账号后,同步通知管理员(用于财务系统更新) | 银行账户 | ## 8. 安全与合规 | 安全维度 | 措施 | | :--- | :--- | | **敏感信息加密** | 身份证号、手机号、银行账号使用 AES-256-GCM 字段级加密 | | **脱敏展示** | 身份证号 `110101********4477`,手机号 `138****8000`,银行账号 `**** **** **** 8888` | | **审计追溯** | 所有变更操作(含IP、时间、新旧值)写入哈希链,保留≥7年 | | **密码安全** | 同平台全局策略(Argon2id哈希,强度要求≥8位含大小写数字特殊字符) |