diff --git a/business/views.py b/business/views.py index e804b0d..bded97b 100644 --- a/business/views.py +++ b/business/views.py @@ -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 ""