ai-business-write/技术文档/模板更新脚本使用说明.md
2025-12-30 10:41:35 +08:00

10 KiB
Raw Permalink Blame History

模板更新脚本使用说明

一、脚本概述

update_templates_custom.py 是一个灵活的模板更新脚本,支持:

  1. 自定义数据库连接配置(不从.env文件读取
  2. 自定义租户IDtenant_id配置
  3. 更新模板层级结构(根据template_finish/目录结构)
  4. 更新字段关联关系(输入字段和输出字段)

二、功能说明

2.1 更新模板层级结构

根据本地 template_finish/ 目录结构更新数据库中的模板层级关系:

  • 扫描目录结构,识别所有目录和文件
  • 创建或更新目录节点(f_polic_file_config表中file_path=NULL的记录)
  • 创建或更新文件节点(f_polic_file_config表中file_path不为空的记录)
  • 建立正确的parent_id层级关系

2.2 更新字段关联关系

自动为所有模板建立字段关联关系:

  • 输入字段:所有模板都关联 clue_infotarget_basic_info_clue
  • 输出字段:根据模板文件中的占位符({{field_code}})自动关联对应的输出字段
  • 自动创建字段:如果占位符对应的字段不存在,自动创建该字段

三、使用方法

3.1 命令行参数方式

python update_templates_custom.py --host <主机> --port <端口> --user <用户名> --password <密码> --database <数据库名> --tenant-id <租户ID>

完整示例

# 基本使用
python update_templates_custom.py --host 192.168.1.100 --port 3306 --user root --password 123456 --database finyx --tenant-id 1

# 预览模式(不实际更新数据库)
python update_templates_custom.py --host 192.168.1.100 --port 3306 --user root --password 123456 --database finyx --tenant-id 1 --dry-run

# 只更新层级结构,不更新字段关联
python update_templates_custom.py --host 192.168.1.100 --port 3306 --user root --password 123456 --database finyx --tenant-id 1 --update-hierarchy --no-update-fields

# 只更新字段关联,不更新层级结构
python update_templates_custom.py --host 192.168.1.100 --port 3306 --user root --password 123456 --database finyx --tenant-id 1 --update-fields --no-update-hierarchy

参数说明

参数 说明 必填
--host MySQL服务器地址
--port MySQL服务器端口
--user MySQL用户名
--password MySQL密码
--database 数据库名称
--tenant-id 租户ID
--dry-run 预览模式(不实际更新)
--update-hierarchy 更新模板层级结构(默认启用)
--update-fields 更新字段关联关系(默认启用)

3.2 交互式输入方式

如果命令行参数不完整,脚本会自动进入交互式输入模式:

python update_templates_custom.py

交互式输入示例:

======================================================================
  数据库连接配置
======================================================================
请输入数据库连接信息(直接回车使用默认值):

MySQL服务器地址 [152.136.177.240]: 192.168.1.100
MySQL服务器端口 [5012]: 3306
MySQL用户名 [finyx]: root
MySQL密码 [留空使用默认]: ********
数据库名称 [finyx]: finyx

租户配置:
租户ID (tenant_id) [必填]: 1

更新选项:
更新模板层级结构?[Y/n]: y
更新字段关联关系?[Y/n]: y
预览模式(不实际更新)?[y/N]: n

确认执行更新?[y/N]: y

3.3 查看帮助信息

python update_templates_custom.py --help

四、使用场景

4.1 首次部署

首次部署时,需要将本地模板同步到数据库:

python update_templates_custom.py \
  --host 192.168.1.100 \
  --port 3306 \
  --user root \
  --password your_password \
  --database finyx \
  --tenant-id 1

4.2 多租户环境

在不同租户下更新模板:

# 租户1
python update_templates_custom.py --host ... --tenant-id 1

# 租户2
python update_templates_custom.py --host ... --tenant-id 2

4.3 预览更新内容

在正式更新前,先预览会执行哪些操作:

python update_templates_custom.py --host ... --tenant-id 1 --dry-run

4.4 增量更新

只更新层级结构或只更新字段关联:

# 只更新层级结构
python update_templates_custom.py --host ... --tenant-id 1 --update-hierarchy --no-update-fields

# 只更新字段关联
python update_templates_custom.py --host ... --tenant-id 1 --update-fields --no-update-hierarchy

五、输出说明

5.1 正常输出示例

======================================================================
  模板更新脚本
======================================================================
支持自定义数据库连接和租户ID配置

======================================================================
  配置信息
======================================================================
  数据库服务器: 192.168.1.100:3306
  数据库名称: finyx
  用户名: root
  租户ID: 1
  预览模式: 否
  更新层级结构: 是
  更新字段关联: 是

确认执行更新?[y/N]: y

======================================================================
  连接数据库
======================================================================
[OK] 数据库连接成功

======================================================================
  更新模板层级结构
======================================================================
1. 扫描目录结构...
[OK] 找到 33 个目录122 个文件

2. 获取现有模板...
[OK] 找到 122 个文件模板28 个目录模板

3. 创建/更新目录节点...
  [创建目录] 1-谈话函询模板 (ID: 1766711031977435)
  [更新目录] 2-初核模版 (ID: 1766711031977436)
  ...
[OK] 创建 5 个目录,更新 28 个目录

4. 创建/更新文件节点...
  [创建文件] 请示报告卡XXX.docx (ID: 1766711031977437)
  [更新文件] 谈话通知书第一联.docx (ID: 1766711031977438)
  ...
[OK] 创建 2 个文件,更新 120 个文件

======================================================================
  更新字段关联关系
======================================================================
1. 获取输入字段...
[OK] 找到 2 个输入字段

2. 获取输出字段...
[OK] 找到 72 个输出字段

3. 获取所有模板...
[OK] 找到 122 个模板

4. 扫描模板占位符并更新关联关系...
  处理进度: 20/122
  处理进度: 40/122
  ...

======================================================================
  字段关联更新结果
======================================================================
  总模板数: 122
  已更新: 93 个
  保持不变: 29 个
  错误: 0 个
  发现的占位符总数: 35 个
  创建的字段数: 0 个

======================================================================
  更新完成
======================================================================
  数据库已更新

  层级结构:
    - 创建目录: 5 个
    - 更新目录: 28 个
    - 创建文件: 2 个
    - 更新文件: 120 个

  字段关联:
    - 总模板数: 122 个
    - 已更新: 93 个
    - 保持不变: 29 个
    - 发现的占位符: 35 个
    - 创建的字段: 0 个

[OK] 数据库连接已关闭

5.2 预览模式输出

预览模式下,会显示将要执行的操作,但不会实际更新数据库:

[注意] 当前为预览模式,不会实际更新数据库

...

[OK] 预览模式,未实际更新数据库

六、注意事项

6.1 数据库连接

  • 确保数据库服务器可访问
  • 确保用户有足够的权限SELECT, INSERT, UPDATE, DELETE
  • 确保数据库名称正确

6.2 租户ID

  • tenant_id是必填项,不能为空
  • 确保tenant_id在数据库中存在或需要创建
  • 不同租户的数据是隔离的更新时请确认tenant_id正确

6.3 模板文件

  • 脚本会扫描 template_finish/ 目录下的所有 .docx.doc 文件
  • 确保模板文件路径与数据库中的file_path字段匹配
  • 如果模板文件不存在,会跳过该模板的字段关联更新

6.4 字段创建

  • 如果模板中的占位符对应的字段不存在,脚本会自动创建该字段
  • 创建的字段类型为输出字段(field_type=2
  • 字段名称会根据field_code自动生成(将下划线替换为空格)

6.5 数据安全

  • **建议先使用预览模式(--dry-run**查看将要执行的操作
  • 在生产环境执行前,建议先备份数据库
  • 确保有足够的磁盘空间和数据库连接数

七、常见问题

7.1 连接失败

问题:数据库连接失败

解决方案

  • 检查数据库服务器地址和端口是否正确
  • 检查用户名和密码是否正确
  • 检查网络连接是否正常
  • 检查防火墙设置

7.2 权限不足

问题:执行更新时提示权限不足

解决方案

  • 确保数据库用户有足够的权限
  • 需要以下权限SELECT, INSERT, UPDATE, DELETE

7.3 模板文件不存在

问题:部分模板的字段关联更新失败,提示文件不存在

解决方案

  • 检查数据库中的file_path是否正确
  • 确保模板文件存在于template_finish/目录下
  • 检查文件路径中的斜杠方向Windows使用反斜杠脚本会自动处理

7.4 占位符识别错误

问题:模板中的占位符没有被正确识别

解决方案

  • 确保占位符格式正确:{{field_code}}
  • 占位符中的field_code不能包含空格
  • 检查模板文件是否损坏

八、技术细节

8.1 占位符提取

脚本使用正则表达式 \{\{([^}]+)\}\} 从Word文档中提取占位符

  • 扫描所有段落paragraphs
  • 扫描所有表格单元格table cells
  • 提取所有匹配的占位符

8.2 ID生成

使用时间戳生成唯一ID

def generate_id():
    import time
    return int(time.time() * 1000000)

8.3 层级结构处理

  • 按目录层级顺序处理(先处理父目录,再处理子目录)
  • 使用路径映射表(path_to_id维护目录ID关系
  • 文件节点的parent_id指向其所在目录的ID

8.4 字段关联处理

  • 先获取现有关联关系
  • 计算需要添加和删除的关联
  • 批量更新关联关系
  • 自动创建缺失的字段

九、更新历史

  • 2025-12-16: 创建脚本支持自定义数据库连接和租户ID配置

脚本路径: update_templates_custom.py
文档版本: 1.0
最后更新: 2025-12-16