# 碳信网企业认证模块详解 > 本文档基于代码分析,详细说明企业认证/入驻功能的表结构、流程、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* *基于企业认证模块代码分析*