ai-business-write/技术文档/README_模板树状结构更新.md

7.8 KiB
Raw Permalink Blame History

模板树状结构更新 - 使用说明

概述

本工具用于根据 template_finish 目录结构,更新数据库 f_polic_file_config 表中的 parent_id 字段,建立正确的树状层级结构。

数据库现状分析

根据检查,数据库中现有:

  • 总记录数: 32 条
  • 有 parent_id: 2 条
  • 无 parent_id: 30 条

需要更新的主要记录包括:

  • 初步核实审批表
  • 请示报告卡(各种类型)
  • 初核方案
  • 谈话通知书(第一联、第二联、第三联)
  • XXX初核情况报告
  • 走读式谈话审批相关文件
  • 走读式谈话流程相关文件
  • 等等...

脚本说明

1. check_existing_data.py - 检查现有数据

功能: 查看数据库中的现有记录,分析缺少 parent_id 的情况

使用方法:

python check_existing_data.py

输出:

  • 列出所有无 parent_id 的记录
  • 显示有 parent_id 的记录及其树状关系

2. improved_match_and_update.py - 改进的匹配分析

功能: 使用改进的匹配逻辑分析目录结构和数据库,生成匹配报告

特点:

  • 三级匹配策略:
    1. template_code 精确匹配(最高优先级)
    2. 名称精确匹配
    3. 标准化名称匹配(去掉编号和括号后的模糊匹配)

使用方法:

python improved_match_and_update.py

输出:

  • 匹配报告(显示哪些记录已匹配,哪些需要创建)
  • 可选择性生成 SQL 更新脚本

3. update_template_tree.py - 交互式更新工具(推荐)

功能: 完整的更新工具,包含预览、确认和执行功能

特点:

  • 使用改进的匹配逻辑
  • 支持预览模式dry-run
  • 交互式确认
  • 按层级顺序自动更新
  • 安全的事务处理

使用方法:

python update_template_tree.py

执行流程:

  1. 扫描目录结构
  2. 获取数据库现有数据
  3. 规划树状结构(使用改进的匹配逻辑)
  4. 显示更新预览
  5. 询问是否执行(输入 yes
  6. 执行模拟更新
  7. 再次确认执行实际更新

4. analyze_and_update_template_tree.py - 生成 SQL 脚本

功能: 分析并生成 SQL 更新脚本(不直接修改数据库)

使用方法:

python analyze_and_update_template_tree.py

输出:

  • update_template_tree.sql - SQL 更新脚本

适用场景:

  • 生产环境
  • 需要 DBA 审核的场景
  • 需要手动执行的场景

5. verify_tree_structure.py - 验证更新结果

功能: 验证更新后的树状结构是否正确

使用方法:

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. 检查现有数据

    python check_existing_data.py
    
  2. 运行更新工具

    python update_template_tree.py
    
  3. 查看预览信息

    • 检查匹配情况
    • 确认更新计划
  4. 确认执行

    • 输入 yes 确认
    • 再次确认执行实际更新
  5. 验证结果

    python verify_tree_structure.py
    

备选流程(使用 SQL 脚本)

  1. 生成 SQL 脚本

    python improved_match_and_update.py
    # 或
    python analyze_and_update_template_tree.py
    
  2. 检查 SQL 脚本

    # 查看 update_template_tree.sql
    
  3. 备份数据库(重要!)

  4. 执行 SQL 脚本

    -- 在 MySQL 客户端中执行
    source update_template_tree.sql;
    
  5. 验证结果

    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 是否正确设置