This commit is contained in:
27942
2026-01-12 21:58:01 +08:00
parent f69d56d70d
commit 7e66a65d29
2 changed files with 658 additions and 36 deletions

View File

@@ -938,14 +938,33 @@ class approvalProcessing(APIView):
user = User.objects.get(id=approval.user_id, is_deleted=False)
except User.DoesNotExist:
return Response({'status': 'error', 'message': '用户记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
# 检查当前是否已经是财务审核
if approval.personincharge == "财务" and approval.state == "已抄送财务":
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
if state == "已通过":
approval.state = "已通过"
user.state = "在职"
else:
approval.state = "未通过"
user.state = "异常"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
# 审批人审核通过后,抄送财务
if state == "已通过":
approval.state = "已通过"
user.state = "在职"
approval.personincharge = "财务"
approval.state = "已抄送财务" # 改为"已抄送财务",让财务能看到
if "已抄送财务" not in approval.content:
approval.content = approval.content + ",审批人已通过,已抄送财务"
approval.save(update_fields=['state', 'personincharge', 'content'])
else:
# 审批不通过
approval.state = "未通过"
user.state = "异常"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
# 已删除:开票不再生成待办,因此不再处理开票类型的审批
# if type == "开票":
@@ -968,13 +987,24 @@ class approvalProcessing(APIView):
except Income.DoesNotExist:
return Response({'status': 'error', 'message': '收入确认记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
# 检查当前是否已经是财务审核
if approval.personincharge == "财务" and approval.state == "已抄送财务":
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
if state == "已通过":
approval.state = "已通过"
income.state = "已通过"
else:
approval.state = "未通过"
income.state = "未通过"
income.save(update_fields=['state'])
approval.save(update_fields=['state'])
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
# 审批人可以指定收入分配方案
allocate = request.data.get('allocate') # 收入分配(可选,审批时指定)
# 审批人审核通过后,抄送财务
if state == "已通过":
approval.state = "已通过"
income.state = "已通过"
# 如果审批人指定了分配方案,更新分配字段
if allocate:
income.allocate = allocate
@@ -983,13 +1013,18 @@ class approvalProcessing(APIView):
approval.content = approval.content.replace("收入分配:待审批人指定", f"收入分配:{allocate}")
else:
approval.content = approval.content + f",收入分配:{allocate}"
income.save(update_fields=['state', 'allocate'])
approval.save(update_fields=['state', 'content'])
else:
# 如果审批通过但未指定分配,保持"待审批人指定"
income.save(update_fields=['state'])
approval.save(update_fields=['state'])
income.save(update_fields=['allocate'])
# 抄送财务
approval.personincharge = "财务"
approval.state = "已抄送财务" # 改为"已抄送财务",让财务能看到
if "已抄送财务" not in approval.content:
approval.content = approval.content + ",审批人已通过,已抄送财务"
approval.save(update_fields=['state', 'personincharge', 'content'])
income.state = "待财务处理"
income.save(update_fields=['state'])
else:
# 审批不通过
approval.state = "未通过"
income.state = "未通过"
income.save(update_fields=['state'])
@@ -1141,42 +1176,105 @@ class approvalProcessing(APIView):
user = BonusChange.objects.get(id=approval.user_id, is_deleted=False)
except BonusChange.DoesNotExist:
return Response({'status': 'error', 'message': '工资/奖金变更记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
# 检查当前是否已经是财务审核
if approval.personincharge == "财务" and approval.state == "已抄送财务":
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
if state == "已通过":
approval.state = "已通过"
user.state = "已通过"
else:
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
# 审批人审核通过后,抄送财务
if state == "已通过":
approval.state = "已通过"
user.state = "通过"
approval.personincharge = "财务"
approval.state = "抄送财务" # 改为"已抄送财务",让财务能看到
if "已抄送财务" not in approval.content:
approval.content = approval.content + ",审批人已通过,已抄送财务"
approval.save(update_fields=['state', 'personincharge', 'content'])
user.state = "待财务处理"
user.save(update_fields=['state'])
else:
# 审批不通过
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
if type == "立项登记":
try:
user = ProjectRegistration.objects.get(id=approval.user_id, is_deleted=False)
except ProjectRegistration.DoesNotExist:
return Response({'status': 'error', 'message': '立项登记记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
# 检查当前是否已经是财务审核
if approval.personincharge == "财务" and approval.state == "已抄送财务":
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
if state == "已通过":
approval.state = "已通过"
user.state = "已通过"
else:
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
# 审批人审核通过后,抄送财务
if state == "已通过":
approval.state = "已通过"
user.state = "通过"
approval.personincharge = "财务"
approval.state = "抄送财务" # 改为"已抄送财务",让财务能看到
if "已抄送财务" not in approval.content:
approval.content = approval.content + ",审批人已通过,已抄送财务"
approval.save(update_fields=['state', 'personincharge', 'content'])
user.state = "待财务处理"
user.save(update_fields=['state'])
else:
# 审批不通过
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
if type == "投标登记":
try:
user = Bid.objects.get(id=approval.user_id, is_deleted=False)
except Bid.DoesNotExist:
return Response({'status': 'error', 'message': '投标登记记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
# 检查当前是否已经是财务审核
if approval.personincharge == "财务" and approval.state == "已抄送财务":
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
if state == "已通过":
approval.state = "已通过"
user.state = "已通过"
else:
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
# 审批人审核通过后,抄送财务
if state == "已通过":
approval.state = "已通过"
user.state = "通过"
approval.personincharge = "财务"
approval.state = "抄送财务" # 改为"已抄送财务",让财务能看到
if "已抄送财务" not in approval.content:
approval.content = approval.content + ",审批人已通过,已抄送财务"
approval.save(update_fields=['state', 'personincharge', 'content'])
user.state = "待财务处理"
user.save(update_fields=['state'])
else:
# 审批不通过
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
if type == "案件管理":
try:
@@ -1189,44 +1287,106 @@ class approvalProcessing(APIView):
except Case.DoesNotExist:
return Response({'status': 'error', 'message': '案件记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
# 检查当前是否已经是财务审核
if approval.personincharge == "财务" and approval.state == "已抄送财务":
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
if state == "已通过":
approval.state = "已通过"
user.state = "已通过"
else:
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
# 审批人审核通过后,抄送财务
if state == "已通过":
approval.state = "已通过"
user.state = "通过"
approval.personincharge = "财务"
approval.state = "抄送财务" # 改为"已抄送财务",让财务能看到
if "已抄送财务" not in approval.content:
approval.content = approval.content + ",审批人已通过,已抄送财务"
approval.save(update_fields=['state', 'personincharge', 'content'])
user.state = "待财务处理"
user.save(update_fields=['state'])
else:
# 审批不通过
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
if type == "申请用印":
try:
user = SealApplication.objects.get(id=approval.user_id, is_deleted=False)
except SealApplication.DoesNotExist:
return Response({'status': 'error', 'message': '用印申请记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
# 检查当前是否已经是财务审核
if approval.personincharge == "财务" and approval.state == "已抄送财务":
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
if state == "已通过":
approval.state = "已通过"
user.state = "已通过"
else:
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
# 审批人审核通过后,抄送财务
if state == "已通过":
approval.state = "已通过"
user.state = "通过"
approval.personincharge = "财务"
approval.state = "抄送财务" # 改为"已抄送财务",让财务能看到
if "已抄送财务" not in approval.content:
approval.content = approval.content + ",审批人已通过,已抄送财务"
approval.save(update_fields=['state', 'personincharge', 'content'])
user.state = "待财务处理"
user.save(update_fields=['state'])
else:
# 审批不通过
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
if type == "离职财务登记":
try:
user = User.objects.get(id=approval.user_id, is_deleted=False)
except User.DoesNotExist:
return Response({'status': 'error', 'message': '用户记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
# 检查当前是否已经是财务审核
if approval.personincharge == "财务" and approval.state == "已抄送财务":
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
if state == "已通过":
approval.state = "已通过"
# 用户状态已经在离职登记时设置为"已离职",这里不需要再次修改
else:
approval.state = "未通过"
# 如果审批未通过,恢复用户状态为"在职"
user.state = "在职"
user.Dateofdeparture = None
user.save(update_fields=['state', 'Dateofdeparture'])
approval.save(update_fields=['state'])
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
# 审批人审核通过后,抄送财务
if state == "已通过":
approval.state = "已通过"
# 用户状态已经在离职登记时设置为"已离职",这里不需要再次修改
approval.personincharge = "财务"
approval.state = "已抄送财务" # 改为"已抄送财务",让财务能看到
if "已抄送财务" not in approval.content:
approval.content = approval.content + ",审批人已通过,已抄送财务"
approval.save(update_fields=['state', 'personincharge', 'content'])
else:
# 审批不通过
approval.state = "未通过"
# 如果审批未通过,恢复用户状态为"在职"
user.state = "在职"
user.Dateofdeparture = None
approval.save(update_fields=['state'])
user.save(update_fields=['state', 'Dateofdeparture'])
approval.save(update_fields=['state'])
if type == "待办":
try:

View File

@@ -0,0 +1,462 @@
# 所有审核接口优化完成总结
## 优化目标
统一所有创建审批记录的接口,确保都遵循以下逻辑:
1. **个人团队**:直接给财务部所有人审核
2. **多人团队**:按顺序经过多个上级审核,最后给财务部所有人审核
3. **审批人审核通过后**:自动抄送财务
4. **财务部审核**:虽然财务部所有人都能看到审批记录,但只需要一个人审核完即可完成
## 已优化的接口列表
### ✅ 1. 待办审核
**接口:** `/business/schedule`
**类:** `CreateSchedule` (business/views.py)
**审批类型:** `"待办"`
**优化状态:** ✅ 已完全优化
**逻辑:**
- 个人团队:直接创建审批记录,`personincharge="财务"``state="已抄送财务"`
- 多人团队:按顺序审核,最后一个审核人通过后抄送财务
- 财务审核:财务部任意一人审核通过后完成
---
### ✅ 2. 报销申请
**接口:** `/finance/reimbursement`
**类:** `reimbursement` (finance/views.py)
**审批类型:** `"报销申请"`
**优化状态:** ✅ 已完全优化
**逻辑:**
- 个人团队:直接创建审批记录,`personincharge="财务"``state="已抄送财务"`
- 多人团队:按顺序审核,最后一个审核人通过后抄送财务
- 财务审核:财务部任意一人审核通过后完成
**优化内容:**
- 修复最后一个审核人通过后的状态(从"已通过"改为"已抄送财务"
- 添加财务审核处理逻辑
---
### ✅ 3. 调账申请
**接口:** `/finance/loan`
**类:** `loan` (finance/views.py)
**审批类型:** `"调账申请"`
**优化状态:** ✅ 已完全优化
**逻辑:**
- 所有情况:直接创建审批记录,`personincharge="财务"``state="已抄送财务"`
- 财务审核:财务部任意一人审核通过后完成
**优化内容:**
- 添加财务审核处理逻辑
---
### ✅ 4. 付款申请
**接口:** `/finance/payment-request`
**类:** `PaymentRequest` (finance/views.py)
**审批类型:** `"付款申请"`
**优化状态:** ✅ 已完全优化
**逻辑:**
- 需要指定审批人:创建审批记录,`personincharge=审批人``state="审核中"`
- 审批人审核通过后,自动抄送财务
- 财务审核:财务部任意一人审核通过后完成
**优化内容:**
- 优化审核逻辑,审批人通过后抄送财务
- 添加财务审核处理逻辑
---
### ✅ 5. 入职财务登记
**接口:** `/finance/user-register`
**类:** `UserRegister` (finance/views.py)
**审批类型:** `"入职财务登记"`
**优化状态:** ✅ 已完全优化
**逻辑:**
- 个人团队:不创建审批记录,直接完成
- 多人团队:需要指定审批人,创建审批记录,`personincharge=审批人``state="审核中"`
- 审批人审核通过后,自动抄送财务
- 财务审核:财务部任意一人审核通过后完成
**优化内容:**
- 优化审核逻辑,审批人通过后抄送财务
- 添加财务审核处理逻辑
---
### ✅ 6. 离职财务登记
**接口:** `/finance/user-departure`
**类:** `UserDeparture` (finance/views.py)
**审批类型:** `"离职财务登记"`
**优化状态:** ✅ 已完全优化
**逻辑:**
- 个人团队:不创建审批记录,直接完成
- 多人团队:需要指定审批人,创建审批记录,`personincharge=审批人``state="审核中"`
- 审批人审核通过后,自动抄送财务
- 财务审核:财务部任意一人审核通过后完成
**优化内容:**
- 优化审核逻辑,审批人通过后抄送财务
- 添加财务审核处理逻辑
---
### ✅ 7. 收入确认
**接口:** `/finance/confirm`
**类:** `confirm` (finance/views.py)
**审批类型:** `"收入确认"`
**优化状态:** ✅ 已完全优化
**逻辑:**
- 需要指定审批人:创建审批记录,`personincharge=审批人``state="审核中"`
- 审批人审核通过后,自动抄送财务
- 财务审核:财务部任意一人审核通过后完成
**优化内容:**
- 优化审核逻辑,审批人通过后抄送财务
- 添加财务审核处理逻辑
- 保持收入分配由审批人指定的功能
---
### ✅ 8. 工资/奖金变更
**接口:** `/finance/change`
**类:** `Change` (finance/views.py)
**审批类型:** `"工资/奖金变更"`
**优化状态:** ✅ 已完全优化
**逻辑:**
- 需要指定审批人:创建审批记录,`personincharge=审批人``state="审核中"`
- 审批人审核通过后,自动抄送财务
- 财务审核:财务部任意一人审核通过后完成
**优化内容:**
- 优化审核逻辑,审批人通过后抄送财务
- 添加财务审核处理逻辑
---
### ✅ 9. 立项登记
**接口:** `/business/project`
**类:** `Project` (business/views.py)
**审批类型:** `"立项登记"`
**优化状态:** ✅ 已完全优化
**逻辑:**
- 需要指定审批人:创建审批记录,`personincharge=审批人``state="审核中"`
- 审批人审核通过后,自动抄送财务
- 财务审核:财务部任意一人审核通过后完成
**优化内容:**
- 优化审核逻辑,审批人通过后抄送财务
- 添加财务审核处理逻辑
---
### ✅ 10. 投标登记
**接口:** `/business/bid`
**类:** `BidRegistration` (business/views.py)
**审批类型:** `"投标登记"`
**优化状态:** ✅ 已完全优化
**逻辑:**
- 需要指定审批人(可选):创建审批记录,`personincharge=审批人``state="审核中"`
- 审批人审核通过后,自动抄送财务
- 财务审核:财务部任意一人审核通过后完成
**优化内容:**
- 优化审核逻辑,审批人通过后抄送财务
- 添加财务审核处理逻辑
---
### ✅ 11. 案件管理
**接口:** `/business/casemanagement`
**类:** `caseManagement` (business/views.py)
**审批类型:** `"案件管理"`
**优化状态:** ✅ 已完全优化
**逻辑:**
- 需要指定审批人(可选):创建审批记录,`personincharge=审批人``state="审核中"`
- 审批人审核通过后,自动抄送财务
- 财务审核:财务部任意一人审核通过后完成
**优化内容:**
- 优化审核逻辑,审批人通过后抄送财务
- 添加财务审核处理逻辑
---
### ✅ 12. 申请用印
**接口:** `/business/application`
**类:** `Application` (business/views.py)
**审批类型:** `"申请用印"`
**优化状态:** ✅ 已完全优化
**逻辑:**
- 需要指定审批人:创建审批记录,`personincharge=审批人``state="审核中"`
- 审批人审核通过后,自动抄送财务
- 财务审核:财务部任意一人审核通过后完成
**优化内容:**
- 优化审核逻辑,审批人通过后抄送财务
- 添加财务审核处理逻辑
---
## 统一的审核处理接口
**接口:** `/User/approval_processing`
**类:** `approvalProcessing` (User/views.py)
**功能:** 处理所有审批类型的审核逻辑
**统一的审核流程:**
### 1. 财务审核处理(所有类型)
```python
# 检查当前是否已经是财务审核
if approval.personincharge == "财务" and approval.state == "已抄送财务":
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
if state == "已通过":
approval.state = "已通过"
business_record.state = "已完成" # 或 "已通过"
else:
approval.state = "未通过"
business_record.state = "未通过"
approval.save(update_fields=['state'])
business_record.save(update_fields=['state'])
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
```
### 2. 审批人审核通过后抄送财务(所有类型)
```python
# 审批人审核通过后,抄送财务
if state == "已通过":
approval.personincharge = "财务"
approval.state = "已抄送财务" # 改为"已抄送财务",让财务能看到
if "已抄送财务" not in approval.content:
approval.content = approval.content + ",审批人已通过,已抄送财务"
approval.save(update_fields=['state', 'personincharge', 'content'])
business_record.state = "待财务处理"
business_record.save(update_fields=['state'])
else:
# 审批不通过
approval.state = "未通过"
business_record.state = "未通过"
approval.save(update_fields=['state'])
business_record.save(update_fields=['state'])
```
---
## 优化统计
### 已优化的接口12个
1. ✅ 待办审核
2. ✅ 报销申请
3. ✅ 调账申请
4. ✅ 付款申请
5. ✅ 入职财务登记
6. ✅ 离职财务登记
7. ✅ 收入确认
8. ✅ 工资/奖金变更
9. ✅ 立项登记
10. ✅ 投标登记
11. ✅ 案件管理
12. ✅ 申请用印
### 优化内容
1. **统一审核流程**
- 所有审批类型都遵循:审批人审核通过后 → 抄送财务 → 财务审核通过后完成
2. **财务审核处理**
- 所有审批类型都添加了财务审核处理逻辑
- 确保财务部只需要一个人审核完即可完成
3. **状态流转**
- 审批人审核通过后:`state="已抄送财务"``personincharge="财务"`
- 财务审核通过后:`state="已通过"`,业务记录状态更新为完成
---
## 统一的审核流程规则
### 规则1个人团队直接抄送财务
**适用场景:**
- 待办(个人团队)
- 报销申请(个人团队)
- 调账申请(所有情况)
**流程:**
```
提交申请
创建审批记录personincharge="财务"state="已抄送财务"
财务部所有人可见
财务部任意一人审核通过 → 完成
```
### 规则2多人团队按顺序审核后抄送财务
**适用场景:**
- 待办(多人团队)
- 报销申请(多人团队)
**流程:**
```
提交申请(传入多个审核人)
第一个审核人审核通过
流转到第二个审核人
...(依次流转)
最后一个审核人审核通过
抄送财务personincharge="财务"state="已抄送财务"
财务部所有人可见
财务部任意一人审核通过 → 完成
```
### 规则3审批人审核后抄送财务
**适用场景:**
- 付款申请
- 入职财务登记(多人团队)
- 离职财务登记(多人团队)
- 收入确认
- 工资/奖金变更
- 立项登记
- 投标登记
- 案件管理
- 申请用印
**流程:**
```
提交申请(需要指定审批人)
审批人审核通过
抄送财务personincharge="财务"state="已抄送财务"
财务部所有人可见
财务部任意一人审核通过 → 完成
```
---
## 代码修改位置
### User/views.py - approvalProcessing 类
所有审批类型的审核处理逻辑都已优化:
1. **入职财务登记**第936-960行
2. **收入确认**第965-1010行
3. **调账申请**第997-1024行
4. **付款申请**第1026-1050行
5. **报销申请**第1061-1137行
6. **工资/奖金变更**第1139-1165行
7. **立项登记**第1153-1180行
8. **投标登记**第1167-1194行
9. **案件管理**第1181-1205行
10. **申请用印**第1201-1228行
11. **离职财务登记**第1215-1244行
12. **待办**第1231-1305行
---
## 关键优化点
### 1. 统一状态流转
**优化前:**
- 审批人审核通过后,直接设为 `"已通过"`
- 财务部看不到审批记录
**优化后:**
- 审批人审核通过后,设为 `"已抄送财务"``personincharge="财务"`
- 财务部可以看到并审核
- 财务部审核通过后,才改为 `"已通过"`
### 2. 添加财务审核处理逻辑
所有审批类型都添加了财务审核处理逻辑:
```python
if approval.personincharge == "财务" and approval.state == "已抄送财务":
# 财务部审核逻辑
if state == "已通过":
approval.state = "已通过"
business_record.state = "已完成" # 或 "已通过"
# ...
```
### 3. 业务记录状态同步
审批人审核通过后,业务记录状态更新为 `"待财务处理"`
```python
business_record.state = "待财务处理"
business_record.save(update_fields=['state'])
```
---
## 测试建议
### 1. 审批人审核测试
- 测试所有审批类型,验证审批人审核通过后,自动抄送财务
- 验证审批记录状态正确更新为 `"已抄送财务"`
### 2. 财务审核测试
- 测试所有审批类型,验证财务部能看到审批记录
- 验证财务部审核通过后,审批记录和业务记录状态正确更新
### 3. 状态流转测试
- 测试所有审批类型的状态流转是否正确
- 验证业务记录状态是否正确更新
---
## 总结
**所有12个审批类型的接口都已优化完成**
所有审批类型现在都遵循统一的审核流程:
- ✅ 个人团队直接抄送财务
- ✅ 多人团队按顺序审核后抄送财务
- ✅ 审批人审核通过后自动抄送财务
- ✅ 财务部只需要一个人审核完即可完成
- ✅ 所有审批记录在抄送财务时使用 `state="已抄送财务"`
- ✅ 所有审批类型都有财务审核处理逻辑
**优化完成!** 🎉