优化案件模块
This commit is contained in:
@@ -648,7 +648,8 @@ def process_approval_flow(approval, business_record, current_approver, state,
|
||||
|
||||
if business_record and hasattr(business_record, 'state'):
|
||||
# 抄送财务时就已经审核通过,财务只是查看
|
||||
business_record.state = "已通过"
|
||||
# 使用 final_state_map 确保状态映射正确(如待办类型:已通过 -> 已完成)
|
||||
business_record.state = final_state_map.get("已通过", "已通过")
|
||||
business_record.save(update_fields=['state'])
|
||||
return False, None
|
||||
|
||||
@@ -692,10 +693,12 @@ def process_approval_flow(approval, business_record, current_approver, state,
|
||||
|
||||
if business_record and hasattr(business_record, 'state'):
|
||||
# 抄送财务时就已经审核通过,财务只是查看
|
||||
business_record.state = "已通过"
|
||||
# 使用 final_state_map 确保状态映射正确(如待办类型:已通过 -> 已完成)
|
||||
final_state = final_state_map.get("已通过", "已通过")
|
||||
business_record.state = final_state
|
||||
business_record.save(update_fields=['state'])
|
||||
|
||||
logger.info(f"process_approval_flow: 已抄送财务部,personincharge=%s, state=已抄送财务,业务记录状态=已通过", approval.personincharge)
|
||||
logger.info(f"process_approval_flow: 已抄送财务部,personincharge=%s, state=已抄送财务,业务记录状态=%s", approval.personincharge, final_state_map.get("已通过", "已通过"))
|
||||
return False, None
|
||||
|
||||
|
||||
@@ -813,8 +816,12 @@ def create_approval_with_team_logic(team_name, approvers, title, content, approv
|
||||
)
|
||||
|
||||
# 更新业务记录状态:抄送财务时就已经审核通过,财务只是查看
|
||||
# 对于待办和结案申请类型,状态应该是"已完成",其他类型是"已通过"
|
||||
if business_record:
|
||||
business_record.state = "已通过"
|
||||
if approval_type in ["待办", "结案申请"]:
|
||||
business_record.state = "已完成"
|
||||
else:
|
||||
business_record.state = "已通过"
|
||||
business_record.save(update_fields=['state'])
|
||||
|
||||
return approval, None, False
|
||||
@@ -894,8 +901,12 @@ def create_approval_with_team_logic(team_name, approvers, title, content, approv
|
||||
)
|
||||
|
||||
# 更新业务记录状态:抄送财务时就已经审核通过,财务只是查看
|
||||
# 对于待办和结案申请类型,状态应该是"已完成",其他类型是"已通过"
|
||||
if business_record:
|
||||
business_record.state = "已通过"
|
||||
if approval_type in ["待办", "结案申请"]:
|
||||
business_record.state = "已完成"
|
||||
else:
|
||||
business_record.state = "已通过"
|
||||
business_record.save(update_fields=['state'])
|
||||
|
||||
return approval, None, False
|
||||
150
完整项目状态逻辑检查总结.md
Normal file
150
完整项目状态逻辑检查总结.md
Normal file
@@ -0,0 +1,150 @@
|
||||
# 完整项目状态逻辑检查总结
|
||||
|
||||
## 📋 检查范围
|
||||
- ✅ 待办事项状态逻辑
|
||||
- ✅ 审批流程状态更新
|
||||
- ✅ 数据库状态修改逻辑
|
||||
- ✅ 状态显示和筛选逻辑
|
||||
- ✅ 代码冲突检查
|
||||
|
||||
## ✅ 已修复的问题
|
||||
|
||||
### 1. 待办状态更新不一致问题
|
||||
|
||||
**问题描述:**
|
||||
- `process_approval_flow` 函数中,抄送财务时直接设置 `business_record.state = "已通过"`,未使用 `final_state_map`
|
||||
- `create_approval_with_team_logic` 函数中,个人团队直接抄送财务时,也未考虑待办类型的特殊状态
|
||||
|
||||
**修复位置:**
|
||||
1. ✅ `User/utils.py` 第652行:使用 `final_state_map.get("已通过", "已通过")`
|
||||
2. ✅ `User/utils.py` 第697行:使用 `final_state_map.get("已通过", "已通过")`
|
||||
3. ✅ `User/utils.py` 第821-824行:根据审批类型判断(待办/结案申请 -> "已完成",其他 -> "已通过")
|
||||
4. ✅ `User/utils.py` 第906-909行:根据审批类型判断(待办/结案申请 -> "已完成",其他 -> "已通过")
|
||||
|
||||
**修复结果:**
|
||||
- ✅ 待办类型在审核通过后,`schedule.state` 正确设置为 `"已完成"`
|
||||
- ✅ 其他类型的状态更新逻辑保持不变
|
||||
|
||||
### 2. 状态筛选逻辑问题
|
||||
|
||||
**问题描述:**
|
||||
- `state="已通过"` 查询不到:默认状态筛选与用户筛选条件冲突
|
||||
- `status="已完成"` 查询不到:筛选逻辑未考虑待办类型的特殊处理
|
||||
|
||||
**修复位置:**
|
||||
1. ✅ `User/views.py` 第773-788行:当用户传入 `filter_state` 时,覆盖默认状态筛选
|
||||
2. ✅ `User/views.py` 第1000-1019行:`filter_status` 筛选逻辑与显示逻辑保持一致
|
||||
|
||||
**修复结果:**
|
||||
- ✅ `state="已通过"` 可以正确查询
|
||||
- ✅ `status="已完成"` 可以正确查询,包括待办类型且状态为"已抄送财务"的记录
|
||||
|
||||
### 3. 审核列表返回数据优化
|
||||
|
||||
**问题描述:**
|
||||
- 返回数据中包含多个状态相关字段(`state`、`business_state`、`is_approved`),冗余且容易混淆
|
||||
|
||||
**修复位置:**
|
||||
- ✅ `User/views.py` 第1259-1268行:只返回 `status` 字段,移除其他状态字段
|
||||
- ✅ 移除了获取业务记录状态的逻辑(约50行代码),提升性能
|
||||
|
||||
**修复结果:**
|
||||
- ✅ 返回数据结构更简洁
|
||||
- ✅ 性能提升(减少数据库查询)
|
||||
- ✅ 前端只需关注 `status` 字段
|
||||
|
||||
### 4. Contractreturn 字段处理
|
||||
|
||||
**问题描述:**
|
||||
- `Contractreturn` 字段为空列表(JSON字符串 `"[]"`)时,应该返回空字符串
|
||||
|
||||
**修复位置:**
|
||||
- ✅ `business/views.py` 第1766-1768行:添加空列表检查
|
||||
- ✅ `business/views.py` 第4914-4916行:添加空列表检查
|
||||
|
||||
**修复结果:**
|
||||
- ✅ 空列表时返回空字符串,与其他字段处理一致
|
||||
|
||||
## ✅ 已验证正确的逻辑
|
||||
|
||||
### 1. 待办状态显示逻辑
|
||||
- ✅ 待办类型,状态为"已抄送财务"或"已通过"时,显示"已完成"
|
||||
- ✅ 待办类型,状态为"审核中"时,显示"审批中"
|
||||
- ✅ 待办类型,状态为"未通过"时,显示"审批中"
|
||||
|
||||
### 2. 其他类型状态显示逻辑
|
||||
- ✅ 其他类型,状态为"已抄送财务"时,显示"待查看"
|
||||
- ✅ 其他类型,状态为"已通过"时,显示"已完成"
|
||||
- ✅ 其他类型,状态为"审核中"时,显示"审批中"
|
||||
|
||||
### 3. 审核流程状态更新
|
||||
- ✅ 审核不通过时,正确设置状态为"未通过"
|
||||
- ✅ 财务查看时,正确使用 `final_state_map` 更新状态
|
||||
- ✅ 最后一个审核人通过后,正确抄送财务并更新状态
|
||||
- ✅ 待办类型使用 `final_state_map={"已通过": "已完成", "未通过": "未通过"}`
|
||||
|
||||
### 4. 状态查询和修复
|
||||
- ✅ `ApprovalStatusCheck` 接口会检测并修复待办状态不一致问题(双重保障)
|
||||
|
||||
## 📊 代码逻辑一致性检查
|
||||
|
||||
### ✅ 状态映射一致性
|
||||
| 审批类型 | 审核通过后业务记录状态 | 审批记录状态 | 显示状态 |
|
||||
|---------|---------------------|------------|---------|
|
||||
| 待办 | 已完成 | 已抄送财务/已通过 | 已完成 |
|
||||
| 结案申请 | 已完成 | 已抄送财务/已通过 | 已完成 |
|
||||
| 其他类型 | 已通过 | 已抄送财务/已通过 | 待查看/已完成 |
|
||||
|
||||
### ✅ 函数调用一致性
|
||||
- ✅ `process_approval_flow` 被正确调用,传入正确的 `final_state_map`
|
||||
- ✅ `create_approval_with_team_logic` 根据审批类型设置正确状态
|
||||
- ✅ 所有状态更新都通过统一的函数处理
|
||||
|
||||
### ✅ 数据库状态修改正确性
|
||||
- ✅ 待办类型:`schedule.state` 设置为 `"已完成"`(正确)
|
||||
- ✅ 其他类型:业务记录状态设置为 `"已通过"`(正确)
|
||||
- ✅ 审批记录状态:`approval.state` 设置为 `"已抄送财务"` 或 `"已通过"`(正确)
|
||||
|
||||
## 🔍 潜在风险点检查
|
||||
|
||||
### ⚠️ 需要注意的地方
|
||||
1. **双重保障机制**:`ApprovalStatusCheck` 中的修复逻辑保留,作为数据一致性保障
|
||||
2. **历史数据**:如果数据库中有旧数据状态不一致,`ApprovalStatusCheck` 会自动修复
|
||||
3. **并发问题**:状态更新使用 `update_fields`,确保只更新指定字段
|
||||
|
||||
### ✅ 无冲突的代码
|
||||
- ✅ 所有状态更新逻辑统一
|
||||
- ✅ 没有重复的状态设置
|
||||
- ✅ 没有相互冲突的状态判断
|
||||
|
||||
## 📝 测试建议
|
||||
|
||||
### 测试场景
|
||||
1. ✅ 创建待办事项(个人团队)→ 验证 `schedule.state = "已完成"`
|
||||
2. ✅ 创建待办事项(团队)→ 审核通过 → 验证 `schedule.state = "已完成"`
|
||||
3. ✅ 查询 `state="已通过"` → 验证能正确查询
|
||||
4. ✅ 查询 `status="已完成"` → 验证能正确查询待办类型
|
||||
5. ✅ 审核列表返回 → 验证只返回 `status` 字段
|
||||
|
||||
## ✅ 总结
|
||||
|
||||
### 修复完成情况
|
||||
- ✅ 所有发现的问题已修复
|
||||
- ✅ 代码逻辑一致性已验证
|
||||
- ✅ 数据库状态修改逻辑正确
|
||||
- ✅ 无代码冲突
|
||||
|
||||
### 代码质量
|
||||
- ✅ 逻辑清晰,易于维护
|
||||
- ✅ 性能优化(减少不必要的数据库查询)
|
||||
- ✅ 数据结构简洁(只返回必要的状态字段)
|
||||
- ✅ 有双重保障机制(`ApprovalStatusCheck` 自动修复)
|
||||
|
||||
### 建议
|
||||
1. ✅ 保留 `ApprovalStatusCheck` 中的修复逻辑,作为数据一致性保障
|
||||
2. ✅ 定期检查数据库中的状态一致性
|
||||
3. ✅ 在创建新审批类型时,确保正确设置 `final_state_map`
|
||||
|
||||
---
|
||||
**检查完成时间:** 2024年
|
||||
**检查结果:** ✅ 所有问题已修复,代码逻辑正确,无冲突
|
||||
107
项目状态逻辑检查报告.md
Normal file
107
项目状态逻辑检查报告.md
Normal file
@@ -0,0 +1,107 @@
|
||||
# 项目状态逻辑检查报告
|
||||
|
||||
## 一、已修复的问题
|
||||
|
||||
### ✅ 已修复:待办状态更新不一致
|
||||
|
||||
**问题位置:** `User/utils.py` - `process_approval_flow` 函数和 `create_approval_with_team_logic` 函数
|
||||
|
||||
**问题描述:**
|
||||
1. 在 `process_approval_flow` 函数中,当最后一个审核人通过后抄送财务时,以及没有审核人列表直接抄送财务时,代码直接设置 `business_record.state = "已通过"`,没有使用 `final_state_map`
|
||||
2. 在 `create_approval_with_team_logic` 函数中,个人团队直接抄送财务时,也直接设置 `business_record.state = "已通过"`,没有考虑待办类型
|
||||
|
||||
**修复方案:**
|
||||
1. ✅ 修复了 `process_approval_flow` 函数中的两处硬编码(第652行和第697行),使用 `final_state_map.get("已通过", "已通过")`
|
||||
2. ✅ 修复了 `create_approval_with_team_logic` 函数中的两处硬编码(第820行和第901行),根据审批类型判断:待办和结案申请设置为"已完成",其他类型设置为"已通过"
|
||||
|
||||
**修复状态:** ✅ 已完成
|
||||
|
||||
## 二、代码逻辑分析
|
||||
|
||||
### 1. 待办状态流程
|
||||
|
||||
#### 1.1 审核流程(`process_approval_flow`)
|
||||
- **输入:** `final_state_map={"已通过": "已完成", "未通过": "未通过"}`
|
||||
- **问题:** 抄送财务时未使用 `final_state_map`,直接设置为 `"已通过"`
|
||||
|
||||
#### 1.2 状态显示逻辑(`roxyExhibition`)
|
||||
- ✅ **正确:** 待办类型,状态为"已抄送财务"或"已通过"时,显示"已完成"
|
||||
- ✅ **正确:** `filter_status` 筛选逻辑已修复,与显示逻辑一致
|
||||
|
||||
#### 1.3 状态查询逻辑(`ApprovalStatusCheck`)
|
||||
- ✅ **正确:** 会检测并修复待办状态不一致的问题(第2617-2620行)
|
||||
- ⚠️ **问题:** 这是补救措施,应该在源头修复
|
||||
|
||||
### 2. 其他审批类型状态流程
|
||||
|
||||
#### 2.1 财务查看逻辑
|
||||
- ✅ **正确:** 财务查看时,使用 `final_state_map.get("已通过", "已通过")`(第619行)
|
||||
- ✅ **正确:** 其他类型的状态更新逻辑正确
|
||||
|
||||
#### 2.2 状态显示逻辑
|
||||
- ✅ **正确:** 其他类型,状态为"已抄送财务"时显示"待查看","已通过"时显示"已完成"
|
||||
|
||||
## 三、已修复的代码位置
|
||||
|
||||
### ✅ 修复位置1:`User/utils.py` 第649-653行
|
||||
```python
|
||||
# 修复后(正确)
|
||||
if business_record and hasattr(business_record, 'state'):
|
||||
# 使用 final_state_map 确保状态映射正确(如待办类型:已通过 -> 已完成)
|
||||
business_record.state = final_state_map.get("已通过", "已通过")
|
||||
business_record.save(update_fields=['state'])
|
||||
```
|
||||
|
||||
### ✅ 修复位置2:`User/utils.py` 第694-699行
|
||||
```python
|
||||
# 修复后(正确)
|
||||
if business_record and hasattr(business_record, 'state'):
|
||||
# 使用 final_state_map 确保状态映射正确(如待办类型:已通过 -> 已完成)
|
||||
final_state = final_state_map.get("已通过", "已通过")
|
||||
business_record.state = final_state
|
||||
business_record.save(update_fields=['state'])
|
||||
```
|
||||
|
||||
### ✅ 修复位置3:`User/utils.py` 第818-823行
|
||||
```python
|
||||
# 修复后(正确)
|
||||
# 对于待办和结案申请类型,状态应该是"已完成",其他类型是"已通过"
|
||||
if business_record:
|
||||
if approval_type in ["待办", "结案申请"]:
|
||||
business_record.state = "已完成"
|
||||
else:
|
||||
business_record.state = "已通过"
|
||||
business_record.save(update_fields=['state'])
|
||||
```
|
||||
|
||||
### ✅ 修复位置4:`User/utils.py` 第899-904行
|
||||
```python
|
||||
# 修复后(正确)
|
||||
# 对于待办和结案申请类型,状态应该是"已完成",其他类型是"已通过"
|
||||
if business_record:
|
||||
if approval_type in ["待办", "结案申请"]:
|
||||
business_record.state = "已完成"
|
||||
else:
|
||||
business_record.state = "已通过"
|
||||
business_record.save(update_fields=['state'])
|
||||
```
|
||||
|
||||
## 四、验证检查清单
|
||||
|
||||
### ✅ 已正确实现的功能
|
||||
1. ✅ 待办状态显示逻辑:审核通过后(已抄送财务)显示"已完成"
|
||||
2. ✅ 待办状态筛选逻辑:`status="已完成"` 可以正确筛选
|
||||
3. ✅ 原始状态筛选逻辑:`state="已通过"` 可以正确筛选
|
||||
4. ✅ 审核列表只返回 `status` 字段,移除了其他状态字段
|
||||
5. ✅ `Contractreturn` 字段空列表转换为空字符串
|
||||
|
||||
### ✅ 已修复的问题
|
||||
1. ✅ `process_approval_flow` 中抄送财务时已使用 `final_state_map`
|
||||
2. ✅ `create_approval_with_team_logic` 中已根据审批类型设置正确状态
|
||||
3. ✅ `ApprovalStatusCheck` 中的修复逻辑保留作为双重保障
|
||||
|
||||
## 五、建议
|
||||
|
||||
1. **立即修复:** 修复 `process_approval_flow` 函数中的两处硬编码状态
|
||||
2. **保留补救逻辑:** 保留 `ApprovalStatusCheck` 中的修复逻辑,作为双重保障
|
||||
3. **测试验证:** 创建待办事项,验证状态更新是否正确
|
||||
Reference in New Issue
Block a user