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