readdata_amro.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465
  1. import ast
  2. import pickle
  3. from bs4 import BeautifulSoup
  4. import amro_progress
  5. #张翔B
  6. import os
  7. import time
  8. import random
  9. date_list =['2023-02-01', '2023-02-02', '2023-02-05', '2023-02-04', '2023-02-08', '2023-02-09', '2023-02-10',
  10. '2023-02-12', '2023-02-13', '2023-02-14', '2023-02-16', '2023-02-17', '2023-02-18', '2023-02-20',
  11. ]
  12. part1 =['陈尚',
  13. '石常林',
  14. '谭文强',
  15. '张祖文',
  16. '林世鹏',
  17. '徐培昊',
  18. '张杨第',
  19. '肖兴虎',
  20. '李南',#李南
  21. '王瑁',
  22. '郭子豪',
  23. '宋朱陶',
  24. '李洪洋',
  25. '胡陈文焕',
  26. '张潇爽',
  27. '那超']
  28. #任轩宇
  29. part2 =['周凯',
  30. '雷一鸣',
  31. '符颖奇',
  32. '谢明杰',
  33. '谢友为',
  34. '叶林青',
  35. '陈浠平',
  36. '王文智',
  37. '杨宜欣',
  38. '权志勤',
  39. '陈思嘉B',
  40. '陶彦桥',
  41. '吴昕阳',
  42. '李俊峰',
  43. '李成斌',
  44. '张礼雍']
  45. #于冬雪
  46. part3 =[
  47. '黄立博',
  48. '孙伟C',
  49. '任悍',
  50. '张良', #张良A
  51. '孙胜涛',
  52. '金星宇',
  53. '滕昭科',
  54. '陶柏旭',
  55. '谢德成',
  56. '雷扬',
  57. '杨国晟',
  58. '王勇I',
  59. '王思捷',
  60. '汤其秋',
  61. '张路平',
  62. ]
  63. nameAll = part1+part2+part3
  64. def getAllData(path):
  65. tasktype = {"AP": "航前", "TR": "短停", "AF": "航后"}
  66. keyList = ['WXRY', 'TA', 'TD', 'FLIGHT_NO', 'ACTYPE', 'ARR_CH1', 'DEP_CH1', 'BAY', 'FXRY', 'ENG_TYPE', 'ACNO',
  67. 'TASKTYPE', 'REMARK_BUSINESS']
  68. with open(path,'r', encoding='utf-8') as f:
  69. text = f.read()
  70. data = ast.literal_eval(text)
  71. uselly = data['data']
  72. dic = {}
  73. number = 0
  74. for key in uselly:
  75. number +=1
  76. bay = 'BAY'
  77. for kl in keyList:
  78. if kl not in key:
  79. if kl == bay:
  80. # print(key)
  81. bay = 'BAY_2'
  82. if key[bay] == '':
  83. bay = 'BAY_1'
  84. # print(bay)
  85. else:
  86. key[kl] = ''
  87. # print(key[kl])
  88. try:
  89. dic[number] = {'FX':'{},{}'.format(key['FXRY'],key['WXRY']),'bay':'{}'.format(key[bay]),
  90. 'bnum':'{}'.format(key['ACNO']), 'tasktype':'{}'.format(tasktype[key['TASKTYPE']]),
  91. 'MODIFY_TIME':'{}'.format(key['MODIFY_TIME'])}
  92. except KeyError as e:
  93. print(e)
  94. #print(dic)
  95. return dic
  96. def dataprocess():
  97. dic_list = []
  98. new_data = []
  99. for _, _, name in os.walk('./hb'):
  100. for i in name:
  101. #print(os.path.join('hb', i))
  102. dic = getAllData(os.path.join('hb', i))
  103. dic_list.append(dic)
  104. for dic in dic_list:
  105. #print(dic)
  106. flag = 0
  107. for key in dic:
  108. subdata = ['','','','']
  109. # print(dic[key])
  110. lr = ''
  111. ltype = ''
  112. lbay = ''
  113. lbnum = ''
  114. ltime = ''
  115. for i in dic[key]:
  116. if i == 'FX':
  117. flag = 0
  118. nameList = dic[key][i].split(',')
  119. for n in nameList:
  120. if n in nameAll:
  121. flag = 1
  122. else:
  123. flag = 0
  124. if flag == 1:
  125. if i == 'FX':
  126. lr = dic[key][i]
  127. elif i == 'tasktype':
  128. ltype = dic[key][i]
  129. elif i == 'bnum':
  130. lbnum = "B-{}".format(dic[key][i])
  131. elif i == 'MODIFY_TIME':
  132. ntime = time.strptime(dic[key][i], "%Y-%m-%d %H:%M:%S")
  133. ltime="{}.{}.{}".format(ntime[0], ntime[1], ntime[2])
  134. else:
  135. lbay = dic[key][i]
  136. if ltime!='':
  137. if len(lbay)>2 and (lbay[0]=='1' or lbay[0]=='2' or lbay[0]=='6'):
  138. ldic={}
  139. ldic['时间']=ltime
  140. ldic['类型'] = ltype
  141. ldic['人员'] = lr
  142. ldic['机号'] = lbnum
  143. ldic['机位'] = lbay
  144. new_data.append(ldic)
  145. #print("时间:{},类型:{},人员:{},机号:{},机位:{}".format(ltime,ltype,lr,lbnum,lbay))
  146. #print(new_data)
  147. return new_data
  148. def chooseData():
  149. hq = []
  150. chq = []
  151. dt = []
  152. cdt = []
  153. hh = []
  154. chh = []
  155. data = dataprocess()
  156. for i in data:
  157. if i['类型'] == '航前':
  158. hq.append(i)
  159. if i['类型'] == '航后':
  160. hh.append(i)
  161. if i['类型'] == '短停':
  162. dt.append(i)
  163. print(len(hq),len(dt),len(hh))
  164. if len(hq)<10:
  165. chq=hq
  166. else:
  167. for i in range(10):
  168. num = random.randint(1,len(hq)-1)
  169. #print(num)
  170. #print(hq[num])
  171. chq.append(hq[num])
  172. if len(dt)<10:
  173. cdt = dt
  174. else:
  175. for i in range(10):
  176. num = random.randint(1,len(dt)-1)
  177. #print(num)
  178. #print(dt[num])
  179. cdt.append(dt[num])
  180. if len(hh)<10:
  181. chh = hh
  182. else:
  183. for i in range(10):
  184. num = random.randint(1,len(hh)-1)
  185. #print(num)
  186. #print(hh[num])
  187. chh.append(hh[num])
  188. # print(chq)
  189. # print(len(chq))
  190. return chq,cdt,chh
  191. def getDataFromAmro(*args):
  192. if args!=():
  193. AMRO = args[0]
  194. else:
  195. AMRO = amro_progress.amro()
  196. AMRO.openAmro()
  197. AMRO.openMaintitle("航线维修")
  198. # AMRO.openSubTitle("工作指令(WO)管理")
  199. AMRO.openSubTitle("航班动态")
  200. data_all_list = []
  201. data_list = AMRO.getFlightData()
  202. data_all_list.append(data_list)
  203. print(data_all_list)
  204. # for i in range(len(date_list)):
  205. #
  206. # with open('flightDate{}.pkl'.format(date_list[i]), 'wb') as f:
  207. # pickle.dump(data_all_list[i], f, pickle.HIGHEST_PROTOCOL)
  208. def searchData(amro):
  209. data = amro.searchFlight()
  210. print('searchFLight---')
  211. print(data)
  212. return data
  213. def loadData(*args):
  214. if args != ():
  215. with open('./static/flightdata/flight{}.txt'.format(args[0]),'rb') as f:
  216. flightDataContent = f.read().decode('utf-8')
  217. else:
  218. with open('./static/flightdata/flight{}.txt'.format(time.strftime("%Y%m%d", time.localtime())),'rb')as f:
  219. flightDataContent = f.read().decode('utf-8')
  220. soup = BeautifulSoup(flightDataContent, "html5lib")
  221. flight_list = []
  222. for idx, tr in enumerate(soup.find_all('tr')):
  223. tds = tr.find_all('td')
  224. temp_list = []
  225. for i in tds:
  226. try:
  227. temp = i.contents[0].contents[0].contents[0]
  228. except:
  229. try:
  230. temp = i.contents[0].contents[0]
  231. except:
  232. temp = ""
  233. temp_list.append(temp)
  234. flight_list.append({
  235. "机号": temp_list[0],
  236. "机型": temp_list[1],
  237. "发动机": temp_list[2],
  238. "航班号": temp_list[3],
  239. "进港起飞": temp_list[4],
  240. "进港到达时间": temp_list[5],
  241. "航站": temp_list[6],
  242. "离港起飞时间": temp_list[7],
  243. "离港到达": temp_list[8],
  244. "进港机位": temp_list[9],
  245. "离港机位": temp_list[10],
  246. "保留": temp_list[11],
  247. "任务类型": temp_list[12],
  248. "随机": temp_list[13],
  249. "维修人员": temp_list[14],
  250. "放行人员": temp_list[15],
  251. "工作状态": temp_list[16],
  252. "工作状态时间": temp_list[17],
  253. "重要航班": temp_list[18],
  254. "备降/返航": temp_list[19],
  255. "延误": temp_list[20],
  256. "附加信息": temp_list[21],
  257. })
  258. print(flight_list)
  259. # print(flight_list)
  260. # print(data_all)
  261. return flight_list
  262. def changedata(flight_list):
  263. data = {}
  264. for i in flight_list:
  265. if i['离港起飞时间'].find('实') == -1:
  266. if i['任务类型'] == '航前':
  267. if i['离港机位'] !='':
  268. if i['离港机位'] in data:
  269. print('航前重复机位:{}'.format(i['离港机位']))
  270. data[i['离港机位']]={"bnum":i['机号'], 'actype':i['机型'], 'engtype':i["发动机"],
  271. 'tasktype':i['任务类型'], 'timein':i['进港到达时间'],'timeout':i['离港起飞时间'],
  272. 'ftnum':i['航班号'], 'pos1':i['进港起飞'], 'pos2':i["离港到达"],
  273. 'FX':i["放行人员"], 'WX':i["维修人员"], 'remark':i["附加信息"]}
  274. else:
  275. if i['进港机位'] != '':
  276. if i['进港机位'] in data:
  277. print('重复机位:{}'.format(i['进港机位']))
  278. data[i['进港机位']] = {"bnum": i['机号'], 'actype': i['机型'], 'engtype': i["发动机"],
  279. 'tasktype': i['任务类型'], 'timein': i['进港到达时间'], 'timeout': i['离港起飞时间'],
  280. 'ftnum': i['航班号'], 'pos1': i['进港起飞'], 'pos2': i["离港到达"],
  281. 'FX': i["放行人员"], 'WX': i["维修人员"], 'remark': i["附加信息"]}
  282. print(data)
  283. for key in data:
  284. print(key,data[key])
  285. return data
  286. def changeAlldata(flight_list):
  287. dic = {}
  288. number = 0
  289. for i in flight_list:
  290. number +=1
  291. if i["任务类型"]=='航前':
  292. dic[number] = {'bay':'{}'.format(i["离港机位"]),'bnum': '{}'.format(i["机号"]),
  293. 'actype': '{}'.format(i["机型"]), 'engtype': '{}'.format(i["发动机"]),
  294. 'tasktpye': '{}'.format(i["任务类型"]),'timein':'{}'.format(i['进港到达时间']),
  295. 'timeout':'{}'.format(i['离港起飞时间']), 'ftnum':'{}'.format(i['航班号']),
  296. 'pos1':'{}'.format(i['进港起飞']),'pos2':'{}'.format(i['离港到达']),'FX':'{}'.format(i['放行人员']),
  297. 'WX':'{}'.format(i['维修人员']),'remark':'{}'.format(i['附加信息']),
  298. }
  299. else:
  300. dic[number] = {'bay': '{}'.format(i["进港机位"]), 'bnum': '{}'.format(i["机号"]),
  301. 'actype': '{}'.format(i["机型"]), 'engtype': '{}'.format(i["发动机"]),
  302. 'tasktpye': '{}'.format(i["任务类型"]), 'timein': '{}'.format(i['进港到达时间']),
  303. 'timeout': '{}'.format(i['离港起飞时间']), 'ftnum': '{}'.format(i['航班号']),
  304. 'pos1': '{}'.format(i['进港起飞']), 'pos2': '{}'.format(i['离港到达']), 'FX': '{}'.format(i['放行人员']),
  305. 'WX': '{}'.format(i['维修人员']), 'remark': '{}'.format(i['附加信息']),
  306. }
  307. return dic
  308. def chooseData2():
  309. data = loadData()
  310. flag = 0
  311. hq = []
  312. dt = []
  313. hh = []
  314. for i in data:
  315. for ii in i:
  316. if ii['任务类型'] == '航前':
  317. wxry = ii['维修人员'].split(',')
  318. fxry = ii['放行人员'].split(',')
  319. ry = wxry+fxry
  320. for name in ry:
  321. if name in nameAll:
  322. flag =1
  323. else:
  324. flag =0
  325. break
  326. if flag ==1 :
  327. hq.append(ii)
  328. if ii['任务类型'] == '短停':
  329. wxry = ii['维修人员'].split(',')
  330. fxry = ii['放行人员'].split(',')
  331. ry = wxry+fxry
  332. for name in ry:
  333. if name in nameAll:
  334. flag =1
  335. else:
  336. flag =0
  337. break
  338. if flag ==1 :
  339. dt.append(ii)
  340. if ii['任务类型'] == '航后':
  341. wxry = ii['维修人员'].split(',')
  342. fxry = ii['放行人员'].split(',')
  343. ry = wxry+fxry
  344. for name in ry:
  345. if name in nameAll:
  346. flag =1
  347. else:
  348. flag =0
  349. break
  350. if flag ==1 :
  351. hh.append(ii)
  352. print(hq)
  353. print(len(hq))
  354. print(dt)
  355. print(len(dt))
  356. print(hh)
  357. print(len(hh))
  358. return hq, dt, hh
  359. def selectData():
  360. hq, dt, hh = chooseData2()
  361. new_hq = []
  362. new_hq_pool = []
  363. new_dt = []
  364. new_dt_pool = []
  365. new_hh = []
  366. new_hh_pool = []
  367. for i in range(10):
  368. flag = True
  369. while flag:
  370. num = random.randint(1,len(hq)-1)
  371. if num not in new_hq_pool:
  372. new_hq_pool.append(num)
  373. flag = False
  374. for i in range(10):
  375. flag = True
  376. while flag:
  377. num = random.randint(1, len(dt) - 1)
  378. if num not in new_dt_pool:
  379. new_dt_pool.append(num)
  380. flag = False
  381. for i in range(10):
  382. flag = True
  383. while flag:
  384. num = random.randint(1, len(hh) - 1)
  385. if num not in new_hh_pool:
  386. new_hh_pool.append(num)
  387. flag = False
  388. print(new_hq_pool)
  389. print(new_dt_pool)
  390. print(new_hh_pool)
  391. for i in new_hq_pool:
  392. new_hq.append(hq[i])
  393. for i in new_dt_pool:
  394. new_dt.append(dt[i])
  395. for i in new_hh_pool:
  396. new_hh.append(hh[i])
  397. print(new_hq)
  398. print(new_dt)
  399. print(new_hh)
  400. return new_hq, new_dt, new_hh
  401. if __name__ == '__main__':
  402. import sys
  403. #sys.setrecursionlimit(1000000)
  404. AMRO = amro_progress.amro()
  405. AMRO.quitWeb()
  406. searchData(AMRO)
  407. #selectData()
  408. #l = loadData()
  409. #changedata(l)
  410. for i in range(5):
  411. time.sleep(10)
  412. searchData(AMRO)