From 595380d95055edbe1f71fcc2b640062f4e98a0c0 Mon Sep 17 00:00:00 2001 From: Administrator Date: Sat, 31 Jan 2026 22:37:41 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E5=88=B6=E5=BA=A6=E5=A2=9E?= =?UTF-8?q?=E5=88=A0=E6=94=B9=E6=9F=A5=EF=BC=8C=202.=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=90=88=E5=90=8C=E7=BC=96=E5=8F=B7=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/migrations/0017_system.py | 26 ++++++ business/models.py | 8 ++ business/urls.py | 8 +- business/views.py | 139 +++++++++++++++++++++++++++-- 4 files changed, 174 insertions(+), 7 deletions(-) create mode 100644 business/migrations/0017_system.py diff --git a/business/migrations/0017_system.py b/business/migrations/0017_system.py new file mode 100644 index 0000000..24f7ef0 --- /dev/null +++ b/business/migrations/0017_system.py @@ -0,0 +1,26 @@ +# Generated by Django 4.2.25 on 2026-01-31 14:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('business', '0016_casechangerequest_need_approval'), + ] + + operations = [ + migrations.CreateModel( + name='System', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=100)), + ('content', models.TextField()), + ('times', models.CharField(max_length=100)), + ('file', models.TextField()), + ('username', models.CharField(max_length=100)), + ('state', models.CharField(max_length=100)), + ('is_deleted', models.BooleanField(default=False)), + ], + ), + ] diff --git a/business/models.py b/business/models.py index d5f526b..3f96ecf 100644 --- a/business/models.py +++ b/business/models.py @@ -154,6 +154,14 @@ class Announcement(models.Model): state = models.CharField(max_length=100) # 状态 is_deleted = models.BooleanField(default=False) # 软删除标记 +class System(models.Model): + title = models.CharField(max_length=100) # 标题 + content = models.TextField() # 内容 + times = models.CharField(max_length=100) # 提交时间 + file = models.TextField() # 文件 + username = models.CharField(max_length=100) # 提交人 + state = models.CharField(max_length=100) # 状态 + is_deleted = models.BooleanField(default=False) # 软删除标记 class LawyerFlie(models.Model): title = models.CharField(max_length=100) # 标题 diff --git a/business/urls.py b/business/urls.py index c77d8bd..f106fe5 100644 --- a/business/urls.py +++ b/business/urls.py @@ -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,SetCaseTags,PropagandaEit +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,PropagandaEit,addSystem,SystemList,eitSystem,deleteSystem urlpatterns = [ path('register',registration.as_view(),name='register'), @@ -81,5 +81,9 @@ urlpatterns = [ 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('set-case-tags',SetCaseTags.as_view(),name='set-case-tags'), - path("PropagandaEit",PropagandaEit.as_view(),name="PropagandaEit") + path("PropagandaEit",PropagandaEit.as_view(),name="PropagandaEit"), + path('addSystem',addSystem.as_view(),name='addSystem'), + path('SystemList',SystemList.as_view(),name='SystemList'), + path('eitSystem',eitSystem.as_view(),name='eitSystem'), + path('deleteSystem',deleteSystem.as_view(),name='deleteSystem') ] \ No newline at end of file diff --git a/business/views.py b/business/views.py index 499052c..a63cd02 100644 --- a/business/views.py +++ b/business/views.py @@ -8,7 +8,7 @@ from decimal import Decimal, InvalidOperation from User.models import User, Approval from User.utils import log_operation, normalize_approvers_param, build_missing_approvers_message from .models import PreFiling, ProjectRegistration, Bid, Case, Invoice, Caselog, SealApplication, Warehousing, \ - RegisterPlatform, Announcement, LawyerFlie, Schedule, permission, role, CaseChangeRequest, CaseTag,Propaganda + RegisterPlatform, Announcement, LawyerFlie, Schedule, permission, role, CaseChangeRequest, CaseTag,Propaganda,System from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from utility.utility import flies from datetime import datetime @@ -1686,7 +1686,7 @@ class caseManagementDetail(APIView): times = request.data.get('times') end_time = request.data.get('end_time') type = request.data.get('type') - serialnumber = request.data.get('serialnumber') + serialnumber = request.data.get('contract_no') party_name = request.data.get('party_name') client_name = request.data.get('client_name') tags = request.data.get('tags') @@ -1701,13 +1701,14 @@ class caseManagementDetail(APIView): Q_obj &= Q(project_id__in=por_id) if serialnumber: - Q_obj &= Q(serialnumber__icontains=serialnumber) + Q_obj &= Q(contract_no__icontains=serialnumber) if party_name: Q_obj &= Q(party_name__icontains=party_name) if client_name: Q_obj &= Q(client_name__icontains=client_name) if tags: - Q_obj &= Q(tags__contains=tags) + cas = CaseTag.objects.filter(name__icontains=tags).values_list('id', flat=True) + Q_obj &= Q(tags__in=cas) pre = Case.objects.filter(Q_obj, is_deleted=False).order_by('-id') total = len(pre) @@ -2454,6 +2455,7 @@ class ApplicationDetail(APIView): times = request.data.get('times') end_time = request.data.get('end_time') seal_type = request.data.get('seal_type') + CaseNumber = request.data.get('CaseNumber') if not all([page, per_page]): return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST) Q_obj = Q() @@ -2463,6 +2465,9 @@ class ApplicationDetail(APIView): if seal_type: Q_obj &= Q(seal_type=seal_type) + if CaseNumber: + Q_obj &= Q(CaseNumber__icontains=CaseNumber) + seas = SealApplication.objects.filter(Q_obj, is_deleted=False).order_by('-id') total = len(seas) @@ -5002,4 +5007,128 @@ class PropagandaEit(APIView): return Response({ 'message': '更新成功', 'code': 0 - }, status=status.HTTP_200_OK) \ No newline at end of file + }, status=status.HTTP_200_OK) + + +class addSystem(APIView): + def post(self, request): + title = request.data.get('title') + content = request.data.get('content') + file = request.FILES.getlist('file') + state = request.data.get('state') + token = request.META.get('token') + + if not all([title, content]): + return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST) + now = datetime.now() + date_str = now.strftime('%Y-%m-%d') + bol = 0 + if state == "置顶": + bol = 1 + + user = User.objects.get(token=token, is_deleted=False).username + System.objects.create( + title=title, + content=content, + file=json.dumps(flies(file)), + username=user, + times=date_str, + state=bol + ) + return Response({'message': '添加成功', 'code': 0}, status=status.HTTP_200_OK) + +class SystemList(APIView): + def post(self, request): + page = request.data.get('page') + per_page = request.data.get('per_page') + seas = System.objects.filter(is_deleted=False).order_by('-state', '-times') + total = len(seas) + + paginator = Paginator(seas, per_page) + try: + user_agents_page = paginator.page(page) + + except PageNotAnInteger: + user_agents_page = paginator.page(1) + except EmptyPage: + user_agents_page = paginator.page(paginator.num_pages) + data = [] + for info in user_agents_page.object_list: + data.append({ + "id": info.id, + "title": info.title, + "content": info.content, + "times": info.times, + "file": info.file, + "username": info.username, + "state": info.state, + }) + + return Response({'message': '展示成功', "total": total, 'data': data, 'code': 0}, status=status.HTTP_200_OK) + +class eitSystem(APIView): + def post(self, request): + ID = request.data.get('id') + title = request.data.get('title') + content = request.data.get('content') + file = request.FILES.getlist('file') + state = request.data.get('state') + token = request.META.get('token') # 从中间件设置的 token 获取 + + if not all([title, content, ID]): + return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST) + + try: + ann = Announcement.objects.get(id=ID, is_deleted=False) + except Announcement.DoesNotExist: + return Response({'status': 'error', 'message': '公告不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND) + + now = datetime.now() + date_str = now.strftime('%Y-%m-%d') + + if state: + bol = 0 + if state == "置顶": + bol = 1 + ann.state = bol + ann.save(update_fields=['state']) + + # 获取用户信息(如果 token 存在) + if token: + try: + user = User.objects.get(token=token, is_deleted=False).username + except User.DoesNotExist: + # 如果用户不存在,使用原有用户名 + user = ann.username + else: + # 如果 token 不存在,使用原有用户名 + user = ann.username + + if title: + ann.title = title + ann.save(update_fields=['title']) + if content: + ann.content = content + ann.save(update_fields=['content']) + if file: + ann.file = json.dumps(flies(file)) # 使用 flies 函数处理文件 + ann.save(update_fields=['file']) + + ann.username = user + ann.times = date_str + + ann.save(update_fields=['username', 'times']) + return Response({'message': '编辑成功', 'code': 0}, status=status.HTTP_200_OK) + +class deleteSystem(APIView): + def post(self, request, *args, **kwargs): + ID = request.data.get('id') + try: + announcement = Announcement.objects.get(id=ID, is_deleted=False) + # 软删除:更新 is_deleted 字段 + announcement.is_deleted = True + announcement.save() + return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK) + except Announcement.DoesNotExist: + return Response({'status': 'error', 'message': '公告不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND) +