# 自有数据库说明

## 使用须知
由你提供主机/端口/数据库/用户名/密码，我们将你账号下的数据实时推送到这个数据库。

这种推送方式会在你的数据库下自动建表，需要你的数据库开放公网访问权限。

- 数据表是全量覆盖更新，不支持同一个表中部分数据是用户自己新增的。
- 不要在数据库中新增与草料相同的名称数据表，会被识别为草料数据表，数据会全量覆盖。
- 数据库类型为：Mysql 5.7
- 会实时同步所有的码信息、表单记录、状态明细、计划完成明细等数据。
- 只创建批量模板和表单，没有填写数据，是不会创建数据表的。
- 有防火墙等访问限制时，需添加下[IP白名单](/help/integration-and-connection/data-api/private-database-guide "IP白名单")

附：[Mysql 5.7 数据库的下载地址](https://dev.mysql.com/downloads/mysql/5.7.html "Mysql 5.7 数据库的下载页")

## 使用方法
草料后台导航栏【数据管理】>【数据API】，选择【自有数据库】，填入你的数据库主机、端口、账号等信息。

![草料后台数据管理界面](https://blogcdnimg.clewm.net/2024/05/image-1714888414386_17148884080284.png)
>图片说明：弹窗界面用于配置自有数据库连接信息，支持MySQL 5.7版本，含主机、端口、数据库、用户名、密码等字段及保存操作。

## 数据表说明

### 1. base_codeinfo 码的基本信息表
说明：当账号下有二维码信息时会推送该表，包含活码、模板子码

- 字段名：code_id：int；码的唯一标识：67654543
- 码名称：string；码名称：消火栓01
- 码类型：string；有活码、模板子码和模板码：模板子码
- url：string；二维码链接：http://qr61.cn/o2eikt/q85Q8KL
- tpl_code_id：int；子码对应的批量模板ID 非模板子码，内容与code_id相同：56335353
- 模板名称：string；子码对应的批量模板名称 非模板子码，内容与码名称相同：消火栓
- 目录：string；码所在的最后一级目录名称，不包含前几级目录信息：消防设备
- 标签集：string；码的分组集合：消防类,设备

目录信息：为码所在的最后一级目录，不会显示其上几级目录信息。

### 2. code_state 码的状态表
说明：当二维码中有关联的状态时会推送该表。[查看状态功能](/help/status/status-feature "查看状态功能")

现在不会推送在开通之前的码状态数据，如需要这部分数据，可以联系在线客服，由技术手动帮你同步。

- 字段名：code_id：int；码的唯一标识：67654543
- member_id：int；成员唯一标识：2091263
- auth_id：int；填表人唯一标识：12789054
- 更新时间：datetime；状态更新时间：2020-11-20 15:00:00
- 例：设备运行状态_720：string；状态组名称，后面"_720"数字是为了防重复，系统自动生成的标识：正常
- ......：string；账号下的所有状态组都会列在这里：异常

### 3. code_state_log 码的状态的变更日志表

说明：当二维码中有关联的状态时会推送该表，每次状态变更的记录都会记录在这张表中。首次开通数据库时，不会推送在开通之前的状态变更数据。

- 字段名：code_id：int；码的唯一标识：67654543
- member_id：int；成员唯一标识：2091263
- auth_id：int；填表人唯一标识：12789054
- 更新时间：datetime；状态更新时间：2020-11-20 15:00:00
- 状态组：string；状态组的名称：设备状态
- 状态值：string；该状态组的本次的状态：正常
- 变更方式：string；变更状态的方式，包含填表后更新状态和手动编辑状态：记录/编辑
- 来源：string；变更方式为记录时，对应表单数据的唯一标识：12220988

### 4. table_dXX 表单数据明细表

说明：当账号下有表单数据提交时会推送该表。表单数据表是以"table_"开头的一批表，d后面跟着的是数字，即表单的唯一编号，如：table_d45，一个表单对应一个表。[查看表单功能](/help/forms/form-feature "查看表单功能")

![表单数据明细表截图](https://blogcdnimg.clewm.net/2021/08/16297070832115_image-1629707082987.png)
>图片说明：日常巡检记录页面，显示表单编号D45及总记录数、填写人数等统计信息，用于查看巡检任务执行情况。

- 字段名：record_id：int；表单数据唯一标识：12220988
- code_id：int；码的唯一标识：67654543
- tpl_code_id：int；模板子码：对应的批量模板ID 非模板子码：内容与code_id相同：54349863
- 码名称：string；码的名称：消火栓01
- tpl_id：int；表单的唯一标识：346636
- 记录单名称：string；表单的名称：消火栓检查
- 记录时间：datetime；添加表单数据时间：2020-11-20 15:20:00
- 状态：string；这条记录当前的状态：包含是否删除、是否审核通过：正常/删除/待审核/审核通过/审核不通过
- member_id：int；协作成员唯一标识：2091263
- auth_id：int；填表人唯一标识：12789054
- 记录编号：string；表单数据的编号：L1234
- 处理状态：string；表单数据的处理状态：待处理/已完成/无需处理/暂不标记状态
- 创建来源：string；包含手机扫码填写，在备注中填写，即后续动态中填写：手机扫码填写/在备注中填写
- 来源编号：string；当创建来源为在备注中填写时，来源编号为原记录的记录编号：L1235
- 提交编号：string；草料后台自定义的提交编号：11
- 处理状态变更时间：datetime；处理进度变更的时间：2020-11-20 15:20:00
- 例：设备名称：string；表单的组件名称：检查项1
- ......：string；表单的组件名称会全部展示

#### 表单组件推送情况说明：
1. 数字组件，推送时不会显示单位。
2. 检查项组件中，不同的值代表的意思为： 0=检查项未填写；1=检查项选勾； 2=检查项选叉；3=检查项不选；当检查项“√”、“×”自定义名称后，推送时不会显示自定义的名称，仍为0、1、2、3。
3. 检查项组件中备注添加的描述和图片不会推送。

4. 定位组件会推送三个字段，包含定位中文信息、定位纬度、定位经度。
5. 描述组件会推送，字段名称为描述组件对应的标题名称，字段值为描述组件添加的内容。
6. 分组标题组件不会推送。
7. 身份证组件的推送内容为拆分成多个字段展示，会拆分成身份证信息、身份证号、姓名、性别、民族、出生日期、住址，其中身份证信息展示内容为空，其他字段会填充对应的值。
8. 多媒体组件（含图片、文件、视频、音频）都会以连接方式推送，点击链接可查看

### 5. base_table_data 表单数据汇总表
说明：当账号下有表单数据提交时会推送该表。这是一张所有表单记录的概要汇总表，上面有各表单记录中共有的字段信息，比如码名称、记录人、记录单名称等。
应用场景：比如有出入两个表单，可以通过这个表拿到所有出入数据，而不需要将出入两个数据表做聚合处理。

- 字段名：record_id：int；表单数据唯一标识：12220988
- code_id：int；码的唯一标识：67654543
- tpl_code_id：int；模板子码：对应的批量模板ID 非模板子码：内容与code_id相同：56335353
- tpl_id：int；表单的唯一标识：346636
- 码名称：string；码名称：消火栓01
- 记录单名称：string；表单名称：消火栓巡检
- 记录时间：datetime；添加表单数据的时间：2020-11-20 12:01:02
- 记录人：string；填表人姓名：李四
- member_id：int；成员唯一标识：2091263
- auth_id：int；填表人唯一标识：12789054
- 状态：string；这条记录当前的状态：包含是否删除、是否审核通过：正常/删除/待审核/审核通过/审核不通过
- 记录编号：string；记录编号：L1234

### 6. template_codeinfo_XXX 批量模板创建的子码信息表

说明：当账号下有批量模板生成的子码时会推送该表，该数据表主要展示批量子码的可变内容。[查看批量生码功能](/help/bulk-qr-code/bulk-dynamic-qr-code/dynamic-qr-code-batch "查看批量生码功能")

命名方式为 template 开头，后面是批量模板的识别编号，该编号规则有两个历史版本。
#### 6.1 命名规则：

- 方式一：后缀为dXX，d后面的数字为批量模板编号数字。
比如后台的批量模板编号为M312，对应的数据表名为 template_codeinfo_D312

![批量模板编号示例](https://blogcdnimg.clewm.net/2023/11/image-1700448135082_17004481355628.png)
>图片说明：展示信息系统的模板管理界面，列出了多个批量模板及其对应的数据表名称、子码数量与操作选项。

- 方式二：后缀为内部的批量模板ID。
编辑批量模板，从网址中获取ID，见下图

![批量模板ID获取示例](https://blogcdnimg.clewm.net/2023/09/image-1695199623808_16951996243010.png)
>图片说明：后台模板编辑界面，展示“固定资产标签”模板的字段配置与预览效果，含可变内容、输入标题、资产信息等区域及右侧样式预览。

#### 6.2 数据字段说明：

- 字段名：code_id：int；码的唯一标识：67654543
- tpl_code_id：int；批量模板的唯一标识：56335353
- 状态：string；批量子码是否删除：正常
- ...：string；以下字段是在批量模板中的可变内容

### 7. record_review_data 后续动态数据表

说明：当表单记录中有添加后续动态或者标记处理进度后会推送该表。[查看后续动态功能](/help/forms/form-design/follow-up-process/follow-up-actions "查看后续动态功能")

- 字段名：review_id：int；后续动态填写记录的唯一标识：67654543
- record_id：int；后续动态填写表单记录的唯一标识：12220988
- 状态：string；后续动态记录是否删除：正常/删除
- 来源：string；后续动态记录的添加来源：手动填写/转发了记录/转发给了企业微信同事/变更处理状态/填写表单记录/发送通知/回复评论
- 文本内容：string；底部评论的具体内容/变更处理进度的记录：将记录更新为【已完成】/@张三/【图片】...
- 关键内容：string；变更后的处理进度/当填写后续动态中的表单时，关键内容会显示填写对应表单的数据唯一标识：已完成/12220988
- 附件：string；后续动态提交的图片、录音、手写签名等多媒体文件
- 填写人：string；填表人姓名：张三
- 填写时间：datetime；后续动态记录添加的时间：2020-11-20 15:20:00

### 8. base_task 计划基本信息表

说明：当账号下创建计划，并且开始执行计划后会推送该表。[计划管理功能](/help/plan-feature/plan "计划管理功能")

- 字段名：task_id：int；计划的唯一标识：33886
- 计划名称：string；计划名称：灭火器每月巡检
- 描述：string；计划描述

### 9. code_task_log 计划执行情况表

说明：当账号下创建计划，并且开始执行计划后会推送该表。开通数据库后，该表只推送之后新开始执行的计划周期数据；历史周期、开通时正在执行的当前周期计划数据不会推送。

该数据表中没有码名称信息，可以关联 base_codeinfo或template_XXX，扩充码的信息。

- 字段名：log_id：int；当前计划任务的唯一标识：239168567
- task_id：int；计划的唯一标识：33886
- 计划名称：string；计划名称：灭火器每月巡检
- code_id：int；码的唯一标识：67654543
- 状态：string；该周期的执行状态：可选值：完成/未完成/即将超期/超期完成/超期未完成
- 开始时间：datetime；计划周期开始时间：2020-12-10 12:00:00
- 执行时间：datetime；状态变更的时间：2020-12-10 13:00:00
- 截止时间：datetime；该码在本周期的结束时间：2020-12-10 18:00:00
- 是否过滤：string；根据是否设置无需检查的条件进行过滤：可选值：是/否
- 变更方式：string；变更状态的方式：记录
- 来源：int；变更方式为记录时，对应表单数据的唯一标识：12220988
- 来源记录结果：string；变更方式为记录时，对应表单数据的记录结果：设备正常

### 10. code_tags 码的分组表

说明：当使用分组功能并且将码加入分组时会推送该表。[查看分组管理功能](/help/qr-code-and-data/qr-code-management/group-management "查看分组管理功能")

- 字段名：code_id：int；码的唯一标识：67654543
- 例：1号楼灭火器：int；分组名称，如果该码在此分组下，则值为1：1
- 例：2号楼灭火器：int；分组名称：1
- ......：int；账号下的所有分组都会列在这里

### 11. base_members 成员信息表

说明：当账号下有高级成员添加时会推送该表，当前成员信息表仅同步高级成员信息，普通成员信息不会推送。[查看成员功能](/help/member-and-permissions/member-feature "查看成员功能")

- 字段名：member_id：int；协作成员的唯一标识：2091263
- 姓名：string；协作成员姓名：张三
- 手机号：string；协作成员手机号：135xxxx8934

### 12. base_auth_msg 填表人信息表

说明：当有表单记录提交或者状态更新记录时，会推送填表人信息表，填表人即填写表单或者变更状态的人员。[查看填表人组件](/help/forms/form-design/form-creation/form-components/special-components/submitter-component "查看填表人组件")
1. 如果未填写表单，则只展示auth_id
2. 如果填写表单但是未使用填表人组件，则只展示auth_id，姓名为微信用户XXXX
3. 如果填写表单并且使用了姓名、手机号、工号、车牌号、身份证等填表人组件后则展示对应字段的数据

- 字段名：auth_id：int；填表人的唯一标识：12789054
- 姓名：string；填表人姓名：李四
- 手机号：string；填表人手机号：135xxxx8934
- 工号：string；填表人工号：D234
- 车牌号：string；填表人车牌：浙A.12342
- 身份证：string；填表人身份证：343xxxxxxxxxxxxx

### 13. record_audit_data 记录审批工单表

说明：当提交待审批的记录或者记录被审批后会推送该表。[查看审批功能](/help/forms/form-design/follow-up-process/data-approval/overview "查看审批功能")

- 字段名：auth_id：int；审批工单的唯一标识：9001
- record_id：int；审批工单关联记录的唯一标识：1001
- 状态：string；工单是否审批：待审核/通过/不通过
- 审核标题：string；多级审核设置的标题，单级审批内容为空：财务审核
- 指定审核人：string；由填表人或者前一级审核人指定的审核人，不指定时内容为空：张三
- 审核人：string；实际审核操作人：张三
- 审核时间：datetime；实际审核时间：2024-09-20 15:20:00
- 审核签名：string；实际审核人签署的签名图片地址，没有签署时内容为空：https://ncstatic.clewm.net/rsrc/2024/1015/15/c12d5af513b275ba2465f923557a1f7c.png
- 审核回复：string；实际审核人审批时填写的回复信息，未填写时内容为空：提交的内容不符合要求
- 创建时间：datetime；审批工单创建时间：2024-09-20 10:20:00

## 事件推送说明

### 使用须知
由你提供主机/端口/数据库/用户名/密码，我们将你账号下的数据实时推送到这个数据库。

这种推送方式会在你的数据库下自动建表，需要你的数据库开放公网访问权限。

- 数据表是全量覆盖更新，不支持同一个表中部分数据是用户自己新增的。
- 不要在数据库中新增与草料相同的名称数据表，会被识别为草料数据表，数据会全量覆盖。
- 数据库类型为：Mysql 5.7
- 会实时同步所有的码信息、表单记录、状态明细、计划完成明细等数据。
- 只创建批量模板和表单，没有填写数据，是不会创建数据表的。
- 有防火墙等访问限制时，需添加下[IP白名单](/help/integration-and-connection/data-api/private-database-guide "IP白名单")

附：[Mysql 5.7 数据库的下载地址](https://dev.mysql.com/downloads/mysql/5.7.html "Mysql 5.7 数据库的下载页")

## 使用方法
草料后台导航栏【数据管理】>【数据API】，选择【自有数据库】，填入你的数据库主机、端口、账号等信息。

![草料后台数据管理界面](https://blogcdnimg.clewm.net/2024/05/image-1714888414386_17148884080284.png)
>图片说明：弹窗界面用于配置自有数据库连接信息，支持MySQL 5.7版本，含主机、端口、数据库、用户名、密码等字段及保存操作。

## 数据表说明

### 1. base_codeinfo 码的基本信息表
说明：当账号下有二维码信息时会推送该表，包含活码、模板子码

- 字段名：code_id：int；码的唯一标识：67654543
- 码名称：string；码名称：消火栓01
- 码类型：string；有活码、模板子码和模板码：模板子码
- url：string；二维码链接：http://qr61.cn/o2eikt/q85Q8KL
- tpl_code_id：int；子码对应的批量模板ID 非模板子码，内容与code_id相同：56335353
- 模板名称：string；子码对应的批量模板名称 非模板子码，内容与码名称相同：消火栓
- 目录：string；码所在的最后一级目录名称，不包含前几级目录信息：消防设备
- 标签集：string；码的分组集合：消防类,设备

目录信息：为码所在的最后一级目录，不会显示其上几级目录信息。

### 2. code_state 码的状态表
说明：当二维码中有关联的状态时会推送该表。[查看状态功能](/help/status/status-feature "查看状态功能")

现在不会推送在开通之前的码状态数据，如需要这部分数据，可以联系在线客服，由技术手动帮你同步。

- 字段名：code_id：int；码的唯一标识：67654543
- member_id：int；成员唯一标识：2091263
- auth_id：int；填表人唯一标识：12789054
- 更新时间：datetime；状态更新时间：2020-11-20 15:00:00
- 例：设备运行状态_720：string；状态组名称，后面"_720"数字是为了防重复，系统自动生成的标识：正常
- ......：string；账号下的所有状态组都会列在这里：异常

### 3. code_state_log 码的状态的变更日志表

说明：当二维码中有关联的状态时会推送该表，每次状态变更的记录都会记录在这张表中。首次开通数据库时，不会推送在开通之前的状态变更数据。

- 字段名：code_id：int；码的唯一标识：67654543
- member_id：int；成员唯一标识：2091263
- auth_id：int；填表人唯一标识：12789054
- 更新时间：datetime；状态更新时间：2020-11-20 15:00:00
- 状态组：string；状态组的名称：设备状态
- 状态值：string；该状态组的本次的状态：正常
- 变更方式：string；变更状态的方式，包含填表后更新状态和手动编辑状态：记录/编辑
- 来源：string；变更方式为记录时，对应表单数据的唯一标识：12220988

### 4. table_dXX 表单数据明细表

说明：当账号下有表单数据提交时会推送该表。表单数据表是以"table_"开头的一批表，d后面跟着的是数字，即表单的唯一编号，如：table_d45，一个表单对应一个表。[查看表单功能](/help/forms/form-feature "查看表单功能")

![表单数据明细表截图](https://blogcdnimg.clewm.net/2021/08/16297070832115_image-1629707082987.png)
>图片说明：日常巡检记录页面，显示表单编号D45及总记录数、填写人数等统计信息，用于查看巡检任务执行情况。

- 字段名：record_id：int；表单数据唯一标识：12220988
- code_id：int；码的唯一标识：67654543
- tpl_code_id：int；模板子码：对应的批量模板ID 非模板子码：内容与code_id相同：54349863
- 码名称：string；码的名称：消火栓01
- tpl_id：int；表单的唯一标识：346636
- 记录单名称：string；表单的名称：消火栓检查
- 记录时间：datetime；添加表单数据时间：2020-11-20 15:20:00
- 状态：string；这条记录当前的状态：包含是否删除、是否审核通过：正常/删除/待审核/审核通过/审核不通过
- member_id：int；协作成员唯一标识：2091263
- auth_id：int；填表人唯一标识：12789054
- 记录编号：string；表单数据的编号：L1234
- 处理状态：string；表单数据的处理状态：待处理/已完成/无需处理/暂不标记状态
- 创建来源：string；包含手机扫码填写，在备注中填写，即后续动态中填写：手机扫码填写/在备注中填写
- 来源编号：string；当创建来源为在备注中填写时，来源编号为原记录的记录编号：L1235
- 提交编号：string；草料后台自定义的提交编号：11
- 处理状态变更时间：datetime；处理进度变更的时间：2020-11-20 15:20:00
- 例：设备名称：string；表单的组件名称：检查项1
- ......：string；表单的组件名称会全部展示

#### 表单组件推送情况说明：
1. 数字组件，推送时不会显示单位。
2. 检查项组件中，不同的值代表的意思为： 0=检查项未填写；1=检查项选勾； 2=检查项选叉；3=检查项不选；当检查项“√”、“×”自定义名称后，推送时不会显示自定义的名称，仍为0、1、2、3。
3. 检查项组件中备注添加的描述和图片不会推送。

4. 定位组件会推送三个字段，包含定位中文信息、定位纬度、定位经度。
5. 描述组件会推送，字段名称为描述组件对应的标题名称，字段值为描述组件添加的内容。
6. 分组标题组件不会推送。
7. 身份证组件的推送内容为拆分成多个字段展示，会拆分成身份证信息、身份证号、姓名、性别、民族、出生日期、住址，其中身份证信息展示内容为空，其他字段会填充对应的值。
8. 多媒体组件（含图片、文件、视频、音频）都会以连接方式推送，点击链接可查看

- 字段名：record_id：int；列1：类型：int；列2：说明：表单数据唯一标识；列3：示例：12220988
- 字段名：code_id：int；列1：类型：int；列2：说明：码的唯一标识；列3：示例：67654543
- 字段名：tpl_code_id：int；列1：类型：int；列2：说明：模板子码：对应的批量模板ID 非模板子码：内容与code_id相同；列3：示例：54349863
- 字段名：码名称：string；列1：类型：string；列2：说明：码的名称；列3：示例：消火栓01
- 字段名：tpl_id：int；列1：类型：int；列2：说明：表单的唯一标识；列3：示例：346636
- 字段名：记录单名称：string；列1：类型：string；列2：说明：表单的名称；列3：示例：消火栓检查
- 字段名：记录时间：datetime；列1：类型：datetime；列2：说明：添加表单数据时间；列3：示例：2020-11-20 15:20:00
- 字段名：状态：string；列1：类型：string；列2：说明：这条记录当前的状态：包含是否删除、是否审核通过；列3：示例：正常/删除/待审核/审核通过/审核不通过
- 字段名：member_id：int；列1：类型：int；列2：说明：协作成员唯一标识；列3：示例：2091263
- 字段名：auth_id：int；列1：类型：int；列2：说明：填表人唯一标识；列3：示例：12789054
- 字段名：记录编号：string；列1：类型：string；列2：说明：表单数据的编号；列3：示例：L1234
- 字段名：处理状态：string；列1：类型：string；列2：说明：表单数据的处理状态；列3：示例：待处理/已完成/无需处理/暂不标记状态
- 字段名：创建来源：string；列1：类型：string；列2：说明：包含手机扫码填写，在备注中填写，即后续动态中填写；列3：示例：手机扫码填写/在备注中填写
- 字段名：来源编号：string；列1：类型：string；列2：说明：当创建来源为在备注中填写时，来源编号为原记录的记录编号；列3：示例：L1235
- 字段名：提交编号：string；列1：类型：string；列2：说明：草料后台自定义的提交编号；列3：示例：11
- 字段名：处理状态变更时间：datetime；列1：类型：datetime；列2：说明：处理进度变更的时间；列3：示例：2020-11-20 15:20:00
- 字段名：例：设备名称：string；列1：类型：string；列2：说明：表单的组件名称；列3：示例：检查项1
- 字段名：......：string；列1：类型：string；列2：说明：表单的组件名称会全部展示；列3：示例：

#### 表单组件推送情况说明：
1. 数字组件，推送时不会显示单位。
2. 检查项组件中，不同的值代表的意思为： 0=检查项未填写；1=检查项选勾； 2=检查项选叉；3=检查项不选；当检查项“√”、“×”自定义名称后，推送时不会显示自定义的名称，仍为0、1、2、3。
3. 检查项组件中备注添加的描述和图片不会推送。
4. 定位组件会推送三个字段，包含定位中文信息、定位纬度、定位经度。
5. 描述组件会推送，字段名称为描述组件对应的标题名称，字段值为描述组件添加的内容。
6. 分组标题组件不会推送。
7. 身份证组件的推送内容为拆分成多个字段展示，会拆分成身份证信息、身份证号、姓名、性别、民族、出生日期、住址，其中身份证信息展示内容为空，其他字段会填充对应的值。
8. 多媒体组件（含图片、文件、视频、音频）都会以连接方式推送，点击链接可查看

### 5. base_table_data 表单数据汇总表
说明：当账号下有表单数据提交时会推送该表。这是一张所有表单记录的概要汇总表，上面有各表单记录中共有的字段信息，比如码名称、记录人、记录单名称等。
应用场景：比如有出入两个表单，可以通过这个表拿到所有出入数据，而不需要将出入两个数据表做聚合处理。

- 字段名：record_id：int；列1：类型：int；列2：说明：表单数据唯一标识；列3：示例：12220988
- 字段名：code_id：int；列1：类型：int；列2：说明：码的唯一标识；列3：示例：67654543
- 字段名：tpl_code_id：int；列1：类型：int；列2：说明：模板子码：对应的批量模板ID 非模板子码：内容与code_id相同；列3：示例：56335353
- 字段名：tpl_id：int；列1：类型：int；列2：说明：表单的唯一标识；列3：示例：346636
- 字段名：码名称：string；列1：类型：string；列2：说明：码名称；列3：示例：消火栓01
- 字段名：记录单名称：string；列1：类型：string；列2：说明：表单名称；列3：示例：消火栓巡检
- 字段名：记录时间：datetime；列1：类型：datetime；列2：说明：添加表单数据的时间；列3：示例：2020-11-20 12:01:02
- 字段名：记录人：string；列1：类型：string；列2：说明：填表人姓名；列3：示例：李四
- 字段名：member_id：int；列1：类型：int；列2：说明：成员唯一标识；列3：示例：2091263
- 字段名：auth_id：int；列1：类型：int；列2：说明：填表人唯一标识；列3：示例：12789054
- 字段名：状态：string；列1：类型：string；列2：说明：这条记录当前的状态：包含是否删除、是否审核通过；列3：示例：正常/删除/待审核/审核通过/审核不通过
- 字段名：记录编号：string；列1：类型：string；列2：说明：记录编号；列3：示例：L1234

### 6. template_codeinfo_XXX 批量模板创建的子码信息表

说明：当账号下有批量模板生成的子码时会推送该表，该数据表主要展示批量子码的可变内容。[查看批量生码功能](https://help/bulk-qr-code/bulk-dynamic-qr-code/dynamic-qr-code-batch "查看批量生码功能")

命名方式为 template 开头，后面是批量模板的识别编号，该编号规则有两个历史版本。
#### 6.1 命名规则：

- 方式一：后缀为dXX，d后面的数字为批量模板编号数字。
比如后台的批量模板编号为M312，对应的数据表名为 template_codeinfo_D312

![批量模板编号示例](https://blogcdnimg.clewm.net/2023/11/image-1700448135082_17004481355628.png)
>图片说明：展示信息系统的模板管理界面，列出了多个批量模板及其对应的数据表名称、子码数量与操作选项。

- 方式二：后缀为内部的批量模板ID。
编辑批量模板，从网址中获取ID，见下图

![批量模板ID获取示例](https://blogcdnimg.clewm.net/2023/09/image-1695199623808_16951996243010.png)
>图片说明：后台模板编辑界面，展示“固定资产标签”模板的字段配置与预览效果，含可变内容、输入标题、资产信息等区域及右侧样式预览。

#### 6.2 数据字段说明：

- 字段名：code_id：int；列1：类型：int；列2：说明：码的唯一标识；列3：示例：67654543
- 字段名：tpl_code_id：int；列1：类型：int；列2：说明：批量模板的唯一标识；列3：示例：56335353
- 字段名：状态：string；列1：类型：string；列2：说明：批量子码是否删除；列3：示例：正常
- 字段名：...：string；列1：类型：string；列2：说明：以下字段是在批量模板中的可变内容；列3：示例：

### 7. record_review_data 后续动态数据表

说明：当表单记录中有添加后续动态或者标记处理进度后会推送该表。[查看后续动态功能](https://help/forms/form-design/follow-up-process/follow-up-actions "查看后续动态功能")

- 字段名：review_id：int；列1：类型：int；列2：说明：后续动态填写记录的唯一标识；列3：示例：67654543
- 字段名：record_id：int；列1：类型：int；列2：说明：后续动态填写表单记录的唯一标识；列3：示例：12220988
- 字段名：状态：string；列1：类型：string；列2：说明：后续动态记录是否删除；列3：示例：正常/删除
- 字段名：来源：string；列1：类型：string；列2：说明：后续动态记录的添加来源；列3：示例：手动填写/转发了记录/转发给了企业微信同事/变更处理状态/填写表单记录/发送通知/回复评论
- 字段名：文本内容：string；列1：类型：string；列2：说明：底部评论的具体内容/变更处理进度的记录；列3：示例：将记录更新为【已完成】/@张三/【图片】...
- 字段名：关键内容：string；列1：类型：string；列2：说明：变更后的处理进度/当填写后续动态中的表单时，关键内容会显示填写对应表单的数据唯一标识；列3：示例：已完成/12220988
- 字段名：附件：string；列1：类型：string；列2：说明：后续动态提交的图片、录音、手写签名等多媒体文件；列3：示例：
- 字段名：填写人：string；列1：类型：string；列2：说明：填表人姓名；列3：示例：张三
- 字段名：填写时间：datetime；列1：类型：datetime；列2：说明：后续动态记录添加的时间；列3：示例：2020-11-20 15:20:00

### 8. base_task 计划基本信息表

说明：当账号下创建计划，并且开始执行计划后会推送该表。[计划管理功能](https://help/plan-feature/plan "计划管理功能")

- 字段名：task_id：int；列1：类型：int；列2：说明：计划的唯一标识；列3：示例：33886
- 字段名：计划名称：string；列1：类型：string；列2：说明：计划名称；列3：示例：灭火器每月巡检
- 字段名：描述：string；列1：类型：string；列2：说明：计划描述；列3：示例：

### 9. code_task_log 计划执行情况表

说明：当账号下创建计划，并且开始执行计划后会推送该表。开通数据库后，该表只推送之后新开始执行的计划周期数据；历史周期、开通时正在执行的当前周期计划数据不会推送。

该数据表中没有码名称信息，可以关联 base_codeinfo或template_XXX，扩充码的信息。

- 字段名：log_id：int；列1：类型：int；列2：说明：当前计划任务的唯一标识；列3：示例：239168567
- 字段名：task_id：int；列1：类型：int；列2：说明：计划的唯一标识；列3：示例：33886
- 字段名：计划名称：string；列1：类型：string；列2：说明：计划名称；列3：示例：灭火器每月巡检
- 字段名：code_id：int；列1：类型：int；列2：说明：码的唯一标识；列3：示例：67654543
- 字段名：状态：string；列1：类型：string；列2：说明：该周期的执行状态；列3：示例：可选值：完成/未完成/即将超期/超期完成/超期未完成
- 字段名：开始时间：datetime；列1：类型：datetime；列2：说明：计划周期开始时间；列3：示例：2020-12-10 12:00:00
- 字段名：执行时间：datetime；列1：类型：datetime；列2：说明：状态变更的时间；列3：示例：2020-12-10 13:00:00
- 字段名：截止时间：datetime；列1：类型：datetime；列2：说明：该码在本周期的结束时间；列3：示例：2020-12-10 18:00:00
- 字段名：是否过滤：string；列1：类型：string；列2：说明：根据是否设置无需检查的条件进行过滤；列3：示例：可选值：是/否
- 字段名：变更方式：string；列1：类型：string；列2：说明：变更状态的方式；列3：示例：记录
- 字段名：来源：int；列1：类型：int；列2：说明：变更方式为记录时，对应表单数据的唯一标识；列3：示例：12220988
- 字段名：来源记录结果：string；列1：类型：string；列2：说明：变更方式为记录时，对应表单数据的记录结果；列3：示例：设备正常

### 10. code_tags 码的分组表

说明：当使用分组功能并且将码加入分组时会推送该表。[查看分组管理功能](https://help/qr-code-and-data/qr-code-management/group-management "查看分组管理功能")

- 字段名：code_id：int；列1：类型：int；列2：说明：码的唯一标识；列3：示例：67654543
- 字段名：例：1号楼灭火器：int；列1：类型：int；列2：说明：分组名称，如果该码在此分组下，则值为1；列3：示例：1
- 字段名：例：2号楼灭火器：int；列1：类型：int；列2：说明：分组名称；列3：示例：1
- 字段名：......：int；列1：类型：int；列2：说明：账号下的所有分组都会列在这里；列3：示例：

### 11. base_members 成员信息表

说明：当账号下有高级成员添加时会推送该表，当前成员信息表仅同步高级成员信息，普通成员信息不会推送。[查看成员功能](https://help/member-and-permissions/member-feature "查看成员功能")

- 字段名：member_id：int；列1：类型：int；列2：说明：协作成员的唯一标识；列3：示例：2091263
- 字段名：姓名：string；列1：类型：string；列2：说明：协作成员姓名；列3：示例：张三
- 字段名：手机号：string；列1：类型：string；列2：说明：协作成员手机号；列3：示例：135xxxx8934

### 12. base_auth_msg 填表人信息表

说明：当有表单记录提交或者状态更新记录时，会推送填表人信息表，填表人即填写表单或者变更状态的人员。[查看填表人组件](https://help/forms/form-design/form-creation/form-components/special-components/submitter-component "查看填表人组件")
1. 如果未填写表单，则只展示auth_id
2. 如果填写表单但是未使用填表人组件，则只展示auth_id，姓名为微信用户XXXX
3. 如果填写表单并且使用了姓名、手机号、工号、车牌号、身份证等填表人组件后则展示对应字段的数据

- 字段名：auth_id：int；列1：类型：int；列2：说明：填表人的唯一标识；列3：示例：12789054
- 字段名：姓名：string；列1：类型：string；列2：说明：填表人姓名；列3：示例：李四
- 字段名：手机号：string；列1：类型：string；列2：说明：填表人手机号；列3：示例：135xxxx8934
- 字段名：工号：string；列1：类型：string；列2：说明：填表人工号；列3：示例：D234
- 字段名：车牌号：string；列1：类型：string；列2：说明：填表人车牌；列3：示例：浙A.12342
- 字段名：身份证：string；列1：类型：string；列2：说明：填表人身份证；列3：示例：343xxxxxxxxxxxxx

### 13. record_audit_data 记录审批工单表

说明：当提交待审批的记录或者记录被审批后会推送该表。[查看审批功能](https://help/forms/form-design/follow-up-process/data-approval/overview "查看审批功能")

- 字段名：auth_id：int；列1：类型：int；列2：说明：审批工单的唯一标识；列3：示例：9001
- 字段名：record_id：int；列1：类型：int；列2：说明：审批工单关联记录的唯一标识；列3：示例：1001
- 字段名：状态：string；列1：类型：string；列2：说明：工单是否审批；列3：示例：待审核/通过/不通过
- 字段名：审核标题：string；列1：类型：string；列2：说明：多级审核设置的标题，单级审批内容为空；列3：示例：财务审核
- 字段名：指定审核人：string；列1：类型：string；列2：说明：由填表人或者前一级审核人指定的审核人，不指定时内容为空；列3：示例：张三
- 字段名：审核人：string；列1：类型：string；列2：说明：实际审核操作人；列3：示例：张三
- 字段名：审核时间：datetime；列1：类型：datetime；列2：说明：实际审核时间；列3：示例：2024-09-20 15:20:00
- 字段名：审核签名：string；列1：类型：string；列2：说明：实际审核人签署的签名图片地址，没有签署时内容为空；列3：示例：https://ncstatic.clewm.net/rsrc/2024/1015/15/c12d5af513b275ba2465f923557a1f7c.png
- 字段名：审核回复：string；列1：类型：string；列2：说明：实际审核人审批时填写的回复信息，未填写时内容为空；列3：示例：提交的内容不符合要求
- 字段名：创建时间：datetime；列1：类型：datetime；列2：说明：审批工单创建时间；列3：示例：2024-09-20 10:20:00

## 事件推送说明
### 1. 活码
- 事件：单码新建：推送；影响的数据表：base_codeinfo；数据表现：base_codeinfo新增一条二维码数据
- 事件：单码新建-有状态关联：推送；影响的数据表：base_codeinfo、 code_state、 code_state_log、 table_d[x]、 table_relation、 base_table_data；数据表现：数据表新增一条数据
- 事件：单码修改：推送；影响的数据表：base_codeinfo；数据表现：base_codeinfo修改了调整的数据，会覆盖原数据
- 事件：单码删除：推送；影响的数据表：base_codeinfo；数据表现：base_codeinfo删除一条二维码数据
- 事件：单码删除-有表单数据：推送；影响的数据表：base_codeinfo、 table_d[x]、 base_table_data；数据表现：数据表删除一条数据
- 事件：单码删除-有状态关联：推送；影响的数据表：base_codeinfo、 code_state、 table_d[x]、 code_state_log、 base_table_data；数据表现：数据表删除一条数据

### 2. 批量模板
- 事件：新建批量模板：不推送；影响的数据表：-；数据表现：-
- 事件：新建批量模板-有状态关联：推送；影响的数据表：code_state、 code_state_log；数据表现：code_state新增一条码模板的状态数据，code_state_log新增初始化状态下的码模板状态变更记录
- 事件：修改批量模板标题：不推送；影响的数据表：-；数据表现：-
- 事件：修改批量模板可变内容-无子码：不推送；影响的数据表：-；数据表现：-
- 事件：修改批量模板可变内容-有子码：不推送；影响的数据表：-；数据表现：-
- 事件：删除批量模板-有子码：推送；影响的数据表：base_codeinfo、 template_codeinfo_[x]；数据表现：数据表删除对应的数据
- 事件：删除批量模板-有子码/表单数据：推送；影响的数据表：base_codeinfo、 template_codeinfo_[x]、 base_table_data、 table_d[x]；数据表现：数据表删除对应的数据
- 事件：删除批量模板-有子码/关联状态：推送；影响的数据表：base_codeinfo、 template_codeinfo_[x]、 code_state、 code_state_log；数据表现：数据表删除对应的数据
- 事件：新建子码：推送；影响的数据表：base_codeinfo、 template_codeinfo_[x]；数据表现：数据表新增对应的数据
- 事件：新建子码-有状态关联：推送；影响的数据表：base_codeinfo、 template_codeinfo_[x]、 code_state、 code_state_log；数据表现：数据表新增对应的数据
- 事件：删除子码：推送；影响的数据表：base_codeinfo、 template_codeinfo_[x]；数据表现：数据表删除对应的数据
- 事件：删除子码-有状态关联：推送；影响的数据表：base_codeinfo、 template_codeinfo_[x]、 code_state、 code_state_log；数据表现：数据表删除对应的数据
- 事件：删除子码-有表单数据：推送；影响的数据表：base_codeinfo、 template_codeinfo_[x]、 base_table_data、 table_d[x]；数据表现：数据表删除对应的数据
- 事件：修改子码：推送；影响的数据表：base_codeinfo、 template_codeinfo_[x]；数据表现：如果是修改子码名称，变更base_codeinfo对应的记录， 如果是修改子码可变内容对应的值，变更template_codeinfo_[x]对应的子码记录

### 3. 表单
以下事件都为有表单数据时的情况说明，无表单数据时都不推送

- 事件：删除表单：推送；影响的数据表：table_d[x]、 base_table_data；数据表现：对应的table_d[x]删除所有记录，表结构保留，base_table_data删除对应表单的记录
- 事件：新增表单组件：推送；影响的数据表：table_d[x]；数据表现：table_d[x]新增一个组件字段，值为空
- 事件：编辑表单组件：推送；影响的数据表：table_d[x]；数据表现：table_d[x]中原来的组件字段保留，值为空，并新增编辑后的组件字段
- 事件：删除表单组件：推送；影响的数据表：table_d[x]；数据表现：table_d[x]中原来的组件字段保留，值为空
- 事件：修改表单名称：推送；影响的数据表：table_d[x]、 table_relation；数据表现：table_d[x]中修改表单的名称，table_relation修改对应表单的名称
- 事件：表单数据提交：推送；影响的数据表：base_table_data、 table_d[x]、 table_relation、 base_auth_msg；数据表现：数据表新增对应的数据
- 事件：表单数据待审核：推送；影响的数据表：base_table_data、 table_d[x]、 table_relation、 base_auth_msg；数据表现：数据表新增对应的数据， 与单个记录添加的区别是：base_table_data、table_d[x]的字段中多一个审核状态
- 事件：表单数据审核通过或者拒绝：推送；影响的数据表：table_d[x]、 base_table_data；数据表现：table_d[x]、base_table_data中审核状态字段对应的值变更
- 事件：表单数据修改：推送；影响的数据表：table_d[x]、 base_table_data；数据表现：table_d[x]、base_table_data中修改指定的数据内容，覆盖原数据
- 事件：表单数据删除：推送；影响的数据表：table_d[x]、 base_table_data；数据表现：table_d[x]、base_table_data中删除指定的数据内容，表结构保留

### 4. 状态
状态相关数据的同步会延迟60s

- 事件：新增状态组：不推送；影响的数据表：-；数据表现：-
- 事件：修改状态组名称：不推送；影响的数据表：-；数据表现：-
- 事件：修改状态项名称：不推送；影响的数据表：-；数据表现：-
- 事件：新增/删除状态项：不推送；影响的数据表：-；数据表现：-
- 事件：删除状态组：不推送；影响的数据表：-；数据表现：-
- 事件：二维码状态变更：推送；影响的数据表：table_d[x]、 table_relation、 base_table_data、 code_state、 code_state_log、 base_auth_msg；数据表现：code_state 如果有对应码的数据存在，则覆盖原数据，否则新增，base_auth_msg 如果存在则更新，否则新增
- 事件：状态组修改后，二维码状态变更：推送；影响的数据表：table_d[x]、 table_relation、 base_table_data、 code_state、 code_state_log；数据表现：code_state 如果有对应码的数据存在，修改前的状态组字段保留，值为空，新增修改后的状态组字段和对应的值，code_state_log 新增状态变更数据
- 事件：状态项修改后，二维码状态变更：推送；影响的数据表：table_d[x]、 table_relation、 base_table_data、 code_state、 code_state_log、 base_auth_msg；数据表现：code_state 更新对应状态项字段的值，code_state_log 新增状态变更数据

### 5. 计划管理
计划新增/修改后需要开始执行才会推送数据

- 事件：计划新增：不推送；影响的数据表：-；数据表现：-
- 事件：计划开始：推送；影响的数据表：base_task、code_task_log；数据表现：数据表新增对应的数据
- 事件：计划超时：推送；影响的数据表：code_task_log；数据表现：code_task_log 状态字段的值变更，执行时间字段自动填充状态变更时的时间
- 事件：计划删除：推送；影响的数据表：base_task、code_task_log；数据表现：数据表删除对应的数据
- 事件：计划修改：推送；影响的数据表：base_task、code_task_log；数据表现：如果计划名称修改，base_task对应的数据更新，覆盖原数据，修改后的计划执行时，code_task_log对应的数据会更新，并覆盖原数据

### 6. 后续动态
- 事件：后续动态功能开启：不推送；影响的数据表：-；数据表现：-
- 事件：后续动态功能关闭：不推送；影响的数据表：-；数据表现：-
- 事件：后续动态填写：推送；影响的数据表：record_review_data；数据表现：record_review_data新增对应记录的数据
- 事件：后续动态【表单】填写：推送；影响的数据表：record_review_data、 base_table_data、 table_d[x]、 table_relation、 base_auth_msg；数据表现：record_review_data新增对应记录的数据，同时再走一遍表单数据提交的逻辑，其中table_d[x]数据中的来源编号字段为被关联表单记录的记录编号
- 事件：后续动态填写后的记录删除：推送；影响的数据表：record_review_data；数据表现：record_review_data对应的数据保留，状态字段变更为删除
- 事件：标记处理进度：推送；影响的数据表：record_review_data；数据表现：record_review_data新增对应数据

### 7. 目录
- 事件：目录重命名：不推送；影响的数据表：-；数据表现：-
- 事件：二维码移动目录：推送；影响的数据表：base_codeinfo；数据表现：base_codeinfo 更新目录字段的值
- 事件：目录删除：推送；影响的数据表：base_codeinfo、 template_codeinfo_[x]、 table_d[x]、 base_table_data、 code_state_log、 code_state、 code_task_log；数据表现：根据目录下的码删除所有的表数据，表字段保留，值为空

### 8. 成员
- 事件：添加普通成员：不推送；影响的数据表：-；数据表现：-
- 事件：添加高级成员：推送；影响的数据表：base_members；数据表现：base_members新增对应的成员数据
- 事件：高级成员姓名修改：推送；影响的数据表：base_members；数据表现：base_members修改对应的成员数据
- 事件：删除高级成员：不推送；影响的数据表：-；数据表现：-

## 常见问题

### 1. 自有数据库，数据推送不过来
可能的原因是 数据库表编码有问题，要换成utf8mb4。

### 2. 二维码名称变更后，为什么表单数据表中的二维码没有更新
现在表单中的二维码名称是不更新的，如果你需要取出最新的二维码名称，可以左关联一下 base_codeinfo 这张表，关联的字段为 code_id。

### 3. 表单中的组件名称修改后，数据表中有两个组件，分别是修改前和修改后的。
这是正常的，修改组件后，会保留原组件字段。

### 4. 计划中已设置了过滤掉异常状态值码，但在数据表中还存。
数据表中会有所有的计划任务数据，是通过 【是否过滤】这个字段来判识该条计划是否有过滤。（另外，在状态变更后在下个周期过滤才生效）

### 5. 开通后，发现推送的数据不全
首次开通后，需要将历史数据所有推送过来，大概需要1-3小时，跟账号的数据量有关。如隔一天了，还是推送不全，可以联系在线客服排查问题。

### 6. 为什么我修改表单字段后，数据库中的字段没有更新？
修改表单后不会触发数据库更新，只有当有新增或修改表单数据时，才会触发更新该数据表。所以只需提交一条新记录可以了。

### 7. 如果服务器是白名单制，需要怎么处理？
可联系技术支持，获取草料IP端。

### 8. 为什么没有动态数据表
动态数据是多类数据的汇总，包含表单数据，状态变更数据，在推送的数据表中没有动态数据表，您可以按需选择表单数据或者状态变更数据表进行推送

### 9. 图片组件中多个图片地址是拼在一起的，如何可以获取到单张图片地址。
图片组件的数据格式为 urls_1,urls_2,...。并且图片的链接数量是不定的。
*提供你一套函数来获取单张图片的地址，这里的 照片_233233换成你自己的数据字段名称。
urls_1: SUBSTRING_INDEX(`照片_233233`, ',', 1) 
urls_2: if( LENGTH(`照片_233233`) - LENGTH(REPLACE(`照片_233233`, ',', '')) >= 1, SUBSTRING_INDEX(SUBSTRING_INDEX(`照片_233233`, ',', 2), ',', -1) ,'') 
urls_3: if( LENGTH(`照片_233233`) - LENGTH(REPLACE(`照片_233233`, ',', '')) >= 2, SUBSTRING_INDEX(SUBSTRING_INDEX(`照片_233233`, ',', 3), ',', -1) ,'')  
urls_3: if( LENGTH(`照片_233233`) - LENGTH(REPLACE`(照片_233233`, ',', '')) >= 3, SUBSTRING_INDEX(SUBSTRING_INDEX(`照片_233233`, ',', 4), ',', -1) ,'')  
后面依次类推。
