txw/docs/企业认证模块详解.md

505 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 碳信网企业认证模块详解
> 本文档基于代码分析,详细说明企业认证/入驻功能的表结构、流程、API接口及模块关系。
---
## 一、模块定位
企业认证模块分为**两套流程**
1. **企业认证**qyRz/qysp- mhzc-web 使用通过DID扫码认证
2. **企业入驻**qyrz- gxzx-web/yygl-web 使用,通过表单申请+审核
这两个流程最终都会在 `txw_mhzc_qyxxb` 表中创建企业信息记录。
---
## 二、核心表结构
### 2.1 企业申请记录表
#### txw_mhzc_qyrzsqjlb企业认证申请记录表
```sql
CREATE TABLE txw_mhzc_qyrzsqjlb (
uuid VARCHAR(64) PRIMARY KEY, -- 申请记录UUID
qymc VARCHAR(256), -- 企业名称
nsrsbh VARCHAR(64), -- 统一社会信用代码
sqsm TEXT, -- 申请说明
lrruuid VARCHAR(64), -- 录入人UUID
lrrq DATETIME, -- 录入日期
shrsfid VARCHAR(64), -- 审核人UUID
shjg1 VARCHAR(10), -- 审核结果 (2待审核/3通过/4不通过/5已撤销)
shyj1 TEXT, -- 审核意见
shsj DATETIME, -- 审核时间
sjhm1 VARCHAR(32), -- 手机号码
dlzh VARCHAR(64), -- 登录账号
zsxm1 VARCHAR(64), -- 真实姓名
yh_uuid VARCHAR(64) -- 用户UUID
);
```
#### txw_gxzx_rzsqjlb入驻申请记录表
```sql
-- 表结构与 txw_mhzc_qyrzsqjlb 基本相同
CREATE TABLE txw_gxzx_rzsqjlb (
uuid VARCHAR(64) PRIMARY KEY,
qymc VARCHAR(256),
nsrsbh VARCHAR(64),
sqsm TEXT,
ywlx_dm VARCHAR(10), -- 业务类型代码 (01)
sqly TEXT, -- 申请来源
lrruuid VARCHAR(64),
lrrq DATETIME,
shrsfid VARCHAR(64),
shjg1 VARCHAR(10),
shyj1 TEXT,
shsj DATETIME,
sjhm1 VARCHAR(32),
dlzh VARCHAR(64),
zsxm1 VARCHAR(64),
yh_uuid VARCHAR(64)
);
```
### 2.2 企业信息表
#### txw_mhzc_qyxxb企业信息表
```sql
CREATE TABLE txw_mhzc_qyxxb (
qyuuid VARCHAR(64) PRIMARY KEY, -- 企业UUID
qymc VARCHAR(256), -- 企业名称
nsrsbh VARCHAR(64), -- 统一社会信用代码
gxdtrzbz VARCHAR(10), -- 供需大厅入驻标志 (Y/N)
yxbz VARCHAR(10), -- 有效标志 (Y/N)
ywqd_dm VARCHAR(32), -- 业务渠道代码
lrrq DATETIME, -- 录入日期
xgrq DATETIME, -- 修改日期
sjcsdq VARCHAR(32), -- 数据产生地区
sjgsdq VARCHAR(32), -- 数据归属地区
xgrsfid VARCHAR(64), -- 修改人身份ID
lrrsfid VARCHAR(64) -- 录入人身份ID
);
```
### 2.3 用户企业关联表
#### txw_mhzc_yhqygxb用户企业关联表
```sql
CREATE TABLE txw_mhzc_yhqygxb (
uuid VARCHAR(64) PRIMARY KEY,
qyuuid VARCHAR(64), -- 企业UUID
yh_uuid VARCHAR(64), -- 用户UUID
-- 其他字段...
);
```
---
## 三、认证流程详解
### 3.1 企业认证DID扫码方式- mhzc-web
**用户视角流程:**
```
未认证状态
┌─────────────────────────────────────────────────┐
│ 显示"您未认证任何企业信息"提示 │
│ 点击"去认证" → 进入认证流程 │
└─────────────────────┬───────────────────────────┘
┌─────────────────────────────────────────────────┐
│ 显示 DID 二维码 │
│ 用户使用 DID APP 扫描二维码 │
└─────────────────────┬───────────────────────────┘
┌─────────────────────────────────────────────────┐
│ 轮询查询认证结果 │
│ GET /did/pub/backresult/login?reqId=xxx │
│ status=6 → 认证成功,显示企业信息卡片 │
│ status=5 → 认证失败,显示错误信息 │
└─────────────────────────────────────────────────┘
```
**后端处理流程:**
```
DID服务器回调 POST /did/pub/callback/busi
┌─────────────────────────────────────────────────┐
│ 验证 VerifiablePresentation │
└─────────────────────┬───────────────────────────┘
┌─────────────────────────────────────────────────┐
│ 检查企业是否已认证 │
│ yhxxService.getYhxxByDid(holderDid) │
│ 已认证 → 返回"不能重复认证"错误 │
└─────────────────────┬───────────────────────────┘
│ 未认证
┌─────────────────────────────────────────────────┐
│ 验证企业名称一致性 │
│ DID中的entname 与 用户真实姓名匹配 │
│ 不匹配 → 返回"名称不一致"错误 │
└─────────────────────┬───────────────────────────┘
┌─────────────────────────────────────────────────┐
│ 创建/更新企业信息 │
│ TxwMhzcQyxxbServiceImpl.intQyxxByDid() │
│ 1. 检查企业是否已存在按nsrsbh
│ 2. 不存在 → 新建企业记录 │
│ 3. 绑定用户与企业关系yhqygxb
│ 4. 切换Session绑定企业到用户 │
└─────────────────────────────────────────────────┘
```
### 3.2 企业入驻(表单申请方式)- gxzx-web
**用户视角流程:**
```
未认证状态
┌─────────────────────────────────────────────────┐
│ 点击"发布"按钮 │
│ 检查企业认证状态 │
│ 未认证 → 提示"请先完成企业认证" │
└─────────────────────┬───────────────────────────┘
┌─────────────────────────────────────────────────┐
│ 填写入驻表单 │
│ - 企业名称 │
│ - 统一社会信用代码 │
│ - 申请说明 │
└─────────────────────┬───────────────────────────┘
┌─────────────────────────────────────────────────┐
│ 提交申请 │
│ POST /gxzx/qyrz/qyrzsq │
└─────────────────────┬───────────────────────────┘
┌─────────────────────────────────────────────────┐
│ 等待审核 │
│ 显示"待审核"状态 │
│ 可撤回申请 │
└─────────────────────────────────────────────────┘
```
**后端处理流程:**
```
POST /gxzx/qyrz/qyrzsq
┌─────────────────────────────────────────────────┐
│ 创建入驻申请记录 │
│ TxwGxzxRzsqjlbServiceImpl.qyrzsq() │
│ - 插入 txw_gxzx_rzsqjlb 表 │
│ - ywlx_dm = "01" │
│ - shjg1 = "2" (待审核) │
│ - 关联当前用户信息 │
└─────────────────────────────────────────────────┘
```
### 3.3 企业认证审核 - yygl-web运营后台
**审核流程:**
```
运营人员登录 yygl-web
┌─────────────────────────────────────────────────┐
│ 进入"企业认证审核"菜单 │
│ 显示待审核列表 │
└─────────────────────┬───────────────────────────┘
┌─────────────────────────────────────────────────┐
│ 查看企业详情 │
│ 企业名称、信用代码、手机号、申请时间、申请理由 │
└─────────────────────┬───────────────────────────┘
┌─────────────────────────────────────────────────┐
│ 选择审核结果 │
│ - 通过shjg1 = 3
│ - 不通过shjg1 = 4
│ + 填写审核意见 │
└─────────────────────┬───────────────────────────┘
┌─────────────────────────────────────────────────┐
│ 提交审核 │
│ POST /mhzc/company/qyRzSp │
└─────────────────────────────────────────────────┘
```
**后端处理:**
```
POST /mhzc/company/qyRzSp
┌─────────────────────────────────────────────────┐
│ TxwMhzcQyxxbServiceImpl.qyRzSp() │
│ 1. 更新申请记录状态shjg1, shyj1, shsj
│ 2. if 通过: │
│ - 创建企业信息txw_mhzc_qyxxb
│ - 创建用户企业关联txw_mhzc_yhqygxb
│ - 切换Session绑定企业 │
│ - 发送站内消息(审核通过模板) │
│ 3. if 不通过: │
│ - 发送站内消息(审核不通过模板) │
└─────────────────────────────────────────────────┘
```
---
## 四、模块分布
### 4.1 前端模块
| 项目 | 页面 | 功能 |
|------|------|------|
| txw-mhzc-web | `views/qyrz/index.vue` | 企业认证DID方式 |
| txw-mhzc-web | `views/qy-rz/index.vue` | 企业入驻(预留) |
| txw-gxzx-web | `views/gxzx/index.vue` | 供需大厅发布时触发认证检查 |
| txw-yygl-web | `views/qysp/index.vue` | 企业认证审核(运营) |
| txw-yygl-web | `views/qyrz/index.vue` | 企业入驻审核(运营) |
| txw-mhzc-web | `views/gzt/components/EnterpriseCert.vue` | 工作台企业认证卡片 |
### 4.2 后端模块
| 服务 | Controller | Service | 说明 |
|------|------------|---------|------|
| txw-mhzc | `QyRzController` | `TxwGxzxRzsqjlbService` | 入驻申请 |
| txw-mhzc | `CompanyController` | `TxwMhzcQyxxbService` | 企业认证审核 |
| txw-gxzx | `QyRzController` | `TxwGxzxRzsqjlbService` | 入驻申请gxzx独立 |
| txw-sso | `DidController` | `YhxxService` | DID认证 |
---
## 五、API接口
### 5.1 用户端API
| 接口 | 服务 | 方法 | 参数 | 说明 |
|------|------|------|------|------|
| `/mhzc/qyrz/qyrzsq` | mhzc | POST | `QyRzSqReqVO` | 提交入驻申请 |
| `/gxzx/qyrz/qyrzsq` | gxzx | POST | `QyRzSqReqVO` | 提交入驻申请 |
| `/mhzc/qyrz/currentQyrzList` | mhzc | POST | - | 查询当前用户入驻列表 |
| `/gxzx/qyrz/qyrzList` | gxzx | POST | `QyrzListReqVO` | 查询入驻申请列表 |
| `/mhzc/company/getCurrentRegisterList` | mhzc | POST | - | 查询当前认证记录 |
| `/mhzc/company/revokeSq` | mhzc | GET | uuid | 撤回申请 |
### 5.2 运营管理API
| 接口 | 服务 | 方法 | 参数 | 说明 |
|------|------|------|------|------|
| `/mhzc/company/qyRzSp` | mhzc | POST | `CompanySpReqVO` | 认证审核 |
| `/mhzc/company/getRegisterList` | mhzc | POST | `CompanySpReqVO` | 认证列表 |
| `/gxzx/qyrz/qyrzsp` | gxzx | POST | `QyRzSpReqVO` | 入驻审核 |
| `/gxzx/qyrz/qyrzList` | gxzx | POST | `QyrzListReqVO` | 入驻列表 |
| `/gxzx/company/getQyxxListByYwlx` | gxzx | GET | ywlx | 查询已入驻企业 |
### 5.3 DID认证API
| 接口 | 方法 | 说明 |
|------|------|------|
| `/did/busilice/qrcode` | POST | 获取企业实名认证二维码 |
| `/did/pub/getvp/busi` | GET | 获取企业实名凭证 |
| `/did/pub/callback/busi` | POST | 企业实名回调 |
| `/did/pub/backresult/busi` | GET | 查询认证结果 |
---
## 六、审核状态流转
### 6.1 状态码定义
| 状态码 | 含义 | 说明 |
|--------|------|------|
| `2` | 待审核 | 初始状态 |
| `3` | 通过 | 审核通过 |
| `4` | 不通过 | 审核拒绝 |
| `5` | 已撤销 | 用户撤回 |
### 6.2 状态流转图
```
┌─────────┐
│ (新建) │
└────┬────┘
│ 提交申请
┌─────────┐
│ 待审核 │ shjg1=2
│ (2) │
└────┬────┘
┌────┴────┐
│ │
通过│ │不通过
│ │
▼ ▼
┌────────┐ ┌────────┐
│ 通过 │ │ 不通过 │
│ (3) │ │ (4) │
└────────┘ └────────┘
│ 用户撤回
┌────────┐
│ 已撤销 │
│ (5) │
└────────┘
```
---
## 七、模块间关系
### 7.1 企业认证/入驻与用户的关系
```
用户登录txw-sso
用户发起企业认证/入驻申请
├── mhzc-web: DID扫码认证
│ └─→ 创建 txw_mhzc_qyxxb通过
└── gxzx-web: 填表申请入驻
└─→ 创建 txw_gxzx_rzsqjlb待审核
运营后台审核yygl-web
├── 通过 → 创建 txw_mhzc_qyxxb + txw_mhzc_yhqygxb
└── 不通过 → 更新状态为4
企业认证完成后:
用户可以使用以下功能:
- 发布供需信息需gxdtrzbz=Y
- 申请金融产品
- 发布碳资产交易
```
### 7.2 关键字段说明
| 字段 | 表 | 说明 |
|------|-----|------|
| `gxdtrzbz` | txw_mhzc_qyxxb | 供需大厅入驻标志,决定用户能否发布供需 |
| `yxbz` | txw_mhzc_qyxxb | 企业信息有效性 |
| `ywlxDm` | txw_gxzx_rzsqjlb | 业务类型01=入驻 |
| `shjg1` | txw_mhzc_qyrzsqjlb | 审核结果 |
---
## 八、前端交互详解
### 8.1 mhzc-web 企业认证页面qyrz/index.vue
**页面状态机:**
| 状态 | 条件 | 显示内容 |
|------|------|---------|
| Tab1 | 有待审核/已通过记录 | 申请记录列表 + "去认证"按钮 |
| Tab2 | 未认证 | DID扫码界面 + 用户信息 |
| Tab3 | 已认证yhxx.qymc存在 | 企业认证信息卡片 |
**核心代码逻辑:**
```javascript
// 初始化时检查企业认证状态
async yhinit() {
const { data } = await api.init();
this.yhxx = data;
if (this.yhxx?.qymc) {
this.pagetab = 3; // 已认证,显示认证卡片
} else {
this.Getrzqrcode(); // 未认证,显示二维码
}
}
// 轮询查询认证结果
async pollLoginResult() {
const { data } = await rzbackresultlogin(this.reqId);
if (data.status == 6) {
// 认证成功
this.stopPolling();
this.yhinit();
} else if (data.status == 5) {
// 认证失败
this.stopPolling();
MessagePlugin.info({ content: data.msg });
}
}
```
### 8.2 yygl-web 审核页面
**qysp/index.vue** - 企业认证审核
- 查询条件:企业名称、信用代码、审核状态、申请时间
- 审核操作:弹出对话框选择"通过/不通过" + 填写意见
- API调用`qyRzSp()` → `/mhzc/company/qyRzSp`
**qyrz/index.vue** - 企业入驻审核
- 查询条件同上
- 审核操作同上
- API调用`qyRzSp()` → `/gxzx/qyrz/qyrzsp`
---
## 九、错误处理
### 9.1 用户端错误
| 场景 | 提示信息 |
|------|---------|
| 企业已认证 | "企业已认证" |
| 申请理由为空 | 校验提示"申请说明必填" |
| 统一社会信用代码格式错误 | 前端校验提示 |
| 审核不通过后重申请 | 允许重新提交 |
### 9.2 审核端错误
| 场景 | 逻辑 |
|------|------|
| 重复认证 | DidController 返回"不能重复认证" |
| 名称不一致 | 返回"名称不一致"错误 |
| 企业不存在 | 查询返回null跳过创建 |
---
## 十、外部依赖
| 依赖服务 | 用途 |
|---------|------|
| **xxzxApi消息中心** | 发送审核结果站内消息 |
| **IMhzcApi** | 获取用户信息、切换Session |
| **SwitchSessionApi** | 绑定用户与企业关系 |
| **DID服务** | 企业实名认证org.chainweaver.did.sdk |
### 10.1 消息模板
| 模板ID | 用途 |
|--------|------|
| `gxdt_rzsp_sptg` | 入驻审核通过gxzx |
| `gxdt_rzsp_spsb` | 入驻审核不通过gxzx |
| `mhzc_qyrz_sptg` | 认证审核通过mhzc |
| `mhzc_qyrz_spsb` | 认证审核不通过mhzc |
---
*文档生成时间: 2026-05-03*
*基于企业认证模块代码分析*