no message
parent
3229aa367c
commit
311cc6d9c6
|
|
@ -12,6 +12,7 @@ import java.util.Map;
|
|||
import java.util.Set;
|
||||
|
||||
import net.sf.json.JSONObject;
|
||||
import net.sf.json.util.JSONUtils;
|
||||
|
||||
import org.hibernate.Query;
|
||||
import org.hibernate.Session;
|
||||
|
|
@ -23,8 +24,11 @@ import com.dev.swms.server.model.inventory.Task;
|
|||
import com.dev.swms.server.model.receiving.LibraryTaskType.classification;
|
||||
import com.dev.swms.server.model.shipping.NewWaveFlag;
|
||||
import com.dev.swms.server.model.shipping.WaveDoc;
|
||||
import com.dev.swms.server.service.interfaceLog.JsonUtil;
|
||||
import com.dev.swms.server.service.shipping.NewWaveManager;
|
||||
import com.dev.swms.server.utils.interfaceUtil;
|
||||
import com.itextpdf.text.pdf.PdfStructTreeController.returnType;
|
||||
import com.sun.org.apache.bcel.internal.classfile.Code;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
|
@ -36,8 +40,8 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
|
|||
public void allocateGZZ(List<Long> ids) {
|
||||
for (Long id : ids) {
|
||||
WaveDoc waveDoc = commonDao.get(WaveDoc.class, id);
|
||||
ShiXiao lx_sx = kqShiXiao(NewWaveFlag.LKQ);
|
||||
ShiXiao hj_sx = kqShiXiao(NewWaveFlag.LKQ);
|
||||
ShiXiao lx_sx = kqShiXiao(NewWaveFlag.LXQ);
|
||||
ShiXiao hj_sx = kqShiXiao(NewWaveFlag.HJQ);
|
||||
ShiXiao lk_sx = kqShiXiao(NewWaveFlag.LKQ);
|
||||
// 得到工作站剩余任务行数
|
||||
List<String> lx_codes = getGzzCodes(NewWaveFlag.LXQ);// 自动创波工作站
|
||||
|
|
@ -59,7 +63,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
|
|||
lkCount +=maps.get(code)==null?0:maps.get(code);
|
||||
}
|
||||
|
||||
allocateGZZ(waveDoc.getCode(), NewWaveFlag.LKQ, lx_codes,
|
||||
allocateGZZ(waveDoc.getCode(), NewWaveFlag.LXQ, lx_codes,
|
||||
(int) lx_sx.getTaskD(), (int) lx_sx.getNumber(), lxCount,
|
||||
maps);
|
||||
allocateGZZ(waveDoc.getCode(), NewWaveFlag.HJQ, hj_codes,
|
||||
|
|
@ -121,7 +125,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
|
|||
logger.info(sql);
|
||||
Query query = session.createSQLQuery(sql);
|
||||
List<Object[]> list = (List<Object[]>) query.list();
|
||||
int dataSize = list.size();
|
||||
int GongDan_wuLiaoMingXiCout = list.size();
|
||||
|
||||
List<FenPei> list_fenpei = new ArrayList<FenPei>();
|
||||
List<FenPei> list_fenpei_wgzz = new ArrayList<FenPei>();// 无需分配工作站数据
|
||||
|
|
@ -171,44 +175,75 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
|
|||
// 1100382814A X8001315 A0101 A 3#料箱区 kanban 512-00004567-F04A
|
||||
// 1100382814A X8001315 A0102 A 3#料箱区 kanban 512-00004567-F04A
|
||||
|
||||
// 计算同一工单总行数。
|
||||
Map<String, List<FenPei>> gdCount = new HashMap<>();
|
||||
// 根据(工单号+物料类型)分组
|
||||
Map<String, List<FenPei>> GongDan_WuLiao_Map = new HashMap<>();
|
||||
|
||||
for (FenPei fenPei : list_fenpei) {
|
||||
String key_gd_wl = fenPei.gdh + fenPei.wllx;
|
||||
if (((java.util.Map) gdCount).containsKey(key_gd_wl)) {
|
||||
List<FenPei> list_count = gdCount.get(key_gd_wl);
|
||||
List<FenPei>list_fen=Paixu(list_fenpei);
|
||||
|
||||
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);
|
||||
list_count.add(fenPei);
|
||||
gdCount.put(key_gd_wl, list_count);
|
||||
GongDan_WuLiao_Map.put(GongDan_WuLiao, list_count);
|
||||
} else {
|
||||
List<FenPei> list_count = new ArrayList<FenPei>();
|
||||
list_count.add(fenPei);
|
||||
gdCount.put(key_gd_wl, list_count);
|
||||
GongDan_WuLiao_Map.put(GongDan_WuLiao, list_count);
|
||||
}
|
||||
}
|
||||
int sumCout = 0;
|
||||
|
||||
|
||||
//打印第一次分组,根据大小件拆分工单
|
||||
//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
|
||||
logger.info("--------------------------Map<String, List<FenPei>> GongDan_WuLiao_Map = new HashMap<>();-----------------------------------------------");
|
||||
logger.info("-------------------------↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓-----------------------------------------------");
|
||||
|
||||
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<GdPaiXu> gd_paixuList = new ArrayList<GdPaiXu>();
|
||||
for (String key : gdCount.keySet()) {
|
||||
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 + gdCount.get(key).size();
|
||||
List<FenPei> list_ll1 = gdCount.get(key);
|
||||
|
||||
List<FenPei> list_ll1 = GongDan_WuLiao_Map.get(key);
|
||||
Collections.sort(list_ll1);
|
||||
GdPaiXu gdPaiXu = new GdPaiXu(key, list_ll1);
|
||||
gd_paixuList.add(gdPaiXu);
|
||||
GongDanMingXi gdPaiXu = new GongDanMingXi(key, list_ll1);
|
||||
GongDan_List.add(gdPaiXu);
|
||||
}
|
||||
Collections.sort(gd_paixuList);
|
||||
logger.info("sumCout" + sumCout + "___dataSize:" + dataSize);
|
||||
Collections.sort(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<GdPaiXu>> touwuliao_map = new HashMap<>();
|
||||
Map<String, List<GongDanMingXi>> touwuliao_map = new HashMap<>();
|
||||
|
||||
for (GdPaiXu gdPaiXu : gd_paixuList) {
|
||||
for (GongDanMingXi gdPaiXu : GongDan_List) {
|
||||
|
||||
// 获取当前头物料
|
||||
String fenzu = gdPaiXu.twl + gdPaiXu.list.get(0).wllx;
|
||||
String fenzu = gdPaiXu.list.get(0).twl_fz+"_"+gdPaiXu.list.get(0).chf_fz;
|
||||
|
||||
String gdh = gdPaiXu.gdh;
|
||||
|
||||
|
|
@ -218,13 +253,12 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
|
|||
// 在touwuliao_map中进行匹配
|
||||
boolean isFind = false;
|
||||
for (String twlKey : touwuliao_map.keySet()) {
|
||||
String twl_in = touwuliao_map.get(twlKey).get(0).twl + "_"
|
||||
+ touwuliao_map.get(twlKey).get(0).list.get(0).wllx;
|
||||
String twl_in = touwuliao_map.get(twlKey).get(0).list.get(0).twl_fz + "_"+ touwuliao_map.get(twlKey).get(0).list.get(0).chf_fz;
|
||||
int currCount_in = touwuliao_map.get(twlKey).get(0).hangshu;
|
||||
if (twl_in.equals(fenzu)
|
||||
&& Math.abs(currCount - currCount_in) <= 4) {
|
||||
// 在分配好的数据中找到了相同的头物料 且 数量差小于4
|
||||
List<GdPaiXu> old = touwuliao_map.get(twlKey);
|
||||
List<GongDanMingXi> old = touwuliao_map.get(twlKey);
|
||||
old.add(gdPaiXu);
|
||||
touwuliao_map.put(twlKey, old);
|
||||
isFind = true;
|
||||
|
|
@ -233,10 +267,9 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
|
|||
}
|
||||
if (!isFind) {
|
||||
// 未匹配到数据,自己单独一组
|
||||
List<GdPaiXu> llist = new ArrayList<GdPaiXu>();
|
||||
List<GongDanMingXi> llist = new ArrayList<GongDanMingXi>();
|
||||
llist.add(gdPaiXu);
|
||||
touwuliao_map.put(fenzu + "_" + gdh, llist);
|
||||
|
||||
touwuliao_map.put(fenzu, llist);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -245,8 +278,8 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
|
|||
logger.info("---------------------------打印计算结果--------------------------------------------");
|
||||
int twl_count = 0;
|
||||
for (String twlKey : touwuliao_map.keySet()) {
|
||||
List<GdPaiXu> list_show = touwuliao_map.get(twlKey);
|
||||
for (GdPaiXu fenPei2 : list_show) {
|
||||
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);
|
||||
|
|
@ -260,18 +293,18 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
|
|||
logger.info("-----------------------------------------------------------------------");
|
||||
|
||||
}
|
||||
logger.info("twl_count" + twl_count + "___dataSize:" + dataSize);
|
||||
|
||||
|
||||
// 计算没个容器号出现得次数(在每个头物料得分组里面)
|
||||
|
||||
logger.info("-------------------------------------------------------------------------------打印工单容器号----------------------------------------------------------------------------------------------------------------------------");
|
||||
|
||||
for (String twlKey : touwuliao_map.keySet()) {
|
||||
List<GdPaiXu> list_show = touwuliao_map.get(twlKey);
|
||||
List<GongDanMingXi> list_show = touwuliao_map.get(twlKey);
|
||||
|
||||
Map<String, Integer> rq_showTime = new HashMap<>();
|
||||
|
||||
for (GdPaiXu fenPei2 : list_show) {
|
||||
for (GongDanMingXi fenPei2 : list_show) {
|
||||
Set<String> set_rqh = new HashSet<>();
|
||||
StringBuffer rqm_str = new StringBuffer();
|
||||
for (FenPei fff : fenPei2.list) {
|
||||
|
|
@ -294,8 +327,8 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
|
|||
|
||||
}
|
||||
// 给touwuliao_map的 中 按照容器出现次数进行排序
|
||||
List<GdPaiXu> list_show_new = new ArrayList<>();
|
||||
for (GdPaiXu fenPei2 : list_show) {
|
||||
List<GongDanMingXi> list_show_new = new ArrayList<>();
|
||||
for (GongDanMingXi fenPei2 : list_show) {
|
||||
List<FenPei> list_new = new ArrayList<>();
|
||||
for (FenPei f1 : fenPei2.list) {
|
||||
f1.show_time = rq_showTime.get(f1.rqh);
|
||||
|
|
@ -309,46 +342,28 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
|
|||
touwuliao_map.put(twlKey, list_show_new);
|
||||
|
||||
}
|
||||
|
||||
logger.info("-----------------------------------------------------------------------");
|
||||
logger.info("-----------------------------------------------------------------------");
|
||||
logger.info("---------------------------打印计算结果-------------------------------------------");
|
||||
|
||||
// 计算拆分号 (为了15个为一组的工单) 拆分号等于 工单总行数 /15(可配置) 根据容器号。物料
|
||||
|
||||
for (String twlKey : touwuliao_map.keySet()) {
|
||||
List<GdPaiXu> list_show = touwuliao_map.get(twlKey);
|
||||
for (GdPaiXu fenPei2 : list_show) {
|
||||
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 + ") ");
|
||||
}
|
||||
logger.info(rqm.toString());
|
||||
}
|
||||
logger.info("--------------------------------------------------------------------------------------------------------------------------------------------------");
|
||||
logger.info("--------------------------------------------------------------------------------------------------------------------------------------------------");
|
||||
|
||||
}
|
||||
|
||||
//按照 拆分头物料工单总行数进行排序
|
||||
|
||||
List<TwlFenZu> paixu = new ArrayList<>();
|
||||
for (String twlKey : touwuliao_map.keySet()) {
|
||||
List<GdPaiXu> list_show = touwuliao_map.get(twlKey);
|
||||
List<GongDanMingXi> list_show = touwuliao_map.get(twlKey);
|
||||
TwlFenZu twlFenZu = new TwlFenZu(list_show);
|
||||
paixu.add(twlFenZu);
|
||||
}
|
||||
Collections.sort(paixu);
|
||||
|
||||
logger.info("---------------------------------------------------最后结果-----------------------------------------------------------------------------------------------");
|
||||
logger.info("-------------------------------------------------最后结果-------------------------------------------------------------------------------------------------");
|
||||
int wlcountString=0;
|
||||
for (TwlFenZu twlFenZu : paixu) {
|
||||
List<GdPaiXu> list_show = twlFenZu.gdPaiXus;
|
||||
for (GdPaiXu fenPei2 : list_show) {
|
||||
List<GongDanMingXi> list_show = twlFenZu.gdPaiXus;
|
||||
for (GongDanMingXi fenPei2 : list_show) {
|
||||
logger.info("twl" + fenPei2.twl + " GDH:" + fenPei2.gdh
|
||||
+ " GDHCount:" + fenPei2.hangshu);
|
||||
+ " 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 + ") ");
|
||||
rqm.append(fff.rqh + "(" + fff.show_time + "/"+fff.chf+") ");
|
||||
wlcountString=wlcountString+1;
|
||||
}
|
||||
logger.info(rqm.toString());
|
||||
}
|
||||
|
|
@ -356,18 +371,99 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
|
|||
logger.info("--------------------------------------------------------------------------------------------------------------------------------------------------");
|
||||
|
||||
}
|
||||
|
||||
logger.info("---------------------------------------------最后结果-----------------------------------------------------------------------------------------------------");
|
||||
logger.info("----------------------------------------------最后结果--------------------------------------------------------------------------------------------------");
|
||||
|
||||
logger.info("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) {// 小于默认值则取默认
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}else{
|
||||
// 分配工作站,每个工作站剩余可分配订单数
|
||||
for (String code : gzz_codes) {
|
||||
int notFinished=(gzz_maps.get(code)==null?0:gzz_maps.get(code));
|
||||
//int gzz_nx = gzz_nx_avg - notFinished;
|
||||
GongZuoZhan gzz=new GongZuoZhan(code, notFinished, gzz_nx_avg, true);
|
||||
gzzMap.put(code,gzz);
|
||||
}
|
||||
}
|
||||
// 分配工作站,每个工作站剩余可分配订单数
|
||||
for (String code : gzz_codes) {
|
||||
int gzz_nx = gzz_nx_avg - (gzz_maps.get(code)==null?0:gzz_maps.get(code));
|
||||
|
||||
|
||||
for (String key : gzzMap.keySet()) {
|
||||
GongZuoZhan gongZuoZhan=gzzMap.get(key);
|
||||
logger.info("Code:"+gongZuoZhan.code+" notFinished:"+gongZuoZhan.notFinished+" maxRenWu:"+gongZuoZhan.maxRenWu+" isEnble:"+gongZuoZhan.isEnble);
|
||||
}
|
||||
|
||||
|
||||
for (TwlFenZu twlFenZu : paixu) {
|
||||
List<GongDanMingXi> list_show = twlFenZu.gdPaiXus; //当前头无聊所有的工单组合,以及每个工单的物料明细
|
||||
int this_fenzuCount=twlFenZu.wl_count; //当前分组总物料行数
|
||||
List<GongZuoZhan>listGzz= FaiXuGzz(gzzMap); //工作站根据可分配数量进行排序
|
||||
int gzz_index=0; //当前分配工作站的排序下标
|
||||
GongZuoZhan curr_gzz=listGzz.get(0);
|
||||
for (int index=0;index<list_show.size();index++) {
|
||||
GongDanMingXi gongDanMingXi=list_show.get(index);
|
||||
//当前工单的物料
|
||||
List<FenPei> list_wList=gongDanMingXi.list;
|
||||
if(list_wList.size()+curr_gzz.notFinished+curr_gzz.renWuList.size()<=curr_gzz.maxRenWu){
|
||||
//如果当前待分配+此工作站未完成+已分配任务数 小于最大任务数 //将当前任务分配到此工作站
|
||||
for (FenPei fenPei : list_wList) {
|
||||
curr_gzz.renWuList.add(fenPei);
|
||||
}
|
||||
if(index==list_show.size()-1){
|
||||
//最后一个工单
|
||||
gzzMap.put(curr_gzz.code, curr_gzz);
|
||||
}
|
||||
}else{
|
||||
gzzMap.put(curr_gzz.code, curr_gzz);
|
||||
//如果当前待分配+此工作站未完成+已分配任务数 大于最大任务数 //将当前任务分配到下个工作站
|
||||
gzz_index=gzz_index+1;
|
||||
curr_gzz=listGzz.get(gzz_index);
|
||||
for (FenPei fenPei : list_wList) {
|
||||
curr_gzz.renWuList.add(fenPei);
|
||||
}
|
||||
if(index==list_show.size()-1){
|
||||
//最后一个工单
|
||||
gzzMap.put(curr_gzz.code, curr_gzz);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
int fenPeiCount=0;
|
||||
for (String key : gzzMap.keySet()) {
|
||||
GongZuoZhan gongZuoZhan=gzzMap.get(key);
|
||||
logger.info("----------------------------------------------------开始分配----------------------------------------------------------------------");
|
||||
logger.info("--------------------------------------------------------------------------------------------------------------------------");
|
||||
logger.info("Code:"+gongZuoZhan.code+" notFinished:"+gongZuoZhan.notFinished+" maxRenWu:"+gongZuoZhan.maxRenWu+" isEnble:"+gongZuoZhan.isEnble);
|
||||
logger.info("--------------------------------------------------------------------------------------------------------------------------");
|
||||
for (FenPei fenPei : gongZuoZhan.renWuList) {
|
||||
fenPeiCount=fenPeiCount+1;
|
||||
logger.info(""+fenPei.twl_fz+"---"+fenPei.chf_fz+"---"+fenPei.chf+"---"+fenPei.gdh+"---"+fenPei.rqh);
|
||||
}
|
||||
logger.info("--------------------------------------------------------------------------------------------------------------------------");
|
||||
}
|
||||
logger.info("GongDan_wuLiaoMingXiCout:"+GongDan_wuLiaoMingXiCout+"wlcountString:"+wlcountString+" fenPeiCount:"+fenPeiCount);
|
||||
// 写入数据库
|
||||
|
||||
/*
|
||||
|
|
@ -375,7 +471,228 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
|
|||
* }finally { session.close(); }
|
||||
*/
|
||||
session.close();
|
||||
}
|
||||
|
||||
|
||||
public List<GongZuoZhan> FaiXuGzz(Map<String, GongZuoZhan> gzzMap){
|
||||
List<GongZuoZhan> list =new ArrayList<DefaultNewWaveManager.GongZuoZhan>();
|
||||
for (String key: gzzMap.keySet()) {
|
||||
if(gzzMap.get(key).isEnble){
|
||||
list.add(gzzMap.get(key));
|
||||
}
|
||||
}
|
||||
Collections.sort(list);
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
class GongZuoZhan implements Comparable<GongZuoZhan>{
|
||||
public GongZuoZhan(String code,int notFinished,int maxRenWu,boolean isEnble){
|
||||
this.code=code;
|
||||
this.notFinished=notFinished;
|
||||
this.maxRenWu=maxRenWu;
|
||||
this.isEnble=isEnble;
|
||||
}
|
||||
public String code="";
|
||||
public boolean isEnble;
|
||||
public int maxRenWu;
|
||||
public int notFinished =0;
|
||||
public List<FenPei> renWuList=new ArrayList<DefaultNewWaveManager.FenPei>();
|
||||
@Override
|
||||
public int compareTo(GongZuoZhan other) {
|
||||
// TODO Auto-generated method stub
|
||||
return this.notFinished+renWuList.size()-other.notFinished-other.renWuList.size();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public List<FenPei> Paixu(List<FenPei>list_fenpei ){
|
||||
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);
|
||||
} else {
|
||||
List<FenPei> list_count = new ArrayList<FenPei>();
|
||||
list_count.add(fenPei);
|
||||
GongDan_WuLiao_Map.put(GongDan_WuLiao, list_count);
|
||||
}
|
||||
}
|
||||
int sumCout = 0;
|
||||
|
||||
//打印第一次分组,根据大小件拆分工单
|
||||
//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
|
||||
//logger.info("--------------------------Map<String, List<FenPei>> GongDan_WuLiao_Map = new HashMap<>();-----------------------------------------------");
|
||||
//logger.info("--------------------------Map<String, List<FenPei>> GongDan_WuLiao_Map = new HashMap<>();-----------------------------------------------");
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
|
||||
//打印第一次分组,根据大小件拆分工单
|
||||
|
||||
// 记录每个工单 的数目
|
||||
|
||||
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);
|
||||
|
||||
|
||||
//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
|
||||
//logger.info("---------------------List<GdPaiXu> GongDan_List = new ArrayList<GdPaiXu>();-------------------------------------------");
|
||||
//logger.info("---------------------List<GdPaiXu> GongDan_List = new ArrayList<GdPaiXu>();-------------------------------------------");
|
||||
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;
|
||||
int currCount_in = touwuliao_map.get(twlKey).get(0).hangshu;
|
||||
if (twl_in.equals(fenzu)
|
||||
&& Math.abs(currCount - currCount_in) <= 4) {
|
||||
// 在分配好的数据中找到了相同的头物料 且 数量差小于4
|
||||
List<GongDanMingXi> old = touwuliao_map.get(twlKey);
|
||||
old.add(gdPaiXu);
|
||||
touwuliao_map.put(twlKey, old);
|
||||
isFind = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!isFind) {
|
||||
// 未匹配到数据,自己单独一组
|
||||
List<GongDanMingXi> llist = new ArrayList<GongDanMingXi>();
|
||||
llist.add(gdPaiXu);
|
||||
touwuliao_map.put(fenzu+"_"+gdh, llist);
|
||||
}
|
||||
|
||||
}
|
||||
//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("-----------------------------------------------------------------------");
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 计算没个容器号出现得次数(在每个头物料得分组里面)
|
||||
|
||||
//logger.info("-------------------------------------------------------------------------------打印工单容器号----------------------------------------------------------------------------------------------------------------------------");
|
||||
|
||||
for (String twlKey : touwuliao_map.keySet()) {
|
||||
List<GongDanMingXi> list_show = touwuliao_map.get(twlKey);
|
||||
|
||||
Map<String, Integer> rq_showTime = new HashMap<>();
|
||||
|
||||
for (GongDanMingXi fenPei2 : list_show) {
|
||||
Set<String> set_rqh = new HashSet<>();
|
||||
StringBuffer rqm_str = new StringBuffer();
|
||||
for (FenPei fff : fenPei2.list) {
|
||||
// 通过set记录容器号
|
||||
set_rqh.add(fff.rqh);
|
||||
}
|
||||
|
||||
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的 中 按照容器出现次数进行排序
|
||||
List<GongDanMingXi> list_show_new = new ArrayList<>();
|
||||
for (GongDanMingXi fenPei2 : list_show) {
|
||||
List<FenPei> list_new = new ArrayList<>();
|
||||
for (FenPei f1 : fenPei2.list) {
|
||||
f1.show_time = rq_showTime.get(f1.rqh);
|
||||
f1.paixu_type = 1;
|
||||
list_new.add(f1);
|
||||
}
|
||||
Collections.sort(list_new);
|
||||
fenPei2.list = list_new;
|
||||
list_show_new.add(fenPei2);
|
||||
}
|
||||
touwuliao_map.put(twlKey, list_show_new);
|
||||
|
||||
}
|
||||
|
||||
// 对touwuliao_map 的单个工单大于15的进行拆分
|
||||
Map<String, List<GongDanMingXi>> touwuliao_new_Map = new HashMap<>();
|
||||
List<FenPei> list_new =new ArrayList<>();
|
||||
for (String twlKey : touwuliao_map.keySet()) {
|
||||
List<GongDanMingXi> list_show = touwuliao_map.get(twlKey);
|
||||
for (GongDanMingXi gdPaiXu : list_show) {
|
||||
List<FenPei> list_fen=gdPaiXu.list;
|
||||
|
||||
for (int i = 0; i < list_fen.size(); i++) {
|
||||
FenPei fenPei=list_fen.get(i);
|
||||
fenPei.chf_fz=(i)/15+1;
|
||||
fenPei.chf=(i+1)+"";
|
||||
fenPei.twl_fz=twlKey;
|
||||
list_new.add(fenPei);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
return list_new;
|
||||
}
|
||||
|
||||
public void writeToDb(List<FenPei> list_fenpei) {
|
||||
|
|
@ -398,13 +715,13 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
|
|||
}
|
||||
|
||||
class TwlFenZu implements Comparable<TwlFenZu> {
|
||||
List<GdPaiXu> gdPaiXus;
|
||||
List<GongDanMingXi> gdPaiXus;
|
||||
public int wl_count = 0;
|
||||
|
||||
public TwlFenZu(List<GdPaiXu> gdPaiXus) {
|
||||
public TwlFenZu(List<GongDanMingXi> gdPaiXus) {
|
||||
this.gdPaiXus = gdPaiXus;
|
||||
int count = 0;
|
||||
for (GdPaiXu gdPaiXu : gdPaiXus) {
|
||||
for (GongDanMingXi gdPaiXu : gdPaiXus) {
|
||||
count = count + gdPaiXu.list.size();
|
||||
}
|
||||
this.wl_count = count;
|
||||
|
|
@ -417,13 +734,13 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
|
|||
|
||||
}
|
||||
|
||||
class GdPaiXu implements Comparable<GdPaiXu> {
|
||||
class GongDanMingXi implements Comparable<GongDanMingXi> {
|
||||
public String gdh; // 工单号
|
||||
public int hangshu;// 工单行数
|
||||
public String twl;// 头物料
|
||||
public List<FenPei> list;
|
||||
|
||||
public GdPaiXu(String gdh, List<FenPei> list) {
|
||||
public GongDanMingXi(String gdh, List<FenPei> list) {
|
||||
this.gdh = gdh;
|
||||
this.hangshu = list.size();
|
||||
this.twl = list.get(0).twl;
|
||||
|
|
@ -432,7 +749,7 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
|
|||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(GdPaiXu other) {
|
||||
public int compareTo(GongDanMingXi other) {
|
||||
// TODO Auto-generated method stub
|
||||
return Integer.compare(this.hangshu, other.hangshu);
|
||||
}
|
||||
|
|
@ -495,6 +812,15 @@ public class DefaultNewWaveManager extends DefaultBaseManager implements
|
|||
* 拆分号
|
||||
*/
|
||||
public String chf;
|
||||
|
||||
/**
|
||||
* 拆分号分组
|
||||
*/
|
||||
public int chf_fz;
|
||||
/**
|
||||
* 拆分号分组
|
||||
*/
|
||||
public String twl_fz;
|
||||
|
||||
public int paixu_type = 0;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue