From b6a2a6a8d734ef722fe6b3e5894758e101eaa075 Mon Sep 17 00:00:00 2001 From: TianyangZhang Date: Tue, 4 Nov 2025 15:09:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20srm=20-add=20models=20=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E5=AE=A1=E6=89=B9=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migrations/0005_platform_platstanding.py | 66 +++++++++++++++++++ apps/srm/models.py | 27 ++++++++ apps/srm/serializers.py | 20 ++++-- apps/srm/urls.py | 4 +- apps/srm/views.py | 30 +++++++-- 5 files changed, 135 insertions(+), 12 deletions(-) create mode 100644 apps/srm/migrations/0005_platform_platstanding.py diff --git a/apps/srm/migrations/0005_platform_platstanding.py b/apps/srm/migrations/0005_platform_platstanding.py new file mode 100644 index 00000000..fca297e2 --- /dev/null +++ b/apps/srm/migrations/0005_platform_platstanding.py @@ -0,0 +1,66 @@ +# Generated by Django 3.2.12 on 2025-11-04 07:08 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('wf', '0004_workflow_view_path2'), + ('srm', '0004_alter_paperrecord_pa_type'), + ] + + operations = [ + migrations.CreateModel( + name='Platstanding', + fields=[ + ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('number', models.CharField(blank=True, max_length=50, null=True, verbose_name='发文号')), + ('name', models.CharField(blank=True, max_length=50, null=True, verbose_name='名称')), + ('p_type', models.CharField(blank=True, max_length=50, null=True, verbose_name='平台类型')), + ('org', models.CharField(blank=True, max_length=100, null=True, verbose_name='单位')), + ('period', models.CharField(blank=True, max_length=200, null=True, verbose_name='建设期')), + ('city_p', models.BooleanField(default=False, verbose_name='市级平台')), + ('province_p', models.BooleanField(default=False, verbose_name='省级平台')), + ('plat_amount', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='平台资金(元)')), + ('son_pro', models.CharField(blank=True, max_length=200, null=True, verbose_name='子项目')), + ('achieve', models.CharField(blank=True, max_length=200, null=True, verbose_name='成果')), + ('finished', models.CharField(blank=True, max_length=200, null=True, verbose_name='完成情况')), + ('completion', models.CharField(blank=True, max_length=200, null=True, verbose_name='建成绩效完成情况')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='platstanding_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='platstanding_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Platform', + fields=[ + ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('p_date', models.DateField(blank=True, null=True, verbose_name='日期')), + ('p_dept', models.CharField(blank=True, max_length=200, null=True, verbose_name='归口部门')), + ('city_p', models.BooleanField(default=False, verbose_name='市级平台')), + ('province_p', models.BooleanField(default=False, verbose_name='省级平台')), + ('const', models.CharField(blank=True, max_length=50, null=True, verbose_name='建设期')), + ('charge', models.CharField(blank=True, max_length=50, null=True, verbose_name='负责人')), + ('condition', models.TextField(blank=True, max_length=200, null=True, verbose_name='平台基本情况与目标绩效')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='platform_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('ticket', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='plat_ticket', to='wf.ticket', verbose_name='关联工单')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='platform_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/apps/srm/models.py b/apps/srm/models.py index bf55da5f..be49abc5 100644 --- a/apps/srm/models.py +++ b/apps/srm/models.py @@ -113,6 +113,33 @@ class PaperRecord(CommonADModel): award_info = models.TextField(null=True, blank=True, verbose_name="报奖情况") bonus_amount = models.DecimalField(max_digits=10,decimal_places=2, null=True,blank=True,verbose_name="奖金金额(元)") +class Platform(CommonADModel): + """TN: 平台信息表""" + p_date = models.DateField(null=True, blank=True, verbose_name="日期") + p_dept = models.CharField("归口部门", max_length=200, null=True, blank=True) + city_p = models.BooleanField("市级平台", default=False) + province_p = models.BooleanField("省级平台", default=False) + const = models.CharField("建设期", max_length=50, null=True, blank=True) + charge = models.CharField("负责人", max_length=50, null=True, blank=True) + condition = models.TextField("平台基本情况与目标绩效", max_length=200, null=True, blank=True) + ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单', + on_delete=models.SET_NULL, related_name='plat_ticket', null=True, blank=True, db_constraint=False) + +class Platstanding(CommonADModel): + """TN: 平台台账登记""" + number = models.CharField("发文号", max_length=50, null=True, blank=True) + name = models.CharField("名称", max_length=50, null=True, blank=True) + p_type = models.CharField("平台类型", max_length=50, null=True, blank=True) + org = models.CharField("单位", max_length=100, null=True, blank=True) + period = models.CharField("建设期", max_length=200, null=True, blank=True) + city_p = models.BooleanField("市级平台", default=False) + province_p = models.BooleanField("省级平台", default=False) + plat_amount = models.DecimalField(max_digits=10,decimal_places=2, null=True,blank=True,verbose_name="平台资金(元)") + son_pro= models.CharField("子项目", max_length=200, null=True, blank=True) + achieve = models.CharField("成果", max_length=200, null=True, blank=True) + finished = models.CharField("完成情况", max_length=200, null=True, blank=True) + completion = models.CharField("建成绩效完成情况", max_length=200, null=True, blank=True) + # class ProjectApproval(CommonBDModel): # """TN: 立项审批表""" diff --git a/apps/srm/serializers.py b/apps/srm/serializers.py index 2312ce55..07949330 100644 --- a/apps/srm/serializers.py +++ b/apps/srm/serializers.py @@ -1,4 +1,4 @@ -from .models import (PatentInfo, Papersecret, PatentRecord, PaperRecord) +from .models import PatentInfo, Papersecret, PatentRecord, PaperRecord, Platform, Platstanding from apps.utils.serializers import CustomModelSerializer from rest_framework import serializers from django.db import transaction @@ -44,11 +44,21 @@ class PaperRecordSerializer(CustomModelSerializer): fields = '__all__' read_only_fields = EXCLUDE_FIELDS -# class PlatformSerializer(serializers.ModelSerializer): -# class Meta: -# model = Platform -# fields = ['id', 'name'] +class PlatformSerializer(serializers.ModelSerializer): + create_by_name = serializers.CharField(source='create_by.name', read_only=True) + belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True) + class Meta: + model = Platform + fields = '__all__' + read_only_fields = EXCLUDE_FIELDS +class PlatstandingSerializer(serializers.ModelSerializer): + create_by_name = serializers.CharField(source='create_by.name', read_only=True) + belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True) + class Meta: + model = Platstanding + fields = '__all__' + read_only_fields = EXCLUDE_FIELDS # class ProjectSerializer(serializers.ModelSerializer): # class Meta: diff --git a/apps/srm/urls.py b/apps/srm/urls.py index 8c686ddd..a4eb94cb 100644 --- a/apps/srm/urls.py +++ b/apps/srm/urls.py @@ -1,6 +1,6 @@ from django.urls import path, include from rest_framework.routers import DefaultRouter -from apps.srm.views import PatentInfoViewSet, PapersecretViewSet, PatentRecordViewSet, PaperRecordViewSet +from apps.srm.views import PatentInfoViewSet, PapersecretViewSet, PatentRecordViewSet, PaperRecordViewSet, PlatformViewSet, PlatstandingViewSet API_BASE_URL = 'api/srm/' @@ -11,6 +11,8 @@ router.register('patentinfo', PatentInfoViewSet, basename='patentinfo') router.register('paperse', PapersecretViewSet, basename='PaperSe') router.register('patentrecord', PatentRecordViewSet, basename='patentrecord') router.register('paperrecord', PaperRecordViewSet, basename='paperrecord') +router.register('pf', PlatformViewSet, basename='pf') +router.register('ps', PlatstandingViewSet, basename='ps') urlpatterns = [ path(API_BASE_URL, include(router.urls)), diff --git a/apps/srm/views.py b/apps/srm/views.py index 95d919d1..81121993 100644 --- a/apps/srm/views.py +++ b/apps/srm/views.py @@ -3,8 +3,8 @@ from django.shortcuts import render # Create your views here. from django.shortcuts import render from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet -from .models import PatentInfo, Papersecret, PatentRecord, PaperRecord -from .serializers import PatentInfoSerializer, PaperSeSerializer, PatentRecordSerializer, PaperRecordSerializer +from .models import PatentInfo, Papersecret, PatentRecord, PaperRecord, Platform, Platstanding +from .serializers import PatentInfoSerializer, PaperSeSerializer, PatentRecordSerializer, PaperRecordSerializer, PlatformSerializer, PlatstandingSerializer from rest_framework.exceptions import ParseError from rest_framework.response import Response @@ -20,7 +20,6 @@ class PatentInfoViewSet(CustomModelViewSet): filterset_fields = ["name", "author", "type"] ordering = ["-create_time", "name", "author", "type"] - class PapersecretViewSet(CustomModelViewSet): """list: 论文申密审批 @@ -31,7 +30,6 @@ class PapersecretViewSet(CustomModelViewSet): filterset_fields = ["paper_name", "author"] ordering = ["-create_time", "paper_name"] - class PatentRecordViewSet(CustomModelViewSet): """list: 专利台账登记 @@ -61,7 +59,6 @@ class PatentRecordViewSet(CustomModelViewSet): queryset = queryset.filter(name__icontains=search) patents = [{'id': patent.id, 'name': patent.name} for patent in queryset] return Response(patents) - class PaperRecordViewSet(CustomModelViewSet): """list: 论文台账登记 @@ -91,4 +88,25 @@ class PaperRecordViewSet(CustomModelViewSet): if search: queryset = queryset.filter(paper_name__icontains=search) papers = [{'id': paper.id, 'name': paper.paper_name} for paper in queryset] - return Response(papers) \ No newline at end of file + return Response(papers) + +class PlatformViewSet(CustomModelViewSet): + """list: 平台审批 + + 平台审批 + """ + queryset = Platform.objects.all() + serializer_class = PlatformSerializer + filterset_fields = ["p_dept"] + ordering = ["-create_time", "p_dept"] + + +class PlatstandingViewSet(CustomModelViewSet): + """list: 平台审批 + + 平台审批 + """ + queryset = Platstanding.objects.all() + serializer_class = PlatstandingSerializer + filterset_fields = ["name", "city_p", "province_p"] + ordering = ["-create_time", "name"] \ No newline at end of file