sim_info.py 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  1. import os
  2. import sys
  3. import django
  4. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  5. sys.path.append(BASE_DIR)
  6. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bigdataAPI.settings')
  7. django.setup()
  8. import pymysql
  9. import pymongo
  10. import ast
  11. import datetime
  12. from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED
  13. from django.conf import settings
  14. from apps.IOTCard.models import PlatSimInfo
  15. from utils.utils import GetSIMInfo, DeviceInfoUtils
  16. class SIMUpdate(object):
  17. def __init__(self,deviceId,iccid,device_type,platform) -> None:
  18. self.deviceId = deviceId
  19. self.iccid = iccid
  20. self.device_type = device_type
  21. self.platform = platform
  22. def zhuban_sim(self):
  23. """更新主板卡,即设备读取卡"""
  24. if self.sim_verify() == False:
  25. return
  26. self.__update(input_type=1)
  27. def photo_sim(self):
  28. """更新图片卡,即人为录入卡"""
  29. if self.sim_verify() == False:
  30. return
  31. self.__update(input_type=2)
  32. def sim_verify(self):
  33. """卡号校验"""
  34. try:
  35. card_value = int(self.iccid)
  36. except:
  37. card_value = 1
  38. if self.iccid and self.iccid.startswith("12345") == False and (len(self.iccid) > 18 and len(self.iccid) <= 20) and card_value != 0:
  39. return True
  40. else:
  41. return False
  42. def __update(self,input_type):
  43. sim_query = PlatSimInfo.objects.filter(deviceId=self.deviceId,input_type=input_type)
  44. if sim_query:
  45. sim_obj = sim_query[0]
  46. if sim_obj.simId == self.iccid and sim_obj.account_status in ["已销卡","销号"]:
  47. return
  48. sim_operators,account_status,active_date,data_plan,data_usage,data_balance,expiry_date = GetSIMInfo(self.iccid).get_sim_info()
  49. sim_obj.simId = self.iccid
  50. sim_obj.sim_operators = sim_operators
  51. sim_obj.platform = self.platform
  52. sim_obj.account_status = account_status
  53. sim_obj.active_date = active_date
  54. sim_obj.data_plan = data_plan
  55. sim_obj.data_usage = data_usage
  56. sim_obj.data_balance = data_balance
  57. sim_obj.expiry_date = expiry_date
  58. sim_obj.upl_time = datetime.datetime.now()
  59. sim_obj.save()
  60. else:
  61. sim_operators,account_status,active_date,data_plan,data_usage,data_balance,expiry_date = GetSIMInfo(self.iccid).get_sim_info()
  62. PlatSimInfo.objects.create(
  63. simId = self.iccid,
  64. sim_operators = sim_operators,
  65. input_type = input_type,
  66. deviceId = self.deviceId,
  67. device_type = self.device_type,
  68. platform = self.platform,
  69. account_status = account_status,
  70. active_date = active_date,
  71. data_plan = data_plan,
  72. data_usage = data_usage,
  73. data_balance = data_balance,
  74. expiry_date = expiry_date
  75. )
  76. class SQ_SIMUpdate(object):
  77. def __init__(self) -> None:
  78. self.sq_config = {
  79. 'host': '172.16.220.3',
  80. 'port': 3306,
  81. 'user': 'yfwlw',
  82. 'password': 'sql_yfkj_6019',
  83. 'db': 'yfwlw',
  84. 'charset': 'utf8mb4',
  85. 'cursorclass': pymysql.cursors.DictCursor,
  86. }
  87. self.connection = pymysql.connect(**self.sq_config)
  88. self.cursor = self.connection.cursor()
  89. def sql_ping(self):
  90. try:
  91. self.connection.ping()
  92. except:
  93. self.connection = pymysql.connect(**self.sq_config)
  94. self.cursor = self.connection.cursor()
  95. def scd_sim(self):
  96. self.sql_ping()
  97. self.cursor.execute("SELECT equip_id_id,scd_status FROM AppInfoManage_scdstatus")
  98. scd_cursor = self.cursor.fetchall()
  99. for i in scd_cursor:
  100. device_id = i["equip_id_id"]
  101. scd_status = i["scd_status"]
  102. equip_status = ast.literal_eval(scd_status)
  103. iccid = equip_status.get("iccid","")
  104. device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1)
  105. if device_info and device_info[0]["plat"]=="四情平台":
  106. SIMUpdate(deviceId=device_id,iccid=iccid,device_type="杀虫灯",platform=1).zhuban_sim()
  107. def cbd_sim(self):
  108. self.sql_ping()
  109. self.cursor.execute("SELECT equip_id_id,cbd_status,simid FROM AppInfoManage_cbdstatus;")
  110. cbd_cursor = self.cursor.fetchall()
  111. for i in cbd_cursor:
  112. device_id = i["equip_id_id"]
  113. cbd_status = i["cbd_status"]
  114. photo_iccid = i["simid"]
  115. equip_status = ast.literal_eval(cbd_status)
  116. zhuban_iccid = equip_status.get("iccid","")
  117. device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1)
  118. if device_info and device_info[0]["plat"]=="四情平台":
  119. SIMUpdate(deviceId=device_id,iccid=zhuban_iccid,device_type="测报灯",platform=1).zhuban_sim()
  120. if photo_iccid and photo_iccid != zhuban_iccid:
  121. SIMUpdate(deviceId=device_id,iccid=photo_iccid,device_type="测报灯",platform=1).photo_sim()
  122. def xycb_sim(self):
  123. self.sql_ping()
  124. self.cursor.execute("SELECT equip_id_id,ybq_status FROM AppInfoManage_ybqstatus;")
  125. xycb_cursor = self.cursor.fetchall()
  126. for i in xycb_cursor:
  127. device_id = i["equip_id_id"]
  128. xycb_status = i["ybq_status"]
  129. equip_status = ast.literal_eval(xycb_status)
  130. iccid = equip_status.get("iccid","")
  131. device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1)
  132. if device_info and device_info[0]["plat"]=="四情平台":
  133. SIMUpdate(deviceId=device_id,iccid=iccid,device_type="性诱测报",platform=1).zhuban_sim()
  134. def qxz_sim(self):
  135. self.sql_ping()
  136. self.cursor.execute("SELECT equip_id_id,iccid FROM AppInfoManage_qxz_base_info;")
  137. qxz_cursor = self.cursor.fetchall()
  138. for i in qxz_cursor:
  139. device_id = i["equip_id_id"]
  140. iccid = i["iccid"]
  141. device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1)
  142. if device_info and device_info[0]["plat"]=="四情平台":
  143. SIMUpdate(deviceId=device_id,iccid=iccid,device_type="气象站",platform=1).zhuban_sim()
  144. def bzy_sim(self):
  145. self.sql_ping()
  146. self.cursor.execute("SELECT equip_id_id,bzy_status,simid FROM AppInfoManage_bzystatus;")
  147. bzy_cursor = self.cursor.fetchall()
  148. for i in bzy_cursor:
  149. device_id = i["equip_id_id"]
  150. bzy_status = i["bzy_status"]
  151. photo_iccid = i["simid"]
  152. equip_status = ast.literal_eval(bzy_status)
  153. zhuban_iccid = equip_status.get("iccid","")
  154. device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1)
  155. if device_info and device_info[0]["plat"]=="四情平台":
  156. SIMUpdate(deviceId=device_id,iccid=zhuban_iccid,device_type="孢子仪",platform=1).zhuban_sim()
  157. if photo_iccid and photo_iccid != zhuban_iccid:
  158. SIMUpdate(deviceId=device_id,iccid=photo_iccid,device_type="孢子仪",platform=1).photo_sim()
  159. def run(self):
  160. self.scd_sim()
  161. print("四情杀虫灯更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
  162. self.cbd_sim()
  163. print("四情测报灯更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
  164. self.xycb_sim()
  165. print("四情性诱测报更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
  166. self.qxz_sim()
  167. print("四情气象站更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
  168. self.bzy_sim()
  169. print("四情孢子仪更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
  170. self.cursor.close()
  171. self.connection.close()
  172. class BD_SIMUpdate(object):
  173. def __init__(self) -> None:
  174. config = settings.CONFIG["bigdatamongo"]
  175. self.host, self.port = config['host'], config['port']
  176. self.user, self.password = config['user'], config['pwd']
  177. self.client = pymongo.MongoClient(host=self.host, port=self.port, username=self.user, password=self.password)
  178. self.db = self.client.smartfarming
  179. self.device_collection = self.db.sa_device
  180. self.scd_collection = self.db.sa_device_scd_data
  181. self.cbd_collection = self.db.sa_device_cbd_data
  182. self.xycb_collection = self.db.sa_device_xycb_data
  183. self.qxz_collection = self.db.sa_qxz_base_info
  184. self.bzy_collection = self.db.sa_device_bzy_data
  185. def mongo_ping(self):
  186. try:
  187. self.client.admin.command('ping')
  188. except:
  189. self.client = pymongo.MongoClient(host=self.host, port=self.port, username=self.user, password=self.password)
  190. self.db = self.client.smartfarming
  191. self.device_collection = self.db.sa_device
  192. self.scd_collection = self.db.sa_device_scd_data
  193. self.cbd_collection = self.db.sa_device_cbd_data
  194. self.xycb_collection = self.db.sa_device_xycb_data
  195. self.qxz_collection = self.db.sa_qxz_base_info
  196. self.bzy_collection = self.db.sa_device_bzy_data
  197. def device_list(self, type_id):
  198. device_list_cursor = self.device_collection.find(
  199. filter={
  200. "device_type_id": type_id
  201. },
  202. projection={
  203. "_id": False,
  204. "d_id": "$id",
  205. "device_id": "$device_id",
  206. "simid": "$simid"
  207. }
  208. )
  209. if not device_list_cursor:
  210. device_list_cursor = []
  211. return device_list_cursor
  212. def scd_sim(self):
  213. self.mongo_ping()
  214. scd_list = self.device_list(type_id=2)
  215. for i in scd_list:
  216. d_id = i["d_id"]
  217. device_id = i["device_id"]
  218. device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1)
  219. if device_info and device_info[0]["plat"]=="大数据平台":
  220. scd_data_cursor = self.scd_collection.find_one(
  221. filter={
  222. "device_id": d_id
  223. },
  224. projection={
  225. "_id": False,
  226. "device_data": "$device_data"
  227. },
  228. sort=[
  229. ('addtime', pymongo.DESCENDING)
  230. ]
  231. )
  232. if scd_data_cursor:
  233. device_data = ast.literal_eval(scd_data_cursor["device_data"])
  234. iccid = device_data.get("iccid","")
  235. SIMUpdate(deviceId=device_id,iccid=iccid,device_type="杀虫灯",platform=2).zhuban_sim()
  236. def cbd_sim(self):
  237. self.mongo_ping()
  238. cbd_list = self.device_list(type_id=3)
  239. for i in cbd_list:
  240. d_id = i["d_id"]
  241. device_id = i["device_id"]
  242. photo_iccid = i["simid"]
  243. device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1)
  244. if device_info and device_info[0]["plat"]=="大数据平台":
  245. cbd_data_cursor = self.cbd_collection.find_one(
  246. filter={
  247. "device_id": d_id
  248. },
  249. projection={
  250. "_id": False,
  251. "device_data": "$device_data"
  252. },
  253. sort=[
  254. ('addtime', pymongo.DESCENDING)
  255. ]
  256. )
  257. if cbd_data_cursor:
  258. device_data = ast.literal_eval(cbd_data_cursor["device_data"])
  259. zhuban_iccid = device_data.get("iccid","")
  260. SIMUpdate(deviceId=device_id,iccid=zhuban_iccid,device_type="测报灯",platform=2).zhuban_sim()
  261. if photo_iccid:
  262. SIMUpdate(deviceId=device_id,iccid=photo_iccid,device_type="测报灯",platform=2).photo_sim()
  263. def xycb_sim(self):
  264. self.mongo_ping()
  265. xycb_list = self.device_list(type_id=4)
  266. for i in xycb_list:
  267. d_id = i["d_id"]
  268. device_id = i["device_id"]
  269. device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1)
  270. if device_info and device_info[0]["plat"]=="大数据平台":
  271. xycb_data_cursor = self.xycb_collection.find_one(
  272. filter={
  273. "device_id": d_id
  274. },
  275. projection={
  276. "_id": False,
  277. "device_data": "$device_data"
  278. },
  279. sort=[
  280. ('addtime', pymongo.DESCENDING)
  281. ]
  282. )
  283. if xycb_data_cursor:
  284. device_data = ast.literal_eval(xycb_data_cursor["device_data"])
  285. iccid = device_data.get("iccid","")
  286. SIMUpdate(deviceId=device_id,iccid=iccid,device_type="性诱测报",platform=2).zhuban_sim()
  287. def qxz_sim(self):
  288. self.mongo_ping()
  289. qxz_list_cursor = self.qxz_collection.find(
  290. filter={},
  291. projection={
  292. "_id": False,
  293. "device_id": "$device_id",
  294. "iccid": "$iccid"
  295. },
  296. )
  297. if qxz_list_cursor:
  298. for i in qxz_list_cursor:
  299. device_id = i["device_id"]
  300. iccid = i["iccid"]
  301. device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1)
  302. if device_info and device_info[0]["plat"]=="大数据平台":
  303. SIMUpdate(deviceId=device_id,iccid=iccid,device_type="气象站",platform=2).zhuban_sim()
  304. def bzy_sim(self):
  305. self.mongo_ping()
  306. bzy_list = self.device_list(type_id=7)
  307. for i in bzy_list:
  308. d_id = i["d_id"]
  309. device_id = i["device_id"]
  310. photo_iccid = i["simid"]
  311. device_info = DeviceInfoUtils().get_equip_list(d_id=device_id, isfullId=1)
  312. if device_info and device_info[0]["plat"]=="大数据平台":
  313. bzy_data_cursor = self.bzy_collection.find_one(
  314. filter={
  315. "device_id": d_id
  316. },
  317. projection={
  318. "_id": False,
  319. "device_data": "$device_data"
  320. },
  321. sort=[
  322. ('addtime', pymongo.DESCENDING)
  323. ]
  324. )
  325. if bzy_data_cursor:
  326. device_data = ast.literal_eval(bzy_data_cursor["device_data"])
  327. zhuban_iccid = device_data.get("iccid","")
  328. SIMUpdate(deviceId=device_id,iccid=zhuban_iccid,device_type="孢子仪",platform=2).zhuban_sim()
  329. if photo_iccid:
  330. SIMUpdate(deviceId=device_id,iccid=photo_iccid,device_type="孢子仪",platform=2).photo_sim()
  331. def run(self):
  332. # self.scd_sim()
  333. # print("大数据杀虫灯更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
  334. # self.cbd_sim()
  335. # print("大数据测报灯更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
  336. # self.xycb_sim()
  337. # print("大数据性诱测报更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
  338. # self.qxz_sim()
  339. # print("大数据气象站更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
  340. self.bzy_sim()
  341. print("大数据孢子仪更新完毕--%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
  342. if __name__ == "__main__":
  343. print("SIM卡信息开始更新----------%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
  344. # Execution_POOL= ThreadPoolExecutor(max_workers=2)
  345. # all_tasks = [
  346. # Execution_POOL.submit(SQ_SIMUpdate().run),
  347. # Execution_POOL.submit(BD_SIMUpdate().run)
  348. # ]
  349. # wait(all_tasks, return_when=ALL_COMPLETED)
  350. BD_SIMUpdate().run()
  351. print("SIM卡信息更新完毕----------%s"%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
  352. print("")
  353. print("")