sim_info.py 16 KB

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