# 模板树状结构更新说明 ## 概述 根据 `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 更新脚本 **使用方法:** ```bash python analyze_and_update_template_tree.py ``` **输出:** - 分析报告(控制台输出) - `update_template_tree.sql` - SQL 更新脚本 **特点:** - 只生成 SQL 脚本,不直接修改数据库 - 可以手动检查 SQL 脚本后再执行 ### 2. update_template_tree.py **功能:** 分析并直接更新数据库(带预览和确认) **使用方法:** ```bash python update_template_tree.py ``` **特点:** - 交互式操作,先预览再确认 - 支持模拟模式(dry-run) - 自动按层级顺序更新 - 更安全的更新流程 ## 更新逻辑 1. **目录节点**:根据目录名称匹配数据库记录,如果不存在则创建 2. **文件节点**:优先通过 `template_code` 匹配,其次通过文件名匹配 3. **层级关系**:按照目录结构的层级关系设置 `parent_id` - 一级目录:`parent_id = NULL` - 二级目录:`parent_id = 一级目录的ID` - 三级目录:`parent_id = 二级目录的ID` - 文件:`parent_id = 所在目录的ID` ## 执行步骤 ### 方法一:使用 SQL 脚本(推荐用于生产环境) 1. 运行分析脚本: ```bash python analyze_and_update_template_tree.py ``` 2. 检查生成的 SQL 脚本: ```bash # 查看 update_template_tree.sql ``` 3. 备份数据库(重要!) 4. 执行 SQL 脚本: ```sql -- 在 MySQL 客户端中执行 source update_template_tree.sql; ``` ### 方法二:使用 Python 脚本(推荐用于测试环境) 1. 运行更新脚本: ```bash python update_template_tree.py ``` 2. 查看预览信息 3. 输入 `yes` 确认执行 4. 再次确认执行实际更新 ## 注意事项 1. **备份数据库**:执行更新前务必备份数据库 2. **检查匹配**:确保目录和文件名与数据库中的记录能够正确匹配 3. **层级顺序**:更新会按照层级顺序执行,确保父节点先于子节点创建/更新 4. **重复执行**:脚本支持重复执行,已正确设置 `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 查询验证: ```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 '%-%'; -- 排除一级目录 ``` ## 联系信息 如有问题,请检查: 1. 数据库连接配置是否正确 2. 目录结构是否与预期一致 3. 数据库中的记录是否完整