From 1b7fa84d5b48c67f920ff9d3202ceb9bda80bdc5 Mon Sep 17 00:00:00 2001 From: pang.jiabao <pang_jiabao@163.com> Date: 星期二, 06 五月 2025 19:36:06 +0800 Subject: [PATCH] 地图绘制完成 --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 232 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 225 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java index c920776..4f9173a 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -7,6 +7,7 @@ import com.core.exception.CoolException; import com.zy.asrs.controller.CrnController; import com.zy.asrs.domain.enums.TaskStatusType; +import com.zy.asrs.domain.enums.WorkNoType; import com.zy.asrs.domain.param.CrnOperatorParam; import com.zy.asrs.entity.*; import com.zy.asrs.entity.wms.StorageEscalationParam; @@ -31,9 +32,9 @@ import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.BarcodeThread; import com.zy.core.thread.SiemensDevpThread; -import com.zy.system.service.ConfigService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; @@ -41,6 +42,7 @@ import java.io.IOException; import java.util.Date; import java.util.List; +import java.util.Random; /** * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔� @@ -60,6 +62,8 @@ @Autowired private LocMastService locMastService; @Autowired + private LocDetlService locDetlService; + @Autowired private BasCrnpService basCrnpService; @Autowired private BasDevpService basDevpService; @@ -69,9 +73,11 @@ private BasCrnErrorMapper basCrnErrorMapper; @Autowired private TaskWrkMapper taskWrkMapper; + @Autowired private TaskWrkService taskWrkService; - + @Autowired + private CommonService commonService; @Autowired private StaDescMapper staDescMapper; @@ -81,9 +87,6 @@ @Autowired - private CommonService commonService; - - @Autowired private ToWmsService toWmsService; @@ -91,9 +94,25 @@ private CrnController crnController; @Autowired - private ConfigService configService; + private TransferTaskService transferTaskService; - public void generateStoreWrkFile1() throws IOException, InterruptedException { + @Autowired + private WrkMastService wrkMastService; + + @Autowired + private WrkDetlService wrkDetlService; + + @Value("${loc-move.enable}") + private boolean enable; + @Value("${loc-move.crn1}") + private boolean crn1; + @Value("${loc-move.crn2}") + private boolean crn2; + @Value("${loc-move.crn3}") + private boolean crn3; + + + public void generateStoreWrkFile() throws IOException, InterruptedException { try { // 鏍规嵁杈撻�佺嚎plc閬嶅巻 for (DevpSlave devp : slaveProperties.getDevp()) { @@ -424,6 +443,15 @@ if (flag) { LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>() .eq("row1", (locMast.getRow1() - 1)) + .eq("bay1", locMast.getBay1()) + .eq("lev1", locMast.getLev1()).eq("loc_sts", "F")); + if (!Cools.isEmpty(locMast1)) { + log.info(locMast.getLocNo() + "鍑烘繁搴撲綅锛屾祬搴撲綅鏈夎揣"); + continue; + } + } else { + LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>() + .eq("row1", (locMast.getRow1() + 1)) .eq("bay1", locMast.getBay1()) .eq("lev1", locMast.getLev1()).eq("loc_sts", "F")); if (!Cools.isEmpty(locMast1)) { @@ -834,6 +862,9 @@ try { // 鏍规嵁杈撻�佺嚎plc閬嶅巻 for (DevpSlave devp : slaveProperties.getDevp()) { + if (devp.getId() == 2) { + continue; + } SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); for (DevpSlave.Sta inSta : devp.getInSta()) { WrkMast pakout = wrkMastMapper.selectWorkingPakout(inSta.getBackSta()); @@ -992,4 +1023,191 @@ } } + + /** + * 璺戝簱绋嬪簭 + */ + public void debug(String sts, Long modiUser, Integer loc_type1) { + if (!enable) { + return; + } + List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>()); + if (basCrnps.isEmpty()) { + return; + } + for (BasCrnp basCrnp : basCrnps) { + if (!basCrnp.getInEnable().equals("N") || !basCrnp.getOutEnable().equals("Y")) { + continue; + } + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", basCrnp.getCrnNo()).eq("io_type", 11)); + if (Cools.isEmpty(wrkMasts) || wrkMasts.isEmpty()) { + int i = locMastService.selectCount(new EntityWrapper<LocMast>().eq("loc_sts", sts).eq("loc_type1", loc_type1).ne("modi_user", modiUser)); + LocMast locMastStart = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", sts).eq("loc_type1", loc_type1).ne("modi_user", modiUser)); + if (locMastStart == null || i > 1) { + continue; + } + List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>() + .eq("loc_sts", "O") + .eq("crn_no", basCrnp.getCrnNo()) + .eq("loc_type1", locMastStart.getLocType1()) + .ne("modi_user", 77)); + if (Cools.isEmpty(locMasts)) { + continue; + } + Random random = new Random(); + LocMast locMastEnd = locMasts.get(random.nextInt(locMasts.size())); + locMove(locMastStart, locMastEnd, Long.parseLong(basCrnp.getCrnNo().toString())); + } + } + } + + + public void locMove(LocMast sourceLoc, LocMast locNo, Long userId) { + List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLoc.getLocNo())); + LocMast loc = locMastService.selectById(locNo); + if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) { + throw new CoolException("绉昏浆搴撲綅灞炰簬涓嶅悓鍫嗗灈鏈�"); + } + Date now = new Date(); + // 鑾峰彇宸ヤ綔鍙� + int workNo = commonService.getWorkNo(WorkNoType.PICK.type); + // 淇濆瓨宸ヤ綔妗� + WrkMast wrkMast = new WrkMast(); + wrkMast.setWrkNo(workNo); + wrkMast.setIoTime(now); + wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID + wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇 + wrkMast.setIoPri(10D); + wrkMast.setCrnNo(sourceLoc.getCrnNo()); + wrkMast.setSourceLocNo(sourceLoc.getLocNo()); // 婧愬簱浣� + wrkMast.setLocNo(locNo.getLocNo()); // 鐩爣搴撲綅 + wrkMast.setFullPlt(Cools.isEmpty(locDetls) ? "N" : "Y"); // 婊℃澘锛歒 + wrkMast.setPicking("N"); // 鎷f枡 + wrkMast.setExitMk("N"); // 閫�鍑� + wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D") ? "Y" : "N"); // 绌烘澘 + wrkMast.setBarcode(sourceLoc.getBarcode()); // 鎵樼洏鐮� + wrkMast.setLinkMis("N"); + wrkMast.setAppeUser(userId); + wrkMast.setAppeTime(now); + wrkMast.setModiUser(userId); + wrkMast.setModiTime(now); + boolean res = wrkMastService.insert(wrkMast); + if (!res) { + throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); + } + // 宸ヤ綔妗f槑缁嗕繚瀛� + for (LocDetl locDetl : locDetls) { + WrkDetl wrkDetl = new WrkDetl(); + wrkDetl.sync(locDetl); + wrkDetl.setWrkNo(workNo); + wrkDetl.setIoTime(now); + wrkDetl.setAnfme(locDetl.getAnfme()); + wrkDetl.setAppeTime(now); + wrkDetl.setAppeUser(userId); + wrkDetl.setModiTime(now); + wrkDetl.setModiUser(userId); + if (!wrkDetlService.insert(wrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�"); + } + } + // 淇敼婧愬簱浣嶇姸鎬� + if (sourceLoc.getLocSts().equals("D") || sourceLoc.getLocSts().equals("F")) { + sourceLoc.setLocSts("R"); // R.鍑哄簱棰勭害 + sourceLoc.setModiUser(userId); + sourceLoc.setModiTime(now); + if (!locMastService.updateById(sourceLoc)) { + throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�"); + } + } else { + throw new CoolException("婧愬簱浣嶅嚭搴撳け璐ワ紝鐘舵�侊細" + sourceLoc.getLocSts$()); + } + // 淇敼鐩爣搴撲綅鐘舵�� + if (loc.getLocSts().equals("O")) { + loc.setLocSts("S"); // S.鍏ュ簱棰勭害 + loc.setModiTime(now); + loc.setModiUser(userId); + if (!locMastService.updateById(loc)) { + throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�"); + } + } else { + throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細" + loc.getLocSts$()); + } + } + + /** + * 杞Щ浠诲姟涓嬪彂 + */ + public void transferTaskStart() { + for (DevpSlave.Sta sta : slaveProperties.getDevp().get(1).getInSta()) { + try { + // 鑾峰彇鍏ュ簱绔欎俊鎭� + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); + StaProtocol staProtocol = devpThread.getStation().get(sta.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0)) { + // 鏌ヨ宸ヤ綔妗� + TransferTask transferTask = transferTaskService.selectByStartPoint(sta.getStaNo()); + if (transferTask == null) { + continue; + } + log.info("涓嬪彂杈撻�佺嚎杞Щ浠诲姟锛歵askWrk:" + JSON.toJSONString(transferTask)); + staProtocol.setWorkNo(transferTask.getWrkNo().shortValue()); + staProtocol.setStaNo(transferTask.getTargetPoint().shortValue()); + boolean offer = false; + try { + offer = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol)); + } catch (Exception e) { + log.error("涓嬪彂杈撻�佺嚎杞Щ浠诲姟锛氬紓甯�:" + e); + log.error("涓嬪彂杈撻�佺嚎杞Щ浠诲姟锛氬紓甯�:offer:" + offer); + } + if (offer) { + log.info("涓嬪彂杈撻�佺嚎浠诲姟鎴愬姛锛歵askWrk:" + JSON.toJSONString(transferTask)); + transferTask.setStatus(2); + transferTaskService.updateById(transferTask); + } else { + log.error("涓嬪彂杈撻�佺嚎浠诲姟澶辫触锛歵askWrk:" + JSON.toJSONString(transferTask)); + } + } + } catch (Exception e) { + log.error("杞Щ浠诲姟寮傚父:寮傚父淇℃伅锛�" + e); + } + } + + } + + /** + * 杞Щ浠诲姟瀹屾垚 + */ + public void transferTaskEnd() { + for (DevpSlave.Sta sta : slaveProperties.getDevp().get(1).getInSta()) { + try { + // 鑾峰彇缁堢偣绔� + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); + StaProtocol staProtocol = devpThread.getStation().get(sta.getOverSta()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0)) { + // 鏌ヨ宸ヤ綔妗� + TransferTask transferTask = transferTaskService.selectByEndPoint(sta.getStaNo()); + if (transferTask == null) { + continue; + } + log.info("杞Щ浠诲姟瀹屾垚锛歵ransferTask:" + JSON.toJSONString(transferTask)); + transferTask.setStatus(3); + transferTaskService.updateById(transferTask); + } + } catch (Exception e) { + log.error("杞Щ浠诲姟寮傚父:寮傚父淇℃伅锛�" + e); + } + } + + } + } -- Gitblit v1.9.1