# 模板树状结构更新 - 使用说明 ## 概述 本工具用于根据 `template_finish` 目录结构,更新数据库 `f_polic_file_config` 表中的 `parent_id` 字段,建立正确的树状层级结构。 ## 数据库现状分析 根据检查,数据库中现有: - **总记录数**: 32 条 - **有 parent_id**: 2 条 - **无 parent_id**: 30 条 需要更新的主要记录包括: - 初步核实审批表 - 请示报告卡(各种类型) - 初核方案 - 谈话通知书(第一联、第二联、第三联) - XXX初核情况报告 - 走读式谈话审批相关文件 - 走读式谈话流程相关文件 - 等等... ## 脚本说明 ### 1. `check_existing_data.py` - 检查现有数据 **功能**: 查看数据库中的现有记录,分析缺少 parent_id 的情况 **使用方法**: ```bash python check_existing_data.py ``` **输出**: - 列出所有无 parent_id 的记录 - 显示有 parent_id 的记录及其树状关系 --- ### 2. `improved_match_and_update.py` - 改进的匹配分析 **功能**: 使用改进的匹配逻辑分析目录结构和数据库,生成匹配报告 **特点**: - **三级匹配策略**: 1. **template_code 精确匹配**(最高优先级) 2. **名称精确匹配** 3. **标准化名称匹配**(去掉编号和括号后的模糊匹配) **使用方法**: ```bash python improved_match_and_update.py ``` **输出**: - 匹配报告(显示哪些记录已匹配,哪些需要创建) - 可选择性生成 SQL 更新脚本 --- ### 3. `update_template_tree.py` - 交互式更新工具(推荐) **功能**: 完整的更新工具,包含预览、确认和执行功能 **特点**: - 使用改进的匹配逻辑 - 支持预览模式(dry-run) - 交互式确认 - 按层级顺序自动更新 - 安全的事务处理 **使用方法**: ```bash python update_template_tree.py ``` **执行流程**: 1. 扫描目录结构 2. 获取数据库现有数据 3. 规划树状结构(使用改进的匹配逻辑) 4. 显示更新预览 5. 询问是否执行(输入 `yes`) 6. 执行模拟更新 7. 再次确认执行实际更新 --- ### 4. `analyze_and_update_template_tree.py` - 生成 SQL 脚本 **功能**: 分析并生成 SQL 更新脚本(不直接修改数据库) **使用方法**: ```bash python analyze_and_update_template_tree.py ``` **输出**: - `update_template_tree.sql` - SQL 更新脚本 **适用场景**: - 生产环境 - 需要 DBA 审核的场景 - 需要手动执行的场景 --- ### 5. `verify_tree_structure.py` - 验证更新结果 **功能**: 验证更新后的树状结构是否正确 **使用方法**: ```bash python verify_tree_structure.py ``` **输出**: - 树状结构可视化 - 统计信息 - 父子关系验证 --- ## 匹配逻辑说明 ### 三级匹配策略 1. **template_code 精确匹配**(最高优先级) - 通过 `template_code` 字段精确匹配 - 例如: `REPORT_CARD` 匹配 `REPORT_CARD` 2. **名称精确匹配** - 通过 `name` 字段精确匹配 - 例如: `"1.请示报告卡(XXX)"` 匹配 `"1.请示报告卡(XXX)"` 3. **标准化名称匹配**(模糊匹配) - 去掉开头的编号(如 `"1."`、`"2."`、`"8-1"`) - 去掉括号及其内容(如 `"(XXX)"`、`"(初核谈话)"`) - 例如: `"1.请示报告卡(XXX)"` → `"请示报告卡"` → 匹配 `"请示报告卡"` ### 匹配示例 | 目录结构中的名称 | 数据库中的名称 | 匹配方式 | |----------------|--------------|---------| | `1.请示报告卡(XXX)` | `请示报告卡` | template_code: `REPORT_CARD` | | `2.初步核实审批表(XXX)` | `初步核实审批表` | template_code: `PRELIMINARY_VERIFICATION_APPROVAL` | | `谈话通知书第一联` | `谈话通知书第一联` | 名称精确匹配 | | `走读式谈话审批` | `走读式谈话审批` | 名称精确匹配 | ## 树状结构规划 根据 `template_finish` 目录结构,规划的层级关系如下: ``` 2-初核模版 (一级目录) ├── 1.初核请示 (二级目录) │ ├── 1.请示报告卡(XXX).docx │ ├── 2.初步核实审批表(XXX).docx │ └── 3.附件初核方案(XXX).docx ├── 2.谈话审批 (二级目录) │ ├── 谈话通知书 (三级目录) │ │ ├── 谈话通知书第一联.docx │ │ ├── 谈话通知书第二联.docx │ │ └── 谈话通知书第三联.docx │ ├── 走读式谈话审批 (三级目录) │ │ ├── 1.请示报告卡(初核谈话).docx │ │ ├── 2谈话审批表.docx │ │ ├── 3.谈话前安全风险评估表.docx │ │ ├── 4.谈话方案.docx │ │ └── 5.谈话后安全风险评估表.docx │ └── 走读式谈话流程 (三级目录) │ ├── 1.谈话笔录.docx │ ├── 2.谈话询问对象情况摸底调查30问.docx │ ├── 3.被谈话人权利义务告知书.docx │ ├── 4.点对点交接单.docx │ ├── 5.陪送交接单(新).docx │ ├── 6.1保密承诺书(谈话对象使用-非中共党员用).docx │ ├── 6.2保密承诺书(谈话对象使用-中共党员用).docx │ └── 7.办案人员-办案安全保密承诺书.docx └── 3.初核结论 (二级目录) ├── 8-1请示报告卡(初核报告结论) .docx └── 8.XXX初核情况报告.docx ``` ## 执行步骤 ### 推荐流程(使用交互式工具) 1. **检查现有数据** ```bash python check_existing_data.py ``` 2. **运行更新工具** ```bash python update_template_tree.py ``` 3. **查看预览信息** - 检查匹配情况 - 确认更新计划 4. **确认执行** - 输入 `yes` 确认 - 再次确认执行实际更新 5. **验证结果** ```bash python verify_tree_structure.py ``` ### 备选流程(使用 SQL 脚本) 1. **生成 SQL 脚本** ```bash python improved_match_and_update.py # 或 python analyze_and_update_template_tree.py ``` 2. **检查 SQL 脚本** ```bash # 查看 update_template_tree.sql ``` 3. **备份数据库**(重要!) 4. **执行 SQL 脚本** ```sql -- 在 MySQL 客户端中执行 source update_template_tree.sql; ``` 5. **验证结果** ```bash python verify_tree_structure.py ``` ## 注意事项 1. **备份数据库**: 执行更新前务必备份数据库 2. **检查匹配**: 确认匹配结果是否正确 3. **层级顺序**: 更新会按照层级顺序执行,确保父节点先于子节点 4. **重复执行**: 脚本支持重复执行,已正确设置的记录会被跳过 5. **目录节点**: 如果目录节点不存在,脚本会自动创建 ## 匹配结果 根据最新分析,匹配情况如下: - ✅ **已匹配**: 26 条记录 - ⚠️ **需创建**: 2 条记录(目录节点) - `2-初核模版` (一级目录) - `1.初核请示` (二级目录) 所有文件记录都已正确匹配到数据库中的现有记录。 ## 问题排查 ### 问题1: 某些记录无法匹配 **原因**: 名称或 template_code 不匹配 **解决**: - 检查 `DOCUMENT_TYPE_MAPPING` 字典 - 确认数据库中的 `template_code` 是否正确 - 使用 `check_existing_data.py` 查看数据库中的实际数据 ### 问题2: 匹配到错误的记录 **原因**: 标准化名称匹配时选择了错误的候选 **解决**: - 检查匹配报告,确认匹配方式 - 如果 template_code 匹配失败,检查数据库中的 template_code 是否正确 - 可以手动调整匹配逻辑 ### 问题3: parent_id 更新失败 **原因**: 父节点ID不存在或层级关系错误 **解决**: - 使用 `verify_tree_structure.py` 验证父子关系 - 检查生成的 SQL 脚本,确认父节点ID是否正确 ## 联系信息 如有问题,请检查: 1. 数据库连接配置是否正确 2. 目录结构是否与预期一致 3. 数据库中的记录是否完整 4. template_code 是否正确设置