feat: srm 增加论文台账接口
This commit is contained in:
parent
b9f9527ff2
commit
adf9b95038
|
|
@ -0,0 +1,45 @@
|
|||
# Generated by Django 3.2.12 on 2025-11-04 02:43
|
||||
|
||||
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),
|
||||
('srm', '0002_patentrecord_pc_type'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='PaperRecord',
|
||||
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_number', models.CharField(blank=True, max_length=50, null=True, verbose_name='论文编号(投稿后补登)')),
|
||||
('pa_type', models.CharField(choices=[('invention', '发明专利'), ('utility', '实用新型专利'), ('design', '外观设计专利')], default='invention', max_length=50, verbose_name='论文类型')),
|
||||
('organization', models.CharField(max_length=100, verbose_name='单位')),
|
||||
('author', models.CharField(max_length=100, verbose_name='作者')),
|
||||
('cor_author', models.CharField(max_length=100, verbose_name='通讯作者')),
|
||||
('affiliated_platforms', models.CharField(blank=True, max_length=255, verbose_name='归属平台')),
|
||||
('affiliated_projects', models.CharField(blank=True, max_length=255, verbose_name='归属项目')),
|
||||
('accept_date', models.DateField(blank=True, null=True, verbose_name='接受日期')),
|
||||
('public_date', models.DateField(blank=True, null=True, verbose_name='发表日期')),
|
||||
('pub_paid', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='版面费缴纳')),
|
||||
('status', models.CharField(choices=[('审稿中', '审稿中'), ('一修', '一修'), ('二修', '二修'), ('接收', '接收'), ('发表', '发表')], max_length=20, verbose_name='状态')),
|
||||
('award_info', models.TextField(blank=True, null=True, verbose_name='报奖情况')),
|
||||
('bonus_amount', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='奖金金额(元)')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='paperrecord_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('paper', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='paper_record', to='srm.papersecret', verbose_name='论文名称')),
|
||||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='paperrecord_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
||||
|
|
@ -81,6 +81,40 @@ class PatentRecord(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 PaperRecord(CommonADModel):
|
||||
"""TN: 专利台账登记"""
|
||||
PAPER_TYPE_CHOICES = (
|
||||
('invention', '发明专利'),
|
||||
('utility', '实用新型专利'),
|
||||
('design', '外观设计专利'),
|
||||
)
|
||||
paper_number = models.CharField(max_length=50, null=True, blank=True, verbose_name="论文编号(投稿后补登)")
|
||||
paper = models.ForeignKey('Papersecret', verbose_name="论文名称", on_delete=models.CASCADE, related_name='paper_record')
|
||||
pa_type = models.CharField('论文类型', max_length=50, choices=PAPER_TYPE_CHOICES, default='invention')
|
||||
organization = models.CharField(max_length=100, verbose_name="单位")
|
||||
author = models.CharField(max_length=100, verbose_name="作者")
|
||||
cor_author = models.CharField(max_length=100, verbose_name="通讯作者")
|
||||
affiliated_platforms = models.CharField(max_length=255, blank=True, verbose_name="归属平台")
|
||||
affiliated_projects = models.CharField(max_length=255, blank=True, verbose_name="归属项目")
|
||||
accept_date = models.DateField(null=True, blank=True, verbose_name="接受日期")
|
||||
public_date = models.DateField(null=True, blank=True, verbose_name="发表日期")
|
||||
# validity_years = models.IntegerField(null=True, blank=True, verbose_name="有效年限(年)")
|
||||
pub_paid = models.DecimalField(max_digits=10,decimal_places=2, null=True,blank=True,verbose_name="版面费缴纳")
|
||||
|
||||
status = models.CharField(
|
||||
max_length=20,
|
||||
choices=[
|
||||
("审稿中", "审稿中"),
|
||||
("一修", "一修"),
|
||||
("二修", "二修"),
|
||||
("接收", "接收"),
|
||||
("发表", "发表"),
|
||||
],
|
||||
verbose_name="状态"
|
||||
)
|
||||
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 ProjectApproval(CommonBDModel):
|
||||
# """TN: 立项审批表"""
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from .models import (PatentInfo, Papersecret, PatentRecord)
|
||||
from .models import (PatentInfo, Papersecret, PatentRecord, PaperRecord)
|
||||
from apps.utils.serializers import CustomModelSerializer
|
||||
from rest_framework import serializers
|
||||
from django.db import transaction
|
||||
|
|
@ -30,12 +30,19 @@ class PatentRecordSerializer(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)
|
||||
patent_name = serializers.CharField(source='patent.name', read_only=True, label="专利名称")
|
||||
patent_type = serializers.CharField(source='patent.type', read_only=True, label="专利类型")
|
||||
class Meta:
|
||||
model = PatentRecord
|
||||
fields = '__all__'
|
||||
read_only_fields = EXCLUDE_FIELDS
|
||||
|
||||
|
||||
class PaperRecordSerializer(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)
|
||||
paper_name = serializers.CharField(source='paper.paper_name', read_only=True, label="论文名称")
|
||||
class Meta:
|
||||
model = PaperRecord
|
||||
fields = '__all__'
|
||||
read_only_fields = EXCLUDE_FIELDS
|
||||
|
||||
# class PlatformSerializer(serializers.ModelSerializer):
|
||||
# class Meta:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
from django.urls import path, include
|
||||
from rest_framework.routers import DefaultRouter
|
||||
from apps.srm.views import PatentInfoViewSet, PapersecretViewSet, PatentRecordViewSet
|
||||
from apps.srm.views import PatentInfoViewSet, PapersecretViewSet, PatentRecordViewSet, PaperRecordViewSet
|
||||
|
||||
|
||||
API_BASE_URL = 'api/srm/'
|
||||
|
|
@ -10,6 +10,7 @@ router = DefaultRouter()
|
|||
router.register('patentinfo', PatentInfoViewSet, basename='patentinfo')
|
||||
router.register('paperse', PapersecretViewSet, basename='PaperSe')
|
||||
router.register('patentrecord', PatentRecordViewSet, basename='patentrecord')
|
||||
router.register('paperrecord', PaperRecordViewSet, basename='patentrecord')
|
||||
|
||||
urlpatterns = [
|
||||
path(API_BASE_URL, include(router.urls)),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
from .serializers import PatentInfoSerializer, PaperSeSerializer, PatentRecordSerializer
|
||||
from .models import PatentInfo, Papersecret, PatentRecord, PaperRecord
|
||||
from .serializers import PatentInfoSerializer, PaperSeSerializer, PatentRecordSerializer, PaperRecordSerializer
|
||||
|
||||
from rest_framework.exceptions import ParseError
|
||||
from rest_framework.response import Response
|
||||
|
|
@ -60,4 +60,35 @@ class PatentRecordViewSet(CustomModelViewSet):
|
|||
if search:
|
||||
queryset = queryset.filter(name__icontains=search)
|
||||
patents = [{'id': patent.id, 'name': patent.name} for patent in queryset]
|
||||
return Response(patents)
|
||||
return Response(patents)
|
||||
|
||||
|
||||
class PaperRecordViewSet(CustomModelViewSet):
|
||||
"""list: 论文台账登记
|
||||
|
||||
论文台账登记
|
||||
"""
|
||||
queryset = PaperRecord.objects.all()
|
||||
serializer_class = PaperRecordSerializer
|
||||
select_related_fields = ["paper"]
|
||||
filterset_fields = ["paper_number", "paper","author"]
|
||||
ordering = ["-create_time", "paper_number"]
|
||||
search_fields = ["paper_number", "paper", "author"]
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super().get_queryset()
|
||||
paper_type = self.request.query_params.get('paper_type', None)
|
||||
if paper_type:
|
||||
qs = qs.filter(paper__paper_type=paper_type)
|
||||
return qs
|
||||
|
||||
|
||||
@action(detail=False, methods=['get'])
|
||||
def paper_name(self, request):
|
||||
"""获取论文列表"""
|
||||
search = request.query_params.get('search', '')
|
||||
queryset = Papersecret.objects.all()
|
||||
if search:
|
||||
queryset = queryset.filter(paper_name__icontains=search)
|
||||
papers = [{'id': paper.id, 'name': paper.name} for paper in queryset]
|
||||
return Response(papers)
|
||||
Loading…
Reference in New Issue