checkworkload_New.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. from .flightDB import flightDB
  2. import datetime
  3. from unitls.LogerinTxt import app_logger
  4. import unitls.baseFunction as baseFunction
  5. from unitls.StaticDataclass import get_dic
  6. newWorkloadLabel=get_dic("newWorkloadLabel")
  7. startimeReDic={"WXJJ":25,"WXAP":100,"WXAF":0,"WXTAF":0,"FXAP":100,"FXAF":0,"FXTAF":0,"FXTR":0,"WXES":35}
  8. endtimeReDic={"WXJJ":10,"WXAP":10,"WXAF":120,"WXTAF":60,"FXAP":10,"FXAF":120,"FXTAF":60,"FXTR":30,"WXES":10}
  9. standvalueReDic={"WXJJ":0.3,"WXES":0.4,"WXAP":0.6,"WXAF":1,"WXTAF":0.8,"FXAP":0.9,"FXAF":1.2,"FXTAF":1,"FXTR":0.3}
  10. #注意,在航后接机,特后前接机需要移除放行,否则会平摊过多分值
  11. def Computer(workload,ids ,start ,end ,bay ,peoples,flightdate,taskid,flighttype,day,workloadinfos,time1,time2,standtime,type,jbry,fx=None):#TIME1 到位时间 TIME2 离开时间 standtime 标准工时,type保障类型
  12. fxpeople=fx.replace("√","") if fx else ""
  13. typedic={"接机勤务":"-1-","送机勤务":"-2-","航前放行":"-3-","航后放行":"-3-","特后前放行":"-3-","短停放行":"-3-","航前维修":"-4-","航后维修":"-5-","特后前维修":"-6-"}
  14. startime = datetime.datetime.strptime(start, "%Y-%m-%d %H:%M:%S")-datetime.timedelta(minutes=time1+1)
  15. if end != "":
  16. endtime = datetime.datetime.strptime(end, "%Y-%m-%d %H:%M:%S")+datetime.timedelta(minutes=time2)
  17. if endtime < datetime.datetime.now():
  18. flightsts = "完工"
  19. endtime_str = '[实]' + endtime.strftime("%Y-%m-%d %H:%M:%S")
  20. elif startime > datetime.datetime.now():
  21. flightsts = "未开始"
  22. endtime_str = '[预]' + endtime.strftime("%Y-%m-%d %H:%M:%S")
  23. else:
  24. flightsts = "进行中"
  25. endtime_str = '[预]' + endtime.strftime("%Y-%m-%d %H:%M:%S")
  26. else:
  27. endtime =datetime.datetime.strptime(start, "%Y-%m-%d %H:%M:%S")+datetime.timedelta(minutes=time2)
  28. endtime_str='[预]'+endtime.strftime("%Y-%m-%d %H:%M:%S")
  29. if startime < datetime.datetime.now():
  30. flightsts = "进行中"
  31. else:
  32. flightsts = "未开始"
  33. costtime = (endtime - startime).total_seconds() / 60
  34. standardcost = (costtime / (time1+time2)) * standtime
  35. peopleslist=peoples.replace("√","").replace(fxpeople,"").split(",")
  36. for people in peopleslist:
  37. single_standardcost = round(standardcost/len(peopleslist),2)
  38. jb = ""
  39. if jbry != "":
  40. if people in jbry:
  41. jb1 = datetime.datetime.strptime(day+" 09:10:00","%Y%m%d %H:%M:%S")
  42. limit = datetime.datetime.strptime(day+" 11:10:00","%Y%m%d %H:%M:%S")
  43. jb2 = datetime.datetime.strptime(day+" 20:40:00","%Y%m%d %H:%M:%S")
  44. if startime < jb1:
  45. endtime = jb1 + datetime.timedelta(minutes=25)
  46. endtime_str = '[实]' + endtime.strftime("%Y-%m-%d %H:%M:%S")
  47. flightsts = "完工"
  48. jb = "交班"
  49. elif limit < startime < jb2:
  50. endtime = jb2+datetime.timedelta(minutes=25)
  51. endtime_str = '[实]' + endtime.strftime("%Y-%m-%d %H:%M:%S")
  52. flightsts = "完工"
  53. jb = "交班"
  54. else:
  55. jb1 = datetime.datetime.strptime(day + " 09:10:00", "%Y%m%d %H:%M:%S")
  56. limit = datetime.datetime.strptime(day+" 11:10:00","%Y%m%d %H:%M:%S")
  57. jb2 = datetime.datetime.strptime(day + " 20:40:00", "%Y%m%d %H:%M:%S")
  58. if startime < jb1:
  59. startime = jb1
  60. jb = "接班"
  61. elif limit < startime < jb2:
  62. startime = jb2
  63. jb = "接班"
  64. if endtime <= startime:
  65. endtime = startime+datetime.timedelta(minutes=30)
  66. if datetime.datetime.now() >= endtime:
  67. flightsts = "完工"
  68. else:
  69. flightsts = "进行中"
  70. id = taskid+typedic[type]+people
  71. if id not in ids and id not in nowids:
  72. nowids.append(id)
  73. #print(nowids)
  74. newdic = {"编号":id,"任务编号":taskid,"航班日期":flightdate,"首次时间":startime,"开始时间":startime,"结束时间":endtime_str,
  75. "机位":bay,"类型":type,"总用时":costtime,"标准工时":single_standardcost,"人员":people,"航班状态":flightsts,'备1':flighttype,"备3": jb}
  76. for i in newWorkloadLabel:
  77. if i not in newdic.keys():
  78. newdic[i] = ""
  79. workload.lazyInsertData('workload%s'%day, newdic)
  80. else:
  81. oldflightsts=baseFunction.TuplefindInList3(workloadinfos,id,0,12)
  82. if oldflightsts != "完工":
  83. newdic = {"开始时间":"'%s'"%startime,"结束时间":"'%s'"%endtime_str,"总用时":"'%s'"%costtime,
  84. "标准工时":"'%s'"%single_standardcost,"航班状态":"'%s'"%flightsts,"备3":"'%s'"%jb}
  85. workload.lazyUpdateItem('workload%s'%day, newdic, "编号='{}'".format(id))
  86. def checkWorkerlaod_new(database:flightDB, workload:flightDB,nowDayStr1,nowDay_11):
  87. global nowids
  88. nowids = []
  89. if nowDayStr1 == nowDay_11:
  90. checkdays = [nowDayStr1]
  91. else:
  92. checkdays = [nowDayStr1, nowDay_11]
  93. try:
  94. for day in checkdays:
  95. flightinfos=database.queryTabel('TaskFlightinfo{}'.format(day), '*', "维修人员 !='' or 放行人员 !='' or 二次送机 !=''")
  96. workloadinfos=workload.queryTabel('workload{}'.format(day), '*', "编号 !=''")
  97. workload_ids_arr=[]
  98. if workloadinfos and len(workloadinfos) != 0:
  99. for workloadinfo in workloadinfos:
  100. workload_ids_arr.append(workloadinfo[0])
  101. workloadAllidsnow=[]
  102. if flightinfos and len(flightinfos) != 0:
  103. for flightinfo in flightinfos:
  104. if flightinfo[12] and flightinfo[3] == "TR" and flightinfo[8]: #如果是短停\航后 特后前,且接机人员不是空
  105. peopleslist = flightinfo[12].replace("√", "").split(",")
  106. for people in peopleslist:
  107. workloadAllidsnow.append((flightinfo[0]+"-1-"+people))
  108. Computer(workload,workload_ids_arr,flightinfo[8],flightinfo[6],flightinfo[10],flightinfo[12],flightinfo[2],flightinfo[0],
  109. flightinfo[3],day,workloadinfos,startimeReDic['WXJJ'],endtimeReDic['WXJJ'],standvalueReDic['WXJJ'],"接机勤务",flightinfo[37])
  110. elif flightinfo[12] and flightinfo[3] == "AP" and flightinfo[5]:
  111. peopleslist = flightinfo[12].replace("√", "").split(",")
  112. for people in peopleslist:
  113. workloadAllidsnow.append((flightinfo[0]+"-4-"+people))
  114. Computer(workload,workload_ids_arr,flightinfo[5],flightinfo[7],flightinfo[11],flightinfo[12],flightinfo[2],flightinfo[0],
  115. flightinfo[3],day,workloadinfos,startimeReDic['WXAP'],endtimeReDic['WXAP'],standvalueReDic['WXAP'],"航前维修",flightinfo[37])
  116. elif flightinfo[12] and flightinfo[3] == "AF" and flightinfo[8]:
  117. peopleslist = flightinfo[12].replace("√", "").split(",")
  118. for people in peopleslist:
  119. workloadAllidsnow.append((flightinfo[0]+"-5-"+people))
  120. Computer(workload,workload_ids_arr,flightinfo[8],flightinfo[6],flightinfo[10],flightinfo[12],flightinfo[2],flightinfo[0],
  121. flightinfo[3],day,workloadinfos,startimeReDic['WXAF'],endtimeReDic['WXAF'],standvalueReDic['WXAF'],"航后维修",flightinfo[37],flightinfo[13])
  122. elif flightinfo[12] != "" and flightinfo[3] == "TAF" and flightinfo[8]:
  123. peopleslist = flightinfo[12].replace("√", "").split(",")
  124. for people in peopleslist:
  125. workloadAllidsnow.append((flightinfo[0]+"-6-"+people))
  126. Computer(workload,workload_ids_arr,flightinfo[8],flightinfo[6],flightinfo[10],flightinfo[12],flightinfo[2],flightinfo[0],
  127. flightinfo[3],day,workloadinfos,startimeReDic['WXTAF'],endtimeReDic['WXTAF'],standvalueReDic['WXTAF'],"特后前维修",flightinfo[37],flightinfo[13])
  128. if flightinfo[13] != "" and flightinfo[3] == "TR" and flightinfo[8]: #放行计算
  129. peopleslist = flightinfo[13].replace("√", "").split(",")
  130. for people in peopleslist:
  131. workloadAllidsnow.append((flightinfo[0]+"-3-"+people))
  132. Computer(workload,workload_ids_arr,flightinfo[8],flightinfo[6],flightinfo[10],flightinfo[13],flightinfo[2],flightinfo[0],
  133. flightinfo[3],day,workloadinfos,startimeReDic['FXTR'],endtimeReDic['FXTR'],standvalueReDic['FXTR'],"短停放行",flightinfo[37])
  134. elif flightinfo[13] != "" and flightinfo[3] == "AP" and flightinfo[5]:
  135. peopleslist = flightinfo[13].replace("√", "").split(",")
  136. for people in peopleslist:
  137. workloadAllidsnow.append((flightinfo[0]+"-3-"+people))
  138. Computer(workload,workload_ids_arr,flightinfo[5],flightinfo[7],flightinfo[11],flightinfo[13],flightinfo[2],flightinfo[0],
  139. flightinfo[3],day,workloadinfos,startimeReDic['FXAP'],endtimeReDic['FXAP'],standvalueReDic['FXAP'],"航前放行",flightinfo[37])
  140. elif flightinfo[13] != "" and flightinfo[3] == "TAF" and flightinfo[8]:
  141. peopleslist = flightinfo[13].replace("√", "").split(",")
  142. for people in peopleslist:
  143. workloadAllidsnow.append((flightinfo[0]+"-3-"+people))
  144. Computer(workload,workload_ids_arr,flightinfo[8],flightinfo[6],flightinfo[10],flightinfo[13],flightinfo[2],flightinfo[0],
  145. flightinfo[3],day,workloadinfos,startimeReDic['FXTAF'],endtimeReDic['FXTAF'],standvalueReDic['FXTAF'],"特后前放行",flightinfo[37])
  146. elif flightinfo[13] != "" and flightinfo[3] == "AF" and flightinfo[8]:
  147. peopleslist = flightinfo[13].replace("√", "").split(",")
  148. for people in peopleslist:
  149. workloadAllidsnow.append((flightinfo[0]+"-3-"+people))
  150. Computer(workload,workload_ids_arr,flightinfo[8],flightinfo[6],flightinfo[10],flightinfo[13],flightinfo[2],flightinfo[0],
  151. flightinfo[3],day,workloadinfos,startimeReDic['FXAF'],endtimeReDic['FXAF'],standvalueReDic['FXAF'],"航后放行",flightinfo[37])
  152. if flightinfo[19] != "" and flightinfo[3] != "AF" and flightinfo[5]:
  153. peopleslist = flightinfo[19].replace("√", "").split(",")
  154. for people in peopleslist:
  155. workloadAllidsnow.append((flightinfo[0]+"-2-"+people))
  156. Computer(workload,workload_ids_arr,flightinfo[5],flightinfo[7],flightinfo[11] if flightinfo[3] == "AP" else flightinfo[10],flightinfo[19],
  157. flightinfo[2],flightinfo[0],flightinfo[3],day,workloadinfos,startimeReDic['WXES'],endtimeReDic['WXES'],standvalueReDic['WXES'],"送机勤务",flightinfo[37])
  158. workload.FunctionCommit()
  159. Cancelresult = [x for x in workload_ids_arr if x not in workloadAllidsnow]
  160. for x in Cancelresult:
  161. taskid = x.split("-")[0]
  162. JBRY=baseFunction.TuplefindInList3(flightinfos,taskid,0,37)
  163. people=baseFunction.TuplefindInList3(workloadinfos,x,0,11)
  164. if people not in JBRY and "人工" not in x:
  165. newdic={"备2":"'1'"}
  166. workload.lazyUpdateItem('workload%s' % day, newdic, "编号='{}'".format(x))
  167. else:
  168. newdic = {"备2": "'0'"}
  169. workload.lazyUpdateItem('workload%s' % day, newdic, "编号='{}'".format(x))
  170. workload.FunctionCommit()
  171. except Exception as e:
  172. app_logger.log_error(e)
  173. app_logger.log_error(flightinfo)