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

377 lines
10 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.

# 模板更新脚本使用说明
## 一、脚本概述
`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_info``target_basic_info_clue`
- **输出字段**:根据模板文件中的占位符(`{{field_code}}`)自动关联对应的输出字段
- **自动创建字段**:如果占位符对应的字段不存在,自动创建该字段
## 三、使用方法
### 3.1 命令行参数方式
```bash
python update_templates_custom.py --host <主机> --port <端口> --user <用户名> --password <密码> --database <数据库名> --tenant-id <租户ID>
```
**完整示例**
```bash
# 基本使用
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 交互式输入方式
如果命令行参数不完整,脚本会自动进入交互式输入模式:
```bash
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 查看帮助信息
```bash
python update_templates_custom.py --help
```
## 四、使用场景
### 4.1 首次部署
首次部署时,需要将本地模板同步到数据库:
```bash
python update_templates_custom.py \
--host 192.168.1.100 \
--port 3306 \
--user root \
--password your_password \
--database finyx \
--tenant-id 1
```
### 4.2 多租户环境
在不同租户下更新模板:
```bash
# 租户1
python update_templates_custom.py --host ... --tenant-id 1
# 租户2
python update_templates_custom.py --host ... --tenant-id 2
```
### 4.3 预览更新内容
在正式更新前,先预览会执行哪些操作:
```bash
python update_templates_custom.py --host ... --tenant-id 1 --dry-run
```
### 4.4 增量更新
只更新层级结构或只更新字段关联:
```bash
# 只更新层级结构
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
```python
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