5.0 KiB
5.0 KiB
模板树状结构更新说明
概述
根据 template_finish 目录结构,更新数据库 f_polic_file_config 表中的 parent_id 字段,建立树状层级结构。
目录结构示例
template_finish/
└── 2-初核模版/ (一级)
├── 1.初核请示/ (二级)
│ ├── 1.请示报告卡(XXX).docx
│ ├── 2.初步核实审批表(XXX).docx
│ └── 3.附件初核方案(XXX).docx
├── 2.谈话审批/ (二级)
│ ├── 谈话通知书/ (三级)
│ │ ├── 谈话通知书第一联.docx
│ │ ├── 谈话通知书第二联.docx
│ │ └── 谈话通知书第三联.docx
│ ├── 走读式谈话审批/ (三级)
│ │ ├── 1.请示报告卡(初核谈话).docx
│ │ ├── 2谈话审批表.docx
│ │ └── ...
│ └── 走读式谈话流程/ (三级)
│ ├── 1.谈话笔录.docx
│ └── ...
└── 3.初核结论/ (二级)
├── 8-1请示报告卡(初核报告结论) .docx
└── 8.XXX初核情况报告.docx
脚本说明
1. analyze_and_update_template_tree.py
功能: 分析目录结构和数据库数据,生成 SQL 更新脚本
使用方法:
python analyze_and_update_template_tree.py
输出:
- 分析报告(控制台输出)
update_template_tree.sql- SQL 更新脚本
特点:
- 只生成 SQL 脚本,不直接修改数据库
- 可以手动检查 SQL 脚本后再执行
2. update_template_tree.py
功能: 分析并直接更新数据库(带预览和确认)
使用方法:
python update_template_tree.py
特点:
- 交互式操作,先预览再确认
- 支持模拟模式(dry-run)
- 自动按层级顺序更新
- 更安全的更新流程
更新逻辑
- 目录节点:根据目录名称匹配数据库记录,如果不存在则创建
- 文件节点:优先通过
template_code匹配,其次通过文件名匹配 - 层级关系:按照目录结构的层级关系设置
parent_id- 一级目录:
parent_id = NULL - 二级目录:
parent_id = 一级目录的ID - 三级目录:
parent_id = 二级目录的ID - 文件:
parent_id = 所在目录的ID
- 一级目录:
执行步骤
方法一:使用 SQL 脚本(推荐用于生产环境)
-
运行分析脚本:
python analyze_and_update_template_tree.py -
检查生成的 SQL 脚本:
# 查看 update_template_tree.sql -
备份数据库(重要!)
-
执行 SQL 脚本:
-- 在 MySQL 客户端中执行 source update_template_tree.sql;
方法二:使用 Python 脚本(推荐用于测试环境)
-
运行更新脚本:
python update_template_tree.py -
查看预览信息
-
输入
yes确认执行 -
再次确认执行实际更新
注意事项
- 备份数据库:执行更新前务必备份数据库
- 检查匹配:确保目录和文件名与数据库中的记录能够正确匹配
- 层级顺序:更新会按照层级顺序执行,确保父节点先于子节点创建/更新
- 重复执行:脚本支持重复执行,已正确设置
parent_id的记录会被跳过
数据库表结构
f_polic_file_config 表的关键字段:
id: 主键tenant_id: 租户ID(固定值:615873064429507639)parent_id: 父节点ID(NULL 表示根节点)name: 名称template_code: 模板编码(文件节点使用)input_data: JSON格式的配置数据file_path: MinIO文件路径
问题排查
问题1:某些文件无法匹配
原因: 文件名或 template_code 不匹配
解决: 检查 DOCUMENT_TYPE_MAPPING 字典,确保文件名映射正确
问题2:目录节点重复创建
原因: 数据库中已存在同名目录节点,但脚本未正确匹配
解决: 检查数据库中的记录,确保名称完全一致(包括空格和标点)
问题3:parent_id 更新失败
原因: 父节点ID不存在或层级关系错误
解决: 检查生成的 SQL 脚本,确认父节点ID是否正确
验证更新结果
执行更新后,可以使用以下 SQL 查询验证:
-- 查看树状结构
SELECT
id,
name,
parent_id,
template_code,
(SELECT name FROM f_polic_file_config p2 WHERE p2.id = p1.parent_id) as parent_name
FROM f_polic_file_config p1
WHERE tenant_id = 615873064429507639
ORDER BY parent_id, name;
-- 查看缺少 parent_id 的记录(应该只有根节点)
SELECT id, name, parent_id
FROM f_polic_file_config
WHERE tenant_id = 615873064429507639
AND parent_id IS NULL
AND name NOT LIKE '%-%'; -- 排除一级目录
联系信息
如有问题,请检查:
- 数据库连接配置是否正确
- 目录结构是否与预期一致
- 数据库中的记录是否完整