swagger修正

This commit is contained in:
曹前明 2022-06-20 15:18:25 +08:00
parent 2e7a9a2b7e
commit 3830a1b000
10 changed files with 290 additions and 19 deletions

View File

@ -1,3 +1,9 @@
from django.contrib import admin
from apps.ecm.models import Event
# Register your models here.
@admin.register(Event)
class EventAdmin(admin.ModelAdmin):
date_hierarchy = 'create_time'

View File

@ -0,0 +1,23 @@
# Generated by Django 3.2.12 on 2022-06-20 07:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('system', '0001_initial'),
('ecm', '0004_alter_notifysetting_event_cate'),
]
operations = [
migrations.RemoveField(
model_name='event',
name='imgs',
),
migrations.AddField(
model_name='event',
name='imgs',
field=models.ManyToManyField(blank=True, to='system.File', verbose_name='事件图片'),
),
]

View File

@ -2,7 +2,7 @@ from django.db import models
from apps.am.models import Area
from apps.hrm.models import Employee
from apps.utils.models import BaseModel, CommonAModel, CommonBModel
from apps.system.models import Dept, Post, User
from apps.system.models import Dept, File, Post, User
from apps.third.models import TDevice
from django.utils import timezone
# Create your models here.
@ -24,6 +24,9 @@ class EventCate(CommonAModel):
filter_area_level = models.PositiveSmallIntegerField('固定音响区域级别过滤', choices=Area.AREA_LEVEL_CHOICES,
default=Area.AREA_LEVEL_1)
def __str__(self):
return self.name
class NotifySetting(CommonAModel):
"""
@ -51,7 +54,7 @@ class Event(CommonBModel):
事件
"""
cate = models.ForeignKey(EventCate, verbose_name='事件种类', on_delete=models.CASCADE)
imgs = models.JSONField('事件图片', default=list, null=False, blank=True)
imgs = models.ManyToManyField(File, verbose_name='事件图片', blank=True)
area = models.ForeignKey(Area, verbose_name='发生区域', on_delete=models.CASCADE)
location = models.JSONField('事件点位坐标', default=dict, null=False, blank=True)
peope_type = models.CharField('当事人员类型', choices=Employee.PEOPLE_TYPE_CHOICES,
@ -77,7 +80,7 @@ class Remind(BaseModel):
on_delete=models.CASCADE, null=True, blank=True)
post = models.ForeignKey(Post, verbose_name='岗位',
on_delete=models.CASCADE, null=True, blank=True)
dept = models.ForeignKey(Dept, verbose_name='部门',
dept = models.ForeignKey(Dept, verbose_name='部门',
on_delete=models.CASCADE, null=True, blank=True)
msg = models.TextField('推送文本', null=True, blank=True)
is_read = models.BooleanField('站内信已读', default=False)

View File

@ -0,0 +1,204 @@
# Generated by Django 3.2.12 on 2022-06-20 01:42
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),
('hrm', '0002_auto_20220617_1124'),
('wf', '0001_initial'),
('system', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Rcertificate',
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='删除标记')),
('name', models.CharField(max_length=20, verbose_name='证书名称')),
('number', models.CharField(max_length=20, unique=True, verbose_name='证书编号')),
('type', models.PositiveSmallIntegerField(choices=[(10, '特种作业证书'), (20, '特种设备操作证书'), (30, '安全管理人员证书')], default=10, verbose_name='证书类型')),
('issue_date', models.DateField(verbose_name='发证日期')),
('expiration_date', models.DateField(verbose_name='有效期')),
('review_date', models.DateField(verbose_name='下一次复审日期')),
('file', models.CharField(blank=True, max_length=1000, null=True, verbose_name='文件地址')),
('certificate', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.certificate', verbose_name='关联认可证书')),
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rcertificate_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='Remployee',
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='删除标记')),
('name', models.CharField(max_length=20, verbose_name='姓名')),
('phone', models.CharField(max_length=11, verbose_name='手机号')),
('photo', models.CharField(max_length=1000, verbose_name='证件照')),
('id_number', models.CharField(max_length=100, verbose_name='身份证号')),
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='remployee_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
('employee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='成员信息')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='Rparty',
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='删除标记')),
('name', models.CharField(max_length=20, verbose_name='名称')),
('number', models.CharField(blank=True, max_length=50, null=True, verbose_name='信用代码')),
('lawer', models.CharField(blank=True, max_length=20, null=True, verbose_name='法人')),
('contacter', models.CharField(max_length=20, verbose_name='联系人')),
('phone', models.CharField(max_length=20, verbose_name='联系电话')),
('email', models.EmailField(blank=True, max_length=254, null=True, verbose_name='邮箱')),
('addresss', models.CharField(blank=True, max_length=200, null=True, verbose_name='企业地址')),
('description', models.TextField(blank=True, null=True, verbose_name='概述')),
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rparty_belong_dept', to='system.dept', verbose_name='所属部门')),
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rparty_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
('dept', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.dept', verbose_name='关联部门')),
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rparty_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='Rpj',
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='删除标记')),
('name', models.CharField(max_length=20, verbose_name='名称')),
('type', models.PositiveSmallIntegerField(default=10, verbose_name='项目类型')),
('contract_number', models.CharField(max_length=20, verbose_name='合同编号')),
('come_time', models.DateTimeField(verbose_name='进厂时间')),
('leave_time', models.DateTimeField(verbose_name='离厂时间')),
('state', models.PositiveSmallIntegerField(default=10, verbose_name='状态')),
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rpj_belong_dept', to='system.dept', verbose_name='所属部门')),
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rpj_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
('rparty', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rpm.rparty', verbose_name='关联相关方')),
('ticket', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.ticket', verbose_name='关联工单')),
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rpj_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='Rpjcertificate',
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='删除标记')),
('name', models.CharField(max_length=20, verbose_name='证书名称')),
('number', models.CharField(max_length=20, verbose_name='证书编号')),
('type', models.PositiveSmallIntegerField(choices=[(10, '特种作业证书'), (20, '特种设备操作证书'), (30, '安全管理人员证书')], default=10, verbose_name='证书类型')),
('issue_date', models.DateField(verbose_name='发证日期')),
('expiration_date', models.DateField(verbose_name='有效期')),
('review_date', models.DateField(verbose_name='下一次复审日期')),
('file', models.CharField(blank=True, max_length=1000, null=True, verbose_name='文件地址')),
('rcertificate', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='rpm.rcertificate', verbose_name='关联相关方证书')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='Rpjmember',
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='删除标记')),
('duty', models.CharField(blank=True, max_length=20, null=True, verbose_name='职责')),
('is_manager', models.BooleanField(default=False, verbose_name='是否项目负责人')),
('rcertificates', models.ManyToManyField(through='rpm.Rpjcertificate', to='rpm.Rcertificate')),
('remployee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='rpm.remployee', verbose_name='关联人员')),
('rpj', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rpm.rpj', verbose_name='关联项目')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='Rpjfile',
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='删除标记')),
('file_cate', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.dictionary', verbose_name='文件种类')),
('files', models.ManyToManyField(blank=True, to='system.File', verbose_name='文件')),
('rpj', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rpm.rpj', verbose_name='关联相关方项目')),
],
options={
'abstract': False,
},
),
migrations.AddField(
model_name='rpjcertificate',
name='rpj_member',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rpm.rpjmember', verbose_name='关联项目成员'),
),
migrations.CreateModel(
name='Rfile',
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='删除标记')),
('file_cate', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.dictionary', verbose_name='文件种类')),
('files', models.ManyToManyField(to='system.File', verbose_name='文件')),
('rparty', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rpm.rparty', verbose_name='关联相关方')),
],
options={
'abstract': False,
},
),
migrations.AddField(
model_name='remployee',
name='rparty',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rpm.rparty', verbose_name='所属相关方'),
),
migrations.AddField(
model_name='remployee',
name='rpj',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='rpm.rpj', verbose_name='最近所属相关方项目'),
),
migrations.AddField(
model_name='remployee',
name='update_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='remployee_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
),
migrations.AddField(
model_name='rcertificate',
name='remployee',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rpm.remployee', verbose_name='关联相关方成员'),
),
migrations.AddField(
model_name='rcertificate',
name='update_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rcertificate_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
),
]

