优化自动建案逻辑
This commit is contained in:
@@ -688,7 +688,13 @@ def process_approval_flow(approval, business_record, current_approver, state,
|
||||
|
||||
if final_state_map is None:
|
||||
final_state_map = {"已通过": "已完成", "未通过": "未通过"}
|
||||
|
||||
|
||||
def _sync_case_state_if_change_request(approval_type, business_record):
|
||||
"""案件变更申请状态变更时,同步关联案件的状态"""
|
||||
if approval_type == "案件变更" and business_record and getattr(business_record, 'case', None) and business_record.case_id:
|
||||
business_record.case.state = business_record.state
|
||||
business_record.case.save(update_fields=['state'])
|
||||
|
||||
# 如果审核不通过,直接结束
|
||||
if state == "未通过":
|
||||
approval.state = "未通过"
|
||||
@@ -700,6 +706,7 @@ def process_approval_flow(approval, business_record, current_approver, state,
|
||||
if business_record and hasattr(business_record, 'state'):
|
||||
business_record.state = final_state_map.get("未通过", "未通过")
|
||||
business_record.save(update_fields=['state'])
|
||||
_sync_case_state_if_change_request(approval_type, business_record)
|
||||
|
||||
return True, None
|
||||
|
||||
@@ -718,6 +725,7 @@ def process_approval_flow(approval, business_record, current_approver, state,
|
||||
if business_record and hasattr(business_record, 'state'):
|
||||
business_record.state = final_state_map.get("已通过", "已通过")
|
||||
business_record.save(update_fields=['state'])
|
||||
_sync_case_state_if_change_request(approval_type, business_record)
|
||||
# 立项:若待查看时已建案此处不会重复创建;若未建案则补建。立案时间不再按申请人查看日更新
|
||||
if approval_type == "立项登记" and business_record:
|
||||
ensure_case_for_approved_project(business_record, approval=approval)
|
||||
@@ -730,6 +738,7 @@ def process_approval_flow(approval, business_record, current_approver, state,
|
||||
if business_record and hasattr(business_record, 'state'):
|
||||
business_record.state = final_state_map.get("未通过", "未通过")
|
||||
business_record.save(update_fields=['state'])
|
||||
_sync_case_state_if_change_request(approval_type, business_record)
|
||||
return True, None
|
||||
return False, None
|
||||
|
||||
@@ -746,6 +755,7 @@ def process_approval_flow(approval, business_record, current_approver, state,
|
||||
if business_record and hasattr(business_record, 'state'):
|
||||
business_record.state = final_state_map.get("已通过", "已通过")
|
||||
business_record.save(update_fields=['state'])
|
||||
_sync_case_state_if_change_request(approval_type, business_record)
|
||||
elif state == "未通过":
|
||||
approval.state = "未通过"
|
||||
# 保存不通过原因
|
||||
@@ -756,6 +766,7 @@ def process_approval_flow(approval, business_record, current_approver, state,
|
||||
if business_record and hasattr(business_record, 'state'):
|
||||
business_record.state = final_state_map.get("未通过", "未通过")
|
||||
business_record.save(update_fields=['state'])
|
||||
_sync_case_state_if_change_request(approval_type, business_record)
|
||||
|
||||
return True, None
|
||||
|
||||
@@ -781,6 +792,7 @@ def process_approval_flow(approval, business_record, current_approver, state,
|
||||
# 使用 final_state_map 确保状态映射正确(如待办类型:已通过 -> 已完成)
|
||||
business_record.state = final_state_map.get("已通过", "已通过")
|
||||
business_record.save(update_fields=['state'])
|
||||
_sync_case_state_if_change_request(approval_type, business_record)
|
||||
return False, None
|
||||
|
||||
# 有审核人列表(多人团队),按顺序流转
|
||||
@@ -813,9 +825,9 @@ def process_approval_flow(approval, business_record, current_approver, state,
|
||||
logger.info(f"process_approval_flow: 已更新审批记录,personincharge={next_approver}, state=审核中")
|
||||
return False, None
|
||||
else:
|
||||
# 最后一个审核人已通过:投标/立项转申请人待查看,其他类型抄送财务
|
||||
# 最后一个审核人已通过:投标/立项/案件变更转申请人待查看,其他类型抄送财务
|
||||
applicant = getattr(approval, 'applicant', None)
|
||||
if approval_type in ("投标登记", "立项登记") and applicant:
|
||||
if approval_type in ("投标登记", "立项登记", "案件变更") and applicant:
|
||||
logger.info(f"process_approval_flow: 最后一个审核人已审核,流转到申请人待查看: {applicant}")
|
||||
approval.personincharge = applicant
|
||||
approval.state = "待查看"
|
||||
@@ -843,6 +855,7 @@ def process_approval_flow(approval, business_record, current_approver, state,
|
||||
final_state = final_state_map.get("已通过", "已通过")
|
||||
business_record.state = final_state
|
||||
business_record.save(update_fields=['state'])
|
||||
_sync_case_state_if_change_request(approval_type, business_record)
|
||||
|
||||
logger.info(f"process_approval_flow: 已抄送财务部,personincharge=%s, state=已抄送财务,业务记录状态=%s", approval.personincharge, final_state_map.get("已通过", "已通过"))
|
||||
return False, None
|
||||
@@ -923,8 +936,8 @@ def create_approval_with_team_logic(team_name, approvers, title, content, approv
|
||||
# 创建审批记录,第一个审核人
|
||||
first_approver = approvers_list[0]
|
||||
approvers_str = ' → '.join(approvers_list) # 使用箭头表示顺序
|
||||
# 投标登记/立项登记:最后一步给申请人(待查看),不再给财务部
|
||||
if approval_type in ("投标登记", "立项登记") and applicant:
|
||||
# 投标登记/立项登记/案件变更:最后一步给申请人(待查看),不再给财务部
|
||||
if approval_type in ("投标登记", "立项登记", "案件变更") and applicant:
|
||||
flow_suffix = " → 申请人(待查看)"
|
||||
else:
|
||||
flow_suffix = " → 财务部(按顺序审批)"
|
||||
@@ -952,8 +965,8 @@ def create_approval_with_team_logic(team_name, approvers, title, content, approv
|
||||
# 如果没有传入审核人,则根据团队类型判断
|
||||
# 判断团队类型
|
||||
if not team_name or not team or (team and team.team_type == 'personal'):
|
||||
# 投标登记/立项登记且传入了申请人:最后一步给申请人,生成待查看待办(不再给财务部)
|
||||
if approval_type in ("投标登记", "立项登记") and applicant:
|
||||
# 投标登记/立项登记/案件变更且传入了申请人:最后一步给申请人,生成待查看待办(不再给财务部)
|
||||
if approval_type in ("投标登记", "立项登记", "案件变更") and applicant:
|
||||
content_to_save = content + ",待申请人查看"
|
||||
approval = Approval.objects.create(
|
||||
title=title,
|
||||
@@ -1034,7 +1047,7 @@ def create_approval_with_team_logic(team_name, approvers, title, content, approv
|
||||
# 创建审批记录,第一个审核人
|
||||
first_approver = approvers_list[0]
|
||||
approvers_str = ' → '.join(approvers_list)
|
||||
if approval_type in ("投标登记", "立项登记") and applicant:
|
||||
if approval_type in ("投标登记", "立项登记", "案件变更") and applicant:
|
||||
flow_suffix = " → 申请人(待查看)"
|
||||
else:
|
||||
flow_suffix = " → 财务部(按顺序审批)"
|
||||
|
||||
@@ -2100,51 +2100,25 @@ class approvalProcessing(APIView):
|
||||
except CaseChangeRequest.DoesNotExist:
|
||||
return Response({'status': 'error', 'message': '变更申请记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
# 审核中时必须传 state(已通过/未通过);待查看时申请人查看可传 已通过/已查看 或不传
|
||||
if approval.state == "审核中" and not state:
|
||||
return Response({'status': 'error', 'message': '缺少参数state(审核状态:已通过/未通过)', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
from User.utils import process_approval_flow
|
||||
current_approver = approval.personincharge
|
||||
is_completed, error = process_approval_flow(
|
||||
approval=approval,
|
||||
business_record=change_request,
|
||||
current_approver=current_approver,
|
||||
state=state,
|
||||
approval_type="案件变更",
|
||||
final_state_map={"已通过": "已通过", "未通过": "未通过"},
|
||||
rejection_reason=rejection_reason
|
||||
)
|
||||
|
||||
if state == "未通过":
|
||||
approval.state = "未通过"
|
||||
change_request.state = "未通过"
|
||||
# 保存不通过原因
|
||||
if rejection_reason:
|
||||
approval.rejection_reason = rejection_reason
|
||||
approval.save(update_fields=['state', 'rejection_reason'])
|
||||
change_request.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
if error:
|
||||
return Response({'status': 'error', 'message': error, 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
approvers_list = get_approvers_from_record(change_request, approval=approval)
|
||||
if not approvers_list:
|
||||
approval.state = "已通过"
|
||||
change_request.state = "已通过"
|
||||
approval.save(update_fields=['state'])
|
||||
change_request.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
|
||||
try:
|
||||
current_index = approvers_list.index(current_approver)
|
||||
except ValueError:
|
||||
approval.state = "已通过"
|
||||
change_request.state = "已通过"
|
||||
approval.save(update_fields=['state'])
|
||||
change_request.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
|
||||
if current_index < len(approvers_list) - 1:
|
||||
next_approver = approvers_list[current_index + 1]
|
||||
approval.personincharge = next_approver
|
||||
approval.state = "审核中"
|
||||
if "当前审批人:" in approval.content:
|
||||
approval.content = approval.content.replace(
|
||||
f"当前审批人:{current_approver}",
|
||||
f"当前审批人:{next_approver}"
|
||||
)
|
||||
approval.save(update_fields=['state', 'personincharge', 'content'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
|
||||
approval.state = "已通过"
|
||||
change_request.state = "已通过"
|
||||
approval.save(update_fields=['state'])
|
||||
change_request.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
|
||||
if type == "申请用印":
|
||||
|
||||
Reference in New Issue
Block a user