|
|
|
@ -79,6 +79,7 @@ public class DataFactory {
|
|
|
|
|
List<钢料需求> list=读取钢料需求1();
|
|
|
|
|
// list=list.stream().filter(item->"G175K-4".equals(item.getDcCh())&&"116".equals(item.getDcPl())).collect(Collectors.toList());
|
|
|
|
|
List<钢料需求> 按批次合并 = 合并批次(list);
|
|
|
|
|
System.out.println("=======");
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
均衡预占(按批次合并);
|
|
|
|
@ -116,6 +117,7 @@ public class DataFactory {
|
|
|
|
|
Map<String, AtomicDouble> 切割各设备需求量 = item.get切割各设备需求量();
|
|
|
|
|
资源 _资源=null;
|
|
|
|
|
Integer cd = 工序CDMap.get(依据工序).getCd();
|
|
|
|
|
PcDto dto=lastedData.get(item.getDcCh());
|
|
|
|
|
do {
|
|
|
|
|
//因为第一次计算时候就是当前批量小组需求日期,所以再次循环到的时候不需要再次计算
|
|
|
|
|
if (times==0){
|
|
|
|
@ -139,16 +141,24 @@ public class DataFactory {
|
|
|
|
|
//continue;
|
|
|
|
|
}
|
|
|
|
|
//记录6次计算的全部资源
|
|
|
|
|
PcDto dto=lastedData.get(item.getDcCh());
|
|
|
|
|
if (times==-3){
|
|
|
|
|
tmpList.add(_资源);
|
|
|
|
|
}else if (dto!=null&&dto.get_资源().get_date().isBefore(_资源.get_date())){
|
|
|
|
|
}else if (dto!=null&&_资源.get_date().isAfterOrEquals(dto.get_资源().get_date())){
|
|
|
|
|
tmpList.add(_资源);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (_资源.判断切割设备是否可以被占用(切割各设备需求量)){
|
|
|
|
|
执行排产(item.getBomList(),item.get均衡需求日期(),工序CDMap);
|
|
|
|
|
break;
|
|
|
|
|
if (dto==null){
|
|
|
|
|
执行排产(item.getBomList(),item.get均衡需求日期(),工序CDMap);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if(_资源.get_date().isAfterOrEquals(dto.get_资源().get_date())){
|
|
|
|
|
执行排产(item.getBomList(),item.get均衡需求日期(),工序CDMap);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if ("G175K-12".equals(item.getDcCh())&&"085".equals(item.getDcPl())){
|
|
|
|
|
System.out.println("=====");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//需求日期可利用范围是±3天,排产是需要根据产能进行调整
|
|
|
|
|
item.set均衡需求日期(DateUtil.offsetDay(DateUtil.parse(item.getXzglxq(),"yyyy/MM/dd"),times));
|
|
|
|
@ -159,8 +169,11 @@ public class DataFactory {
|
|
|
|
|
if (times>3){
|
|
|
|
|
AtomicReference<资源> _tmp= new AtomicReference<>();
|
|
|
|
|
//查找最小可用资源,进行占用
|
|
|
|
|
tmpList = tmpList.stream().filter(资源 -> dto != null && 资源.get_date().isAfterOrEquals(dto.get_资源().get_date())).collect(Collectors.toList());
|
|
|
|
|
tmpList.sort(Comparator.comparingDouble((tmp)->tmp.get工序产能MAP().get(Constant.工序.切割).get占用()));
|
|
|
|
|
|
|
|
|
|
if ("G175K-12".equals(item.getDcCh())&&"085".equals(item.getDcPl())){
|
|
|
|
|
System.out.println("=====");
|
|
|
|
|
}
|
|
|
|
|
tmpList.stream().findFirst().ifPresent(tmp->{
|
|
|
|
|
DateTime dateTime = DateUtil.offsetDay(tmp.get_date(), 7);
|
|
|
|
|
执行排产(item.getBomList(),dateTime,工序CDMap);
|
|
|
|
@ -169,6 +182,12 @@ public class DataFactory {
|
|
|
|
|
_资源=_tmp.get();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (_资源==null){
|
|
|
|
|
item.set均衡需求日期(null);
|
|
|
|
|
执行排产(item.getBomList(),item.get均衡需求日期(),工序CDMap);
|
|
|
|
|
_资源=提取资源(item.get均衡需求日期());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
log.info("船号:{},批次:{},占用资源成功,切割日期:{}",item.getDcCh(),item.getDcPl(),_资源.getDate());
|
|
|
|
|
PcDto pcDto = new PcDto();
|
|
|
|
|
pcDto.setCh(item.getDcCh());
|
|
|
|
@ -186,6 +205,24 @@ public class DataFactory {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void 执行排产(List<Bom> list,DateTime 参照需求日期,Map<Constant.工序,工序CD> 工序CDMap){
|
|
|
|
|
for (Bom bom:list){
|
|
|
|
|
套料图工序 _套料图工序 = 套料图工序工厂(bom);
|
|
|
|
|
|
|
|
|
|
if (_套料图工序==null){
|
|
|
|
|
log.info("船号:{},批次:{},图纸编号:{},无法找到对应套料图",bom.getDcch(),bom.getPl(),bom.getTzbh());
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_套料图工序.setXzglxq(bom.getXzglxq());
|
|
|
|
|
_套料图工序.setDzglxq(bom.getDzglxq());
|
|
|
|
|
_套料图工序.set工序CD(工序CDMap);
|
|
|
|
|
_套料图工序.set中日程(获取中日程(bom.getDcch() + bom.getPl() + bom.getFd()));
|
|
|
|
|
_套料图工序.set参照需求日期(参照需求日期);
|
|
|
|
|
_套料图工序.run();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void 执行排产0(List<Bom> list,DateTime 参照需求日期,Map<Constant.工序,工序CD> 工序CDMap){
|
|
|
|
|
CountDownLatch latch = new CountDownLatch(list.size());
|
|
|
|
|
for (Bom bom:list){
|
|
|
|
|
套料图工序 _套料图工序 = 套料图工序工厂(bom);
|
|
|
|
@ -201,6 +238,7 @@ public class DataFactory {
|
|
|
|
|
_套料图工序.set工序CD(工序CDMap);
|
|
|
|
|
_套料图工序.set中日程(获取中日程(bom.getDcch() + bom.getPl() + bom.getFd()));
|
|
|
|
|
_套料图工序.set参照需求日期(参照需求日期);
|
|
|
|
|
_套料图工序.run();
|
|
|
|
|
es.execute(() -> {
|
|
|
|
|
try{
|
|
|
|
|
_套料图工序.run();
|
|
|
|
@ -217,7 +255,7 @@ public class DataFactory {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static List<钢料需求> 合并批次(List<钢料需求> list){
|
|
|
|
|
Map<String,钢料需求> map=new HashMap<>();
|
|
|
|
|
Map<String,钢料需求> map=new LinkedHashMap<>();
|
|
|
|
|
list.forEach(item->{
|
|
|
|
|
String key=item.getDcCh() + item.getDcPl();
|
|
|
|
|
钢料需求 _钢料需求 = map.get(key);
|
|
|
|
|