diff --git a/server/apps/certset/admin.py b/server/apps/certset/admin.py index 8c38f3f..5fdb7c4 100644 --- a/server/apps/certset/admin.py +++ b/server/apps/certset/admin.py @@ -1,3 +1,4 @@ from django.contrib import admin - +from .models import Standard # Register your models here. +admin.site.register(Standard) \ No newline at end of file diff --git a/server/apps/certset/migrations/0001_initial.py b/server/apps/certset/migrations/0001_initial.py new file mode 100644 index 0000000..fe52b4d --- /dev/null +++ b/server/apps/certset/migrations/0001_initial.py @@ -0,0 +1,53 @@ +# Generated by Django 3.0.7 on 2020-06-15 03:37 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Standard', + fields=[ + ('id', models.AutoField(auto_created=True, 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='删除标记')), + ('name', models.CharField(max_length=1000, verbose_name='标准名称')), + ('code', models.CharField(blank=True, max_length=30, null=True, verbose_name='编号')), + ('publish_date', models.DateField(verbose_name='发布日期')), + ('implement_date', models.DateField(verbose_name='实施日期')), + ('status', models.CharField(choices=[('现行', '现行'), ('即将实施', '即将实施'), ('作废', '作废'), ('废止', '废止')], default='状态', max_length=50, verbose_name='状态')), + ('path', models.CharField(blank=True, max_length=1000, null=True, verbose_name='文件地址')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='standard_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='standard_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'verbose_name': '标准库', + 'verbose_name_plural': '标准库', + }, + ), + migrations.CreateModel( + name='ImplementRule', + fields=[ + ('id', models.AutoField(auto_created=True, 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='删除标记')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='implementrule_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='implementrule_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/server/apps/certset/migrations/0002_auto_20200615_1707.py b/server/apps/certset/migrations/0002_auto_20200615_1707.py new file mode 100644 index 0000000..6b658cf --- /dev/null +++ b/server/apps/certset/migrations/0002_auto_20200615_1707.py @@ -0,0 +1,85 @@ +# Generated by Django 3.0.7 on 2020-06-15 09:07 + +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), + ('system', '0019_auto_20200612_1448'), + ('certset', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='implementrule', + options={'verbose_name': '实施规则', 'verbose_name_plural': '实施规则'}, + ), + migrations.AddField( + model_name='implementrule', + name='cert_pattern', + field=models.ManyToManyField(blank=True, related_name='implementrule_cert_pattern', to='system.Dict', verbose_name='认证模式'), + ), + migrations.AddField( + model_name='implementrule', + name='cnas_scope', + field=models.ManyToManyField(blank=True, related_name='implementrule_cnas_scope', to='system.Dict', verbose_name='CNAS业务范围'), + ), + migrations.AddField( + model_name='implementrule', + name='code', + field=models.CharField(default='ok', max_length=30, unique=True, verbose_name='编号'), + preserve_default=False, + ), + migrations.AddField( + model_name='implementrule', + name='economy_class', + field=models.ManyToManyField(blank=True, related_name='implementrule_economy_class', to='system.Dict', verbose_name='国民经济分类'), + ), + migrations.AddField( + model_name='implementrule', + name='name', + field=models.CharField(default='ok', max_length=1000, verbose_name='规则名称'), + preserve_default=False, + ), + migrations.AddField( + model_name='implementrule', + name='pv_class', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='implementrule_pv_class', to='system.Dict', verbose_name='自愿性产品认证产品'), + ), + migrations.AddField( + model_name='implementrule', + name='pv_scope', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='implementrule_pv_scope', to='system.Dict', verbose_name='认证领域'), + ), + migrations.AddField( + model_name='implementrule', + name='standards', + field=models.ManyToManyField(blank=True, related_name='implementrule_standards', to='certset.Standard', verbose_name='依据标准'), + ), + migrations.CreateModel( + name='Unit', + fields=[ + ('id', models.AutoField(auto_created=True, 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='删除标记')), + ('name', models.CharField(max_length=1000, verbose_name='单元名称')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='unit_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='unit_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'verbose_name': '产品单元', + 'verbose_name_plural': '产品单元', + }, + ), + migrations.AddField( + model_name='implementrule', + name='units', + field=models.ManyToManyField(blank=True, related_name='implementrule_units', to='certset.Unit', verbose_name='单元划分'), + ), + ] diff --git a/server/apps/certset/models.py b/server/apps/certset/models.py index 6f30498..43999dd 100644 --- a/server/apps/certset/models.py +++ b/server/apps/certset/models.py @@ -1,5 +1,5 @@ from django.db import models -from apps.system.models import CommonAModel +from apps.system.models import CommonAModel, Dict # Create your models here. class Standard(CommonAModel): @@ -15,7 +15,44 @@ class Standard(CommonAModel): implement_date = models.DateField('实施日期') status = models.CharField('状态', max_length=50, choices=status_choices, default='状态') + path = models.CharField('文件地址', max_length=1000, null=True, blank=True) + + class Meta: + verbose_name = '标准库' + verbose_name_plural = verbose_name + + def __str__(self): + return self.name + +class Unit(CommonAModel): + name = models.CharField('单元名称', max_length=1000) + + class Meta: + verbose_name = '产品单元' + verbose_name_plural = verbose_name + + def __str__(self): + return self.name - pass class ImplementRule(CommonAModel): - pass \ No newline at end of file + + name = models.CharField('规则名称', max_length=1000) + code = models.CharField('编号', max_length=30, unique=True) + units = models.ManyToManyField(Unit, blank=True, verbose_name='单元划分', related_name='implementrule_units') + standards = models.ManyToManyField(Standard, blank=True, verbose_name='依据标准', related_name='implementrule_standards') + pv_scope = models.ForeignKey(Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='认证领域', related_name= 'implementrule_pv_scope') + pv_class = models.ForeignKey(Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='自愿性产品认证产品', related_name= 'implementrule_pv_class') + cnas_scope = models.ManyToManyField(Dict, blank=True, verbose_name='CNAS业务范围', related_name= 'implementrule_cnas_scope') + economy_class = models.ManyToManyField(Dict, blank=True, verbose_name='国民经济分类', related_name= 'implementrule_economy_class') + cert_pattern = models.ManyToManyField(Dict, blank=True, verbose_name='认证模式', related_name= 'implementrule_cert_pattern') + + class Meta: + verbose_name = '实施规则' + verbose_name_plural = verbose_name + + def __str__(self): + return self.name + + + + diff --git a/server/apps/certset/serializers.py b/server/apps/certset/serializers.py new file mode 100644 index 0000000..f2c14e3 --- /dev/null +++ b/server/apps/certset/serializers.py @@ -0,0 +1,19 @@ +from rest_framework import serializers + +from .models import Standard, Unit, ImplementRule + + +class StandardSerializer(serializers.ModelSerializer): + class Meta: + model = Standard + fields = '__all__' + +class ImplementRuleSerializer(serializers.ModelSerializer): + class Meta: + model = ImplementRule + fields = '__all__' + +class UnitSerializer(serializers.ModelSerializer): + class Meta: + model = Unit + fields = '__all__' \ No newline at end of file diff --git a/server/apps/certset/urls.py b/server/apps/certset/urls.py new file mode 100644 index 0000000..63054e0 --- /dev/null +++ b/server/apps/certset/urls.py @@ -0,0 +1,12 @@ +from django.urls import path, include +from .views import StandardViewSet, UnitdViewSet, ImplementRuleViewSet +from rest_framework import routers + +router = routers.DefaultRouter() +router.register('standard', StandardViewSet, basename="standard") +router.register('unit', UnitdViewSet, basename="unit") +router.register('implementrule', ImplementRuleViewSet, basename="implementrule") + +urlpatterns = [ + path('', include(router.urls)) +] \ No newline at end of file diff --git a/server/apps/certset/views.py b/server/apps/certset/views.py index 91ea44a..103ced0 100644 --- a/server/apps/certset/views.py +++ b/server/apps/certset/views.py @@ -1,3 +1,32 @@ from django.shortcuts import render - +from rest_framework.viewsets import ModelViewSet +from .models import Standard, Unit, ImplementRule +from .serializers import StandardSerializer, ImplementRuleSerializer, UnitSerializer # Create your views here. + +class StandardViewSet(ModelViewSet): + perms_map = {'get': '*', 'post': 'standard_create', + 'put': 'standard_update', 'delete': 'standard_delete'} + queryset = Standard.objects + serializer_class = StandardSerializer + search_fields = ['name', 'code', 'status', 'implement_date'] + filterset_fields = ['status'] + ordering = ['-create_time'] + +class ImplementRuleViewSet(ModelViewSet): + perms_map = {'get': '*', 'post': 'implementrule_create', + 'put': 'implementrule_update', 'delete': 'implementrule_delete'} + queryset = ImplementRule.objects + serializer_class = ImplementRuleSerializer + search_fields = ['name', 'code'] + filterset_fields = ['pv_scope'] + ordering = ['-create_time'] + +class UnitdViewSet(ModelViewSet): + perms_map = {'get': '*', 'post': 'unit_create', + 'put': 'unit_update', 'delete': 'unit_delete'} + queryset = Unit.objects + serializer_class = UnitSerializer + search_fields = ['name'] + filterset_fields = ['name'] + ordering = ['-create_time'] diff --git a/server/apps/system/views.py b/server/apps/system/views.py index 077b179..627a97e 100644 --- a/server/apps/system/views.py +++ b/server/apps/system/views.py @@ -48,7 +48,7 @@ class LogoutView(APIView): class TaskViewSet(ModelViewSet): queryset = PeriodicTask.objects serializer_class = TaskSerializer - search_fields = ['^name'] + search_fields = ['name'] filterset_fields = ['enabled'] ordering = ['-pk'] diff --git a/server/server/settings.py b/server/server/settings.py index bfecdc6..9a3dd6d 100644 --- a/server/server/settings.py +++ b/server/server/settings.py @@ -147,8 +147,7 @@ REST_FRAMEWORK = { 'rest_framework.filters.SearchFilter', 'rest_framework.filters.OrderingFilter' ], - 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', - 'PAGE_SIZE': 10, + 'DEFAULT_PAGINATION_CLASS': 'utils.pagination.MyPagination', 'DATETIME_FORMAT': '%Y-%m-%d %H:%M:%S', 'DATE_FORMAT': '%Y-%m-%d', 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema', diff --git a/server/server/urls.py b/server/server/urls.py index 45c2342..e40f99f 100644 --- a/server/server/urls.py +++ b/server/server/urls.py @@ -32,6 +32,7 @@ urlpatterns = [ path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), path('token/black/', LogoutView.as_view(), name='token_black'), path('system/', include('apps.system.urls')), + path('certset/', include('apps.certset.urls')), path('docs/', include_docs_urls(title="接口文档", authentication_classes=[], permission_classes=[])), path('', include(router.urls)), diff --git a/server/utils/pagination.py b/server/utils/pagination.py index 119e06e..72e6efa 100644 --- a/server/utils/pagination.py +++ b/server/utils/pagination.py @@ -3,4 +3,4 @@ from rest_framework.pagination import PageNumberPagination class MyPagination(PageNumberPagination): page_size = 10 - page_size_query_param = 'limit' \ No newline at end of file + page_size_query_param = 'page_size'