From e94d2dcaca248ea19338ecec671ecc3f90b55a5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E5=89=8D=E6=98=8E?= <909355014@qq.com> Date: Mon, 12 Sep 2022 19:02:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E5=90=AF/=E5=85=B3=E9=97=AD=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/opm/services.py | 22 +++++++++++++++------- apps/opm/views.py | 27 ++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/apps/opm/services.py b/apps/opm/services.py index f0722460..591741a3 100644 --- a/apps/opm/services.py +++ b/apps/opm/services.py @@ -90,29 +90,37 @@ def opl_start(ticket: Ticket): check_not_in_place(opl) # 给摄像头加载循环拍照算法 + start_mtask(opl) + + +def start_mtask(opl: Opl): + op = opl.operation # 找到作业点的摄像头, 如果指定摄像头就用指定的摄像头 if op.vchannels: vc_codes = list(op.vchannels.all().values_list('code', flat=True)) - else: - vc_codes = list(TDevice.objects.filter(type=TDevice.DEVICE_VCHANNEL, - area=op.area).values_list('code', flat=True)) opl_id = opl.id task = opl_task.delay(vc_codes, opl_id) opl.mtask = TaskResult.objects.get(task_id=task.task_id) opl.save() +def close_mtask(task_id: str): + """关闭celery任务 + """ + from celery.app.control import Control + from server.celery import app + celery_control = Control(app=app) + celery_control.revoke(task_id, terminate=True) + + def opl_end(ticket: Ticket): """ 作业许可证关闭时执行 """ opl = ticket.opl if opl.mtask: - from celery.app.control import Control - from server.celery import app - celery_control = Control(app=app) # 关闭作业视频监控任务 - celery_control.revoke(opl.mtask.id, terminate=True) + close_mtask(opl.mtask.task_id) operation = opl.operation opls = Opl.objects.filter(operation=operation) opls.filter(ticket=None).delete() # 删除无用许可证 diff --git a/apps/opm/views.py b/apps/opm/views.py index 31837103..eadfb871 100644 --- a/apps/opm/views.py +++ b/apps/opm/views.py @@ -6,10 +6,12 @@ from apps.opm.serializers import (GasCheckCreateUpdateSerializer, GasCheckSerial OplCateCreateUpdateSerializer, OplCateDetailSerializer, OplCateSerializer, OplCreateUpdateSerializer, OplDetailSerializer, OplListSerializer, OplWorkerCreateSerializer, OplWorkerSerializer, OplWorkerUpdateSerializer) +from apps.opm.services import close_mtask, start_mtask from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from rest_framework.exceptions import ParseError from rest_framework.mixins import CreateModelMixin, ListModelMixin, DestroyModelMixin - +from rest_framework.decorators import action +from rest_framework.serializers import Serializer from apps.wf.models import Ticket # Create your views here. @@ -97,6 +99,29 @@ class OplWorkerViewSet(CustomModelViewSet): raise ParseError('许可证已处理不可编辑') return super().update(request, *args, **kwargs) + @action(methods=['post'], detail=True, perms_map={'post': '*'}, + serializer_class=Serializer, logging_methods=[]) + def start_mtask(self, request, pk=None): + """ + 开启作业监控 + """ + obj = self.get_object() + if obj.mtask: + # 先关闭 + close_mtask(obj.mtask.task_id) + start_mtask(obj) + return Response() + + @action(methods=['post'], detail=True, perms_map={'post': '*'}, + serializer_class=Serializer, logging_methods=[]) + def close_mtask(self, request, pk=None): + """ + 停止作业监控 + """ + obj = self.get_object() + if obj.mtask: + close_mtask(obj.mtask.task_id) + return Response() class GasCheckViewSet(CreateModelMixin, ListModelMixin, DestroyModelMixin, CustomGenericViewSet): perms_map = {'get': '*', 'post': 'opl.update', 'delete': 'opl.update'}