日志以及注释补充
							parent
							
								
									7908df31f1
								
							
						
					
					
						commit
						918cde0291
					
				| 
						 | 
				
			
			@ -36,7 +36,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;
 | 
			
		||||
	
 | 
			
		||||
	public void allocateGZZ(List<Long> ids) {
 | 
			
		||||
		for (Long id : ids) {
 | 
			
		||||
			WaveDoc waveDoc = commonDao.get(WaveDoc.class, id);
 | 
			
		||||
| 
						 | 
				
			
			@ -122,11 +131,11 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
//		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 ";
 | 
			
		||||
		logger.info(sql);
 | 
			
		||||
		LogPrint(log_sql,sql);
 | 
			
		||||
		Query query = session.createSQLQuery(sql);
 | 
			
		||||
		List<Object[]> list = (List<Object[]>) query.list();
 | 
			
		||||
		int GongDan_wuLiaoMingXiCout = list.size();
 | 
			
		||||
 | 
			
		||||
		
 | 
			
		||||
		List<FenPei> list_fenpei = new ArrayList<FenPei>();
 | 
			
		||||
		List<FenPei> list_fenpei_wgzz = new ArrayList<FenPei>();// 无需分配工作站数据
 | 
			
		||||
		for (int i = 0; i < list.size(); i++) {
 | 
			
		||||
| 
						 | 
				
			
			@ -158,30 +167,15 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
			} else {
 | 
			
		||||
				list_fenpei_wgzz.add(bean);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// logger.info(bean.gdh+"---"+bean.twl);
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		// 1个工单对应一个头物料拆分号。
 | 
			
		||||
		// 工单号 ; 容器号 ; 料号 物料类型 ; 库区 ; 工作中心 //头物料 拆分号 工单总行数
 | 
			
		||||
		// 1100382814B X8001315 A0101 A 3#料箱区 kanban 512-00004567-F04B 1 5
 | 
			
		||||
		// 1100382814B X8001315 A0102 A 3#料箱区 kanban 512-00004567-F04B 1 5
 | 
			
		||||
		// 1100382814B X8001315 A0101 A 3#料箱区 kanban 512-00004567-F04B 1 5
 | 
			
		||||
		// 1100382814B X8001315 A0102 A 3#料箱区 kanban 512-00004567-F04B 1 5
 | 
			
		||||
		// 1100382814B X8001315 A0101 A 3#料箱区 kanban 512-00004567-F04B 1 5
 | 
			
		||||
		// 1100382814A X8001315 A0102 A 3#料箱区 kanban 512-00004567-F04A
 | 
			
		||||
		// 1100382814A X8001315 A0101 A 3#料箱区 kanban 512-00004567-F04A
 | 
			
		||||
		// 1100382814A X8001315 A0102 A 3#料箱区 kanban 512-00004567-F04A
 | 
			
		||||
		// 1100382814A X8001315 A0101 A 3#料箱区 kanban 512-00004567-F04A
 | 
			
		||||
		// 1100382814A X8001315 A0102 A 3#料箱区 kanban 512-00004567-F04A
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		// 根据(工单号+物料类型)分组
 | 
			
		||||
		Map<String, List<FenPei>> GongDan_WuLiao_Map = new HashMap<>();
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
		List<FenPei>list_fen=Paixu(list_fenpei,cfhs);
 | 
			
		||||
		
 | 
			
		||||
		//初始化 GongDan_WuLiao_Map 根据(工单号+物料类型+拆分组号)分组
 | 
			
		||||
		Map<String, List<FenPei>> 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<FenPei> list_count = GongDan_WuLiao_Map.get(GongDan_WuLiao);
 | 
			
		||||
| 
						 | 
				
			
			@ -193,25 +187,16 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
				GongDan_WuLiao_Map.put(GongDan_WuLiao, list_count);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
		//打印分组情况
 | 
			
		||||
		PirntGongdanMap(GongDan_WuLiao_Map,"最终工单分组");
 | 
			
		||||
		
 | 
			
		||||
		//打印第一次分组,根据大小件拆分工单
 | 
			
		||||
		//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
 | 
			
		||||
		for (String key : GongDan_WuLiao_Map.keySet()) {
 | 
			
		||||
			//logger.info("GongDan_WuLiao:" +key);
 | 
			
		||||
			List<FenPei> list_ff =GongDan_WuLiao_Map.get(key);
 | 
			
		||||
			for (FenPei fenPei : list_ff) {
 | 
			
		||||
				//logger.info(":" +fenPei.gdh+"--"+fenPei.wllx+"---"+fenPei.twl+"---"+fenPei.rqh+"---"+fenPei.chf_fz+"---"+fenPei.chf);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
 | 
			
		||||
		//打印第一次分组,根据大小件拆分工单
 | 
			
		||||
	
 | 
			
		||||
		
 | 
			
		||||
		// 记录每个工单 的数目
 | 
			
		||||
 | 
			
		||||
		List<GongDanMingXi> GongDan_List = new ArrayList<GongDanMingXi>();
 | 
			
		||||
		for (String key : GongDan_WuLiao_Map.keySet()) {
 | 
			
		||||
			// logger.info("gdh:	"+key+"	count:"+gdCount.get(key).size());
 | 
			
		||||
			// LogPrint("gdh:	"+key+"	count:"+gdCount.get(key).size());
 | 
			
		||||
			
 | 
			
		||||
			List<FenPei> list_ll1 = GongDan_WuLiao_Map.get(key);
 | 
			
		||||
			Collections.sort(list_ll1);
 | 
			
		||||
| 
						 | 
				
			
			@ -220,19 +205,9 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
		}
 | 
			
		||||
		Collections.sort(GongDan_List);
 | 
			
		||||
	
 | 
			
		||||
		//打印排序结果
 | 
			
		||||
		PirntGongDanMingXiList(GongDan_List,"最终工单排序");
 | 
			
		||||
		
 | 
			
		||||
		//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
 | 
			
		||||
		//logger.info("---------------------List<GdPaiXu> GongDan_List = new ArrayList<GdPaiXu>();-------------------------------------------");
 | 
			
		||||
		//logger.info("---------------------↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓-------------------------------------------");
 | 
			
		||||
		for (GongDanMingXi gdPaiXu : GongDan_List) {
 | 
			
		||||
			//logger.info("GongDan_WuLiao:" +gdPaiXu.gdh);
 | 
			
		||||
			List<FenPei> list_FenPei =gdPaiXu.list;
 | 
			
		||||
			for (FenPei fenPei : list_FenPei) {
 | 
			
		||||
				//logger.info(":" +fenPei.gdh+"--"+fenPei.wllx+"---"+fenPei.twl+"---"+fenPei.rqh);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
 | 
			
		||||
 | 
			
		||||
		// 先根据头物料分组 如果头物料相同 且工单总行数 差异小于4的工单分到一个组里面 (尽量分配到同一工作站)
 | 
			
		||||
 | 
			
		||||
		Map<String, List<GongDanMingXi>> touwuliao_map = new HashMap<>();
 | 
			
		||||
| 
						 | 
				
			
			@ -246,7 +221,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
 | 
			
		||||
			// 获取当前工单的数量
 | 
			
		||||
			int currCount = gdPaiXu.hangshu;
 | 
			
		||||
			// logger.info("---gdh:"+gdh+"		currCount:"+currCount);
 | 
			
		||||
			// LogPrint("---gdh:"+gdh+"		currCount:"+currCount);
 | 
			
		||||
			// 在touwuliao_map中进行匹配
 | 
			
		||||
			boolean isFind = false;
 | 
			
		||||
			for (String twlKey : touwuliao_map.keySet()) {
 | 
			
		||||
| 
						 | 
				
			
			@ -270,60 +245,40 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		//logger.info("-----------------------------------------------------------------------");
 | 
			
		||||
		//logger.info("-----------------------------------------------------------------------");
 | 
			
		||||
		//logger.info("---------------------------打印计算结果--------------------------------------------");
 | 
			
		||||
		int twl_count = 0;
 | 
			
		||||
		for (String twlKey : touwuliao_map.keySet()) {
 | 
			
		||||
			List<GongDanMingXi> list_show = touwuliao_map.get(twlKey);
 | 
			
		||||
			for (GongDanMingXi fenPei2 : list_show) {
 | 
			
		||||
				//logger.info("twl" + fenPei2.twl + "		GDH:" + fenPei2.gdh+ "		twlKey:" + twlKey + "		GDHCount:"+ fenPei2.hangshu);
 | 
			
		||||
				twl_count++;
 | 
			
		||||
				StringBuffer rqm = new StringBuffer();
 | 
			
		||||
				for (FenPei fff : fenPei2.list) {
 | 
			
		||||
					rqm.append(fff.rqh + ",");
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
			//logger.info("-----------------------------------------------------------------------");
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		//打印头物料分组后的情况
 | 
			
		||||
		PirntFirstTouwuLiaoMap(touwuliao_map,"最终头物料分组");
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
		// 计算没个容器号出现得次数(在每个头物料得分组里面)
 | 
			
		||||
 | 
			
		||||
		//logger.info("-------------------------------------------------------------------------------打印工单容器号----------------------------------------------------------------------------------------------------------------------------");
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
		for (String twlKey : touwuliao_map.keySet()) {
 | 
			
		||||
			List<GongDanMingXi> list_show = touwuliao_map.get(twlKey);
 | 
			
		||||
 | 
			
		||||
			List<GongDanMingXi> GongDanList = touwuliao_map.get(twlKey);
 | 
			
		||||
			//初始化rq_showTime 记录容器号次数
 | 
			
		||||
			Map<String, Integer> rq_showTime = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
			for (GongDanMingXi fenPei2 : list_show) {
 | 
			
		||||
			//循环工单中所有任务
 | 
			
		||||
			for (GongDanMingXi fenPei2 : GongDanList) {
 | 
			
		||||
//				初始化set_rqh 记录本工单容器号出现次数,(set保证同一工单中一个容器号只计算一次)
 | 
			
		||||
				Set<String> set_rqh = new HashSet<>();
 | 
			
		||||
				StringBuffer rqm_str = new StringBuffer();
 | 
			
		||||
				for (FenPei fff : fenPei2.list) {
 | 
			
		||||
					// 通过set记录容器号
 | 
			
		||||
					set_rqh.add(fff.rqh);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				//循环 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);
 | 
			
		||||
						rqm_str.append(rqh + "    __" + stt + "("
 | 
			
		||||
								+ rq_showTime.get(rqh) + ")" + ",");
 | 
			
		||||
					} else {
 | 
			
		||||
						rq_showTime.put(rqh, 1);
 | 
			
		||||
						rqm_str.append(rqh + "    __" + 0 + "("
 | 
			
		||||
								+ rq_showTime.get(rqh) + ")" + ",");
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
			// 给touwuliao_map的 中 按照容器出现次数进行排序
 | 
			
		||||
			//循环GongDanList 并给所有工单 中所有任务,写入任务中容器出现次数,并按容器次数进行排序;刷新touwuliao_map(头物料分组合集);
 | 
			
		||||
			List<GongDanMingXi> list_show_new = new ArrayList<>();
 | 
			
		||||
			for (GongDanMingXi fenPei2 : list_show) {
 | 
			
		||||
			for (GongDanMingXi fenPei2 : GongDanList) {
 | 
			
		||||
				List<FenPei> list_new = new ArrayList<>();
 | 
			
		||||
				for (FenPei f1 : fenPei2.list) {
 | 
			
		||||
					f1.show_time = rq_showTime.get(f1.rqh);
 | 
			
		||||
| 
						 | 
				
			
			@ -334,58 +289,59 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
				fenPei2.list = list_new;
 | 
			
		||||
				list_show_new.add(fenPei2);
 | 
			
		||||
			}
 | 
			
		||||
			//刷新touwuliao_map(头物料分组合集)
 | 
			
		||||
			touwuliao_map.put(twlKey, list_show_new);
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
		//按照 拆分头物料工单总行数进行排序
 | 
			
		||||
 | 
			
		||||
		List<TwlFenZu> paixu = new ArrayList<>();
 | 
			
		||||
		//初始化 	List<TwlFenZu> twlFenZuList  给所有数据写入twlFenZuList
 | 
			
		||||
		List<TwlFenZu> twlFenZuList = new ArrayList<>();
 | 
			
		||||
		for (String twlKey : touwuliao_map.keySet()) {
 | 
			
		||||
			List<GongDanMingXi> list_show = touwuliao_map.get(twlKey);
 | 
			
		||||
			TwlFenZu twlFenZu = new TwlFenZu(list_show);
 | 
			
		||||
			paixu.add(twlFenZu);
 | 
			
		||||
			twlFenZuList.add(twlFenZu);
 | 
			
		||||
		}
 | 
			
		||||
		Collections.sort(paixu);
 | 
			
		||||
		logger.info("---------------------------------------------------头物料拆分结果-----------------------------------------------------------------------------------------------");
 | 
			
		||||
		logger.info("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
 | 
			
		||||
		//根据 头物料 中所有工单总任务数进行 排序
 | 
			
		||||
		Collections.sort(twlFenZuList);
 | 
			
		||||
		LogPrint(log_TouWuLiaoChaiFen,"---------------------------------------------------头物料拆分排序结果-----------------------------------------------------------------------------------------------");
 | 
			
		||||
		LogPrint(log_TouWuLiaoChaiFen,"↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
 | 
			
		||||
		int wlcountString=0;
 | 
			
		||||
		for (TwlFenZu twlFenZu : paixu) {
 | 
			
		||||
		for (TwlFenZu twlFenZu : twlFenZuList) {
 | 
			
		||||
			List<GongDanMingXi> list_show = twlFenZu.gdPaiXus;
 | 
			
		||||
			for (GongDanMingXi fenPei2 : list_show) {
 | 
			
		||||
				logger.info("twl" + fenPei2.twl + "		GDH:" + fenPei2.gdh
 | 
			
		||||
				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;
 | 
			
		||||
				}
 | 
			
		||||
				logger.info(rqm.toString());
 | 
			
		||||
				LogPrint(log_TouWuLiaoChaiFen,rqm.toString());
 | 
			
		||||
			}
 | 
			
		||||
			logger.info("--------------------------------------------------------------------------------------------------------------------------------------------------");
 | 
			
		||||
			LogPrint(log_TouWuLiaoChaiFen,"--------------------------------------------------------------------------------------------------------------------------------------------------");
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		logger.info("↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑");
 | 
			
		||||
		logger.info("---------------------------------------------------头物料拆分结果-----------------------------------------------------------------------------------------------");
 | 
			
		||||
		LogPrint(log_TouWuLiaoChaiFen,"↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑");
 | 
			
		||||
		LogPrint(log_TouWuLiaoChaiFen,"---------------------------------------------------头物料拆分结果-----------------------------------------------------------------------------------------------");
 | 
			
		||||
		
 | 
			
		||||
		logger.info("GongDan_wuLiaoMingXiCout:"+GongDan_wuLiaoMingXiCout+"wlcountString:"+wlcountString);
 | 
			
		||||
		LogPrint(log_TouWuLiaoChaiFen,"GongDan_wuLiaoMingXiCout:"+GongDan_wuLiaoMingXiCout+"wlcountString:"+wlcountString);
 | 
			
		||||
		
 | 
			
		||||
		Map<String, GongZuoZhan> gzzMap = new HashMap<>();
 | 
			
		||||
		int count_all = syhs + list_fenpei.size();// 所有未处理的数据
 | 
			
		||||
		int gzz_nx_avg = count_all / gzz_codes.size();// 得到工作站的平均能效,
 | 
			
		||||
		if (gzz_nx_avg < jhxl) {// 小于默认值则取默认
 | 
			
		||||
		if (gzz_nx_avg < jhxl) {
 | 
			
		||||
			// 小于默认值则取默认 ,且根据需要关闭多余的工作站
 | 
			
		||||
			gzz_nx_avg = jhxl;
 | 
			
		||||
			int fenpeiALl=0;
 | 
			
		||||
			for (String code : gzz_codes) {
 | 
			
		||||
				int notFinished=(gzz_maps.get(code)==null?0:gzz_maps.get(code));
 | 
			
		||||
				int fenpeicount=gzz_nx_avg-notFinished;
 | 
			
		||||
				if(fenpeiALl-count_all<=0){ 
 | 
			
		||||
				
 | 
			
		||||
					fenpeiALl=fenpeiALl+fenpeicount;
 | 
			
		||||
					GongZuoZhan gzz=new GongZuoZhan(code, notFinished, gzz_nx_avg, true);
 | 
			
		||||
					gzzMap.put(code,gzz);
 | 
			
		||||
				}else{
 | 
			
		||||
					//fenpeiALl=fenpeiALl+fenpeicount;
 | 
			
		||||
					GongZuoZhan gzz=new GongZuoZhan(code, notFinished, gzz_nx_avg, false);
 | 
			
		||||
					gzzMap.put(code,gzz);
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -394,6 +350,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
			}
 | 
			
		||||
			
 | 
			
		||||
		}else{
 | 
			
		||||
			//计算能效大于默认能效,则每个工作站能效 扩大至 计算值。所有工作站都需要使用
 | 
			
		||||
			// 分配工作站,每个工作站剩余可分配订单数
 | 
			
		||||
			for (String code : gzz_codes) {
 | 
			
		||||
				int notFinished=(gzz_maps.get(code)==null?0:gzz_maps.get(code));
 | 
			
		||||
| 
						 | 
				
			
			@ -402,21 +359,21 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
				gzzMap.put(code,gzz);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		logger.info("---------------------------------------------------工作站详情-----------------------------------------------------------------------------------------------");
 | 
			
		||||
		logger.info("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
 | 
			
		||||
		LogPrint(log_GongZuoZhanMinXi,"---------------------------------------------------工作站详情-----------------------------------------------------------------------------------------------");
 | 
			
		||||
		LogPrint(log_GongZuoZhanMinXi,"↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
 | 
			
		||||
		for (String  key : gzzMap.keySet()) {
 | 
			
		||||
			GongZuoZhan gongZuoZhan=gzzMap.get(key);
 | 
			
		||||
			logger.info("Code:"+gongZuoZhan.code+" notFinished:"+gongZuoZhan.notFinished+"	maxRenWu:"+gongZuoZhan.maxRenWu+"	isEnble:"+gongZuoZhan.isEnble);
 | 
			
		||||
			LogPrint(log_GongZuoZhanMinXi,"Code:"+gongZuoZhan.code+" notFinished:"+gongZuoZhan.notFinished+"	maxRenWu:"+gongZuoZhan.maxRenWu+"	isEnble:"+gongZuoZhan.isEnble);
 | 
			
		||||
		}
 | 
			
		||||
		logger.info("↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑");
 | 
			
		||||
		logger.info("---------------------------------------------------工作站详情-----------------------------------------------------------------------------------------------");
 | 
			
		||||
		for (TwlFenZu twlFenZu : paixu) {
 | 
			
		||||
			List<GongDanMingXi> list_show = twlFenZu.gdPaiXus; //当前头物料所有的工单组合,以及每个工单的物料明细
 | 
			
		||||
		LogPrint(log_GongZuoZhanMinXi,"↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑");
 | 
			
		||||
		LogPrint(log_GongZuoZhanMinXi,"---------------------------------------------------工作站详情-----------------------------------------------------------------------------------------------");
 | 
			
		||||
		for (TwlFenZu twlFenZu : twlFenZuList) {
 | 
			
		||||
			List<GongDanMingXi> gongDanList = twlFenZu.gdPaiXus; //当前头物料所有的工单组合,以及每个工单的物料明细
 | 
			
		||||
			int this_fenzuCount=twlFenZu.wl_count;						//当前分组总物料行数
 | 
			
		||||
			List<GongZuoZhan>listGzz= FaiXuGzz(gzzMap);			//工作站根据可分配数量进行排序
 | 
			
		||||
			
 | 
			
		||||
			if(list_show.size()==1){
 | 
			
		||||
				GongDanMingXi gongDanMingXi=list_show.get(0);
 | 
			
		||||
			if(gongDanList.size()==1){
 | 
			
		||||
				GongDanMingXi gongDanMingXi=gongDanList.get(0);
 | 
			
		||||
				GongZuoZhan curr_gzz=PiPeiGongZuoZhanForGzzxAndRqh(listGzz,gongDanMingXi,cfhs);
 | 
			
		||||
				List<FenPei> list_wList=gongDanMingXi.list;
 | 
			
		||||
				for (FenPei fenPei : list_wList) {
 | 
			
		||||
| 
						 | 
				
			
			@ -428,28 +385,28 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
				
 | 
			
		||||
			}else{
 | 
			
		||||
				//多个工单匹配进行
 | 
			
		||||
				int gzz_index=0;															//当前分配工作站的排序下标
 | 
			
		||||
				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);
 | 
			
		||||
				for (int index=0;index<gongDanList.size();index++) {
 | 
			
		||||
					GongDanMingXi gongDanMingXi=gongDanList.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));
 | 
			
		||||
					//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==list_show.size()-1){
 | 
			
		||||
						if(index==gongDanList.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;
 | 
			
		||||
| 
						 | 
				
			
			@ -459,7 +416,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
							curr_gzz.RongQIHaoMap.put(fenPei.rqh,"");
 | 
			
		||||
							curr_gzz.GongZuoZhongXinMap.put(fenPei.gzzx,"");
 | 
			
		||||
						}
 | 
			
		||||
						if(index==list_show.size()-1){
 | 
			
		||||
						if(index==gongDanList.size()-1){
 | 
			
		||||
							//最后一个工单
 | 
			
		||||
							gzzMap.put(curr_gzz.code, curr_gzz);
 | 
			
		||||
						}
 | 
			
		||||
| 
						 | 
				
			
			@ -473,9 +430,9 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
		int fenPeiCount=0;
 | 
			
		||||
		for (String  key : gzzMap.keySet()) {
 | 
			
		||||
			GongZuoZhan gongZuoZhan=gzzMap.get(key);
 | 
			
		||||
			logger.info("----------------------------------------------------开始分配----------------------------------------------------------------------");
 | 
			
		||||
			logger.info("Code:"+gongZuoZhan.code+" notFinished:"+gongZuoZhan.notFinished+"	maxRenWu:"+gongZuoZhan.maxRenWu+"	isEnble:"+gongZuoZhan.isEnble);
 | 
			
		||||
			logger.info("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
 | 
			
		||||
			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(",");
 | 
			
		||||
| 
						 | 
				
			
			@ -489,34 +446,40 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
					task.setEndRegion(gongZuoZhan.code);
 | 
			
		||||
					//task.setAgvStatus(1);//下发
 | 
			
		||||
					this.commonDao.store(task);
 | 
			
		||||
					//logger.info("one:"+task.getBillCode()+"---"+task.getEndRegion()+"--two:-"+task.getOldGzz()+"---"+task.getOldZrw()+"--three:-"+fenPei.gdh+"-"+fenPei.chf_fz+"-----"+gongZuoZhan.code);
 | 
			
		||||
					//LogPrint("one:"+task.getBillCode()+"---"+task.getEndRegion()+"--two:-"+task.getOldGzz()+"---"+task.getOldZrw()+"--three:-"+fenPei.gdh+"-"+fenPei.chf_fz+"-----"+gongZuoZhan.code);
 | 
			
		||||
					
 | 
			
		||||
				}
 | 
			
		||||
				logger.info("工作站:"+gongZuoZhan.code+" 	工单号:"+fenPei.gdh+"	容器号:"+fenPei.rqh+"	拆分号:"+fenPei.chf+"		拆分组:"+fenPei.chf_fz+"		头物料:"+fenPei.twl_fz);
 | 
			
		||||
				//logger.info(""+fenPei.twl_fz+"---"+fenPei.chf_fz+"---"+fenPei.chf+"---"+fenPei.gdh+"---"+fenPei.rqh);
 | 
			
		||||
				LogPrint(log_GongZuoZhanFenPeiJieGuo,"工作站:"+gongZuoZhan.code+" 	工单号:"+fenPei.gdh+"	容器号:"+fenPei.rqh+"	拆分号:"+fenPei.chf+"		拆分组:"+fenPei.chf_fz+"		头物料:"+fenPei.twl_fz);
 | 
			
		||||
				//LogPrint(""+fenPei.twl_fz+"---"+fenPei.chf_fz+"---"+fenPei.chf+"---"+fenPei.gdh+"---"+fenPei.rqh);
 | 
			
		||||
			}
 | 
			
		||||
			logger.info("↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑");
 | 
			
		||||
			LogPrint(log_GongZuoZhanFenPeiJieGuo,"↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑");
 | 
			
		||||
		}
 | 
			
		||||
		logger.info("GongDan_wuLiaoMingXiCout:"+GongDan_wuLiaoMingXiCout+"wlcountString:"+wlcountString+"		fenPeiCount:"+fenPeiCount);
 | 
			
		||||
		LogPrint(log_GongZuoZhanFenPeiJieGuo,"GongDan_wuLiaoMingXiCout:"+GongDan_wuLiaoMingXiCout+"wlcountString:"+wlcountString+"		fenPeiCount:"+fenPeiCount);
 | 
			
		||||
		// 写入数据库
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		 * }catch (Exception e) { logger.info(e.toString()); session.close();
 | 
			
		||||
		 * }catch (Exception e) { LogPrint(e.toString()); session.close();
 | 
			
		||||
		 * }finally { session.close(); }
 | 
			
		||||
		 */
 | 
			
		||||
		session.close();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void LogPrint(boolean isshow,String msg){
 | 
			
		||||
		if(isshow){
 | 
			
		||||
			logger.info(msg);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	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;
 | 
			
		||||
			logger.info("------------------------匹配容器号和工作中心-----------------------------------------------");
 | 
			
		||||
			logger.info("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
 | 
			
		||||
			logger.info("当前工单号:"+gongDanMingXi.gdh);
 | 
			
		||||
			LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"------------------------匹配容器号和工作中心-----------------------------------------------");
 | 
			
		||||
			LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
 | 
			
		||||
			LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"当前工单号:"+gongDanMingXi.gdh);
 | 
			
		||||
			for (GongZuoZhan gzz : listGzz) {
 | 
			
		||||
				logger.info("当前工作站:"+gzz.code);
 | 
			
		||||
				LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"当前工作站:"+gzz.code);
 | 
			
		||||
				List<FenPei>list=gzz.renWuList;
 | 
			
		||||
				StringBuffer sb_gzzx=new StringBuffer();
 | 
			
		||||
				StringBuffer sb_rqh=new StringBuffer();
 | 
			
		||||
| 
						 | 
				
			
			@ -525,9 +488,9 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
					sb_rqh.append(fenPei.rqh+"	,	");
 | 
			
		||||
				}
 | 
			
		||||
				int chao=(list_wList.size()+gzz.notFinished+gzz.renWuList.size())-gzz.maxRenWu;
 | 
			
		||||
				//logger.info(listGzz.size());
 | 
			
		||||
				//LogPrint(listGzz.size());
 | 
			
		||||
				if(chao>cfhs){
 | 
			
		||||
					logger.info("工作站:"+gzz.code+"超出:"+chao+"无法分配,跳过此工作站");
 | 
			
		||||
					LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"工作站:"+gzz.code+"超出:"+chao+"无法分配,跳过此工作站");
 | 
			
		||||
					continue;
 | 
			
		||||
				}
 | 
			
		||||
				StringBuffer sb_pipei=new StringBuffer();
 | 
			
		||||
| 
						 | 
				
			
			@ -542,10 +505,10 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
						sb_pipei.append(fenPei.rqh);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				logger.info("工作站:"+gzz.code+"	gzzx:"+gzzx+"		rqh_count:"+rqh_count);
 | 
			
		||||
				logger.info(sb_gzzx.toString());
 | 
			
		||||
				logger.info(sb_rqh.toString());
 | 
			
		||||
				logger.info("匹配上的容器号:	"+sb_pipei.toString());
 | 
			
		||||
				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){
 | 
			
		||||
| 
						 | 
				
			
			@ -582,9 +545,9 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
				}	
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			logger.info("容器号匹配次数:"+max_rqh_count+"		工作中心匹配次数:"+max_gzzx+"		工单号:"+gongDanMingXi.gdh+"		工作站:"+check.code);
 | 
			
		||||
			logger.info("↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑");
 | 
			
		||||
			logger.info("------------------------匹配容器号和工作中心-----------------------------------------------");
 | 
			
		||||
			LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"容器号匹配次数:"+max_rqh_count+"		工作中心匹配次数:"+max_gzzx+"		工单号:"+gongDanMingXi.gdh+"		工作站:"+check.code);
 | 
			
		||||
			LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑");
 | 
			
		||||
			LogPrint(log_GongZuoZhanPiPeiForRqhAndGzzx,"------------------------匹配容器号和工作中心-----------------------------------------------");
 | 
			
		||||
			return check;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
| 
						 | 
				
			
			@ -627,11 +590,11 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
	
 | 
			
		||||
	public List<FenPei>  Paixu(List<FenPei>list_fenpei ,int cfhs){
 | 
			
		||||
		Map<String, List<FenPei>> 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<FenPei> list_count = GongDan_WuLiao_Map.get(GongDan_WuLiao);
 | 
			
		||||
				list_count.add(fenPei);
 | 
			
		||||
				GongDan_WuLiao_Map.put(GongDan_WuLiao, list_count);
 | 
			
		||||
| 
						 | 
				
			
			@ -641,61 +604,36 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
				GongDan_WuLiao_Map.put(GongDan_WuLiao, list_count);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		int sumCout = 0;
 | 
			
		||||
		
 | 
			
		||||
		//打印第一次分组,根据大小件拆分工单
 | 
			
		||||
		//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
 | 
			
		||||
 | 
			
		||||
		for (String key : GongDan_WuLiao_Map.keySet()) {
 | 
			
		||||
			//logger.info("GongDan_WuLiao:" +key);
 | 
			
		||||
			List<FenPei> list_FenPei =GongDan_WuLiao_Map.get(key);
 | 
			
		||||
			for (FenPei fenPei : list_FenPei) {
 | 
			
		||||
				//logger.info(":" +fenPei.gdh+"--"+fenPei.wllx+"---"+fenPei.twl+"---"+fenPei.rqh);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
 | 
			
		||||
		//打印第一次分组,根据大小件拆分工单
 | 
			
		||||
		
 | 
			
		||||
		// 记录每个工单 的数目
 | 
			
		||||
 | 
			
		||||
		//打印分组情况
 | 
			
		||||
		PirntGongdanMap(GongDan_WuLiao_Map,"首次工单分组");
 | 
			
		||||
		int sumCout = 0; //所有工单总任务数
 | 
			
		||||
		//给分组后的结果写入 GongDanMingXi 类中,记录工单(头物料,行数,工单号),并按工单的任务行数进行排序
 | 
			
		||||
		List<GongDanMingXi> GongDan_List = new ArrayList<GongDanMingXi>();
 | 
			
		||||
		for (String key : GongDan_WuLiao_Map.keySet()) {
 | 
			
		||||
			// logger.info("gdh:	"+key+"	count:"+gdCount.get(key).size());
 | 
			
		||||
			sumCout = sumCout + GongDan_WuLiao_Map.get(key).size();
 | 
			
		||||
			//对工单中的任务明细,根据任务的容器号名称进行排序
 | 
			
		||||
			List<FenPei> 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,"首次工单排序");
 | 
			
		||||
	
 | 
			
		||||
		for (GongDanMingXi gdPaiXu : GongDan_List) {
 | 
			
		||||
			//logger.info("GongDan_WuLiao:" +gdPaiXu.gdh);
 | 
			
		||||
			List<FenPei> list_FenPei =gdPaiXu.list;
 | 
			
		||||
			for (FenPei fenPei : list_FenPei) {
 | 
			
		||||
				//logger.info(":" +fenPei.gdh+"--"+fenPei.wllx+"---"+fenPei.twl+"---"+fenPei.rqh);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		// 先根据头物料分组 如果头物料相同 且工单总行数 差异小于4的工单分到一个组里面 (尽量分配到同一工作站)
 | 
			
		||||
 | 
			
		||||
		Map<String, List<GongDanMingXi>> touwuliao_map = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
		for (GongDanMingXi gdPaiXu : GongDan_List) {
 | 
			
		||||
 | 
			
		||||
			// 获取当前头物料
 | 
			
		||||
			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 + "_"+ touwuliao_map.get(twlKey).get(0).list.get(0).wllx;
 | 
			
		||||
| 
						 | 
				
			
			@ -718,60 +656,40 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		//logger.info("-----------------------------------------------------------------------");
 | 
			
		||||
		//logger.info("-----------------------------------------------------------------------");
 | 
			
		||||
		//logger.info("---------------------------打印计算结果--------------------------------------------");
 | 
			
		||||
		int twl_count = 0;
 | 
			
		||||
		for (String twlKey : touwuliao_map.keySet()) {
 | 
			
		||||
			List<GongDanMingXi> list_show = touwuliao_map.get(twlKey);
 | 
			
		||||
			for (GongDanMingXi fenPei2 : list_show) {
 | 
			
		||||
				//logger.info("twl" + fenPei2.twl + "		GDH:" + fenPei2.gdh+ "		twlKey:" + twlKey + "		GDHCount:"+ fenPei2.hangshu);
 | 
			
		||||
				twl_count++;
 | 
			
		||||
				StringBuffer rqm = new StringBuffer();
 | 
			
		||||
				for (FenPei fff : fenPei2.list) {
 | 
			
		||||
					rqm.append(fff.rqh + ",");
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
			//logger.info("-----------------------------------------------------------------------");
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		//打印头物料分组后的情况
 | 
			
		||||
		PirntFirstTouwuLiaoMap(touwuliao_map,"首次头物料分组");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		// 计算没个容器号出现得次数(在每个头物料得分组里面)
 | 
			
		||||
 | 
			
		||||
		//logger.info("-------------------------------------------------------------------------------打印工单容器号----------------------------------------------------------------------------------------------------------------------------");
 | 
			
		||||
 | 
			
		||||
		for (String twlKey : touwuliao_map.keySet()) {
 | 
			
		||||
			List<GongDanMingXi> list_show = touwuliao_map.get(twlKey);
 | 
			
		||||
 | 
			
		||||
			List<GongDanMingXi> GongDanList = touwuliao_map.get(twlKey);
 | 
			
		||||
			//初始化rq_showTime 记录容器号次数
 | 
			
		||||
			Map<String, Integer> rq_showTime = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
			for (GongDanMingXi fenPei2 : list_show) {
 | 
			
		||||
			//循环工单中所有任务
 | 
			
		||||
			for (GongDanMingXi fenPei2 : GongDanList) {
 | 
			
		||||
				//	初始化set_rqh 记录本工单容器号出现次数,(set保证同一工单中一个容器号只计算一次)
 | 
			
		||||
				Set<String> set_rqh = new HashSet<>();
 | 
			
		||||
				StringBuffer rqm_str = new StringBuffer();
 | 
			
		||||
				for (FenPei fff : fenPei2.list) {
 | 
			
		||||
					// 通过set记录容器号
 | 
			
		||||
					set_rqh.add(fff.rqh);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				//循环 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);
 | 
			
		||||
						rqm_str.append(rqh + "    __" + stt + "("
 | 
			
		||||
								+ rq_showTime.get(rqh) + ")" + ",");
 | 
			
		||||
					} else {
 | 
			
		||||
						rq_showTime.put(rqh, 1);
 | 
			
		||||
						rqm_str.append(rqh + "    __" + 0 + "("
 | 
			
		||||
								+ rq_showTime.get(rqh) + ")" + ",");
 | 
			
		||||
					
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
			// 给touwuliao_map的 中 按照容器出现次数进行排序
 | 
			
		||||
			//循环GongDanList 并给所有工单 中所有任务,写入任务中容器出现次数,并按容器次数进行排序;刷新touwuliao_map(头物料分组合集);
 | 
			
		||||
			List<GongDanMingXi> list_show_new = new ArrayList<>();
 | 
			
		||||
			for (GongDanMingXi fenPei2 : list_show) {
 | 
			
		||||
			for (GongDanMingXi fenPei2 : GongDanList) {
 | 
			
		||||
				List<FenPei> list_new = new ArrayList<>();
 | 
			
		||||
				for (FenPei f1 : fenPei2.list) {
 | 
			
		||||
					f1.show_time = rq_showTime.get(f1.rqh);
 | 
			
		||||
| 
						 | 
				
			
			@ -782,17 +700,18 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
				fenPei2.list = list_new;
 | 
			
		||||
				list_show_new.add(fenPei2);
 | 
			
		||||
			}
 | 
			
		||||
			//刷新touwuliao_map(头物料分组合集)
 | 
			
		||||
			touwuliao_map.put(twlKey, list_show_new);
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// 对touwuliao_map 的单个工单大于拆分书数的进行拆分
 | 
			
		||||
		Map<String, List<GongDanMingXi>> touwuliao_new_Map = new HashMap<>();
 | 
			
		||||
		// 对touwuliao_map(头物料分组合集) 的单个工单大于拆分行数数的进行拆分
 | 
			
		||||
		//初始化 list_new (记录拆分后的标识,提供给后无进行分组)
 | 
			
		||||
		List<FenPei> list_new =new ArrayList<>();
 | 
			
		||||
		for (String twlKey : touwuliao_map.keySet()) {
 | 
			
		||||
			List<GongDanMingXi> list_show = touwuliao_map.get(twlKey);
 | 
			
		||||
			int max_len=0;
 | 
			
		||||
			//得出最大列数
 | 
			
		||||
			//计算本头物料中的 工单的最大任务数(多个工单最多的任务的工单)
 | 
			
		||||
			if(list_show.size()>0){
 | 
			
		||||
				for (GongDanMingXi gdPaiXu : list_show) {
 | 
			
		||||
					if(max_len<gdPaiXu.list.size()){
 | 
			
		||||
| 
						 | 
				
			
			@ -809,12 +728,12 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
					//循环每个工单
 | 
			
		||||
					GongDanMingXi gdPaiXu =list_show.get(gd_index);
 | 
			
		||||
					List<FenPei> 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)+"";
 | 
			
		||||
| 
						 | 
				
			
			@ -840,6 +759,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
				
 | 
			
		||||
				if((fz_col+1)%cfhs==0){
 | 
			
		||||
					//拆分最大行数的时候
 | 
			
		||||
					//记录上一个分组中的所有容器
 | 
			
		||||
					rq_last_show=rq_last_show2;
 | 
			
		||||
					rq_last_show2= new HashMap<>();
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -852,6 +772,63 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
		
 | 
			
		||||
		return  list_new;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void PirntFirstTouwuLiaoMap(Map<String, List<GongDanMingXi>> touwuliao_map ,String title){
 | 
			
		||||
		LogPrint(log_PirntFirstTouwuLiaoMap,"");
 | 
			
		||||
		LogPrint(log_PirntFirstTouwuLiaoMap,"");
 | 
			
		||||
		LogPrint(log_PirntFirstTouwuLiaoMap,"-------------------------------------------------------------------------------------------------------");
 | 
			
		||||
		LogPrint(log_PirntFirstTouwuLiaoMap,"------------------------------------"+title+"------------------------------------------");
 | 
			
		||||
		for (String twlKey : touwuliao_map.keySet()) {
 | 
			
		||||
			List<GongDanMingXi> list_show = touwuliao_map.get(twlKey);
 | 
			
		||||
			for (GongDanMingXi gongDan : list_show) {
 | 
			
		||||
				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,"-----------------------------------------------------------------------");
 | 
			
		||||
			LogPrint(log_PirntFirstTouwuLiaoMap,"");
 | 
			
		||||
			LogPrint(log_PirntFirstTouwuLiaoMap,"");
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void PirntGongDanMingXiList(List<GongDanMingXi> 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<FenPei> list_FenPei =gdPaiXu.list;
 | 
			
		||||
			for (FenPei fenPei : list_FenPei) {
 | 
			
		||||
				LogPrint(log_PirntGongDanMingXiList,"工单号:" +fenPei.gdh+"		物料类型:"+fenPei.wllx+"		头物料:"+fenPei.twl+"		容器号:	"+fenPei.rqh);
 | 
			
		||||
			}
 | 
			
		||||
			LogPrint(log_PirntGongdanMap,"");
 | 
			
		||||
			LogPrint(log_PirntGongdanMap,"-------------------------------------------------------------------------------------------------------");
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void PirntGongdanMap(Map<String, List<FenPei>> 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<FenPei> 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<TwlFenZu> {
 | 
			
		||||
| 
						 | 
				
			
			@ -993,7 +970,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
		try {
 | 
			
		||||
			str = Integer.parseInt(obj[i].toString());
 | 
			
		||||
		} catch (Exception e) {
 | 
			
		||||
			logger.info(i + "" + e.toString());
 | 
			
		||||
			//LogPrint(i + "" + e.toString());
 | 
			
		||||
			str = -1;
 | 
			
		||||
		}
 | 
			
		||||
		return str;
 | 
			
		||||
| 
						 | 
				
			
			@ -1004,7 +981,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
		try {
 | 
			
		||||
			str = (String) obj[i];
 | 
			
		||||
		} catch (Exception e) {
 | 
			
		||||
			logger.info(i + "" + e.toString());
 | 
			
		||||
			//LogPrint(i + "" + e.toString());
 | 
			
		||||
			str = "";
 | 
			
		||||
		}
 | 
			
		||||
		return str;
 | 
			
		||||
| 
						 | 
				
			
			@ -1015,7 +992,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
		try {
 | 
			
		||||
			str = Long.parseLong(obj[i].toString());
 | 
			
		||||
		} catch (Exception e) {
 | 
			
		||||
			logger.info(i + "" + e.toString());
 | 
			
		||||
			//LogPrint(i + "" + e.toString());
 | 
			
		||||
			str = 0l;
 | 
			
		||||
		}
 | 
			
		||||
		return str;
 | 
			
		||||
| 
						 | 
				
			
			@ -1027,7 +1004,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
			v = Float.parseFloat(obj[i].toString());
 | 
			
		||||
		} catch (Exception e) {
 | 
			
		||||
			v = 0;
 | 
			
		||||
			logger.info(i + "" + e.toString());
 | 
			
		||||
			//LogPrint(i + "" + e.toString());
 | 
			
		||||
		}
 | 
			
		||||
		return v;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1062,7 +1039,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
 | 
			
		|||
				+ " AND t.WAVE_DOC_ID IS NOT NULL "
 | 
			
		||||
				+ " 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);
 | 
			
		||||
		LogPrint(log_sql,sql);
 | 
			
		||||
		Query query = session.createSQLQuery(sql);
 | 
			
		||||
		List<Object[]> objs = (List<Object[]>) query.list();
 | 
			
		||||
		Map<String, Integer> gdCount = new HashMap<String, Integer>();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue