后端部分调整

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(): def reload_server_git():
command = 'bash {}/git_server.sh'.format(SH_PATH) command = 'bash {}/git_server.sh'.format(SH_PATH)
completed = subprocess.run(command, shell=True, capture_output=True, text=True) completed = subprocess.run(command, shell=True, capture_output=True, text=True)
return completed if completed.returncode != 0:
return completed.stderr
@shared_task @shared_task
def reload_web_git(): def reload_web_git():
command = 'bash {}/git_web.sh'.format(SH_PATH) command = 'bash {}/git_web.sh'.format(SH_PATH)
completed = subprocess.run(command, shell=True, capture_output=True, text=True) completed = subprocess.run(command, shell=True, capture_output=True, text=True)
return completed if completed.returncode != 0:
return completed.stderr
@shared_task @shared_task
def reload_server_only(): def reload_server_only():

View File

@ -1,4 +1,5 @@
from __future__ import absolute_import, unicode_literals from __future__ import absolute_import, unicode_literals
from multiprocessing import Event
from threading import Thread from threading import Thread
from celery import shared_task from celery import shared_task
@ -7,8 +8,10 @@ from apps.am.models import Area
from apps.third.clients import xxClient from apps.third.clients import xxClient
from apps.third.models import TDevice from apps.third.models import TDevice
from apps.third.tapis import xxapis from apps.third.tapis import xxapis
from django.utils import timezone
@shared_task
def update_count_people(i: Area): def update_count_people(i: Area):
if i.third_info.get('xx_rail', None): if i.third_info.get('xx_rail', None):
railId = i.third_info['xx_rail']['id'] 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): 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.hrm.models import Certificate
from apps.opm.models import GasCheck, Operation, Opl, OplCate, OplCert, OplWorker 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.serializers import CustomModelSerializer
from apps.utils.constants import EXCLUDE_FIELDS from apps.utils.constants import EXCLUDE_FIELDS
from rest_framework import serializers from rest_framework import serializers
from django.db import transaction from django.db import transaction
from rest_framework.exceptions import ParseError 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): class OplCateCreateUpdateSerializer(CustomModelSerializer):
@ -20,6 +24,7 @@ class OplCateSerializer(CustomModelSerializer):
model = OplCate model = OplCate
fields = '__all__' fields = '__all__'
class OplCateSimpleSerializer(CustomModelSerializer): class OplCateSimpleSerializer(CustomModelSerializer):
class Meta: class Meta:
model = OplCate model = OplCate
@ -48,6 +53,18 @@ class OperationSerializer(CustomModelSerializer):
fields = "__all__" 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): class OplWorkerCreateSerializer(CustomModelSerializer):
certificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True, queryset=Certificate.objects.all()) certificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True, queryset=Certificate.objects.all())
@ -166,6 +183,47 @@ class OplSerializer(CustomModelSerializer):
fields = '__all__' 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 OplCloseSerializer(CustomModelSerializer):
class Meta: class Meta:

View File

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

View File

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

View File

@ -110,7 +110,7 @@ class RpjViewSet(CustomModelViewSet):
create_serializer_class = RpjCreateUpdateSerializer create_serializer_class = RpjCreateUpdateSerializer
update_serializer_class = RpjCreateUpdateSerializer update_serializer_class = RpjCreateUpdateSerializer
serializer_class = RpjListSerializer serializer_class = RpjListSerializer
select_related_fields = ['rparty', 'belong_dept'] select_related_fields = ['rparty', 'belong_dept', 'ticket', 'ticket__state']
filterset_fields = ['rparty', 'belong_dept', 'state'] filterset_fields = ['rparty', 'belong_dept', 'state']
def get_queryset(self): 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, '和上步处理人同属一及上级部门'), (3, '和上步处理人同属一及上级部门'),
) )
name = models.CharField('名称', max_length=50) 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='所属工作流') workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE, verbose_name='所属工作流')
is_hidden = models.BooleanField('是否隐藏', default=False, help_text='设置为True时,获取工单步骤api中不显示此状态(当前处于此状态时除外)') is_hidden = models.BooleanField('是否隐藏', default=False, help_text='设置为True时,获取工单步骤api中不显示此状态(当前处于此状态时除外)')
sort = models.IntegerField('状态顺序', default=0, help_text='用于工单步骤接口时step上状态的顺序(因为存在网状情况,所以需要人为设定顺序),值越小越靠前') sort = models.IntegerField('状态顺序', default=0, help_text='用于工单步骤接口时step上状态的顺序(因为存在网状情况,所以需要人为设定顺序),值越小越靠前')

View File

@ -27,7 +27,7 @@ class WorkflowSimpleSerializer(CustomModelSerializer):
class StateSimpleSerializer(CustomModelSerializer): class StateSimpleSerializer(CustomModelSerializer):
class Meta: class Meta:
model = State 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): class TransitionSerializer(CustomModelSerializer):
@ -76,6 +76,8 @@ class CustomFieldCreateUpdateSerializer(CustomModelSerializer):
class TicketSimpleSerializer(CustomModelSerializer): class TicketSimpleSerializer(CustomModelSerializer):
state_ = StateSimpleSerializer(source='state', read_only=True)
class Meta: class Meta:
model = Ticket model = Ticket
fields = '__all__' fields = '__all__'