后端部分调整

This commit is contained in:
曹前明 2022-07-23 19:30:19 +08:00
parent ef092efc6e
commit dae9b5cfcc
9 changed files with 116 additions and 14 deletions

View File

@ -26,15 +26,16 @@ def backup_database():
def reload_server_git():
command = 'bash {}/git_server.sh'.format(SH_PATH)
completed = subprocess.run(command, shell=True, capture_output=True, text=True)
return completed
if completed.returncode != 0:
return completed.stderr
@shared_task
def reload_web_git():
command = 'bash {}/git_web.sh'.format(SH_PATH)
completed = subprocess.run(command, shell=True, capture_output=True, text=True)
return completed
if completed.returncode != 0:
return completed.stderr
@shared_task
def reload_server_only():

View File

@ -1,4 +1,5 @@
from __future__ import absolute_import, unicode_literals
from multiprocessing import Event
from threading import Thread
from celery import shared_task
@ -7,8 +8,10 @@ from apps.am.models import Area
from apps.third.clients import xxClient
from apps.third.models import TDevice
from apps.third.tapis import xxapis
from django.utils import timezone
@shared_task
def update_count_people(i: Area):
if i.third_info.get('xx_rail', None):
railId = i.third_info['xx_rail']['id']
@ -35,4 +38,15 @@ def cal_area_count():
计算区域内人员数量
"""
for i in Area.objects.filter(type=Area.AREA_TYPE_FIX):
Thread(target=update_count_people, args=(i,)).start()
Thread(target=update_count_people, args=(i,), daemon=True).start()
@shared_task
def check_event_timeout():
"""判断事件处理是否超期
"""
for i in Event.objects.filter(handle_user=None, is_timeout=False):
cate = i.cates.all().order_by('priority', 'create_time').first()
if cate.hanle_minute > 0 and (timezone.now()-i.create_time).seconds > cate.hanle_minute * 60:
i.is_timeout = True
i.save()

View File

@ -1,11 +1,15 @@
from apps.hrm.models import Certificate
from apps.opm.models import GasCheck, Operation, Opl, OplCate, OplCert, OplWorker
from apps.system.serializers import DictSerializer, DictSimpleSerializer, UserSimpleSerializer
from apps.system.models import Dictionary
from apps.system.serializers import DeptSimpleSerializer, DictSerializer, DictSimpleSerializer, UserSimpleSerializer
from apps.utils.serializers import CustomModelSerializer
from apps.utils.constants import EXCLUDE_FIELDS
from rest_framework import serializers
from django.db import transaction
from rest_framework.exceptions import ParseError
from apps.am.serializers import AreaSimpleSerializer
from apps.wf.serializers import TicketSerializer
from apps.system.serializers import FileSerializer
class OplCateCreateUpdateSerializer(CustomModelSerializer):
@ -20,6 +24,7 @@ class OplCateSerializer(CustomModelSerializer):
model = OplCate
fields = '__all__'
class OplCateSimpleSerializer(CustomModelSerializer):
class Meta:
model = OplCate
@ -48,6 +53,18 @@ class OperationSerializer(CustomModelSerializer):
fields = "__all__"
class OperationDetailSerializer(CustomModelSerializer):
area_ = AreaSimpleSerializer(source='area', read_only=True)
dept_ter_ = DeptSimpleSerializer(source='dept_ter', read_only=True)
dept_bus_ = DeptSimpleSerializer(source='dept_bus', read_only=True)
coordinator_ = UserSimpleSerializer(source='coordinator', read_only=True)
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
class Meta:
model = Operation
fields = "__all__"
class OplWorkerCreateSerializer(CustomModelSerializer):
certificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True, queryset=Certificate.objects.all())
@ -166,6 +183,47 @@ class OplSerializer(CustomModelSerializer):
fields = '__all__'
class OplListSerializer(CustomModelSerializer):
cate_name = serializers.CharField(source='cate.name', read_only=True)
cate_ = OplCateSimpleSerializer(source='cate', read_only=True)
dept_do_ = DeptSimpleSerializer(source='dept_do', read_only=True)
charger_ = UserSimpleSerializer(source='charger', read_only=True)
monitor_ = UserSimpleSerializer(source='monitor', read_only=True)
ticket_ = TicketSerializer(source='ticket', read_only=True)
class Meta:
model = Opl
fields = '__all__'
class OplDetailSerializer(CustomModelSerializer):
operation_ = OperationDetailSerializer(source='operation', read_only=True)
dept_do_ = DeptSimpleSerializer(source='dept_do', read_only=True)
charger_ = UserSimpleSerializer(source='charger', read_only=True)
monitor_ = UserSimpleSerializer(source='monitor', read_only=True)
ticket_ = TicketSerializer(source='ticket', read_only=True)
risks_checked_ = serializers.SerializerMethodField()
measures_checked_ = serializers.SerializerMethodField()
close_dos_ = serializers.SerializerMethodField()
create_imgs_ = FileSerializer(source='create_imgs', many=True)
close_imgs_ = FileSerializer(source='close_imgs', many=True)
class Meta:
model = Opl
fields = '__all__'
def get_risks_checked_(self, obj):
qs = Dictionary.objects.filter(id__in=obj.risks_checked).values('id', 'name')
return list(qs)
def get_measures_checked_(self, obj):
qs = Dictionary.objects.filter(id__in=obj.measures_checked).values('id', 'name')
return list(qs)
def get_close_dos_(self, obj):
qs = Dictionary.objects.filter(id__in=obj.close_dos).values('id', 'name')
return list(qs)
class OplCloseSerializer(CustomModelSerializer):
class Meta:

View File

@ -1,7 +1,7 @@
from django.shortcuts import render
from rest_framework.response import Response
from apps.opm.models import GasCheck, Operation, Opl, OplCate, OplWorker
from apps.opm.serializers import GasCheckCreateUpdateSerializer, GasCheckSerializer, OperationCreateUpdateSerializer, OperationSerializer, OplCateCreateUpdateSerializer, OplCateDetailSerializer, OplCateSerializer, OplCreateUpdateSerializer, OplSerializer, OplWorkerCreateSerializer, OplWorkerSerializer, OplWorkerUpdateSerializer
from apps.opm.serializers import GasCheckCreateUpdateSerializer, GasCheckSerializer, OperationCreateUpdateSerializer, OperationDetailSerializer, OperationSerializer, OplCateCreateUpdateSerializer, OplCateDetailSerializer, OplCateSerializer, OplCreateUpdateSerializer, OplDetailSerializer, OplListSerializer, OplSerializer, OplWorkerCreateSerializer, OplWorkerSerializer, OplWorkerUpdateSerializer
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from rest_framework.exceptions import ParseError
from rest_framework.mixins import CreateModelMixin, ListModelMixin, DestroyModelMixin
@ -9,6 +9,8 @@ from rest_framework.decorators import action
from rest_framework import serializers
from django.db import transaction
from apps.wf.models import State, Ticket
# Create your views here.
class OplCateViewSet(CustomModelViewSet):
queryset = OplCate.objects.all()
@ -23,8 +25,10 @@ class OperationViewSet(CustomModelViewSet):
queryset = Operation.objects.all()
create_serializer_class = OperationCreateUpdateSerializer
update_serializer_class = OperationCreateUpdateSerializer
serializer_class = OperationSerializer
filterset_fields = ['state', 'opl_operation__cate']
serializer_class = OperationDetailSerializer
retrieve_serializer_class = OperationDetailSerializer
select_related_fields = ['area', 'dept_bus', 'dept_ter', 'coordinator']
filterset_fields = ['state', 'opl_operation__cate', 'area']
def update(self, request, *args, **kwargs):
obj = self.get_object()
@ -44,19 +48,20 @@ class OplViewSet(CustomModelViewSet):
queryset = Opl.objects.all()
create_serializer_class = OplCreateUpdateSerializer
update_serializer_class = OplCreateUpdateSerializer
serializer_class = OplSerializer
select_related_fields = ['cate']
serializer_class = OplListSerializer
retrieve_serializer_class = OplDetailSerializer
select_related_fields = ['cate', 'operation', 'dept_do', 'charger', 'monitor', 'ticket']
filterset_fields = ['operation', 'cate']
def destroy(self, request, *args, **kwargs):
obj = self.get_object()
if obj.ticket:
if obj.ticket and obj.ticket.act_state != Ticket.TICKET_ACT_STATE_DRAFT:
raise ParseError('许可证已处理不可删除')
return super().destroy(request, *args, **kwargs)
def update(self, request, *args, **kwargs):
obj = self.get_object()
if obj.ticket:
if obj.ticket and obj.ticket.act_state != Ticket.TICKET_ACT_STATE_DRAFT:
raise ParseError('许可证已处理不可编辑')
return super().update(request, *args, **kwargs)

View File

@ -12,6 +12,7 @@ from rest_framework.exceptions import ParseError
from django.db import transaction
from apps.third.clients import dhClient
from apps.third.tapis import dhapis
from apps.wf.serializers import TicketSimpleSerializer
class RpartyCreateUpdateSerializer(CustomModelSerializer):
@ -78,6 +79,8 @@ class RpjCreateUpdateSerializer(CustomModelSerializer):
class RpjListSerializer(CustomModelSerializer):
rparty_name = serializers.CharField(source='rparty.name', read_only=True)
belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True)
create_by_name = serializers.CharField(source='create_by.name', read_only=True)
ticket_ = TicketSimpleSerializer(source='ticket', read_only=True)
class Meta:
model = Rpj

View File

@ -110,7 +110,7 @@ class RpjViewSet(CustomModelViewSet):
create_serializer_class = RpjCreateUpdateSerializer
update_serializer_class = RpjCreateUpdateSerializer
serializer_class = RpjListSerializer
select_related_fields = ['rparty', 'belong_dept']
select_related_fields = ['rparty', 'belong_dept', 'ticket', 'ticket__state']
filterset_fields = ['rparty', 'belong_dept', 'state']
def get_queryset(self):

View File

@ -0,0 +1,18 @@
# Generated by Django 3.2.12 on 2022-07-22 08:51
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('wf', '0005_alter_state_filter_dept'),
]
operations = [
migrations.AddField(
model_name='state',
name='key',
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='状态标识'),
),
]

View File

@ -86,6 +86,7 @@ class State(CommonAModel):
(3, '和上步处理人同属一及上级部门'),
)
name = models.CharField('名称', max_length=50)
key = models.CharField('状态标识', max_length=20, null=True, blank=True)
workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE, verbose_name='所属工作流')
is_hidden = models.BooleanField('是否隐藏', default=False, help_text='设置为True时,获取工单步骤api中不显示此状态(当前处于此状态时除外)')
sort = models.IntegerField('状态顺序', default=0, help_text='用于工单步骤接口时step上状态的顺序(因为存在网状情况,所以需要人为设定顺序),值越小越靠前')

View File

@ -27,7 +27,7 @@ class WorkflowSimpleSerializer(CustomModelSerializer):
class StateSimpleSerializer(CustomModelSerializer):
class Meta:
model = State
fields = ['id', 'name', 'type', 'distribute_type', 'enable_retreat', 'enable_deliver']
fields = ['id', 'name', 'type', 'distribute_type', 'enable_retreat', 'enable_deliver', 'key']
class TransitionSerializer(CustomModelSerializer):
@ -76,6 +76,8 @@ class CustomFieldCreateUpdateSerializer(CustomModelSerializer):
class TicketSimpleSerializer(CustomModelSerializer):
state_ = StateSimpleSerializer(source='state', read_only=True)
class Meta:
model = Ticket
fields = '__all__'