# -*- coding: utf-8 -*- #!/usr/bin/env python import threading import uuid,os import simplejson as json import sys,time import datetime 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 script.base import init_env, get_logger logger = get_logger(__name__) from apps.web.device.models import SIMCard,Device from apilib.utils_datetime import to_datetime from apps.web.dealer.models import DealerRechargeRecord from apps.web.constant import Const import datetime #sim卡的全同步脚本 logger.info('start update_device_sim_info_from_simdb ......... ') objs = SIMCard.objects.filter(supplier__in = ['tianyu'],expireTime__gte = datetime.datetime.now()-datetime.timedelta(days = 90)) # 有些久远过期的设备可能也包含进来,为防止万一,包括进来也不要紧 simDict = {} for obj in objs: if not obj.expireTime: continue strTime = obj.expireTime.strftime(Const.DATE_FMT) if simDict.has_key(strTime): simDict[strTime].append(str(obj.iccid).lower()) simDict[strTime].append(str(obj.iccid).upper()) else: simDict[strTime] = [str(obj.iccid).lower(),str(obj.iccid).upper()] #把这个月充值的设备的状态统一改回来,否则用户充值了,系统还会让别人充值 devNos1 = [] startTime = to_datetime('2022-04-01 00:00:00') endTime = to_datetime('2022-05-12 00:00:00') objs = DealerRechargeRecord.objects.filter(finishedTime__gte = startTime,finishedTime__lte = endTime,status = 'Paid') for obj in objs: if 'API' in obj.name: continue for item in obj.items: if 'devNo' not in item: print obj.id devNos1.append(item['devNo']) iccids1 = [] for dev in Device.get_collection().find({'devNo':{'$in':devNos1}},{'iccid':1}): if 'iccid' not in dev: print '!!!!!!!!!!!!!!!!!!!!!!!',dev['_id'] continue iccids1.append(dev['iccid']) setIccid1 = set(iccids1) for strTime,iccids in simDict.items(): tmTime = to_datetime(strTime + ' 00:00:00') iccids2 = list(set(iccids) -setIccid1 ) Device.get_collection().update({'iccid':{'$in':iccids2}},{'$set':{'simExpireDate':tmTime,'simStatus':'updated'}},multi=True) devNos = [obj.devNo for obj in Device.objects.filter(iccid__in = iccids2).only('devNo')] Device.invalid_many_device_cache(devNos) print 'finished,time=%s' % strTime logger.info('finished update_device_sim_info_from_simdb')