123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- from .flightDB import flightDB
- import datetime
- from unitls.LogerinTxt import app_logger
- import unitls.baseFunction as baseFunction
- from unitls.StaticDataclass import get_dic
- newWorkloadLabel=get_dic("newWorkloadLabel")
- startimeReDic={"WXJJ":25,"WXAP":100,"WXAF":0,"WXTAF":0,"FXAP":100,"FXAF":0,"FXTAF":0,"FXTR":0,"WXES":35}
- endtimeReDic={"WXJJ":10,"WXAP":10,"WXAF":120,"WXTAF":60,"FXAP":10,"FXAF":120,"FXTAF":60,"FXTR":30,"WXES":10}
- 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}
- #注意,在航后接机,特后前接机需要移除放行,否则会平摊过多分值
- def Computer(workload,ids ,start ,end ,bay ,peoples,flightdate,taskid,flighttype,day,workloadinfos,time1,time2,standtime,type,jbry,fx=None):#TIME1 到位时间 TIME2 离开时间 standtime 标准工时,type保障类型
- fxpeople=fx.replace("√","") if fx else ""
- typedic={"接机勤务":"-1-","送机勤务":"-2-","航前放行":"-3-","航后放行":"-3-","特后前放行":"-3-","短停放行":"-3-","航前维修":"-4-","航后维修":"-5-","特后前维修":"-6-"}
- startime = datetime.datetime.strptime(start, "%Y-%m-%d %H:%M:%S")-datetime.timedelta(minutes=time1+1)
- if end != "":
- endtime = datetime.datetime.strptime(end, "%Y-%m-%d %H:%M:%S")+datetime.timedelta(minutes=time2)
- if endtime < datetime.datetime.now():
- flightsts = "完工"
- endtime_str = '[实]' + endtime.strftime("%Y-%m-%d %H:%M:%S")
- elif startime > datetime.datetime.now():
- flightsts = "未开始"
- endtime_str = '[预]' + endtime.strftime("%Y-%m-%d %H:%M:%S")
- else:
- flightsts = "进行中"
- endtime_str = '[预]' + endtime.strftime("%Y-%m-%d %H:%M:%S")
- else:
- endtime =datetime.datetime.strptime(start, "%Y-%m-%d %H:%M:%S")+datetime.timedelta(minutes=time2)
- endtime_str='[预]'+endtime.strftime("%Y-%m-%d %H:%M:%S")
- if startime < datetime.datetime.now():
- flightsts = "进行中"
- else:
- flightsts = "未开始"
- costtime = (endtime - startime).total_seconds() / 60
- standardcost = (costtime / (time1+time2)) * standtime
- peopleslist=peoples.replace("√","").replace(fxpeople,"").split(",")
- for people in peopleslist:
- single_standardcost = round(standardcost/len(peopleslist),2)
- jb = ""
- if jbry != "":
- if people in jbry:
- jb1 = datetime.datetime.strptime(day+" 09:10:00","%Y%m%d %H:%M:%S")
- limit = datetime.datetime.strptime(day+" 11:10:00","%Y%m%d %H:%M:%S")
- jb2 = datetime.datetime.strptime(day+" 20:40:00","%Y%m%d %H:%M:%S")
- if startime < jb1:
- endtime = jb1 + datetime.timedelta(minutes=25)
- endtime_str = '[实]' + endtime.strftime("%Y-%m-%d %H:%M:%S")
- flightsts = "完工"
- jb = "交班"
- elif limit < startime < jb2:
- endtime = jb2+datetime.timedelta(minutes=25)
- endtime_str = '[实]' + endtime.strftime("%Y-%m-%d %H:%M:%S")
- flightsts = "完工"
- jb = "交班"
- else:
- jb1 = datetime.datetime.strptime(day + " 09:10:00", "%Y%m%d %H:%M:%S")
- limit = datetime.datetime.strptime(day+" 11:10:00","%Y%m%d %H:%M:%S")
- jb2 = datetime.datetime.strptime(day + " 20:40:00", "%Y%m%d %H:%M:%S")
- if startime < jb1:
- startime = jb1
- jb = "接班"
- elif limit < startime < jb2:
- startime = jb2
- jb = "接班"
- if endtime <= startime:
- endtime = startime+datetime.timedelta(minutes=30)
- if datetime.datetime.now() >= endtime:
- flightsts = "完工"
- else:
- flightsts = "进行中"
- id = taskid+typedic[type]+people
- if id not in ids and id not in nowids:
- nowids.append(id)
- #print(nowids)
- newdic = {"编号":id,"任务编号":taskid,"航班日期":flightdate,"首次时间":startime,"开始时间":startime,"结束时间":endtime_str,
- "机位":bay,"类型":type,"总用时":costtime,"标准工时":single_standardcost,"人员":people,"航班状态":flightsts,'备1':flighttype,"备3": jb}
- for i in newWorkloadLabel:
- if i not in newdic.keys():
- newdic[i] = ""
- workload.lazyInsertData('workload%s'%day, newdic)
- else:
- oldflightsts=baseFunction.TuplefindInList3(workloadinfos,id,0,12)
- if oldflightsts != "完工":
- newdic = {"开始时间":"'%s'"%startime,"结束时间":"'%s'"%endtime_str,"总用时":"'%s'"%costtime,
- "标准工时":"'%s'"%single_standardcost,"航班状态":"'%s'"%flightsts,"备3":"'%s'"%jb}
- workload.lazyUpdateItem('workload%s'%day, newdic, "编号='{}'".format(id))
- def checkWorkerlaod_new(database:flightDB, workload:flightDB,nowDayStr1,nowDay_11):
- global nowids
- nowids = []
- if nowDayStr1 == nowDay_11:
- checkdays = [nowDayStr1]
- else:
- checkdays = [nowDayStr1, nowDay_11]
- try:
- for day in checkdays:
- flightinfos=database.queryTabel('TaskFlightinfo{}'.format(day), '*', "维修人员 !='' or 放行人员 !='' or 二次送机 !=''")
- workloadinfos=workload.queryTabel('workload{}'.format(day), '*', "编号 !=''")
- workload_ids_arr=[]
- if workloadinfos and len(workloadinfos) != 0:
- for workloadinfo in workloadinfos:
- workload_ids_arr.append(workloadinfo[0])
- workloadAllidsnow=[]
- if flightinfos and len(flightinfos) != 0:
- for flightinfo in flightinfos:
- if flightinfo[12] and flightinfo[3] == "TR" and flightinfo[8]: #如果是短停\航后 特后前,且接机人员不是空
- peopleslist = flightinfo[12].replace("√", "").split(",")
- for people in peopleslist:
- workloadAllidsnow.append((flightinfo[0]+"-1-"+people))
- Computer(workload,workload_ids_arr,flightinfo[8],flightinfo[6],flightinfo[10],flightinfo[12],flightinfo[2],flightinfo[0],
- flightinfo[3],day,workloadinfos,startimeReDic['WXJJ'],endtimeReDic['WXJJ'],standvalueReDic['WXJJ'],"接机勤务",flightinfo[37])
- elif flightinfo[12] and flightinfo[3] == "AP" and flightinfo[5]:
- peopleslist = flightinfo[12].replace("√", "").split(",")
- for people in peopleslist:
- workloadAllidsnow.append((flightinfo[0]+"-4-"+people))
- Computer(workload,workload_ids_arr,flightinfo[5],flightinfo[7],flightinfo[11],flightinfo[12],flightinfo[2],flightinfo[0],
- flightinfo[3],day,workloadinfos,startimeReDic['WXAP'],endtimeReDic['WXAP'],standvalueReDic['WXAP'],"航前维修",flightinfo[37])
- elif flightinfo[12] and flightinfo[3] == "AF" and flightinfo[8]:
- peopleslist = flightinfo[12].replace("√", "").split(",")
- for people in peopleslist:
- workloadAllidsnow.append((flightinfo[0]+"-5-"+people))
- Computer(workload,workload_ids_arr,flightinfo[8],flightinfo[6],flightinfo[10],flightinfo[12],flightinfo[2],flightinfo[0],
- flightinfo[3],day,workloadinfos,startimeReDic['WXAF'],endtimeReDic['WXAF'],standvalueReDic['WXAF'],"航后维修",flightinfo[37],flightinfo[13])
- elif flightinfo[12] != "" and flightinfo[3] == "TAF" and flightinfo[8]:
- peopleslist = flightinfo[12].replace("√", "").split(",")
- for people in peopleslist:
- workloadAllidsnow.append((flightinfo[0]+"-6-"+people))
- Computer(workload,workload_ids_arr,flightinfo[8],flightinfo[6],flightinfo[10],flightinfo[12],flightinfo[2],flightinfo[0],
- flightinfo[3],day,workloadinfos,startimeReDic['WXTAF'],endtimeReDic['WXTAF'],standvalueReDic['WXTAF'],"特后前维修",flightinfo[37],flightinfo[13])
- if flightinfo[13] != "" and flightinfo[3] == "TR" and flightinfo[8]: #放行计算
- peopleslist = flightinfo[13].replace("√", "").split(",")
- for people in peopleslist:
- workloadAllidsnow.append((flightinfo[0]+"-3-"+people))
- Computer(workload,workload_ids_arr,flightinfo[8],flightinfo[6],flightinfo[10],flightinfo[13],flightinfo[2],flightinfo[0],
- flightinfo[3],day,workloadinfos,startimeReDic['FXTR'],endtimeReDic['FXTR'],standvalueReDic['FXTR'],"短停放行",flightinfo[37])
- elif flightinfo[13] != "" and flightinfo[3] == "AP" and flightinfo[5]:
- peopleslist = flightinfo[13].replace("√", "").split(",")
- for people in peopleslist:
- workloadAllidsnow.append((flightinfo[0]+"-3-"+people))
- Computer(workload,workload_ids_arr,flightinfo[5],flightinfo[7],flightinfo[11],flightinfo[13],flightinfo[2],flightinfo[0],
- flightinfo[3],day,workloadinfos,startimeReDic['FXAP'],endtimeReDic['FXAP'],standvalueReDic['FXAP'],"航前放行",flightinfo[37])
- elif flightinfo[13] != "" and flightinfo[3] == "TAF" and flightinfo[8]:
- peopleslist = flightinfo[13].replace("√", "").split(",")
- for people in peopleslist:
- workloadAllidsnow.append((flightinfo[0]+"-3-"+people))
- Computer(workload,workload_ids_arr,flightinfo[8],flightinfo[6],flightinfo[10],flightinfo[13],flightinfo[2],flightinfo[0],
- flightinfo[3],day,workloadinfos,startimeReDic['FXTAF'],endtimeReDic['FXTAF'],standvalueReDic['FXTAF'],"特后前放行",flightinfo[37])
- elif flightinfo[13] != "" and flightinfo[3] == "AF" and flightinfo[8]:
- peopleslist = flightinfo[13].replace("√", "").split(",")
- for people in peopleslist:
- workloadAllidsnow.append((flightinfo[0]+"-3-"+people))
- Computer(workload,workload_ids_arr,flightinfo[8],flightinfo[6],flightinfo[10],flightinfo[13],flightinfo[2],flightinfo[0],
- flightinfo[3],day,workloadinfos,startimeReDic['FXAF'],endtimeReDic['FXAF'],standvalueReDic['FXAF'],"航后放行",flightinfo[37])
- if flightinfo[19] != "" and flightinfo[3] != "AF" and flightinfo[5]:
- peopleslist = flightinfo[19].replace("√", "").split(",")
- for people in peopleslist:
- workloadAllidsnow.append((flightinfo[0]+"-2-"+people))
- Computer(workload,workload_ids_arr,flightinfo[5],flightinfo[7],flightinfo[11] if flightinfo[3] == "AP" else flightinfo[10],flightinfo[19],
- flightinfo[2],flightinfo[0],flightinfo[3],day,workloadinfos,startimeReDic['WXES'],endtimeReDic['WXES'],standvalueReDic['WXES'],"送机勤务",flightinfo[37])
- workload.FunctionCommit()
- Cancelresult = [x for x in workload_ids_arr if x not in workloadAllidsnow]
- for x in Cancelresult:
- taskid = x.split("-")[0]
- JBRY=baseFunction.TuplefindInList3(flightinfos,taskid,0,37)
- people=baseFunction.TuplefindInList3(workloadinfos,x,0,11)
- if people not in JBRY and "人工" not in x:
- newdic={"备2":"'1'"}
- workload.lazyUpdateItem('workload%s' % day, newdic, "编号='{}'".format(x))
- else:
- newdic = {"备2": "'0'"}
- workload.lazyUpdateItem('workload%s' % day, newdic, "编号='{}'".format(x))
- workload.FunctionCommit()
- except Exception as e:
- app_logger.log_error(e)
- app_logger.log_error(flightinfo)
|