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="报奖情况")
|
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="奖金金额(元)")
|
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):
|
# class ProjectApproval(CommonBDModel):
|
||||||
# """TN: 立项审批表"""
|
# """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 apps.utils.serializers import CustomModelSerializer
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
|
@ -30,12 +30,19 @@ class PatentRecordSerializer(CustomModelSerializer):
|
||||||
create_by_name = serializers.CharField(source='create_by.name', read_only=True)
|
create_by_name = serializers.CharField(source='create_by.name', read_only=True)
|
||||||
belong_dept_name = serializers.CharField(source='belong_dept.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_name = serializers.CharField(source='patent.name', read_only=True, label="专利名称")
|
||||||
patent_type = serializers.CharField(source='patent.type', read_only=True, label="专利类型")
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PatentRecord
|
model = PatentRecord
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
read_only_fields = EXCLUDE_FIELDS
|
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 PlatformSerializer(serializers.ModelSerializer):
|
||||||
# class Meta:
|
# class Meta:
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
from rest_framework.routers import DefaultRouter
|
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/'
|
API_BASE_URL = 'api/srm/'
|
||||||
|
|
@ -10,6 +10,7 @@ router = DefaultRouter()
|
||||||
router.register('patentinfo', PatentInfoViewSet, basename='patentinfo')
|
router.register('patentinfo', PatentInfoViewSet, basename='patentinfo')
|
||||||
router.register('paperse', PapersecretViewSet, basename='PaperSe')
|
router.register('paperse', PapersecretViewSet, basename='PaperSe')
|
||||||
router.register('patentrecord', PatentRecordViewSet, basename='patentrecord')
|
router.register('patentrecord', PatentRecordViewSet, basename='patentrecord')
|
||||||
|
router.register('paperrecord', PaperRecordViewSet, basename='patentrecord')
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path(API_BASE_URL, include(router.urls)),
|
path(API_BASE_URL, include(router.urls)),
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@ from django.shortcuts import render
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet
|
from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet
|
||||||
from .models import PatentInfo, Papersecret, PatentRecord
|
from .models import PatentInfo, Papersecret, PatentRecord, PaperRecord
|
||||||
from .serializers import PatentInfoSerializer, PaperSeSerializer, PatentRecordSerializer
|
from .serializers import PatentInfoSerializer, PaperSeSerializer, PatentRecordSerializer, PaperRecordSerializer
|
||||||
|
|
||||||
from rest_framework.exceptions import ParseError
|
from rest_framework.exceptions import ParseError
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
@ -61,3 +61,34 @@ class PatentRecordViewSet(CustomModelViewSet):
|
||||||
queryset = queryset.filter(name__icontains=search)
|
queryset = queryset.filter(name__icontains=search)
|
||||||
patents = [{'id': patent.id, 'name': patent.name} for patent in queryset]
|
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