From 58a71b447eba4a25012f3b6a5ce92d42d6559cd2 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 12 Aug 2021 10:18:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AE=BE=E5=A4=87=E5=8F=B0?= =?UTF-8?q?=E8=B4=A6=E6=8E=A5=E5=8F=A3=E5=92=8C=E4=BE=9B=E5=BA=94=E5=95=86?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/em/migrations/0001_initial.py | 46 +++++++++++++++ hb_server/apps/em/models.py | 35 ++++++----- hb_server/apps/em/serializers.py | 18 ++++++ hb_server/apps/em/urls.py | 12 ++++ hb_server/apps/em/views.py | 18 ++++++ hb_server/apps/pum/migrations/0001_initial.py | 38 ++++++++++++ hb_server/apps/pum/models.py | 12 ++-- hb_server/apps/pum/serializers.py | 9 +++ hb_server/apps/pum/urls.py | 12 ++++ hb_server/apps/pum/views.py | 18 ++++++ .../migrations/0003_auto_20210812_0909.py | 58 +++++++++++++++++++ hb_server/apps/system/serializers.py | 9 +++ hb_server/server/settings.py | 4 +- hb_server/server/urls.py | 2 + 14 files changed, 265 insertions(+), 26 deletions(-) create mode 100644 hb_server/apps/em/migrations/0001_initial.py create mode 100644 hb_server/apps/em/serializers.py create mode 100644 hb_server/apps/em/urls.py create mode 100644 hb_server/apps/pum/migrations/0001_initial.py create mode 100644 hb_server/apps/pum/serializers.py create mode 100644 hb_server/apps/pum/urls.py create mode 100644 hb_server/apps/system/migrations/0003_auto_20210812_0909.py diff --git a/hb_server/apps/em/migrations/0001_initial.py b/hb_server/apps/em/migrations/0001_initial.py new file mode 100644 index 0000000..f289603 --- /dev/null +++ b/hb_server/apps/em/migrations/0001_initial.py @@ -0,0 +1,46 @@ +# Generated by Django 3.2.6 on 2021-08-12 02: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): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('system', '0003_auto_20210812_0909'), + ] + + operations = [ + migrations.CreateModel( + name='Equipment', + fields=[ + ('id', models.BigAutoField(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=50, verbose_name='设备名称')), + ('number', models.CharField(max_length=50, unique=True, verbose_name='设备编号')), + ('model', models.CharField(blank=True, max_length=10, null=True, verbose_name='规格型号')), + ('factory', models.CharField(blank=True, max_length=50, null=True, verbose_name='生产厂')), + ('production_date', models.DateField(blank=True, null=True, verbose_name='生产日期')), + ('buy_date', models.DateField(blank=True, null=True, verbose_name='购置日期')), + ('state', models.CharField(choices=[(1, '运转正常'), (0, '停用'), (2, '报废')], default=1, max_length=11, verbose_name='设备状态')), + ('parameter', models.TextField(blank=True, null=True, verbose_name='技术参数')), + ('place', models.CharField(blank=True, max_length=50, null=True, verbose_name='存放位置')), + ('description', models.CharField(blank=True, max_length=200, null=True, verbose_name='描述')), + ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='equipment_belong_dept', to='system.organization', verbose_name='所属部门')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='equipment_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('keeper', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, 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='equipment_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'verbose_name': '设备信息', + 'verbose_name_plural': '设备信息', + }, + ), + ] diff --git a/hb_server/apps/em/models.py b/hb_server/apps/em/models.py index 9f09376..30ece81 100644 --- a/hb_server/apps/em/models.py +++ b/hb_server/apps/em/models.py @@ -9,32 +9,31 @@ from simple_history.models import HistoricalRecords -class Equipment(BaseModel): +class Equipment(CommonBModel): """ 设备台账信息 """ state_choices = ( - ('启用', '启用'), - ('停用', '停用'), + (1, '运转正常'), + (0, '停用'), + (2, '报废') ) - node = models.IntegerField('序号', max_length=50, default=0) name = models.CharField('设备名称', max_length=50) - number = models.CharField('设备编号', max_length=50,null=True, blank=True, unique=True) - model = models.CharField('规格型号', max_length=10,null=True, blank=True) - factory = models.CharField('生产厂', max_length=50) - country = models.CharField('国别', max_length=50) - productiondate = models.DateField('生产日期', max_length=50,null=True, blank=True, unique=True) - buydate = models.DateField('购置日期', max_length=10,null=True, blank=True) - gznumber = models.IntegerField('购置数量', max_length=10,null=True, blank=True,default=0) - state = models.CharField('设备状态', max_length=11,choices=state_choices, default='启用') - indicators = models.CharField('技术指标', max_length=50) - address = models.CharField('存放位置', max_length=50,null=True, blank=True, unique=True) - contact = models.CharField('经管联系人', max_length=20, blank=True, null=True) - contactphone = models.CharField('联系电话', max_length=11,unique=True, blank=True, null=True) + number = models.CharField('设备编号', max_length=50, unique=True) + model = models.CharField('规格型号', max_length=10, null=True, blank=True) + factory = models.CharField('生产厂', max_length=50, null=True, blank=True) + production_date = models.DateField('生产日期', null=True, blank=True) + buy_date = models.DateField('购置日期', null=True, blank=True) + state = models.CharField('设备状态', max_length=11, choices=state_choices, default=1) + parameter = models.TextField('技术参数', null=True, blank=True) + place = models.CharField('存放位置', max_length=50, null=True, blank=True) + keeper = models.ForeignKey(User, verbose_name='保管人', on_delete=models.CASCADE, null=True, blank=True) description = models.CharField('描述', max_length=200, blank=True, null=True) + class Meta: - verbose_name = '供应商信息' + verbose_name = '设备信息' verbose_name_plural = verbose_name def __str__(self): - return self.name \ No newline at end of file + return self.name + '-' + self.name + \ No newline at end of file diff --git a/hb_server/apps/em/serializers.py b/hb_server/apps/em/serializers.py new file mode 100644 index 0000000..d78ebb8 --- /dev/null +++ b/hb_server/apps/em/serializers.py @@ -0,0 +1,18 @@ +from rest_framework.serializers import ModelSerializer + +from .models import Equipment +from apps.system.serializers import OrganizationSimpleSerializer, UserSimpleSerializer + + +class EquipmentSerializer(ModelSerializer): + belong_dept_ = OrganizationSimpleSerializer(source='belong_dept', read_only=True) + keeper_ = UserSimpleSerializer(source='keeper', read_only=True) + class Meta: + model = Equipment + fields = '__all__' + + @staticmethod + def setup_eager_loading(queryset): + """ Perform necessary eager loading of data. """ + queryset = queryset.select_related('belong_dept','keeper') + return queryset diff --git a/hb_server/apps/em/urls.py b/hb_server/apps/em/urls.py new file mode 100644 index 0000000..0df0ee8 --- /dev/null +++ b/hb_server/apps/em/urls.py @@ -0,0 +1,12 @@ +from django.db.models import base +from rest_framework import urlpatterns +from apps.em.views import EquipmentViewSet +from django.urls import path, include +from rest_framework.routers import DefaultRouter + +router = DefaultRouter() +router.register('equipment', EquipmentViewSet, basename='equipment') +urlpatterns = [ + path('', include(router.urls)), +] + diff --git a/hb_server/apps/em/views.py b/hb_server/apps/em/views.py index 91ea44a..ebf4943 100644 --- a/hb_server/apps/em/views.py +++ b/hb_server/apps/em/views.py @@ -1,3 +1,21 @@ from django.shortcuts import render +from rest_framework.viewsets import ModelViewSet + +from apps.em.models import Equipment +from apps.em.serializers import EquipmentSerializer +from apps.system.mixins import OptimizationMixin + # Create your views here. +class EquipmentViewSet(ModelViewSet): + """ + 设备台账-增删改查 + """ + perms_map = {'get': '*', 'post': 'equipment_create', + 'put': 'equipment_update', 'delete': 'equipment_delete'} + queryset = Equipment.objects.all() + serializer_class = EquipmentSerializer + search_fields = ['number', 'name', 'place'] + filterset_fields = ['belong_dept', 'keeper'] + ordering_fields = ['create_time'] + ordering = ['-create_time'] diff --git a/hb_server/apps/pum/migrations/0001_initial.py b/hb_server/apps/pum/migrations/0001_initial.py new file mode 100644 index 0000000..749586f --- /dev/null +++ b/hb_server/apps/pum/migrations/0001_initial.py @@ -0,0 +1,38 @@ +# Generated by Django 3.2.6 on 2021-08-12 01:09 + +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='Vendor', + fields=[ + ('id', models.BigAutoField(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=50, unique=True, verbose_name='供应商名称')), + ('contact', models.CharField(max_length=20, verbose_name='联系人')), + ('contact_phone', models.CharField(max_length=11, unique=True, verbose_name='联系电话')), + ('address', models.CharField(blank=True, max_length=200, null=True, verbose_name='地址')), + ('description', 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='vendor_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='vendor_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'verbose_name': '供应商信息', + 'verbose_name_plural': '供应商信息', + }, + ), + ] diff --git a/hb_server/apps/pum/models.py b/hb_server/apps/pum/models.py index 011bcd9..bf5d5a7 100644 --- a/hb_server/apps/pum/models.py +++ b/hb_server/apps/pum/models.py @@ -1,5 +1,4 @@ from django.db import models -from django.contrib.auth.models import AbstractUser from django.db.models.base import Model import django.utils.timezone as timezone from django.db.models.query import QuerySet @@ -9,16 +8,15 @@ from simple_history.models import HistoricalRecords -class Vendor(BaseModel): +class Vendor(CommonAModel): """ 供应商信息 """ - name = models.CharField('供应商名称', max_length=50) - gyname = models.CharField('供应品名称', max_length=50,null=True, blank=True, unique=True) - model = models.CharField('规格型号', max_length=10,null=True, blank=True) - contact = models.CharField('联系人', max_length=20, blank=True, null=True) - contactphone = models.CharField('联系电话', max_length=11,unique=True, blank=True, null=True) + name = models.CharField('供应商名称', max_length=50, unique=True) + contact = models.CharField('联系人', max_length=20) + contact_phone = models.CharField('联系电话', max_length=11, unique=True) + address = models.CharField('地址', max_length=200, null=True, blank=True) description = models.CharField('描述', max_length=200, blank=True, null=True) class Meta: verbose_name = '供应商信息' diff --git a/hb_server/apps/pum/serializers.py b/hb_server/apps/pum/serializers.py new file mode 100644 index 0000000..037f7ef --- /dev/null +++ b/hb_server/apps/pum/serializers.py @@ -0,0 +1,9 @@ +from rest_framework.serializers import ModelSerializer + +from .models import Vendor + + +class VendorSerializer(ModelSerializer): + class Meta: + model = Vendor + fields = '__all__' diff --git a/hb_server/apps/pum/urls.py b/hb_server/apps/pum/urls.py new file mode 100644 index 0000000..a81ad24 --- /dev/null +++ b/hb_server/apps/pum/urls.py @@ -0,0 +1,12 @@ +from django.db.models import base +from rest_framework import urlpatterns +from apps.pum.views import VendorViewSet +from django.urls import path, include +from rest_framework.routers import DefaultRouter + +router = DefaultRouter() +router.register('vendor', VendorViewSet, basename='vendor') +urlpatterns = [ + path('', include(router.urls)), +] + diff --git a/hb_server/apps/pum/views.py b/hb_server/apps/pum/views.py index 91ea44a..30f504b 100644 --- a/hb_server/apps/pum/views.py +++ b/hb_server/apps/pum/views.py @@ -1,3 +1,21 @@ from django.shortcuts import render +from rest_framework.viewsets import ModelViewSet + +from apps.pum.models import Vendor +from apps.pum.serializers import VendorSerializer +from apps.system.mixins import OptimizationMixin + # Create your views here. +class VendorViewSet(ModelViewSet): + """ + 供应商-增删改查 + """ + perms_map = {'get': '*', 'post': 'vendor_create', + 'put': 'vendor_update', 'delete': 'vendor_delete'} + queryset = Vendor.objects.all() + serializer_class = VendorSerializer + search_fields = ['name', 'contact'] + filterset_fields = [] + ordering_fields = ['create_time'] + ordering = ['-create_time'] diff --git a/hb_server/apps/system/migrations/0003_auto_20210812_0909.py b/hb_server/apps/system/migrations/0003_auto_20210812_0909.py new file mode 100644 index 0000000..dac2044 --- /dev/null +++ b/hb_server/apps/system/migrations/0003_auto_20210812_0909.py @@ -0,0 +1,58 @@ +# Generated by Django 3.2.6 on 2021-08-12 01:09 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0002_auto_20210718_0918'), + ] + + operations = [ + migrations.AlterField( + model_name='dict', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='dicttype', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='file', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='historicaldict', + name='id', + field=models.BigIntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID'), + ), + migrations.AlterField( + model_name='organization', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='permission', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='position', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='role', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='user', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + ] diff --git a/hb_server/apps/system/serializers.py b/hb_server/apps/system/serializers.py index 90f2d00..ef5d03b 100644 --- a/hb_server/apps/system/serializers.py +++ b/hb_server/apps/system/serializers.py @@ -110,7 +110,16 @@ class OrganizationSerializer(serializers.ModelSerializer): model = Organization fields = '__all__' +class OrganizationSimpleSerializer(serializers.ModelSerializer): + class Meta: + model = Organization + fields = ['id', 'name'] +class UserSimpleSerializer(serializers.ModelSerializer): + class Meta: + model = User + fields = ['id', 'username', 'name'] + class UserListSerializer(serializers.ModelSerializer): """ 用户列表序列化 diff --git a/hb_server/server/settings.py b/hb_server/server/settings.py index a7c7a02..d32bcf9 100644 --- a/hb_server/server/settings.py +++ b/hb_server/server/settings.py @@ -46,7 +46,9 @@ INSTALLED_APPS = [ "django_filters", 'simple_history', 'apps.system', - 'apps.monitor' + 'apps.monitor', + 'apps.pum', + 'apps.em', ] MIDDLEWARE = [ diff --git a/hb_server/server/urls.py b/hb_server/server/urls.py index 9580572..959076c 100644 --- a/hb_server/server/urls.py +++ b/hb_server/server/urls.py @@ -56,6 +56,8 @@ urlpatterns = [ path('api/file/', include(router.urls)), path('api/system/', include('apps.system.urls')), path('api/monitor/', include('apps.monitor.urls')), + path('api/pum/', include('apps.pum.urls')), + path('api/em/', include('apps.em.urls')), # 前端页面入口 path('',TemplateView.as_view(template_name="index.html"))