diff --git a/business/views.py b/business/views.py index 051e000..5d49fc6 100644 --- a/business/views.py +++ b/business/views.py @@ -120,29 +120,35 @@ def search_related_records(client_info, party_info, exclude_project_id=None): project_list = list(project_records[:10].values('id', 'ContractNo', 'times', 'type', 'client_info', 'party_info')) result['project_conflicts'] = project_list - # 检索投标表 - 投标表没有明确的委托人和相对方字段,所以如果BiddingUnit同时包含委托人和相对方信息,则视为冲突 - if client_name and party_name: - bid_records = Bid.objects.filter(is_deleted=False) - # BiddingUnit需要同时包含委托人和相对方信息 - bid_records = bid_records.filter( - Q(BiddingUnit__icontains=client_name) & Q(BiddingUnit__icontains=party_name) - ) - + # 检索投标表 - 投标表只有BiddingUnit字段,需要检查是否包含委托人或相对方信息 + # BiddingUnit可能同时包含委托人和相对方,或者只包含其中一方 + bid_records = Bid.objects.filter(is_deleted=False) + bid_q = Q() + + # 如果有提取出的名称,优先使用名称匹配 + if client_name: + bid_q |= Q(BiddingUnit__icontains=client_name) + if party_name: + bid_q |= Q(BiddingUnit__icontains=party_name) + + # 如果有完整的client_info和party_info,也尝试匹配(截取前50个字符) + if client_info: + # 提取client_info中的关键信息(去除标点符号和数字后的名称部分) + client_info_clean = client_info[:50].strip() + if client_info_clean: + bid_q |= Q(BiddingUnit__icontains=client_info_clean) + + if party_info: + # 提取party_info中的关键信息 + party_info_clean = party_info[:50].strip() + if party_info_clean: + bid_q |= Q(BiddingUnit__icontains=party_info_clean) + + # 如果构建了查询条件,执行查询 + if bid_q: + bid_records = bid_records.filter(bid_q) bid_list = list(bid_records[:10].values('id', 'ProjectName', 'times', 'BiddingUnit')) result['bid_conflicts'] = bid_list - 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) - ) - - bid_list = list(bid_records[:10].values('id', 'ProjectName', 'times', 'BiddingUnit')) - result['bid_conflicts'] = bid_list return result