custommodelserializerbug
This commit is contained in:
parent
5c89db63db
commit
dac1063b81
|
@ -0,0 +1,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
class EcmService:
|
||||||
|
"""事件处理服务
|
||||||
|
"""
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def dispatch_dahua_alarm(data:dict):
|
||||||
|
"""分发大华事件
|
||||||
|
|
||||||
|
Args:
|
||||||
|
data (dict): 信息
|
||||||
|
"""
|
||||||
|
pass
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 3.2.12 on 2022-06-23 03:11
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('opm', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='operation',
|
||||||
|
name='state',
|
||||||
|
field=models.PositiveSmallIntegerField(default=10, verbose_name='作业状态'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -43,6 +43,7 @@ class Operation(CommonBDModel):
|
||||||
name = models.CharField('作业简述', max_length=200)
|
name = models.CharField('作业简述', max_length=200)
|
||||||
area = models.ForeignKey('am.area', verbose_name='作业区域',
|
area = models.ForeignKey('am.area', verbose_name='作业区域',
|
||||||
on_delete=models.CASCADE)
|
on_delete=models.CASCADE)
|
||||||
|
state = models.PositiveSmallIntegerField('作业状态', default=10)
|
||||||
place = models.TextField('具体地点', null=True, blank=True)
|
place = models.TextField('具体地点', null=True, blank=True)
|
||||||
start_time = models.DateTimeField('作业开始时间')
|
start_time = models.DateTimeField('作业开始时间')
|
||||||
end_time = models.DateTimeField('作业结束时间')
|
end_time = models.DateTimeField('作业结束时间')
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
{'id': None, 'category': 'alarm', 'method': 'alarm.msg',
|
||||||
|
'info': {'orgName': '根节点', 'alarmPictureSize': '82496', 'nodeCode': '1000038$1$0$0', 'deviceCode': '1000038', 'alarmCode': '{00A84F4B-7E88-0B4F-910C-CCDA923D9900}', 'alarmPicture': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220622/1/dsf_453810dc-f202-11ec-bd2d-e4246c7d1635_953328_1035824.jpg', 'nodeType': 2, 'deviceName': '10.0.11.23',
|
||||||
|
'alarmDate': '1655893102', 'alarmGrade': 2, 'isSave': True, 'unitType': 1, 'unitSeq': 0, 'extend': {'params': {'ObjectType': 'Human', 'GroupId': 0.0, 'ObjectSubType': ''}, 'objectSubType': ''}, 'alarmType': 964, 'channelSeq': 0, 'orgCode': '001', 'channelName': '测试摄像头1', 'alarmStat': 1, 'isEvent': True}, 'subsystem': 'admin', 'userIds': None, 'sid': None, 'domainId': None, 'infoArray': None, 'protocol': None}
|
|
@ -1,4 +1,6 @@
|
||||||
|
import json
|
||||||
from rest_framework.exceptions import ParseError, APIException
|
from rest_framework.exceptions import ParseError, APIException
|
||||||
|
from apps.ecm.service import EcmService
|
||||||
from apps.third.tapis import dhapis, xxapis, spapis
|
from apps.third.tapis import dhapis, xxapis, spapis
|
||||||
from apps.third.erros import TAPI_CODE_WRONG
|
from apps.third.erros import TAPI_CODE_WRONG
|
||||||
from apps.third.clients import dhClient, spClient, xxClient
|
from apps.third.clients import dhClient, spClient, xxClient
|
||||||
|
@ -164,7 +166,7 @@ class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet):
|
||||||
"param": {
|
"param": {
|
||||||
"monitors": [
|
"monitors": [
|
||||||
{
|
{
|
||||||
"monitor": settings.BASE_URL + request.path,
|
"monitor": settings.BASE_URL + '/api/third/dahua/mq/',
|
||||||
"monitorType": "url",
|
"monitorType": "url",
|
||||||
"events": [
|
"events": [
|
||||||
{
|
{
|
||||||
|
@ -181,8 +183,8 @@ class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet):
|
||||||
],
|
],
|
||||||
"subsystem": {
|
"subsystem": {
|
||||||
"subsystemType": 0,
|
"subsystemType": 0,
|
||||||
"name": "127.0.0.1_8000",
|
"name": "10.21.25.158_8000",
|
||||||
"magic": "127.0.0.1_8000"
|
"magic": "10.21.25.158_8000"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -198,7 +200,7 @@ class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet):
|
||||||
取消事件订阅
|
取消事件订阅
|
||||||
"""
|
"""
|
||||||
dhClient.request(**dhapis['mq_unsubscribe'],
|
dhClient.request(**dhapis['mq_unsubscribe'],
|
||||||
params={'name': '127.0.0.1_8000'})
|
params={'name': '10.21.25.158_8000'})
|
||||||
return Response()
|
return Response()
|
||||||
|
|
||||||
@action(methods=['post'], detail=False,
|
@action(methods=['post'], detail=False,
|
||||||
|
@ -209,9 +211,11 @@ class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet):
|
||||||
|
|
||||||
大华事件处理
|
大华事件处理
|
||||||
"""
|
"""
|
||||||
data = request.data
|
data = json.loads(request.body)
|
||||||
method = data['method']
|
method = data['method']
|
||||||
|
category = data['category']
|
||||||
subsystem = data.get('subsystem', None)
|
subsystem = data.get('subsystem', None)
|
||||||
|
print(data)
|
||||||
# info = data.get('info', {})
|
# info = data.get('info', {})
|
||||||
if method == 'department.update':
|
if method == 'department.update':
|
||||||
pass
|
pass
|
||||||
|
@ -221,4 +225,9 @@ class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet):
|
||||||
"""
|
"""
|
||||||
刷卡事件
|
刷卡事件
|
||||||
"""
|
"""
|
||||||
|
elif category == 'alarm' and subsystem == 'admin':
|
||||||
|
"""
|
||||||
|
视频报警
|
||||||
|
"""
|
||||||
|
EcmService.dispatch_dahua_alarm(data=data)
|
||||||
return Response()
|
return Response()
|
||||||
|
|
|
@ -24,6 +24,7 @@ class DhClient:
|
||||||
self.headers = {}
|
self.headers = {}
|
||||||
self.isGetingToken = False
|
self.isGetingToken = False
|
||||||
self.isRuning = True
|
self.isRuning = True
|
||||||
|
self.token = None
|
||||||
self.t = None # 线程
|
self.t = None # 线程
|
||||||
self.setup()
|
self.setup()
|
||||||
|
|
||||||
|
@ -38,24 +39,11 @@ class DhClient:
|
||||||
url=settings.DAHUA_BASE_URL + '/evo-apigw/evo-oauth/oauth/token', verify=False)
|
url=settings.DAHUA_BASE_URL + '/evo-apigw/evo-oauth/oauth/token', verify=False)
|
||||||
ret = r.json()
|
ret = r.json()
|
||||||
if ret['success']:
|
if ret['success']:
|
||||||
|
self.token = ret['data']['access_token']
|
||||||
self.headers['Authorization'] = 'bearer ' + ret['data']['access_token']
|
self.headers['Authorization'] = 'bearer ' + ret['data']['access_token']
|
||||||
self.headers['User-Id'] = '1'
|
self.headers['User-Id'] = '1'
|
||||||
time.sleep(3600)
|
time.sleep(3600)
|
||||||
|
|
||||||
def get_token(self):
|
|
||||||
self.isGetingToken = True
|
|
||||||
params = {
|
|
||||||
'grant_type': 'client_credentials',
|
|
||||||
'client_id': self.client_id,
|
|
||||||
'client_secret': self.client_secret
|
|
||||||
}
|
|
||||||
r = requests.post(params=params, url=settings.DAHUA_BASE_URL + '/evo-apigw/evo-oauth/oauth/token', verify=False)
|
|
||||||
ret = r.json()
|
|
||||||
if ret['success']:
|
|
||||||
self.headers['Authorization'] = 'bearer ' + ret['data']['access_token']
|
|
||||||
self.headers['User-Id'] = '1'
|
|
||||||
self.isGetingToken = False
|
|
||||||
|
|
||||||
def setup(self):
|
def setup(self):
|
||||||
t = Thread(target=self._get_token_loop, args=(), daemon=True)
|
t = Thread(target=self._get_token_loop, args=(), daemon=True)
|
||||||
t.start()
|
t.start()
|
||||||
|
@ -71,46 +59,36 @@ class DhClient:
|
||||||
file_path_rela=None, raise_exception=True):
|
file_path_rela=None, raise_exception=True):
|
||||||
if not settings.DAHUA_ENABLED:
|
if not settings.DAHUA_ENABLED:
|
||||||
raise ParseError('大华对接未启用')
|
raise ParseError('大华对接未启用')
|
||||||
if self.isGetingToken:
|
files = None
|
||||||
req_num = 0
|
if file_path_rela: # 相对路径
|
||||||
while True:
|
files = {'file': open(settings.BASE_DIR + file_path_rela, 'rb')}
|
||||||
time.sleep(0.5)
|
try:
|
||||||
if not self.isGetingToken:
|
if params:
|
||||||
self.request(url, method, params, json, timeout, file_path_rela, raise_exception)
|
url = url.format(**params)
|
||||||
req_num = req_num + 1
|
r = getattr(requests, method)('{}{}'.format(settings.DAHUA_BASE_URL, url),
|
||||||
if req_num > 4:
|
headers=self.headers, params=params, json=json,
|
||||||
break
|
timeout=timeout, files=files, verify=False)
|
||||||
else:
|
except Exception:
|
||||||
files = None
|
if raise_exception:
|
||||||
if file_path_rela: # 相对路径
|
raise APIException(**DH_REQUEST_ERROR)
|
||||||
files = {'file': open(settings.BASE_DIR + file_path_rela, 'rb')}
|
return 'error', DH_REQUEST_ERROR
|
||||||
try:
|
# if settings.DEBUG:
|
||||||
if params:
|
# print_roundtrip(r)
|
||||||
url = url.format(**params)
|
if r.status_code == 200:
|
||||||
r = getattr(requests, method)('{}{}'.format(settings.DAHUA_BASE_URL, url),
|
ret = r.json()
|
||||||
headers=self.headers, params=params, json=json,
|
if ret.get('code') == '27001007':
|
||||||
timeout=timeout, files=files, verify=False)
|
self.get_token() # 重新获取token
|
||||||
except Exception:
|
self.request(url, method, params, json, timeout, file_path_rela, raise_exception)
|
||||||
if raise_exception:
|
else:
|
||||||
raise APIException(**DH_REQUEST_ERROR)
|
if ret['code'] not in ['0', '100', '00000', '1000', 0, 100, 1000]:
|
||||||
return 'error', DH_REQUEST_ERROR
|
detail = '大华错误:' + \
|
||||||
# if settings.DEBUG:
|
'{}|{}{}{}'.format(str(ret['code']), ret.get('errMsg', ''),
|
||||||
# print_roundtrip(r)
|
ret.get('desc', ''), str(ret.get('data', '')))
|
||||||
if r.status_code == 200:
|
err_detail = dict(detail=detail, code='dh_'+str(ret['code']))
|
||||||
ret = r.json()
|
if raise_exception:
|
||||||
if ret.get('code') == '27001007':
|
raise ParseError(**err_detail)
|
||||||
self.get_token() # 重新获取token
|
return 'fail', dict(detail=detail, code='dh_'+str(ret['code']))
|
||||||
self.request(url, method, params, json, timeout, file_path_rela, raise_exception)
|
return 'success', ret['data'] if 'data' in ret else None
|
||||||
else:
|
|
||||||
if ret['code'] not in ['0', '100', '00000', '1000', 0, 100, 1000]:
|
|
||||||
detail = '大华错误:' + \
|
|
||||||
'{}|{}{}{}'.format(str(ret['code']), ret.get('errMsg', ''),
|
|
||||||
ret.get('desc', ''), str(ret.get('data', '')))
|
|
||||||
err_detail = dict(detail=detail, code='dh_'+str(ret['code']))
|
|
||||||
if raise_exception:
|
|
||||||
raise ParseError(**err_detail)
|
|
||||||
return 'fail', dict(detail=detail, code='dh_'+str(ret['code']))
|
|
||||||
return 'success', ret['data'] if 'data' in ret else None
|
|
||||||
if raise_exception:
|
if raise_exception:
|
||||||
raise APIException(**DH_REQUEST_ERROR)
|
raise APIException(**DH_REQUEST_ERROR)
|
||||||
return 'error', DH_REQUEST_ERROR
|
return 'error', DH_REQUEST_ERROR
|
||||||
|
|
|
@ -24,7 +24,7 @@ class CustomModelSerializer(DynamicFieldsMixin, serializers.ModelSerializer):
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
if self.request:
|
if self.request:
|
||||||
if getattr(self.request, 'user', None):
|
if getattr(self.request, 'user', None):
|
||||||
if getattr(self.request.user, 'create_by', None):
|
if getattr(self.Meta.model, 'create_by', None):
|
||||||
validated_data['create_by'] = self.request.user
|
validated_data['create_by'] = self.request.user
|
||||||
if 'belong_dept' in validated_data:
|
if 'belong_dept' in validated_data:
|
||||||
pass
|
pass
|
||||||
|
|
Loading…
Reference in New Issue