checkworkload_New.py 12 KB

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