优化利益检索
This commit is contained in:
@@ -382,6 +382,21 @@ class registration(APIView):
|
||||
submit=user
|
||||
)
|
||||
|
||||
# 利益冲突检索:比对预立案、立项、投标三张表
|
||||
client_info_str = _prefiling_person_to_info(prefiling.client_username)
|
||||
party_info_str = _prefiling_person_to_info(prefiling.party_username)
|
||||
conflict_result = conflict_search(
|
||||
client_info=client_info_str,
|
||||
party_info=party_info_str,
|
||||
undertaker=Undertaker,
|
||||
exclude_prefiling_id=prefiling.id
|
||||
)
|
||||
total_conflicts = (
|
||||
len(conflict_result['prefiling_conflicts'])
|
||||
+ len(conflict_result['project_conflicts'])
|
||||
+ len(conflict_result['bid_conflicts'])
|
||||
)
|
||||
|
||||
# 记录操作日志
|
||||
new_data = {
|
||||
'id': prefiling.id,
|
||||
@@ -401,7 +416,19 @@ class registration(APIView):
|
||||
remark=f'新增预立案登记:委托人 {prefiling.client_username},相对方 {prefiling.party_username}'
|
||||
)
|
||||
|
||||
return Response({'message': '登记成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
return Response({
|
||||
'message': '登记成功',
|
||||
'code': 0,
|
||||
'conflict_result': {
|
||||
'total_conflicts': total_conflicts,
|
||||
'prefiling_conflicts_count': len(conflict_result['prefiling_conflicts']),
|
||||
'project_conflicts_count': len(conflict_result['project_conflicts']),
|
||||
'bid_conflicts_count': len(conflict_result['bid_conflicts']),
|
||||
'prefiling_conflicts': conflict_result['prefiling_conflicts'],
|
||||
'project_conflicts': conflict_result['project_conflicts'],
|
||||
'bid_conflicts': conflict_result['bid_conflicts'],
|
||||
}
|
||||
}, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class registrationList(APIView):
|
||||
@@ -516,7 +543,34 @@ class EditRegistration(APIView):
|
||||
pre.Undertaker = Undertaker
|
||||
pre.save(update_fields=['Undertaker'])
|
||||
|
||||
return Response({'message': '编辑成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
# 利益冲突检索:比对预立案、立项、投标三张表
|
||||
client_info_str = _prefiling_person_to_info(pre.client_username)
|
||||
party_info_str = _prefiling_person_to_info(pre.party_username)
|
||||
conflict_result = conflict_search(
|
||||
client_info=client_info_str,
|
||||
party_info=party_info_str,
|
||||
undertaker=pre.Undertaker,
|
||||
exclude_prefiling_id=pre.id
|
||||
)
|
||||
total_conflicts = (
|
||||
len(conflict_result['prefiling_conflicts'])
|
||||
+ len(conflict_result['project_conflicts'])
|
||||
+ len(conflict_result['bid_conflicts'])
|
||||
)
|
||||
|
||||
return Response({
|
||||
'message': '编辑成功',
|
||||
'code': 0,
|
||||
'conflict_result': {
|
||||
'total_conflicts': total_conflicts,
|
||||
'prefiling_conflicts_count': len(conflict_result['prefiling_conflicts']),
|
||||
'project_conflicts_count': len(conflict_result['project_conflicts']),
|
||||
'bid_conflicts_count': len(conflict_result['bid_conflicts']),
|
||||
'prefiling_conflicts': conflict_result['prefiling_conflicts'],
|
||||
'project_conflicts': conflict_result['project_conflicts'],
|
||||
'bid_conflicts': conflict_result['bid_conflicts'],
|
||||
}
|
||||
}, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class Project(APIView):
|
||||
@@ -1065,8 +1119,22 @@ class EditProject(APIView):
|
||||
|
||||
from User.utils import create_approval_with_team_logic
|
||||
team_name = get_team_name_from_responsiblefor(responsiblefor_dict if responsiblefor else original_responsiblefor)
|
||||
# 利益冲突检索(与创建立项一致)
|
||||
related_records_info = conflict_search(
|
||||
client_info=pro.client_info,
|
||||
party_info=pro.party_info,
|
||||
exclude_project_id=pro.id
|
||||
)
|
||||
conflict_parts = []
|
||||
if related_records_info['prefiling_conflicts']:
|
||||
conflict_parts.append(f"预立案冲突:{len(related_records_info['prefiling_conflicts'])}条(ID:{','.join([str(r['id']) for r in related_records_info['prefiling_conflicts'][:5]])}{'...' if len(related_records_info['prefiling_conflicts']) > 5 else ''})")
|
||||
if related_records_info['project_conflicts']:
|
||||
conflict_parts.append(f"立项冲突:{len(related_records_info['project_conflicts'])}条(合同编号:{','.join([r['ContractNo'] for r in related_records_info['project_conflicts'][:3]])}{'...' if len(related_records_info['project_conflicts']) > 3 else ''})")
|
||||
if related_records_info['bid_conflicts']:
|
||||
conflict_parts.append(f"投标冲突:{len(related_records_info['bid_conflicts'])}条(项目:{','.join([(r.get('ProjectName') or '')[:20] for r in related_records_info['bid_conflicts'][:3]])}{'...' if len(related_records_info['bid_conflicts']) > 3 else ''})")
|
||||
conflict_text = ";冲突记录:" + ";".join(conflict_parts) if conflict_parts else ""
|
||||
content = current_responsiblefor + "在" + (
|
||||
times or original_times) + "办理立项登记,项目类型:" + original_type + ",合同编号:" + original_ContractNo + "描述:" + ",承办人:" + responsible_desc + ",收费情况:" + (charge or original_charge) + ",申请人:" + applicant_name
|
||||
times or original_times) + "办理立项登记,项目类型:" + original_type + ",合同编号:" + original_ContractNo + "描述:" + ",承办人:" + responsible_desc + ",收费情况:" + (charge or original_charge) + ",申请人:" + applicant_name + conflict_text
|
||||
approval, approvers_order_json, needs_approval = create_approval_with_team_logic(
|
||||
team_name=team_name,
|
||||
approvers=approvers,
|
||||
@@ -1351,7 +1419,17 @@ class EditBid(APIView):
|
||||
team_name = None
|
||||
from User.utils import create_approval_with_team_logic
|
||||
applicant_name = edit_user.username if edit_user else ""
|
||||
content_edit = f"项目名称:{bid.ProjectName},申请日期:{times or bid.times},申请人:{applicant_name}"
|
||||
# 利益冲突检索(与创建投标一致,按招标单位)
|
||||
conflict_result = conflict_search(bidding_unit=bid.BiddingUnit, exclude_bid_id=bid.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 ""
|
||||
content_edit = f"项目名称:{bid.ProjectName},申请日期:{times or bid.times},申请人:{applicant_name}{conflict_text}"
|
||||
approval, approvers_order_json, needs_approval = create_approval_with_team_logic(
|
||||
team_name=team_name,
|
||||
approvers=approvers,
|
||||
@@ -4124,6 +4202,29 @@ class CaseChangeRequestDetail(APIView):
|
||||
}, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
def _prefiling_person_to_info(person_json):
|
||||
"""从预立案的 client_username/party_username(JSON)中提取第一个人员,转为 conflict_search 可用的字符串。"""
|
||||
if not person_json:
|
||||
return None
|
||||
try:
|
||||
data = json.loads(person_json) if isinstance(person_json, str) else person_json
|
||||
if isinstance(data, list) and len(data) > 0:
|
||||
item = data[0]
|
||||
if isinstance(item, dict):
|
||||
name = (item.get('name') or item.get('name_original') or '').strip()
|
||||
id_num = (item.get('idNumber') or item.get('id_number') or '').strip()
|
||||
if name:
|
||||
return f"{name},身份证:{id_num}" if id_num else name
|
||||
elif isinstance(data, dict):
|
||||
name = (data.get('name') or data.get('name_original') or '').strip()
|
||||
id_num = (data.get('idNumber') or data.get('id_number') or '').strip()
|
||||
if name:
|
||||
return f"{name},身份证:{id_num}" if id_num else name
|
||||
except (json.JSONDecodeError, TypeError, AttributeError):
|
||||
pass
|
||||
return None
|
||||
|
||||
|
||||
def parse_person_info(person_str):
|
||||
"""
|
||||
解析人员信息字符串,支持多种格式:
|
||||
|
||||
Reference in New Issue
Block a user