update_device_sim_info_from_simdb.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. # -*- coding: utf-8 -*-
  2. #!/usr/bin/env python
  3. import threading
  4. import uuid,os
  5. import simplejson as json
  6. import sys,time
  7. import datetime
  8. PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..')
  9. sys.path.insert(0, PROJECT_ROOT)
  10. os.environ.update({"DJANGO_SETTINGS_MODULE": "configs.production"})
  11. import django
  12. django.setup()
  13. from script.base import init_env, get_logger
  14. logger = get_logger(__name__)
  15. from apps.web.device.models import SIMCard,Device
  16. from apilib.utils_datetime import to_datetime
  17. from apps.web.dealer.models import DealerRechargeRecord
  18. from apps.web.constant import Const
  19. import datetime
  20. #sim卡的全同步脚本
  21. logger.info('start update_device_sim_info_from_simdb ......... ')
  22. objs = SIMCard.objects.filter(supplier__in = ['tianyu'],expireTime__gte = datetime.datetime.now()-datetime.timedelta(days = 90)) # 有些久远过期的设备可能也包含进来,为防止万一,包括进来也不要紧
  23. simDict = {}
  24. for obj in objs:
  25. if not obj.expireTime:
  26. continue
  27. strTime = obj.expireTime.strftime(Const.DATE_FMT)
  28. if simDict.has_key(strTime):
  29. simDict[strTime].append(str(obj.iccid).lower())
  30. simDict[strTime].append(str(obj.iccid).upper())
  31. else:
  32. simDict[strTime] = [str(obj.iccid).lower(),str(obj.iccid).upper()]
  33. #把这个月充值的设备的状态统一改回来,否则用户充值了,系统还会让别人充值
  34. devNos1 = []
  35. startTime = to_datetime('2022-04-01 00:00:00')
  36. endTime = to_datetime('2022-05-12 00:00:00')
  37. objs = DealerRechargeRecord.objects.filter(finishedTime__gte = startTime,finishedTime__lte = endTime,status = 'Paid')
  38. for obj in objs:
  39. if 'API' in obj.name:
  40. continue
  41. for item in obj.items:
  42. if 'devNo' not in item:
  43. print obj.id
  44. devNos1.append(item['devNo'])
  45. iccids1 = []
  46. for dev in Device.get_collection().find({'devNo':{'$in':devNos1}},{'iccid':1}):
  47. if 'iccid' not in dev:
  48. print '!!!!!!!!!!!!!!!!!!!!!!!',dev['_id']
  49. continue
  50. iccids1.append(dev['iccid'])
  51. setIccid1 = set(iccids1)
  52. for strTime,iccids in simDict.items():
  53. tmTime = to_datetime(strTime + ' 00:00:00')
  54. iccids2 = list(set(iccids) -setIccid1 )
  55. Device.get_collection().update({'iccid':{'$in':iccids2}},{'$set':{'simExpireDate':tmTime,'simStatus':'updated'}},multi=True)
  56. devNos = [obj.devNo for obj in Device.objects.filter(iccid__in = iccids2).only('devNo')]
  57. Device.invalid_many_device_cache(devNos)
  58. print 'finished,time=%s' % strTime
  59. logger.info('finished update_device_sim_info_from_simdb')