|
@@ -1,5 +1,6 @@
|
|
|
import json
|
|
|
import logging
|
|
|
+import threading
|
|
|
|
|
|
import oss2
|
|
|
from django.http import JsonResponse
|
|
@@ -7,13 +8,10 @@ from django.views.generic.base import View
|
|
|
|
|
|
from AnsjerPush.config import CONFIG_INFO, CONFIG_CN
|
|
|
from AnsjerPush.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
|
|
|
-from Model.models import SysMsgModel
|
|
|
from Object.RedisObject import RedisObject
|
|
|
-from Object.utils import LocalDateTimeUtil
|
|
|
from Service.DevicePushService import DevicePushService
|
|
|
-from Service.EquipmentInfoService import EquipmentInfoService
|
|
|
|
|
|
-logger = logging.getLogger('v1_push')
|
|
|
+V1_PUSH_LOGGER = logging.getLogger('v1_push')
|
|
|
|
|
|
|
|
|
# 旧移动侦测接口
|
|
@@ -27,7 +25,8 @@ class NotificationView(View):
|
|
|
request.encoding = 'utf-8'
|
|
|
return self.validation(request.POST)
|
|
|
|
|
|
- def validation(self, request_dict):
|
|
|
+ @staticmethod
|
|
|
+ def validation(request_dict):
|
|
|
"""
|
|
|
设备触发报警消息推送
|
|
|
@param request_dict:uidToken 加密uid
|
|
@@ -50,12 +49,14 @@ class NotificationView(View):
|
|
|
uid = DevicePushService.decode_uid(etk, uidToken) # 解密uid
|
|
|
if len(uid) != 20 and len(uid) != 14:
|
|
|
return JsonResponse(status=200, data={'code': 404, 'msg': 'wrong uid'})
|
|
|
- logger.info("旧移动侦测接口的uid:{},时间戳:{},事件类型:{}".format(uid, n_time, event_type))
|
|
|
+
|
|
|
+ V1_PUSH_LOGGER.info('旧移动侦测接口uid:{},时间戳:{},事件类型:{}'.format(uid, n_time, event_type))
|
|
|
+
|
|
|
event_type = int(event_type)
|
|
|
pkey = '{uid}_{channel}_{event_type}_ptl'.format(uid=uid, event_type=event_type, channel=channel)
|
|
|
ykey = '{uid}_redis_qs'.format(uid=uid)
|
|
|
- is_sys_msg = self.is_sys_msg(event_type)
|
|
|
- if is_sys_msg is True:
|
|
|
+ is_sys_msg = DevicePushService.judge_sys_msg(event_type)
|
|
|
+ if is_sys_msg:
|
|
|
dkey = '{uid}_{channel}_{event_type}_flag'.format(uid=uid, event_type=event_type, channel=channel)
|
|
|
else:
|
|
|
dkey = '{uid}_{channel}_flag'.format(uid=uid, channel=channel)
|
|
@@ -66,8 +67,7 @@ class NotificationView(View):
|
|
|
|
|
|
# 一分钟外,推送开启状态
|
|
|
detect_med_type = 0 # 0推送旧机制 1存库不推送,2推送存库
|
|
|
- # 暂时注销
|
|
|
- if event_type != 606:
|
|
|
+ if event_type not in [606, 607]:
|
|
|
if have_pkey:
|
|
|
res_data = {'code': 0, 'msg': 'Push it once a minute'}
|
|
|
return JsonResponse(status=200, data=res_data)
|
|
@@ -79,7 +79,7 @@ class NotificationView(View):
|
|
|
# 从数据库查询出来
|
|
|
uid_push_qs = DevicePushService.query_uid_push(uid, event_type)
|
|
|
if not uid_push_qs.exists():
|
|
|
- logger.info('消息推送-uid_push 数据不存在')
|
|
|
+ V1_PUSH_LOGGER.info('消息推送-uid_push 数据不存在')
|
|
|
return JsonResponse(status=200, data={'code': 176, 'msg': 'no uid_push data'})
|
|
|
# 修改redis数据,并设置过期时间为10分钟
|
|
|
uid_push_list = DevicePushService.qs_to_list(uid_push_qs)
|
|
@@ -125,100 +125,48 @@ class NotificationView(View):
|
|
|
'electricity': '', 'bucket': bucket, 'app_push': have_dkey, 'storage_location': 1, 'ai_type': 0,
|
|
|
'dealings_type': 0, 'detection': 0, 'device_type': 1, 'app_push_config': '',
|
|
|
'uid_set_push_list': uid_push_list}
|
|
|
- # 推送以及报警消息存库
|
|
|
- result = DevicePushService.save_msg_push(**params)
|
|
|
- if result['code_date'] is None:
|
|
|
- result['code_date'] = {'do_apns_code': '', 'do_fcm_code': '', 'do_jpush_code': ''}
|
|
|
- if detect_med_type == 1:
|
|
|
- result['code_date']['do_apns_code'] = '只存库不推送'
|
|
|
- result['code_date']['do_fcm_code'] = '只存库不推送'
|
|
|
- result['code_date']['do_jpush_code'] = '只存库不推送'
|
|
|
- if is_sys_msg:
|
|
|
- SysMsgModel.objects.bulk_create(result['sys_msg_list'])
|
|
|
- else:
|
|
|
- if result['new_device_info_list'] and len(result['new_device_info_list']) > 0:
|
|
|
- # 根据日期获得星期几
|
|
|
- week = LocalDateTimeUtil.date_to_week(result['local_date_time'])
|
|
|
- EquipmentInfoService.equipment_info_bulk_create(week, result['new_device_info_list'])
|
|
|
+
|
|
|
+ # 异步推送消息和保存数据
|
|
|
+ push_thread = threading.Thread(
|
|
|
+ target=push_and_save_data,
|
|
|
+ kwargs=params)
|
|
|
+ push_thread.start()
|
|
|
+
|
|
|
+ res_data = {}
|
|
|
if is_st == '0' or is_st == '2':
|
|
|
- print("is_st=0or2")
|
|
|
- for up in uid_push_list:
|
|
|
- if up['push_type'] == 0: # ios apns
|
|
|
- up['do_apns_code'] = result['code_date']['do_apns_code']
|
|
|
- elif up['push_type'] == 1: # android gcm
|
|
|
- up['do_fcm_code'] = result['code_date']['do_fcm_code']
|
|
|
- elif up['push_type'] == 2: # android jpush
|
|
|
- up['do_jpush_code'] = result['code_date']['do_jpush_code']
|
|
|
- del up['push_type']
|
|
|
- del up['userID_id']
|
|
|
- del up['userID__NickName']
|
|
|
- del up['lang']
|
|
|
- del up['tz']
|
|
|
- del up['uid_set__nickname']
|
|
|
- del up['uid_set__detect_interval']
|
|
|
- del up['uid_set__detect_group']
|
|
|
- return JsonResponse(status=200, data={'code': 0, 'msg': 'success 0 or 2'})
|
|
|
+ res_data = {'code': 0, 'msg': 'success 0 or 2'}
|
|
|
+ return JsonResponse(status=200, data=res_data)
|
|
|
|
|
|
elif is_st == '1':
|
|
|
- print("is_st=1")
|
|
|
- # Endpoint以杭州为例,其它Region请按实际情况填写。
|
|
|
obj = '{uid}/{channel}/{filename}.jpeg'.format(uid=uid, channel=channel, filename=n_time)
|
|
|
- # 设置此签名URL在60秒内有效。
|
|
|
- url = bucket.sign_url('PUT', obj, 7200)
|
|
|
- for up in uid_push_list:
|
|
|
- up['do_apns_code'] = result['code_date']['do_apns_code']
|
|
|
- up['do_fcm_code'] = result['code_date']['do_fcm_code']
|
|
|
- up['do_jpush_code'] = result['code_date']['do_jpush_code']
|
|
|
- del up['push_type']
|
|
|
- del up['userID_id']
|
|
|
- del up['userID__NickName']
|
|
|
- del up['lang']
|
|
|
- del up['tz']
|
|
|
- del up['uid_set__nickname']
|
|
|
- del up['uid_set__detect_interval']
|
|
|
- del up['uid_set__detect_group']
|
|
|
- res_data = {'code': 0, 'img_push': url, 'msg': 'success'}
|
|
|
- logger.info('推送响应,uid:{},n_time:{},事件类型:{},响应:{}'.format(uid, n_time, event_type, json.dumps(res_data)))
|
|
|
- return JsonResponse(status=200, data=res_data)
|
|
|
+ url = bucket.sign_url('PUT', obj, 3600)
|
|
|
+ res_data = {'code': 0, 'img_push': url, 'msg': 'success 1'}
|
|
|
|
|
|
elif is_st == '3':
|
|
|
- print("is_st=3")
|
|
|
- # 人形检测带动图
|
|
|
- # Endpoint以杭州为例,其它Region请按实际情况填写。
|
|
|
img_url_list = []
|
|
|
for i in range(int(is_st)):
|
|
|
obj = '{uid}/{channel}/{filename}_{st}.jpeg'. \
|
|
|
format(uid=uid, channel=channel, filename=n_time, st=i)
|
|
|
- # 设置此签名URL在60秒内有效。
|
|
|
- url = bucket.sign_url('PUT', obj, 7200)
|
|
|
+ url = bucket.sign_url('PUT', obj, 3600)
|
|
|
img_url_list.append(url)
|
|
|
|
|
|
- for up in uid_push_list:
|
|
|
- up['do_apns_code'] = result['code_date']['do_apns_code']
|
|
|
- up['do_fcm_code'] = result['code_date']['do_fcm_code']
|
|
|
- up['do_jpush_code'] = result['code_date']['do_jpush_code']
|
|
|
- del up['push_type']
|
|
|
- del up['userID_id']
|
|
|
- del up['userID__NickName']
|
|
|
- del up['lang']
|
|
|
- del up['tz']
|
|
|
- del up['uid_set__nickname']
|
|
|
- del up['uid_set__detect_interval']
|
|
|
- del up['uid_set__detect_group']
|
|
|
-
|
|
|
res_data = {'code': 0, 'img_url_list': img_url_list, 'msg': 'success 3'}
|
|
|
- logger.info('推送响应,uid:{},n_time:{},事件类型:{},响应:{}'.format(uid, n_time, event_type, json.dumps(res_data)))
|
|
|
- return JsonResponse(status=200, data=res_data)
|
|
|
+
|
|
|
+ V1_PUSH_LOGGER.info('旧推送接口响应,uid:{},n_time:{},事件类型:{},响应:{}'.
|
|
|
+ format(uid, n_time, event_type, json.dumps(res_data)))
|
|
|
+ return JsonResponse(status=200, data=res_data)
|
|
|
+
|
|
|
except Exception as e:
|
|
|
- logger.info('旧推送接口异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ V1_PUSH_LOGGER.info('旧推送接口异常,error_line:{},error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
data = {
|
|
|
- 'errLine': e.__traceback__.tb_lineno,
|
|
|
- 'errMsg': repr(e),
|
|
|
+ 'error_line': e.__traceback__.tb_lineno,
|
|
|
+ 'error_msg': repr(e)
|
|
|
}
|
|
|
return JsonResponse(status=200, data=json.dumps(data), safe=False)
|
|
|
|
|
|
- def is_sys_msg(self, event_type):
|
|
|
- event_type_list = [702, 703, 704]
|
|
|
- if event_type in event_type_list:
|
|
|
- return True
|
|
|
- return False
|
|
|
+
|
|
|
+def push_and_save_data(**params):
|
|
|
+ V1_PUSH_LOGGER.info('{}开始异步存表和推送'.format(params['uid']))
|
|
|
+ # 保存推送数据和推送消息
|
|
|
+ result = DevicePushService.save_msg_push(**params)
|
|
|
+ V1_PUSH_LOGGER.info('存表和推送结果:{}'.format(result))
|