123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- # @Author : Rocky
- # @File : CustomizedPushService.py
- # @Time : 2023/10/19 15:49
- import logging
- import time
- from Model.models import DeviceTypeModel, Device_Info, GatewayPush, CountryModel, SysMsgModel
- from Service.CommonService import CommonService
- from Service.HuaweiPushService.HuaweiPushService import HuaweiPushObject
- from Service.PushService import PushObject
- CUSTOMIZED_PUSH_LOGGER = logging.getLogger('customized_push')
- class CustomizedPushObject:
- @staticmethod
- def query_push_user(device_name, country, register_period):
- """
- 查询需要推送的用户id列表
- @param device_name: 设备型号
- @param country: 国家
- @param register_period: 用户注册年限
- @return: uid_id_list
- """
- # 设备型号和国家
- device_name_list = device_name.split(',')
- device_type_list = DeviceTypeModel.objects.filter(name__in=device_name_list).values_list('type', flat=True)
- country_qs = CountryModel.objects.filter(country_name=country).values('id')
- country_id = country_qs[0]['id']
- device_info_qs = Device_Info.objects.filter(Type__in=device_type_list, userID__region_country=country_id)
- # 获取时间范围
- now_time = int(time.time())
- index = register_period.find('-')
- n, m = register_period[:index], register_period[index+1:]
- if m == '':
- # 0-,所有时间
- if n == '0':
- device_info_qs = device_info_qs.values_list('userID_id', flat=True)
- # n-,n年以上
- else:
- # n年前时间戳转时间字符串
- n_years_seconds = int(n) * 365 * 24 * 60 * 60
- n_year_ago_timestamp = now_time - n_years_seconds
- n_year_ago = CommonService.timestamp_to_str(n_year_ago_timestamp)
- # 注册时间越小越早
- device_info_qs = device_info_qs.filter(userID__data_joined__lte=n_year_ago).\
- values_list('userID_id', flat=True)
- else:
- # n-m年,(如2-3年)
- n_years_seconds, m_years_seconds = int(n) * 365 * 24 * 60 * 60, int(m) * 365 * 24 * 60 * 60
- n_year_ago_timestamp = now_time - n_years_seconds
- m_year_ago_timestamp = now_time - m_years_seconds
- # 时间戳转时间字符串
- n_year_ago = CommonService.timestamp_to_str(n_year_ago_timestamp) # 2021
- m_year_ago = CommonService.timestamp_to_str(m_year_ago_timestamp) # 2020
- # 2020 <= 注册时间 <= 2021
- device_info_qs = device_info_qs.\
- filter(userID__data_joined__gte=m_year_ago, userID__data_joined__lte=n_year_ago).\
- values_list('userID_id', flat=True)
- user_id_list = list(device_info_qs)
- return user_id_list
- @classmethod
- def push_and_save_sys_msg(cls, **kwargs):
- """
- 推送和保存系统消息
- @param kwargs: 参数
- @return:
- """
- user_id_list = kwargs['user_id_list']
- title = kwargs['title']
- msg = kwargs['msg']
- link = kwargs['link']
- icon_link = kwargs['icon_link'] if kwargs['icon_link'] != '' else None
- # 推送
- n_time = int(time.time())
- if kwargs['push_app'] == 'ZosiSmart':
- app_bundle_id_list = ['com.ansjer.zccloud_a', 'com.ansjer.zccloud']
- else:
- app_bundle_id_list = ['com.ansjer.zccloud_ab', 'com.ansjer.customizede']
- gateway_push_qs = GatewayPush.objects.filter(user_id__in=user_id_list, app_bundle_id__in=app_bundle_id_list).\
- values('user_id', 'app_bundle_id', 'push_type', 'token_val')
- for gateway_push in gateway_push_qs:
- push_type = gateway_push['push_type']
- user_id = gateway_push['user_id']
- app_bundle_id = gateway_push['app_bundle_id']
- token_val = gateway_push['token_val']
- push_succeed = False
- # ios
- if push_type == 0:
- push_succeed = PushObject.ios_apns_push(nickname='', app_bundle_id=app_bundle_id, token_val=token_val,
- n_time=n_time, event_type=0, msg_title=title, msg_text=msg,
- launch_image=icon_link)
- # gcm
- elif push_type == 1:
- if icon_link is None:
- icon_link = ''
- push_succeed = PushObject.android_fcm_push(
- nickname='', app_bundle_id=app_bundle_id, token_val=token_val, n_time=n_time, event_type=0,
- msg_title=title, msg_text=msg, image=icon_link)
- # 华为
- elif push_type == 3:
- huawei_push_object = HuaweiPushObject()
- push_succeed = huawei_push_object.send_push_notify_message(
- token_val=token_val, msg_title=title, msg_text=msg, n_time=n_time, event_type=0, image_url=icon_link
- )
- # 推送成功,写入系统消息
- if push_succeed:
- sys_msg = msg
- if link:
- sys_msg += '\n' + link
- SysMsgModel.objects.create(userID_id=user_id, title=title, msg=sys_msg, addTime=n_time, updTime=n_time)
- CUSTOMIZED_PUSH_LOGGER.info('用户{}推送成功'.format(user_id))
- else:
- CUSTOMIZED_PUSH_LOGGER.info('用户{}推送失败,push_type:{}'.format(user_id, push_type))
- CUSTOMIZED_PUSH_LOGGER.info('customized_push_id:{}推送完成'.format(kwargs['id']))
|