notify_dealer_device_expired.py 2.4 KB

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