opl mtask 外键

This commit is contained in:
曹前明 2022-09-12 18:38:48 +08:00
parent 07641c2d6d
commit fd1d2ccfc7
5 changed files with 35 additions and 5 deletions

View File

@ -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)

View File

@ -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'),
),
]

View File

@ -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):

View File

@ -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

View File

@ -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() # 删除无用许可证