优化案件模块

This commit is contained in:
27942
2026-01-16 13:25:11 +08:00
parent 6fd79cd334
commit 3fc2aebe21

View File

@@ -51,7 +51,8 @@ def get_team_name_from_responsiblefor(responsiblefor):
def search_related_records(client_info, party_info, exclude_project_id=None):
"""
根据委托人和相对方信息检索预立案、投标、立项三个表的相关记录
根据委托人和相对方信息检索预立案、投标、立项三个表的冲突记录
只返回委托人和相对方都匹配的记录(冲突数据)
Args:
client_info: 委托人身份信息(字符串)
@@ -59,7 +60,7 @@ def search_related_records(client_info, party_info, exclude_project_id=None):
exclude_project_id: 要排除的立项ID可选用于排除当前正在创建的记录
Returns:
str: 检索到的相关记录信息,用于添加到待办内容中
str: 检索到的冲突记录信息,用于添加到待办内容中
"""
related_info_parts = []
@@ -83,72 +84,64 @@ def search_related_records(client_info, party_info, exclude_project_id=None):
if party_match:
party_name = party_match.group(0).strip()
# 检索预立案表
if client_name or party_name:
prefiling_records = PreFiling.objects.filter(is_deleted=False)
if client_name:
prefiling_records = prefiling_records.filter(
Q(client_username__icontains=client_name) |
Q(party_username__icontains=client_name)
)
if party_name:
prefiling_records = prefiling_records.filter(
Q(client_username__icontains=party_name) |
Q(party_username__icontains=party_name)
)
# 检索预立案表 - 只查找委托人和相对方都匹配的记录(冲突数据)
if client_name and party_name:
# 委托人和相对方都匹配,或者相对方和委托人都匹配(可能是顺序相反)
prefiling_records = PreFiling.objects.filter(is_deleted=False).filter(
(Q(client_username__icontains=client_name) & Q(party_username__icontains=party_name)) |
(Q(client_username__icontains=party_name) & Q(party_username__icontains=client_name))
)
prefiling_list = list(prefiling_records[:10].values('id', 'times', 'client_username', 'party_username', 'description'))
if prefiling_list:
related_info_parts.append(f"预立案记录{len(prefiling_list)}ID{','.join([str(r['id']) for r in prefiling_list[:5]])}{'...' if len(prefiling_list) > 5 else ''}")
related_info_parts.append(f"预立案冲突{len(prefiling_list)}ID{','.join([str(r['id']) for r in prefiling_list[:5]])}{'...' if len(prefiling_list) > 5 else ''}")
# 检索立项表(排除当前正在创建的记录)
if client_info or party_info:
# 检索立项表(排除当前正在创建的记录)- 只查找委托人和相对方都匹配的记录(冲突数据)
if client_info and party_info:
project_records = ProjectRegistration.objects.filter(is_deleted=False)
if exclude_project_id:
project_records = project_records.exclude(id=exclude_project_id)
if client_info:
project_records = project_records.filter(
Q(client_info__icontains=client_info[:50]) |
Q(party_info__icontains=client_info[:50])
)
if party_info:
project_records = project_records.filter(
Q(client_info__icontains=party_info[:50]) |
Q(party_info__icontains=party_info[:50])
)
# 委托人和相对方都匹配,或者相对方和委托人都匹配(可能是顺序相反)
project_records = project_records.filter(
(Q(client_info__icontains=client_info[:50]) & Q(party_info__icontains=party_info[:50])) |
(Q(client_info__icontains=party_info[:50]) & Q(party_info__icontains=client_info[:50]))
)
# 获取项目列表最多10条
project_list = list(project_records[:10].values('id', 'ContractNo', 'times', 'type'))
project_list = list(project_records[:10].values('id', 'ContractNo', 'times', 'type', 'client_info', 'party_info'))
if project_list:
related_info_parts.append(f"立项记录{len(project_list)}条(合同编号:{','.join([r['ContractNo'] for r in project_list[:3]])}{'...' if len(project_list) > 3 else ''}")
related_info_parts.append(f"立项冲突{len(project_list)}条(合同编号:{','.join([r['ContractNo'] for r in project_list[:3]])}{'...' if len(project_list) > 3 else ''}")
# 检索投标表
if client_name or party_name or client_info or party_info:
# 检索投标表 - 投标表没有明确的委托人和相对方字段所以如果BiddingUnit同时包含委托人和相对方信息则视为冲突
if client_name and party_name:
bid_records = Bid.objects.filter(is_deleted=False)
search_terms = []
if client_name:
search_terms.append(client_name)
if party_name:
search_terms.append(party_name)
if client_info and len(client_info) > 0:
search_terms.append(client_info[:50])
if party_info and len(party_info) > 0:
search_terms.append(party_info[:50])
# BiddingUnit需要同时包含委托人和相对方信息
bid_records = bid_records.filter(
Q(BiddingUnit__icontains=client_name) & Q(BiddingUnit__icontains=party_name)
)
if search_terms:
bid_q = Q()
for term in search_terms[:2]: # 只使用前两个搜索词
bid_q |= Q(BiddingUnit__icontains=term) | Q(ProjectName__icontains=term)
bid_list = list(bid_records[:10].values('id', 'ProjectName', 'times', 'BiddingUnit'))
if bid_list:
related_info_parts.append(f"投标冲突:{len(bid_list)}条(项目:{','.join([r['ProjectName'][:20] if r['ProjectName'] else '' for r in bid_list[:3]])}{'...' if len(bid_list) > 3 else ''}")
elif (client_info or client_name) and (party_info or party_name):
# 如果提供了完整的client_info和party_info也在BiddingUnit中查找
bid_records = Bid.objects.filter(is_deleted=False)
search_client = client_info[:50] if client_info else client_name
search_party = party_info[:50] if party_info else party_name
if search_client and search_party:
bid_records = bid_records.filter(
Q(BiddingUnit__icontains=search_client) & Q(BiddingUnit__icontains=search_party)
)
if bid_q:
bid_records = bid_records.filter(bid_q)
bid_list = list(bid_records[:10].values('id', 'ProjectName', 'times', 'BiddingUnit'))
if bid_list:
related_info_parts.append(f"投标记录:{len(bid_list)}条(项目:{','.join([r['ProjectName'][:20] if r['ProjectName'] else '' for r in bid_list[:3]])}{'...' if len(bid_list) > 3 else ''}")
bid_list = list(bid_records[:10].values('id', 'ProjectName', 'times', 'BiddingUnit'))
if bid_list:
related_info_parts.append(f"投标冲突:{len(bid_list)}条(项目:{','.join([r['ProjectName'][:20] if r['ProjectName'] else '' for r in bid_list[:3]])}{'...' if len(bid_list) > 3 else ''}")
# 组合返回
if related_info_parts:
return "相关记录:" + "".join(related_info_parts)
return "冲突记录:" + "".join(related_info_parts)
return ""