View File

View File

@ -67,13 +67,13 @@ class Rpj(CommonBDModel):
on_delete=models.CASCADE, null=True, blank=True)
class RpjFile(BaseModel):
class Rpjfile(BaseModel):
"""
相关方项目文件库
"""
file_cate = models.ForeignKey(Dictionary, verbose_name='文件种类',
on_delete=models.CASCADE, null=True, blank=True)
files = models.ManyToManyField(File, verbose_name='文件')
files = models.ManyToManyField(File, verbose_name='文件', blank=True)
rpj = models.ForeignKey(Rpj, verbose_name='关联相关方项目', on_delete=models.CASCADE)

View File

@ -1,6 +1,6 @@
from apps.hrm.models import Certificate, Employee
from apps.hrm.serializers import phone_check
from apps.rpm.models import Rcertificate, Remployee, Rparty, Rpjcertificate, Rpjmember, Rpj
from apps.rpm.models import Rcertificate, Remployee, Rfile, Rparty, Rpjcertificate, Rpjfile, Rpjmember, Rpj
from apps.system.models import Dept
from apps.utils.constants import EXCLUDE_FIELDS
from apps.utils.serializers import CustomModelSerializer
@ -22,7 +22,7 @@ class RpartyCreateUpdateSerializer(CustomModelSerializer):
def create(self, validated_data):
instance = super().create(validated_data)
dept = Dept.objects.create(name=instance.name,
parent=instance.belong_dept)
parent=instance.belong_dept, type='rparty')
instance.dept = dept
instance.save()
return instance
@ -49,7 +49,7 @@ class RpartySimpleSerializer(CustomModelSerializer):
class RpartyAssignSerializer(serializers.Serializer):
username = serializers.CharField('用户名')
username = serializers.CharField(label='用户名')
class RfileListSerializer(CustomModelSerializer):
@ -57,6 +57,10 @@ class RfileListSerializer(CustomModelSerializer):
file_cate_ = DictSerializer(source='file_cate', read_only=True)
files_ = FileSerializer(source='files', many=True, read_only=True)
class Meta:
model = Rfile
fields = '__all__'
class RpjCreateUpdateSerializer(CustomModelSerializer):
class Meta:
@ -76,7 +80,7 @@ class RemployeeCreateSerializer(CustomModelSerializer):
class Meta:
model = Remployee
fields = ['name', 'phone', 'photo', 'id_number']
fields = ['name', 'phone', 'photo', 'id_number', 'rparty']
# model = Employee
# exclude = EXCLUDE_FIELDS + ['is_atwork', 'last_check_time',
# 'not_work_remark', 'third_info', 'type']
@ -118,11 +122,11 @@ class RpjmemberCreatesSerializer(CustomModelSerializer):
class RpjmemberCreateSerializer(CustomModelSerializer):
rcertificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True)
rcertificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True, queryset=Rcertificate.objects.all())
class Meta:
model = Rpjmember
fields = ['employee', 'rpj', 'duty', 'is_manager']
fields = ['remployee', 'rpj', 'duty', 'is_manager', 'rcertificates']
def create(self, validated_data):
rpj = validated_data['rpj']
@ -146,7 +150,7 @@ class RpjmemberCreateSerializer(CustomModelSerializer):
class RpjmemberUpdateSerializer(CustomModelSerializer):
rcertificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True)
rcertificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True, queryset=Rcertificate.objects.all())
class Meta:
model = Rpjmember
@ -173,3 +177,15 @@ class RpjmemberSerializer(CustomModelSerializer):
class Meta:
model = Rpjmember
fields = '__all__'
class RpjfileSerializer(CustomModelSerializer):
class Meta:
model = Rpjfile
fields = '__all__'
class RpjfileUpdateSerializer(CustomModelSerializer):
class Meta:
model = Rpjfile
fields = ['files']

