docs: 新增详细设计文档(供应商报名/注册/外部专家/新用户/登录),更新需求分析说明书
This commit is contained in:
@@ -0,0 +1,232 @@
|
||||
# 供应商招标报名模块
|
||||
|
||||
## 总体流程概述
|
||||
|
||||
供应商从获知招标公告到完成报名并获取投标资格,涉及**公告浏览 → 身份认证 → 报名申请 → 资质审核 → 费用缴纳 → 文件获取 → 投标文件上传**七大环节。本设计覆盖全流程的**页面交互**、**系统跳转**与**内部处理逻辑**,并充分复用现有 SRM 供应商库与统一认证体系。
|
||||
|
||||
## 页面流转与跳转设计
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[招标公告详情页] -->|点击“立即报名”| B{登录检查}
|
||||
B -->|未登录| C[登录/注册选择页]
|
||||
C -->|选择“STP账号登录”| D[STP登录表单]
|
||||
C -->|选择“SRM账号登录”| E[SRM登录表单(无感验证)]
|
||||
D --> F[验证通过 → 跳转报名页]
|
||||
E -->|调用SRM验证接口| F
|
||||
C -->|选择“新用户注册”| G[注册表单]
|
||||
G -->|提交注册| H[注册成功 → 自动登录 → 跳转报名页]
|
||||
F --> I[报名信息填写页]
|
||||
I -->|填写基本信息+上传资质| J[预览确认页]
|
||||
J -->|提交| K[报名提交成功页(等待审核)]
|
||||
K -->|审核通过(邮件通知)| L[缴费通知页]
|
||||
L -->|选择支付方式| M[在线支付/上传凭证]
|
||||
M -->|支付完成| N[缴费确认中]
|
||||
N -->|财务确认到账| O[招标文件下载页]
|
||||
O -->|下载文件| P[投标文件上传页]
|
||||
P -->|加密上传| Q[上传成功页]
|
||||
Q -->|等待开标| R[我的项目列表(状态已报名)]
|
||||
|
||||
style A fill:#fce4ec,stroke:#c2185b,stroke-width:2px
|
||||
style K fill:#e8f5e9,stroke:#388e3c
|
||||
style Q fill:#e8f5e9,stroke:#388e3c
|
||||
style R fill:#e3f2fd,stroke:#1565c0
|
||||
```
|
||||
|
||||
|
||||
## 系统交互时序图
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as 供应商浏览器
|
||||
participant STP as STP平台
|
||||
participant SRM as SRM系统
|
||||
participant OA as OA审批
|
||||
participant Pay as 支付网关
|
||||
participant AI as AI审核服务
|
||||
|
||||
U->>STP: 访问招标公告页面
|
||||
STP-->>U: 展示公告内容
|
||||
U->>STP: 点击“报名”
|
||||
STP-->>U: 检测未登录,跳转登录页
|
||||
U->>STP: 选择“使用SRM账号登录”
|
||||
STP->>SRM: POST /api/v1/auth/login/for-stp {username, password}
|
||||
SRM-->>SRM: 验证账号密码
|
||||
SRM-->>STP: 200 { srmId, name, taxId, ... }
|
||||
STP-->>STP: 建立本地会话,关联SRM ID
|
||||
STP-->>U: 自动跳转至报名页
|
||||
|
||||
U->>STP: 填写报名表单 + 上传资质文件
|
||||
STP->>AI: 启动AI初审(资质/风险/关联)
|
||||
AI-->>STP: 初审意见(通过/警告/不通过)
|
||||
alt 需要人工评审
|
||||
STP->>STP: 生成待办任务
|
||||
STP-->>U: 进入人工评审阶段
|
||||
STP->>OA: 通知评审人员(站内/邮件)
|
||||
OA-->>STP: 评审完成回调
|
||||
else AI直接通过
|
||||
STP-->>STP: 报名状态更新为“审核通过”
|
||||
end
|
||||
STP-->>U: 发送审核结果通知(邮件+站内信)
|
||||
|
||||
U->>STP: 查看缴费通知
|
||||
STP-->>U: 展示缴费金额及支付方式
|
||||
U->>Pay: 在线支付 / 上传银行凭证
|
||||
Pay-->>STP: 异步通知支付结果(或凭证待确认)
|
||||
STP->>OA: 发起财务确认审批(含凭证)
|
||||
OA-->>STP: 审批通过(确认到账)
|
||||
STP-->>U: 解锁招标文件下载权限
|
||||
|
||||
U->>STP: 下载招标文件
|
||||
STP-->>U: 返回文件(加水印/加密)
|
||||
U->>STP: 加密上传投标文件
|
||||
STP->>STP: 文件哈希存证(区块链/哈希链)
|
||||
STP->>SRM: 记录供应商投标状态(可选)
|
||||
STP->>Archive: 归档报名材料
|
||||
STP-->>U: 投标成功
|
||||
```
|
||||
|
||||
|
||||
## 页面原型设计
|
||||
|
||||
下面以**报名信息填写页**为例,展示核心表单与操作区。
|
||||
|
||||
```svg
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 720" font-family="'Microsoft YaHei', sans-serif">
|
||||
<!-- 背景 -->
|
||||
<rect width="1024" height="720" fill="#f5f7fa"/>
|
||||
|
||||
<!-- 顶部导航栏 -->
|
||||
<rect width="1024" height="64" fill="#ffffff" stroke="#e0e0e0" stroke-width="1"/>
|
||||
<text x="24" y="40" font-size="20" font-weight="bold" fill="#c2185b">智慧招标平台</text>
|
||||
<text x="750" y="40" font-size="14" fill="#666">欢迎,XX科技公司</text>
|
||||
<rect x="880" y="20" width="100" height="30" rx="4" fill="#f44336" />
|
||||
<text x="920" y="40" font-size="13" fill="#fff" text-anchor="middle">退出</text>
|
||||
|
||||
<!-- 步骤条 -->
|
||||
<rect x="120" y="80" width="784" height="40" rx="6" fill="#fff" stroke="#e0e0e0"/>
|
||||
<text x="180" y="105" font-size="14" fill="#c2185b" font-weight="bold">① 阅读公告</text>
|
||||
<text x="330" y="105" font-size="14" fill="#c2185b" font-weight="bold">② 报名信息</text>
|
||||
<text x="480" y="105" font-size="14" fill="#999">③ 资质审核</text>
|
||||
<text x="630" y="105" font-size="14" fill="#999">④ 缴纳费用</text>
|
||||
<text x="780" y="105" font-size="14" fill="#999">⑤ 投标文件</text>
|
||||
<!-- 连线 -->
|
||||
<line x1="240" y1="95" x2="320" y2="95" stroke="#c2185b" stroke-width="2"/>
|
||||
<line x1="400" y1="95" x2="470" y2="95" stroke="#ccc" stroke-width="2"/>
|
||||
<line x1="550" y1="95" x2="620" y2="95" stroke="#ccc" stroke-width="2"/>
|
||||
<line x1="700" y1="95" x2="770" y2="95" stroke="#ccc" stroke-width="2"/>
|
||||
|
||||
<!-- 主表单卡片 -->
|
||||
<rect x="120" y="140" width="784" height="520" rx="8" fill="#ffffff" filter="url(#shadow)"/>
|
||||
|
||||
<text x="150" y="180" font-size="18" font-weight="bold" fill="#333">报名信息填写</text>
|
||||
<text x="150" y="205" font-size="14" fill="#888">项目:2026年生产用原材料采购(标段A)</text>
|
||||
<line x1="150" y1="220" x2="874" y2="220" stroke="#eee" stroke-width="1"/>
|
||||
|
||||
<!-- 表单字段 -->
|
||||
<text x="150" y="260" font-size="14" fill="#333">联系人姓名 <tspan fill="red">*</tspan></text>
|
||||
<rect x="150" y="270" width="200" height="32" rx="4" fill="#fafafa" stroke="#ccc"/>
|
||||
<text x="160" y="292" font-size="13" fill="#999">请输入联系人</text>
|
||||
|
||||
<text x="420" y="260" font-size="14" fill="#333">手机号 <tspan fill="red">*</tspan></text>
|
||||
<rect x="420" y="270" width="200" height="32" rx="4" fill="#fafafa" stroke="#ccc"/>
|
||||
<text x="430" y="292" font-size="13" fill="#999">请输入手机号</text>
|
||||
|
||||
<text x="150" y="330" font-size="14" fill="#333">投标标段(可多选)</text>
|
||||
<rect x="150" y="340" width="300" height="32" rx="4" fill="#fafafa" stroke="#ccc"/>
|
||||
<text x="160" y="362" font-size="13" fill="#999">☑ 标段A ☐ 标段B ☐ 标段C</text>
|
||||
|
||||
<text x="150" y="400" font-size="14" fill="#333">上传营业执照 <tspan fill="red">*</tspan></text>
|
||||
<rect x="150" y="410" width="400" height="80" rx="4" stroke-dasharray="5,5" fill="#fafafa" stroke="#ccc"/>
|
||||
<text x="280" y="445" font-size="13" fill="#999" text-anchor="middle">点击或拖拽上传(支持 PDF/JPG,≤10MB)</text>
|
||||
<text x="280" y="470" font-size="12" fill="#aaa" text-anchor="middle">已上传:0个文件</text>
|
||||
|
||||
<text x="150" y="520" font-size="14" fill="#333">业绩证明材料(可选)</text>
|
||||
<rect x="150" y="530" width="400" height="60" rx="4" stroke-dasharray="5,5" fill="#fafafa" stroke="#ccc"/>
|
||||
<text x="280" y="565" font-size="13" fill="#999" text-anchor="middle">点击上传合同/业绩报告</text>
|
||||
|
||||
<!-- 按钮区 -->
|
||||
<rect x="150" y="610" width="120" height="36" rx="4" fill="#e0e0e0"/>
|
||||
<text x="210" y="634" font-size="14" fill="#666" text-anchor="middle">返回</text>
|
||||
<rect x="600" y="610" width="160" height="36" rx="4" fill="#c2185b"/>
|
||||
<text x="680" y="634" font-size="14" fill="#fff" text-anchor="middle">提交报名</text>
|
||||
|
||||
<text x="630" y="655" font-size="12" fill="#888">* 提交后不可修改,请仔细核对</text>
|
||||
|
||||
<!-- 阴影定义 -->
|
||||
<defs>
|
||||
<filter id="shadow" x="-5%" y="-5%" width="110%" height="110%">
|
||||
<feDropShadow dx="0" dy="4" stdDeviation="6" flood-opacity="0.06"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
```
|
||||
|
||||
|
||||
## 状态机与内部处理逻辑
|
||||
|
||||
| 状态码 | 状态名称 | 描述 | 触发动作 |
|
||||
| -------------------- | ------ | ------------------- | --------------------- |
|
||||
| `DRAFT` | 草稿 | 供应商正在填写报名表单,尚未提交 | 保存草稿,允许修改 |
|
||||
| `PENDING_REVIEW` | 待审核 | 提交报名后,等待AI初审或人工评审 | 触发AI审核;若需人工,则生成评审任务 |
|
||||
| `AI_PASS` | AI自动通过 | 资质齐全,无风险,直接通过 | 发送审核通过通知,生成缴费单 |
|
||||
| `MANUAL_REVIEW` | 人工评审中 | 需采购部门/供应商管理专员人工确认 | 推送待办至相关人员,超时催办 |
|
||||
| `REJECTED` | 审核不通过 | 资质不符或存在风险,被驳回 | 发送拒绝原因,允许重新提交(在报名截止前) |
|
||||
| `PENDING_PAYMENT` | 待缴费 | 审核通过,等待缴纳标书费/保证金 | 生成缴费单,发送缴费通知 |
|
||||
| `PAYMENT_CONFIRMING` | 缴费确认中 | 供应商已上传凭证,等待财务确认 | 发起OA审批,财务确认到账 |
|
||||
| `PAYMENT_FAILED` | 缴费失败 | 超时未缴或财务确认为未到账 | 取消报名资格,释放名额 |
|
||||
| `PAID` | 已缴费 | 缴费成功,招标文件已解锁 | 开放文件下载权限,记录缴费信息 |
|
||||
| `BID_SUBMITTED` | 已投标 | 投标文件加密上传完成 | 存证哈希,报名流程结束 |
|
||||
| `CANCELLED` | 已取消 | 供应商主动取消报名,或项目废标导致失效 | 退回保证金(如有),归档取消记录 |
|
||||
|
||||
## 关键业务规则与异常处理
|
||||
|
||||
| 场景 | 处理方式 |
|
||||
| ------------------------ | ------------------------------------------------------------------ |
|
||||
| **标书费/保证金支付超时** | 系统在截止时间前24h/12h/1h 三级催办;超时自动取消报名资格并释放名额。 |
|
||||
| **同一供应商重复报名** | 系统检测到同一税号或统一信用代码的供应商已报名,提示“已报名,不能重复提交”。 |
|
||||
| **资质文件大小/格式不符** | 前端限制 + 后端二次校验,不符合时返回明确错误提示。 |
|
||||
| **报名截止时间已过** | 按钮置灰,提示“报名已截止”,不允许新提交。 |
|
||||
| **==联合体投标(待确定,留扩展接口)==** | 允许在报名时添加联合体成员(需分别提供资质),系统自动校验成员关联关系。 |
|
||||
| **无感登录票据过期** | 跳转时若票据超时,提示“登录状态已过期,请重新登录”,跳转至登录页。 |
|
||||
| **财务确认超时** | 系统自动催办财务审批人;若超时,支持招标专员手动确认(需备注理由)。 |
|
||||
| **==投标文件加密方式(待确定)==** | 沿用系统统一加密方案(平台端加解密),同时为供应商提供“个人加密”选项(开关),若选个人加密则生成独立密钥,开标时需供应商在线解密。 |
|
||||
|
||||
## 通知与提醒策略
|
||||
|
||||
| 触发事件 | 通知方式 | 接收方 |
|
||||
| --------------- | ----------------- | ----- |
|
||||
| 审核通过/不通过 | 站内信 + 邮件 | 供应商 |
|
||||
| 缴费提醒(含截止时间) | 站内信 + 邮件 + 短信(可选) | 供应商 |
|
||||
| 财务确认到账 | 站内信 | 供应商 |
|
||||
| 招标文件可下载 | 站内信 + 邮件 | 供应商 |
|
||||
| 投标截止前24h/1h | 站内信 + 邮件 | 供应商 |
|
||||
| 人工评审任务待办 | 站内信 + 邮件 | 评审人员 |
|
||||
| 财务审批待办 | 站内信 + 邮件 | 财务人员 |
|
||||
| 系统异常告警(支付回调失败等) | 飞书/短信 | 系统管理员 |
|
||||
|
||||
## 性能与安全要求
|
||||
|
||||
- **并发报名**:支持单项目100+供应商同时报名,响应时间≤3秒。
|
||||
|
||||
- **文件上传**:支持断点续传,单个文件≤500MB,总大小≤2GB。
|
||||
|
||||
- **数据加密**:报名表单中的联系人手机号、身份证号采用字段级加密存储
|
||||
|
||||
- **防机器人**:报名提交时增加图形验证码或行为验证,防止恶意刷单。
|
||||
|
||||
- **日志审计**:所有报名操作(登录、提交、审核、缴费)均记录审计日志,保留≥7年。
|
||||
|
||||
## 附录:报名表单字段定义
|
||||
|
||||
| 字段名 | 类型 | 必填 | 说明 |
|
||||
| --------------------- | ------ | --- | --------------------------------- |
|
||||
| `projectId` | String | 是 | 招标项目ID,自动带入 |
|
||||
| `bidSection` | Array | 是 | 投标标段(多选) |
|
||||
| `contactName` | String | 是 | 联系人姓名 |
|
||||
| `contactPhone` | String | 是 | 手机号,需短信验证(可选) |
|
||||
| `contactEmail` | String | 是 | 邮箱 |
|
||||
| `qualificationFiles` | Array | 是 | 资质文件列表(营业执照、资质证书、授权书等),每个文件需有类型标签 |
|
||||
| `performanceFiles` | Array | 否 | 业绩证明文件 |
|
||||
| `jointVentureMembers` | Array | 否 | 联合体成员列表(供应商ID+名称+税号) |
|
||||
| `remarks` | String | 否 | 备注 |
|
||||
Reference in New Issue
Block a user