加入案件设置标签的接口

This commit is contained in:
ddrwode
2026-01-19 16:16:05 +08:00
parent b297337aea
commit 5f4e3dd840
2 changed files with 106 additions and 2 deletions

View File

@@ -1,7 +1,7 @@
from django.urls import path
from .models import Schedule
from .views import registration,registrationDetail,Project,Projectquerytype,ProjectDetail,EditProject,BidRegistration,BidDetail,registrationList,caseManagement,caseManagementDetail,CaseAttachmentUpload,CaseAttachmentUpdate,Uploadinvoice,InvoiceDetail,Log,LogDetail,accumulate,preFilingLinkedCases,Application,ApplicationDetail,WarehousingRegistration,WarehousingDetail,PlatformRegistration,PlatformDetail,EditPlatformDetail,DeletePlatformDetail,bulletin,BulletinDetail,EditBulletin,deleteBulletin,Lawyersdocuments,LawyersdocumentsDetail,LwaDetail,CreateSchedule,DeleteSchedule,ScheduleDetail,handleSchedule,AddRermission,DisplayRermission,DeleteRermission,EditRermission,addRole,DeleteRole,EditRole,displayRole,modifypermissions,getRolePermissions,DeleteRegistration,EditRegistration,DeleteProject,EditBid,DeleteBid,EditCase,DeleteCase,EditApplication,DeleteApplication,EditWarehousing,DeleteWarehousing,EditLawyerFlie,EditSchedule,TransferCase,CaseChangeRequestCreate,CaseChangeRequestList,CaseChangeRequestDetail,ProjectDropdownList,CaseDropdownList,ConflictSearch,CreateCaseTag,CaseTagList,CaseTagDetail,EditCaseTag,DeleteCaseTag,CaseTagDropdownList,CaseListByTag
from .views import registration,registrationDetail,Project,Projectquerytype,ProjectDetail,EditProject,BidRegistration,BidDetail,registrationList,caseManagement,caseManagementDetail,CaseAttachmentUpload,CaseAttachmentUpdate,Uploadinvoice,InvoiceDetail,Log,LogDetail,accumulate,preFilingLinkedCases,Application,ApplicationDetail,WarehousingRegistration,WarehousingDetail,PlatformRegistration,PlatformDetail,EditPlatformDetail,DeletePlatformDetail,bulletin,BulletinDetail,EditBulletin,deleteBulletin,Lawyersdocuments,LawyersdocumentsDetail,LwaDetail,CreateSchedule,DeleteSchedule,ScheduleDetail,handleSchedule,AddRermission,DisplayRermission,DeleteRermission,EditRermission,addRole,DeleteRole,EditRole,displayRole,modifypermissions,getRolePermissions,DeleteRegistration,EditRegistration,DeleteProject,EditBid,DeleteBid,EditCase,DeleteCase,EditApplication,DeleteApplication,EditWarehousing,DeleteWarehousing,EditLawyerFlie,EditSchedule,TransferCase,CaseChangeRequestCreate,CaseChangeRequestList,CaseChangeRequestDetail,ProjectDropdownList,CaseDropdownList,ConflictSearch,CreateCaseTag,CaseTagList,CaseTagDetail,EditCaseTag,DeleteCaseTag,CaseTagDropdownList,CaseListByTag,SetCaseTags
urlpatterns = [
path('register',registration.as_view(),name='register'),
@@ -79,5 +79,6 @@ urlpatterns = [
path('case-tag-edit',EditCaseTag.as_view(),name='case-tag-edit'),
path('case-tag-delete',DeleteCaseTag.as_view(),name='case-tag-delete'),
path('case-tag-dropdown-list',CaseTagDropdownList.as_view(),name='case-tag-dropdown-list'),
path('case-list-by-tag',CaseListByTag.as_view(),name='case-list-by-tag')
path('case-list-by-tag',CaseListByTag.as_view(),name='case-list-by-tag'),
path('set-case-tags',SetCaseTags.as_view(),name='set-case-tags')
]

View File

@@ -4254,6 +4254,109 @@ class CaseTagDropdownList(APIView):
}, status=status.HTTP_200_OK)
class SetCaseTags(APIView):
"""给案件设置标签"""
def post(self, request, *args, **kwargs):
"""
给案件设置标签
支持设置多个标签,也可以清空所有标签
"""
case_id = request.data.get('case_id')
tag_ids = request.data.get('tag_ids') # 标签ID列表数组或逗号分隔的字符串
if not case_id:
return Response({
'status': 'error',
'message': '缺少参数case_id案件ID',
'code': 1
}, status=status.HTTP_400_BAD_REQUEST)
# 验证案件是否存在
try:
case = Case.objects.get(id=case_id, is_deleted=False)
except Case.DoesNotExist:
return Response({
'status': 'error',
'message': '案件不存在或已被删除',
'code': 1
}, status=status.HTTP_404_NOT_FOUND)
# 记录操作前的标签
old_tags = list(case.tags.filter(is_deleted=False).values('id', 'name'))
old_tag_ids = [tag['id'] for tag in old_tags]
# 处理标签ID列表
tag_id_list = []
if tag_ids is not None:
try:
# 支持数组或逗号分隔的字符串
if isinstance(tag_ids, str):
if tag_ids.strip() == '':
tag_id_list = [] # 空字符串表示清空所有标签
elif ',' in tag_ids:
tag_id_list = [int(x.strip()) for x in tag_ids.split(',') if x.strip()]
else:
tag_id_list = [int(tag_ids)]
elif isinstance(tag_ids, list):
tag_id_list = [int(x) for x in tag_ids if x]
else:
tag_id_list = []
except (ValueError, TypeError) as e:
return Response({
'status': 'error',
'message': f'标签ID格式错误{str(e)}',
'code': 1
}, status=status.HTTP_400_BAD_REQUEST)
# 验证标签是否存在
if tag_id_list:
valid_tags = CaseTag.objects.filter(id__in=tag_id_list, is_deleted=False)
valid_tag_ids = list(valid_tags.values_list('id', flat=True))
# 检查是否有无效的标签ID
invalid_tag_ids = set(tag_id_list) - set(valid_tag_ids)
if invalid_tag_ids:
return Response({
'status': 'error',
'message': f'以下标签ID不存在或已被删除{", ".join(map(str, invalid_tag_ids))}',
'code': 1
}, status=status.HTTP_400_BAD_REQUEST)
# 设置标签关联
case.tags.set(valid_tags)
else:
# 清空所有标签
case.tags.clear()
# 获取更新后的标签信息
new_tags = list(case.tags.filter(is_deleted=False).values('id', 'name', 'color'))
new_tag_ids = [tag['id'] for tag in new_tags]
# 记录操作日志
log_operation(
request=request,
operation_type='UPDATE',
module='Business',
action='设置案件标签',
target_type='Case',
target_id=case.id,
target_name=case.contract_no or f'案件ID-{case.id}',
old_data={'tag_ids': old_tag_ids, 'tags': old_tags},
new_data={'tag_ids': new_tag_ids, 'tags': new_tags},
remark=f'设置案件标签案件ID {case_id}标签ID {new_tag_ids}'
)
return Response({
'message': '设置成功',
'code': 0,
'data': {
'case_id': case.id,
'tags': new_tags,
'tag_ids': new_tag_ids
}
}, status=status.HTTP_200_OK)
class CaseListByTag(APIView):
"""按标签筛选案件列表"""
def post(self, request, *args, **kwargs):