# -*- coding: utf-8 -*- # !/usr/bin/env python import simplejson as json import os,sys from typing import Dict PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..') sys.path.insert(0, PROJECT_ROOT) os.environ.update({"DJANGO_SETTINGS_MODULE": "configs.production"}) import django django.setup() from apilib.utils_datetime import to_datetime from django.conf import settings from apps.web.device.models import Device from apps.web.dealer.models import Dealer from apps.web.agent.models import Agent from cytoolz import groupby from bson.objectid import ObjectId from apps.web.core.messages.sms import SMSSender from celery.utils.log import get_task_logger logger = get_task_logger(__name__) startTime = to_datetime('2021-09-01 00:00:00') endTime = to_datetime('2021-10-01 00:00:00') devices = Device.get_sim_expire_notify_devices() dealer_device_map = groupby('ownerId', list(devices)) dealer_map = { dealer['_id']: dealer for dealer in Dealer.get_collection() .find({'_id': {'$in': [ObjectId(id_) for id_ in dealer_device_map.keys()]}}, {'username': 1, 'agentId': 1, 'smsVendor': 1}) } # type: Dict[ObjectId, dict] agent_product_map = { agent['_id']: agent.get('productName', '').encode('utf-8') for agent in Agent.get_collection() .find({'_id': {'$in': [ObjectId(_['agentId']) for _ in dealer_map.values()]}}, {'productName': 1}) } for id_, dealer in dealer_map.iteritems(): logger.debug('sending SIM expired message to Dealer(phone=%s)' % (dealer['username'],)) sms_sender = SMSSender() response = sms_sender.send(phoneNumber = dealer['username'], templateName="SMS_NOTIFY_EXPIRED_DEVICE_TEMPLATEID", msg = u'请您务必重视,我们将于今天提交充值的卡到运营商,设备到期未充值的,系统会进行拆机处理,因为恰逢十一放假,为了防止运营商假期处理不及时,影响您的正常运营,我们建议您今天完成到期续费。'.encode( 'utf-8'), productName = agent_product_map[ObjectId(dealer['agentId'])]) logger.info('sending sim expired alert to dealer(phone=%s) result=%s' % (dealer['username'], json.dumps(response),)) if not response['result']: logger.error('send sms to dealer failed, error=%s' % json.dumps(response))