txw/txw-mhzc/docs/共性能力-收藏与收录-表设计说明.md
2026-05-24 10:55:36 +08:00

607 lines
22 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.

# 共性能力平台 — 收藏与收录 数据库设计说明
| 属性 | 内容 |
|------|------|
| **文档版本** | v2.0 |
| **编写日期** | 2026-05-23 |
| **修订日期** | 2026-05-23 |
| **编写人** | (待填写) |
| **审核人** | (待填写) |
| **适用系统** | `txw-mhzc` 门户 — 共性能力页 `/gxnlpt` |
| **适用数据库** | **MySQL 8.0+**InnoDB`utf8mb4`);本文 DDL/索引以 MySQL 为准,不承诺 Oracle 等库可直接复用 |
| **关联前端** | `txw-mhzc-web/src/pages/index/views/gxnlpt/index.vue` |
| **DDL 脚本** | `txw-mhzc/sql/txw_mhzc_gxnl_slxxb_gxscb.sql` |
---
## 修订记录
| 版本 | 日期 | 修订人 | 审核人 | 说明 |
|------|------|--------|--------|------|
| v1.0 | 2026-05-23 | — | — | 初稿双表、ER、基础字段与状态 |
| v2.0 | 2026-05-23 | — | — | 参照评审意见补充字段校验、命名规范、乐观锁、索引与唯一约束、状态矩阵、API 规范、一致性/异常/迁移/性能 |
---
## 1. 设计背景与目标
### 1.1 业务场景
| 能力 | 前端入口 | 业务特征 |
|------|----------|----------|
| 分类浏览 | 左侧 5 类导航 + 卡片 | 展示已上架网站条目 |
| **收录** | 「收录」表单 | 提交名称/链接/简介/分类/标签/联系人;审核后展示 |
| **收藏** | 星标 +「我的收藏」 | 登录用户对已上架条目收藏/取消 |
### 1.2 设计目标
- 与供需体系(`txw_gxzx_*`)解耦,新建 `txw_mhzc_gxnl_*` 域表。
- 字段、状态、索引、API 具备**可落地校验规则**,减少脏数据与并发覆盖。
- 首期双表交付;审核流水、操作日志表列为**可选扩展**,并给出过渡期方案。
### 1.3 表清单
| 序号 | 物理表名 | 中文名 | 职责 |
|------|----------|--------|------|
| 1 | `txw_mhzc_gxnl_slxxb` | 共性能力收录信息表 | 主数据 + 收录申请 + 审核/上架 |
| 2 | `txw_mhzc_gxnl_gxscb` | 共性能力收藏表 | 用户收藏关系 |
| (扩展) | `txw_mhzc_gxnl_slshb` | 收录审核流水表 | 多轮审核留痕(二期建议建表) |
| (扩展) | 平台操作日志 | 复用现有审计/日志组件 | 关联 `wz_uuid` 追溯操作链路 |
---
## 2. 命名与缩写规范
### 2.1 后缀约定(全库统一)
| 后缀 | 含义 | 示例 |
|------|------|------|
| `_dm` | 代码(字典值、枚举) | `gxnl_fl_dm`、`lyqd_dm` |
| `_mc` | 名称(展示冗余) | `gxnl_fl_mc`、`qymc` |
| `_uuid` | 业务主键/外键 UUID | `wz_uuid`、`yh_uuid` |
| `_bz` | 标志Y/N | `yxbz`、`sjzt`(上架标志,历史命名保留) |
| `_jh` | 集合(逗号分隔) | `bqjh` |
| `_rq` / `_sj` | 日期/时间 | `lrrq`、`shsj` |
| `lrr` / `xgr` / `shr` | 录入人/修改人/审核人 | `lrruuid`、`xgruuid` |
| `tjr_` | 提交人(门户侧填写) | `tjr_nc`、`tjr_lxdh` |
### 2.2 未使用后缀的字段说明
| 字段 | 说明 |
|------|------|
| `zt` | 业务状态(历史习惯,与 `sjzt` 成对使用,不改为 `zt_dm` 以降低迁移成本) |
| `sjzt` | 上架状态(`s`=上架,`j`=见,与项目内 `sjzt` 一致) |
| `bt` | 标题 title 缩写 |
### 2.3 易混字段语义(收录表)
| 字段 | 语义 | 赋值规则 |
|------|------|----------|
| `yh_uuid` | **门户提交账号** | 用户登录提交时 = 当前 `Session.yh_uuid`;游客提交 = `NULL` |
| `lrruuid` | **数据录入操作人** | 门户提交:登录用户 = `yh_uuid`,游客 = `NULL`;运营后台录入/导入 = 操作员 `yh_uuid` |
| `tjr_nc` / `tjr_lxdh` | **表单展示用联系人** | 用户填写;可与账号信息不一致 |
| `xgruuid` | **最后修改人** | 审核、编辑、下架等写操作更新 |
| `shruuid` | **最后审核人** | 仅审核通过/驳回时写入 |
> **结论**`yh_uuid` 表示「谁提交的」;`lrruuid` 表示「谁执行了入库动作」。多数登录场景二者相同;运营代录时 `lrruuid`=运营员,`yh_uuid` 可空。
### 2.4 已删除/弱化的字段
| 原字段 | v2.0 处理 |
|--------|-----------|
| `sjzt_bz` | **删除**。运营备注统一走管理端备注或扩展表,避免与 `shyj` 混用 |
---
## 3. ER 图(与字段清单一致)
### 3.1 完整实体关系Mermaid
```mermaid
erDiagram
TXW_MHZC_YHXXB ||--o{ TXW_MHZC_GXNL_GXSCB : "收藏"
TXW_MHZC_GXNL_SLXXB ||--o{ TXW_MHZC_GXNL_GXSCB : "被收藏"
TXW_MHZC_YHXXB ||--o{ TXW_MHZC_GXNL_SLXXB : "提交账号"
TXW_MHZC_QYXXB ||--o{ TXW_MHZC_GXNL_SLXXB : "关联企业"
TXW_MHZC_GXNL_SLXXB ||--o{ TXW_MHZC_GXNL_SLSHB : "审核流水(二期)"
TXW_MHZC_GXNL_SLXXB {
varchar wz_uuid PK
varchar bt
varchar wz_lj
varchar jj
char gxnl_fl_dm
varchar gxnl_fl_mc
varchar bqjh
char zt
char sjzt
varchar lyqd_dm
varchar tjr_nc
varchar tjr_lxdh
varchar yh_uuid
varchar qyuuid
varchar qymc
varchar shyj
varchar shruuid
datetime shsj
int shcs
text shls_j
int pxh
int llcs
int sccs
int bbh
varchar lrruuid
datetime lrrq
varchar xgruuid
datetime xgrq
char yxbz
}
TXW_MHZC_GXNL_GXSCB {
varchar uuid PK
varchar wz_uuid FK
varchar yh_uuid FK
datetime lrrq
datetime qxrq
char yxbz
}
TXW_MHZC_YHXXB {
varchar yh_uuid PK
}
TXW_MHZC_QYXXB {
varchar qyuuid PK
}
```
### 3.2 关系与一致性(应用层)
| 关系 | 基数 | 一致性策略 |
|------|------|------------|
| 用户 → 收藏 | 1:N | 用户注销:异步任务将 `gxscb.yxbz='N'``sccs` 重算;失败入补偿队列 |
| 收录 → 收藏 | 1:N | 条目 `yxbz='N'` 或下架不删收藏行「我的收藏」JOIN 时标 `yxzt=invalid` |
| 用户 → 收录 | 1:N | 用户注销:不删 `slxxb``yh_uuid` 保留用于审计 |
| 企业 → 收录 | 1:N | 企业注销:`qyuuid` 置空或保留历史,不级联删条目 |
**不建数据库外键**:与 `txw_gxzx_gxscb` 等项目表一致;所有引用在 Service 层校验存在性。
---
## 4. 字段校验规则(入库前必校验)
### 4.1 通用约定
| 项 | 规范 |
|----|------|
| 时区 | 服务端统一 **Asia/Shanghai** |
| 时间格式 | `DATETIME`,入库 `YYYY-MM-DD HH:mm:ss`;接口 ISO8601 可选,入库前转换 |
| UUID | `[a-zA-Z0-9_-]{1,50}`,系统生成优先 |
| 字符串 | 入库前 `trim()`;全角空格转半角(可选) |
### 4.2 `txw_mhzc_gxnl_slxxb` 字段校验
| 字段 | 类型/长度 | 必填 | 校验规则 |
|------|-----------|------|----------|
| `wz_uuid` | VARCHAR(50) | Y | 系统生成,唯一 |
| `bt` | VARCHAR(200) | Y | 1~200 字符;禁止纯空格;禁止 `<script` 等 XSS 片段(输出编码为主,入库可做长度+危险字符拦截) |
| `wz_lj` | VARCHAR(500) | Y | 必须 `http://``https://` 开头;总长 ≤500域名合法禁止 `javascript:`;入库前 `URI` 规范化 |
| `jj` | VARCHAR(40) | Y* | 用户收录必填,运营导入可空;**1~40 字符**(与前端 maxlength 一致) |
| `gxnl_fl_dm` | CHAR(2) | Y | 枚举 `01`~`05`,否则拒绝 |
| `gxnl_fl_mc` | VARCHAR(50) | N | 由服务端根据 `gxnl_fl_dm` 填充,不信任前端 |
| `bqjh` | VARCHAR(500) | N | 最多 **10** 个标签;单标签 1~20 字符;仅中英文数字及 `-_`;英文逗号分隔;去重 |
| `zt` | CHAR(1) | Y | 枚举 `0`~`4` |
| `sjzt` | CHAR(1) | Y | 仅 `Y`/`N`;仅当 `zt=2` 时允许 `sjzt=Y` |
| `lyqd_dm` | VARCHAR(20) | Y | 枚举 `admin`/`user`/`import` |
| `tjr_nc` | VARCHAR(50) | N | ≤50 字符 |
| `tjr_lxdh` | VARCHAR(20) | N* | 发验证码时必填;手机号 `^1[3-9]\d{9}$` 或座机 `^0\d{2,3}-?\d{7,8}$` |
| `yh_uuid` | VARCHAR(50) | N | 存在则校验 `yhxxb` 有效 |
| `qyuuid` | VARCHAR(50) | N | 存在则校验 `qyxxb` |
| `qymc` | VARCHAR(200) | N | 由企业表冗余,不信任前端随意改 |
| `shyj` | VARCHAR(500) | N | 驳回时必填≤500 字符 |
| `shruuid` | VARCHAR(50) | N | 审核时必填 |
| `shsj` | DATETIME | N | 审核时必填 |
| `shcs` | INT | Y | ≥0每次驳回/通过 +1 |
| `shls_j` | TEXT | N | JSON 数组,见 §8.3;单条 ≤2000 字符建议 |
| `pxh` | INT | Y | 0~999999 |
| `llcs` | INT | Y | ≥0 |
| `sccs` | INT | Y | ≥0**冗余字段**,规则见 §7.2 |
| `bbh` | INT | Y | ≥0乐观锁更新时 `WHERE bbh=?` |
| `lrruuid`/`xgruuid` | VARCHAR(50) | N | 写操作写入 |
| `lrrq`/`xgrq` | DATETIME | N | 首次/更新自动 |
| `yxbz` | CHAR(1) | Y | `Y`/`N` |
### 4.3 `txw_mhzc_gxnl_gxscb` 字段校验
| 字段 | 类型/长度 | 必填 | 校验规则 |
|------|-----------|------|----------|
| `uuid` | VARCHAR(50) | Y | 系统生成 |
| `wz_uuid` | VARCHAR(50) | Y | 须存在且 `slxxb.yxbz=Y``zt=2``sjzt=Y` |
| `yh_uuid` | VARCHAR(50) | Y | 当前登录用户 |
| `lrrq` | DATETIME | Y | 收藏时写入 |
| `qxrq` | DATETIME | N | 取消收藏时写入 |
| `yxbz` | CHAR(1) | Y | `Y`/`N` |
---
## 5. 表结构明细
### 5.1 `txw_mhzc_gxnl_slxxb` — 共性能力收录信息表
| 字段名 | 类型 | 空 | 默认 | 注释 |
|--------|------|----|------|------|
| `wz_uuid` | VARCHAR(50) | N | — | 网站信息 UUID主键 |
| `bt` | VARCHAR(200) | N | — | 名称 |
| `wz_lj` | VARCHAR(500) | N | — | 网站链接http/https |
| `jj` | VARCHAR(40) | Y | NULL | 简介≤40 字 |
| `gxnl_fl_dm` | CHAR(2) | N | — | 分类代码 01~05 |
| `gxnl_fl_mc` | VARCHAR(50) | Y | NULL | 分类名称冗余 |
| `bqjh` | VARCHAR(500) | Y | NULL | 标签合集,逗号分隔,最多 10 个 |
| `zt` | CHAR(1) | N | `1` | 业务状态§6 |
| `sjzt` | CHAR(1) | N | `N` | 上架状态 Y/N |
| `lyqd_dm` | VARCHAR(20) | N | `user` | 来源admin/user/import |
| `tjr_nc` | VARCHAR(50) | Y | NULL | 提交人昵称 |
| `tjr_lxdh` | VARCHAR(20) | Y | NULL | 提交人联系方式 |
| `yh_uuid` | VARCHAR(50) | Y | NULL | 提交账号 UUID |
| `qyuuid` | VARCHAR(50) | Y | NULL | 关联企业 UUID |
| `qymc` | VARCHAR(200) | Y | NULL | 企业名称冗余 |
| `shyj` | VARCHAR(500) | Y | NULL | **当前轮次**审核意见 |
| `shruuid` | VARCHAR(50) | Y | NULL | 最后审核人 |
| `shsj` | DATETIME | Y | NULL | 最后审核时间 |
| `shcs` | INT | N | `0` | 审核轮次(提交/重提/审核累计) |
| `shls_j` | TEXT | Y | NULL | 审核历史 JSON过渡期多轮审核 |
| `pxh` | INT | N | `0` | 排序号 |
| `llcs` | INT | N | `0` | 浏览次数 |
| `sccs` | INT | N | `0` | 有效收藏数冗余 |
| `bbh` | INT | N | `0` | 版本号(乐观锁) |
| `lrruuid` | VARCHAR(50) | Y | NULL | 录入人 UUID |
| `lrrq` | DATETIME | Y | NULL | 录入时间 |
| `xgruuid` | VARCHAR(50) | Y | NULL | 修改人 UUID |
| `xgrq` | DATETIME | Y | NULL | 修改时间 |
| `yxbz` | CHAR(1) | N | `Y` | 有效标志 Y/N |
**分类代码 `gxnl_fl_dm`**
| 代码 | 名称 | 前端 anchor |
|------|------|-------------|
| `01` | 碳核算平台 | content-1 |
| `02` | 碳认证机构 | content-2 |
| `03` | 碳交易平台 | content-3 |
| `04` | 碳金融服务 | content-4 |
| `05` | 碳技术咨询 | content-5 |
### 5.2 `txw_mhzc_gxnl_gxscb` — 共性能力收藏表
| 字段名 | 类型 | 空 | 默认 | 注释 |
|--------|------|----|------|------|
| `uuid` | VARCHAR(50) | N | — | 收藏记录 UUID |
| `wz_uuid` | VARCHAR(50) | N | — | 关联网站信息 |
| `yh_uuid` | VARCHAR(50) | N | — | 收藏用户 |
| `lrrq` | DATETIME | N | — | 收藏时间 |
| `qxrq` | DATETIME | Y | NULL | 取消收藏时间 |
| `yxbz` | CHAR(1) | N | `Y` | Y=有效收藏 N=已取消 |
**收藏写入策略(解决唯一约束与软删冲突)**
- 表级唯一约束:`UNIQUE (yh_uuid, wz_uuid)` **不变**
- **取消收藏**`UPDATE SET yxbz='N', qxrq=NOW()`,不删行。
- **再次收藏**:若存在该行则 `UPDATE SET yxbz='Y', lrrq=NOW(), qxrq=NULL`;否则 `INSERT`
- **禁止**对同一 `(yh_uuid, wz_uuid)` 重复 `INSERT`
---
## 6. 状态流转矩阵
### 6.1 状态枚举
**`zt` 业务状态**
| 值 | 含义 | 门户列表 | 可收藏 |
|----|------|----------|--------|
| `0` | 草稿 | 否 | 否 |
| `1` | 待审核 | 否 | 否 |
| `2` | 审核通过 | 是* | 是* |
| `3` | 审核驳回 | 否 | 否 |
| `4` | 已下架 | 否 | 否 |
\* 须同时 `sjzt=Y``yxbz=Y`
**`sjzt` 上架状态**
| 值 | 含义 |
|----|------|
| `Y` | 门户可见 |
| `N` | 不可见 |
### 6.2 状态变更矩阵(含权限)
| 当前状态 | 事件 | 目标状态 | 操作角色 | 附加条件 |
|----------|------|----------|----------|----------|
| — | 用户提交收录 | `zt=1,sjzt=N` | 游客/登录用户 | 验证码通过 |
| `1` | 用户撤回 | `zt=0,sjzt=N` | 提交人本人 | 仅 `zt=1``yh_uuid` 匹配或手机号验证 |
| `0` | 用户再次提交 | `zt=1` | 提交人 | 更新同 `wz_uuid` |
| `1` | 审核通过 | `zt=2,sjzt=Y` | 运营/管理员 | 写 `shyj` 可空;`shcs+1` |
| `1` | 审核驳回 | `zt=3,sjzt=N` | 运营/管理员 | `shyj` 必填 |
| `2,Y` | 运营下架 | `zt=4,sjzt=N` | 运营/管理员 | 可不删收藏记录 |
| `4,N` | 重新上架 | `zt=2,sjzt=Y` | 运营/管理员 | 须 `yxbz=Y` |
| `3` | 修改后重提 | `zt=1,sjzt=N` | 提交人 | `shcs+1`;历史写入 `shls_j` |
| 任意 | 逻辑删除 | `yxbz=N` | 管理员 | 门户不可见;待审单不再展示在审核队列(或单独筛) |
### 6.3 异常场景处理
| 场景 | 处理 |
|------|------|
| 待审条目被逻辑删除 | 审核接口返回「条目已失效」;不再出现在待审列表 |
| 已收藏条目下架 | 「我的收藏」仍展示,卡片标 **「已失效」**,不可跳转或灰显;`scbz` 仍 Y增加 `yxzt=N` |
| 已收藏条目逻辑删除 | 同下架,`yxzt=N` |
| 并发审核/编辑 | `UPDATE ... WHERE wz_uuid=? AND bbh=?`;失败返回「数据已被修改,请刷新」 |
| 用户注销 | 收藏批量 `yxbz=N``sccs` 按条目异步重算 |
---
## 7. 收藏业务规则
### 7.1 方案选定
| 方案 | 说明 | 本期 |
|------|------|------|
| 软删 `yxbz` | 取消置 N可统计、可复收藏 | **采用** |
| 物理删除 | 无法追溯取消行为 | 不采用 |
### 7.2 `sccs` 冗余维护规则
| 项 | 规则 |
|----|------|
| 含义 | 当前 **有效收藏** 数,等价于 `COUNT(*) FROM gxscb WHERE wz_uuid=? AND yxbz='Y'` |
| 增加 | `toggle add` 成功且由 N→Y 时 `sccs+1`(复收藏若从 N→Y 也 +1 |
| 减少 | `toggle remove` 成功且由 Y→N 时 `sccs-1`,下限 0 |
| 并发 | 与 `gxscb` 更新同一事务;`sccs` 更新 `WHERE sccs>=0` |
| 校验 | 每日凌晨 Job 全量校对,偏差 >0 则修复并告警 |
| 是否含注销用户 | **不含**;注销时已置 `yxbz=N` |
### 7.3 查询规则
- **门户列表 `scbz`**`LEFT JOIN gxscb ON wz_uuid AND yh_uuid AND yxbz='Y'`。
- **我的收藏**`gxscb.yxbz='Y'` JOIN `slxxb`;下架条目带 `yxzt` 字段返回。
---
## 8. 审核流程
### 8.1 权限
| 角色 | 权限 |
|------|------|
| 游客 | 提交收录、验证码 |
| 登录用户 | 提交、撤回自己的待审单、收藏 |
| 运营 | 审核、上下架、编辑条目 |
| 管理员 | 全部 + 逻辑删除 |
首期不按分类分审核人;二期可在 `slshb` 增加 `gxnl_fl_dm` 路由。
### 8.2 多轮审核(过渡期)
未建 `txw_mhzc_gxnl_slshb` 前:
- `shyj` / `shruuid` / `shsj`:保存 **最后一轮** 审核信息。
- `shls_j`JSON 数组,元素示例:
```json
{
"shcs": 1,
"shjg_dm": "3",
"shyj": "链接无法访问",
"shruuid": "admin-001",
"shsj": "2026-05-23 14:00:00"
}
```
`shjg_dm``2` 通过,`3` 驳回。
### 8.3 二期审核流水表(建议)
`txw_mhzc_gxnl_slshb``uuid`, `wz_uuid`, `shcs`, `shjg_dm`, `shyj`, `shruuid`, `shsj`, `lrrq`
建成后 `shls_j` 可弃用,历史数据迁移入流水表。
---
## 9. 索引设计
### 9.1 设计原则MySQL 8.0
- 组合索引字段顺序:**等值条件按区分度从高到低**,范围/排序字段放最后。
- 门户主查:`gxnl_fl_dm`5 类)+ `sjzt` + `zt` + `ORDER BY lrrq DESC`
- `%keyword%` 模糊查询 **不走 BTree**;名称搜索用 **FULLTEXT** 或 ES二期
### 9.2 `txw_mhzc_gxnl_slxxb` 索引
| 索引名 | 字段 | 说明 |
|--------|------|------|
| PRIMARY | `wz_uuid` | 主键 |
| `idx_slxx_fl_sjzt_zt_lrrq` | `gxnl_fl_dm`, `sjzt`, `zt`, `lrrq` | 门户分类列表v2 调整顺序) |
| `idx_slxx_zt_lrrq` | `zt`, `lrrq` | 管理端待审 `zt=1` |
| `idx_slxx_yh_lrrq` | `yh_uuid`, `lrrq` | 我的提交 |
| `idx_slxx_yxbz` | `yxbz` | 过滤有效数据 |
| `ft_slxx_bt_jj` | FULLTEXT(`bt`,`jj`) | 名称/简介搜索(可选,见 DDL 注释) |
**`idx_slxx_bt` BTree 说明**:仅适合 **前缀** 查询 `LIKE 'keyword%'``%keyword%` 会失效,已改用 FULLTEXT。
### 9.3 `txw_mhzc_gxnl_gxscb` 索引
| 索引名 | 字段 | 说明 |
|--------|------|------|
| PRIMARY | `uuid` | — |
| `uk_gxsc_yh_wz` | `yh_uuid`, `wz_uuid` | 唯一;配合 UPDATE 复收藏 |
| `idx_gxsc_yh_yxbz_lrrq` | `yh_uuid`, `yxbz`, `lrrq` | 我的收藏 |
| `idx_gxsc_wz_yxbz` | `wz_uuid`, `yxbz` | 统计/校对 sccs |
---
## 10. 数据清理与归档
| 数据 | 策略 |
|------|------|
| `gxscb``yxbz=N``qxrq` < 1 | 可物理删除夜间 Job |
| `slxxb` `zt=3` `yxbz=Y` 超过 2 | 归档至历史表或 `yxbz=N` |
| `slxxb` `yxbz=N` | 保留 3 年后物理删除合规待定 |
---
## 11. API 规范(概要)
**统一约定**
- Base`/mhzc/gxnl`
- MethodPOST与项目现有 `/gxdt` 一致
- Content-Type`application/json`
- 分页`pageNo` 1)、`pageSize`默认 10最大 50
- 排序列表默认 `lrrq DESC, pxh DESC`
- 响应`{ code, msg, data }``code=0` 成功
### 11.1 `POST /mhzc/gxnl/wzxx/list` — 分类列表
**请求**
```json
{
"pageNo": 1,
"pageSize": 10,
"gxnlFlDm": "01",
"nr": "碳足迹",
"onlySc": false
}
```
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| pageNo | int | Y | 1 |
| pageSize | int | N | 默认 10最大 50 |
| gxnlFlDm | string | N | 01~05 |
| nr | string | N | 关键词有值时走 FULLTEXT LIKE见实现开关 |
| onlySc | boolean | N | true 时仅返回当前用户收藏 |
**响应 data**`{ list: [{ wzUuid, bt, jj, wzLj, bqjh, gxnlFlMc, scbz, lrrq }], total }`
### 11.2 `POST /mhzc/gxnl/slxx/submit` — 收录提交
**请求**
```json
{
"bt": "某某碳核算平台",
"wzLj": "https://example.com",
"jj": "简介文案",
"gxnlFlDm": "01",
"bqjh": "碳足迹,LCA",
"tjrNc": "张三",
"tjrLxdh": "13800138000",
"captchaId": "xxx",
"captchaCode": "123456"
}
```
**异常码**
| code | 说明 |
|------|------|
| 40001 | 参数校验失败 fieldErrors |
| 40002 | URL 格式非法 |
| 40003 | 分类代码不存在 |
| 40004 | 验证码错误或过期 |
| 40005 | 标签数量/格式超限 |
### 11.3 `POST /mhzc/gxnl/slxx/audit` — 审核
**请求**`{ wzUuid, shjgDm: "2"|"3", shyj, bbh }`
**权限**运营/管理员
**异常**40010 状态不允许审核40011 乐观锁冲突
### 11.4 `POST /mhzc/gxnl/slxx/withdraw` — 撤回
**请求**`{ wzUuid }`
**条件**`zt=1` 且本人提交
### 11.5 `POST /mhzc/gxnl/gxsc/toggle` — 收藏切换
**请求**`{ wzUuid, type: "add" | "remove" }`**小写**大小写敏感
**异常**40101 未登录40020 条目不可收藏
### 11.6 `POST /mhzc/gxnl/gxsc/myList` — 我的收藏
**请求**`{ pageNo, pageSize }`
**响应** `yxzt`Y=正常 N=已下架/删除)
### 11.7 `POST /mhzc/gxnl/captcha/send`
**请求**`{ tjrLxdh, bizType: "gxnl_submit" }`
**限流**同一手机号 1 分钟 1 1 小时 5
---
## 12. 数据迁移(自供需表)
| | 目标 | 规则 |
|----|------|------|
| `txw_gxzx_gxxxb`若曾误用 | `txw_mhzc_gxnl_slxxb` | 仅迁移明确标记为共性能力的数据`bt_1bt`链接从 `kzwj` `fwnr` 解析 |
| `txw_gxzx_gxscb` | `txw_mhzc_gxnl_gxscb` | **不自动迁移**`gx_uuid` `wz_uuid` 无稳定映射需人工或脚本映射表 |
| 历史收藏 | | 建议上线后用户重新收藏或一次性脚本 + 映射表 |
**迁移步骤**停写 备份 脚本导入 校对条数 抽测 开写
**锁表**大批量时按主键分批避免长事务锁表
---
## 13. 性能与容量(预估)
| | 预估 | 措施 |
|----|------|------|
| 收录条目 | 5 万级/3 | 索引 + 归档 |
| 收藏记录 | 50 万级 | 分区按年二期考虑 |
| 列表 QPS | 峰值 200 | Redis 缓存分类列表 60s收藏态用户级缓存 |
| 收藏 toggle | 峰值 50 | 行级锁 + 事务 |
---
## 14. 操作日志(扩展)
写操作提交审核上下架删除通过现有平台审计日志记录建议扩展字段
- `bizType=gxnl_slxx`
- `bizId=wz_uuid`
- `op=submit|audit|onShelf|offShelf|delete`
不在业务表增加 `czrz_uuid`以日志中心为准
---
## 15. 与现有表对比
| 维度 | 原供需表 | v2.0 新表 |
|------|----------|-----------|
| 链接 | | `wz_lj` + URL 校验 |
| 分类 | 关键词 | `gxnl_fl_dm` |
| 收藏唯一 | `gx_uuid` | `wz_uuid` + upsert |
| 并发 | 无版本号 | `bbh` 乐观锁 |
| 多轮审核 | `shqkb` | `shls_j` 过渡 + 二期 `slshb` |
---
## 16. 前端字段映射
| 前端 | 表字段 |
|------|--------|
| submitForm.bt1 | bt |
| submitForm.lj | wz_lj |
| submitForm.jj | jj |
| submitForm.fl | gxnl_fl_dm |
| submitForm.bq | bqjh |
| submitForm.nc | tjr_nc |
| submitForm.lxfs | tjr_lxdh |
| card.gxUuid | **wz_uuid**接口驼峰 `wzUuid` |
---
## 17. DDL
`txw-mhzc/sql/txw_mhzc_gxnl_slxxb_gxscb.sql`