From bbc1210685f73e452bf84238b1e5d7e18ed4aa27 Mon Sep 17 00:00:00 2001 From: TianyangZhang Date: Tue, 28 Oct 2025 16:56:26 +0800 Subject: [PATCH 1/7] =?UTF-8?q?feat:=20fix=20enm-models=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=20enm=20=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ..._alter_mpoint_cal_related_mgroup_running.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 apps/enm/migrations/0059_alter_mpoint_cal_related_mgroup_running.py diff --git a/apps/enm/migrations/0059_alter_mpoint_cal_related_mgroup_running.py b/apps/enm/migrations/0059_alter_mpoint_cal_related_mgroup_running.py new file mode 100644 index 00000000..c965a510 --- /dev/null +++ b/apps/enm/migrations/0059_alter_mpoint_cal_related_mgroup_running.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2025-10-28 08:55 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('enm', '0058_mpoint_save_expr'), + ] + + operations = [ + migrations.AlterField( + model_name='mpoint', + name='cal_related_mgroup_running', + field=models.PositiveSmallIntegerField(blank=True, choices=[(10, '不涉及'), (20, '运行时统计')], default=10, null=True, verbose_name='与工段运行状态的关联'), + ), + ] From 30bf4f55154eb8c1df6ec857156edf9a3edfeb78 Mon Sep 17 00:00:00 2001 From: TianyangZhang Date: Wed, 29 Oct 2025 11:16:15 +0800 Subject: [PATCH 2/7] =?UTF-8?q?add:=20ofm=20=E5=A2=9E=E5=8A=A0=E6=96=B0?= =?UTF-8?q?=E7=9A=84model=20=E8=AE=BA=E6=96=87=E7=94=B3=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/ofm/migrations/0026_paperse.py | 41 +++++++++++++++++++++++++++ apps/ofm/models.py | 43 ++++++++--------------------- apps/ofm/serializers.py | 12 ++++---- apps/ofm/services.py | 29 +++++++++++++++++-- apps/ofm/urls.py | 4 +-- apps/ofm/views.py | 20 +++++++------- 6 files changed, 98 insertions(+), 51 deletions(-) create mode 100644 apps/ofm/migrations/0026_paperse.py diff --git a/apps/ofm/migrations/0026_paperse.py b/apps/ofm/migrations/0026_paperse.py new file mode 100644 index 00000000..bab14bfa --- /dev/null +++ b/apps/ofm/migrations/0026_paperse.py @@ -0,0 +1,41 @@ +# Generated by Django 3.2.12 on 2025-10-29 03:13 + +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'), + ('ofm', '0025_alter_patentinfo_area'), + ] + + operations = [ + migrations.CreateModel( + name='PaperSe', + 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='删除标记')), + ('paper_name', models.CharField(max_length=100, verbose_name='拟发表论文名称')), + ('publication_name', models.CharField(max_length=100, verbose_name='拟投期刊名称')), + ('author', models.CharField(max_length=100, verbose_name='作者')), + ('paper_type', models.CharField(max_length=100, verbose_name='拟发表文章类型')), + ('is_chinese_core', models.BooleanField(default=False, verbose_name='是否为中文核心')), + ('is_sci', models.BooleanField(default=False, verbose_name='是否被SCI/EI收录')), + ('tech_status', models.JSONField(blank=True, default=list, help_text='技术状态信息列表,每个条目包含name(名称)、status(状态)、file(文件)字段', verbose_name='技术状态')), + ('tech_file', models.JSONField(default=list, help_text='技术文件信息列表,每个条目包含name(名称)page(页数)字段', verbose_name='技术文件')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='paperse_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='paperse_ticket', to='wf.ticket', verbose_name='关联工单')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='paperse_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/apps/ofm/models.py b/apps/ofm/models.py index 9b26349b..a4e3b6c8 100644 --- a/apps/ofm/models.py +++ b/apps/ofm/models.py @@ -182,39 +182,20 @@ class PatentInfo(CommonBDModel): ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单', on_delete=models.SET_NULL, related_name='patentInfo_ticket', null=True, blank=True, db_constraint=False) -# class PaperOfm(CommonADModel): -# """TN: 论文申密审批表单""" -# PAPER_TYPE_CHOICES = ( -# ('research', '研究论文'), -# ('comprehensive', '综合'), -# ) -# name = models.CharField('拟申请专利名称', max_length=100) -# author = models.CharField('发明人(设计人)', max_length=100) -# paper_type = models.CharField('论文类型', max_length=50, choices=PAPER_TYPE_CHOICES, default='research') -# is_chinese_core = models.BooleanField('是否为中文核心', default=False) -# is_sci = models.BooleanField('是否被SCI/EI收录', default=False) -# has_appraisal = models.BooleanField('是否进行过科技成果鉴定', default=False) -# has_published_article = models.BooleanField('是否发表过文章', default=False) -# has_exhibited = models.BooleanField('是否参与过展会展出', default=False) -# has_applied_in_production = models.BooleanField('是否参与应用于生产/销售', default=False) -# has_technical_exchange = models.BooleanField('是否参与过技术交流', default=False) -# paper_page_count = models.PositiveIntegerField('论文页数', null=True, blank=True) -# image_count = models.PositiveIntegerField('图/照片张数', null=True, blank=True) +class PaperSe(CommonADModel): + """TN: 论文申密审批表单""" + paper_name = models.CharField('拟发表论文名称', max_length=100) + publication_name = models.CharField('拟投期刊名称', max_length=100) + author = models.CharField('作者', max_length=100) + paper_type = models.CharField('拟发表文章类型', max_length=100) + is_chinese_core = models.BooleanField('是否为中文核心', default=False) + is_sci = models.BooleanField('是否被SCI/EI收录', default=False) + tech_status = models.JSONField('技术状态', default=list, blank=True, help_text='技术状态信息列表,每个条目包含name(名称)、status(状态)、file(文件)字段') + tech_file = models.JSONField('技术文件', default=list, help_text='技术文件信息列表,每个条目包含name(名称)page(页数)字段') + ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单', + on_delete=models.SET_NULL, related_name='paperse_ticket', null=True, blank=True, db_constraint=False) -# class Platform(CommonADModel): -# name = models.CharField(max_length=100) - -# def __str__(self): -# return self.name - -# class Project(CommonADModel): -# name = models.CharField(max_length=100) - -# def __str__(self): -# return self.name - - # class PatentRecord(CommonADModel): # """TN: 专利台账登记""" # volume_number = models.CharField(max_length=50, null=True, blank=True, verbose_name="卷号") diff --git a/apps/ofm/serializers.py b/apps/ofm/serializers.py index ec1c85f6..6598b0e4 100644 --- a/apps/ofm/serializers.py +++ b/apps/ofm/serializers.py @@ -1,4 +1,4 @@ -from .models import (Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle, FileRecord, BorrowRecord, Publicity, PatentInfo) +from .models import (Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle, FileRecord, BorrowRecord, Publicity, PatentInfo, PaperSe) # Publicity, PatetInfo, PaperOfm, Platform, Project, PatentRecord, PaperRecord, ProjectApproval, ProjectInfo) from apps.utils.serializers import CustomModelSerializer from rest_framework import serializers @@ -132,11 +132,11 @@ class PatentInfoSerializer(CustomModelSerializer): read_only_fields = EXCLUDE_FIELDS -# class PaperSerializer(CustomModelSerializer): -# class Meta: -# model = PaperOfm -# fields = '__all__' -# read_only_fields = EXCLUDE_FIELDS +class PaperSeSerializer(CustomModelSerializer): + class Meta: + model = PaperSe + fields = '__all__' + read_only_fields = EXCLUDE_FIELDS # class PlatformSerializer(serializers.ModelSerializer): diff --git a/apps/ofm/services.py b/apps/ofm/services.py index cfceda7a..ad99c482 100644 --- a/apps/ofm/services.py +++ b/apps/ofm/services.py @@ -1,7 +1,7 @@ from apps.wf.models import Ticket # TicketFlow, Transition, Workflow, CustomField, State, -from apps.ofm.models import LendingSeal, Vehicle, BorrowRecord, Publicity, MroomBooking, MroomSlot, PatentInfo +from apps.ofm.models import LendingSeal, Vehicle, BorrowRecord, Publicity, MroomBooking, MroomSlot, PatentInfo, PaperSe from rest_framework.exceptions import ParseError @@ -164,4 +164,29 @@ def patent_save_ticket_data(ticket: Ticket, new_ticket_data: dict, **kwargs): for k, v in data_save.items(): setattr(obj, k, v) obj.save() - \ No newline at end of file + + +def paperse_patent(ticket: Ticket, transition, new_ticket_data: dict): + ins = PaperSe.objects.get(id=new_ticket_data['t_id']) + ticket_data = ticket.ticket_data + ticket_data.update({ + 't_model': 'paperse', + 't_id': ins.id, + }) + ticket.ticket_data = ticket_data + ticket.create_by = ins.create_by + ticket.save() + if ins.ticket is None: + ins.ticket = ticket + ins.save() + +def paperse_save_ticket_data(ticket: Ticket, new_ticket_data: dict, **kwargs): + try: + obj = PaperSe.objects.get(id=new_ticket_data['t_id']) + except PaperSe.DoesNotExist: + raise ParseError("Publicity t_id 不存在") + data_save = {k: v for k, v in new_ticket_data.items() if k not in ['t_model', 't_id']} + + for k, v in data_save.items(): + setattr(obj, k, v) + obj.save() \ No newline at end of file diff --git a/apps/ofm/urls.py b/apps/ofm/urls.py index 35b956ef..040eb6e6 100644 --- a/apps/ofm/urls.py +++ b/apps/ofm/urls.py @@ -1,7 +1,7 @@ from django.urls import path, include from rest_framework.routers import DefaultRouter from apps.ofm.views import (MroomViewSet, MroomBookingViewSet, MroomSlotViewSet,LendingSealViewSet, VehicleViewSet, FilerecordViewSet, - FileborrowViewSet, PublicityViewSet, PatentInfoViewSet) + FileborrowViewSet, PublicityViewSet, PatentInfoViewSet, PaperSeViewSet) # SealModelViewSet, # , PublicityViewSet, , PaperViewSet, PlatformViewSet, # ProjectViewSet, PatentRecordViewSet, PaperRecordViewSet, ProjectApprovalViewSet, ProjectInfoViewSet) @@ -20,7 +20,7 @@ router.register('filerecord', FilerecordViewSet, basename='filerecord') router.register('fileborrow', FileborrowViewSet, basename='fileborrow') router.register('publicity', PublicityViewSet, basename='publicity') router.register('patentinfo', PatentInfoViewSet, basename='patentinfo') -# router.register('paper', PaperViewSet, basename='paper') +router.register('paperse', PaperSeViewSet, basename='PaperSe') # router.register('platform', PlatformViewSet, basename='platform') # router.register('project', ProjectViewSet, basename='project') # router.register('patentrecord', PatentRecordViewSet, basename='patentrecord') diff --git a/apps/ofm/views.py b/apps/ofm/views.py index 7e9252c5..9fa530a9 100644 --- a/apps/ofm/views.py +++ b/apps/ofm/views.py @@ -1,9 +1,9 @@ from django.shortcuts import render from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet -from .models import Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle, FileRecord, BorrowRecord, Publicity, PatentInfo +from .models import Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle, FileRecord, BorrowRecord, Publicity, PatentInfo, PaperSe # Publicity, , PaperOfm, Platform, Project, PatentRecord, PaperRecord, ProjectApproval, ProjectInfo) from .serializers import (MroomSerializer, MroomBookingSerializer, MroomSlotSerializer, LendingSealSerializer, - VehicleSerializer, FileRecordSerializer, BorrowRecordSerializer, PublicitySerializer, PatentInfoSerializer) + VehicleSerializer, FileRecordSerializer, BorrowRecordSerializer, PublicitySerializer, PatentInfoSerializer, PaperSeSerializer) # ,SealSerializer, # LendingSealSerializer, FileRecordSerializer, BorrowRecordSerializer, PublicitySerializer, # PatentInfoSerializer, PaperSerializer, PlatformSerializer, ProjectSerializer, ProjectMemberSerializer, PaperRecordSerializer, ProjectApprovalSerializer, ProjectInfoSerializer) @@ -182,15 +182,15 @@ class PatentInfoViewSet(CustomModelViewSet): ordering = ["-create_time", "name", "author", "type"] -# class PaperViewSet(CustomModelViewSet): -# """list: 论文申密审批 +class PaperSeViewSet(CustomModelViewSet): + """list: 论文申密审批 -# 论文申密审批 -# """ -# queryset = PaperOfm.objects.all() -# serializer_class = PaperSerializer -# filterset_fields = ["name", "author"] -# ordering = ["create_time", "name"] + 论文申密审批 + """ + queryset = PaperSe.objects.all() + serializer_class = PaperSeSerializer + filterset_fields = ["paper_name", "author"] + ordering = ["create_time", "paper_name"] # class PlatformViewSet(CustomModelViewSet): From dcc9fee8f39ea6cc3ba90b723d0cd525cdbcbab7 Mon Sep 17 00:00:00 2001 From: TianyangZhang Date: Wed, 29 Oct 2025 14:28:14 +0800 Subject: [PATCH 3/7] =?UTF-8?q?fix:=20ofm-=20papersecret=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=AE=BA=E6=96=87=E7=94=B3=E5=AF=86=E7=9A=84model=20?= =?UTF-8?q?=E5=90=8D=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ofm/migrations/0027_auto_20251029_1426.py | 44 +++++++++++++++++++ apps/ofm/models.py | 2 +- apps/ofm/serializers.py | 4 +- apps/ofm/services.py | 8 ++-- apps/ofm/views.py | 4 +- 5 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 apps/ofm/migrations/0027_auto_20251029_1426.py diff --git a/apps/ofm/migrations/0027_auto_20251029_1426.py b/apps/ofm/migrations/0027_auto_20251029_1426.py new file mode 100644 index 00000000..3ff5e9fb --- /dev/null +++ b/apps/ofm/migrations/0027_auto_20251029_1426.py @@ -0,0 +1,44 @@ +# Generated by Django 3.2.12 on 2025-10-29 06:26 + +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'), + ('ofm', '0026_paperse'), + ] + + operations = [ + migrations.CreateModel( + name='Papersecret', + 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='删除标记')), + ('paper_name', models.CharField(max_length=100, verbose_name='拟发表论文名称')), + ('publication_name', models.CharField(max_length=100, verbose_name='拟投期刊名称')), + ('author', models.CharField(max_length=100, verbose_name='作者')), + ('paper_type', models.CharField(max_length=100, verbose_name='拟发表文章类型')), + ('is_chinese_core', models.BooleanField(default=False, verbose_name='是否为中文核心')), + ('is_sci', models.BooleanField(default=False, verbose_name='是否被SCI/EI收录')), + ('tech_status', models.JSONField(blank=True, default=list, help_text='技术状态信息列表,每个条目包含name(名称)、status(状态)、file(文件)字段', verbose_name='技术状态')), + ('tech_file', models.JSONField(default=list, help_text='技术文件信息列表,每个条目包含name(名称)page(页数)字段', verbose_name='技术文件')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='papersecret_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='paperse_ticket', to='wf.ticket', verbose_name='关联工单')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='papersecret_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + migrations.DeleteModel( + name='PaperSe', + ), + ] diff --git a/apps/ofm/models.py b/apps/ofm/models.py index a4e3b6c8..00a460c1 100644 --- a/apps/ofm/models.py +++ b/apps/ofm/models.py @@ -182,7 +182,7 @@ class PatentInfo(CommonBDModel): ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单', on_delete=models.SET_NULL, related_name='patentInfo_ticket', null=True, blank=True, db_constraint=False) -class PaperSe(CommonADModel): +class Papersecret(CommonADModel): """TN: 论文申密审批表单""" paper_name = models.CharField('拟发表论文名称', max_length=100) publication_name = models.CharField('拟投期刊名称', max_length=100) diff --git a/apps/ofm/serializers.py b/apps/ofm/serializers.py index 6598b0e4..5cc82bf1 100644 --- a/apps/ofm/serializers.py +++ b/apps/ofm/serializers.py @@ -1,4 +1,4 @@ -from .models import (Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle, FileRecord, BorrowRecord, Publicity, PatentInfo, PaperSe) +from .models import (Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle, FileRecord, BorrowRecord, Publicity, PatentInfo, Papersecret) # Publicity, PatetInfo, PaperOfm, Platform, Project, PatentRecord, PaperRecord, ProjectApproval, ProjectInfo) from apps.utils.serializers import CustomModelSerializer from rest_framework import serializers @@ -134,7 +134,7 @@ class PatentInfoSerializer(CustomModelSerializer): class PaperSeSerializer(CustomModelSerializer): class Meta: - model = PaperSe + model = Papersecret fields = '__all__' read_only_fields = EXCLUDE_FIELDS diff --git a/apps/ofm/services.py b/apps/ofm/services.py index ad99c482..09d3f613 100644 --- a/apps/ofm/services.py +++ b/apps/ofm/services.py @@ -1,7 +1,7 @@ from apps.wf.models import Ticket # TicketFlow, Transition, Workflow, CustomField, State, -from apps.ofm.models import LendingSeal, Vehicle, BorrowRecord, Publicity, MroomBooking, MroomSlot, PatentInfo, PaperSe +from apps.ofm.models import LendingSeal, Vehicle, BorrowRecord, Publicity, MroomBooking, MroomSlot, PatentInfo, Papersecret from rest_framework.exceptions import ParseError @@ -167,7 +167,7 @@ def patent_save_ticket_data(ticket: Ticket, new_ticket_data: dict, **kwargs): def paperse_patent(ticket: Ticket, transition, new_ticket_data: dict): - ins = PaperSe.objects.get(id=new_ticket_data['t_id']) + ins = Papersecret.objects.get(id=new_ticket_data['t_id']) ticket_data = ticket.ticket_data ticket_data.update({ 't_model': 'paperse', @@ -182,8 +182,8 @@ def paperse_patent(ticket: Ticket, transition, new_ticket_data: dict): def paperse_save_ticket_data(ticket: Ticket, new_ticket_data: dict, **kwargs): try: - obj = PaperSe.objects.get(id=new_ticket_data['t_id']) - except PaperSe.DoesNotExist: + obj = Papersecret.objects.get(id=new_ticket_data['t_id']) + except Papersecret.DoesNotExist: raise ParseError("Publicity t_id 不存在") data_save = {k: v for k, v in new_ticket_data.items() if k not in ['t_model', 't_id']} diff --git a/apps/ofm/views.py b/apps/ofm/views.py index 9fa530a9..953ed450 100644 --- a/apps/ofm/views.py +++ b/apps/ofm/views.py @@ -1,6 +1,6 @@ from django.shortcuts import render from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet -from .models import Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle, FileRecord, BorrowRecord, Publicity, PatentInfo, PaperSe +from .models import Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle, FileRecord, BorrowRecord, Publicity, PatentInfo, Papersecret # Publicity, , PaperOfm, Platform, Project, PatentRecord, PaperRecord, ProjectApproval, ProjectInfo) from .serializers import (MroomSerializer, MroomBookingSerializer, MroomSlotSerializer, LendingSealSerializer, VehicleSerializer, FileRecordSerializer, BorrowRecordSerializer, PublicitySerializer, PatentInfoSerializer, PaperSeSerializer) @@ -187,7 +187,7 @@ class PaperSeViewSet(CustomModelViewSet): 论文申密审批 """ - queryset = PaperSe.objects.all() + queryset = Papersecret.objects.all() serializer_class = PaperSeSerializer filterset_fields = ["paper_name", "author"] ordering = ["create_time", "paper_name"] From 91486f82bae1814cdde5ef1275c16f3ce37363eb Mon Sep 17 00:00:00 2001 From: TianyangZhang Date: Wed, 29 Oct 2025 14:52:55 +0800 Subject: [PATCH 4/7] =?UTF-8?q?add=20=EF=BC=9A=E5=A2=9E=E5=8A=A0=E8=AE=BA?= =?UTF-8?q?=E6=96=87=E7=94=B3=E5=AF=86=E7=9A=84=20=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E9=83=A8=E9=97=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/ofm/serializers.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/ofm/serializers.py b/apps/ofm/serializers.py index 5cc82bf1..791045a6 100644 --- a/apps/ofm/serializers.py +++ b/apps/ofm/serializers.py @@ -133,6 +133,9 @@ class PatentInfoSerializer(CustomModelSerializer): class PaperSeSerializer(CustomModelSerializer): + create_by_name = serializers.CharField(source='create_by.name', read_only=True) + belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True) + ticket_ = TicketSimpleSerializer(source='ticket', read_only=True) class Meta: model = Papersecret fields = '__all__' From abcff8ae2dcb2e37df3a03fe78705ef81cb6d2b3 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 29 Oct 2025 20:27:38 +0800 Subject: [PATCH 5/7] =?UTF-8?q?feat:=20check=5Fwpr=5Fnumber=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/services.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/wpm/services.py b/apps/wpm/services.py index 52d75881..d64adab7 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -30,7 +30,7 @@ myLogger = logging.getLogger('log') def check_wpr_number(number: str): return (len(number) >= 5 and - number[-4:].isdigit() and + (number[-4:].isdigit() or number[-2] == "-" or number[-3] == "-") and not any(char.islower() for char in number)) def generate_new_batch(old_batch: str, mlog: Mlog): From 7951b98e994b34d10766222c3d6739329dcf2892 Mon Sep 17 00:00:00 2001 From: TianyangZhang Date: Thu, 30 Oct 2025 13:49:25 +0800 Subject: [PATCH 6/7] =?UTF-8?q?feat:=20ofm-views=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=A7=86=E5=9B=BE=E9=9B=86=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/ofm/urls.py | 4 ++-- apps/ofm/views.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/ofm/urls.py b/apps/ofm/urls.py index 040eb6e6..84ebb77b 100644 --- a/apps/ofm/urls.py +++ b/apps/ofm/urls.py @@ -1,7 +1,7 @@ from django.urls import path, include from rest_framework.routers import DefaultRouter from apps.ofm.views import (MroomViewSet, MroomBookingViewSet, MroomSlotViewSet,LendingSealViewSet, VehicleViewSet, FilerecordViewSet, - FileborrowViewSet, PublicityViewSet, PatentInfoViewSet, PaperSeViewSet) + FileborrowViewSet, PublicityViewSet, PatentInfoViewSet, PapersecretViewSet) # SealModelViewSet, # , PublicityViewSet, , PaperViewSet, PlatformViewSet, # ProjectViewSet, PatentRecordViewSet, PaperRecordViewSet, ProjectApprovalViewSet, ProjectInfoViewSet) @@ -20,7 +20,7 @@ router.register('filerecord', FilerecordViewSet, basename='filerecord') router.register('fileborrow', FileborrowViewSet, basename='fileborrow') router.register('publicity', PublicityViewSet, basename='publicity') router.register('patentinfo', PatentInfoViewSet, basename='patentinfo') -router.register('paperse', PaperSeViewSet, basename='PaperSe') +router.register('paperse', PapersecretViewSet, basename='PaperSe') # router.register('platform', PlatformViewSet, basename='platform') # router.register('project', ProjectViewSet, basename='project') # router.register('patentrecord', PatentRecordViewSet, basename='patentrecord') diff --git a/apps/ofm/views.py b/apps/ofm/views.py index 953ed450..354e4a11 100644 --- a/apps/ofm/views.py +++ b/apps/ofm/views.py @@ -182,7 +182,7 @@ class PatentInfoViewSet(CustomModelViewSet): ordering = ["-create_time", "name", "author", "type"] -class PaperSeViewSet(CustomModelViewSet): +class PapersecretViewSet(CustomModelViewSet): """list: 论文申密审批 论文申密审批 From 80ead2f4263d92d3854d5abe6d8713e42ce0fa26 Mon Sep 17 00:00:00 2001 From: TianyangZhang Date: Thu, 30 Oct 2025 13:56:01 +0800 Subject: [PATCH 7/7] =?UTF-8?q?feat:=20ofm-models=20=E4=BF=AE=E6=94=B9mode?= =?UTF-8?q?l=20=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0028_papersecret_belong_dept.py | 20 +++++++++++++++++++ apps/ofm/models.py | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 apps/ofm/migrations/0028_papersecret_belong_dept.py diff --git a/apps/ofm/migrations/0028_papersecret_belong_dept.py b/apps/ofm/migrations/0028_papersecret_belong_dept.py new file mode 100644 index 00000000..d25da425 --- /dev/null +++ b/apps/ofm/migrations/0028_papersecret_belong_dept.py @@ -0,0 +1,20 @@ +# Generated by Django 3.2.12 on 2025-10-30 05:55 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0006_auto_20241213_1249'), + ('ofm', '0027_auto_20251029_1426'), + ] + + operations = [ + migrations.AddField( + model_name='papersecret', + name='belong_dept', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='papersecret_belong_dept', to='system.dept', verbose_name='所属部门'), + ), + ] diff --git a/apps/ofm/models.py b/apps/ofm/models.py index 00a460c1..1d7e89d3 100644 --- a/apps/ofm/models.py +++ b/apps/ofm/models.py @@ -182,7 +182,7 @@ class PatentInfo(CommonBDModel): ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单', on_delete=models.SET_NULL, related_name='patentInfo_ticket', null=True, blank=True, db_constraint=False) -class Papersecret(CommonADModel): +class Papersecret(CommonBDModel): """TN: 论文申密审批表单""" paper_name = models.CharField('拟发表论文名称', max_length=100) publication_name = models.CharField('拟投期刊名称', max_length=100)