优化案件模块

This commit is contained in:
27942
2026-01-22 11:48:44 +08:00
parent 98530d615b
commit e0f804dca6
2 changed files with 64 additions and 85 deletions

View File

@@ -577,7 +577,7 @@ def process_approval_flow(approval, business_record, current_approver, state,
- 如果没有审核人列表(个人团队),直接抄送财务
- 如果有审核人列表(多人团队),按顺序流转
- 最后一个审核人通过后,抄送财务
- 财务审核通过后,完成审批
- 财务部只需要查看,不需要审批,查看后直接完成审批记录和业务记录都更新为"已通过"
Args:
approval: Approval对象
@@ -609,13 +609,21 @@ def process_approval_flow(approval, business_record, current_approver, state,
# 检查当前是否已经是财务审核部门ID或“财务”字符串均视为财务阶段
if is_finance_personincharge(approval.personincharge) and approval.state == "已抄送财务":
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
if state == "已通过":
# 财务部只需要查看,不需要审批,查看后直接完成
# 如果不传state或state为"已通过",则完成审批
if not state or state == "已通过":
approval.state = "已通过"
approval.save(update_fields=['state'])
if business_record and hasattr(business_record, 'state'):
business_record.state = final_state_map.get("已通过", "完成")
business_record.state = final_state_map.get("已通过", "通过")
business_record.save(update_fields=['state'])
elif state == "未通过":
approval.state = "未通过"
approval.save(update_fields=['state'])
if business_record and hasattr(business_record, 'state'):
business_record.state = final_state_map.get("未通过", "未通过")
business_record.save(update_fields=['state'])
return True, None

View File

@@ -991,65 +991,19 @@ class roxyExhibition(APIView):
status_list = [filter_status]
# 需要先遍历所有记录,计算 status然后过滤
# 优化后:不需要查询业务记录状态,直接根据审批记录状态判断
for info in approvals:
# 计算 status简化版完整逻辑在下面循环中
business_state = None
is_approved = False
try:
if info.type == "收入确认":
try:
income = Income.objects.get(id=info.user_id, is_deleted=False)
business_state = income.state
is_approved = (income.state == "已通过")
except Income.DoesNotExist:
pass
elif info.type == "开票":
try:
invoice = Invoice.objects.get(id=info.user_id, is_deleted=False)
business_state = invoice.state
is_approved = (invoice.state == "已通过")
except Invoice.DoesNotExist:
pass
elif info.type == "付款申请":
try:
payment = Payment.objects.get(id=info.user_id, is_deleted=False)
business_state = payment.state
is_approved = (payment.state == "已通过")
except Payment.DoesNotExist:
pass
elif info.type == "报销申请":
try:
reimbursement = Reimbursement.objects.get(id=info.user_id, is_deleted=False)
business_state = reimbursement.state
is_approved = (reimbursement.state == "已完成")
except Reimbursement.DoesNotExist:
pass
elif info.type == "案件管理":
try:
case_id = int(info.user_id)
case = Case.objects.filter(id=case_id, is_deleted=False).first()
if case:
business_state = case.state
is_approved = (case.state == "已通过")
except (ValueError, TypeError, AttributeError):
pass
except Exception:
pass
# 计算 approval_status
# 计算 approval_status优化后不需要检查业务记录状态
approval_status = "审批中"
if info.state == "已抄送财务":
approval_status = "待查看"
elif info.state == "已通过" and is_approved:
elif info.state == "已通过":
# 审批记录状态为"已通过"(通常是财务查看后),就是已完成
approval_status = "已完成"
elif info.state == "审核中":
approval_status = "审批中"
elif info.state == "已通过":
approval_status = "审批中"
elif info.state == "未通过":
approval_status = "审批中"
elif is_approved:
approval_status = "已完成"
# 如果 status 匹配(支持多个值),添加到过滤列表
if approval_status in status_list:
@@ -1317,27 +1271,22 @@ class roxyExhibition(APIView):
logger.error(f"获取业务记录状态失败 (type={info.type}, user_id={info.user_id}): {str(e)}")
# 计算优化后的状态:审批中、待查看、已完成
# 状态判断逻辑:
# 状态判断逻辑(优化后)
# 1. 优先判断:如果审批记录状态为"已抄送财务",则状态为"待查看"(给财务部用的)
# 2. 如果审批记录状态为"已通过"且业务记录已通过,则状态为"已完成"
# 2. 如果审批记录状态为"已通过"(财务查看后),则状态为"已完成"(不需要检查业务记录状态)
# 3. 其他情况(如"审核中"、"未通过"等),则状态为"审批中"
approval_status = "审批中" # 默认状态
if info.state == "已抄送财务":
# 优先判断:已抄送财务时,无论业务记录状态如何,都显示"待查看"(财务部需要查看)
# 优先判断:已抄送财务时,显示"待查看"(财务部需要查看)
approval_status = "待查看"
elif info.state == "已通过" and is_approved:
# 审批记录和业务记录都已通过,显示"已完成"
elif info.state == "已通过":
# 审批记录状态为"已通过"(通常是财务查看后),显示"已完成"
# 不需要检查业务记录状态,只要审批记录通过就是已完成
approval_status = "已完成"
elif info.state == "审核中":
approval_status = "审批中"
elif info.state == "已通过":
# 如果审批记录是"已通过"但业务记录还没通过,可能是数据不一致,保持"审批中"
approval_status = "审批中"
elif info.state == "未通过":
approval_status = "审批中" # 未通过也可以继续审批流程
elif is_approved:
# 如果业务记录已通过但审批记录状态不是"已通过"或"已抄送财务",可能是数据不一致,显示"已完成"
approval_status = "已完成"
itme = {
'id': info.id,
@@ -1348,9 +1297,9 @@ class roxyExhibition(APIView):
"personincharge": info.personincharge,
"state": info.state, # 审批记录状态(原始状态)
"type": info.type,
"business_state": business_state, # 业务记录当前状态
"is_approved": is_approved, # 是否已经审核完全通过
"status": approval_status, # 优化后的状态:审批中、待查看、已完成
"business_state": business_state, # 业务记录当前状态(保留用于兼容)
"is_approved": is_approved, # 是否已经审核完全通过(保留用于兼容)
"status": approval_status, # 优化后的状态:审批中、待查看、已完成(财务查看后即为已完成)
}
# 如果是离职财务登记类型从content中解析结算工资
@@ -1451,6 +1400,7 @@ class approvalProcessing(APIView):
"""
消除代办
财务查看时只需要传type和id不需要传state默认为查看通过
财务部只需要查看,不需要审批,查看后直接完成(审批记录和业务记录都更新为"已通过"
:param request:
:param args:
:param kwargs:
@@ -1584,7 +1534,7 @@ class approvalProcessing(APIView):
# 检查当前是否已经是财务审核
if is_finance_personincharge(approval.personincharge) and approval.state == "已抄送财务":
# 财务部只查看,不需要审核,状态已经是"已通过"
# 财务部只需要查看,不需要审批,查看后直接完成
# 如果财务标记为未通过,则更新状态
if state == "未通过":
approval.state = "未通过"
@@ -1593,11 +1543,14 @@ class approvalProcessing(APIView):
approval.save(update_fields=['state'])
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
else:
# 财务查看通过默认或不传state状态保持"已通过"(已经是"已通过"
# 如果审批记录状态不是"已通过",更新为"已通过"(表示财务已查看)
if approval.state != "已通过":
approval.state = "已通过"
approval.save(update_fields=['state'])
# 财务查看通过默认或不传state直接完成
# 更新审批记录状态为"已通过"(表示财务已查看)
approval.state = "已通过"
approval.save(update_fields=['state'])
# 确保业务记录状态也为"已通过"(财务查看即完成)
if income.state != "已通过":
income.state = "已通过"
income.save(update_fields=['state'])
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
# 负责人填写收入分配
@@ -1685,7 +1638,7 @@ class approvalProcessing(APIView):
# 调账申请不需要审核流程,直接抄送财务查看即可
# 检查当前是否已经是财务审核
if is_finance_personincharge(approval.personincharge) and approval.state == "已抄送财务":
# 财务部只查看,不需要审核,状态已经是"已通过"
# 财务部只需要查看,不需要审批,查看后直接完成
# 如果财务标记为未通过,则更新状态
if state == "未通过":
approval.state = "未通过"
@@ -1694,11 +1647,14 @@ class approvalProcessing(APIView):
approval.save(update_fields=['state'])
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
else:
# 财务查看通过默认或不传state状态保持"已通过"(已经是"已通过"
# 如果审批记录状态不是"已通过",更新为"已通过"(表示财务已查看)
if approval.state != "已通过":
approval.state = "已通过"
approval.save(update_fields=['state'])
# 财务查看通过默认或不传state直接完成
# 更新审批记录状态为"已通过"(表示财务已查看)
approval.state = "已通过"
approval.save(update_fields=['state'])
# 确保业务记录状态也为"已通过"(财务查看即完成)
if account.state != "已通过":
account.state = "已通过"
account.save(update_fields=['state'])
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
# 其他情况(兼容旧数据)
@@ -1892,7 +1848,11 @@ class approvalProcessing(APIView):
# 检查当前是否已经是财务审核
if is_finance_personincharge(approval.personincharge) and approval.state == "已抄送财务":
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
# 财务部只需要查看,不需要审批,查看后直接完成
# 如果只传了type和id不传state则默认为"已通过"
if not state:
state = "已通过"
if state == "已通过":
approval.state = "已通过"
case.state = "已通过"
@@ -2044,7 +2004,11 @@ class approvalProcessing(APIView):
# 检查当前是否已经是财务审核
if is_finance_personincharge(approval.personincharge) and approval.state == "已抄送财务":
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
# 财务部只需要查看,不需要审批,查看后直接完成
# 如果只传了type和id不传state则默认为"已通过"
if not state:
state = "已通过"
if state == "已通过":
approval.state = "已通过"
# 用户状态已经在离职登记时设置为"已离职",这里不需要再次修改
@@ -2545,7 +2509,8 @@ class ApprovalStatusCheck(APIView):
def post(self, request, *args, **kwargs):
"""
查询待办的审核状态,判断是否已经审核完全通过
财务部查看时,自动将状态从"已抄送财务"更新为"已通过"使其从待办列表中移除
财务部查看时,自动将状态从"已抄送财务"更新为"已通过"并确保业务记录状态也为"已通过"
财务部只需要查看不需要审批查看后直接完成status变为"已完成"
:param request:
:param args:
:param kwargs:
@@ -2573,9 +2538,10 @@ class ApprovalStatusCheck(APIView):
is_finance_user = '财务部' in user_department_names
# 如果是财务部人员,且当前审批状态是"已抄送财务",则自动标记为已查看(已通过)
# 财务部只需要查看,不需要审批,查看后直接完成
if is_finance_user and is_finance_personincharge(approval.personincharge) and approval.state == "已抄送财务":
is_finance_view = True
# 自动将状态更新为"已通过"
# 自动将审批状态更新为"已通过"
approval.state = "已通过"
approval.save(update_fields=['state'])
except User.DoesNotExist:
@@ -2592,7 +2558,12 @@ class ApprovalStatusCheck(APIView):
income = Income.objects.get(id=approval.user_id, is_deleted=False)
business_state = income.state
is_approved = (income.state == "已通过")
# 如果财务查看,业务记录状态还是"已通过"之前已经是已通过),保持状态不变
# 如果财务查看,确保业务记录状态"已通过"财务查看即完成)
if is_finance_view and income.state != "已通过":
income.state = "已通过"
income.save(update_fields=['state'])
business_state = "已通过"
is_approved = True
except Income.DoesNotExist:
pass
elif type == "开票":