294 lines
7.8 KiB
Markdown
294 lines
7.8 KiB
Markdown
# 模板树状结构更新 - 使用说明
|
||
|
||
## 概述
|
||
|
||
本工具用于根据 `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 是否正确设置
|
||
|