123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- # -*- 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, SensorRecord, GatewaySubDevice
- 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)
- @staticmethod
- def gateway_push(request_dict, response):
- """
- 网关推送
- @param request_dict: 请求参数
- @request_dict serial_number: 序列号
- @request_dict ieee_addr: 长地址
- @request_dict src_addr: 短地址
- @request_dict sensor_type: 传感器类型
- @request_dict event_type: 事件类型
- @request_dict alarm: 消息内容
- @param response: 响应对象
- @return: response
- """
- logger = logging.getLogger('info')
- serial_number = request_dict.get('serial_number', None)
- ieee_addr = request_dict.get('ieee_addr', None)
- src_addr = request_dict.get('src_addr', None)
- sensor_type = request_dict.get('sensor_type', 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, ieee_addr, src_addr, sensor_type, event_type, alarm]):
- return response.json(444)
- n_time = int(time.time())
- try:
- # 查询子设备表id
- gateway_sub_device_qs = GatewaySubDevice.objects.filter(device__serial_number=serial_number,
- device_type=sensor_type, ieee_addr=ieee_addr,
- src_addr=src_addr).values('id')
- if gateway_sub_device_qs.exists():
- gateway_sub_device_id = gateway_sub_device_qs[0]['id']
- # 写入传感器记录数据
- SensorRecord.objects.create(gateway_sub_device_id=gateway_sub_device_id, alarm=alarm,
- event_type=event_type, created_time=n_time)
- # 查询推送配置数据
- 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))
|