工作中心匹配

main
768863620@qq.com 2025-01-14 10:45:38 +08:00
parent 2d754b1ef8
commit c930e431ca
1 changed files with 114 additions and 33 deletions

View File

@ -93,7 +93,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
// " and b.PLAN_QUANTITY_MU-b.MOVED_QUANTITY_MU>0 "+ // " and b.PLAN_QUANTITY_MU-b.MOVED_QUANTITY_MU>0 "+
+ " for xml Path('')),1,1,'') as taskId," + " for xml Path('')),1,1,'') as taskId,"
+ "item.code as liaohao ," + "item.code as liaohao ,"
+ "max(z.id) as kuqu,"j + "max(z.id) as kuqu,"
+ "max(t.END_REGION) as gzz," + "max(t.END_REGION) as gzz,"
+ "sum(t.PLAN_QUANTITY_MU-t.MOVED_QUANTITY_MU) as jhsl," + "sum(t.PLAN_QUANTITY_MU-t.MOVED_QUANTITY_MU) as jhsl,"
+ "MAX(s2.LP) as rqh ," + "MAX(s2.LP) as rqh ,"
@ -418,40 +418,61 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
List<GongDanMingXi> list_show = twlFenZu.gdPaiXus; //当前头物料所有的工单组合,以及每个工单的物料明细 List<GongDanMingXi> list_show = twlFenZu.gdPaiXus; //当前头物料所有的工单组合,以及每个工单的物料明细
int this_fenzuCount=twlFenZu.wl_count; //当前分组总物料行数 int this_fenzuCount=twlFenZu.wl_count; //当前分组总物料行数
List<GongZuoZhan>listGzz= FaiXuGzz(gzzMap); //工作站根据可分配数量进行排序 List<GongZuoZhan>listGzz= FaiXuGzz(gzzMap); //工作站根据可分配数量进行排序
int gzz_index=0; //当前分配工作站的排序下标
GongZuoZhan curr_gzz=listGzz.get(0);
for (int index=0;index<list_show.size();index++) {
GongDanMingXi gongDanMingXi=list_show.get(index);
//当前工单的物料
List<FenPei> list_wList=gongDanMingXi.list;
int chao=(list_wList.size()+curr_gzz.notFinished+curr_gzz.renWuList.size())-curr_gzz.maxRenWu;
logger.info(listGzz.size());
if(chao<=cfhs||index==list_show.size()-1){
logger.info("11=="+listGzz.get(gzz_index));
//如果当前待分配+此工作站未完成+已分配任务数 小于最大任务数 //将当前任务分配到此工作站
for (FenPei fenPei : list_wList) {
curr_gzz.renWuList.add(fenPei);
}
if(index==list_show.size()-1){
//最后一个工单
gzzMap.put(curr_gzz.code, curr_gzz);
}
}else{
logger.info("2=="+listGzz.get(gzz_index));
gzzMap.put(curr_gzz.code, curr_gzz);
//如果当前待分配+此工作站未完成+已分配任务数 大于最大任务数 //将当前任务分配到下个工作站
gzz_index=gzz_index+1;
curr_gzz=listGzz.get(gzz_index);
for (FenPei fenPei : list_wList) {
curr_gzz.renWuList.add(fenPei);
}
if(index==list_show.size()-1){
//最后一个工单
gzzMap.put(curr_gzz.code, curr_gzz);
}
}
if(list_show.size()==1){
GongDanMingXi gongDanMingXi=list_show.get(0);
GongZuoZhan curr_gzz=PiPeiGongZuoZhanForGzzxAndRqh(listGzz,gongDanMingXi,cfhs);
List<FenPei> list_wList=gongDanMingXi.list;
for (FenPei fenPei : list_wList) {
curr_gzz.renWuList.add(fenPei);
curr_gzz.RongQIHaoMap.put(fenPei.rqh,"");
curr_gzz.GongZuoZhongXinMap.put(fenPei.gzzx,"");
}
gzzMap.put(curr_gzz.code, curr_gzz);
}else{
//多个工单匹配进行
int gzz_index=0; //当前分配工作站的排序下标
GongZuoZhan curr_gzz=listGzz.get(0);
for (int index=0;index<list_show.size();index++) {
GongDanMingXi gongDanMingXi=list_show.get(index);
//当前工单的物料
List<FenPei> list_wList=gongDanMingXi.list;
int chao=(list_wList.size()+curr_gzz.notFinished+curr_gzz.renWuList.size())-curr_gzz.maxRenWu;
logger.info(listGzz.size());
if(chao<=cfhs||index==list_show.size()-1){
logger.info("11=="+listGzz.get(gzz_index));
//如果当前待分配+此工作站未完成+已分配任务数 小于最大任务数 //将当前任务分配到此工作站
for (FenPei fenPei : list_wList) {
curr_gzz.renWuList.add(fenPei);
curr_gzz.RongQIHaoMap.put(fenPei.rqh,"");
curr_gzz.GongZuoZhongXinMap.put(fenPei.gzzx,"");
}
if(index==list_show.size()-1){
//最后一个工单
gzzMap.put(curr_gzz.code, curr_gzz);
}
}else{
logger.info("2=="+listGzz.get(gzz_index));
gzzMap.put(curr_gzz.code, curr_gzz);
//如果当前待分配+此工作站未完成+已分配任务数 大于最大任务数 //将当前任务分配到下个工作站
gzz_index=gzz_index+1;
curr_gzz=listGzz.get(gzz_index);
for (FenPei fenPei : list_wList) {
curr_gzz.renWuList.add(fenPei);
curr_gzz.RongQIHaoMap.put(fenPei.rqh,"");
curr_gzz.GongZuoZhongXinMap.put(fenPei.gzzx,"");
}
if(index==list_show.size()-1){
//最后一个工单
gzzMap.put(curr_gzz.code, curr_gzz);
}
}
}
} }
} }
int fenPeiCount=0; int fenPeiCount=0;
for (String key : gzzMap.keySet()) { for (String key : gzzMap.keySet()) {
@ -471,7 +492,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
} }
task.setBillCode(fenPei.gdh+"-"+lx+"-"+fenPei.chf_fz); task.setBillCode(fenPei.gdh+"-"+lx+"-"+fenPei.chf_fz);
task.setEndRegion(gongZuoZhan.code); task.setEndRegion(gongZuoZhan.code);
task.setAgvStatus(1);//下发 //task.setAgvStatus(1);//下发
this.commonDao.store(task); this.commonDao.store(task);
logger.info("one:"+task.getBillCode()+"---"+task.getEndRegion()+"--two:-"+task.getOldGzz()+"---"+task.getOldZrw()+"--three:-"+fenPei.gdh+"-"+fenPei.chf_fz+"-----"+gongZuoZhan.code); logger.info("one:"+task.getBillCode()+"---"+task.getEndRegion()+"--two:-"+task.getOldGzz()+"---"+task.getOldZrw()+"--three:-"+fenPei.gdh+"-"+fenPei.chf_fz+"-----"+gongZuoZhan.code);
} }
@ -490,6 +511,63 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
session.close(); session.close();
} }
public GongZuoZhan PiPeiGongZuoZhanForGzzxAndRqh(List<GongZuoZhan>listGzz,GongDanMingXi gongDanMingXi,int cfhs){
List<FenPei> list_wList=gongDanMingXi.list;
GongZuoZhan check=listGzz.get(0);
int max_rqh_count=0;
int max_gzzx=0;
for (GongZuoZhan gzz : listGzz) {
int chao=(list_wList.size()+gzz.notFinished+gzz.renWuList.size())-gzz.maxRenWu;
logger.info(listGzz.size());
if(chao>cfhs){
continue;
}
int rqh_count=0;
int gzzx=0;
for (FenPei fenPei : list_wList) {
if(gzz.GongZuoZhongXinMap.containsKey(fenPei.gzzx)){
gzzx=1;
}
if(gzz.RongQIHaoMap.containsKey(fenPei.rqh)){
rqh_count=rqh_count+1;
}
}
Boolean isPiPeiGzzx=true;
if(isPiPeiGzzx){
if(max_gzzx==0 && gzzx==0 && rqh_count>max_rqh_count){
//如果工作中心未匹配过,且本次未匹配到工作中心 容器号 匹配 度大优先
max_rqh_count=rqh_count;
max_gzzx=gzzx;
check=gzz;
}else if(max_gzzx==0 && gzzx==1 ){
//如果工作中心未匹配过,本次匹配到工作中心
max_rqh_count=rqh_count;
max_gzzx=gzzx;
check=gzz;
}else if(max_gzzx==1 &&gzzx==1 && rqh_count>max_rqh_count){
//如果匹配过工作中心,且本次匹配到工作中心; 容器号匹配度大优先
max_rqh_count=rqh_count;
max_gzzx=gzzx;
check=gzz;
}
}else{
if(rqh_count>max_rqh_count){
//如果工作中心未匹配过,且本次未匹配到工作中心 容器号 匹配 度大优先
max_rqh_count=rqh_count;
max_gzzx=gzzx;
check=gzz;
}
}
}
logger.info("------------------------匹配容器号和工作中心-----------------------------------------------");
logger.info("容器号匹配次数:"+max_rqh_count+" 工作中心匹配次数:"+max_gzzx+" 工单号:"+gongDanMingXi.gdh+" 工作站:"+check.code);
logger.info("------------------------匹配容器号和工作中心-----------------------------------------------");
return check;
}
public List<GongZuoZhan> FaiXuGzz(Map<String, GongZuoZhan> gzzMap){ public List<GongZuoZhan> FaiXuGzz(Map<String, GongZuoZhan> gzzMap){
List<GongZuoZhan> list =new ArrayList<DefaultNewWaveManager.GongZuoZhan>(); List<GongZuoZhan> list =new ArrayList<DefaultNewWaveManager.GongZuoZhan>();
@ -515,6 +593,9 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
public int maxRenWu; public int maxRenWu;
public int notFinished =0; public int notFinished =0;
public List<FenPei> renWuList=new ArrayList<DefaultNewWaveManager.FenPei>(); public List<FenPei> renWuList=new ArrayList<DefaultNewWaveManager.FenPei>();
Map<String, String> GongZuoZhongXinMap = new HashMap<>();
Map<String, String> RongQIHaoMap = new HashMap<>();
@Override @Override
public int compareTo(GongZuoZhan other) { public int compareTo(GongZuoZhan other) {
// TODO Auto-generated method stub // TODO Auto-generated method stub