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

294 lines
7.8 KiB
Markdown
Raw Permalink 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` 字段,建立正确的树状层级结构。
## 数据库现状分析
根据检查,数据库中现有:
- **总记录数**: 32 条
- **有 parent_id**: 2 条
- **无 parent_id**: 30 条
需要更新的主要记录包括:
- 初步核实审批表
- 请示报告卡(各种类型)
- 初核方案
- 谈话通知书(第一联、第二联、第三联)
- XXX初核情况报告
- 走读式谈话审批相关文件
- 走读式谈话流程相关文件
- 等等...
## 脚本说明
### 1. `check_existing_data.py` - 检查现有数据
**功能**: 查看数据库中的现有记录,分析缺少 parent_id 的情况
**使用方法**:
```bash
python check_existing_data.py
```
**输出**:
- 列出所有无 parent_id 的记录
- 显示有 parent_id 的记录及其树状关系
---
### 2. `improved_match_and_update.py` - 改进的匹配分析
**功能**: 使用改进的匹配逻辑分析目录结构和数据库,生成匹配报告
**特点**:
- **三级匹配策略**:
1. **template_code 精确匹配**(最高优先级)
2. **名称精确匹配**
3. **标准化名称匹配**(去掉编号和括号后的模糊匹配)
**使用方法**:
```bash
python improved_match_and_update.py
```
**输出**:
- 匹配报告(显示哪些记录已匹配,哪些需要创建)
- 可选择性生成 SQL 更新脚本
---
### 3. `update_template_tree.py` - 交互式更新工具(推荐)
**功能**: 完整的更新工具,包含预览、确认和执行功能
**特点**:
- 使用改进的匹配逻辑
- 支持预览模式dry-run
- 交互式确认
- 按层级顺序自动更新
- 安全的事务处理
**使用方法**:
```bash
python update_template_tree.py
```
**执行流程**:
1. 扫描目录结构
2. 获取数据库现有数据
3. 规划树状结构(使用改进的匹配逻辑)
4. 显示更新预览
5. 询问是否执行(输入 `yes`
6. 执行模拟更新
7. 再次确认执行实际更新
---
### 4. `analyze_and_update_template_tree.py` - 生成 SQL 脚本
**功能**: 分析并生成 SQL 更新脚本(不直接修改数据库)
**使用方法**:
```bash
python analyze_and_update_template_tree.py
```
**输出**:
- `update_template_tree.sql` - SQL 更新脚本
**适用场景**:
- 生产环境
- 需要 DBA 审核的场景
- 需要手动执行的场景
---
### 5. `verify_tree_structure.py` - 验证更新结果
**功能**: 验证更新后的树状结构是否正确
**使用方法**:
```bash
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. **检查现有数据**
```bash
python check_existing_data.py
```
2. **运行更新工具**
```bash
python update_template_tree.py
```
3. **查看预览信息**
- 检查匹配情况
- 确认更新计划
4. **确认执行**
- 输入 `yes` 确认
- 再次确认执行实际更新
5. **验证结果**
```bash
python verify_tree_structure.py
```
### 备选流程(使用 SQL 脚本)
1. **生成 SQL 脚本**
```bash
python improved_match_and_update.py
# 或
python analyze_and_update_template_tree.py
```
2. **检查 SQL 脚本**
```bash
# 查看 update_template_tree.sql
```
3. **备份数据库**(重要!)
4. **执行 SQL 脚本**
```sql
-- 在 MySQL 客户端中执行
source update_template_tree.sql;
```
5. **验证结果**
```bash
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 是否正确设置