优化自动建案逻辑

This commit is contained in:
27942
2026-01-31 11:01:14 +08:00
parent 9392215c10
commit ce2e460a93

View File

@@ -611,16 +611,23 @@ def get_approvers_from_record(business_record, approval=None):
def ensure_case_for_approved_project(project, approval=None):
"""
立项审批通过后,若该立项尚未在案件管理中有对应案件,则自动创建一条案件记录。
立案时间使用审批通过时间approval.completeTiem案件会出现在案件管理列表中
立项审批进入「待查看」或「已通过」时,若该立项尚未在案件管理中有对应案件,则自动创建一条案件记录。
立案时间 = 最后审批人审批通过时间(进入待查看时写入 approval.completeTiem不再是申请人查看时间
- 待查看:最后一个审核人通过后即建案,立案时间 = 当日completeTiem 在进入待查看时已写入)。
- 已通过:申请人查看后若尚未建案则补建,立案时间仍用 approval.completeTiem最后审批人通过日
Args:
project: ProjectRegistration 实例,且 state 已为「已通过」
approval: 可选,立项登记的 Approval 记录,用于取 completeTiem;不传则按 user_id 查询
project: ProjectRegistration 实例
approval: 可选,立项登记的 Approval 记录;不传则按 user_id 查询(仅查已通过)
"""
from business.models import Case, ProjectRegistration
from .models import Approval as ApprovalModel
if not project or getattr(project, 'state', None) != "已通过":
if not project:
return
# 允许建案:立项已通过,或审批已进入待查看(审核人全部通过)
project_approved = getattr(project, 'state', None) == "已通过"
approval_pending_view = approval and getattr(approval, 'state', None) == "待查看"
if not project_approved and not approval_pending_view:
return
if Case.objects.filter(project_id=project.id, is_deleted=False).exists():
return
@@ -702,15 +709,16 @@ def process_approval_flow(approval, business_record, current_approver, state,
# 已通过、已查看、未传 state 均视为申请人已查看完成
if state == "已通过" or state == "已查看" or (state is None or state == ""):
approval.state = "已通过"
# 立项登记在进入待查看时已写入 completeTiem最后审批人通过时间此处不改写其他类型或未写时补写
if not approval.completeTiem:
approval.completeTiem = date.today() # 审批通过时间,用于案件立案时间等
approval.completeTiem = date.today()
if "已通过" not in approval.content:
approval.content = (approval.content or "") + ",申请人已查看"
approval.save(update_fields=['state', 'content', 'completeTiem'])
if business_record and hasattr(business_record, 'state'):
business_record.state = final_state_map.get("已通过", "已通过")
business_record.save(update_fields=['state'])
# 立项审批通过后,自动在案件管理中创建案件(立案时间=审批通过时间)
# 立项:若待查看时已建案此处不会重复创建;若未建案则补建。立案时间不再按申请人查看日更新
if approval_type == "立项登记" and business_record:
ensure_case_for_approved_project(business_record, approval=approval)
return True, None
@@ -811,9 +819,15 @@ def process_approval_flow(approval, business_record, current_approver, state,
logger.info(f"process_approval_flow: 最后一个审核人已审核,流转到申请人待查看: {applicant}")
approval.personincharge = applicant
approval.state = "待查看"
# 立项登记:立案时间 = 最后审批人通过时间,在此刻写入 completeTiem
if approval_type == "立项登记":
approval.completeTiem = date.today()
if "待申请人查看" not in (approval.content or ""):
approval.content = (approval.content or "") + ",待申请人查看"
approval.save(update_fields=['state', 'personincharge', 'content'])
approval.save(update_fields=['state', 'personincharge', 'content', 'completeTiem'] if approval_type == "立项登记" else ['state', 'personincharge', 'content'])
# 立项登记:进入待查看时即自动建案,立案时间使用刚写入的 completeTiem最后审批人通过日
if approval_type == "立项登记" and business_record:
ensure_case_for_approved_project(business_record, approval=approval)
# 不更新业务记录状态,等申请人查看后再设为已通过
return False, None
# 其他类型:抄送财务
@@ -951,6 +965,9 @@ def create_approval_with_team_logic(team_name, approvers, title, content, approv
user_id=str(user_id),
applicant=applicant
)
# 立项登记:进入待查看时即自动建案(个人团队无审核人,直接待查看)
if approval_type == "立项登记" and business_record:
ensure_case_for_approved_project(business_record, approval=approval)
# 不更新业务记录状态,等申请人查看后再设为已通过
return approval, None, False
# 其他类型:个人团队或无团队,直接到财务团队审核