sim_info.py 16 KB

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