diff --git a/apps/ecm/demo.py b/apps/ecm/demo.py index 7c54fac6..bd63891f 100644 --- a/apps/ecm/demo.py +++ b/apps/ecm/demo.py @@ -59,33 +59,47 @@ xx = {'id': 1656652947266, 'domainId': None, 'infoArray': None, 'protocol': None} -print(json.dumps(xx)) -{'id': 1656727743278, -'category': 'alarm', -'method': 'alarm.msg', -'info': -{'orgName': '根节点', -'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} +{'id': 1656727743278, + 'category': 'alarm', + 'method': 'alarm.msg', + 'info': + {'orgName': '根节点', + '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} -{'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 +{'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} + + +json_data = { + "json": {"deviceCode": "1000038", "operation": "generalJsonTransport", "params": + {"id": "xxxxx001", "method": "dev.snap", "params": {"DevID": "1000038", "DevChannel": "1000038$1$0$1", "SnapType": 1, "CmdSrc": 0}}}, + "code": "dev_snap" +} +params_dict = {"id": "xxxxx001", + "method": "dev.snap", + "params": + { + "DevID": "1000038", + "DevChannel": "1000038$1$0$1", + "SnapType": 1, + "CmdSrc": 0}} diff --git a/apps/ecm/migrations/0011_eventcate_same_allow_minute.py b/apps/ecm/migrations/0011_eventcate_same_allow_minute.py new file mode 100644 index 00000000..79d69cf4 --- /dev/null +++ b/apps/ecm/migrations/0011_eventcate_same_allow_minute.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2022-07-12 05:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ecm', '0010_auto_20220712_0855'), + ] + + operations = [ + migrations.AddField( + model_name='eventcate', + name='same_allow_minute', + field=models.PositiveSmallIntegerField(default=0, help_text='同一对象同事件多长时间内不再触发, 0代表一直触发', verbose_name='允许时间'), + ), + ] diff --git a/apps/ecm/models.py b/apps/ecm/models.py index a69f99df..ac31ce64 100644 --- a/apps/ecm/models.py +++ b/apps/ecm/models.py @@ -29,6 +29,7 @@ class EventCate(CommonAModel): filter_area_level = models.PositiveSmallIntegerField('固定喇叭区域级别过滤', choices=Area.AREA_LEVEL_CHOICES, default=Area.AREA_1) hanle_minute = models.PositiveSmallIntegerField('处理时间', default=0, help_text='超过处理时间事件状态变为超时未处理,0代表未配置') + same_allow_minute = models.PositiveSmallIntegerField('允许时间', default=0, help_text='同一对象同事件多长时间内不再触发, 0代表一直触发') def __str__(self): return self.name diff --git a/apps/ecm/serializers.py b/apps/ecm/serializers.py index 17568160..8567e270 100644 --- a/apps/ecm/serializers.py +++ b/apps/ecm/serializers.py @@ -32,7 +32,7 @@ class EventCateUpdateSerializer(CustomModelSerializer): class Meta: model = EventCate fields = ['speaker_on', 'speakers', 'filter_area_level', - 'voice_person', 'handle_minute', 'voice_num', 'priority'] + 'voice_person', 'handle_minute', 'voice_num', 'priority', 'same_allow_minute'] class NotifySettingsSerializer(CustomModelSerializer): diff --git a/apps/third/dahua.py b/apps/third/dahua.py index 753678a4..687f7536 100644 --- a/apps/third/dahua.py +++ b/apps/third/dahua.py @@ -122,3 +122,15 @@ class DhClient: """返回完整访问地址 """ return '{}/evo-apigw/evo-oss/{}?token={}'.format(settings.DAHUA_BASE_URL, path, self.token) + + def snap(self, code: str): + """摄像头实时截图 + + Args: + code (str): 视频通道编号 + """ + json_data = { + "deviceCode": "1000038", + "operation": "generalJsonTransport", + "params": "{\"method\":\"dev.snap\",\"id\":123,\"params\":{\"DevID\":\"1000038\",\"DevChannel\":0,\"PicNum\":1,\"SnapType\":1,\"CmdSrc\":0}}", + } diff --git a/apps/third/tapis.py b/apps/third/tapis.py index 23b89fb1..41ac6858 100755 --- a/apps/third/tapis.py +++ b/apps/third/tapis.py @@ -95,6 +95,10 @@ dhapis = { "alarm_detail": { "url": "/evo-apigw/evo-event/1.2.0/alarm-record/detail?alarmCode={alarmCode}&dbType={dbType}&alarmDate={alarmDate}", "method": "get" + }, + "dev_snap": { + "url": "/evo-apigw/admin/API/EVO/invoke/DMS", + "method": "post" } } diff --git a/apps/vm/serializers.py b/apps/vm/serializers.py index e3b1d0fd..67130fbc 100644 --- a/apps/vm/serializers.py +++ b/apps/vm/serializers.py @@ -8,6 +8,7 @@ from django.db import transaction from apps.third.clients import dhClient from apps.third.tapis import dhapis from apps.system.serializers import UserSimpleSerializer +from apps.wf.serializers import TicketSimpleSerializer class VisitCreateUpdateSerializer(CustomModelSerializer): @@ -19,6 +20,7 @@ class VisitCreateUpdateSerializer(CustomModelSerializer): class VisitSerializer(CustomModelSerializer): receptionist_ = UserSimpleSerializer(source='receptionist', read_only=True) + ticket_ = TicketSimpleSerializer(source='ticket', read_only=True) class Meta: model = Visit