ai-business-write/模板树状结构更新说明.md

5.0 KiB
Raw Blame History

模板树状结构更新说明

概述

根据 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
  • 自动按层级顺序更新
  • 更安全的更新流程

更新逻辑

  1. 目录节点:根据目录名称匹配数据库记录,如果不存在则创建
  2. 文件节点:优先通过 template_code 匹配,其次通过文件名匹配
  3. 层级关系:按照目录结构的层级关系设置 parent_id
    • 一级目录:parent_id = NULL
    • 二级目录:parent_id = 一级目录的ID
    • 三级目录:parent_id = 二级目录的ID
    • 文件:parent_id = 所在目录的ID

执行步骤

方法一:使用 SQL 脚本(推荐用于生产环境)

  1. 运行分析脚本:

    python analyze_and_update_template_tree.py
    
  2. 检查生成的 SQL 脚本:

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

  4. 执行 SQL 脚本:

    -- 在 MySQL 客户端中执行
    source update_template_tree.sql;
    

方法二:使用 Python 脚本(推荐用于测试环境)

  1. 运行更新脚本:

    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: 父节点IDNULL 表示根节点)
  • name: 名称
  • template_code: 模板编码(文件节点使用)
  • input_data: JSON格式的配置数据
  • file_path: MinIO文件路径

问题排查

问题1某些文件无法匹配

原因: 文件名或 template_code 不匹配

解决: 检查 DOCUMENT_TYPE_MAPPING 字典,确保文件名映射正确

问题2目录节点重复创建

原因: 数据库中已存在同名目录节点,但脚本未正确匹配

解决: 检查数据库中的记录,确保名称完全一致(包括空格和标点)

问题3parent_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 '%-%';  -- 排除一级目录

联系信息

如有问题,请检查:

  1. 数据库连接配置是否正确
  2. 目录结构是否与预期一致
  3. 数据库中的记录是否完整