From d6edbc74885877b83ead8c9d9f51164f360c55c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=93=B2=E5=A5=87?= <13840175730@139.com> Date: Fri, 1 Nov 2024 10:46:12 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E6=8E=92=E4=BA=A7=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E9=A1=BA=E5=BA=8F=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= =?UTF-8?q?=202.=E4=BC=98=E5=8C=96=E6=9C=88=E5=BA=A6=E8=AE=A1=E5=88=92?= =?UTF-8?q?=E6=8E=92=E4=BA=A7=E9=A1=B5=E9=9D=A2=E6=AD=A5=E9=AA=A4=E6=9D=A1?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E9=80=9A=E8=BF=87=E7=82=B9=E5=87=BB=E6=BF=80?= =?UTF-8?q?=E6=B4=BB=E5=90=84=E6=AD=A5=E9=AA=A4=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?,=E8=B0=83=E6=95=B4=E8=AE=BE=E5=A4=87=E4=BA=A7=E8=83=BD?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E6=8C=89=E7=85=A7=E5=9E=AE=E4=BD=8D=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dsic/gj_erp/pc/DataFactory.java | 50 ++++++++++++++++--- .../jhgk/impl/DmSygdMxServiceImpl.java | 2 +- 2 files changed, 45 insertions(+), 7 deletions(-) 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)