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 39a83af..7f53670 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 @@ -36,33 +36,54 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements public void allocateGZZ(List ids) { for (Long id : ids) { WaveDoc waveDoc = commonDao.get(WaveDoc.class, id); - ShiXiao lx_sx=commonDao.get(ShiXiao.class, NewWaveFlag.LKQ); - ShiXiao hj_sx=commonDao.get(ShiXiao.class, NewWaveFlag.LKQ); - ShiXiao lk_sx=commonDao.get(ShiXiao.class, NewWaveFlag.LKQ); - //得到工作站剩余任务行数 - List lx_codes=getGzzCodes(NewWaveFlag.LXQ); - List hj_codes=getGzzCodes(NewWaveFlag.HJQ); - List lk_codes=getGzzCodes(NewWaveFlag.LKQ); - Map maps=gzzCount(); - int lxCount=0;//工作站任务未处理任务数 - int hjCount=0; - int lkCount=0; - for(String code:lx_codes){ - lxCount+=maps.get(code); + ShiXiao lx_sx = commonDao.get(ShiXiao.class, NewWaveFlag.LKQ); + ShiXiao hj_sx = commonDao.get(ShiXiao.class, NewWaveFlag.LKQ); + ShiXiao lk_sx = commonDao.get(ShiXiao.class, NewWaveFlag.LKQ); + // 得到工作站剩余任务行数 + List lx_codes = getGzzCodes(NewWaveFlag.LXQ);// 自动创波工作站 + List hj_codes = getGzzCodes(NewWaveFlag.HJQ); + List lk_codes = getGzzCodes(NewWaveFlag.LKQ); + Map maps = gzzCount();// 所有工作站没完成的任务 + int lxCount = 0;// 工作站任务未处理任务数 + int hjCount = 0; + int lkCount = 0; + try { + for (String code : lx_codes) { + lxCount += maps.get(code); + } + } catch (Exception e) { + lxCount = 0; } - for(String code:hj_codes){ - hjCount+=maps.get(code); + try { + for (String code : hj_codes) { + hjCount += maps.get(code); + } + } catch (Exception e) { + hjCount = 0; } - for(String code:lk_codes){ - lkCount+=maps.get(code); + try { + for (String code : lk_codes) { + lkCount += maps.get(code); + } + } catch (Exception e) { + lkCount = 0; } - allocateGZZ(waveDoc.getCode(),NewWaveFlag.LKQ, lx_codes,(int)lx_sx.getTaskD(),(int)lx_sx.getNumber(),lxCount,maps); - allocateGZZ(waveDoc.getCode(),NewWaveFlag.HJQ, hj_codes,(int)hj_sx.getTaskD(),(int)hj_sx.getNumber(),hjCount,maps); - allocateGZZ(waveDoc.getCode(),NewWaveFlag.LKQ, lk_codes,(int)lk_sx.getTaskD(),(int)lk_sx.getNumber(),lkCount,maps); + allocateGZZ(waveDoc.getCode(), NewWaveFlag.LKQ, lx_codes, + (int) lx_sx.getTaskD(), (int) lx_sx.getNumber(), lxCount, + maps); + allocateGZZ(waveDoc.getCode(), NewWaveFlag.HJQ, hj_codes, + (int) hj_sx.getTaskD(), (int) hj_sx.getNumber(), hjCount, + maps); + allocateGZZ(waveDoc.getCode(), NewWaveFlag.LKQ, lk_codes, + (int) lk_sx.getTaskD(), (int) lk_sx.getNumber(), lkCount, + maps); + } } - public void allocateGZZ(String waveDocCode, Long zone_id,List gzz_codes,int cfhs,int jhxl,int syhs,Map gzz_maps) { + public void allocateGZZ(String waveDocCode, Long zone_id, + List gzz_codes, int cfhs, int jhxl, int syhs, + Map gzz_maps) { Session session = ((HibernateDaoSupport) this.commonDao) .getSessionFactory().openSession(); /* try { */ @@ -99,14 +120,13 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements + "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 "; - if(zone_id!=null){ - sql+=" and z.id="+zone_id; + + waveDocCode + "' and t.WAVE_DOC_ID is not null "; + if (zone_id != null) { + sql += " and z.id=" + zone_id; } - // " t.PLAN_QUANTITY_MU-t.MOVED_QUANTITY_MU>0 and t.agv_status=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 "; + // " t.PLAN_QUANTITY_MU-t.MOVED_QUANTITY_MU>0 and t.agv_status=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 "; logger.info(sql); Query query = session.createSQLQuery(sql); List list = (List) query.list(); @@ -197,18 +217,20 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements for (GdPaiXu gdPaiXu : gd_paixuList) { // 获取当前头物料 - String twl = gdPaiXu.twl; + String fenzu = gdPaiXu.twl + gdPaiXu.list.get(0).wllx; + String gdh = gdPaiXu.gdh; + // 获取当前工单的数量 int currCount = gdPaiXu.hangshu; // logger.info("---gdh:"+gdh+" currCount:"+currCount); // 在touwuliao_map中进行匹配 boolean isFind = false; for (String twlKey : touwuliao_map.keySet()) { - String twl_in = touwuliao_map.get(twlKey).get(0).twl; - String gdh_in = touwuliao_map.get(twlKey).get(0).gdh; + 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(twl) + if (twl_in.equals(fenzu) && Math.abs(currCount - currCount_in) <= 4) { // 在分配好的数据中找到了相同的头物料 且 数量差小于4 List old = touwuliao_map.get(twlKey); @@ -222,7 +244,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements // 未匹配到数据,自己单独一组 List llist = new ArrayList(); llist.add(gdPaiXu); - touwuliao_map.put(twl + "_" + gdh, llist); + touwuliao_map.put(fenzu + "_" + gdh, llist); } @@ -234,7 +256,9 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements for (String twlKey : touwuliao_map.keySet()) { List list_show = touwuliao_map.get(twlKey); for (GdPaiXu fenPei2 : list_show) { - logger.info("twl" + fenPei2.twl + " GDH:" + fenPei2.gdh+ " twlKey:" + twlKey + " GDHCount:"+ fenPei2.hangshu); + logger.info("twl" + fenPei2.twl + " GDH:" + fenPei2.gdh + + " twlKey:" + twlKey + " GDHCount:" + + fenPei2.hangshu); twl_count++; StringBuffer rqm = new StringBuffer(); for (FenPei fff : fenPei2.list) { @@ -268,10 +292,12 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements if (rq_showTime.containsKey(rqh)) { int stt = rq_showTime.get(rqh); rq_showTime.put(rqh, stt + 1); - rqm_str.append(rqh + " __" + stt + "("+ rq_showTime.get(rqh) + ")" + ","); + rqm_str.append(rqh + " __" + stt + "(" + + rq_showTime.get(rqh) + ")" + ","); } else { rq_showTime.put(rqh, 1); - rqm_str.append(rqh + " __" + 0 + "("+ rq_showTime.get(rqh) + ")" + ","); + rqm_str.append(rqh + " __" + 0 + "(" + + rq_showTime.get(rqh) + ")" + ","); } } @@ -302,11 +328,12 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements for (String twlKey : touwuliao_map.keySet()) { List list_show = touwuliao_map.get(twlKey); for (GdPaiXu fenPei2 : list_show) { - logger.info("twl" + fenPei2.twl + " GDH:" + fenPei2.gdh+ " twlKey:" + twlKey + " GDHCount:"+ fenPei2.hangshu); - twl_count++; + logger.info("twl" + fenPei2.twl + " GDH:" + fenPei2.gdh + + " twlKey:" + twlKey + " GDHCount:" + + fenPei2.hangshu); StringBuffer rqm = new StringBuffer(); for (FenPei fff : fenPei2.list) { - rqm.append(fff.rqh + "("+fff.show_time+") "); + rqm.append(fff.rqh + "(" + fff.show_time + ") "); } logger.info(rqm.toString()); } @@ -314,18 +341,42 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements logger.info("--------------------------------------------------------------------------------------------------------------------------------------------------"); } - - int count_all=syhs+list_fenpei.size();//所有未处理的数据 - int gzz_nx_avg=count_all/gzz_codes.size();//得到工作站的平均能效, - if(gzz_nx_avg paixu = new ArrayList<>(); + for (String twlKey : touwuliao_map.keySet()) { + List list_show = touwuliao_map.get(twlKey); + TwlFenZu twlFenZu = new TwlFenZu(list_show); + paixu.add(twlFenZu); } - //分配工作站,每个工作站剩余可分配订单数 - for(String code:gzz_codes){ - int gzz_nx=gzz_nx_avg-gzz_maps.get(code); + Collections.sort(paixu); + + for (TwlFenZu twlFenZu : paixu) { + List list_show = twlFenZu.gdPaiXus; + for (GdPaiXu fenPei2 : list_show) { + logger.info("twl" + fenPei2.twl + " GDH:" + fenPei2.gdh + + " GDHCount:" + fenPei2.hangshu); + StringBuffer rqm = new StringBuffer(); + for (FenPei fff : fenPei2.list) { + rqm.append(fff.rqh + "(" + fff.show_time + ") "); + } + logger.info(rqm.toString()); + } + logger.info("--------------------------------------------------------------------------------------------------------------------------------------------------"); + logger.info("--------------------------------------------------------------------------------------------------------------------------------------------------"); + } - + + int count_all = syhs + list_fenpei.size();// 所有未处理的数据 + int gzz_nx_avg = count_all / gzz_codes.size();// 得到工作站的平均能效, + if (gzz_nx_avg < jhxl) {// 小于默认值则取默认 + gzz_nx_avg = jhxl; + } + // 分配工作站,每个工作站剩余可分配订单数 + for (String code : gzz_codes) { + int gzz_nx = gzz_nx_avg - gzz_maps.get(code); + + } + // 写入数据库 /* @@ -355,6 +406,26 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements } } + class TwlFenZu implements Comparable { + List gdPaiXus; + public int wl_count = 0; + + public TwlFenZu(List gdPaiXus) { + this.gdPaiXus = gdPaiXus; + int count = 0; + for (GdPaiXu gdPaiXu : gdPaiXus) { + count = count + gdPaiXu.list.size(); + } + this.wl_count = count; + } + + public int compareTo(TwlFenZu other) { + // TODO Auto-generated method stub + return other.wl_count - this.wl_count; + } + + } + class GdPaiXu implements Comparable { public String gdh; // 工单号 public int hangshu;// 工单行数 @@ -510,17 +581,18 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements 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"; List codes = commonDao.findByQuery(hql); return codes; } - - public Map gzzCount(){ - Session session = ((HibernateDaoSupport) this.commonDao).getSessionFactory().openSession(); - String sql ="select v.gzz,count(v.gzz) gzz_count from " + + public Map gzzCount() { + 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 " + " 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 " @@ -534,31 +606,29 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements + " 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"; logger.info(sql); - Query query = session.createSQLQuery(sql); - List objs= (List)query.list(); - Map gdCount = new HashMap(); - for(int i=0;i objs = (List) query.list(); + Map gdCount = new HashMap(); + 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)); + } } + session.close(); return gdCount; } - - - public ShiXiao kqShiXiao(Long zone_id){ - String hql =" from ShiXiao sx where sx.warehouseArea.id="+zone_id; - List list=commonDao.findByQuery(hql); - if(list.size()>0){ - return list.get(0); + + public ShiXiao kqShiXiao(Long zone_id) { + String hql = " from ShiXiao sx where sx.warehouseArea.id=" + zone_id; + List list = commonDao.findByQuery(hql); + if (list.size() > 0) { + return list.get(0); } return null; } - - }