diff --git a/src/main/java/com/dsic/gj_erp/pc/DataFactory.java b/src/main/java/com/dsic/gj_erp/pc/DataFactory.java index 775ab21..93227b9 100644 --- a/src/main/java/com/dsic/gj_erp/pc/DataFactory.java +++ b/src/main/java/com/dsic/gj_erp/pc/DataFactory.java @@ -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 切割各设备需求量 = 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 list,DateTime 参照需求日期,Map 工序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 list,DateTime 参照需求日期,Map 工序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 map=new HashMap<>(); + Map map=new LinkedHashMap<>(); list.forEach(item->{ String key=item.getDcCh() + item.getDcPl(); 钢料需求 _钢料需求 = map.get(key); diff --git a/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmSygdMxServiceImpl.java b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmSygdMxServiceImpl.java index 311b211..5ab71ca 100644 --- a/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmSygdMxServiceImpl.java +++ b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmSygdMxServiceImpl.java @@ -995,7 +995,7 @@ public class DmSygdMxServiceImpl extends ServiceImpl i } public List tqSygd2(String begin,String end,String zt){ - List slkw=Arrays.asList("7","8","9","5","10","6","15","11","12","13","14"); + List slkw=Arrays.asList("7","8","9","5","6","15","11","14"); List list = this.list(Wrappers.lambdaQuery() .eq(StrUtil.isNotEmpty(zt),DmSygdMx::getZt,zt) .between(DmSygdMx::getJssj, begin, end)