日志以及注释补充
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