import os import sys import django BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bigdataAPI.settings') django.setup() import pymysql import pymongo import ast import datetime from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED from django.conf import settings from apps.IOTCard.models import PlatSimInfo from utils.utils import GetSIMInfo, DeviceInfoUtils class SIMUpdate(object): def __init__(self,deviceId,iccid,device_type,platform) -> None: self.deviceId = deviceId self.iccid = iccid self.device_type = device_type self.platform = platform def zhuban_sim(self): """更新主板卡,即设备读取卡""" if self.sim_verify() == False: return self.__update(input_type=1) def photo_sim(self): """更新图片卡,即人为录入卡""" if self.sim_verify() == False: return self.__update(input_type=2) def sim_verify(self): """卡号校验""" try: card_value = int(self.iccid) except: card_value = 1 if self.iccid and self.iccid.startswith("12345") == False and (len(self.iccid) > 18 and len(self.iccid) <= 20) and card_value != 0: return True else: return False def __update(self,input_type): sim_query = PlatSimInfo.objects.filter(deviceId=self.deviceId,input_type=input_type) if sim_query: sim_obj = sim_query[0] if sim_obj.simId == self.iccid and sim_obj.account_status in ["已销卡","销号"]: return sim_operators,account_status,active_date,data_plan,data_usage,data_balance,expiry_date = GetSIMInfo(self.iccid).get_sim_info() sim_obj.simId = self.iccid sim_obj.sim_operators = sim_operators sim_obj.platform = self.platform sim_obj.account_status = account_status sim_obj.active_date = active_date sim_obj.data_plan = data_plan sim_obj.data_usage = data_usage sim_obj.data_balance = data_balance sim_obj.expiry_date = expiry_date sim_obj.upl_time = datetime.datetime.now() sim_obj.save() else: sim_operators,account_status,active_date,data_plan,data_usage,data_balance,expiry_date = GetSIMInfo(self.iccid).get_sim_info() PlatSimInfo.objects.create( simId = self.iccid, sim_operators = sim_operators, input_type = input_type, deviceId = self.deviceId, device_type = self.device_type, platform = self.platform, account_status = account_status, active_date = active_date, data_plan = data_plan, data_usage = data_usage, data_balance = data_balance, expiry_date = expiry_date ) class SQ_SIMUpdate(object): def __init__(self) -> None: self.sq_config = { 'host': '172.16.220.3', 'port': 3306, 'user': 'yfwlw', 'password': 'sql_yfkj_6019', 'db': 'yfwlw', 'charset': 'utf8mb4', 'cursorclass': pymysql.cursors.DictCursor, } self.connection = pymysql.connect(**self.sq_config) self.cursor = self.connection.cursor() def sql_ping(self): try: self.connection.ping() except: self.connection = pymysql.connect(**self.sq_config) self.cursor = self.connection.cursor() def scd_sim(self): self.sql_ping() self.cursor.execute("SELECT equip_id_id,scd_status FROM AppInfoManage_scdstatus") scd_cursor = self.cursor.fetchall() for i in scd_cursor: device_id = i["equip_id_id"] scd_status = i["scd_status"] equip_status = ast.literal_eval(scd_status) iccid = equip_status.get("iccid","") device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1) if device_info and device_info[0]["plat"]=="四情平台": SIMUpdate(deviceId=device_id,iccid=iccid,device_type="杀虫灯",platform=1).zhuban_sim() def cbd_sim(self): self.sql_ping() self.cursor.execute("SELECT equip_id_id,cbd_status,simid FROM AppInfoManage_cbdstatus;") cbd_cursor = self.cursor.fetchall() for i in cbd_cursor: device_id = i["equip_id_id"] cbd_status = i["cbd_status"] photo_iccid = i["simid"] equip_status = ast.literal_eval(cbd_status) zhuban_iccid = equip_status.get("iccid","") device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1) if device_info and device_info[0]["plat"]=="四情平台": SIMUpdate(deviceId=device_id,iccid=zhuban_iccid,device_type="测报灯",platform=1).zhuban_sim() if photo_iccid: SIMUpdate(deviceId=device_id,iccid=photo_iccid,device_type="测报灯",platform=1).photo_sim() def xycb_sim(self): self.sql_ping() self.cursor.execute("SELECT equip_id_id,ybq_status FROM AppInfoManage_ybqstatus;") xycb_cursor = self.cursor.fetchall() for i in xycb_cursor: device_id = i["equip_id_id"] xycb_status = i["ybq_status"] equip_status = ast.literal_eval(xycb_status) iccid = equip_status.get("iccid","") device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1) if device_info and device_info[0]["plat"]=="四情平台": SIMUpdate(deviceId=device_id,iccid=iccid,device_type="性诱测报",platform=1).zhuban_sim() def qxz_sim(self): self.sql_ping() self.cursor.execute("SELECT equip_id_id,iccid FROM AppInfoManage_qxz_base_info;") qxz_cursor = self.cursor.fetchall() for i in qxz_cursor: device_id = i["equip_id_id"] iccid = i["iccid"] device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1) if device_info and device_info[0]["plat"]=="四情平台": SIMUpdate(deviceId=device_id,iccid=iccid,device_type="气象站",platform=1).zhuban_sim() def bzy_sim(self): self.sql_ping() self.cursor.execute("SELECT equip_id_id,bzy_status,simid FROM AppInfoManage_bzystatus;") bzy_cursor = self.cursor.fetchall() for i in bzy_cursor: device_id = i["equip_id_id"] bzy_status = i["bzy_status"] photo_iccid = i["simid"] equip_status = ast.literal_eval(bzy_status) zhuban_iccid = equip_status.get("iccid","") device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1) if device_info and device_info[0]["plat"]=="四情平台": SIMUpdate(deviceId=device_id,iccid=zhuban_iccid,device_type="孢子仪",platform=1).zhuban_sim() if photo_iccid: SIMUpdate(deviceId=device_id,iccid=photo_iccid,device_type="孢子仪",platform=1).photo_sim() def run(self): self.scd_sim() print("四情杀虫灯更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) self.cbd_sim() print("四情测报灯更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) self.xycb_sim() print("四情性诱测报更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) self.qxz_sim() print("四情气象站更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) self.bzy_sim() print("四情孢子仪更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) self.cursor.close() self.connection.close() class BD_SIMUpdate(object): def __init__(self) -> None: config = settings.CONFIG["bigdatamongo"] self.host, self.port = config['host'], config['port'] self.user, self.password = config['user'], config['pwd'] self.client = pymongo.MongoClient(host=self.host, port=self.port, username=self.user, password=self.password) self.db = self.client.smartfarming self.device_collection = self.db.sa_device self.scd_collection = self.db.sa_device_scd_data self.cbd_collection = self.db.sa_device_cbd_data self.xycb_collection = self.db.sa_device_xycb_data self.qxz_collection = self.db.sa_qxz_base_info self.bzy_collection = self.db.sa_device_bzy_data def mongo_ping(self): try: self.client.admin.command('ping') except: self.client = pymongo.MongoClient(host=self.host, port=self.port, username=self.user, password=self.password) self.db = self.client.smartfarming self.device_collection = self.db.sa_device self.scd_collection = self.db.sa_device_scd_data self.cbd_collection = self.db.sa_device_cbd_data self.xycb_collection = self.db.sa_device_xycb_data self.qxz_collection = self.db.sa_qxz_base_info self.bzy_collection = self.db.sa_device_bzy_data def device_list(self, type_id): device_list_cursor = self.device_collection.find( filter={ "device_type_id": type_id }, projection={ "_id": False, "d_id": "$id", "device_id": "$device_id", "simid": "$simid" } ) if not device_list_cursor: device_list_cursor = [] return device_list_cursor def scd_sim(self): self.mongo_ping() scd_list = self.device_list(type_id=2) for i in scd_list: d_id = i["d_id"] device_id = i["device_id"] device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1) if device_info and device_info[0]["plat"]=="大数据平台": scd_data_cursor = self.scd_collection.find_one( filter={ "device_id": d_id }, projection={ "_id": False, "device_data": "$device_data" }, sort=[ ('addtime', pymongo.DESCENDING) ] ) if scd_data_cursor: device_data = ast.literal_eval(scd_data_cursor["device_data"]) iccid = device_data.get("iccid","") SIMUpdate(deviceId=device_id,iccid=iccid,device_type="杀虫灯",platform=2).zhuban_sim() def cbd_sim(self): self.mongo_ping() cbd_list = self.device_list(type_id=3) for i in cbd_list: d_id = i["d_id"] device_id = i["device_id"] photo_iccid = i["simid"] device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1) if device_info and device_info[0]["plat"]=="大数据平台": cbd_data_cursor = self.cbd_collection.find_one( filter={ "device_id": d_id }, projection={ "_id": False, "device_data": "$device_data" }, sort=[ ('addtime', pymongo.DESCENDING) ] ) if cbd_data_cursor: device_data = ast.literal_eval(cbd_data_cursor["device_data"]) zhuban_iccid = device_data.get("iccid","") SIMUpdate(deviceId=device_id,iccid=zhuban_iccid,device_type="测报灯",platform=2).zhuban_sim() if photo_iccid: SIMUpdate(deviceId=device_id,iccid=photo_iccid,device_type="测报灯",platform=2).photo_sim() def xycb_sim(self): self.mongo_ping() xycb_list = self.device_list(type_id=4) for i in xycb_list: d_id = i["d_id"] device_id = i["device_id"] device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1) if device_info and device_info[0]["plat"]=="大数据平台": xycb_data_cursor = self.xycb_collection.find_one( filter={ "device_id": d_id }, projection={ "_id": False, "device_data": "$device_data" }, sort=[ ('addtime', pymongo.DESCENDING) ] ) if xycb_data_cursor: device_data = ast.literal_eval(xycb_data_cursor["device_data"]) iccid = device_data.get("iccid","") SIMUpdate(deviceId=device_id,iccid=iccid,device_type="性诱测报",platform=2).zhuban_sim() def qxz_sim(self): self.mongo_ping() qxz_list_cursor = self.qxz_collection.find( filter={}, projection={ "_id": False, "device_id": "$device_id", "iccid": "$iccid" }, ) if qxz_list_cursor: for i in qxz_list_cursor: device_id = i["device_id"] iccid = i["iccid"] device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1) if device_info and device_info[0]["plat"]=="大数据平台": SIMUpdate(deviceId=device_id,iccid=iccid,device_type="气象站",platform=2).zhuban_sim() def bzy_sim(self): self.mongo_ping() bzy_list = self.device_list(type_id=7) for i in bzy_list: d_id = i["d_id"] device_id = i["device_id"] photo_iccid = i["simid"] device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1) if device_info and device_info[0]["plat"]=="大数据平台": bzy_data_cursor = self.bzy_collection.find_one( filter={ "device_id": d_id }, projection={ "_id": False, "device_data": "$device_data" }, sort=[ ('addtime', pymongo.DESCENDING) ] ) if bzy_data_cursor: device_data = ast.literal_eval(bzy_data_cursor["device_data"]) zhuban_iccid = device_data.get("iccid","") SIMUpdate(deviceId=device_id,iccid=zhuban_iccid,device_type="孢子仪",platform=2).zhuban_sim() if photo_iccid: SIMUpdate(deviceId=device_id,iccid=photo_iccid,device_type="孢子仪",platform=2).photo_sim() def run(self): self.scd_sim() print("大数据杀虫灯更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) self.cbd_sim() print("大数据测报灯更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) self.xycb_sim() print("大数据性诱测报更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) self.qxz_sim() print("大数据气象站更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) self.bzy_sim() print("大数据孢子仪更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) if __name__ == "__main__": print("SIM卡信息开始更新----------%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) Execution_POOL= ThreadPoolExecutor(max_workers=2) all_tasks = [ Execution_POOL.submit(SQ_SIMUpdate().run), Execution_POOL.submit(BD_SIMUpdate().run) ] wait(all_tasks, return_when=ALL_COMPLETED) # BD_SIMUpdate().run() print("SIM卡信息更新完毕----------%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) print("") print("")