优化利益检索
This commit is contained in:
@@ -382,6 +382,21 @@ class registration(APIView):
|
|||||||
submit=user
|
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 = {
|
new_data = {
|
||||||
'id': prefiling.id,
|
'id': prefiling.id,
|
||||||
@@ -401,7 +416,19 @@ class registration(APIView):
|
|||||||
remark=f'新增预立案登记:委托人 {prefiling.client_username},相对方 {prefiling.party_username}'
|
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):
|
class registrationList(APIView):
|
||||||
@@ -516,7 +543,34 @@ class EditRegistration(APIView):
|
|||||||
pre.Undertaker = Undertaker
|
pre.Undertaker = Undertaker
|
||||||
pre.save(update_fields=['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):
|
class Project(APIView):
|
||||||
@@ -1065,8 +1119,22 @@ class EditProject(APIView):
|
|||||||
|
|
||||||
from User.utils import create_approval_with_team_logic
|
from User.utils import create_approval_with_team_logic
|
||||||
team_name = get_team_name_from_responsiblefor(responsiblefor_dict if responsiblefor else original_responsiblefor)
|
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 + "在" + (
|
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(
|
approval, approvers_order_json, needs_approval = create_approval_with_team_logic(
|
||||||
team_name=team_name,
|
team_name=team_name,
|
||||||
approvers=approvers,
|
approvers=approvers,
|
||||||
@@ -1351,7 +1419,17 @@ class EditBid(APIView):
|
|||||||
team_name = None
|
team_name = None
|
||||||
from User.utils import create_approval_with_team_logic
|
from User.utils import create_approval_with_team_logic
|
||||||
applicant_name = edit_user.username if edit_user else ""
|
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(
|
approval, approvers_order_json, needs_approval = create_approval_with_team_logic(
|
||||||
team_name=team_name,
|
team_name=team_name,
|
||||||
approvers=approvers,
|
approvers=approvers,
|
||||||
@@ -4124,6 +4202,29 @@ class CaseChangeRequestDetail(APIView):
|
|||||||
}, status=status.HTTP_200_OK)
|
}, 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):
|
def parse_person_info(person_str):
|
||||||
"""
|
"""
|
||||||
解析人员信息字符串,支持多种格式:
|
解析人员信息字符串,支持多种格式:
|
||||||
|
|||||||
Reference in New Issue
Block a user