投标加入利益检索

This commit is contained in:
ddrwode
2026-01-30 11:27:50 +08:00
parent c5f2fb8093
commit a51a6f8f12
2 changed files with 63 additions and 1 deletions

View File

@@ -1409,6 +1409,57 @@ class roxyExhibition(APIView):
itme["project_conflicts"] = []
itme["bid_conflicts"] = []
# 如果是投标登记类型,检索冲突信息并添加到返回字段(与立项相同逻辑)
if info.type == "投标登记":
try:
from business.views import conflict_search
bid_id = int(info.user_id)
bid = Bid.objects.filter(id=bid_id, is_deleted=False).first()
if bid and bid.BiddingUnit:
conflict_result = conflict_search(bidding_unit=bid.BiddingUnit, exclude_bid_id=bid_id)
def parse_json_fields_bid(records):
"""将记录中的 JSON 字符串字段解析为列表,与立项展示逻辑一致"""
processed = []
for record in records:
new_record = dict(record)
if 'client_info' in new_record and new_record['client_info']:
try:
if isinstance(new_record['client_info'], str):
parsed = json.loads(new_record['client_info'])
if isinstance(parsed, list):
new_record['client_info'] = parsed
except (json.JSONDecodeError, TypeError, ValueError):
pass
if 'party_info' in new_record and new_record['party_info']:
try:
if isinstance(new_record['party_info'], str):
parsed = json.loads(new_record['party_info'])
if isinstance(parsed, list):
new_record['party_info'] = parsed
except (json.JSONDecodeError, TypeError, ValueError):
pass
if 'BiddingUnit' in new_record and new_record['BiddingUnit']:
try:
if isinstance(new_record['BiddingUnit'], str):
parsed = json.loads(new_record['BiddingUnit'])
if isinstance(parsed, list):
new_record['BiddingUnit'] = parsed
except (json.JSONDecodeError, TypeError, ValueError):
pass
processed.append(new_record)
return processed
itme["prefiling_conflicts"] = parse_json_fields_bid(conflict_result.get('prefiling_conflicts', []))
itme["project_conflicts"] = parse_json_fields_bid(conflict_result.get('project_conflicts', []))
itme["bid_conflicts"] = parse_json_fields_bid(conflict_result.get('bid_conflicts', []))
else:
itme["prefiling_conflicts"] = []
itme["project_conflicts"] = []
itme["bid_conflicts"] = []
except (ValueError, TypeError, AttributeError, ImportError):
itme["prefiling_conflicts"] = []
itme["project_conflicts"] = []
itme["bid_conflicts"] = []
data.append(itme)
return Response({'message': '展示成功', "total": total, 'data': data, 'code': 0}, status=status.HTTP_200_OK)

View File

@@ -1116,10 +1116,21 @@ class BidRegistration(APIView):
today = datetime.datetime.now()
formatted_date = today.strftime("%Y-%m-%d")
# 利益冲突检索(与立项相同逻辑):比对预立案、立项、投标三张表
conflict_result = conflict_search(bidding_unit=BiddingUnit, exclude_bid_id=bib.id)
conflict_parts = []
if conflict_result['prefiling_conflicts']:
conflict_parts.append(f"预立案冲突:{len(conflict_result['prefiling_conflicts'])}ID{','.join([str(r['id']) for r in conflict_result['prefiling_conflicts'][:5]])}{'...' if len(conflict_result['prefiling_conflicts']) > 5 else ''}")
if conflict_result['project_conflicts']:
conflict_parts.append(f"立项冲突:{len(conflict_result['project_conflicts'])}条(合同编号:{','.join([r['ContractNo'] for r in conflict_result['project_conflicts'][:3]])}{'...' if len(conflict_result['project_conflicts']) > 3 else ''}")
if conflict_result['bid_conflicts']:
conflict_parts.append(f"投标冲突:{len(conflict_result['bid_conflicts'])}条(项目:{','.join([(r.get('ProjectName') or '')[:20] for r in conflict_result['bid_conflicts'][:3]])}{'...' if len(conflict_result['bid_conflicts']) > 3 else ''}")
conflict_text = ";冲突记录:" + "".join(conflict_parts) if conflict_parts else ""
# 使用统一的审核流程函数
from User.utils import create_approval_with_team_logic
content = f"项目名称:{ProjectName},申请日期:{times}"
content = f"项目名称:{ProjectName},申请日期:{times},招标单位:{BiddingUnit}{conflict_text}"
approval, approvers_order_json, needs_approval = create_approval_with_team_logic(
team_name=team_name,