后端部分调整
This commit is contained in:
parent
ef092efc6e
commit
dae9b5cfcc
|
@ -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():
|
||||||
|
|
|
@ -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()
|
|
@ -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:
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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='状态标识'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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上状态的顺序(因为存在网状情况,所以需要人为设定顺序),值越小越靠前')
|
||||||
|
|
|
@ -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__'
|
||||||
|
|
Loading…
Reference in New Issue