Merge branch 'develop' of https://e.coding.net/ctcdevteam/hberp/hberp into develop

This commit is contained in:
shilixia 2021-08-12 10:31:47 +08:00
commit 2fed5b2aec
14 changed files with 265 additions and 26 deletions

View File

@ -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': '设备信息',
},
),
]

View File

@ -9,32 +9,31 @@ from simple_history.models import HistoricalRecords
class Equipment(BaseModel): class Equipment(CommonBModel):
""" """
设备台账信息 设备台账信息
""" """
state_choices = ( state_choices = (
('启用', '启用'), (1, '运转正常'),
('停用', '停用'), (0, '停用'),
(2, '报废')
) )
node = models.IntegerField('序号', max_length=50, default=0)
name = models.CharField('设备名称', max_length=50) name = models.CharField('设备名称', max_length=50)
number = models.CharField('设备编号', max_length=50,null=True, blank=True, unique=True) number = models.CharField('设备编号', max_length=50, unique=True)
model = models.CharField('规格型号', max_length=10,null=True, blank=True) model = models.CharField('规格型号', max_length=10, null=True, blank=True)
factory = models.CharField('生产厂', max_length=50) factory = models.CharField('生产厂', max_length=50, null=True, blank=True)
country = models.CharField('国别', max_length=50) production_date = models.DateField('生产日期', null=True, blank=True)
productiondate = models.DateField('生产日期', max_length=50,null=True, blank=True, unique=True) buy_date = models.DateField('购置日期', null=True, blank=True)
buydate = models.DateField('购置日期', max_length=10,null=True, blank=True) state = models.CharField('设备状态', max_length=11, choices=state_choices, default=1)
gznumber = models.IntegerField('购置数量', max_length=10,null=True, blank=True,default=0) parameter = models.TextField('技术参数', null=True, blank=True)
state = models.CharField('设备状态', max_length=11,choices=state_choices, default='启用') place = models.CharField('存放位置', max_length=50, null=True, blank=True)
indicators = models.CharField('技术指标', max_length=50) keeper = models.ForeignKey(User, verbose_name='保管人', on_delete=models.CASCADE, null=True, blank=True)
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)
description = models.CharField('描述', max_length=200, blank=True, null=True) description = models.CharField('描述', max_length=200, blank=True, null=True)
class Meta: class Meta:
verbose_name = '供应商信息' verbose_name = '设备信息'
verbose_name_plural = verbose_name verbose_name_plural = verbose_name
def __str__(self): def __str__(self):
return self.name return self.name + '-' + self.name

View File

@ -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

12
hb_server/apps/em/urls.py Normal file
View File

@ -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)),
]

View File

@ -1,3 +1,21 @@
from django.shortcuts import render 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. # 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']

View File

@ -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': '供应商信息',
},
),
]

View File

@ -1,5 +1,4 @@
from django.db import models from django.db import models
from django.contrib.auth.models import AbstractUser
from django.db.models.base import Model from django.db.models.base import Model
import django.utils.timezone as timezone import django.utils.timezone as timezone
from django.db.models.query import QuerySet 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) name = models.CharField('供应商名称', max_length=50, unique=True)
gyname = models.CharField('供应品名称', max_length=50,null=True, blank=True, unique=True) contact = models.CharField('联系人', max_length=20)
model = models.CharField('规格型号', max_length=10,null=True, blank=True) contact_phone = models.CharField('联系电话', max_length=11, unique=True)
contact = models.CharField('联系人', max_length=20, blank=True, null=True) address = models.CharField('地址', max_length=200, null=True, blank=True)
contactphone = models.CharField('联系电话', max_length=11,unique=True, blank=True, null=True)
description = models.CharField('描述', max_length=200, blank=True, null=True) description = models.CharField('描述', max_length=200, blank=True, null=True)
class Meta: class Meta:
verbose_name = '供应商信息' verbose_name = '供应商信息'

View File

@ -0,0 +1,9 @@
from rest_framework.serializers import ModelSerializer
from .models import Vendor
class VendorSerializer(ModelSerializer):
class Meta:
model = Vendor
fields = '__all__'

View File

@ -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)),
]

View File

@ -1,3 +1,21 @@
from django.shortcuts import render 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. # 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']

View File

@ -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'),
),
]

View File

@ -110,7 +110,16 @@ class OrganizationSerializer(serializers.ModelSerializer):
model = Organization model = Organization
fields = '__all__' 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): class UserListSerializer(serializers.ModelSerializer):
""" """
用户列表序列化 用户列表序列化

View File

@ -46,7 +46,9 @@ INSTALLED_APPS = [
"django_filters", "django_filters",
'simple_history', 'simple_history',
'apps.system', 'apps.system',
'apps.monitor' 'apps.monitor',
'apps.pum',
'apps.em',
] ]
MIDDLEWARE = [ MIDDLEWARE = [

View File

@ -56,6 +56,8 @@ urlpatterns = [
path('api/file/', include(router.urls)), path('api/file/', include(router.urls)),
path('api/system/', include('apps.system.urls')), path('api/system/', include('apps.system.urls')),
path('api/monitor/', include('apps.monitor.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")) path('',TemplateView.as_view(template_name="index.html"))