| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381 |
- 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 and photo_iccid != zhuban_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 and photo_iccid != zhuban_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 and photo_iccid != zhuban_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 and photo_iccid != zhuban_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)
- print("SIM卡信息更新完毕----------%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
- print("")
- print("")
|