# -*- coding: utf-8 -*- """ @Time : 2022/5/9 10:51 @Auth : Locky @File :gatewayController.py @IDE :PyCharm """ import logging import time from django.views.generic.base import View from Model.models import UidPushModel from Object.ResponseObject import ResponseObject from Object.utils import LocalDateTimeUtil from Service.CommonService import CommonService from Service.EquipmentInfoService import EquipmentInfoService from Service.GatewayService import GatewayPushService class GatewayView(View): def get(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.GET, request, operation) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.POST, request, operation) def validation(self, request_dict, request, operation): response = ResponseObject() if operation == 'gatewayPush': # 网关推送 return self.gateway_push(request_dict, response) else: return response.json(414) def gateway_push(self, request_dict, response): logger = logging.getLogger('info') serial_number = request_dict.get('serial_number', None) src_addr = request_dict.get('src_addr', None) event_type = request_dict.get('event_type', None) alarm = request_dict.get('alarm', None) logger.info('---调用网关推送接口--- request_dict:{}'.format(request_dict)) if not all([serial_number, src_addr, event_type, alarm]): return response.json(444) n_time = int(time.time()) try: # 查询推送配置数据 uid_push_qs = UidPushModel.objects.filter(uid_set__uid=serial_number, uid_set__detect_status=1). \ values('token_val', 'app_type', 'appBundleId', 'm_code', 'push_type', 'userID_id', 'userID__NickName', 'lang', 'm_code', 'tz', 'uid_set__nickname', 'uid_set__detect_interval', 'uid_set__detect_group') if not uid_push_qs.exists(): return response.json(173) uid_push_list = [uid_push for uid_push in uid_push_qs] nickname = uid_push_list[0]['uid_set__nickname'] device_nick_name = nickname if nickname else serial_number detect_interval = uid_push_list[0]['uid_set__detect_interval'] detect_group = uid_push_list[0]['uid_set__detect_group'] local_date_time = '' equipment_info_list = [] event_type = int(event_type) kwargs = { 'n_time': n_time, 'event_type': event_type, 'nickname': device_nick_name, } for uid_push in uid_push_list: device_user_id = uid_push['userID_id'] push_type = uid_push['push_type'] app_bundle_id = uid_push['appBundleId'] token_val = uid_push['token_val'] lang = uid_push['lang'] tz = uid_push['tz'] if uid_push['tz'] else 0 # 获取推送所需数据 msg_title = GatewayPushService.get_msg_title(app_bundle_id, device_nick_name) msg_text = GatewayPushService.get_msg_text(n_time, tz, lang, alarm) kwargs['msg_title'] = msg_title kwargs['msg_text'] = msg_text kwargs['app_bundle_id'] = app_bundle_id kwargs['token_val'] = token_val try: # 推送消息 if push_type == 0: # ios apns GatewayPushService.ios_apns_push(**kwargs) elif push_type == 1: # android gcm GatewayPushService.android_fcm_push(**kwargs) elif push_type == 2: # android 极光推送 GatewayPushService.android_jpush(**kwargs) except Exception as e: logger.info('网关推送消息异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e))) continue # 组织存储数据 local_date_time = CommonService.get_now_time_str(n_time=n_time, tz=0, lang='cn')[:10] equipment_info_list.append(EquipmentInfoService.get_equipment_info_obj( local_date_time, add_time=n_time, event_time=n_time, receive_time=n_time, device_uid=serial_number, device_nick_name=device_nick_name, alarm=alarm, event_type=event_type, device_user_id=device_user_id, )) if equipment_info_list: # 根据日期获得星期几 week = LocalDateTimeUtil.date_to_week(local_date_time) EquipmentInfoService.equipment_info_bulk_create(week, equipment_info_list) return response.json(0) except Exception as e: logger.info('---网关推送接口异常--- {}'.format(repr(e))) return response.json(500, repr(e))