From 1042724b704eab89fce9fa915b3a5fe72aa86285 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, 3 Oct 2022 13:26:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E7=9F=AD=E4=BF=A1=E7=94=A8?= =?UTF-8?q?=E5=A4=9A=E7=BA=BF=E7=A8=8B=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/ecm/tasks.py | 3 +-- apps/opm/services.py | 2 -- apps/opm/views.py | 2 -- apps/system/tasks.py | 15 +++++++++++---- apps/wf/services.py | 22 ++++++++++++++++++++-- 5 files changed, 32 insertions(+), 12 deletions(-) diff --git a/apps/ecm/tasks.py b/apps/ecm/tasks.py index bf4a133a..6de15f9f 100644 --- a/apps/ecm/tasks.py +++ b/apps/ecm/tasks.py @@ -63,6 +63,7 @@ def cal_area_count(): """ for i in Area.objects.filter(type=Area.AREA_TYPE_FIX): Thread(target=update_count_people, args=(i,), daemon=True).start() + time.sleep(1) @shared_task @@ -90,5 +91,3 @@ def opl_task(vc_codes: list, opl_id: str): for i in vchannels: Thread(target=snap_and_analyse, args=(i, algo_codes, opl)).start() time.sleep(10) - opl.mtask = None - opl.save() diff --git a/apps/opm/services.py b/apps/opm/services.py index 270201a6..80890015 100644 --- a/apps/opm/services.py +++ b/apps/opm/services.py @@ -134,8 +134,6 @@ def opl_end(ticket: Ticket): if opl.mtask: # 关闭作业视频监控任务 close_mtask(opl.mtask.task_id) - opl.mtask = None - opl.save() 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 e138aeb3..b236a2f1 100644 --- a/apps/opm/views.py +++ b/apps/opm/views.py @@ -106,8 +106,6 @@ class OplViewSet(CustomModelViewSet): # 防止没变化,手动处理一下 mtask.status = 'REVOKED' mtask.save() - obj.mtask = None - obj.save() return Response() diff --git a/apps/system/tasks.py b/apps/system/tasks.py index 793cfe06..36dd8a02 100755 --- a/apps/system/tasks.py +++ b/apps/system/tasks.py @@ -1,11 +1,18 @@ # Create your tasks here from __future__ import absolute_import, unicode_literals -from random import random, randint +from datetime import timedelta from apps.utils.tasks import CustomTask from celery import shared_task -from django.core.mail import send_mail +from django_celery_results.models import TaskResult +from django.utils import timezone @shared_task(base=CustomTask) -def show(x=1): - return 40/int(x) +def cleanup_dcr(): + """清空三十日前的定时任务执行记录 + + 清空三十日前的定时任务执行记录 + """ + now = timezone.now() + days30_ago = now - timedelta(days=30) + TaskResult.objects.filter(periodic_task_name__isnull=False, date_done__lte=days30_ago).delete() diff --git a/apps/wf/services.py b/apps/wf/services.py index 1b226c6e..84128f29 100755 --- a/apps/wf/services.py +++ b/apps/wf/services.py @@ -1,4 +1,6 @@ import importlib +from threading import Thread +from apps.utils.sms import send_sms from apps.wf.serializers import TicketSimpleSerializer from apps.system.models import Dept, User from apps.wf.models import CustomField, State, Ticket, TicketFlow, Transition, Workflow @@ -411,9 +413,25 @@ class WfService(object): last_log.intervene_type == Transition.TRANSITION_INTERVENE_TYPE_DELIVER or ticket.in_add_node): # 如果状态变化或是转交加签的情况再发送通知 - from apps.wf.tasks import send_ticket_notice - send_ticket_notice.delay(ticket_id=ticket.id) + Thread(target=send_ticket_notice_t, args=(ticket,), daemon=True).start() # 如果目标状态是脚本则异步执行 if state.participant_type == State.PARTICIPANT_TYPE_ROBOT: run_task.delay(ticket_id=ticket.id) + + +def send_ticket_notice_t(ticket: Ticket): + """ + 发送通知 + """ + params = {'workflow': ticket.workflow.name, 'state': ticket.state.name} + if ticket.participant_type == 1: + # 发送短信通知 + pt = User.objects.filter(id=ticket.participant).first() + if pt and pt.phone: + send_sms(pt.phone, 1002, params) + elif ticket.participant_type == 2: + pts = User.objects.filter(id__in=ticket.participant) + for i in pts: + if i.phone: + send_sms(i.phone, 1002, params)