From fd1d2ccfc7e3cbf07b26079b6e347daed7ba8e29 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 18:38:48 +0800 Subject: [PATCH] =?UTF-8?q?opl=20mtask=20=E5=A4=96=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/develop/views.py | 1 + .../opm/migrations/0005_auto_20220912_1838.py | 24 +++++++++++++++++++ apps/opm/models.py | 2 +- apps/opm/serializers.py | 6 ++++- apps/opm/services.py | 7 +++--- 5 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 apps/opm/migrations/0005_auto_20220912_1838.py diff --git a/apps/develop/views.py b/apps/develop/views.py index 48bda1fc..b083aa52 100755 --- a/apps/develop/views.py +++ b/apps/develop/views.py @@ -241,6 +241,7 @@ class TestViewSet(CustomGenericViewSet): # 关闭作业视频监控任务 for i in test_snap_list: celery_control.revoke(i, terminate=True) + cache.set('test_snap_task', []) return Response() @action(methods=['post'], detail=False, serializer_class=Serializer) diff --git a/apps/opm/migrations/0005_auto_20220912_1838.py b/apps/opm/migrations/0005_auto_20220912_1838.py new file mode 100644 index 00000000..bb2bcaa2 --- /dev/null +++ b/apps/opm/migrations/0005_auto_20220912_1838.py @@ -0,0 +1,24 @@ +# Generated by Django 3.2.12 on 2022-09-12 10:38 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('django_celery_results', '0011_taskresult_periodic_task_name'), + ('opm', '0004_alter_oplworker_worker'), + ] + + operations = [ + migrations.RemoveField( + model_name='opl', + name='mtask_id', + ), + migrations.AddField( + model_name='opl', + name='mtask', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='django_celery_results.taskresult'), + ), + ] diff --git a/apps/opm/models.py b/apps/opm/models.py index 7f86bf61..c94218bc 100644 --- a/apps/opm/models.py +++ b/apps/opm/models.py @@ -117,7 +117,7 @@ class Opl(CommonBDModel): ticket = models.OneToOneField('wf.ticket', verbose_name='关联工单', on_delete=models.SET_NULL, null=True, blank=True) - mtask_id = models.CharField('视频监控任务ID', max_length=200, null=True, blank=True) + mtask = models.ForeignKey('django_celery_results.taskresult', on_delete=models.SET_NULL, null=True, blank=True) class OplWorker(BaseModel): diff --git a/apps/opm/serializers.py b/apps/opm/serializers.py index 70fa5de8..4fe0f2ef 100644 --- a/apps/opm/serializers.py +++ b/apps/opm/serializers.py @@ -11,6 +11,7 @@ from rest_framework.exceptions import ParseError from apps.am.serializers import AreaSimpleSerializer from apps.wf.serializers import TicketSerializer from apps.system.serializers import FileSerializer +from django_celery_results.models import TaskResult class OplCateCreateUpdateSerializer(CustomModelSerializer): @@ -129,7 +130,8 @@ class OplCertSerializer(CustomModelSerializer): class Meta: model = OplCert - fields = ['certificate', 'name', 'type', 'number', 'issue_date', 'expiration_date', 'review_date', 'file', 'file_f'] + fields = ['certificate', 'name', 'type', 'number', 'issue_date', + 'expiration_date', 'review_date', 'file', 'file_f'] class OplWorkerSerializer(CustomModelSerializer): @@ -201,6 +203,7 @@ class OplListSerializer(CustomModelSerializer): charger_ = UserSimpleSerializer(source='charger', read_only=True) monitor_ = UserSimpleSerializer(source='monitor', read_only=True) ticket_ = TicketSerializer(source='ticket', read_only=True) + mtask_status = serializers.CharField(source='mtask.status', read_only=True) class Meta: model = Opl @@ -221,6 +224,7 @@ class OplDetailSerializer(CustomModelSerializer): close_dos_ = serializers.SerializerMethodField() create_imgs_ = FileSerializer(source='create_imgs', many=True) close_imgs_ = FileSerializer(source='close_imgs', many=True) + mtask_status = serializers.CharField(source='mtask.status', read_only=True) class Meta: model = Opl diff --git a/apps/opm/services.py b/apps/opm/services.py index b19a48e1..f0722460 100644 --- a/apps/opm/services.py +++ b/apps/opm/services.py @@ -5,6 +5,7 @@ from apps.opm.models import Operation, Opl, OplWorker from apps.third.models import TDevice from apps.utils.sms import send_sms from apps.wf.models import Ticket, Transition +from django_celery_results.models import TaskResult def get_op_charger(state, ticket, new_ticket_data, handler): @@ -97,7 +98,7 @@ def opl_start(ticket: Ticket): area=op.area).values_list('code', flat=True)) opl_id = opl.id task = opl_task.delay(vc_codes, opl_id) - opl.mtask_id = task.task_id + opl.mtask = TaskResult.objects.get(task_id=task.task_id) opl.save() @@ -106,12 +107,12 @@ def opl_end(ticket: Ticket): 作业许可证关闭时执行 """ opl = ticket.opl - if opl.mtask_id: + 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) + celery_control.revoke(opl.mtask.id, terminate=True) operation = opl.operation opls = Opl.objects.filter(operation=operation) opls.filter(ticket=None).delete() # 删除无用许可证