为了能够展现,我实际上延迟了30秒。


代码主要还是用python实现。
获取配置文件这部分,和第四题一个逻辑,就不细说了。
重点讲讲处理数据的部分。
a=pd.read_excel(glv['d'].file,sheet_name=None)
for j in a.items():
j1=j[1].fillna(0)
j1.iloc[:, [4, 5]] = j1.iloc[:, [4, 5]].astype(int)
print(j1)
读取excel的全部sheet然后循环。
给空的位置补0,然后转整形。
k=0
while 1:
b=0
c=len(j1.index)
建一个无限循环,然后设置b和c两个变量
b是为了控制每一轮结束
c是设计师总数
k就是当前已经执行的任务数
for l in j1.index:
if j1.iloc[l,5]>=j1.iloc[l,1]:
if l==c-1:
b=1
continue
if j1.iloc[l,4]>=j1.iloc[l,3]:
if l==c-1:
b=1
continue
k+=1
j1.iloc[l,4]+=1
j1.iloc[l,5]+=1
break
每一次循环的时候,就对每一行循环,就是每一个设计师进行循环。
进行两个判断,一个是总数不能超过总数上限,一个是本轮数不能超过本轮数上限。
如果任何一个超过上限,就匹配下一个设计师。
如果是最后一个设计师,那么就打上标记b=1
如果没有超过上限,那么就给本轮数和总数分别+1。
并且给k+1,表示已经分配的任务数多一个。
print(j1)
这个就是把每一次分配后的情况写入日志,等执行完,导出日志,就可以看见每一次分配的明细。
if sum(j1.iloc[:,5])==sum(j1.iloc[:,1]):
break
如果总数和总数上限相等,说明设计师已经满负载了,循环直接结束。
if b:
j1.iloc[:,4]=[0]*c
如果b=1,说明这一轮分配已经结束了,需要进行下一轮,我们就把本轮数清空。
if k>=100:
break
如果k>=100,说明总的任务数已经到达了,不需要继续分配了。
OK,如上就是我的整个思路逻辑。欢迎讨论交流