View File

@ -1,5 +1,4 @@
from apps.rpm.models import RpjFile
from apps.rpm.views import RpartyViewSet, RemployeeViewSet, RfileViewSet, RpjViewSet, RpjmemberViewSet
from apps.rpm.views import RpartyViewSet, RemployeeViewSet, RfileViewSet, RpjViewSet, RpjfileViewSet, RpjmemberViewSet
from django.urls import path, include
from rest_framework.routers import DefaultRouter
@ -12,7 +11,7 @@ router.register('remployee', RemployeeViewSet, basename='remployee')
router.register('rfile', RfileViewSet, basename='rfile')
router.register('rpj', RpjViewSet, basename='rpj')
router.register('rpj_member', RpjmemberViewSet, basename='rpj_member')
router.register('rpj_file', RpjFile, basename='rpj_file')
router.register('rpj_file', RpjfileViewSet, basename='rpj_file')
urlpatterns = [
path(API_BASE_URL, include(router.urls)),
]
]

View File

@ -1,11 +1,11 @@
from django.shortcuts import render
from apps.hrm.models import Certificate, Employee
from apps.hrm.serializers import CertificateCreateUpdateSerializer, CertificateSerializer, EmployeeSerializer
from apps.rpm.models import Rcertificate, Remployee, Rparty, Rfile, Rpjmember, Rpj
from apps.rpm.serializers import RcertificateCreateUpdateSerializer, RcertificateSerializer, RemployeeCreateSerializer, RemployeeSerializer, RpartyAssignSerializer, RpartyCreateUpdateSerializer, RfileListSerializer, RpartySerializer, RpjListSerializer, RpjmemberCreateSerializer, RpjmemberCreatesSerializer, RpjCreateUpdateSerializer, RpjmemberSerializer, RpjmemberUpdateSerializer
from apps.rpm.models import Rcertificate, Remployee, Rparty, Rfile, Rpjfile, Rpjmember, Rpj
from apps.rpm.serializers import RcertificateCreateUpdateSerializer, RcertificateSerializer, RemployeeCreateSerializer, RemployeeSerializer, RpartyAssignSerializer, RpartyCreateUpdateSerializer, RfileListSerializer, RpartySerializer, RpjListSerializer, RpjfileSerializer, RpjfileUpdateSerializer, RpjmemberCreateSerializer, RpjmemberCreatesSerializer, RpjCreateUpdateSerializer, RpjmemberSerializer, RpjmemberUpdateSerializer
from apps.system.models import Post, User, UserPost
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from rest_framework.mixins import CreateModelMixin, ListModelMixin, RetrieveModelMixin
from rest_framework.mixins import CreateModelMixin, ListModelMixin, RetrieveModelMixin, DestroyModelMixin, UpdateModelMixin
from apps.utils.mixins import CustomDestoryModelMixin
from rest_framework.decorators import action
from rest_framework.response import Response
@ -161,3 +161,22 @@ class RpjmemberViewSet(CustomModelViewSet):
if obj.rpj.state == Rpj.RPJ_CREATE:
raise ParseError('项目非创建状态不可删除')
return super().destroy(request, *args, **kwargs)
class RpjfileViewSet(UpdateModelMixin, DestroyModelMixin, ListModelMixin, CustomGenericViewSet):
perms_map = {'get': '*', 'put': 'rpj:update', 'delete': 'rpj:update'}
queryset = Rpjfile.objects.all()
update_serializer_class = RpjfileUpdateSerializer
serializer_class = RpjfileSerializer
def update(self, request, *args, **kwargs):
obj = self.get_object()
if obj.rpj.state == Rpj.RPJ_CREATE:
raise ParseError('项目非创建状态不可修改')
return super().update(request, *args, **kwargs)
def destroy(self, request, *args, **kwargs):
obj = self.get_object()
if obj.rpj.state == Rpj.RPJ_CREATE:
raise ParseError('项目非创建状态不可删除')
return super().destroy(request, *args, **kwargs)

View File

@ -51,6 +51,7 @@ urlpatterns = [
path('', include('apps.hrm.urls')),
path('', include('apps.am.urls')),
path('', include('apps.ecm.urls')),
path('', include('apps.rpm.urls')),