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

181 lines
5.0 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.

# 模板树状结构更新说明
## 概述
根据 `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`: 父节点IDNULL 表示根节点)
- `name`: 名称
- `template_code`: 模板编码(文件节点使用)
- `input_data`: JSON格式的配置数据
- `file_path`: MinIO文件路径
## 问题排查
### 问题1某些文件无法匹配
**原因:** 文件名或 `template_code` 不匹配
**解决:** 检查 `DOCUMENT_TYPE_MAPPING` 字典,确保文件名映射正确
### 问题2目录节点重复创建
**原因:** 数据库中已存在同名目录节点,但脚本未正确匹配
**解决:** 检查数据库中的记录,确保名称完全一致(包括空格和标点)
### 问题3parent_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. 数据库中的记录是否完整