# @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()) n, m = register_period[:1], register_period[-1:] if m == '-': # 0-,所有时间 if n == '0': user_id_list = device_info_qs.distinct('userID_id').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) # 注册时间越小越早 user_id_list = device_info_qs.filter(userID__data_joined__lte=n_year_ago).\ distinct('userID_id').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 user_id_list = device_info_qs.\ filter(userID__data_joined__gte=m_year_ago, userID__data_joined__lte=n_year_ago).\ distinct('userID_id').values_list('userID_id', flat=True) 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'] 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_succeed = False # ios if gateway_push['push_type'] == 0: push_succeed = PushObject.ios_apns_push(nickname='', app_bundle_id=gateway_push['app_bundle_id'], token_val=gateway_push['token_val'], n_time=n_time, event_type=0, msg_title=title, msg_text=msg, launch_image=icon_link) # gcm elif gateway_push['push_type'] == 1: if icon_link is None: icon_link = '' push_succeed = PushObject.android_fcm_push(nickname='', app_bundle_id=gateway_push['app_bundle_id'], token_val=gateway_push['token_val'], n_time=n_time, event_type=0, msg_title=title, msg_text=msg, image=icon_link) # 华为 elif gateway_push['push_type'] == 3: huawei_push_object = HuaweiPushObject() push_succeed = huawei_push_object.\ send_push_notify_message(token_val=gateway_push['token_val'], msg_title=title, msg_text=msg, n_time=n_time, image_url=icon_link) # 推送成功,写入系统消息 if push_succeed: SysMsgModel.objects.create(userID_id=gateway_push_qs['user_id'], title=title, msg=msg, addTime=n_time, updTime=n_time) CUSTOMIZED_PUSH_LOGGER.info('customized_push_id:{}推送完成'.format(kwargs['id']))