feat: 增加相关方黑名单

This commit is contained in:
caoqianming 2023-04-07 15:06:26 +08:00
parent 96c12108e0
commit 121d6ec15c
6 changed files with 88 additions and 6 deletions

View File

@ -0,0 +1,36 @@
# Generated by Django 3.2.12 on 2023-04-07 01:32
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', '0002_myschedule'),
('rpm', '0009_auto_20230323_1745'),
]
operations = [
migrations.CreateModel(
name='BlackList',
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=50, verbose_name='信用代码')),
('reason', models.TextField(verbose_name='原因')),
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='blacklist_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='blacklist_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='blacklist_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
],
options={
'abstract': False,
},
),
]

View File

@ -24,6 +24,14 @@ class Rparty(CommonBModel):
admin = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
class BlackList(CommonBDModel):
"""黑名单
"""
name = models.CharField('名称', max_length=20)
number = models.CharField('信用代码', max_length=50)
reason = models.TextField('原因')
class Rfile(CommonBDModel):
"""
相关方文件库

View File

@ -1,6 +1,6 @@
from apps.hrm.models import Employee
from apps.rpm.models import Rcertificate, Remployee, Rfile, Rparty, Rpjcertificate, Rpjfile, Rpjmember, Rpj
from apps.rpm.models import Rcertificate, Remployee, Rfile, Rparty, Rpjcertificate, Rpjfile, Rpjmember, Rpj, BlackList
from apps.system.models import Dept
from apps.system.services import sync_dahua_dept
from apps.utils.constants import EXCLUDE_FIELDS
@ -17,6 +17,7 @@ from apps.wf.serializers import TicketSimpleSerializer
from apps.rpm.services import rpj_member_come, rpj_certificate_in
from apps.rpm.models import RpjLog
from django.conf import settings
from django.db.models import Q
class RpartyCreateUpdateSerializer(CustomModelSerializer):
@ -30,6 +31,8 @@ class RpartyCreateUpdateSerializer(CustomModelSerializer):
@transaction.atomic
def create(self, validated_data):
if BlackList.objects.filter(Q(name=validated_data['name'])|Q(number=validated_data['number'])).exists():
raise ParseError('该相关方在黑名单中')
dept = Dept()
dept.name = validated_data['name']
dept.parent = validated_data['belong_dept']
@ -330,4 +333,25 @@ class RpjfileSerializer(CustomModelSerializer):
class RpjfileUpdateSerializer(CustomModelSerializer):
class Meta:
model = Rpjfile
fields = ['files']
fields = ['files']
class BlackListCreateSerializer(CustomModelSerializer):
class Meta:
model = BlackList
fields = ['name', 'number', 'reason']
class BlackListUpdateSerializer(CustomModelSerializer):
class Meta:
model = BlackList
fields = ['reason']
class BlackListSerializer(CustomModelSerializer):
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
update_by_ = UserSimpleSerializer(source='update_by', read_only=True)
class Meta:
model = BlackList
fields = '__all__'

View File

@ -1,4 +1,4 @@
from apps.rpm.views import (RcertificateViewSet, RpartyViewSet, RemployeeViewSet, RfileViewSet, RpjViewSet,
from apps.rpm.views import (RcertificateViewSet, RpartyViewSet, RemployeeViewSet, RfileViewSet, RpjViewSet, BlackListViewSet,
RpjfileViewSet, RpjmemberViewSet, RpjLogViewSet)
from django.urls import path, include
from rest_framework.routers import DefaultRouter
@ -15,6 +15,7 @@ router.register('rpj', RpjViewSet, basename='rpj')
router.register('rpj_member', RpjmemberViewSet, basename='rpj_member')
router.register('rpj_log', RpjLogViewSet, basename='rpj_log')
router.register('rpj_file', RpjfileViewSet, basename='rpj_file')
router.register('blacklist', BlackListViewSet, basename='blacklist')
urlpatterns = [
path(API_BASE_URL, include(router.urls)),
]

View File

@ -1,11 +1,12 @@
from apps.rpm.filters import RpjFilterSet
from apps.rpm.models import Rcertificate, Remployee, Rparty, Rfile, Rpjfile, Rpjmember, Rpj, RpjLog
from apps.rpm.models import Rcertificate, Remployee, Rparty, Rfile, Rpjfile, Rpjmember, Rpj, RpjLog, BlackList
from apps.rpm.serializers import (RcertificateCreateUpdateSerializer,
RcertificateSerializer, RemployeeCreateSerializer, RemployeeSerializer,
RemployeeUpdateSerializer, RpartyAssignSerializer, RpartyCreateUpdateSerializer,
RfileListSerializer, RpartySerializer, RpjListSerializer, RpjfileSerializer,
RpjfileUpdateSerializer, RpjmemberCreateSerializer, RpjLogSerializer,
RpjCreateSerializer, RpjUpdateSerializer, RpjmemberSerializer, RpjmemberUpdateSerializer)
RpjCreateSerializer, RpjUpdateSerializer, RpjmemberSerializer, RpjmemberUpdateSerializer,
BlackListCreateSerializer, BlackListUpdateSerializer, BlackListSerializer)
from apps.rpm.services import sync_to_rep, rpj_member_leave
from apps.system.models import Dictionary, Post, User, UserPost
from apps.system.serializers import UserCreateSerializer
@ -26,7 +27,7 @@ class RpartyViewSet(CustomModelViewSet):
create_serializer_class = RpartyCreateUpdateSerializer
update_serializer_class = RpartyCreateUpdateSerializer
serializer_class = RpartySerializer
select_related_fields = ['admin', 'belong_dept']
select_related_fields = ['admin', 'belong_dept', 'create_by']
search_fields = ['name']
data_filter = True
@ -192,6 +193,8 @@ class RpjViewSet(CustomModelViewSet):
vdata['rparty'] = self.request.user.belong_dept.rparty
if not vdata.get('rparty', None):
raise ParseError('请指定相关方')
if BlackList.objects.filter(Q(name=vdata['rparty'].name)|Q(number=vdata['rparty'].number)).exists():
raise ParseError('该相关方在黑名单中')
if not vdata.get('belong_dept', None):
vdata['belong_dept'] = vdata['rparty'].belong_dept
ins = serializer.save()
@ -283,3 +286,12 @@ class RpjfileViewSet(UpdateModelMixin, DestroyModelMixin, ListModelMixin, Custom
if obj.rpj.state != Rpj.RPJ_CREATE:
raise ParseError('项目非创建状态不可删除')
return super().destroy(request, *args, **kwargs)
class BlackListViewSet(CustomModelViewSet):
queryset = BlackList.objects.all()
create_serializer_class = BlackListCreateSerializer
update_serializer_class = BlackListUpdateSerializer
serializer_class = BlackListSerializer
select_related_fields = ['create_by', 'update_by']
search_fields = ['name', 'number']

View File

@ -27,6 +27,7 @@ class CustomModelSerializer(DynamicFieldsMixin, serializers.ModelSerializer):
if getattr(self.request, 'user', None):
if getattr(self.Meta.model, 'create_by', None):
validated_data['create_by'] = self.request.user
validated_data['update_by'] = self.request.user
if 'belong_dept' in validated_data:
pass
elif getattr(self.request.user, 'belong_dept', None):