ai-business-write/README_初始化模板树状结构.md

222 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 初始化模板树状结构 - 使用说明
## 概述
`init_template_tree_from_directory.py` 脚本用于**完全重置** `f_polic_file_config` 表中的模板数据,根据 `template_finish` 目录结构重新创建所有记录,建立正确的树状层级关系。
## ⚠️ 重要警告
**此操作会删除当前租户的所有模板数据!**
包括:
- `f_polic_file_config` 表中的所有记录
- `f_polic_file_field` 表中的相关关联记录
然后根据 `template_finish` 目录结构完全重建。
**执行前请务必备份数据库!**
## 功能特点
1. **完全重建**: 删除旧数据,根据目录结构重新创建
2. **树状结构**: 自动建立正确的 parent_id 层级关系
3. **文件上传**: 可选择是否上传文件到 MinIO
4. **安全确认**: 多重确认机制,防止误操作
5. **模拟模式**: 先预览再执行,确保安全
## 目录结构要求
脚本会扫描 `template_finish` 目录,期望的结构如下:
```
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
```
## 使用方法
### 基本使用
```bash
python init_template_tree_from_directory.py
```
### 执行流程
1. **警告提示**: 显示操作警告
2. **第一次确认**: 输入 `yes` 继续
3. **扫描目录**: 自动扫描 `template_finish` 目录
4. **显示预览**: 显示目录结构预览
5. **选择上传**: 选择是否上传文件到 MinIO
6. **模拟删除**: 显示将删除的数据
7. **模拟创建**: 显示将创建的节点
8. **最终确认**: 再次输入 `yes` 执行实际更新
9. **执行删除**: 删除旧数据
10. **执行创建**: 创建新数据
### 交互式提示
```
确认继续?(yes/no默认no): yes
是否上传文件到MinIO(yes/no默认yes): yes
确认执行实际更新?(yes/no默认no): yes
```
## 处理逻辑
### 1. 删除旧数据
- 先删除 `f_polic_file_field` 表中的关联记录
- 再删除 `f_polic_file_config` 表中的配置记录
- 只删除当前租户(`tenant_id = 615873064429507639`)的数据
### 2. 创建新数据
按层级顺序创建:
1. **目录节点**:
- 不包含 `template_code` 字段
- `input_data` 为 NULL
- `file_path` 为 NULL
2. **文件节点**:
- 包含 `template_code`(从 `DOCUMENT_TYPE_MAPPING` 获取)
- `input_data` 包含 JSON 格式的配置
- `file_path` 为 MinIO 路径(如果上传了文件)
### 3. 树状关系
- 一级目录: `parent_id = NULL`
- 二级目录: `parent_id = 一级目录的ID`
- 三级目录: `parent_id = 二级目录的ID`
- 文件: `parent_id = 所在目录的ID`
## 模板识别
脚本通过 `DOCUMENT_TYPE_MAPPING` 字典识别文件类型:
- 匹配文件名(不含扩展名)
- 提取 `template_code``business_type`
- 如果无法识别,`template_code` 为空字符串
## 文件上传
如果选择上传文件到 MinIO
- 文件路径格式: `/{tenant_id}/TEMPLATE/{year}/{month}/{filename}`
- 例如: `/615873064429507639/TEMPLATE/2025/12/1.请示报告卡XXX.docx`
- 上传失败不会中断流程,但 `file_path` 将为 NULL
## 输出示例
```
================================================================================
初始化模板树状结构(从目录结构完全重建)
================================================================================
⚠️ 警告:此操作将删除当前租户的所有模板数据!
确认继续?(yes/no默认no): yes
✓ 数据库连接成功
扫描目录结构...
找到 28 个节点
其中目录: 7 个
其中文件: 21 个
执行模拟删除...
[模拟] 将删除 113 条关联记录
[模拟] 将删除 34 条配置记录
执行模拟创建...
✓ [模拟]创建目录: 2-初核模版 (ID: ...)
✓ [模拟]创建文件: 1.请示报告卡XXX (ID: ...) [父: ...] [code: REPORT_CARD]
...
确认执行实际更新?(yes/no默认no): yes
执行实际删除...
✓ 删除了 113 条关联记录
✓ 删除了 34 条配置记录
执行实际创建...
✓ 创建目录: 2-初核模版 (ID: ...)
✓ 创建文件: 1.请示报告卡XXX (ID: ...) [父: ...] [code: REPORT_CARD]
...
✓ 创建完成!共创建 28 个节点
```
## 验证结果
执行完成后,可以使用验证脚本检查结果:
```bash
python verify_tree_structure.py
```
## 注意事项
1. **备份数据库**: 执行前务必备份数据库
2. **确认目录结构**: 确保 `template_finish` 目录结构正确
3. **文件存在**: 确保所有 `.docx` 文件都存在
4. **MinIO 连接**: 如果选择上传文件,确保 MinIO 连接正常
5. **不可逆操作**: 删除操作不可逆,请谨慎执行
## 故障排查
### 问题1: template_code 不能为 NULL
**原因**: 数据库表结构要求 template_code 不能为 NULL
**解决**: 脚本已处理,目录节点不插入 template_code文件节点使用空字符串
### 问题2: 文件上传失败
**原因**: MinIO 连接问题或文件不存在
**解决**:
- 检查 MinIO 配置
- 检查文件是否存在
- 上传失败不会中断流程,可以后续手动上传
### 问题3: 父子关系错误
**原因**: 目录结构扫描顺序问题
**解决**: 脚本已按层级顺序处理,确保父节点先于子节点创建
## 相关脚本
- `update_template_tree.py` - 更新现有数据的 parent_id不删除数据
- `verify_tree_structure.py` - 验证树状结构
- `check_existing_data.py` - 检查现有数据
## 联系信息
如有问题,请检查:
1. 数据库连接配置
2. 目录结构是否正确
3. 文件是否都存在
4. MinIO 配置是否正确