From 8553b089baeb9b1530b2f0189fce505ccf444f0a Mon Sep 17 00:00:00 2001 From: FOAM <491460741@qq.com> Date: Mon, 20 Jan 2025 16:32:56 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E6=88=90=E5=A4=B4=E7=89=A9=E6=96=99?= =?UTF-8?q?=EF=BC=8C=E6=B3=A2=E6=AC=A1=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dev/swms/server/model/inventory/Task.java | 2 +- .../allocate/DefaultNewAutoAllocator.java | 7 - .../pojo/DefaultNewWaveDocManager.java | 9 +- .../shipping/pojo/DefaultNewWaveManager.java | 1043 ++++++++++------- 4 files changed, 618 insertions(+), 443 deletions(-) diff --git a/src/main/java/com/dev/swms/server/model/inventory/Task.java b/src/main/java/com/dev/swms/server/model/inventory/Task.java index 14328c7..51e08b7 100644 --- a/src/main/java/com/dev/swms/server/model/inventory/Task.java +++ b/src/main/java/com/dev/swms/server/model/inventory/Task.java @@ -127,7 +127,7 @@ public class Task extends VersionalEntity { private String operator;//操作人 private Date dateline;//交单日期 private String setTask;//集套交单任务 - private int agvStatus =0;//任务状态 0-未下发 1=已下发 2=执行中,3=完成。 + private int agvStatus =0;//任务状态 0-未下发 1=已下发 2=执行中,3=完成,-1已分配工作站未下发AGV。 private Date operatorDate;//合单日期 /**任务号 1已绑定工作站,0还没开始的任务*/ private int libraryStatus=0; diff --git a/src/main/java/com/dev/swms/server/service/picking/allocate/DefaultNewAutoAllocator.java b/src/main/java/com/dev/swms/server/service/picking/allocate/DefaultNewAutoAllocator.java index e4f8a52..458e8b8 100644 --- a/src/main/java/com/dev/swms/server/service/picking/allocate/DefaultNewAutoAllocator.java +++ b/src/main/java/com/dev/swms/server/service/picking/allocate/DefaultNewAutoAllocator.java @@ -373,13 +373,6 @@ public class DefaultNewAutoAllocator extends DefaultBaseManager implements NewAu task.setStrBill7(inventory.getLocation().getStock().getLP()); } task.setBillCode(pt.getRelatedBill2()); - String tItemCode=item.getCode().substring(0, 9); - String ptCode = ptd.getPickTicket().getCode(); - char lastChar = ptCode.charAt(ptCode.length() - 1); - if (Character.isUpperCase(lastChar)) { - //System.out.println("最后一位是大写字母"); - task.setStrBill8(tItemCode+lastChar); - } task.setCode(TimeNumberUtils.getTaskCode()); task.setType(TaskType.MV_PICKTICKET); task.setItemKey(inventory.getItemKey()); diff --git a/src/main/java/com/dev/swms/server/service/shipping/pojo/DefaultNewWaveDocManager.java b/src/main/java/com/dev/swms/server/service/shipping/pojo/DefaultNewWaveDocManager.java index f8d04fd..1ed4f26 100644 --- a/src/main/java/com/dev/swms/server/service/shipping/pojo/DefaultNewWaveDocManager.java +++ b/src/main/java/com/dev/swms/server/service/shipping/pojo/DefaultNewWaveDocManager.java @@ -1135,14 +1135,7 @@ public class DefaultNewWaveDocManager extends DefaultBaseManager implements if (inventory.getLocation().getStock()!=null) { task.setStrBill7(inventory.getLocation().getStock().getLP()); } - task.setBillCode(pt.getRelatedBill2()); - String tItemCode=item.getCode().substring(0, 9); - String ptCode = ptd.getPickTicket().getCode(); - char lastChar = ptCode.charAt(ptCode.length() - 1); - if (Character.isUpperCase(lastChar)) { - //System.out.println("最后一位是大写字母"); - task.setStrBill8(tItemCode+lastChar); - } + task.setBillCode(pt.getRelatedBill2()); task.setCode(TimeNumberUtils.getTaskCode()); task.setType(TaskType.MV_PICKTICKET); task.setItemKey(inventory.getItemKey()); diff --git a/src/main/java/com/dev/swms/server/service/shipping/pojo/DefaultNewWaveManager.java b/src/main/java/com/dev/swms/server/service/shipping/pojo/DefaultNewWaveManager.java index 10a66df..e3bed47 100644 --- a/src/main/java/com/dev/swms/server/service/shipping/pojo/DefaultNewWaveManager.java +++ b/src/main/java/com/dev/swms/server/service/shipping/pojo/DefaultNewWaveManager.java @@ -18,17 +18,15 @@ import org.hibernate.Query; import org.hibernate.Session; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; +import com.dev.energy.server.model.EntityFactory; import com.dev.energy.server.service.pojo.DefaultBaseManager; +import com.dev.sequence.model.sequence.Sequence; +import com.dev.sequence.service.sequence.SequenceManager; import com.dev.swms.server.model.base.ShiXiao; import com.dev.swms.server.model.inventory.Task; -import com.dev.swms.server.model.receiving.LibraryTaskType.classification; import com.dev.swms.server.model.shipping.NewWaveFlag; import com.dev.swms.server.model.shipping.WaveDoc; -import com.dev.swms.server.service.interfaceLog.JsonUtil; import com.dev.swms.server.service.shipping.NewWaveManager; -import com.dev.swms.server.utils.interfaceUtil; -import com.itextpdf.text.pdf.PdfStructTreeController.returnType; -import com.sun.org.apache.bcel.internal.classfile.Code; import org.apache.log4j.Logger; @@ -36,16 +34,16 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements NewWaveManager { private static Logger logger = Logger .getLogger(DefaultNewWaveManager.class); - - private static Boolean log_sql=true; - private static Boolean log_TouWuLiaoChaiFen=true; - private static Boolean log_GongZuoZhanMinXi=true; - private static Boolean log_GongZuoZhanFenPeiJieGuo=true; - private static Boolean log_GongZuoZhanPiPeiForRqhAndGzzx=true; - private static Boolean log_PirntGongdanMap=true; - private static Boolean log_PirntGongDanMingXiList=true; - private static Boolean log_PirntFirstTouwuLiaoMap=true; - + + private static Boolean log_sql = true; + private static Boolean log_TouWuLiaoChaiFen = true; + private static Boolean log_GongZuoZhanMinXi = true; + private static Boolean log_GongZuoZhanFenPeiJieGuo = true; + private static Boolean log_GongZuoZhanPiPeiForRqhAndGzzx = true; + private static Boolean log_PirntGongdanMap = true; + private static Boolean log_PirntGongDanMingXiList = true; + private static Boolean log_PirntFirstTouwuLiaoMap = true; + public void allocateGZZ(List ids) { for (Long id : ids) { WaveDoc waveDoc = commonDao.get(WaveDoc.class, id); @@ -56,33 +54,33 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements List lx_codes = getGzzCodes(NewWaveFlag.LXQ);// 自动创波工作站 List hj_codes = getGzzCodes(NewWaveFlag.HJQ); List lk_codes = getGzzCodes(NewWaveFlag.LKQ); - Map maps = gzzCount();// 所有工作站没完成的任务 + Map maps = gzzCount(waveDoc.getCode());// 所有工作站没完成的任务 int lxCount = 0;// 工作站任务未处理任务数 int hjCount = 0; int lkCount = 0; - + for (String code : lx_codes) { - - lxCount +=maps.get(code)==null?0:maps.get(code); + + lxCount += maps.get(code) == null ? 0 : maps.get(code); } for (String code : hj_codes) { - hjCount +=maps.get(code)==null?0:maps.get(code); + hjCount += maps.get(code) == null ? 0 : maps.get(code); } - + for (String code : lk_codes) { - lkCount +=maps.get(code)==null?0:maps.get(code); + lkCount += maps.get(code) == null ? 0 : maps.get(code); } - + allocateGZZ(waveDoc.getCode(), NewWaveFlag.LXQ, lx_codes, - (int) lx_sx.getTaskD(), (int) lx_sx.getNumber(), lxCount, + (int) lx_sx.getTaskD(), getValueGzzNumber(lx_sx), lxCount, maps); allocateGZZ(waveDoc.getCode(), NewWaveFlag.HJQ, hj_codes, - (int) hj_sx.getTaskD(), (int) hj_sx.getNumber(), hjCount, + (int) hj_sx.getTaskD(), getValueGzzNumber(hj_sx), hjCount, maps); allocateGZZ(waveDoc.getCode(), NewWaveFlag.LKQ, lk_codes, - (int) lk_sx.getTaskD(), (int) lk_sx.getNumber(), lkCount, + (int) lk_sx.getTaskD(), getValueGzzNumber(lk_sx), lkCount, maps); - + } } @@ -113,7 +111,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements + "loc.code as kwh," + "max(t.agv_Status) as rwzt," + "max(item.GOOD_TYPE) as wllx," - + "max(t.strBill8) as twl " + + "max(LEFT(pt.RELATED_BILL3, 9)+RIGHT(pt.CODE,1)) as twl " + "from task t " + "left join PICK_TICKET_DETAIL ptd on ptd.id=t.PICK_TICKET_DETAIL_ID " + "left join PICK_TICKET pt on pt.id=ptd.PICK_TICKET_ID " @@ -124,19 +122,21 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements + "left join STOCK s2 on s2.id=t.SRC_LP " + "left join STOCK s1 on s1.id=loc.stock " + "left join WAVE_DOC wd on wd.id=t.WAVE_DOC_ID " - + "where 1=1 and pt.BILL_TYPE_ID=1094 and wd.code='" - + waveDocCode + "' and t.WAVE_DOC_ID is not null and t.agv_status=0"; + + "where 1=1 and pt.BILL_TYPE_ID=1094 " + // + "and t.agv_status in (0,-1) " + + "and wd.code='" + waveDocCode + + "' and t.WAVE_DOC_ID is not null"; if (zone_id != null) { sql += " and z.id=" + zone_id; } -// sql += " and t.PLAN_QUANTITY_MU-t.MOVED_QUANTITY_MU>0 "; + // sql += " and t.PLAN_QUANTITY_MU-t.MOVED_QUANTITY_MU>0 "; sql += "group by pt.code,t.BILLCODE,item.id,item.code,item.BE_MARK_WEIGHT,loc.id,loc.code,ik.PROP_C1,ik.PROP_C2,ik.PROP_C3,ik.PROP_D1,ik.PROP_D2,item.ISBOM " + "order by min(t.skips ),max(loc.code) asc, item.id,pt.code,t.BILLCODE "; - LogPrint(log_sql,sql); + LogPrint(log_sql, sql); Query query = session.createSQLQuery(sql); List list = (List) query.list(); int GongDan_wuLiaoMingXiCout = list.size(); - + List list_fenpei = new ArrayList(); List list_fenpei_wgzz = new ArrayList();// 无需分配工作站数据 for (int i = 0; i < list.size(); i++) { @@ -169,17 +169,16 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements list_fenpei_wgzz.add(bean); } } - - - - Listlist_fen=Paixu(list_fenpei,cfhs); - //初始化 GongDan_WuLiao_Map 根据(工单号+物料类型+拆分组号)分组 + List list_fen = Paixu(list_fenpei, cfhs); + // 初始化 GongDan_WuLiao_Map 根据(工单号+物料类型+拆分组号)分组 Map> GongDan_WuLiao_Map = new HashMap<>(); for (FenPei fenPei : list_fen) { - String GongDan_WuLiao = fenPei.gdh + fenPei.wllx+fenPei.chf_fz; - if (((java.util.Map) GongDan_WuLiao_Map).containsKey(GongDan_WuLiao)) { - List list_count = GongDan_WuLiao_Map.get(GongDan_WuLiao); + String GongDan_WuLiao = fenPei.gdh + fenPei.wllx + fenPei.chf_fz; + if (((java.util.Map) GongDan_WuLiao_Map) + .containsKey(GongDan_WuLiao)) { + List list_count = GongDan_WuLiao_Map + .get(GongDan_WuLiao); list_count.add(fenPei); GongDan_WuLiao_Map.put(GongDan_WuLiao, list_count); } else { @@ -188,27 +187,25 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements GongDan_WuLiao_Map.put(GongDan_WuLiao, list_count); } } - //打印分组情况 - PirntGongdanMap(GongDan_WuLiao_Map,"最终工单分组"); - - - + // 打印分组情况 + PirntGongdanMap(GongDan_WuLiao_Map, "最终工单分组"); + // 记录每个工单 的数目 List GongDan_List = new ArrayList(); for (String key : GongDan_WuLiao_Map.keySet()) { // LogPrint("gdh: "+key+" count:"+gdCount.get(key).size()); - + List list_ll1 = GongDan_WuLiao_Map.get(key); Collections.sort(list_ll1); GongDanMingXi gdPaiXu = new GongDanMingXi(key, list_ll1); GongDan_List.add(gdPaiXu); } Collections.sort(GongDan_List); - - //打印排序结果 - PirntGongDanMingXiList(GongDan_List,"最终工单排序"); - + + // 打印排序结果 + PirntGongDanMingXiList(GongDan_List, "最终工单排序"); + // 先根据头物料分组 如果头物料相同 且工单总行数 差异小于4的工单分到一个组里面 (尽量分配到同一工作站) Map> touwuliao_map = new HashMap<>(); @@ -216,7 +213,8 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements for (GongDanMingXi gdPaiXu : GongDan_List) { // 获取当前头物料 - String fenzu = gdPaiXu.list.get(0).twl_fz+"_"+gdPaiXu.list.get(0).chf_fz; + String fenzu = gdPaiXu.list.get(0).twl_fz + "_" + + gdPaiXu.list.get(0).chf_fz; String gdh = gdPaiXu.gdh; @@ -226,7 +224,9 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements // 在touwuliao_map中进行匹配 boolean isFind = false; for (String twlKey : touwuliao_map.keySet()) { - String twl_in = touwuliao_map.get(twlKey).get(0).list.get(0).twl_fz + "_"+ touwuliao_map.get(twlKey).get(0).list.get(0).chf_fz; + String twl_in = touwuliao_map.get(twlKey).get(0).list.get(0).twl_fz + + "_" + + touwuliao_map.get(twlKey).get(0).list.get(0).chf_fz; int currCount_in = touwuliao_map.get(twlKey).get(0).hangshu; if (twl_in.equals(fenzu) && Math.abs(currCount - currCount_in) <= 4) { @@ -246,26 +246,25 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements } } - - //打印头物料分组后的情况 - PirntFirstTouwuLiaoMap(touwuliao_map,"最终头物料分组"); - + + // 打印头物料分组后的情况 + PirntFirstTouwuLiaoMap(touwuliao_map, "最终头物料分组"); + // 计算没个容器号出现得次数(在每个头物料得分组里面) - for (String twlKey : touwuliao_map.keySet()) { List GongDanList = touwuliao_map.get(twlKey); - //初始化rq_showTime 记录容器号次数 + // 初始化rq_showTime 记录容器号次数 Map rq_showTime = new HashMap<>(); - //循环工单中所有任务 + // 循环工单中所有任务 for (GongDanMingXi fenPei2 : GongDanList) { -// 初始化set_rqh 记录本工单容器号出现次数,(set保证同一工单中一个容器号只计算一次) + // 初始化set_rqh 记录本工单容器号出现次数,(set保证同一工单中一个容器号只计算一次) Set set_rqh = new HashSet<>(); for (FenPei fff : fenPei2.list) { // 通过set记录容器号 set_rqh.add(fff.rqh); } - //循环 set_rqh 把统计的容器号写入rq_showTime (记录本头物料中 每个容器号出现次数) + // 循环 set_rqh 把统计的容器号写入rq_showTime (记录本头物料中 每个容器号出现次数) for (String rqh : set_rqh) { if (rq_showTime.containsKey(rqh)) { int stt = rq_showTime.get(rqh); @@ -277,7 +276,8 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements } // 给touwuliao_map的 中 按照容器出现次数进行排序 - //循环GongDanList 并给所有工单 中所有任务,写入任务中容器出现次数,并按容器次数进行排序;刷新touwuliao_map(头物料分组合集); + // 循环GongDanList 并给所有工单 + // 中所有任务,写入任务中容器出现次数,并按容器次数进行排序;刷新touwuliao_map(头物料分组合集); List list_show_new = new ArrayList<>(); for (GongDanMingXi fenPei2 : GongDanList) { List list_new = new ArrayList<>(); @@ -290,181 +290,301 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements fenPei2.list = list_new; list_show_new.add(fenPei2); } - //刷新touwuliao_map(头物料分组合集) + // 刷新touwuliao_map(头物料分组合集) touwuliao_map.put(twlKey, list_show_new); } - - //初始化 List twlFenZuList 给所有数据写入twlFenZuList + // 初始化 List twlFenZuList 给所有数据写入twlFenZuList List twlFenZuList = new ArrayList<>(); for (String twlKey : touwuliao_map.keySet()) { List list_show = touwuliao_map.get(twlKey); TwlFenZu twlFenZu = new TwlFenZu(list_show); twlFenZuList.add(twlFenZu); } - //根据 头物料 中所有工单总任务数进行 排序 + // 根据 头物料 中所有工单总任务数进行 排序 Collections.sort(twlFenZuList); - LogPrint(log_TouWuLiaoChaiFen,"---------------------------------------------------头物料拆分排序结果-----------------------------------------------------------------------------------------------"); - LogPrint(log_TouWuLiaoChaiFen,"↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓"); - int wlcountString=0; + LogPrint( + log_TouWuLiaoChaiFen, + "---------------------------------------------------头物料拆分排序结果-----------------------------------------------------------------------------------------------"); + LogPrint( + log_TouWuLiaoChaiFen, + "↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓"); + int wlcountString = 0; for (TwlFenZu twlFenZu : twlFenZuList) { List list_show = twlFenZu.gdPaiXus; for (GongDanMingXi fenPei2 : list_show) { - LogPrint(log_TouWuLiaoChaiFen,"twl" + fenPei2.twl + " GDH:" + fenPei2.gdh - + " GDHCount:" + fenPei2.hangshu+" FenZu:"+fenPei2.list.get(0).chf_fz); + LogPrint(log_TouWuLiaoChaiFen, "twl" + fenPei2.twl + " GDH:" + + fenPei2.gdh + " GDHCount:" + fenPei2.hangshu + + " FenZu:" + fenPei2.list.get(0).chf_fz); StringBuffer rqm = new StringBuffer(); for (FenPei fff : fenPei2.list) { - rqm.append(fff.rqh + "(" + fff.show_time + "/"+fff.chf+") "); - wlcountString=wlcountString+1; + rqm.append(fff.rqh + "(" + fff.show_time + "/" + fff.chf + + ") "); + wlcountString = wlcountString + 1; } - LogPrint(log_TouWuLiaoChaiFen,rqm.toString()); + LogPrint(log_TouWuLiaoChaiFen, rqm.toString()); } - LogPrint(log_TouWuLiaoChaiFen,"--------------------------------------------------------------------------------------------------------------------------------------------------"); + LogPrint( + log_TouWuLiaoChaiFen, + "--------------------------------------------------------------------------------------------------------------------------------------------------"); } - LogPrint(log_TouWuLiaoChaiFen,"↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"); - LogPrint(log_TouWuLiaoChaiFen,"---------------------------------------------------头物料拆分结果-----------------------------------------------------------------------------------------------"); - - LogPrint(log_TouWuLiaoChaiFen,"GongDan_wuLiaoMingXiCout:"+GongDan_wuLiaoMingXiCout+"wlcountString:"+wlcountString); - - - //工作站使用判定 - - - List gzlistGongZuoZhans =new ArrayList(); - for (String gongzuozhancode : gzz_codes) { - int notFinished=(gzz_maps.get(gongzuozhancode)==null?0:gzz_maps.get(gongzuozhancode)); - GongZuoZhan gongZuoZhan=new GongZuoZhan(gongzuozhancode,notFinished,0,true); + LogPrint( + log_TouWuLiaoChaiFen, + "↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"); + LogPrint( + log_TouWuLiaoChaiFen, + "---------------------------------------------------头物料拆分结果-----------------------------------------------------------------------------------------------"); + + LogPrint(log_TouWuLiaoChaiFen, "GongDan_wuLiaoMingXiCout:" + + GongDan_wuLiaoMingXiCout + "wlcountString:" + wlcountString); + + // 工作站使用判定 + + List gzlistGongZuoZhans = new ArrayList(); + for (String gongzuozhancode : gzz_codes) { + int notFinished = (gzz_maps.get(gongzuozhancode) == null ? 0 + : gzz_maps.get(gongzuozhancode)); + GongZuoZhan gongZuoZhan = new GongZuoZhan(gongzuozhancode, + notFinished, 0, true); gzlistGongZuoZhans.add(gongZuoZhan); } Collections.sort(gzlistGongZuoZhans); - + int count_all = syhs + list_fenpei.size();// 所有未处理的数据 int gzz_nx_avg = count_all / gzz_codes.size();// 得到工作站的平均能效, Map gzzMap = new HashMap<>(); - + if (gzz_nx_avg < jhxl) { gzz_nx_avg = jhxl; - int fenpeiALl=0; + int fenpeiALl = 0; for (GongZuoZhan gongZuoZhan : gzlistGongZuoZhans) { - int notFinished=gongZuoZhan.notFinished; - int fenpeicount=gzz_nx_avg-notFinished; - if(fenpeiALl-count_all<=0){ - fenpeiALl=fenpeiALl+fenpeicount; - GongZuoZhan gzz=new GongZuoZhan(gongZuoZhan.code, notFinished, gzz_nx_avg, true); - gzzMap.put(gzz.code,gzz); - }else{ - GongZuoZhan gzz=new GongZuoZhan(gongZuoZhan.code, notFinished, gzz_nx_avg, true); - gzzMap.put(gzz.code,gzz); + int notFinished = gongZuoZhan.notFinished; + int fenpeicount = gzz_nx_avg - notFinished; + if (fenpeiALl - count_all <= 0) { + fenpeiALl = fenpeiALl + fenpeicount; + GongZuoZhan gzz = new GongZuoZhan(gongZuoZhan.code, + notFinished, gzz_nx_avg, true); + gzzMap.put(gzz.code, gzz); + } else { + GongZuoZhan gzz = new GongZuoZhan(gongZuoZhan.code, + notFinished, gzz_nx_avg, true); + gzzMap.put(gzz.code, gzz); } } - }else{ + } else { for (GongZuoZhan gongZuoZhan : gzlistGongZuoZhans) { - int notFinished=gongZuoZhan.notFinished; - //int gzz_nx = gzz_nx_avg - notFinished; - GongZuoZhan gzz=new GongZuoZhan(gongZuoZhan.code, notFinished, gzz_nx_avg, true); - gzzMap.put(gzz.code,gzz); + int notFinished = gongZuoZhan.notFinished; + // int gzz_nx = gzz_nx_avg - notFinished; + GongZuoZhan gzz = new GongZuoZhan(gongZuoZhan.code, + notFinished, gzz_nx_avg, true); + gzzMap.put(gzz.code, gzz); } } - - - LogPrint(log_GongZuoZhanMinXi,"---------------------------------------------------工作站详情-----------------------------------------------------------------------------------------------"); - LogPrint(log_GongZuoZhanMinXi,"↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓"); - for (String key : gzzMap.keySet()) { - GongZuoZhan gongZuoZhan=gzzMap.get(key); - LogPrint(log_GongZuoZhanMinXi,"Code:"+gongZuoZhan.code+" notFinished:"+gongZuoZhan.notFinished+" maxRenWu:"+gongZuoZhan.maxRenWu+" isEnble:"+gongZuoZhan.isEnble); + + LogPrint( + log_GongZuoZhanMinXi, + "---------------------------------------------------工作站详情-----------------------------------------------------------------------------------------------"); + LogPrint( + log_GongZuoZhanMinXi, + "↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓"); + for (String key : gzzMap.keySet()) { + GongZuoZhan gongZuoZhan = gzzMap.get(key); + LogPrint(log_GongZuoZhanMinXi, "Code:" + gongZuoZhan.code + + " notFinished:" + gongZuoZhan.notFinished + " maxRenWu:" + + gongZuoZhan.maxRenWu + " isEnble:" + gongZuoZhan.isEnble); } - LogPrint(log_GongZuoZhanMinXi,"↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"); - LogPrint(log_GongZuoZhanMinXi,"---------------------------------------------------工作站详情-----------------------------------------------------------------------------------------------"); + LogPrint( + log_GongZuoZhanMinXi, + "↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"); + LogPrint( + log_GongZuoZhanMinXi, + "---------------------------------------------------工作站详情-----------------------------------------------------------------------------------------------"); for (TwlFenZu twlFenZu : twlFenZuList) { - List gongDanList = twlFenZu.gdPaiXus; //当前头物料所有的工单组合,以及每个工单的物料明细 - int this_fenzuCount=twlFenZu.wl_count; //当前分组总物料行数 - ListlistGzz= FaiXuGzz(gzzMap); //工作站根据可分配数量进行排序 - - if(gongDanList.size()==1){ - GongDanMingXi gongDanMingXi=gongDanList.get(0); - GongZuoZhan curr_gzz=PiPeiGongZuoZhanForGzzxAndRqh(listGzz,gongDanMingXi,cfhs); - List list_wList=gongDanMingXi.list; + List gongDanList = twlFenZu.gdPaiXus; // 当前头物料所有的工单组合,以及每个工单的物料明细 + int this_fenzuCount = twlFenZu.wl_count; // 当前分组总物料行数 + List listGzz = FaiXuGzz(gzzMap); // 工作站根据可分配数量进行排序 + + if (gongDanList.size() == 1) { + GongDanMingXi gongDanMingXi = gongDanList.get(0); + GongZuoZhan curr_gzz = PiPeiGongZuoZhanForGzzxAndRqh(listGzz, + gongDanMingXi, cfhs); + List 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,""); + 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 < gongDanList.size(); index++) { + GongDanMingXi gongDanMingXi = gongDanList.get(index); + // 当前工单的物料 + List list_wList = gongDanMingXi.list; + + int chao = (list_wList.size() + curr_gzz.notFinished + curr_gzz.renWuList + .size()) - curr_gzz.maxRenWu; + // LogPrint(listGzz.size()); + if (chao <= cfhs || index == gongDanList.size() - 1) { + // LogPrint("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 == gongDanList.size() - 1) { + // 最后一个工单 + gzzMap.put(curr_gzz.code, curr_gzz); + } + } else { + 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 == gongDanList.size() - 1) { + // 最后一个工单 + gzzMap.put(curr_gzz.code, curr_gzz); + } + } + + } + } + + } + int fenPeiCount = 0; + Map gdNextMaps = getGdNextSeq(); + Map gdNextMax_ALL = new HashMap(); + Map gdNextMax_B = new HashMap(); + Map gdNextMax_S = new HashMap(); + for ( String gdh: GongDan_WuLiao_Map.keySet()) { + List gdlist=GongDan_WuLiao_Map.get(gdh); + FenPei fenPei=gdlist.get(0); + String gdhkey = fenPei.gdh + "-"; + String lx = "S";// 小件 + gdNextMax_ALL.put(gdhkey, 1); + if (!gdNextMax_B.containsKey(gdhkey)) { + gdNextMax_B.put(gdhkey, 1); + } + if (!gdNextMax_S.containsKey(gdhkey)) { + gdNextMax_S.put(gdhkey, 1); + } + if ("big".equals(fenPei.wllx)) { + lx = "B";// 大件 + int va = gdNextMax_B.get(gdhkey); + if (fenPei.chf_fz > va) { + gdNextMax_B.put(gdhkey, fenPei.chf_fz); + } }else{ - //多个工单匹配进行 - int gzz_index=0; //当前分配工作站的排序下标 - GongZuoZhan curr_gzz=listGzz.get(0); - for (int index=0;index list_wList=gongDanMingXi.list; - - int chao=(list_wList.size()+curr_gzz.notFinished+curr_gzz.renWuList.size())-curr_gzz.maxRenWu; - //LogPrint(listGzz.size()); - if(chao<=cfhs||index==gongDanList.size()-1){ - //LogPrint("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==gongDanList.size()-1){ - //最后一个工单 - gzzMap.put(curr_gzz.code, curr_gzz); - } - }else{ - 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==gongDanList.size()-1){ - //最后一个工单 - gzzMap.put(curr_gzz.code, curr_gzz); - } - } - + int va = gdNextMax_S.get(gdhkey); + if (fenPei.chf_fz > va) { + gdNextMax_S.put(gdhkey, fenPei.chf_fz); } + } - - } - int fenPeiCount=0; - for (String key : gzzMap.keySet()) { - GongZuoZhan gongZuoZhan=gzzMap.get(key); - LogPrint(log_GongZuoZhanFenPeiJieGuo,"----------------------------------------------------开始分配----------------------------------------------------------------------"); - LogPrint(log_GongZuoZhanFenPeiJieGuo,"Code:"+gongZuoZhan.code+" notFinished:"+gongZuoZhan.notFinished+" maxRenWu:"+gongZuoZhan.maxRenWu+" isEnble:"+gongZuoZhan.isEnble); - LogPrint(log_GongZuoZhanFenPeiJieGuo,"↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓"); + + for (String key : gzzMap.keySet()) { + GongZuoZhan gongZuoZhan = gzzMap.get(key); + LogPrint( + log_GongZuoZhanFenPeiJieGuo, + "----------------------------------------------------开始分配----------------------------------------------------------------------"); + LogPrint(log_GongZuoZhanFenPeiJieGuo, "Code:" + gongZuoZhan.code + + " notFinished:" + gongZuoZhan.notFinished + " maxRenWu:" + + gongZuoZhan.maxRenWu + " isEnble:" + gongZuoZhan.isEnble); + LogPrint( + log_GongZuoZhanFenPeiJieGuo, + "↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓"); for (FenPei fenPei : gongZuoZhan.renWuList) { - fenPeiCount=fenPeiCount+1; - String[] ids=fenPei.tsakId.split(","); - for(int i=0;ilistGzz,GongDanMingXi gongDanMingXi,int cfhs){ - List list_wList=gongDanMingXi.list; - GongZuoZhan check=listGzz.get(0); - int max_rqh_count=0; - int max_gzzx=0; - LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"------------------------匹配容器号和工作中心-----------------------------------------------"); - LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓"); - LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"当前工单号:"+gongDanMingXi.gdh); - for (GongZuoZhan gzz : listGzz) { - LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"当前工作站:"+gzz.code); - Listlist=gzz.renWuList; - StringBuffer sb_gzzx=new StringBuffer(); - StringBuffer sb_rqh=new StringBuffer(); - for (FenPei fenPei : list) { - sb_gzzx.append(fenPei.gzzx+" , "); - sb_rqh.append(fenPei.rqh+" , "); - } - int chao=(list_wList.size()+gzz.notFinished+gzz.renWuList.size())-gzz.maxRenWu; - //LogPrint(listGzz.size()); - if(chao>cfhs){ - LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"工作站:"+gzz.code+"超出:"+chao+"无法分配,跳过此工作站"); - continue; - } - StringBuffer sb_pipei=new StringBuffer(); - 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; - sb_pipei.append(fenPei.rqh); - } - } - LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"工作站:"+gzz.code+" gzzx:"+gzzx+" rqh_count:"+rqh_count); - LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,sb_gzzx.toString()); - LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,sb_rqh.toString()); - LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"匹配上的容器号: "+sb_pipei.toString()); - Boolean isPiPeiGzzx=false;//true 优先按照工作中心匹配,再按照容器号。false直接按照容器号匹配散单 - 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; - }else if(rqh_count==max_rqh_count && gzzx==1 && max_gzzx==0){ - //如果容器号匹配次数相同,且上次匹配工作站未匹配工作中心,本次匹配到了工作中心,本次匹配设为最优解 - max_rqh_count=rqh_count; - max_gzzx=gzzx; - check=gzz; - } - - } + + public GongZuoZhan PiPeiGongZuoZhanForGzzxAndRqh(List listGzz, + GongDanMingXi gongDanMingXi, int cfhs) { + List list_wList = gongDanMingXi.list; + GongZuoZhan check = listGzz.get(0); + int max_rqh_count = 0; + int max_gzzx = 0; + LogPrint( + log_GongZuoZhanPiPeiForRqhAndGzzx, + "------------------------匹配容器号和工作中心-----------------------------------------------"); + LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx, + "↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓"); + LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx, "当前工单号:" + + gongDanMingXi.gdh); + for (GongZuoZhan gzz : listGzz) { + LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx, "当前工作站:" + gzz.code); + List list = gzz.renWuList; + StringBuffer sb_gzzx = new StringBuffer(); + StringBuffer sb_rqh = new StringBuffer(); + for (FenPei fenPei : list) { + sb_gzzx.append(fenPei.gzzx + " , "); + sb_rqh.append(fenPei.rqh + " , "); } - - LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"容器号匹配次数:"+max_rqh_count+" 工作中心匹配次数:"+max_gzzx+" 工单号:"+gongDanMingXi.gdh+" 工作站:"+check.code); - LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"); - LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"------------------------匹配容器号和工作中心-----------------------------------------------"); - return check; + int chao = (list_wList.size() + gzz.notFinished + gzz.renWuList + .size()) - gzz.maxRenWu; + // LogPrint(listGzz.size()); + if (chao > cfhs) { + LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx, "工作站:" + gzz.code + + "超出:" + chao + "无法分配,跳过此工作站"); + continue; + } + StringBuffer sb_pipei = new StringBuffer(); + 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; + sb_pipei.append(fenPei.rqh); + } + } + LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx, "工作站:" + gzz.code + + " gzzx:" + gzzx + " rqh_count:" + rqh_count); + LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx, sb_gzzx.toString()); + LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx, sb_rqh.toString()); + LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx, + "匹配上的容器号: " + sb_pipei.toString()); + Boolean isPiPeiGzzx = false;// true 优先按照工作中心匹配,再按照容器号。false直接按照容器号匹配散单 + 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; + } else if (rqh_count == max_rqh_count && gzzx == 1 + && max_gzzx == 0) { + // 如果容器号匹配次数相同,且上次匹配工作站未匹配工作中心,本次匹配到了工作中心,本次匹配设为最优解 + max_rqh_count = rqh_count; + max_gzzx = gzzx; + check = gzz; + } + + } + } + + LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx, "容器号匹配次数:" + max_rqh_count + + " 工作中心匹配次数:" + max_gzzx + " 工单号:" + gongDanMingXi.gdh + + " 工作站:" + check.code); + LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx, + "↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"); + LogPrint( + log_GongZuoZhanPiPeiForRqhAndGzzx, + "------------------------匹配容器号和工作中心-----------------------------------------------"); + return check; } - - - public List FaiXuGzz(Map gzzMap){ - List list =new ArrayList(); - for (String key: gzzMap.keySet()) { - if(gzzMap.get(key).isEnble){ + + public List FaiXuGzz(Map gzzMap) { + List list = new ArrayList(); + for (String key : gzzMap.keySet()) { + if (gzzMap.get(key).isEnble) { list.add(gzzMap.get(key)); } } Collections.sort(list); return list; } - - - class GongZuoZhan implements Comparable{ - public GongZuoZhan(String code,int notFinished,int maxRenWu,boolean isEnble){ - this.code=code; - this.notFinished=notFinished; - this.maxRenWu=maxRenWu; - this.isEnble=isEnble; + + class GongZuoZhan implements Comparable { + public GongZuoZhan(String code, int notFinished, int maxRenWu, + boolean isEnble) { + this.code = code; + this.notFinished = notFinished; + this.maxRenWu = maxRenWu; + this.isEnble = isEnble; } - public String code=""; + + public String code = ""; public boolean isEnble; public int maxRenWu; - public int notFinished =0; - public List renWuList=new ArrayList(); - + public int notFinished = 0; + public List renWuList = new ArrayList(); + Map GongZuoZhongXinMap = new HashMap<>(); Map RongQIHaoMap = new HashMap<>(); + @Override public int compareTo(GongZuoZhan other) { // TODO Auto-generated method stub - return this.notFinished+renWuList.size()-other.notFinished-other.renWuList.size(); + return this.notFinished + renWuList.size() - other.notFinished + - other.renWuList.size(); } } - - - - public List Paixu(Listlist_fenpei ,int cfhs){ + + public List Paixu(List list_fenpei, int cfhs) { Map> GongDan_WuLiao_Map = new HashMap<>(); - //第一步:给所有任务进行分组(根据工单号,和物料类型) + // 第一步:给所有任务进行分组(根据工单号,和物料类型) for (FenPei fenPei : list_fenpei) { String GongDan_WuLiao = fenPei.gdh + fenPei.wllx; - if (((java.util.Map) GongDan_WuLiao_Map).containsKey(GongDan_WuLiao)) { - - List list_count = GongDan_WuLiao_Map.get(GongDan_WuLiao); + if (((java.util.Map) GongDan_WuLiao_Map) + .containsKey(GongDan_WuLiao)) { + + List list_count = GongDan_WuLiao_Map + .get(GongDan_WuLiao); list_count.add(fenPei); GongDan_WuLiao_Map.put(GongDan_WuLiao, list_count); } else { @@ -615,38 +753,37 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements } } - //打印分组情况 - PirntGongdanMap(GongDan_WuLiao_Map,"首次工单分组"); - int sumCout = 0; //所有工单总任务数 - //给分组后的结果写入 GongDanMingXi 类中,记录工单(头物料,行数,工单号),并按工单的任务行数进行排序 + // 打印分组情况 + PirntGongdanMap(GongDan_WuLiao_Map, "首次工单分组"); + int sumCout = 0; // 所有工单总任务数 + // 给分组后的结果写入 GongDanMingXi 类中,记录工单(头物料,行数,工单号),并按工单的任务行数进行排序 List GongDan_List = new ArrayList(); for (String key : GongDan_WuLiao_Map.keySet()) { sumCout = sumCout + GongDan_WuLiao_Map.get(key).size(); - //对工单中的任务明细,根据任务的容器号名称进行排序 + // 对工单中的任务明细,根据任务的容器号名称进行排序 List list_ll1 = GongDan_WuLiao_Map.get(key); Collections.sort(list_ll1); GongDanMingXi gdPaiXu = new GongDanMingXi(key, list_ll1); GongDan_List.add(gdPaiXu); } - //对所有工单进行排序 (按工单的任务行数进行排序) + // 对所有工单进行排序 (按工单的任务行数进行排序) Collections.sort(GongDan_List); - //打印排序结果 - PirntGongDanMingXiList(GongDan_List,"首次工单排序"); - - + // 打印排序结果 + PirntGongDanMingXiList(GongDan_List, "首次工单排序"); // 先根据头物料分组 如果头物料相同 且工单总行数 差异小于4的工单分到一个组里面 (尽量分配到同一工作站) Map> touwuliao_map = new HashMap<>(); for (GongDanMingXi gdPaiXu : GongDan_List) { // 获取当前头物料 - String fenzu = gdPaiXu.twl +"_"+ gdPaiXu.list.get(0).wllx; + String fenzu = gdPaiXu.twl + "_" + gdPaiXu.list.get(0).wllx; String gdh = gdPaiXu.gdh; // 获取当前工单的数量 int currCount = gdPaiXu.hangshu; boolean isFind = false; for (String twlKey : touwuliao_map.keySet()) { - String twl_in = touwuliao_map.get(twlKey).get(0).twl + "_"+ touwuliao_map.get(twlKey).get(0).list.get(0).wllx; + String twl_in = touwuliao_map.get(twlKey).get(0).twl + "_" + + touwuliao_map.get(twlKey).get(0).list.get(0).wllx; int currCount_in = touwuliao_map.get(twlKey).get(0).hangshu; if (twl_in.equals(fenzu) && Math.abs(currCount - currCount_in) <= 4) { @@ -662,42 +799,42 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements // 未匹配到数据,自己单独一组 List llist = new ArrayList(); llist.add(gdPaiXu); - touwuliao_map.put(fenzu+"_"+gdh, llist); + touwuliao_map.put(fenzu + "_" + gdh, llist); } } - //打印头物料分组后的情况 - PirntFirstTouwuLiaoMap(touwuliao_map,"首次头物料分组"); - + // 打印头物料分组后的情况 + PirntFirstTouwuLiaoMap(touwuliao_map, "首次头物料分组"); // 计算没个容器号出现得次数(在每个头物料得分组里面) for (String twlKey : touwuliao_map.keySet()) { List GongDanList = touwuliao_map.get(twlKey); - //初始化rq_showTime 记录容器号次数 + // 初始化rq_showTime 记录容器号次数 Map rq_showTime = new HashMap<>(); - //循环工单中所有任务 + // 循环工单中所有任务 for (GongDanMingXi fenPei2 : GongDanList) { - // 初始化set_rqh 记录本工单容器号出现次数,(set保证同一工单中一个容器号只计算一次) + // 初始化set_rqh 记录本工单容器号出现次数,(set保证同一工单中一个容器号只计算一次) Set set_rqh = new HashSet<>(); for (FenPei fff : fenPei2.list) { // 通过set记录容器号 set_rqh.add(fff.rqh); } - //循环 set_rqh 把统计的容器号写入rq_showTime (记录本头物料中 每个容器号出现次数) + // 循环 set_rqh 把统计的容器号写入rq_showTime (记录本头物料中 每个容器号出现次数) for (String rqh : set_rqh) { if (rq_showTime.containsKey(rqh)) { int stt = rq_showTime.get(rqh); rq_showTime.put(rqh, stt + 1); } else { rq_showTime.put(rqh, 1); - + } } } // 给touwuliao_map的 中 按照容器出现次数进行排序 - //循环GongDanList 并给所有工单 中所有任务,写入任务中容器出现次数,并按容器次数进行排序;刷新touwuliao_map(头物料分组合集); + // 循环GongDanList 并给所有工单 + // 中所有任务,写入任务中容器出现次数,并按容器次数进行排序;刷新touwuliao_map(头物料分组合集); List list_show_new = new ArrayList<>(); for (GongDanMingXi fenPei2 : GongDanList) { List list_new = new ArrayList<>(); @@ -710,136 +847,159 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements fenPei2.list = list_new; list_show_new.add(fenPei2); } - //刷新touwuliao_map(头物料分组合集) + // 刷新touwuliao_map(头物料分组合集) touwuliao_map.put(twlKey, list_show_new); } - + // 对touwuliao_map(头物料分组合集) 的单个工单大于拆分行数数的进行拆分 - //初始化 list_new (记录拆分后的标识,提供给后无进行分组) - List list_new =new ArrayList<>(); + // 初始化 list_new (记录拆分后的标识,提供给后无进行分组) + List list_new = new ArrayList<>(); for (String twlKey : touwuliao_map.keySet()) { List list_show = touwuliao_map.get(twlKey); - int max_len=0; - //计算本头物料中的 工单的最大任务数(多个工单最多的任务的工单) - if(list_show.size()>0){ + int max_len = 0; + // 计算本头物料中的 工单的最大任务数(多个工单最多的任务的工单) + if (list_show.size() > 0) { for (GongDanMingXi gdPaiXu : list_show) { - if(max_len rq_last_show = new HashMap<>(); Map rq_last_show2 = new HashMap<>(); - for(int fz_col=0;fz_col list_fen=gdPaiXu.list; - //防止本工单没有这么多任务数 - if(fz_col list_fen = gdPaiXu.list; + // 防止本工单没有这么多任务数 + if (fz_col < gdPaiXu.list.size()) { + FenPei fenPei = list_fen.get(fz_col); rq_last_show2.put(fenPei.rqh, 1); - if((fz_col+1)%cfhs==1||(fz_col+1)%cfhs==2){ - //如果 超过最大拆分行的第一列 第二列中 出现了 上一个分组的容器,则本 任务分给上一个组 - if(rq_last_show.containsKey(fenPei.rqh)){ - fenPei.chf_fz=(fz_col)/cfhs; - fenPei.chf=(fz_col+1)+""; - fenPei.twl_fz=twlKey; - list_new.add(fenPei); - }else{ - fenPei.chf_fz=(fz_col)/cfhs+1; - fenPei.chf=(fz_col+1)+""; - fenPei.twl_fz=twlKey; - list_new.add(fenPei); - } - - }else{ - //其他列 - fenPei.chf_fz=(fz_col)/cfhs+1; - fenPei.chf=(fz_col+1)+""; - fenPei.twl_fz=twlKey; + if ((fz_col + 1) % cfhs == 1 + || (fz_col + 1) % cfhs == 2) { + // 如果 超过最大拆分行的第一列 第二列中 出现了 上一个分组的容器,则本 任务分给上一个组 + if (rq_last_show.containsKey(fenPei.rqh)) { + fenPei.chf_fz = (fz_col) / cfhs; + fenPei.chf = (fz_col + 1) + ""; + fenPei.twl_fz = twlKey; + list_new.add(fenPei); + } else { + fenPei.chf_fz = (fz_col) / cfhs + 1; + fenPei.chf = (fz_col + 1) + ""; + fenPei.twl_fz = twlKey; + list_new.add(fenPei); + } + + } else { + // 其他列 + fenPei.chf_fz = (fz_col) / cfhs + 1; + fenPei.chf = (fz_col + 1) + ""; + fenPei.twl_fz = twlKey; list_new.add(fenPei); } } - + } - - if((fz_col+1)%cfhs==0){ - //拆分最大行数的时候 - //记录上一个分组中的所有容器 - rq_last_show=rq_last_show2; - rq_last_show2= new HashMap<>(); + + if ((fz_col + 1) % cfhs == 0) { + // 拆分最大行数的时候 + // 记录上一个分组中的所有容器 + rq_last_show = rq_last_show2; + rq_last_show2 = new HashMap<>(); } - - + } } - - - return list_new; + return list_new; } - - public void PirntFirstTouwuLiaoMap(Map> touwuliao_map ,String title){ - LogPrint(log_PirntFirstTouwuLiaoMap,""); - LogPrint(log_PirntFirstTouwuLiaoMap,""); - LogPrint(log_PirntFirstTouwuLiaoMap,"-------------------------------------------------------------------------------------------------------"); - LogPrint(log_PirntFirstTouwuLiaoMap,"------------------------------------"+title+"------------------------------------------"); + + public void PirntFirstTouwuLiaoMap( + Map> touwuliao_map, String title) { + LogPrint(log_PirntFirstTouwuLiaoMap, ""); + LogPrint(log_PirntFirstTouwuLiaoMap, ""); + LogPrint( + log_PirntFirstTouwuLiaoMap, + "-------------------------------------------------------------------------------------------------------"); + LogPrint(log_PirntFirstTouwuLiaoMap, + "------------------------------------" + title + + "------------------------------------------"); for (String twlKey : touwuliao_map.keySet()) { List list_show = touwuliao_map.get(twlKey); for (GongDanMingXi gongDan : list_show) { - LogPrint(log_PirntFirstTouwuLiaoMap,"头物料 " + gongDan.twl + " 工单号:" + gongDan.gdh+ " 头物料分组KEY:" + twlKey + " 任务行数:"+ gongDan.hangshu); - + LogPrint(log_PirntFirstTouwuLiaoMap, "头物料 " + gongDan.twl + + " 工单号:" + gongDan.gdh + " 头物料分组KEY:" + twlKey + + " 任务行数:" + gongDan.hangshu); + StringBuffer rqm = new StringBuffer(); for (FenPei fff : gongDan.list) { rqm.append(fff.rqh + ","); } - LogPrint(log_PirntFirstTouwuLiaoMap,"容器号: "+rqm.toString()); - + LogPrint(log_PirntFirstTouwuLiaoMap, "容器号: " + rqm.toString()); + } - LogPrint(log_PirntFirstTouwuLiaoMap,"-----------------------------------------------------------------------"); - LogPrint(log_PirntFirstTouwuLiaoMap,""); - LogPrint(log_PirntFirstTouwuLiaoMap,""); + LogPrint(log_PirntFirstTouwuLiaoMap, + "-----------------------------------------------------------------------"); + LogPrint(log_PirntFirstTouwuLiaoMap, ""); + LogPrint(log_PirntFirstTouwuLiaoMap, ""); } } - - public void PirntGongDanMingXiList(List GongDan_List ,String title){ - LogPrint(log_PirntGongDanMingXiList,""); - LogPrint(log_PirntGongDanMingXiList,""); - LogPrint(log_PirntGongdanMap,"-------------------------------------------------------------------------------------------------------"); - LogPrint(log_PirntFirstTouwuLiaoMap,"------------------------------------"+title+"------------------------------------------"); + + public void PirntGongDanMingXiList(List GongDan_List, + String title) { + LogPrint(log_PirntGongDanMingXiList, ""); + LogPrint(log_PirntGongDanMingXiList, ""); + LogPrint( + log_PirntGongdanMap, + "-------------------------------------------------------------------------------------------------------"); + LogPrint(log_PirntFirstTouwuLiaoMap, + "------------------------------------" + title + + "------------------------------------------"); for (GongDanMingXi gdPaiXu : GongDan_List) { - LogPrint(log_PirntGongDanMingXiList,"工单号:" +gdPaiXu.gdh); - List list_FenPei =gdPaiXu.list; + LogPrint(log_PirntGongDanMingXiList, "工单号:" + gdPaiXu.gdh); + List list_FenPei = gdPaiXu.list; for (FenPei fenPei : list_FenPei) { - LogPrint(log_PirntGongDanMingXiList,"工单号:" +fenPei.gdh+" 物料类型:"+fenPei.wllx+" 头物料:"+fenPei.twl+" 容器号: "+fenPei.rqh); + LogPrint(log_PirntGongDanMingXiList, "工单号:" + fenPei.gdh + + " 物料类型:" + fenPei.wllx + " 头物料:" + fenPei.twl + + " 容器号: " + fenPei.rqh); } - LogPrint(log_PirntGongdanMap,""); - LogPrint(log_PirntGongdanMap,"-------------------------------------------------------------------------------------------------------"); - } - } - - public void PirntGongdanMap(Map> GongDan_WuLiao_Map,String title){ - LogPrint(log_PirntGongDanMingXiList,""); - LogPrint(log_PirntGongDanMingXiList,""); - LogPrint(log_PirntGongdanMap,"-------------------------------------------------------------------------------------------------------"); - LogPrint(log_PirntFirstTouwuLiaoMap,"------------------------------------"+title+"------------------------------------------"); - for (String key : GongDan_WuLiao_Map.keySet()) { - LogPrint(log_PirntGongdanMap,"工单号:" +key); - LogPrint(log_PirntGongdanMap,""); - List list_FenPei =GongDan_WuLiao_Map.get(key); - for (FenPei fenPei : list_FenPei) { - LogPrint(log_PirntGongdanMap,"工单号:" +fenPei.gdh+" 物料类型:"+fenPei.wllx+" 头物料:"+fenPei.twl+" 容器号: "+fenPei.rqh); - } - LogPrint(log_PirntGongdanMap,""); - LogPrint(log_PirntGongdanMap,"-------------------------------------------------------------------------------------------------------"); + LogPrint(log_PirntGongdanMap, ""); + LogPrint( + log_PirntGongdanMap, + "-------------------------------------------------------------------------------------------------------"); } } + public void PirntGongdanMap(Map> GongDan_WuLiao_Map, + String title) { + LogPrint(log_PirntGongDanMingXiList, ""); + LogPrint(log_PirntGongDanMingXiList, ""); + LogPrint( + log_PirntGongdanMap, + "-------------------------------------------------------------------------------------------------------"); + LogPrint(log_PirntFirstTouwuLiaoMap, + "------------------------------------" + title + + "------------------------------------------"); + for (String key : GongDan_WuLiao_Map.keySet()) { + LogPrint(log_PirntGongdanMap, "工单号:" + key); + LogPrint(log_PirntGongdanMap, ""); + List list_FenPei = GongDan_WuLiao_Map.get(key); + for (FenPei fenPei : list_FenPei) { + LogPrint(log_PirntGongdanMap, "工单号:" + fenPei.gdh + " 物料类型:" + + fenPei.wllx + " 头物料:" + fenPei.twl + " 容器号: " + + fenPei.rqh); + } + LogPrint(log_PirntGongdanMap, ""); + LogPrint( + log_PirntGongdanMap, + "-------------------------------------------------------------------------------------------------------"); + } + } class TwlFenZu implements Comparable { List gdPaiXus; @@ -939,7 +1099,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements * 拆分号 */ public String chf; - + /** * 拆分号分组 */ @@ -980,18 +1140,31 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements try { str = Integer.parseInt(obj[i].toString()); } catch (Exception e) { - //LogPrint(i + "" + e.toString()); + // LogPrint(i + "" + e.toString()); str = -1; } return str; } + // 工作站初始效能 + public int getValueGzzNumber(ShiXiao lx_sx) { + int str = 60; + try { + str = Integer.parseInt(lx_sx.getTime()) / 60 + * (int) lx_sx.getNumber(); + } catch (Exception e) { + // LogPrint(i + "" + e.toString()); + str = 60; + } + return str; + } + public String getValueString(Object[] obj, int i) { String str = ""; try { str = (String) obj[i]; } catch (Exception e) { - //LogPrint(i + "" + e.toString()); + // LogPrint(i + "" + e.toString()); str = ""; } return str; @@ -1002,7 +1175,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements try { str = Long.parseLong(obj[i].toString()); } catch (Exception e) { - //LogPrint(i + "" + e.toString()); + // LogPrint(i + "" + e.toString()); str = 0l; } return str; @@ -1014,30 +1187,32 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements v = Float.parseFloat(obj[i].toString()); } catch (Exception e) { v = 0; - //LogPrint(i + "" + e.toString()); + // LogPrint(i + "" + e.toString()); } return v; } public List getGzzIds(Long zone_id) { String hql = "select id from LocationStorage l where l.type='拣货' and l.warehouseArea.id=" - + zone_id +" and l.beAuto=1"; + + zone_id + " and l.beAuto=1"; List ids = commonDao.findByQuery(hql); return ids; } public List getGzzCodes(Long zone_id) { String hql = "select code from LocationStorage l where l.type='拣货' and l.warehouseArea.id=" - + zone_id+" and l.beAuto=1"; + + zone_id + " and l.beAuto=1"; List codes = commonDao.findByQuery(hql); return codes; } - public Map gzzCount() { + // 工作站剩余任务量 + public Map gzzCount(String waveDocCode) { Session session = ((HibernateDaoSupport) this.commonDao) .getSessionFactory().openSession(); String sql = "select v.gzz,count(v.gzz) gzz_count from " - + " (SELECT MAX ( t.END_REGION ) AS gzz FROM task t " +// + " (SELECT MAX ( t.END_REGION ) AS gzz FROM task t " + + " (SELECT MAX ( t.old_gzz ) AS gzz FROM task t " + " LEFT JOIN PICK_TICKET_DETAIL ptd ON ptd.id= t.PICK_TICKET_DETAIL_ID " + " LEFT JOIN PICK_TICKET pt ON pt.id= ptd.PICK_TICKET_ID " + " LEFT JOIN LOCATION loc ON loc.id= t.SRC_LOC_ID " @@ -1045,27 +1220,41 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements + " LEFT JOIN ITEM item ON item.id= ik.ITEM_ID " + " LEFT JOIN WAVE_DOC wd ON wd.id= t.WAVE_DOC_ID " + " WHERE 1 = 1 AND pt.BILL_TYPE_ID= 1094 and loc.ZONE_ID in (1763,1765,1766) " - + " AND t.agv_Status in (1,2) " - + " AND t.WAVE_DOC_ID IS NOT NULL " + + " AND t.agv_Status in (-1,1,2) " + + " AND t.WAVE_DOC_ID IS NOT NULL and t.END_REGION is not null and wd.code!='" + + waveDocCode + + "' " + " GROUP BY pt.code,t.BILLCODE,loc.id,loc.code,ik.PROP_C1,ik.PROP_C2,ik.PROP_C3,ik.PROP_D1,ik.PROP_D2,item.ISBOM ) v " + " GROUP BY v.gzz"; - LogPrint(log_sql,sql); Query query = session.createSQLQuery(sql); List objs = (List) query.list(); Map gdCount = new HashMap(); - if(objs.size()>0){ + if (objs.size() > 0) { for (int i = 0; i < objs.size(); i++) { Object[] obj = objs.get(i); - - gdCount.put(obj[0].toString()+"", getValueInt(obj, 1)); - + if (obj[0] != null) { + gdCount.put(obj[0].toString() + "", getValueInt(obj, 1)); + } } } - + session.close(); return gdCount; } + // 工作站剩余任务量 + public Map getGdNextSeq() { + String hql = " from Sequence"; + List list = commonDao.findByQuery(hql); + Map maps = new HashMap(); + for (Sequence seq : list) { + maps.put(seq.getSequenceKey().getKey(), seq); + } + + return maps; + } + + // 拆分行数查询 public ShiXiao kqShiXiao(Long zone_id) { String hql = " from ShiXiao sx where sx.warehouseArea.id=" + zone_id; List list = commonDao.findByQuery(hql);