From c4b2cfbdc4b31a6e37a9b51c5f69620bd5e7841f Mon Sep 17 00:00:00 2001 From: pjb <pjb123456> Date: 星期六, 23 八月 2025 08:38:58 +0800 Subject: [PATCH] wcs功能完善 --- src/main/java/com/zy/service/impl/MainServiceImpl.java | 195 ++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 178 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/zy/service/impl/MainServiceImpl.java b/src/main/java/com/zy/service/impl/MainServiceImpl.java index 9159360..3c045b6 100644 --- a/src/main/java/com/zy/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/service/impl/MainServiceImpl.java @@ -41,6 +41,7 @@ import javax.annotation.Resource; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** @@ -107,7 +108,7 @@ crnOutSiteToRgvSite.put(1093, (short) 1091);crnOutSiteToRgvSite.put(1099, (short) 1097);crnOutSiteToRgvSite.put(1107, (short) 1105); crnOutSiteToRgvSite2.put(1087, (short) 1089);crnOutSiteToRgvSite2.put(1084, (short) 1086);crnOutSiteToRgvSite2.put(1081, (short) 1083); - crnOutSiteToRgvSite2.put(1043, (short) 1041);crnOutSiteToRgvSite2.put(1016, (short) 1018); + crnOutSiteToRgvSite2.put(1043, (short) 1041);crnOutSiteToRgvSite2.put(1016, (short) 1018);crnOutSiteToRgvSite2.put(1008, (short) 1006); } @Autowired @@ -620,15 +621,23 @@ crnProtocol.setLastIo("O"); } else if (basCrnp.getOutEnable().equals("Y")) { //mark - 2 - .... - this.locToCrnStn(crn, crnProtocol,mark); // 鍑哄簱 + AtomicInteger atomicInteger = new AtomicInteger(mark); + this.locToCrnStn(crn, crnProtocol,atomicInteger); // 鍑哄簱 crnProtocol.setLastIo("I"); + if(atomicInteger.get() == 99) { // 涓嬩竴娆¤繕鏄嚭搴� + crnProtocol.setLastIo("O"); + } } } // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡 else if (crnProtocol.getLastIo().equals("O")) { if (basCrnp.getOutEnable().equals("Y")) { - this.locToCrnStn(crn, crnProtocol,mark); // 鍑哄簱 + AtomicInteger atomicInteger = new AtomicInteger(mark); + this.locToCrnStn(crn, crnProtocol,atomicInteger); // 鍑哄簱 crnProtocol.setLastIo("I"); + if(atomicInteger.get() == 99) { // 涓嬩竴娆¤繕鏄嚭搴� + crnProtocol.setLastIo("O"); + } } else if (basCrnp.getInEnable().equals("Y")) { this.crnStnToLoc(crn, crnProtocol,mark); // 鍏ュ簱 crnProtocol.setLastIo("O"); @@ -687,7 +696,12 @@ // 鍒ゆ柇1050鏄惁鏈夎揣 StaProtocol staProtocol1 = devpThread.getStation().get(1050); if(staProtocol1.isAutoing() && staProtocol1.isLoading() && staProtocol1.isInEnable() && staProtocol1.getWorkNo() != 0) { - + // 鍒嗛厤搴撲綅 + boolean isContinue =getLocNoNew(staProtocol1.getWorkNo(),wrkMast); + // 鏄惁涓嶇户缁線涓嬫墽琛� + if (isContinue) { + continue; + } } else { continue; } @@ -749,7 +763,7 @@ wrkMast.setIoPri(14D); wrkMastMapper.updateById(wrkMast); // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑 - moveLocForDeepLoc(slave, shallowLoc,mark); + moveLocForDeepLoc(slave, shallowLoc,new AtomicInteger(mark)); // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�) // moveLocForDeepLocPakin(slave, shallowLoc, wrkMast); } @@ -780,8 +794,8 @@ if(crnStn.getStaNo() == 1050 && locMast.getRow1() == 10) { crnCommand.setDestinationPosX((short) 9); } - if(crnStn.getStaNo() == 1049 && locMast.getRow1() == 11) { - crnCommand.setDestinationPosX((short) 12); + if(crnStn.getStaNo() == 1049 && locMast.getRow1() == 10) { + crnCommand.setDestinationPosX((short) 9); } crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 鐩爣搴撲綅鍒� crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 鐩爣搴撲綅灞� @@ -823,16 +837,132 @@ News.infoNoLog(""+mark+" - 1"+" - 0"+" - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 锛� 鍏ュ簱鎵ц瀹屾瘯"); } + private boolean getLocNoNew(Integer workNo1050, WrkMast wrkMast1049) { + if(!wrkMast1049.getLocNo().isEmpty()) { + return false; + } + WrkMast wrkMast1050 = wrkMastMapper.selectPakInStep2(4, workNo1050); + // 鍒ゆ柇1050娌℃湁琚爢鍨涙満鍙栵紝骞朵笖娌℃湁灏炬嫋淇″彿 + if(wrkMast1050 != null && wrkMast1050.getCtnType() != 1) { + // 鍒ゆ柇杩欎袱涓揣鏄笉鏄竴绉嶇被鍨嬶紝涓嶆槸缁�1050鍒嗛厤搴撲綅锛岀粰灏炬嫋鏍囪瘑锛屾槸鍒欑粰涓や釜璐у垎閰嶅簱浣� + if(wrkMast1050.getPdcType().equals(wrkMast1049.getPdcType())) { + // 鍙栨柊搴撲綅缁勭殑绗竴涓簱浣� + List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("crn_no", 4).eq("loc_sts", "O")); + List<LocMast> collect = locMasts.stream().filter(locMast1 -> locMast1.getRow1() == 9 || locMast1.getRow1() == 11).collect(Collectors.toList()); + List<LocMast> collect1 = locMasts.stream().filter(locMast1 -> locMast1.getRow1() == 10 || locMast1.getRow1() == 12).collect(Collectors.toList()); + if (collect.size() <= 0 && collect1.size() <= 0) { + News.error("绔欑偣:{},浠诲姟鍙穥}锛氬叆搴撶┖妗跺簱鏃犵┖搴撲綅",1050,workNo1050); + return true; + } + // 鍙敤搴撲綅缁� + List<LocMast> locMastList = new ArrayList<>(); + for(LocMast locMast1:collect) { + Optional<LocMast> first = collect1.stream().filter(locMast2 -> locMast1.getRow1() + 1 == locMast2.getRow1() && Objects.equals(locMast1.getLev1(), locMast2.getLev1()) + && Objects.equals(locMast1.getBay1(), locMast2.getBay1())).findFirst(); + first.ifPresent(locMastList::add); + } + + if (locMastList.size() == 0) { + News.error("绔欑偣:{},浠诲姟鍙穥}锛氬叆搴撶┖妗跺簱鏃犲搴旂┖绌烘《缁�",1050,workNo1050); + return true; + } + WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", workNo1050)); + if (wrkDetl.getModel().equals("208L") && locMastList.size() <= 40 * 2 * 2) { // 鏈�涓婇潰涓�灞傚彧鑳芥斁208L锛屽簱浣嶅墿浣欓噺涓嶅鏃讹紝濡傛灉鏄�208L妗跺叆搴擄紝鍒欏厛浠庢渶椤跺眰鏀� + locMastList = locMastList.stream().sorted(Comparator.comparing(LocMast::getLev1).reversed().thenComparing(LocMast::getBay1).thenComparing(LocMast::getRow1)).collect(Collectors.toList()); + } else { + locMastList = locMastList.stream().sorted(Comparator.comparing(LocMast::getLev1).thenComparing(LocMast::getBay1).thenComparing(LocMast::getRow1)).collect(Collectors.toList()); + } + // 1049瀵瑰簲搴撲綅 + LocMast locMast = locMastList.get(0); + + wrkMast1049.setLocNo(locMast.getLocNo()); + wrkMastService.updateById(wrkMast1049); + if (locMast.getLocSts().equals("O")){ + locMast.setLocSts("S"); // S.鍏ュ簱棰勭害 + locMast.setModiTime(new Date()); + if (!locMastService.updateById(locMast)){ + News.error("绔欑偣:{},浠诲姟鍙穥}锛氭敼鍙樺簱浣峽}鐘舵�亄}澶辫触",1049,wrkMast1049.getWrkNo(),locMast.getLocNo(),locMast.getLocSts()); + } else { + // 缁�1050鍒嗛厤瀵瑰簲搴撲綅 + Optional<LocMast> first = collect.stream().filter(locMast1 -> locMast1.getLocNo().equals((locMast.getRow1() == 10 ? "09" : "11") + locMast.getLocNo().substring(2))).findFirst(); + if(first.isPresent()) { + LocMast locMast1 = first.get(); + wrkMast1050.setLocNo(locMast1.getLocNo()); + + locMast1.setLocSts("S"); // S.鍏ュ簱棰勭害 + locMast1.setModiTime(new Date()); + wrkMastService.updateById(wrkMast1050); // 鏇存柊鍒嗛厤鐨勫簱浣� + locMastService.updateById(locMast1); // 鏇存柊搴撲綅鐘舵�� + return false; + } else { + News.error("绔欑偣:{},浠诲姟鍙穥}锛氱┖搴撲綅缁剓}鏃犲搴旂┖搴撲綅",1050,workNo1050,locMast.getLocNo()); + } + } + } else { + News.error("绔欑偣:{},浠诲姟鍙穥}锛氱洰鏍囧簱浣嶏細{}宸茶鍗犵敤",1049,wrkMast1049.getWrkNo(),locMast.getLocNo()); + } + } else { + // 鍙栨柊搴撲綅缁勭殑绗竴涓簱浣� + List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("crn_no", 4).eq("loc_sts", "O")); + List<LocMast> collect = locMasts.stream().filter(locMast1 -> locMast1.getRow1() == 9 || locMast1.getRow1() == 11).collect(Collectors.toList()); + List<LocMast> collect1 = locMasts.stream().filter(locMast1 -> locMast1.getRow1() == 10 || locMast1.getRow1() == 12).collect(Collectors.toList()); // 绗竴涓厛鏀捐繖涓ゆ帓 + if (collect.size() <= 0 && collect1.size() <= 0) { + News.error("绔欑偣:{},浠诲姟鍙穥}锛氬叆搴撶┖妗跺簱鏃犵┖搴撲綅",1050,workNo1050); + return true; + } + // 鍙敤搴撲綅缁� + List<LocMast> locMastList = new ArrayList<>(); + for(LocMast locMast1:collect) { + Optional<LocMast> first = collect1.stream().filter(locMast2 -> locMast1.getRow1() + 1 == locMast2.getRow1() && Objects.equals(locMast1.getLev1(), locMast2.getLev1()) + && Objects.equals(locMast1.getBay1(), locMast2.getBay1())).findFirst(); + first.ifPresent(locMastList::add); + } + + if (locMastList.size() == 0) { + News.error("绔欑偣:{},浠诲姟鍙穥}锛氬叆搴撶┖妗跺簱鏃犲搴旂┖绌烘《缁�",1050,workNo1050); + return true; + } + WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", workNo1050)); + if (wrkDetl.getModel().equals("208L") && locMastList.size() <= 40 * 2 * 2) { // 鏈�涓婇潰涓�灞傚彧鑳芥斁208L锛屽簱浣嶅墿浣欓噺涓嶅鏃讹紝濡傛灉鏄�208L妗跺叆搴擄紝鍒欏厛浠庢渶椤跺眰鏀� + locMastList = locMastList.stream().sorted(Comparator.comparing(LocMast::getLev1).reversed().thenComparing(LocMast::getBay1).thenComparing(LocMast::getRow1)).collect(Collectors.toList()); + } else { + locMastList = locMastList.stream().sorted(Comparator.comparing(LocMast::getLev1).thenComparing(LocMast::getBay1).thenComparing(LocMast::getRow1)).collect(Collectors.toList()); + } + LocMast locMast = locMastList.get(0); + wrkMast1050.setLocNo(locMast.getLocNo()); + wrkMast1050.setCtnType(1); // 灏炬墭鏍囪瘑 + wrkMastService.updateById(wrkMast1050); + if (locMast.getLocSts().equals("O")){ + locMast.setLocSts("S"); // S.鍏ュ簱棰勭害 + locMast.setModiTime(new Date()); + if (!locMastService.updateById(locMast)){ + News.error("绔欑偣:{},浠诲姟鍙穥}锛氭敼鍙樺簱浣峽}鐘舵�亄}澶辫触",1050,workNo1050,locMast.getLocNo(),locMast.getLocSts()); + } + } else { + News.error("绔欑偣:{},浠诲姟鍙穥}锛氱洰鏍囧簱浣嶏細{}宸茶鍗犵敤",1050,workNo1050,locMast.getLocNo()); + } + } + } + return true; + } + /** * 鍑哄簱 ===>> 搴撲綅鍒板爢鍨涙満绔� * 2022-06-09 TQS淇敼锛屾煡璇㈠伐浣滄。LIST锛岄亶鍘嗕笅鍙戯紝闃叉绗竴涓换鍔″牭濉炲嚭搴� */ - public synchronized void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol,Integer mark) { + public synchronized void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol,AtomicInteger mark) { News.warnNoLog(""+mark+" - 2"+" - 0"+" - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂锛氭墽琛屽嚭搴�"); boolean crnAvailableOut = false; Config config = configService.selectOne(new EntityWrapper<Config>().eq("code","removeCrnAvailableOut")); - if (config != null && config.getStatus() == 1) { - crnAvailableOut = true; + if (config != null && config.getStatus() == 1 && !Cools.isEmpty(config.getValue())) { + // 闇�瑕佽嚜鍔ㄨˉ绌烘《鐨勭珯鐐� + String[] split = config.getValue().split("="); + for (String item : split) { + if (slave.getId() == Integer.parseInt(item)) { + crnAvailableOut = true; + break; + } + } } // 闄愬埗鍘绘崋缁戞満鍣ㄤ换鍔℃暟 int kbWrks = wrkMastMapper.selectCountByKb(); @@ -842,6 +972,15 @@ for (WrkMast wrkMast : wrkMasts) { if (wrkMast == null) { continue; + } + // 鍒ゆ柇浠诲姟鐩爣绔欑偣鏄惁鏄嚭搴撴ā寮� + if(wrkMast.getStaNo() == 1016 || wrkMast.getStaNo() == 1043) { + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); + StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getStaNo()); + if(staProtocol.getInOrOutMode() != 2) { + News.error("{}浠诲姟鐩爣绔欑偣锛歿}锛屽綋鍓嶆ā寮忥細{}涓嶆槸鍑哄簱妯″紡锛屾棤娉曞嚭搴�",wrkMast.getWrkNo(),wrkMast.getStaNo(),staProtocol.getInOrOutMode()); + continue; + } } if (wrkMast.getStaNo() == 1031) { // 鑾峰彇1033鏃犵姸鎬佹椂浠诲姟鏁�+1 @@ -992,6 +1131,7 @@ wrkMast1.setSourceStaNo(1056); wrkMastService.updateById(wrkMast1); } + mark.set(99); break; } } @@ -1176,16 +1316,16 @@ if(wrkMast.getWorkNoOther() != 0 ){ WrkMast wrkMast1 = wrkMastService.selectByWrkNo(wrkMast.getWorkNoOther()); if (wrkMast1 != null) { - // 浜ゆ崲搴撲綅鍙� +// // 浜ゆ崲搴撲綅鍙� String locNo = wrkMast.getLocNo(); - wrkMast.setLocNo(wrkMast1.getLocNo()); +// wrkMast.setLocNo(wrkMast1.getLocNo()); // 浜ゆ崲鍏ュ簱鏃堕棿锛屾彁鍙栧簱瀛樻椂鎸夐『搴忓厛娴呭悗娣� Date ioTime = wrkMast.getIoTime(); if(locNo.startsWith("10")) { wrkMast.setIoTime(wrkMast1.getIoTime()); wrkMast1.setIoTime(ioTime); } - wrkMast1.setLocNo(locNo); +// wrkMast1.setLocNo(locNo); wrkMast1.setCrnEndTime(now); wrkMast1.setModiTime(now); wrkMast1.setWrkSts(4L); @@ -1631,6 +1771,13 @@ // 鏄庣粏 WrkDetl wrkDetl1 = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); if (wrkDetl1 != null) { + // 鍑哄簱浠诲姟鐨勫洓涓嚭搴撶珯鐐癸紝鍒ゆ柇褰撳墠鐗╂枡涓�鎵瑰嚭搴撶殑鏃堕棿 鑾峰彇褰撳墠宸插畬鎴� / 鎬绘暟 + if(wrkMast.getIoType() == 101 && (wrkMast.getStaNo() == 1024 ||wrkMast.getStaNo() == 1040 ||wrkMast.getStaNo() == 1043 ||wrkMast.getStaNo() == 1016) ) { + int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 101).eq("io_time", wrkMast.getIoTime())); + int countHis = wrkMastMapper.selectCountHisByIoTypeAndIoTime(101, wrkMast.getIoTime()); + matDto.setOutTotal(count+countHis); + matDto.setIsOutCount(countHis + 1); + } ledCommand.setOrderNo(wrkDetl1.getOrderNo()); matDto.setMaknx(wrkDetl1.getMaktx()); matDto.setMatnr(wrkDetl1.getMatnr()); @@ -1699,6 +1846,14 @@ if (staProtocol.getWorkNo() != 0) { reset = false; break; + } else { + // 鍏ュ簱鍦ㄦ棤鐗╃殑鏃跺�欐墠娓呴櫎寮傚父 + if(staNo == 1006 || staNo == 1012 || staNo == 1018 || staNo == 1041) { + if(staProtocol.isLoading()) { + reset = false; + break; + } + } } } // 鑾峰彇led绾跨▼ @@ -1720,7 +1875,7 @@ * 鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堢珛鍗虫墽琛岀増) * tip锛氬悓姝� */ - private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc,Integer mark) { + private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc,AtomicInteger mark) { // 鍙湁208L鑳芥斁11灞� String model = null; @@ -2062,6 +2217,12 @@ wrkMast.setWrkSts(15L); wrkMast.setModiTime(new Date()); wrkMastService.updateById(wrkMast); + // 1020鍒囨崲鍑哄簱妯″紡锛屽鏋滄湁鎵樼洏鍏ユ媶鐩樻満锛屼笉缁欒緭閫佺嚎涓嬪彂鍛戒护 + if(wrkMast.getStaNo() == 1020) { + if(staProtocol.getInOrOutMode() != 1) { + continue; + } + } } else if(wrkMast.getIoType() == 120) { if(wrkMast.getWrkSts() != 53 ){ log.warn("rgv鏀捐揣瀹屾垚120锛宺gv鏈浣�:rgv鍙穥}锛屼换鍔″彿锛歿}锛屼换鍔$姸鎬亄}",wrkMast.getRgvNo(),wrkMast.getWrkNo(),wrkMast.getWrkSts()); @@ -2579,7 +2740,7 @@ if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.getWorkNo() != 0) { // 鏌ヨ宸ヤ綔妗� WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo()); - if (wrkMast != null && wrkMast.getWhsType() == null) { + if (wrkMast != null && wrkMast.getWhsType() == null && wrkMast.getIoType() != 120) { WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); staProtocol.setBucketType(wrkDetl.getMatnr()); staProtocol.setBucketCount(wrkDetl.getAnfme().intValue()); @@ -2654,10 +2815,10 @@ StaProtocol staProtocolNew = new StaProtocol(); staProtocolNew.setSiteId(staProtocol.getSiteId()); staProtocolNew.setWorkNo(wrkMast.getWrkNo()); - staProtocolNew.setStaNo(crnOutSiteToRgvSite2.get(wrkMast.getSourceStaNo())); + staProtocolNew.setStaNo(crnOutSiteToRgvSite2.get(wrkMast.getSourceStaNo()) != null ? crnOutSiteToRgvSite2.get(wrkMast.getSourceStaNo()) :wrkMast.getSourceStaNo().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); boolean result = MessageQueue.offer(SlaveType.Devp, devpId, new Task(2, staProtocolNew)); - log.info("鎵嬪姩绔欎綅杞Щ杈撻�佺嚎涓嬪彂锛�" + staProtocolNew.getWrkNo() + "," + staProtocolNew.getSiteId()); + log.info("鎵嬪姩绔欎綅杞Щ杈撻�佺嚎涓嬪彂锛�" + staProtocolNew.getWorkNo() + "," + staProtocolNew.getSiteId() + "->" + staProtocolNew.getStaNo()); if (!result) { News.errorNoLog("" + " - 1" + " - 鏇存柊plc绔欑偣淇℃伅澶辫触"); throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); -- Gitblit v1.9.1