From 1d6c5111cf4aafc076aa3f8ddf488f6cc3cf6cb1 Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期四, 13 二月 2025 16:56:11 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java | 21 src/main/java/com/zy/common/utils/NavigateMapUtils.java | 11 src/main/java/com/zy/core/enums/LocStsType.java | 2 src/main/java/com/zy/asrs/controller/OpenController.java | 2 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 1851 ++++++++++++++++++--------------------------------- src/main/java/com/zy/common/utils/ForkLiftUtils.java | 80 ++ src/main/java/com/zy/asrs/task/WrkMastScheduler.java | 28 src/main/resources/sql/20250213165543.nb3 | 0 src/main/java/com/zy/asrs/utils/Utils.java | 58 + src/main/webapp/views/admin/locMast/locMast_detail.html | 25 src/main/java/com/zy/core/MainProcess.java | 26 src/main/java/com/zy/core/thread/ForkLiftThread.java | 3 src/main/webapp/static/js/locMast/locMast.js | 18 src/main/resources/application.yml | 8 src/main/java/com/zy/core/thread/impl/ZyForkLiftThread.java | 10 15 files changed, 892 insertions(+), 1,251 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java index c72e692..f79b1d1 100644 --- a/src/main/java/com/zy/asrs/controller/OpenController.java +++ b/src/main/java/com/zy/asrs/controller/OpenController.java @@ -101,7 +101,7 @@ @GetMapping("/test") public R test() { - notifyUtils.notify(String.valueOf(SlaveType.Shuttle), 1, "9999", NotifyMsgType.SHUTTLE_MOVING); + notifyUtils.notify("task", 1, "9999", NotifyMsgType.SHUTTLE_MOVING, "data"); notifyUtils.notify(String.valueOf(SlaveType.Shuttle), 2, "9999", NotifyMsgType.SHUTTLE_MOVE_COMPLETE); return R.ok(); } 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 f37188e..88d0687 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.zy.asrs.domain.enums.NotifyMsgType; import com.zy.asrs.entity.*; -import com.zy.asrs.mapper.*; import com.zy.asrs.service.*; import com.zy.asrs.utils.NotifyUtils; import com.zy.asrs.utils.Utils; @@ -23,6 +22,7 @@ import com.zy.core.model.protocol.*; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.*; +import com.zy.system.entity.Config; import com.zy.system.service.ConfigService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -46,12 +46,6 @@ @Autowired private WrkMastService wrkMastService; @Autowired - private WrkMastLogMapper wrkMastLogMapper; - @Autowired - private LocMastService locMastService; - @Autowired - private BasDevpService basDevpService; - @Autowired private BasShuttleErrLogService basShuttleErrLogService; @Autowired private BasLiftErrLogService basLiftErrLogService; @@ -64,13 +58,9 @@ @Autowired private BasMapService basMapService; @Autowired - private BasLiftService basLiftService; - @Autowired private ShuttleDispatchUtils shuttleDispatchUtils; @Autowired private RedisUtil redisUtil; - @Autowired - private BasLiftOptService basLiftOptService; @Autowired private ConfigService configService; @Autowired @@ -87,441 +77,6 @@ private ForkLiftAction forkLiftAction; @Autowired private NotifyUtils notifyUtils; - - -// /** -// * 缁勬墭 -// * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2 -// */ -// public void generateStoreWrkFile() { -// try { -// // 鏍规嵁杈撻�佺嚎plc閬嶅巻 -// for (DevpSlave devp : slaveProperties.getDevp()) { -// // 閬嶅巻鍏ュ簱鍙� -// for (DevpSlave.Sta inSta : devp.getInSta()) { -// // 鑾峰彇鍏ュ簱绔欎俊鎭� -// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); -// StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); -// if (staProtocol == null) { -// continue; -// } else { -// staProtocol = staProtocol.clone(); -// } -// Short workNo = staProtocol.getWorkNo(); -// // 灏哄妫�娴嬪紓甯� -// boolean back = false; -// String errMsg = "寮傚父锛�"; -// if (staProtocol.isFrontErr()) { -// errMsg = errMsg + "鍓嶈秴闄愶紱"; -// back = true; -// } -// if (staProtocol.isBackErr()) { -// errMsg = errMsg + "鍚庤秴闄�"; -// back = true; -// } -// if (staProtocol.isHighErr()) { -// errMsg = errMsg + "楂樿秴闄�"; -// back = true; -// } -// if (staProtocol.isLeftErr()) { -// errMsg = errMsg + "宸﹁秴闄�"; -// back = true; -// } -// if (staProtocol.isRightErr()) { -// errMsg = errMsg + "鍙宠秴闄�"; -// back = true; -// } -// if (staProtocol.isWeightErr()) { -// errMsg = errMsg + "瓒呴噸"; -// back = true; -// } -// if (staProtocol.isBarcodeErr()) { -// errMsg = errMsg + "鎵爜澶辫触"; -// back = true; -// } -// // 閫�鍥� -// if (back) { -// // led 寮傚父鏄剧ず -// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); -// if (ledThread != null) { -// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg)); -// } -// continue; -// } -// -// // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢 -// if (staProtocol.isAutoing() && staProtocol.isLoading() -// && staProtocol.isInEnable() -// && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999)) -// ) { -// -// // 鑾峰彇鏉$爜鎵弿浠俊鎭� -// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); -// if (barcodeThread == null) { -// continue; -// } -// String barcode = barcodeThread.getBarcode(); -// if (!Cools.isEmpty(barcode)) { -//// News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode); -// if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode) || "00000000".equals(barcode)) { -//// staProtocol.setWorkNo((short) 32002); -//// staProtocol.setStaNo(inSta.getBackSta().shortValue()); -//// devpThread.setPakMk(staProtocol.getSiteId(), false); -//// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); -// -// // led 寮傚父鏄剧ず -// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); -// if (ledThread != null) { -// String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯"; -// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); -// } -// continue; -// } -// } else { -//// staProtocol.setWorkNo((short) 32002); -//// staProtocol.setStaNo(inSta.getBackSta().shortValue()); -//// devpThread.setPakMk(staProtocol.getSiteId(), false); -//// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); -// -//// // led 寮傚父鏄剧ず -//// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); -//// if (ledThread != null) { -//// String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯"; -//// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); -//// } -// continue; -// } -// -// // 杩囨护鐩樼偣/鎷f枡/骞舵澘浠诲姟 -// WrkMast wrkMast1 = wrkMastMapper.selectPickStepByBarcode(barcode); -// if (null != wrkMast1) { -// continue; -// } -// -// // 鍒ゆ柇閲嶅宸ヤ綔妗� -// WrkMast wrkMast2 = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode); -// if (wrkMast2 != null) { -// News.error("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast2.getWrkNo()); -// continue; -// } -// -// try { -// LocTypeDto locTypeDto = new LocTypeDto(staProtocol); -// SearchLocParam param = new SearchLocParam(); -// param.setBarcode(barcode); -// param.setIoType(1); -// param.setSourceStaNo(inSta.getStaNo()); -// param.setLocType1(locTypeDto.getLocType1()); -// String response = new HttpHandler.Builder() -// .setUri(wmsUrl) -// .setPath("/rpc/pakin/loc/v2") -// .setJson(JSON.toJSONString(param)) -// .build() -// .doPost(); -// JSONObject jsonObject = JSON.parseObject(response); -// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); -// Integer code = jsonObject.getInteger("code"); -// if (code.equals(200)) { -// StartupDto dto = jsonObject.getObject("data", StartupDto.class); -// // plc 澶勭悊 -// barcodeThread.setBarcode(""); -//// staProtocol.setWorkNo(dto.getWorkNo().shortValue()); -//// staProtocol.setStaNo(dto.getStaNo().shortValue()); -//// devpThread.setPakMk(staProtocol.getSiteId(), false); -//// -//// boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); -//// if (!result) { -//// throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); -//// } -// -// // 鍒ゆ柇閲嶅宸ヤ綔妗� -// WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo()); -// if (wrkMast == null) { -// continue; -// } -// -// // 鏇存柊宸ヤ綔涓绘。 -// wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋 -// wrkMast.setModiTime(new Date()); -// if (wrkMastMapper.updateById(wrkMast) == 0) { -// News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo()); -// } -// -// } else if (code == 500) { -// if (ledThread != null) { -// String errorMsg = jsonObject.getString("msg"); -// if (!Cools.isEmpty(errorMsg)) { -// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); -// ledThread.setLedMk(false); -// } -// } -// News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response); -// } else if (code == 700) { -//// staProtocol.setWorkNo((short) 32002); -//// staProtocol.setRollback102(1);//102绔欏洖閫�淇″彿 -//// devpThread.setPakMk(staProtocol.getSiteId(), false); -//// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(5, staProtocol)); -// -// // led 寮傚父鏄剧ず -// if (ledThread != null) { -// String errorMsg = barcode + "鎵樼洏璇嗗埆寮傚父锛岃鍏堣繘琛岀粍鎵橈紒"; -// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); -// ledThread.setLedMk(false); -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); -// } -// } -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } - -// /** -// * 鎷f枡銆佸苟鏉垮啀鍏ュ簱 -// */ -// @Transactional -// public synchronized void stnToCrnStnPick(){ -// try { -// for (DevpSlave devp : slaveProperties.getDevp()) { -// // 閬嶅巻鎷f枡鍏ュ簱鍙� -// for (DevpSlave.Sta pickSta : devp.getPickInSta()) { -// // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭� -// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); -// StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()); -// if (staProtocol == null) { -// continue; -// } else { -// staProtocol = staProtocol.clone(); -// } -// if (staProtocol.isAutoing() -// && staProtocol.isLoading() -// && staProtocol.isInEnable() -//// && (staProtocol.getWorkNo() > 0) -// && staProtocol.isPakMk()) { -// -// // 鑾峰彇鏉$爜鎵弿浠俊鎭� -// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); -// if (barcodeThread == null) { -// continue; -// } -// String barcode = barcodeThread.getBarcode(); -// if (Cools.isEmpty(barcode)) { -// continue; -// } -// if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { -// continue; -// } -// -// WrkMast wrkMast = wrkMastMapper.selectPickStepByBarcode(barcode); -// if (wrkMast == null) {//鎵句笉鍒板伐浣滄。 -// continue; -// } -// -// if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104) -// || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { -// continue; -// } -// -//// //*********************鍚屽簱浣嶇粍鏍¢獙********************* -//// boolean flag = false; -//// String th = ""; -//// List<String> innerLoc = Utils.getGroupInnerLoc(wrkMast.getSourceLocNo()); -//// for (String loc : innerLoc) { -//// LocMast locMast = locMastService.selectById(loc); -//// if (locMast == null) { -//// continue; -//// } -//// -//// if (!locMast.getLocSts().equals("F")) { -//// flag = true; -//// th = loc + "搴撲綅瀛樺湪鏈洖搴撲换鍔�"; -//// break; -//// } -//// } -//// if (flag) { -//// News.info(th); -//// continue; -//// } -//// //*********************鍚屽簱浣嶇粍鏍¢獙********************* -// -//// // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� -//// if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { -//// News.info(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�"); -//// continue; -//// } -// -// try { -// LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());//婧愬簱浣� -// SearchLocParam param = new SearchLocParam(); -// param.setWrkNo(wrkMast.getWrkNo()); -// param.setBarcode(wrkMast.getBarcode()); -// param.setIoType(wrkMast.getIoType()); -// param.setSourceStaNo(pickSta.getStaNo()); -// param.setLiftNo(pickSta.getLiftNo()); -// param.setLocType1(locMast.getLocType1()); -// String response = new HttpHandler.Builder() -// .setUri(wmsUrl) -// .setPath("/rpc/pakin/loc/v2") -// .setJson(JSON.toJSONString(param)) -// .build() -// .doPost(); -// JSONObject jsonObject = JSON.parseObject(response); -// Integer code = jsonObject.getInteger("code"); -// if (code.equals(200)) { -// StartupDto dto = jsonObject.getObject("data", StartupDto.class); -// -//// //鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯 -//// LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(pickSta.getLiftNo(), Utils.getLev(dto.getLocNo())); -//// if (liftStaProtocol == null) { -//// News.info(wrkMast.getWrkNo() + "鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯澶辫触"); -//// continue; -//// } -//// -//// // 鏇存柊宸ヤ綔妗f暟鎹姸鎬� -//// wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54 -//// wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋 -//// wrkMast.setSourceStaNo(dto.getSourceStaNo()); // 婧愮珯 -//// wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔� -//// wrkMast.setLocNo(dto.getLocNo()); // 鐩爣搴撲綅 -//// wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌� -//// wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌� -//// wrkMast.setModiTime(new Date()); -//// if (wrkMastMapper.updateById(wrkMast) == 0) { -//// News.info(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); -//// continue; -//// } -// } else if (code == 500) { -// News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response); -// } -// } catch (Exception e) { -// e.printStackTrace(); -// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); -// } -// } -// } -// -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } - -// /** -// * 鐩樼偣鍐嶅叆搴� -// */ -// @Transactional -// public synchronized void stnToCrnStnPlate(){ -// try { -// for (DevpSlave devp : slaveProperties.getDevp()) { -// // 閬嶅巻鎷f枡鍏ュ簱鍙� -// for (DevpSlave.Sta pickSta : devp.getPickInSta()) { -// // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭� -// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); -// StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()); -// if (staProtocol == null) { -// continue; -// } else { -// staProtocol = staProtocol.clone(); -// } -// if (staProtocol.isAutoing() -// && staProtocol.isLoading() -// && staProtocol.isInEnable() -//// && (staProtocol.getWorkNo() > 0) -// && staProtocol.isPakMk()) { -// -// // 鑾峰彇鏉$爜鎵弿浠俊鎭� -// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); -// if (barcodeThread == null) { -// continue; -// } -// String barcode = barcodeThread.getBarcode(); -// if (Cools.isEmpty(barcode)) { -// continue; -// } -// if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { -// continue; -// } -// WrkMast wrkMast = wrkMastMapper.selectByBarcode(barcode); -// if (wrkMast == null) {//鎵句笉鍒板伐浣滄。 -// continue; -// } -// -// if ((wrkMast.getIoType() != 107) -// || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { -// continue; -// } -// -//// // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� -//// if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { -//// News.info(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�"); -//// continue; -//// } -// -// //鐩樼偣鎵炬柊搴撲綅 -// try { -// LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());//婧愬簱浣� -// SearchLocParam param = new SearchLocParam(); -// param.setWrkNo(wrkMast.getWrkNo()); -// param.setBarcode(wrkMast.getBarcode()); -// param.setIoType(107);//鐩樼偣 -// param.setSourceStaNo(pickSta.getStaNo()); -// param.setLiftNo(pickSta.getLiftNo()); -// param.setLocType1(locMast.getLocType1()); -// String response = new HttpHandler.Builder() -// .setUri(wmsUrl) -// .setPath("/rpc/pakin/loc/v2") -// .setJson(JSON.toJSONString(param)) -// .build() -// .doPost(); -// JSONObject jsonObject = JSON.parseObject(response); -// Integer code = jsonObject.getInteger("code"); -// if (code.equals(200)) { -// StartupDto dto = jsonObject.getObject("data", StartupDto.class); -// -//// //鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯 -//// LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(pickSta.getLiftNo(), Utils.getLev(dto.getLocNo())); -//// if (liftStaProtocol == null) { -//// News.info(wrkMast.getWrkNo() + "鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯澶辫触"); -//// continue; -//// } -//// -//// // 鏇存柊宸ヤ綔妗f暟鎹姸鎬� -//// wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 107->57 -//// wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋 -//// wrkMast.setSourceStaNo(dto.getSourceStaNo()); // 婧愮珯 -//// wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔� -//// wrkMast.setLocNo(dto.getLocNo()); // 鐩爣搴撲綅 -//// wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌� -//// wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌� -//// wrkMast.setModiTime(new Date()); -//// if (wrkMastMapper.updateById(wrkMast) == 0) { -//// News.info(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); -//// continue; -//// } -// -//// staProtocol.setStaNo(dto.getSourceStaNo().shortValue());//鍐欏叆鐩爣绔� -//// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); -// -// } else if (code == 500) { -// News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response); -// } -// } catch (Exception e) { -// e.printStackTrace(); -// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); -// } -// -// } -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } /** * 鍒濆鍖栧疄鏃跺湴鍥� @@ -558,271 +113,294 @@ } } -// /** -// * 鍏ュ簱 ===>> 鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙� -// */ -// public synchronized void shuttleInExecute() { -// try { -// List<WrkMast> wrkMasts = wrkMastMapper.selectInStep4(); -// for (WrkMast wrkMast : wrkMasts) { -// //鑾峰彇婧愮珯 -// BasDevp sourceBasDevp = basDevpService.selectById(wrkMast.getSourceStaNo()); -// if (sourceBasDevp == null) { -// continue;//绔欑偣涓嶅瓨鍦� -// } -// -// //鑾峰彇鐩爣绔� -// LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(sourceBasDevp.getLiftNo(), Utils.getLev(wrkMast.getLocNo())); -// if (liftStaProtocol == null) { -// continue;//绔欑偣涓嶅瓨鍦� -// } -// -// // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢锛岃嚜鍔ㄣ�佺┖闂层�佹湁鐗� -// if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && liftStaProtocol.getHasTray())) { -// News.info("{}浠诲姟锛岃緭閫佺珯鐐圭姸鎬佷笉婊¤冻鍏ュ簱銆傝緭閫佺珯鐐�:{}", wrkMast.getWrkNo(), JSON.toJSONString(liftStaProtocol)); -// continue; -// } -// -// boolean step1 = this.shuttleInExecuteStep1(wrkMast, liftStaProtocol);//灏忚溅鎼叆搴撲腑 -// if (!step1) { -// continue; -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } + /** + * 鍏ュ簱 ===>> 鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙� + */ + public synchronized void shuttleInExecute() { + try { + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .in("wrk_sts" + , WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts + )); + for (WrkMast wrkMast : wrkMasts) { + boolean step1 = this.shuttleInExecuteStep1(wrkMast);//灏忚溅鎼叆搴撲腑 + if (!step1) { + continue; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } -// /** -// * 鍏ュ簱-灏忚溅鎼叆搴撲腑 -// * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false -// * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue -// */ -// public boolean shuttleInExecuteStep1(WrkMast wrkMast, LiftStaProtocol liftStaProtocol) { -// if (wrkMast.getWrkSts() == 4) { -// if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� -// boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐� -// News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); -// return false; -// } -// -// //鑾峰彇鍥涘悜绌挎杞︾嚎绋� -// ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); -// if (shuttleThread == null) { -// return false; -// } -// ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); -// if (shuttleProtocol == null) { -// return false; -// } -// if (!shuttleThread.isIdle()) { -// News.info("{}浠诲姟锛寋}灏忚溅蹇欑涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); -// return false; -// } -//// //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻 -//// if (shuttleProtocol.getToken() != 0) { -//// News.info("{}浠诲姟锛寋}灏忚溅锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂浠诲姟", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); -//// return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟 -//// } -// -// //鍒ゆ柇灏忚溅鏄惁瀛樺湪绉诲姩浠诲姟 -// WrkMast hasMoveWorking = wrkMastMapper.selectShuttleHasMoveWorking(wrkMast.getShuttleNo()); -// if (hasMoveWorking != null) { -// News.info("{}浠诲姟锛寋}灏忚溅锛屽瓨鍦ㄧЩ鍔ㄤ换鍔★紝绂佹娲惧彂浠诲姟", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); -// return false;//瀛樺湪绉诲姩浠诲姟锛岀姝㈡墽琛屽叆搴撲换鍔� -// } -// -// //鍒ゆ柇灏忚溅鏄惁鍒拌揪杈撻�佺珯鐐瑰簱浣� -// if (!shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) { -// //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃� -// shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐� -// News.info("{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); -// return false; -// } -// -// //灏忚溅宸叉姷杈捐緭閫佺珯鐐逛綅缃紝杩涜鎼繍璐х墿 -// ShuttleOperaResult result = ShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo()); -// if (result == null) {//璺緞璁$畻澶辫触 -// News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐ワ紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); -// return false; -// } -// -// //鍒涘缓鍒嗛厤鍛戒护 -// ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); -// assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 -// assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� -// assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id);//鍏ュ簱妯″紡 -// assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) -// assignCommand.setCommands(result.getCommands());//杩愯鍛戒护 -// assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣 -// -// wrkMast.setWrkSts(5L);//4.鎻愬崌鏈烘惉杩愬畬鎴� => 5.灏忚溅鎼繍涓� -// wrkMast.setModiTime(new Date()); -//// shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰灏忚溅浠ょ墝 -// if (wrkMastMapper.updateById(wrkMast) > 0) { -// //涓嬪彂浠诲姟 -// MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); -// } -// -// return false; -// } -// return true; -// } + /** + * 鍏ュ簱-灏忚溅鎼叆搴撲腑 + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + public boolean shuttleInExecuteStep1(WrkMast wrkMast) { + if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts) { + //鑾峰彇鐩爣绔� + ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); + if (liftSta == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo()); + return false; + } -// /** -// * 鍑哄簱 ===>> 鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙� -// */ -// public synchronized void shuttleOutExecute() { -// try { -// for (WrkMast wrkMast : wrkMastMapper.selectBy2125()) { -// boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//灏忚溅鎼嚭搴撲腑 -// if (!step1) { -// continue; -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// -// /** -// * 鍑哄簱-灏忚溅鎼嚭搴撲腑 -// * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false -// * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue -// */ -// public boolean shuttleOutExecuteStep1(WrkMast wrkMast) { -// //21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓� -// if (wrkMast.getWrkSts() == 21) { -// EntityWrapper<StaDesc> wrapper = new EntityWrapper<>(); -// wrapper.eq("type_no", wrkMast.getIoType());//璺緞绫诲瀷 -// wrapper.eq("stn_no", wrkMast.getStaNo());//鍑哄簱绔欑偣缂栧彿 -// StaDesc staDesc = staDescService.selectOne(wrapper); -// if (staDesc == null) { -// News.info("{}浠诲姟锛屽嚭搴撹矾寰勪笉瀛樺湪", wrkMast.getWrkNo()); -// return false;//鍑哄簱璺緞涓嶅瓨鍦� -// } -// -// //鑾峰彇鍑哄簱绔欑偣 -// BasDevp basDevp = basDevpService.selectById(wrkMast.getStaNo()); -// if (basDevp == null) { -// return false;//鍑哄簱绔欑偣涓嶅瓨鍦� -// } -// -//// if (!basDevp.getAutoing().equals("Y")) { -//// News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鏄嚜鍔ㄧ姸鎬�",wrkMast.getWrkNo(),basDevp.getDevNo()); -//// return false;//涓嶆槸鑷姩鐘舵�� -//// } -//// -//// if (!basDevp.getOutEnable().equals("Y")) { -//// News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夊彲鍑轰俊鍙�", wrkMast.getWrkNo(), basDevp.getDevNo()); -//// return false;//鍑哄簱绔欑偣涓嶅彲鍑� -//// } -// -// Integer liftNo = basDevp.getLiftNo();//鎼滅储鍑哄簱鎻愬崌鏈烘槸鍚﹀瓨鍦ㄥ叆搴撲换鍔★紝濡傚瓨鍦ㄧ姝㈠嚭搴� -// List<WrkMast> liftWrkMasts = wrkMastMapper.selectInWrkMastByLiftNo(liftNo); -// if (!liftWrkMasts.isEmpty()) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽瓨鍦ㄥ叆搴撲换鍔★紝绯荤粺绂佹鍑哄簱", wrkMast.getWrkNo(), liftNo); -// return false;//瀛樺湪鍏ュ簱浠诲姟锛岀姝㈠嚭搴� -// } -// -// //鍚屽簱浣嶇粍鏍¢獙 -// List<String> outerLoc = Utils.getGroupOuterLoc(wrkMast.getSourceLocNo()); -// List<LocMast> outerLocMasts = locMastService.selectNotEmptyLocNos(outerLoc); -// if (!outerLocMasts.isEmpty()) { -// News.info("{}浠诲姟锛屾祬搴撲綅瀛樺湪璐х墿锛岀郴缁熺瓑寰呬腑", wrkMast.getWrkNo()); -// return false;//娴呭簱浣嶅瓨鍦ㄦ湭鎵ц浠诲姟 -// } -// -// //鑾峰彇婧愮珯 -// LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(basDevp.getLiftNo(), Utils.getLev(wrkMast.getSourceLocNo())); -// if (liftStaProtocol == null) { -// return false;//鎵句笉鍒扮珯鐐� -// } -// -// if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && !liftStaProtocol.getHasTray())) { -// News.info("{}浠诲姟锛寋}鍐呴儴杈撻�佺珯锛屼笉婊¤冻鑷姩銆佺┖闂层�佹棤鎵樼洏鐘舵��", wrkMast.getWrkNo(), liftStaProtocol.getStaNo()); -// return false;//绔欑偣蹇呴』鑷姩銆佺┖闂层�佹病鏈夋墭鐩� -// } -// -// if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� -// //寮哄埗棰勭暀涓�鍙板皬杞︾粰鍏ュ簱浠诲姟 -// int lev = Utils.getLev(wrkMast.getSourceLocNo()); -// //鑾峰彇褰撳墠妤煎眰鏈夊嚑鍙板彲鐢ㄥ皬杞� -// int shuttleCount = shuttleDispatchUtils.getShuttleCountByLev(lev); -// if (shuttleCount >= 2) {//鍙湁鍙敤灏忚溅鏁伴噺澶т簬2锛屾墠杩涜鍏ュ簱浠诲姟棰勭暀灏忚溅 -// int shuttleWrkInObligateCount = 1;//棰勭暀灏忚溅鏁伴噺 -// Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "shuttleWrkInObligateCount").eq("status", 1)); -// if (config != null) { -// shuttleWrkInObligateCount = Integer.parseInt(config.getValue()); -// } -// //鍙敤鍑哄簱灏忚溅鏁伴噺(缁欏叆搴撲换鍔¢鐣欎竴鍙拌溅) -// int useShuttleCount = shuttleCount - shuttleWrkInObligateCount; -// //鏌ヨ妤煎眰宸插垎閰嶈溅杈嗙殑鍑哄簱浠诲姟鏁伴噺 -// List<WrkMast> wrkMasts = wrkMastService.selectShuttleOutWrkByLev(lev); -// if (wrkMasts.size() >= useShuttleCount) { -// News.info("{}浠诲姟锛屽綋鍓嶆ゼ灞傚彲鐢ㄥ皬杞}鍙帮紝鍑哄簱浠诲姟宸插垎閰峽}鍙帮紝绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), useShuttleCount, wrkMasts.size()); -// return false; -// } -// } -// boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐� -// News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); -// return false; -// } -// -// //鑾峰彇鍥涘悜绌挎杞︾嚎绋� -// NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); -// if (shuttleThread == null) { -// return false; -// } -// NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); -// if (shuttleProtocol == null) { -// return false; -// } -// if (!shuttleProtocol.isIdle()) { -// News.info("{}浠诲姟锛寋}灏忚溅锛屽繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); -// return false; -// } -// //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻 -// if (shuttleProtocol.getToken() != 0) { -// News.info("{}浠诲姟锛寋}灏忚溅锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂浠诲姟", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); -// return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟 -// } -// -// //鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅 -// if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { -// //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃� -// shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐� -// News.info("{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); -// return false; -// } -// -// //灏忚溅宸叉姷杈捐揣鐗╀綅缃紝杩涜鎼繍璐х墿 -// ShuttleOperaResult result = ShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), liftStaProtocol.getLocNo());//灏嗚揣鐗╂惉杩愯嚦鎻愬崌鏈鸿緭閫佺珯鐐� -// if (result == null) {//鍑哄簱璺緞璁$畻澶辫触 -// News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐ワ紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); -// return false; -// } -// -// //鍒涘缓鍒嗛厤鍛戒护 -// ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); -// assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 -// assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� -// assignCommand.setTaskMode(ShuttleTaskModeType.PAK_OUT.id.shortValue());//鍑哄簱妯″紡 -// assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) -// assignCommand.setCommands(result.getCommands());//杩愯鍛戒护 -// assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣 -// -// wrkMast.setWrkSts(22L);//21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓� -// wrkMast.setModiTime(new Date()); -// shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰灏忚溅浠ょ墝 -// if (wrkMastMapper.updateById(wrkMast) > 0) { -// //涓嬪彂浠诲姟 -// MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); -// } -// return false; -// } -// return true; -// } + if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� + boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftSta.getLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐� + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); + return false; + } + + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + return false; + } + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + return false; + } + if (!shuttleThread.isIdle()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅蹇欑涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + //鍒ゆ柇灏忚溅鏄惁瀛樺湪绉诲姩浠诲姟 + WrkMast hasMoveWorking = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo()); + if (hasMoveWorking != null) { + News.taskInfo(wrkMast.getWrkNo(), "{}鍙峰皬杞︼紝瀛樺湪绉诲姩浠诲姟锛岀姝㈡淳鍙戜换鍔�", wrkMast.getShuttleNo()); + return false;//瀛樺湪绉诲姩浠诲姟锛岀姝㈡墽琛屽叆搴撲换鍔� + } + + //鍒ゆ柇灏忚溅鏄惁鍒拌揪杈撻�佺珯鐐瑰簱浣� + if (!shuttleProtocol.getCurrentLocNo().equals(liftSta.getLocNo())) { + //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃� + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftSta.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐� + News.info("{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� + assignCommand.setAuto(true);//鑷姩妯″紡 + + //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠� + List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(liftSta.getLocNo(), wrkMast.getLocNo(), NavigationMapType.DFX.id, assignCommand, shuttleThread); + if (commands == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true); + if (liftCommand == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇椤跺崌鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + List<ShuttleCommand> liftCommand2 = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, false); + if (liftCommand2 == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇涓嬮檷鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + commands.add(0, liftCommand.get(0)); + commands.add(liftCommand2.get(0)); + assignCommand.setCommands(commands); + + wrkMast.setWrkSts(WrkStsType.INBOUND_SHUTTLE_RUN.sts);//灏忚溅鎼繍涓� 4.鎻愬崌鏈烘惉杩愬畬鎴� ==> 5.灏忚溅鎼繍涓� + wrkMast.setModiTime(new Date()); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + if (wrkMastService.updateById(wrkMast)) { + //涓嬪彂浠诲姟 + shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); + //瑙﹀彂閫氱煡 + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_TRANSPORT); + return false; + } + return false; + } + return true; + } + + /** + * 鍑哄簱 ===>> 鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙� + */ + public synchronized void shuttleOutExecute() { + try { + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .in("wrk_sts" + , WrkStsType.NEW_OUTBOUND.sts + )); + for (WrkMast wrkMast : wrkMasts) { + boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//灏忚溅鎼嚭搴撲腑 + if (!step1) { + continue; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 鍑哄簱-灏忚溅鎼嚭搴撲腑 + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + public boolean shuttleOutExecuteStep1(WrkMast wrkMast) { + //101.鐢熸垚鍑哄簱浠诲姟 => 102.灏忚溅鎼繍涓� + if (wrkMast.getWrkSts() == WrkStsType.NEW_OUTBOUND.sts) { + Integer liftNo = wrkMast.getLiftNo(); + if (liftNo == null) { + //閫氳繃杈撻�佺嚎绔欏彿鑾峰彇鎻愬崌鏈哄彿 + liftNo = ForkLiftUtils.getConveyorBindLiftNo(wrkMast.getStaNo()); + if (liftNo == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo()); + return false; + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 + WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftNo); + if (liftWrkMast != null) { + if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + } + + wrkMast.setLiftNo(liftNo); + wrkMast.setModiTime(new Date()); + wrkMastService.updateById(wrkMast); + return false; + } + + ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); + if (forkLiftThread == null) { + return false; + } + ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); + if (forkLiftProtocol == null) { + return false; + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庡嚭搴撴ā寮� + if (!forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾彁鍗囨満涓嶅浜庡嚭搴撴ā寮忥紝绂佹鍑哄簱", wrkMast.getWrkNo()); + return false; + } + + //鑾峰彇婧愮珯 + ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByLev(liftNo, Utils.getLev(wrkMast.getSourceLocNo())); + if (liftSta == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo()); + return false; + } + + if (liftSta.getHasCar()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣瀛樺湪灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftSta.getStaNo()); + return false; + } + + if (liftSta.getHasTray()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getStaNo()); + return false; + } + + if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� + //寮哄埗棰勭暀涓�鍙板皬杞︾粰鍏ュ簱浠诲姟 + int lev = Utils.getLev(wrkMast.getSourceLocNo()); + //鑾峰彇褰撳墠妤煎眰鏈夊嚑鍙板彲鐢ㄥ皬杞� + int shuttleCount = shuttleDispatchUtils.getShuttleCountByLev(lev); + if (shuttleCount >= 2) {//鍙湁鍙敤灏忚溅鏁伴噺澶т簬2锛屾墠杩涜鍏ュ簱浠诲姟棰勭暀灏忚溅 + int shuttleWrkInObligateCount = 1;//棰勭暀灏忚溅鏁伴噺 + Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "shuttleWrkInObligateCount").eq("status", 1)); + if (config != null) { + shuttleWrkInObligateCount = Integer.parseInt(config.getValue()); + } + //鍙敤鍑哄簱灏忚溅鏁伴噺(缁欏叆搴撲换鍔¢鐣欎竴鍙拌溅) + int useShuttleCount = shuttleCount - shuttleWrkInObligateCount; + //鏌ヨ妤煎眰宸插垎閰嶈溅杈嗙殑鍑哄簱浠诲姟鏁伴噺 + List<WrkMast> wrkMasts = wrkMastService.selectShuttleOutWrkByLev(lev); + if (wrkMasts.size() >= useShuttleCount) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽綋鍓嶆ゼ灞傚彲鐢ㄥ皬杞}鍙帮紝鍑哄簱浠诲姟宸插垎閰峽}鍙帮紝绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), useShuttleCount, wrkMasts.size()); + return false; + } + } + boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐� + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); + return false; + } + + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + return false; + } + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + return false; + } + if (!shuttleThread.isIdle()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + //鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅 + if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { + //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃� + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐� + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� + assignCommand.setAuto(true);//鑷姩妯″紡 + + //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠� + List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(wrkMast.getSourceLocNo(), liftSta.getLocNo(), NavigationMapType.DFX.id, assignCommand, shuttleThread); + if (commands == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true); + if (liftCommand == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇椤跺崌鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + List<ShuttleCommand> liftCommand2 = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, false); + if (liftCommand2 == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇涓嬮檷鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + commands.add(0, liftCommand.get(0)); + commands.add(liftCommand2.get(0)); + assignCommand.setCommands(commands); + + wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN.sts);//灏忚溅鎼繍涓� 101.鐢熸垚鍑哄簱浠诲姟 ==> 102.灏忚溅鎼繍涓� + wrkMast.setSourceStaNo(liftSta.getStaNo()); + wrkMast.setModiTime(new Date()); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + if (wrkMastService.updateById(wrkMast)) { + //涓嬪彂浠诲姟 + shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); + //瑙﹀彂閫氱煡 + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_TRANSPORT); + return false; + } + return false; + } + return true; + } /** * 鍥涘悜绌挎杞︿换鍔″畬鎴� @@ -844,7 +422,15 @@ //灏嗕换鍔℃。鏍囪涓哄畬鎴� WrkMast wrkMast = wrkMastService.selectByWorkNo(shuttleProtocol.getTaskNo()); if (wrkMast != null) { - if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE.sts) { + if (wrkMast.getWrkSts() == WrkStsType.INBOUND_SHUTTLE_RUN.sts) { + //5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚 + wrkMast.setWrkSts(WrkStsType.COMPLETE_INBOUND.sts); + shuttleThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_SHUTTLE_RUN.sts) { + //102.灏忚溅鎼繍涓� ==> 103.灏忚溅鎼繍瀹屾垚 + wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts); + shuttleThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE.sts) { //302.灏忚溅绉诲姩鑷崇珯鐐� ==> 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts); shuttleThread.setSyncTaskNo(0); @@ -870,32 +456,6 @@ } else { continue; } -// switch (wrkMast.getWrkSts().intValue()) { -//// case 5://5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚 -//// wrkMast.setWrkSts(9L); -//// shuttleProtocol.setTaskNo(0); -//// if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { -//// //閲婃斁灏忚溅浠ょ墝 -//// shuttleProtocol.setToken(0); -//// } -//// break; -//// case 22://22.灏忚溅鎼繍涓� ==> 23.灏忚溅鎼繍瀹屾垚 -//// wrkMast.setWrkSts(23L); -//// shuttleProtocol.setTaskNo(0); -//// if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { -//// //閲婃斁灏忚溅浠ょ墝 -//// shuttleProtocol.setToken(0); -//// } -//// break; -// case 302: -// wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts); -// break; -// case WrkStsType.MOVE_SHUTTLE.sts: -// wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts); -// shuttleThread.setSyncTaskNo(0); -// break; -// default: -// } if (wrkMastService.updateById(wrkMast)) { //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵�� @@ -1021,329 +581,300 @@ return true; } -// /** -// * 鎻愬崌鏈轰换鍔� -// */ -// public synchronized void liftIoExecute() { -// try { -// for (LiftSlave liftSlave : slaveProperties.getLift()) { -// LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId()); -// if (liftThread == null) { -// continue; -// } -// LiftProtocol liftProtocol = liftThread.getLiftProtocol(); -// if (liftProtocol == null) { -// continue; -// } -// -// if (!liftProtocol.isIdle()) { -// News.info("{}鍙锋彁鍗囨満锛屽繖纰屼腑", liftSlave.getId()); -// continue; -// } -// -// //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚﹁鍗犵敤 -// if (liftProtocol.getToken() != 0) { -// News.info("{}鍙锋彁鍗囨満锛屼护鐗屽凡琚嫭鍗�", liftSlave.getId()); -// continue; -// } -// -// //鎼滅储鏄惁鏈夊緟澶勭悊鐨勪换鍔� -// List<WrkMast> wrkMasts = wrkMastMapper.selectLiftStep223103(); -// if (wrkMasts.isEmpty()) { -// continue; -// } -// -// for (WrkMast wrkMast : wrkMasts) { -// //鎼滅储鏄惁鏈夊叾浠栦换鍔″崰鐢ㄤ簡鎻愬崌鏈猴紝濡傛灉鍗犵敤鎻愬崌鏈虹殑浠诲姟鍜屽綋鍓嶄换鍔$浉鍚岋紝鍒欒繍琛屾墽琛� -// WrkMast wrkMast1 = wrkMastMapper.selectLiftWrkMast(liftProtocol.getLiftNo().intValue()); -// if (wrkMast1 != null && wrkMast1.getWrkNo().intValue() != wrkMast.getWrkNo().intValue()) { -// News.info("{}鍙锋彁鍗囨満锛岃鍏朵粬浠诲姟{}鍗犵敤涓斿拰褰撳墠浠诲姟{}涓嶇浉鍚岋紝绂佹娲惧彂", liftSlave.getId(), wrkMast1.getWrkNo(), wrkMast.getWrkNo()); -// continue; -// } -// -// boolean stepIn = this.liftIoExecuteStepIn(wrkMast);//鎻愬崌鏈哄叆搴� -// if (!stepIn) { -// continue; -// } -// -// boolean stepOut = this.liftIoExecuteStepOut(wrkMast);//鎻愬崌鏈哄嚭搴� -// if (!stepOut) { -// continue; -// } -// } -// -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// -// /** -// * 鎻愬崌鏈哄叆搴� -// * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false -// * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue -// */ -// private boolean liftIoExecuteStepIn(WrkMast wrkMast) { -// //--------------------------------------鎻愬崌鏈哄叆搴�-----------------------------------------// -// Date now = new Date(); -// -// //2.璁惧涓婅蛋 ==> 3.鎻愬崌鏈烘惉杩愪腑 -// if (wrkMast.getWrkSts() == 2) { -// //鑾峰彇婧愮珯 -// BasDevp sourceBasDevp = basDevpService.selectById(wrkMast.getSourceStaNo()); -// if (sourceBasDevp == null) { -// return false;//鎵句笉鍒扮珯鐐� -// } -// -// if (!sourceBasDevp.getInEnable().equals("Y")) { -// News.info("{}浠诲姟锛寋}婧愮珯锛屾病鏈夊彲鍏ヤ俊鍙�", wrkMast.getWrkNo(), sourceBasDevp.getDevNo()); -// return false;//绔欑偣涓嶅彲鍏� -// } -// -// Integer barcodeId = Utils.getBarcodeIdByStaNo(wrkMast.getSourceStaNo()); -// if (barcodeId == null) { -// News.info("{}浠诲姟锛寋}婧愮珯锛屾壘涓嶅埌鍙敤鏉$爜鍣↖D", wrkMast.getWrkNo(), sourceBasDevp.getDevNo()); -// return false;//绔欑偣涓嶅彲鍏� -// } -// -// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId); -// if (barcodeThread == null) { -// News.info("{}浠诲姟锛寋}婧愮珯锛屾潯鐮佸櫒{}绾跨▼涓虹┖", wrkMast.getWrkNo(), sourceBasDevp.getDevNo(), barcodeId); -// return false;//绔欑偣涓嶅彲鍏� -// } -// String barcode = barcodeThread.getBarcode(); -// if(!Cools.isEmpty(barcode)) { -// if(!("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode))) { -// //瀛樺湪鏉$爜鍊硷紝鍒ゆ柇鏄惁鍜屽綋鍓嶅伐浣滄。涓�鑷� -// if (!barcode.equals(wrkMast.getBarcode())) { -// News.info("{}浠诲姟,{}绔欑偣锛屾潯鐮佸櫒{}鍊納}涓庡伐浣滄。鏉$爜鍊納}涓嶄竴鑷达紝绯荤粺璺宠繃鎵ц", wrkMast.getWrkNo(), sourceBasDevp.getDevNo(), barcodeId, barcode,wrkMast.getBarcode()); -// return false;//绔欑偣涓嶅彲鍏� -// } -// } -// }else { -// return false; -// } -// -// //鍒ゆ柇鎻愬崌鏈烘暣涓笁妤兼槸鍚﹂兘澶勪簬鍏ュ簱妯″紡 -// Integer outInModel1 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 1); -// Integer outInModel2 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 5); -// Integer outInModel3 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 8); -// if (outInModel1 == null || outInModel2 == null || outInModel3 == null) { -// News.info("{}浠诲姟锛屾病鏈夊嚭鍏ュ簱妯″紡", wrkMast.getWrkNo()); -// return false;//涓嶅瓨鍦ㄥ嚭鍏ュ簱妯″紡 -// } -// -// if (outInModel1 == 2 || outInModel2 == 2 && outInModel3 == 2) { -// News.info("{}浠诲姟锛屾湁绔欑偣澶勪簬鍑哄簱妯″紡锛岀姝㈠叆搴�", wrkMast.getWrkNo()); -// return false;//鍙鏈変竴涓浜庡嚭搴撴ā寮忥紝绂佹鍏ュ簱 -// } -// -// LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, sourceBasDevp.getLiftNo()); -// if (liftThread == null) { -// return false; -// } -// LiftProtocol liftProtocol = liftThread.getLiftProtocol(); -// if (liftProtocol == null) { -// return false; -// } -// if (!liftProtocol.isIdle()) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false; -// } -// //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰� -// if (liftProtocol.getToken() != 0) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔� -// } -// -// //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞� -// if (liftProtocol.getHasCar()) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呴儴鏈夊皬杞︼紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false;//鏈夊皬杞︼紝绂佹娲惧彂 -// } -// -// //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩� -// if (liftProtocol.getHasTray()) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呴儴鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false;//鏈夋墭鐩橈紝绂佹娲惧彂 -// } -// -// //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 -// WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId()); -// if (liftWrkMast != null) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽綋鍓嶆彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� -// } -// -// //鑾峰彇婧愮珯瀵瑰簲鐨勭墰鐪兼彁鍗囨満绔欑偣缂栧彿(璧风偣缂栧彿) -// Integer startSta = Integer.parseInt(sourceBasDevp.getQrCodeValue()); -// //鑾峰彇鎻愬崌鏈虹珯鐐� -// LiftStaProtocol targetStaProtocol = NyLiftUtils.getLiftStaByLev(liftThread.getSlave().getId(), Utils.getLev(wrkMast.getLocNo())); -// if (targetStaProtocol == null) { -// return false;//绔欑偣涓嶅瓨鍦� -// } -// -// if (targetStaProtocol.getHasTray()) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛寋}绔欑偣锛屾彁鍗囨満绔欑偣鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo(), targetStaProtocol.getStaNo()); -// return false;//鎻愬崌鏈虹珯鐐规湁鎵樼洏锛岀姝㈡淳鍙� -// } -// -// Integer targetSta = targetStaProtocol.getStaNo(); -// -// //鑾峰彇鎻愬崌鏈哄懡浠� -// NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, startSta, targetSta, wrkMast.getWrkNo()); -// if (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57) { -// //鎷f枡鍐嶅洖搴擄紝閲嶆柊鍒嗛厤璁惧宸ヤ綔鍙� -// int deviceWrk = commonService.getWorkNo(8);//鐢熸垚鎻愬崌鏈鸿澶囧伐浣滃彿 -// BasLiftOpt basLiftOpt = basLiftOptService.selectByDeviceWrk(String.valueOf(deviceWrk), liftThread.getSlave().getId()); -// if (basLiftOpt != null) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛岃澶囧伐浣滃彿鍑虹幇閲嶅鎯呭喌锛岃鑱旂郴鎶�鏈汉鍛樻敮鎸併��", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false; -// } -// liftCommand.setTaskNo((short) deviceWrk); -// } -// ArrayList<NyLiftCommand> commands = new ArrayList<>(); -// commands.add(liftCommand); -// -// //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 -// LiftAssignCommand assignCommand = new LiftAssignCommand(); -// assignCommand.setCommands(commands); -// assignCommand.setLiftNo(liftProtocol.getLiftNo()); -// assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); -// assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_TRAY.id.shortValue()); -// -// wrkMast.setWrkSts(3L);//2.璁惧涓婅蛋 ==> 3.鎻愬崌鏈烘惉杩愪腑 -// wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙� -// wrkMast.setModiTime(now); -// liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗� -// if (wrkMastMapper.updateById(wrkMast) > 0) { -// //涓嬪彂浠诲姟 -// MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); -// } -// -// return false; -// } -// return true; -// } -// -// /** -// * 鎻愬崌鏈哄嚭搴� -// * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false -// * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue -// */ -// private boolean liftIoExecuteStepOut(WrkMast wrkMast) { -// //--------------------------------------鎻愬崌鏈哄嚭搴�-----------------------------------------// -// Date now = new Date(); -// -// //23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑 -// if (wrkMast.getWrkSts() == 23) { -// NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); -// if (shuttleThread == null) { -// return false; -// } -// -// //鑾峰彇鍑哄簱绔欑偣(鐩爣绔�) -// BasDevp basDevp = basDevpService.selectById(wrkMast.getStaNo()); -// if (basDevp == null) { -// News.info("{}浠诲姟锛屽嚭搴撶珯鐐逛笉瀛樺湪锛岀姝㈡淳鍙�", wrkMast.getWrkNo()); -// return false;//鍑哄簱绔欑偣涓嶅瓨鍦� -// } -// -// //鑾峰彇婧愮珯瀵瑰簲鐨勭墰鐪兼彁鍗囨満绔欑偣缂栧彿(璧风偣缂栧彿) -// LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(basDevp.getLiftNo(), Utils.getLev(wrkMast.getSourceLocNo())); -// if (liftStaProtocol == null) { -// News.info("{}浠诲姟锛屾壘涓嶅埌绔欑偣锛岀姝㈡淳鍙�", wrkMast.getWrkNo()); -// return false;//鎵句笉鍒扮珯鐐� -// } -// Integer startSta = liftStaProtocol.getStaNo(); -// -// NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); -// if (shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) { -// //灏忚溅杩樺湪杈撻�佺珯鐐� -// //璋冨害灏忚溅閬胯 -// boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getShuttleNo(), shuttleThread); -// if (!result) { -// News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀湪杈撻�佺珯鐐硅皟搴﹀皬杞﹂伩璁╁け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); -// return false; -// } -// } -// -// if (!basDevp.getAutoing().equals("Y")) { -// News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夎嚜鍔ㄤ俊鍙凤紝绂佹娲惧彂", wrkMast.getWrkNo(), basDevp.getDevNo()); -// return false;//鍑哄簱绔欑偣涓嶅彲鍑� -// } -// -// if (basDevp.getLoading().equals("Y")) { -// News.info("{}浠诲姟锛寋}绔欑偣锛屽瓨鍦ㄦ湁鐗╀俊鍙凤紝绂佹娲惧彂", wrkMast.getWrkNo(), basDevp.getDevNo()); -// return false;//鍑哄簱绔欑偣涓嶅彲鍑� -// } -// -// if (!basDevp.getOutEnable().equals("Y")) { -// News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夊彲鍑轰俊鍙凤紝绂佹娲惧彂", wrkMast.getWrkNo(), basDevp.getDevNo()); -// return false;//鍑哄簱绔欑偣涓嶅彲鍑� -// } -// -// LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, basDevp.getLiftNo()); -// if (liftThread == null) { -// return false; -// } -// LiftProtocol liftProtocol = liftThread.getLiftProtocol(); -// if (liftProtocol == null) { -// return false; -// } -// -// if (!liftProtocol.isIdle()) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false; -// } -// //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰� -// if (liftProtocol.getToken() != 0) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔� -// } -// //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 -// WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId()); -// if (liftWrkMast != null) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽綋鍓嶆彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� -// } -// -// //鑾风洰鏍囩珯婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐� -// BasDevp targetBasDevp = basDevpService.selectById(wrkMast.getStaNo()); -// if (targetBasDevp == null) { -// News.info("{}浠诲姟锛寋}绔欑偣锛岀珯鐐逛笉瀛樺湪锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), wrkMast.getStaNo()); -// return false;//绔欑偣涓嶅瓨鍦� -// } -// //鑾峰彇鐗涚溂鎻愬崌鏈虹珯鐐圭紪鍙�(鐩爣缂栧彿) -// Integer targetSta = Integer.parseInt(targetBasDevp.getQrCodeValue()); -// -// //鑾峰彇鎻愬崌鏈哄懡浠� -// NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftThread.getSlave().getId(), NyLiftTaskModelType.MOVE_TRAY.id, startSta, targetSta, wrkMast.getWrkNo()); -// -// ArrayList<NyLiftCommand> commands = new ArrayList<>(); -// commands.add(liftCommand); -// -// //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 -// LiftAssignCommand assignCommand = new LiftAssignCommand(); -// assignCommand.setCommands(commands); -// assignCommand.setLiftNo(liftProtocol.getLiftNo()); -// assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); -// assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_TRAY.id.shortValue()); -// -// wrkMast.setWrkSts(24L);//23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑 -// wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙� -// wrkMast.setModiTime(now); -// liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗� -// if (wrkMastMapper.updateById(wrkMast) > 0) { -// //涓嬪彂浠诲姟 -// MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); -// } -// -// return false; -// } -// return true; -// } -// + /** + * 璐у弶鎻愬崌鏈轰换鍔� + */ + public synchronized void forkLiftIoExecute() { + try { + //鎼滅储鏄惁鏈夊緟澶勭悊鐨勪换鍔� + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .in("wrk_sts", WrkStsType.NEW_INBOUND.sts, WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts)); + if (wrkMasts.isEmpty()) { + return; + } + + for (WrkMast wrkMast : wrkMasts) { + Integer liftNo = wrkMast.getLiftNo(); + if (liftNo == null) { + //鏈垎閰嶆彁鍗囨満 + Integer staNo = wrkMast.getIoType() == WrkIoType.IN.id ? wrkMast.getSourceStaNo() : wrkMast.getStaNo(); + liftNo = ForkLiftUtils.getConveyorBindLiftNo(staNo); + if(liftNo == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo()); + continue; + } + + ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); + if (forkLiftThread == null) { + continue; + } + ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); + if (forkLiftProtocol == null) { + continue; + } + + if (!forkLiftThread.isIdle()) { + News.info("{}鍙锋彁鍗囨満锛屽繖纰屼腑", liftNo); + continue; + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 + WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); + if (liftWrkMast != null) { + if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + continue;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + } + + wrkMast.setLiftNo(liftNo); + wrkMast.setModiTime(new Date()); + wrkMastService.updateById(wrkMast); + continue; + } + + ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); + if (forkLiftThread == null) { + continue; + } + ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); + if (forkLiftProtocol == null) { + continue; + } + + if (!forkLiftThread.isIdle()) { + News.info("{}鍙锋彁鍗囨満锛屽繖纰屼腑", liftNo); + continue; + } + + boolean stepIn = this.liftIoExecuteStepIn(wrkMast);//鎻愬崌鏈哄叆搴� + if (!stepIn) { + continue; + } + + boolean stepOut = this.liftIoExecuteStepOut(wrkMast);//鎻愬崌鏈哄嚭搴� + if (!stepOut) { + continue; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 鎻愬崌鏈哄叆搴� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean liftIoExecuteStepIn(WrkMast wrkMast) { + //--------------------------------------鎻愬崌鏈哄叆搴�-----------------------------------------// + Date now = new Date(); + + //1.鐢熸垚鍏ュ簱浠诲姟 ==> 3.鎻愬崌鏈烘惉杩愪腑 + if (wrkMast.getWrkSts() == WrkStsType.NEW_INBOUND.sts) { + //鑾峰彇鐩爣杈撻�佺珯 + ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); + if (liftSta == null) { + return false;//鎵句笉鍒扮珯鐐� + } + + if (liftSta.getHasTray()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪鎵樼洏", wrkMast.getWrkNo()); + return false; + } + + if (liftSta.getHasCar()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪灏忚溅", wrkMast.getWrkNo()); + return false; + } + + ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftSta.getLiftNo()); + if (forkLiftThread == null) { + return false; + } + ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); + if (forkLiftProtocol == null) { + return false; + } + if (!forkLiftThread.isIdle()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftSta.getLiftNo()); + return false; + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庡叆搴撴ā寮� + if (!forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.IN)) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾彁鍗囨満涓嶅浜庡叆搴撴ā寮忥紝绂佹鍏ュ簱", wrkMast.getWrkNo()); + return false; + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 + WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); + if (liftWrkMast != null) { + if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + } + + //妫�娴嬫ゼ灞傛槸鍚︽湁绌挎杞� + boolean checkLevHasShuttle = Utils.checkLevHasShuttle(liftSta.getLev()); + if (!checkLevHasShuttle) { + if (wrkMast.getShuttleNo() != null) { + return false; + } + + //鑾峰彇灏忚溅寰呮満浣� + String standbyLocNo = Utils.getShuttleStandbyLocNo(liftSta.getLocNo()); + if (standbyLocNo == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃幏鍙栧皬杞﹀緟鏈轰綅澶辫触", wrkMast.getWrkNo()); + return false; + } + + //璋冨害灏忚溅鍘诲緟鏈轰綅 + boolean dispatchShuttle = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), standbyLocNo); + if (!dispatchShuttle) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞﹀け璐�", wrkMast.getWrkNo()); + return false; + } + return false; + } + + //鑾峰彇鎻愬崌鏈哄懡浠� + List<ForkLiftCommand> liftCommands = forkLiftThread.getPickAndPutCommand(wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), liftSta.getLev()); + ArrayList<ForkLiftCommand> commands = new ArrayList<>(); + commands.addAll(liftCommands); + + //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 + LiftAssignCommand assignCommand = new LiftAssignCommand(); + assignCommand.setCommands(commands); + assignCommand.setLiftNo(wrkMast.getLiftNo().shortValue()); + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); + assignCommand.setTaskMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue()); + + wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 1.鐢熸垚鍏ュ簱浠诲姟 ==> 3.鎻愬崌鏈烘惉杩愪腑 + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(now); + if (wrkMastService.updateById(wrkMast)) { + //涓嬪彂浠诲姟 + forkLiftAction.assignWork(wrkMast.getLiftNo(), assignCommand); + } + return false; + } + return true; + } + + /** + * 鎻愬崌鏈哄嚭搴� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean liftIoExecuteStepOut(WrkMast wrkMast) { + //--------------------------------------鎻愬崌鏈哄嚭搴�-----------------------------------------// + //103.灏忚溅鎼繍瀹屾垚 ==> 104.鎻愬崌鏈烘惉杩愪腑 + if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts) { + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + return false; + } + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if(shuttleProtocol == null) { + return false; + } + + //鑾峰彇婧愮珯 + ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo()); + if (liftSta == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾壘涓嶅埌绔欑偣锛岀姝㈡淳鍙�", wrkMast.getWrkNo()); + return false;//鎵句笉鍒扮珯鐐� + } + + if (shuttleProtocol.getCurrentLocNo().equals(liftSta.getLocNo())) { + //灏忚溅杩樺湪杈撻�佺珯鐐� + //鑾峰彇灏忚溅寰呮満浣� + String standbyLocNo = Utils.getShuttleStandbyLocNo(liftSta.getLocNo()); + if(standbyLocNo == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃幏鍙栧皬杞﹀緟鏈轰綅澶辫触", wrkMast.getWrkNo()); + return false; + } + //璋冨害灏忚溅鍘诲緟鏈轰綅 + boolean dispatchShuttle = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), standbyLocNo, wrkMast.getShuttleNo()); + if (!dispatchShuttle) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹀湪杈撻�佺珯鐐硅皟搴﹀皬杞﹂伩璁╁け璐�", wrkMast.getWrkNo()); + return false; + } + } + + if (liftSta.getHasCar()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣瀛樺湪灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftSta.getStaNo()); + return false; + } + + if (!liftSta.getHasTray()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣鏃犳墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getStaNo()); + return false; + } + + ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftSta.getLiftNo()); + if (forkLiftThread == null) { + return false; + } + ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); + if (forkLiftProtocol == null) { + return false; + } + if (!forkLiftThread.isIdle()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftSta.getLiftNo()); + return false; + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庡嚭搴撴ā寮� + if (!forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾彁鍗囨満涓嶅浜庡嚭搴撴ā寮忥紝绂佹鍑哄簱", wrkMast.getWrkNo()); + return false; + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 + WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); + if (liftWrkMast != null) { + if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + } + + //璇锋眰涓婄骇绯荤粺锛屾槸鍚﹀厑璁稿嚭搴� + boolean outMission = ForkLiftUtils.queryOutMission(wrkMast.getStaNo()); + if (!outMission) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屼笂绾х郴缁熶笉鍏佽鍑哄簱", wrkMast.getWrkNo()); + return false; + } + + //鑾峰彇鎻愬崌鏈哄懡浠� + List<ForkLiftCommand> liftCommands = forkLiftThread.getPickAndPutCommand(wrkMast.getWrkNo(), liftSta.getLev(), wrkMast.getStaNo()); + ArrayList<ForkLiftCommand> commands = new ArrayList<>(); + commands.addAll(liftCommands); + + //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 + LiftAssignCommand assignCommand = new LiftAssignCommand(); + assignCommand.setCommands(commands); + assignCommand.setLiftNo(wrkMast.getLiftNo().shortValue()); + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); + assignCommand.setTaskMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue()); + + wrkMast.setWrkSts(WrkStsType.OUTBOUND_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 103.鐢熸垚鍏ュ簱浠诲姟 ==> 104.鎻愬崌鏈烘惉杩愪腑 + wrkMast.setShuttleNo(null);//閲婃斁灏忚溅 + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(new Date()); + if (wrkMastService.updateById(wrkMast)) { + //涓嬪彂浠诲姟 + forkLiftAction.assignWork(wrkMast.getLiftNo(), assignCommand); + } + return false; + } + return true; + } + /** * 璐у弶鎻愬崌鏈轰换鍔″畬鎴� */ @@ -1364,34 +895,20 @@ //灏嗕换鍔℃。鏍囪涓哄畬鎴� WrkMast wrkMast = wrkMastService.selectByWorkNo(forkLiftProtocol.getWrkNo()); if (wrkMast != null) { - switch (wrkMast.getWrkSts().intValue()) { -// case 3://3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴� -// wrkMast.setWrkSts(4L); -// wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� -// if (liftProtocol.getToken().equals(wrkMast.getWrkNo())) { -// //閲婃斁鎻愬崌鏈轰护鐗� -// liftProtocol.setToken(0); -// } -// break; -// case 24://24.鎻愬崌鏈烘惉杩愪腑 ==> 25.鎻愬崌鏈烘惉杩愬畬鎴� -// wrkMast.setWrkSts(25L); -// if (wrkMast.getIoType() == 11) {//搴撲綅绉昏浆 -// wrkMast.setWrkSts(4L);//4.鎻愬崌鏈烘惉杩愬畬鎴� -// } else { -// if (wrkMast.getMk() == null || !wrkMast.getMk().equals("Y")) { -// //涓嶉渶瑕佺敤鍒版満姊拌噦锛岀洿鎺ヨ浆29.鍑哄簱瀹屾垚 -// wrkMast.setWrkSts(29L); -// wrkMast.setShuttleNo(null);//閲婃斁灏忚溅 -// wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� -// wrkMast.setModiTime(new Date()); -// } -// } -// break; - case 306://306.鎻愬崌鏈烘惉杩愪腑 ==> 307.鎻愬崌鏈烘惉杩愬畬鎴� - wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts); - forkLiftThread.setSyncTaskNo(0); - break; - default: + if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN.sts) { + //3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴� + wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts); + wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� + forkLiftThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_LIFT_RUN.sts) { + //104.鎻愬崌鏈烘惉杩愪腑 ==> 109.鍑哄簱瀹屾垚 + wrkMast.setWrkSts(WrkStsType.COMPLETE_OUTBOUND.sts); + wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� + forkLiftThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_RUN.sts) { + //306.鎻愬崌鏈烘惉杩愪腑 ==> 307.鎻愬崌鏈烘惉杩愬畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts); + forkLiftThread.setSyncTaskNo(0); } wrkMast.setModiTime(new Date()); @@ -1565,107 +1082,6 @@ } } } - - // ------------------------------------------------------------------------------- - -// /** -// * 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐� -// */ -// public void storeEmptyPlt(){ -// try { -// for (DevpSlave devp : slaveProperties.getDevp()) { -// // 閬嶅巻绌烘澘鍏ュ簱鍙� -// for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) { -// // 鑾峰彇绌烘澘鍏ュ簱绔欎俊鎭� -// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); -// StaProtocol staProtocol = devpThread.getStation().get(emptyInSta.getStaNo()); -// if (staProtocol == null) { -// continue; -// } else { -// staProtocol = staProtocol.clone(); -// } -// // 绔欑偣鏉′欢鍒ゆ柇 -// if (staProtocol.isAutoing() -// && staProtocol.isLoading() -// && staProtocol.isInEnable() -// && staProtocol.isEmptyMk() -// && (staProtocol.getWorkNo() == 0 || (staProtocol.getWorkNo() >= 9990 || staProtocol.getWorkNo() <= 9999)) -// && staProtocol.isPakMk()) { -// -// // 鑾峰彇鏉$爜鎵弿浠俊鎭� -// String barcode = null; -// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, emptyInSta.getBarcode()); -// if (barcodeThread != null) { -// String barcode0 = barcodeThread.getBarcode(); -// if (!Cools.isEmpty(barcode0)) { -//// News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", emptyInSta.getBarcode(), barcode0); -// if (!"NG".endsWith(barcode0) && !"NoRead".equals(barcode0) && !"empty".equals(barcode0)) { -// barcode = barcode0; -// } -// } -// } -// -// if (!Cools.isEmpty(barcode)) { -// WrkMast wrkMast = wrkMastMapper.selectByBarcode(barcode);//鏉$爜瀛樺湪宸ヤ綔妗� -// if (wrkMast != null) { -// continue; -// } -// } -// -// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, emptyInSta.getLed()); -// -// try { -// LocTypeDto locTypeDto = new LocTypeDto(staProtocol); -// -// SearchLocParam param = new SearchLocParam(); -// param.setIoType(10); -// if (!Cools.isEmpty(barcode)) { -// param.setBarcode(barcode); -// } -// param.setSourceStaNo(emptyInSta.getStaNo()); -//// param.setLocType1(locTypeDto.getLocType1()); -// String response = new HttpHandler.Builder() -// .setUri(wmsUrl) -// .setPath("/rpc/pakin/loc/v2") -// .setJson(JSON.toJSONString(param)) -// .build() -// .doPost(); -// JSONObject jsonObject = JSON.parseObject(response); -// Integer code = jsonObject.getInteger("code"); -// if (code.equals(200)) { -// StartupDto dto = jsonObject.getObject("data", StartupDto.class); -// barcodeThread.setBarcode(""); -//// // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护 -//// staProtocol.setWorkNo(dto.getWorkNo().shortValue()); -//// staProtocol.setStaNo(dto.getStaNo().shortValue()); -//// devpThread.setPakMk(staProtocol.getSiteId(), false); -//// boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); -//// if (!result) { -//// throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); -//// } -// } else { -// if (ledThread != null) { -// String errorMsg = jsonObject.getString("msg"); -// if (!Cools.isEmpty(errorMsg)) { -// MessageQueue.offer(SlaveType.Led, emptyInSta.getLed(), new Task(3, errorMsg)); -// } -// } -// News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response); -// } -// } catch (Exception e) { -// e.printStackTrace(); -// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); -// } -// -// } -// -// -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } /** * 鍥涘悜绌挎杞︾數閲忔娴� ===>> 鍙戣捣鍏呯數 @@ -2314,4 +1730,63 @@ return true; } + //鑷姩鍒囨崲鍑哄叆搴撴ā寮� + public void autoSwitchForkLiftIOMode() { + for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLift()) { + Integer liftNo = forkLiftSlave.getId(); + ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); + if (forkLiftThread == null) { + continue; + } + ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); + if (forkLiftProtocol == null) { + continue; + } + + //鑾峰彇鍏ュ簱浠诲姟 + List<WrkMast> inWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .eq("lift_no", liftNo) + .in("wrk_sts" + , WrkStsType.NEW_INBOUND.sts + , WrkStsType.INBOUND_DEVICE_RUN.sts + , WrkStsType.INBOUND_LIFT_RUN.sts + , WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts + , WrkStsType.INBOUND_SHUTTLE_RUN.sts + , WrkStsType.INBOUND_SHUTTLE_RUN_COMPLETE.sts + )); + + //鑾峰彇鍑哄簱浠诲姟 + List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .eq("lift_no", liftNo) + .in("wrk_sts" + , WrkStsType.NEW_OUTBOUND.sts + , WrkStsType.OUTBOUND_SHUTTLE_RUN.sts + , WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts + , WrkStsType.OUTBOUND_LIFT_RUN.sts + , WrkStsType.OUTBOUND_LIFT_RUN_COMPLETE.sts + )); + + if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.NONE)) { + //鏈煡妯″紡 + if (!inWrkMasts.isEmpty()) { + forkLiftThread.switchIOMode(ForkLiftIoModeType.IN); + } else if (!outWrkMasts.isEmpty()) { + forkLiftThread.switchIOMode(ForkLiftIoModeType.OUT); + }else { + forkLiftThread.switchIOMode(ForkLiftIoModeType.IN); + } + } else if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.IN)) { + //鍏ュ簱妯″紡 + if (inWrkMasts.isEmpty() && !outWrkMasts.isEmpty()) { + forkLiftThread.switchIOMode(ForkLiftIoModeType.OUT); + } + } else if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) { + //鍑哄簱妯″紡 + if (outWrkMasts.isEmpty() && !inWrkMasts.isEmpty()) { + forkLiftThread.switchIOMode(ForkLiftIoModeType.IN); + } + } + } + } + } diff --git a/src/main/java/com/zy/asrs/task/WrkMastScheduler.java b/src/main/java/com/zy/asrs/task/WrkMastScheduler.java index 7ef9d9b..7b5a025 100644 --- a/src/main/java/com/zy/asrs/task/WrkMastScheduler.java +++ b/src/main/java/com/zy/asrs/task/WrkMastScheduler.java @@ -11,7 +11,9 @@ import com.zy.asrs.service.WrkMastService; import com.zy.asrs.utils.NotifyUtils; import com.zy.common.utils.HttpHandler; +import com.zy.core.enums.LocStsType; import com.zy.core.enums.SlaveType; +import com.zy.core.enums.WrkIoType; import com.zy.core.enums.WrkStsType; import com.zy.system.entity.Config; import com.zy.system.service.ConfigService; @@ -248,6 +250,32 @@ log.info("鍒犻櫎宸ヤ綔涓绘。[workNo={}]澶辫触", wrkMast.getWrkNo()); } + if (wrkMast.getIoType() == WrkIoType.IN.id) { + LocMast locMast = locMastService.queryByLoc(wrkMast.getLocNo()); + locMast.setLocSts(String.valueOf(LocStsType.O)); + locMast.setModiTime(new Date()); + locMastService.updateById(locMast); + } else if (wrkMast.getIoType() == WrkIoType.OUT.id) { + LocMast locMast = locMastService.queryByLoc(wrkMast.getSourceLocNo()); + locMast.setLocSts(String.valueOf(LocStsType.O)); + locMast.setModiTime(new Date()); + locMastService.updateById(locMast); + } else if (wrkMast.getIoType() == WrkIoType.LOC_MOVE.id) { + LocMast sourceLocMast = locMastService.queryByLoc(wrkMast.getSourceLocNo()); + LocMast locMast = locMastService.queryByLoc(wrkMast.getLocNo()); + if (sourceLocMast.getLocSts().equals(String.valueOf(LocStsType.R))) { + sourceLocMast.setLocSts(String.valueOf(LocStsType.F)); + sourceLocMast.setModiTime(new Date()); + locMastService.updateById(sourceLocMast); + } + + if (locMast.getLocSts().equals(String.valueOf(LocStsType.S))) { + locMast.setLocSts(String.valueOf(LocStsType.O)); + locMast.setModiTime(new Date()); + locMastService.updateById(locMast); + } + } + //涓婃姤 notifyUtils.notify("task", 1, String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.TASK_CANCEL, JSON.toJSONString(wrkMast)); } diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java index d8dd70e..8d2466b 100644 --- a/src/main/java/com/zy/asrs/utils/Utils.java +++ b/src/main/java/com/zy/asrs/utils/Utils.java @@ -1,9 +1,15 @@ package com.zy.asrs.utils; +import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Arith; import com.core.common.Cools; import com.core.common.SpringUtils; +import com.zy.asrs.entity.LocMast; +import com.zy.asrs.service.LocMastService; +import com.zy.common.model.NavigateNode; +import com.zy.common.model.enums.NavigationMapType; import com.zy.common.utils.NavigatePositionConvert; +import com.zy.common.utils.NavigateUtils; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.SlaveType; import com.zy.core.model.ShuttleSlave; @@ -77,6 +83,29 @@ public static List<String> getGroupLoc(String locNo) { return null; + } + + //鑾峰彇闄ょ櫧鍚嶅崟澶栫殑鎸囧畾妤煎眰鍏ㄩ儴绌挎杞y鍧愭爣鐐� + public static int[] getShuttlePoint(Integer shuttleNo) { + //鑾峰彇绌挎杞︽墍鍦ㄨ妭鐐逛綅缃� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo); + if (shuttleThread == null) { + return null; + } + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + return null; + } + + String currentLocNo = shuttleProtocol.getCurrentLocNo(); + if (currentLocNo == null) { + return null; + } + + if (shuttleProtocol.getCurrentLocNo() == null) { + return null; + } + return NavigatePositionConvert.positionToXY(shuttleProtocol.getCurrentLocNo()); } //鑾峰彇闄ょ櫧鍚嶅崟澶栫殑鎸囧畾妤煎眰鍏ㄩ儴绌挎杞y鍧愭爣鐐� @@ -182,4 +211,33 @@ return null; } + + //鑾峰彇灏忚溅寰呮満浣� + public static String getShuttleStandbyLocNo(String locNo) { + LocMastService locMastService = SpringUtils.getBean(LocMastService.class); + NavigateUtils navigateUtils = SpringUtils.getBean(NavigateUtils.class); + List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>() + .eq("loc_type", "standby") + .eq("lev1", Utils.getLev(locNo))); + if (locMasts.isEmpty()) { + return null; + } + + Integer recentDistance = Integer.MAX_VALUE; + String recentLocNo = null; + for (LocMast locMast : locMasts) { + //寰呮満浣嶅埌鐩爣鐐硅窛绂� + List<NavigateNode> currentShuttlePath = navigateUtils.calc(locNo, locMast.getLocNo(), NavigationMapType.NORMAL.id, Utils.getShuttlePoints(0, Utils.getLev(locNo)), null);//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘 + if (currentShuttlePath == null) { + continue; + } + Integer currentAllDistance = navigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + if (currentAllDistance < recentDistance) { + recentDistance = currentAllDistance; + recentLocNo = locMast.getLocNo(); + } + } + + return recentLocNo; + } } diff --git a/src/main/java/com/zy/common/utils/ForkLiftUtils.java b/src/main/java/com/zy/common/utils/ForkLiftUtils.java index 044d9e1..adc109d 100644 --- a/src/main/java/com/zy/common/utils/ForkLiftUtils.java +++ b/src/main/java/com/zy/common/utils/ForkLiftUtils.java @@ -1,5 +1,8 @@ package com.zy.common.utils; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.SpringUtils; import com.zy.asrs.utils.Utils; import com.zy.common.model.NavigateNode; @@ -9,8 +12,11 @@ import com.zy.core.model.protocol.ForkLiftStaProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.ForkLiftThread; +import com.zy.system.entity.Config; +import com.zy.system.service.ConfigService; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; /** @@ -36,7 +42,6 @@ return null; } - //鑾峰彇鎻愬崌鏈虹珯鐐� public static ForkLiftStaProtocol getLiftStaByLev(Integer liftNo, Integer lev) { @@ -71,4 +76,77 @@ return targetNodes; } + //閫氳繃杈撻�佺嚎绔欏彿鑾峰彇瀵瑰簲鎻愬崌鏈哄彿 + public static Integer getConveyorBindLiftNo(Integer staNo) { + ConfigService configService = SpringUtils.getBean(ConfigService.class); + if (configService == null) { + return null; + } + + Config conveyorLiftBindConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "conveyorLiftBind")); + if(conveyorLiftBindConfig == null) { + return null; + } + + List<JSONObject> list = JSON.parseArray(conveyorLiftBindConfig.getValue(), JSONObject.class); + if (list.isEmpty()) { + return null; + } + + for (JSONObject data : list) { + if(data.getInteger("staNo") == staNo) { + return data.getInteger("liftNo"); + } + } + + return null; + } + + //璇锋眰涓婄骇绯荤粺锛屾槸鍚﹀厑璁稿嚭搴� + //鏌ヨ鏄惁鏈夊嚭搴撴潈闄� + public static boolean queryOutMission(Integer staNo) { + ConfigService configService = SpringUtils.getBean(ConfigService.class); + if (configService == null) { + return false; + } + + Config queryOutMissionPathEnableConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "queryOutMissionPathEnable")); + if (queryOutMissionPathEnableConfig != null) { + String queryOutMissionPathEnable = queryOutMissionPathEnableConfig.getValue(); + if (!queryOutMissionPathEnable.equals("Y")) { + return true;//鍏抽棴鏌ヨ鍑哄簱鏉冮檺鍔熻兘 + } + } + + Config superSystemUriConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "superSystemUri")); + if (superSystemUriConfig == null) { + return false; + } + String superSystemUri = superSystemUriConfig.getValue(); + + Config queryOutMissionPathConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "queryOutMissionPath")); + if (queryOutMissionPathConfig == null) { + return false; + } + String missionPath = queryOutMissionPathConfig.getValue(); + + try { + HashMap<String, Object> data = new HashMap<>(); + data.put("staNo", staNo); + + String response = new HttpHandler.Builder() + .setUri(superSystemUri) + .setPath(missionPath) + .setJson(JSON.toJSONString(data)) + .build() + .doPost(); + if (response.equals("ok")) { + return true;//鏈夊嚭搴撴潈闄� + } + }catch (Exception e){ + e.printStackTrace(); + } + return false; + } + } diff --git a/src/main/java/com/zy/common/utils/NavigateMapUtils.java b/src/main/java/com/zy/common/utils/NavigateMapUtils.java index 308cd55..59fbc88 100644 --- a/src/main/java/com/zy/common/utils/NavigateMapUtils.java +++ b/src/main/java/com/zy/common/utils/NavigateMapUtils.java @@ -37,6 +37,12 @@ } //鑾峰彇灏忚溅鑺傜偣 + int[] shuttlePoint = Utils.getShuttlePoint(shuttleNo); + if (shuttlePoint == null) { + return false; + } + + //鑾峰彇灏忚溅鑺傜偣-鑾峰彇闄ょ櫧鍚嶅崟澶栫殑鎸囧畾妤煎眰鍏ㄩ儴绌挎杞y鍧愭爣鐐� List<int[]> shuttlePoints = Utils.getShuttlePoints(shuttleNo, lev); BasMap basMap = JSON.parseObject(o.toString(), BasMap.class); @@ -52,6 +58,11 @@ //妫�娴嬭矾寰勬槸鍚﹁閿佸畾 if (lock) { for (NavigateNode node : nodes) { + //鍒ゆ柇鏄惁涓哄綋鍓嶅皬杞� + if(shuttlePoint[0] == node.getX() && shuttlePoint[1] == node.getY()) { + continue; + } + List<MapNode> listX = listsHasShuttle.get(node.getX()); MapNode mapNode = listX.get(node.getY()); if (mapNode.getValue() == MapNodeType.LOCK.id) { diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java index 3b6df0f..1f0250b 100644 --- a/src/main/java/com/zy/core/MainProcess.java +++ b/src/main/java/com/zy/core/MainProcess.java @@ -41,37 +41,31 @@ continue; } -// // 鍏ュ簱 ===>> 鍏ュ簱绔欏埌鍫嗗灈鏈虹珯锛屾牴鎹潯鐮佹壂鎻忕敓鎴愬叆搴撳伐浣滄。 -// mainService.generateStoreWrkFile(); // 缁勬墭 - //鍒濆鍖栧疄鏃跺湴鍥� mainService.initRealtimeBasMap(); -// // 鎷f枡銆佸苟鏉垮啀鍏ュ簱 -// mainService.stnToCrnStnPick(); -// // 鐩樼偣鍐嶅叆搴� -// mainService.stnToCrnStnPlate(); -// // 鍏ュ簱 ===>> 鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙� -// mainService.shuttleInExecute(); -// // 鍑哄簱 ===>> 鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙� -// mainService.shuttleOutExecute(); + // 鍏ュ簱 ===>> 鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙� + mainService.shuttleInExecute(); + // 鍑哄簱 ===>> 鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙� + mainService.shuttleOutExecute(); //鍥涘悜绌挎杞︿换鍔″畬鎴� mainService.shuttleFinished(); //鎵ц绉诲簱浠诲姟 mainService.shuttleLocMoveExecute(); -// //鎻愬崌鏈轰换鍔� -// mainService.liftIoExecute(); + //璐у弶鎻愬崌鏈轰换鍔� + mainService.forkLiftIoExecute(); //璐у弶鎻愬崌鏈轰换鍔″畬鎴� mainService.forkLiftFinished(); - //鎵ц灏忚溅绉诲簱浠诲姟 + //鎵ц灏忚溅绉诲姩浠诲姟 mainService.shuttleMoveExecute(); // 寮傚父淇℃伅璁板綍 mainService.recErr(); -// // 鍏ュ簱 ===>> 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐� -// mainService.storeEmptyPlt(); // 绌挎杞� ===>> 灏忚溅鐢甸噺妫�娴嬪厖鐢� mainService.loopShuttleCharge(); mainService.executeShuttleCharge(); + //鑷姩鍒囨崲鍑哄叆搴撴ā寮� + mainService.autoSwitchForkLiftIOMode(); + // 闂撮殧 Thread.sleep(200); } catch (Exception e) { diff --git a/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java b/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java index ec4d5f3..d8d6497 100644 --- a/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java +++ b/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java @@ -226,11 +226,21 @@ return false; } + //鑾峰彇涓诲伐浣滄。淇℃伅 + WrkMast mainWrkMast = wrkMastService.selectByWorkNo(wrkNo); + //鍒ゆ柇鏄惁鏈夊叾浠栦换鍔℃鍦ㄤ娇鐢ㄧ┛姊溅 WrkMast wrkMast2 = wrkMastService.selectShuttleWorking(shuttleNo); if (wrkMast2 != null) {//灏忚溅瀛樺湪鍏朵粬宸ヤ綔妗d换鍔★紝绛夊緟鎵ц瀹屾垚鍚庡啀鐢熸垚鏂扮殑浠诲姟 - News.info("{}鍙峰皬杞︼紝瀛樺湪鍏朵粬宸ヤ綔妗d换鍔★紝绛夊緟鎵ц瀹屾垚鍐嶇敓鎴愭柊鐨勪换鍔�", shuttleNo); - return false; + if (mainWrkMast == null) { + News.info("{}鍙峰皬杞︼紝瀛樺湪鍏朵粬宸ヤ綔妗d换鍔★紝绛夊緟鎵ц瀹屾垚鍐嶇敓鎴愭柊鐨勪换鍔�", shuttleNo); + return false; + }else { + if (!mainWrkMast.getShuttleNo().equals(shuttleNo)) { + News.info("{}鍙峰皬杞︼紝瀛樺湪鍏朵粬宸ヤ綔妗d换鍔★紝绛夊緟鎵ц瀹屾垚鍐嶇敓鎴愭柊鐨勪换鍔�", shuttleNo); + return false; + } + } } Integer sourceStaNo = null;//灏忚溅鎹㈠眰婧愮珯鐐� @@ -277,10 +287,9 @@ } //缁欏伐浣滄。缁戝畾灏忚溅鍙� - WrkMast wrkMast1 = wrkMastService.selectByWorkNo(wrkNo); - if (wrkMast1 != null) { - wrkMast1.setShuttleNo(shuttleNo); - wrkMastService.updateById(wrkMast1); + if (mainWrkMast != null) { + mainWrkMast.setShuttleNo(shuttleNo); + wrkMastService.updateById(mainWrkMast); } return true; diff --git a/src/main/java/com/zy/core/enums/LocStsType.java b/src/main/java/com/zy/core/enums/LocStsType.java index 9a275af..b0580f7 100644 --- a/src/main/java/com/zy/core/enums/LocStsType.java +++ b/src/main/java/com/zy/core/enums/LocStsType.java @@ -5,6 +5,8 @@ D,//绌烘澘 F,//鍦ㄥ簱 O,//绌哄簱 + R,//鍑哄簱棰勭害 + S,//鍏ュ簱棰勭害 X,//绂佺敤 E,//涓嶅彲鏀捐揣閫氶亾 W,//姣嶈建閬� diff --git a/src/main/java/com/zy/core/thread/ForkLiftThread.java b/src/main/java/com/zy/core/thread/ForkLiftThread.java index 72bdd7e..6ae81a1 100644 --- a/src/main/java/com/zy/core/thread/ForkLiftThread.java +++ b/src/main/java/com/zy/core/thread/ForkLiftThread.java @@ -2,6 +2,7 @@ import com.zy.common.ExecuteSupport; import com.zy.core.ThreadHandler; +import com.zy.core.enums.ForkLiftIoModeType; import com.zy.core.enums.ForkLiftProtocolStatusType; import com.zy.core.enums.ForkLiftTaskModeType; import com.zy.core.model.CommandResponse; @@ -35,6 +36,8 @@ boolean setSyncTaskNo(Integer taskNo);//璁剧疆宸ヤ綔鍙� + boolean switchIOMode(ForkLiftIoModeType type);//鍒囨崲鍑哄叆搴撴ā寮� + int generateDeviceTaskNo(int taskNo, ForkLiftTaskModeType type);//鐢熸垚纭欢璁惧宸ヤ綔鍙� //***************鑾峰彇鍛戒护***************** diff --git a/src/main/java/com/zy/core/thread/impl/ZyForkLiftThread.java b/src/main/java/com/zy/core/thread/impl/ZyForkLiftThread.java index 25269ab..10900c0 100644 --- a/src/main/java/com/zy/core/thread/impl/ZyForkLiftThread.java +++ b/src/main/java/com/zy/core/thread/impl/ZyForkLiftThread.java @@ -19,6 +19,7 @@ import com.zy.core.action.ForkLiftAction; import com.zy.core.action.ShuttleAction; import com.zy.core.cache.OutputQueue; +import com.zy.core.enums.ForkLiftIoModeType; import com.zy.core.enums.ForkLiftProtocolStatusType; import com.zy.core.enums.ForkLiftTaskModeType; import com.zy.core.enums.RedisKeyType; @@ -349,6 +350,15 @@ } @Override + public boolean switchIOMode(ForkLiftIoModeType type) { + OperateResult result = siemensS7Net.Write("DB103.12", type.id.shortValue()); + if (result.IsSuccess) { + return true; + } + return false; + } + + @Override public int generateDeviceTaskNo(int taskNo, ForkLiftTaskModeType type) { return taskNo; } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index c53c388..c1a3b87 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -147,18 +147,18 @@ staRow: 9 staBay: 6 sta[0]: - staNo: 101 + staNo: 1 lev: 1 liftNo: ${wcs-slave.forkLift[0].id} sta[1]: - staNo: 102 + staNo: 2 lev: 2 liftNo: ${wcs-slave.forkLift[0].id} sta[2]: - staNo: 103 + staNo: 3 lev: 3 liftNo: ${wcs-slave.forkLift[0].id} sta[3]: - staNo: 104 + staNo: 4 lev: 4 liftNo: ${wcs-slave.forkLift[0].id} \ No newline at end of file diff --git a/src/main/resources/sql/20250213165543.nb3 b/src/main/resources/sql/20250213165543.nb3 new file mode 100644 index 0000000..aeb73c2 --- /dev/null +++ b/src/main/resources/sql/20250213165543.nb3 Binary files differ diff --git a/src/main/webapp/static/js/locMast/locMast.js b/src/main/webapp/static/js/locMast/locMast.js index 7ee7a4e..5a399b9 100644 --- a/src/main/webapp/static/js/locMast/locMast.js +++ b/src/main/webapp/static/js/locMast/locMast.js @@ -25,6 +25,7 @@ ,{field: 'row1', align: 'center',title: '鎺�', sort:true} ,{field: 'bay1', align: 'center',title: '鍒�', sort:true} ,{field: 'lev1', align: 'center',title: '灞�', sort:true} + ,{field: 'locType', align: 'center',title: '搴撲綅绫诲瀷'} ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳', hide:true} ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿', hide:true} @@ -400,20 +401,12 @@ shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙 }); var data = { -// id: $('#id').val(), locNo: $('#locNo').val(), - whsType: $('#whsType').val(), - pltType: $('#pltType').val(), - ctnType: $('#ctnType').val(), locSts: $('#locSts').val(), - sheetNo: $('#sheetNo').val(), - crnNo: $('#crnNo').val(), row1: $('#row1').val(), bay1: $('#bay1').val(), lev1: $('#lev1').val(), - fullPlt: $('#fullPlt').val(), - locType1: $('#locType1').val(), - outEnable: $('#outEnable').val(), + locType: $('#locType').val(), ioTime: top.strToDate($('#ioTime\\$').val()), firstTime: top.strToDate($('#firstTime\\$').val()), modiUser: $('#modiUser').val(), @@ -421,15 +414,8 @@ appeUser: $('#appeUser').val(), appeTime: top.strToDate($('#appeTime\\$').val()), errorTime: top.strToDate($('#errorTime\\$').val()), - errorMemo: $('#errorMemo').val(), - ctnKind: $('#ctnKind').val(), - scWeight: $('#scWeight').val(), - invWh: $('#invWh').val(), mk: $('#mk').val(), barcode: $('#barcode').val(), - PdcType: $('#PdcType').val(), - ctnNo: $('#ctnNo').val(), - }; $.ajax({ url: baseUrl+"/locMast/"+name+"/auth", diff --git a/src/main/webapp/views/admin/locMast/locMast_detail.html b/src/main/webapp/views/admin/locMast/locMast_detail.html index a4de168..596109e 100644 --- a/src/main/webapp/views/admin/locMast/locMast_detail.html +++ b/src/main/webapp/views/admin/locMast/locMast_detail.html @@ -21,24 +21,6 @@ <input id="locNo" class="layui-input" type="text" onkeyup="check(this.id, 'locMast')"> </div> </div> - <div class="layui-inline" style="width:31%;display: none"> - <label class="layui-form-label"><span class="not-null">*</span>锛�</label> - <div class="layui-input-inline"> - <input id="locType" class="layui-input" type="text" > - </div> - </div> - <div class="layui-inline" style="width:80%; display: none"> - <label class="layui-form-label">搴撲綅绫诲瀷锛�</label> - <div class="layui-input-inline cool-auto-complete"> - <input id="whsType" class="layui-input" type="text" style="display: none"> - <input id="whsType$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" onfocus=this.blur()> - <div class="cool-auto-complete-window"> - <input class="cool-auto-complete-window-input" data-key="basWhsQueryBywhsType" onkeyup="autoLoad(this.getAttribute('data-key'))"> - <select class="cool-auto-complete-window-select" data-key="basWhsQueryBywhsTypeSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple"> - </select> - </div> - </div> - </div> <div class="layui-inline" style="width:80%;"> <label class="layui-form-label"><span class="not-null">*</span>搴撲綅鐘舵�侊細</label> <div class="layui-input-inline cool-auto-complete"> @@ -69,7 +51,12 @@ <input id="lev1" class="layui-input" type="text" autocomplete="off" disabled="disabled"> </div> </div> - + <div class="layui-inline" style="width:80%;"> + <label class="layui-form-label">搴撲綅绫诲瀷锛�</label> + <div class="layui-input-inline"> + <input id="locType" class="layui-input" type="text" autocomplete="off"> + </div> + </div> <div id="data-detail-btn" class="layui-btn-container layui-form-item"> <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">淇濆瓨</div> -- Gitblit v1.9.1