From e7721fdf89e3da7c24047872d2234c8c53a444dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E5=89=8D=E6=98=8E?= <909355014@qq.com> Date: Sat, 2 Jul 2022 14:32:53 +0800 Subject: [PATCH] =?UTF-8?q?notify=20setting=20=E6=9F=A5=E8=AF=A2=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/ecm/demo.py | 20 +++++++++++++++++++- apps/ecm/service.py | 29 ++++++++++++++++++----------- apps/ecm/views.py | 1 + apps/hrm/serializers.py | 2 +- apps/utils/sms.py | 7 +++++-- 5 files changed, 44 insertions(+), 15 deletions(-) diff --git a/apps/ecm/demo.py b/apps/ecm/demo.py index d850bdba..7c54fac6 100644 --- a/apps/ecm/demo.py +++ b/apps/ecm/demo.py @@ -70,4 +70,22 @@ print(json.dumps(xx)) 'nodeCode': '1000038$1$0$0', 'deviceCode': '1000038', 'alarmCode': '37f2b363-71aa-49c4-b352-711f4e098f46', -'alarmPicture': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220622/1/dsf_453810dc-f202-11ec-bd2d-e4246c7d1635_60524172_60587111.jpg', 'nodeType': 2, 'alarmDate': '1656727743', 'alarmGrade': 2, 'isSave': True, 'extend': {'faceImageUrl': ['6ad010cf-ce45-11ec-9715-e4246c7d1635/20220622/1/dsf_453810dc-f202-11ec-bd2d-e4246c7d1635_60524172_60587111.jpg'], 'glass': 0, 'beard': 0, 'candidateInfo': [], 'sex': 0, 'occurrenceCount': 0, 'deviceCode': '1000038', 'globalScenePicUrl': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220622/1/dsf_453810dc-f202-11ec-bd2d-e4246c7d1635_60425203_60524172.jpg', 'eye': 0, 'alarmType': 1001000, 'perFlag': -1, 'mouth': 0, 'feature': [], 'isHit': True, 'channelSeq': 0, 'szSerialUUID': '', 'channelName': '测试摄像头1', 'beginTime': 1656727739, 'endTime': 1656727739, 'age': -1, 'mask': 0}, 'unitType': 1, 'alarmType': 1001000, 'channelSeq': 0, 'orgCode': '001', 'channelName': '测试摄像头1', 'alarmStat': 1, 'isEvent': True}, 'subsystem': 'evo-face', 'userIds': None, 'sid': None, 'domainId': None, 'infoArray': None, 'protocol': None} \ No newline at end of file +'alarmPicture': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220622/1/dsf_453810dc-f202-11ec-bd2d-e4246c7d1635_60524172_60587111.jpg', 'nodeType': 2, 'alarmDate': '1656727743', 'alarmGrade': 2, 'isSave': True, 'extend': {'faceImageUrl': ['6ad010cf-ce45-11ec-9715-e4246c7d1635/20220622/1/dsf_453810dc-f202-11ec-bd2d-e4246c7d1635_60524172_60587111.jpg'], 'glass': 0, 'beard': 0, 'candidateInfo': [], 'sex': 0, 'occurrenceCount': 0, 'deviceCode': '1000038', 'globalScenePicUrl': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220622/1/dsf_453810dc-f202-11ec-bd2d-e4246c7d1635_60425203_60524172.jpg', 'eye': 0, 'alarmType': 1001000, 'perFlag': -1, 'mouth': 0, 'feature': [], 'isHit': True, 'channelSeq': 0, 'szSerialUUID': '', 'channelName': '测试摄像头1', 'beginTime': 1656727739, 'endTime': 1656727739, 'age': -1, 'mask': 0}, 'unitType': 1, 'alarmType': 1001000, 'channelSeq': 0, 'orgCode': '001', 'channelName': '测试摄像头1', 'alarmStat': 1, 'isEvent': True}, 'subsystem': 'evo-face', 'userIds': None, 'sid': None, 'domainId': None, 'infoArray': None, 'protocol': None} + + +{'id': 1656731738555, +'category': 'alarm', +'method': 'alarm.msg', +'info': {'orgName': '根节点', +'nodeCode': '1000038$1$0$0', +'deviceCode': '1000038', +'alarmCode': 'a66160f7-9ceb-4540-a6be-9cb6ec311b5f', +'alarmPicture': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220622/1/dsf_453810dc-f202-11ec-bd2d-e4246c7d1635_61221133_61249479.jpg', +'nodeType': 2, 'alarmDate': '1656731735', +'alarmGrade': 2, 'isSave': True, +'extend': {'faceImageUrl': ['6ad010cf-ce45-11ec-9715-e4246c7d1635/20220622/1/dsf_453810dc-f202-11ec-bd2d-e4246c7d1635_61221133_61249479.jpg'], +'glass': 0, 'beard': 0, +'candidateInfo': +[{'birthday': '2022-7-2', +'faceImageUrl': ['6ad010cf-ce45-11ec-9715-e4246c7d1635/20220622/1/dsf_453810dc-f202-11ec-bd2d-e4246c7d1635_61249479_61322881.jpg'], 'groupName': '内部库1', 'similarity': 99, 'sex': 1, 'cardType': 1, 'name': '曹前明', 'devPersonId': '15', 'id': '342422199004040175', 'type': 0}], 'sex': 0, 'occurrenceCount': 0, 'deviceCode': '1000038', 'globalScenePicUrl': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220622/1/dsf_453810dc-f202-11ec-bd2d-e4246c7d1635_61130541_61221133.jpg', 'eye': 0, 'alarmType': 1001003, 'perFlag': -1, 'mouth': 0, 'feature': [], 'isHit': True, 'channelSeq': 0, 'szSerialUUID': '', 'channelName': '测试摄像头1', 'beginTime': 1656731735, 'endTime': 1656731735, 'age': -1, 'mask': 0}, 'unitType': 1, 'alarmType': 1001003, 'channelSeq': 0, 'orgCode': '001', 'channelName': '测试摄像头1', 'alarmStat': 1, 'isEvent': True}, +'subsystem': 'evo-face', 'userIds': None, 'sid': None, 'domainId': None, 'infoArray': None, 'protocol': None} \ No newline at end of file diff --git a/apps/ecm/service.py b/apps/ecm/service.py index abf5005b..4c461694 100644 --- a/apps/ecm/service.py +++ b/apps/ecm/service.py @@ -1,5 +1,6 @@ +from apps.utils.sms import send_sms import requests from apps.am.models import Access, Area from apps.am.tasks import cache_areas_info @@ -18,6 +19,7 @@ from django.utils import timezone from django.conf import settings import os from apps.utils.speech import generate_voice +from threading import Thread requests.packages.urllib3.disable_warnings() @@ -57,11 +59,23 @@ class EcmService: "time2": int(time.time()), # 当前时间戳 } - def create_remind_and_speak(cls): + @classmethod + def create_remind_and_speak(cls, event: Event): """ - 创建事件提醒并发送短信/微信/音响 + 创建事件提醒并发送短信/微信/喇叭 """ - pass + # 喇叭提醒 + if event.voice: + sps = list(TDevice.objects.filter(area=event.area, type=TDevice.DEVICE_SPEAKER).values_list('code', flat=True)) + if len(sps) == 0: # 找覆盖区的音响 + sps = list(TDevice.objects.filter(areas=event.area, + type=TDevice.DEVICE_SPEAKER).values_list('code', flat=True)) + if sps: + t = Thread(target=spClient.speak, args=(event.voice, sps), daemon=True) + t.start() + if event.employee and event.employee.phone: + t = Thread(target=send_sms, args=(event.employee.phone, '1001', {'code': '5678'}), daemon=True) + t.start() @classmethod def dispatch_dahua_event(cls, data: dict): @@ -107,14 +121,7 @@ class EcmService: 'cate': ec, 'event': event }) - # 喇叭提醒 - if event.voice: - sps = list(TDevice.objects.filter(area=area, type=TDevice.DEVICE_SPEAKER).values_list('code', flat=True)) - if len(sps) == 0: # 找覆盖区的音响 - sps = list(TDevice.objects.filter(areas=area, type=TDevice.DEVICE_SPEAKER).values_list('code', flat=True)) - if sps: - spClient.speak(event.voice, sps) - return + cls.create_remind_and_speak(event=event) @classmethod def dispatch_xunxi_event(cls, data: dict): diff --git a/apps/ecm/views.py b/apps/ecm/views.py index 506451a2..d484a580 100644 --- a/apps/ecm/views.py +++ b/apps/ecm/views.py @@ -51,6 +51,7 @@ class AlgoChannelViewSet(CreateModelMixin, DestroyModelMixin, ListModelMixin, Cu class NotifySettingViewSet(CustomModelViewSet): queryset = NotifySetting.objects.all() serializer_class = NotifySettingsSerializer + filterset_fields = ['event_cate', 'obj_cate', 'post', 'user'] class EventViewSet(ListModelMixin, RetrieveModelMixin, CustomGenericViewSet): diff --git a/apps/hrm/serializers.py b/apps/hrm/serializers.py index 58f1fe2a..23f735bb 100755 --- a/apps/hrm/serializers.py +++ b/apps/hrm/serializers.py @@ -33,7 +33,7 @@ def phone_check(phone): class EmployeeCreateUpdateSerializer(EmployeeBaseSerializer): - phone = serializers.CharField(label="手机号", validators=[phone_check]) + phone = serializers.CharField(label="手机号") class Meta: model = Employee diff --git a/apps/utils/sms.py b/apps/utils/sms.py index f655a90a..54b791e3 100644 --- a/apps/utils/sms.py +++ b/apps/utils/sms.py @@ -29,7 +29,10 @@ def send_sms(phone: str, template_code: str, template_param: dict): request.add_query_param('TemplateParam', json.dumps(template_param)) res = client.do_action(request) res_dict = json.loads(str(res, encoding='utf-8')) + print(phone, template_code, template_param, res_dict) if res_dict['result'] == 0: - return True, 'OK', res_dict['BizId'] + + return True, res_dict else: - return False, res_dict['Message'], res_dict['BizId'] + settings.myLogger.error("短信发送失败:{}-{}".format(phone, str(res_dict))) + return False, res_dict