From d48f94b29304be6cabbeb6f9e9fe2b25bd7140f9 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期六, 09 九月 2023 09:14:11 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 1008 +++++++++++++++++++++++++++-------------------------------- 1 files changed, 460 insertions(+), 548 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 5021b23..9259abd 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -69,6 +69,8 @@ @Autowired private BasShuttleErrLogService basShuttleErrLogService; @Autowired + private BasLiftErrLogService basLiftErrLogService; + @Autowired private BasShuttleErrService basShuttleErrService; @Autowired private BasCrnErrorMapper basCrnErrorMapper; @@ -635,11 +637,11 @@ } Short shuttleNo = redisCommand.getShuttleNo(); - ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo.intValue()); + NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo.intValue()); if (shuttleThread == null) { continue; } - ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); if (shuttleProtocol == null) { continue; } @@ -648,7 +650,7 @@ } //鍥涘悜绌挎杞﹀浜庣┖闂茬姸鎬侊紝杩涜浠诲姟鐨勬仮澶� - shuttleProtocol.setTaskNo(redisCommand.getWrkNo());//灏嗗洓鍚戠┛姊溅绾跨▼鍒嗛厤浠诲姟鍙� + shuttleProtocol.setTaskNo(redisCommand.getWrkNo().intValue());//灏嗗洓鍚戠┛姊溅绾跨▼鍒嗛厤浠诲姟鍙� shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING);//宸ヤ綔鐘舵�� } } @@ -710,16 +712,20 @@ } //鑾峰彇鍥涘悜绌挎杞︾嚎绋� - ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { return false; } - ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); if (shuttleProtocol == null) { return false; } if (!shuttleProtocol.isIdle()) { return false; + } + //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻 + if (shuttleProtocol.getToken() != 0) { + return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟 } //鍒ゆ柇灏忚溅鏄惁鍒拌揪杈撻�佺珯鐐瑰簱浣� @@ -746,6 +752,7 @@ 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)); @@ -754,201 +761,6 @@ return false; } return true; - } - - //鑾峰彇璧风偣-缁堢偣鎸囦护 - public synchronized List<ShuttleCommand> shuttleAssignCommand(String startLocNo, String locNo, Integer mapType, ShuttleAssignCommand assignCommand, ShuttleThread shuttleThread) { - //鑾峰彇灏忚溅绉诲姩閫熷害 - BasShuttle basShuttle = basShuttleService.selectById(assignCommand.getShuttleNo()); - Integer runSpeed = 1000; -// if (basShuttle != null) { -// Integer runSpeed1 = basShuttle.getRunSpeed(); -// if (runSpeed1 != null) { -// runSpeed = runSpeed1; -// } -// } - - //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护 - List<NavigateNode> calc = NavigateUtils.calc(startLocNo, locNo, mapType, Utils.getShuttlePoints(shuttleThread.getSlave().getId(), Utils.getLev(startLocNo))); - List<ShuttleCommand> commands = new ArrayList<>(); - if (calc == null) { - return null; - } - if (!Utils.checkShuttlePath(calc, shuttleThread.getSlave().getId())) {//妫�娴嬬┛姊溅琛岃蛋璺緞锛屾槸鍚﹀瓨鍦ㄥ叾浠栧皬杞︼紝濡傛湁鍏朵粬灏忚溅鍒欒繘琛岃皟绂� - return null; - } - List<NavigateNode> allNode = new ArrayList<>(); - allNode.addAll(calc); - - //鑾峰彇鍒嗘璺緞 - ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc); - //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 - for (ArrayList<NavigateNode> nodes : data) { - //寮�濮嬭矾寰� - NavigateNode startPath = nodes.get(0); - - //涓棿璺緞 - NavigateNode middlePath = null; - //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� - Short middleCodeNum = null; - Integer middleToDistDistance = null;//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� - if (nodes.size() > 10) {//涓鐮佷紶鍊掓暟绗笁涓� - //涓棿璺緞 - middlePath = nodes.get(nodes.size() - 3); - //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� - middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ()); - middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� - } else if (nodes.size() > 5) {//涓鐮佷紶鍊掓暟绗簩涓� - //涓棿璺緞 - middlePath = nodes.get(nodes.size() - 2); - //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� - middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ()); - middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� - } - - //鐩爣璺緞 - NavigateNode endPath = nodes.get(nodes.size() - 1); - Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� - Short startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ()); - //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� - Short distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ()); - //鑾峰彇绉诲姩鍛戒护 - ShuttleCommand command = shuttleThread.getMoveCommand(startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCodeNum, middleToDistDistance, runSpeed); - commands.add(command); - } - - assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist - //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� - NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(startLocNo)); - navigateMapData.writeNavigateNodeToRedisMap(allNode, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� - - return commands; - } - - //鑾峰彇璧风偣-涓偣-缁堢偣鎸囦护 - public synchronized List<ShuttleCommand> shuttleAssignCommand(String startLocNo, String middleLocNo, String locNo, ShuttleAssignCommand assignCommand, ShuttleThread shuttleThread) { - //鑾峰彇灏忚溅绉诲姩閫熷害 - BasShuttle basShuttle = basShuttleService.selectById(assignCommand.getShuttleNo()); - Integer runSpeed = 1000; -// if (basShuttle != null) { -// Integer runSpeed1 = basShuttle.getRunSpeed(); -// if (runSpeed1 != null) { -// runSpeed = runSpeed1; -// } -// } - - List<NavigateNode> allNode = new ArrayList<>(); - - //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护 - List<NavigateNode> calc = NavigateUtils.calc(startLocNo, middleLocNo, NavigationMapType.NORMAL.id, null);//灏忚溅鏃犺揣锛岃蛋姝e父搴撲綅閫氶亾 - List<ShuttleCommand> commands = new ArrayList<>(); - - if (calc != null) { - if (!Utils.checkShuttlePath(calc, shuttleThread.getSlave().getId())) {//妫�娴嬬┛姊溅琛岃蛋璺緞锛屾槸鍚﹀瓨鍦ㄥ叾浠栧皬杞︼紝濡傛湁鍏朵粬灏忚溅鍒欒繘琛岃皟绂� - return null; - } - - allNode.addAll(calc); - //鑾峰彇鍒嗘璺緞 - ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc); - //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 - for (ArrayList<NavigateNode> nodes : data) { - //寮�濮嬭矾寰� - NavigateNode startPath = nodes.get(0); - - //涓棿璺緞 - NavigateNode middlePath = null; - //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� - Short middleCodeNum = null; - Integer middleToDistDistance = null;//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� - if (nodes.size() > 10) {//涓鐮佷紶鍊掓暟绗笁涓� - //涓棿璺緞 - middlePath = nodes.get(nodes.size() - 3); - //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� - middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ()); - middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� - } else if (nodes.size() > 5) {//涓鐮佷紶鍊掓暟绗簩涓� - //涓棿璺緞 - middlePath = nodes.get(nodes.size() - 2); - //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� - middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ()); - middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� - } - - //鐩爣璺緞 - NavigateNode endPath = nodes.get(nodes.size() - 1); - Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - - //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� - Short startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ()); - //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� - Short distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ()); - //鑾峰彇绉诲姩鍛戒护 - ShuttleCommand command = shuttleThread.getMoveCommand(startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCodeNum, middleToDistDistance, runSpeed); - commands.add(command); - } - } - - //灏忚溅鎸囦护鍒拌揪鐩爣浣嶇疆鍚庯紝鍐嶅彂鍑轰竴鏉¢《鍗囨寚浠� - commands.add(shuttleThread.getPalletCommand((short) 1)); - - //璁$畻灏忚溅涓偣鍒扮粓鐐规墍闇�鍛戒护 - List<NavigateNode> calc2 = NavigateUtils.calc(middleLocNo, locNo, NavigationMapType.DFX.id, null);//灏忚溅鏈夎揣锛岃蛋绂佺敤杩嘍FX搴撲綅鐨勫湴鍥鹃�氶亾 - if (calc2 == null) { - return null; - } - if (!Utils.checkShuttlePath(calc2, shuttleThread.getSlave().getId())) {//妫�娴嬬┛姊溅琛岃蛋璺緞锛屾槸鍚﹀瓨鍦ㄥ叾浠栧皬杞︼紝濡傛湁鍏朵粬灏忚溅鍒欒繘琛岃皟绂� - return null; - } - allNode.addAll(calc2); - - //鑾峰彇鍒嗘璺緞 - ArrayList<ArrayList<NavigateNode>> data2 = NavigateUtils.getSectionPath(calc2); - for (ArrayList<NavigateNode> nodes : data2) { - //寮�濮嬭矾寰� - NavigateNode startPath = nodes.get(0); - - //涓棿璺緞 - NavigateNode middlePath = null; - //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� - Short middleCodeNum = null; - Integer middleToDistDistance = null;//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� - if (nodes.size() > 10) {//涓鐮佷紶鍊掓暟绗笁涓� - //涓棿璺緞 - middlePath = nodes.get(nodes.size() - 3); - //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� - middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ()); - middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� - } else if (nodes.size() > 5) {//涓鐮佷紶鍊掓暟绗簩涓� - //涓棿璺緞 - middlePath = nodes.get(nodes.size() - 2); - //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� - middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ()); - middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� - } - - //鐩爣璺緞 - NavigateNode endPath = nodes.get(nodes.size() - 1); - Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - - //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� - Short startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ()); - //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� - Short distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ()); - ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCodeNum, middleToDistDistance, runSpeed); - commands.add(moveCommand); - } - - //灏忚溅鎸囦护鍒拌揪鐩爣浣嶇疆鍚庯紝鍐嶅彂鍑轰竴鏉℃墭鐩樹笅闄嶆寚浠� - commands.add(shuttleThread.getPalletCommand((short) 2)); - - assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist - //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� - NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(startLocNo)); - navigateMapData.writeNavigateNodeToRedisMap(allNode, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� - - return commands; } /** @@ -977,16 +789,20 @@ } //鑾峰彇鍥涘悜绌挎杞︾嚎绋� - ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { return false; } - ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); if (shuttleProtocol == null) { return false; } if (!shuttleProtocol.isIdle()) { return false; + } + //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻 + if (shuttleProtocol.getToken() != 0) { + return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟 } //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� @@ -1019,6 +835,7 @@ 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)); @@ -1026,132 +843,6 @@ return false; } return true; - } - - /** - * 鎼滅储绌洪棽涓旀渶杩戠殑鍥涘悜绌挎杞�(浠ュ伐浣滄。鐩爣搴撲綅涓哄熀鐐硅绠楁渶杩戜笖绌洪棽鐨勮溅) - */ - public HashMap<String,Object> searchIdleShuttle(WrkMast wrkMast) { - HashMap<String, Object> map = new HashMap<>(); - String locNo = wrkMast.getIoType() < 101 ? wrkMast.getLocNo() : wrkMast.getSourceLocNo();//搴撲綅鍙� - LocMast locMast = locMastService.queryByLoc(locNo);//鎵惧埌搴撲綅璁板綍 - int lev = Utils.getLev(locNo);//褰撳墠宸ヤ綔妗e簱浣嶅眰楂� - ShuttleThread recentShuttle = null;//褰撳墠璺濈鏈�杩戠殑鍥涘悜绌挎杞︾嚎绋� - - ArrayList<ShuttleThread> sameLev = new ArrayList<>();//鐩稿悓妤煎眰鐨勭┛姊溅 - ArrayList<ShuttleThread> diffLev = new ArrayList<>();//涓嶅悓妤煎眰鐨勭┛姊溅 - - //鍒ゆ柇鍏朵粬绌洪棽绌挎杞︽槸鍚︾浠诲姟鏈�杩� - String distLocNo = null;//鐩爣鍦扮偣锛屽叆搴�=銆嬫彁鍗囨満鍙o紝鍑哄簱=銆嬭揣鐗╁簱浣嶅彿 - if (wrkMast.getIoType() < 101 && wrkMast.getIoType() != 11) { - //鍏ュ簱 - distLocNo = Utils.levToOutInStaLocNo(lev); - }else if(wrkMast.getIoType() >= 101){ - //鍑哄簱 - distLocNo = locNo; - } else if (wrkMast.getIoType() == 11) { - //搴撲綅绉昏浆 - distLocNo = wrkMast.getSourceLocNo(); - } - - //鍒ゆ柇褰撳墠浠诲姟鎵�鍦ㄦゼ灞傛槸鍚︽湁鍏朵粬浠诲姟宸茬粡鍒嗛厤浜嗗皬杞︼紝濡傛湁鍒欑洿鎺ョ敤璇ュ皬杞�(涓�灞傛ゼ浠呭垎閰嶄竴鍙拌溅) - List<WrkMast> wrkMasts = wrkMastService.selectShuttleWrkByLev(lev);//鍒ゆ柇褰撳墠绌挎杞︽ゼ灞傛槸鍚﹀凡鏈夊垎閰嶈溅杈嗙殑浠诲姟锛屽鏋滄湁鍒欏垎閰嶈繖杈嗚溅 - if (wrkMasts.size() > 0) { - //瀛樺湪鍏朵粬浠诲姟锛屽垎閰嶈繖杈嗚溅 - WrkMast wrkMast1 = wrkMasts.get(0); - ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast1.getShuttleNo()); - - map.put("sameLay", true);//鍚屽眰 - map.put("result", shuttleThread); - return map; - } - - for (ShuttleSlave shuttle : slaveProperties.getShuttle()) { - //鑾峰彇鍥涘悜绌挎杞︾嚎绋� - ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId()); - ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); - if (shuttleProtocol == null || shuttleProtocol.getShuttleNo() == null) { - continue; - } - if (!shuttleProtocol.isIdle()) { - continue; - } - - String shuttleLocNo = shuttleProtocol.getCurrentLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿 - if (shuttleLocNo == null) { - continue; - } - - if (shuttleLocNo.equals(distLocNo)) { - //杞﹁締褰撳墠浣嶇疆宸茬粡鏄洰鏍囧簱浣嶏紝鏃犻渶璁$畻 - map.put("sameLay", true);//鍚屽眰 - map.put("result", shuttleThread); - return map; - } - - int shuttleLocNoLey = Utils.getLev(shuttleLocNo);//搴撲綅鍙峰搴斿眰楂� - if (lev == shuttleLocNoLey) { - //宸ヤ綔妗fゼ灞傜浉鍚岀殑绌挎杞� - sameLev.add(shuttleThread); - }else { - //宸ヤ綔妗d笉鍚屾ゼ灞傜殑绌挎杞� - diffLev.add(shuttleThread); - } - - } - - Integer recentAllDistance = 9999999; - if (sameLev.size() > 0) { - //鍚屼竴妤煎眰鏈夌┖闂茬┛姊溅锛屽垯鍙湪宸ヤ綔妗fゼ灞傚鎵� - //瀵绘壘绂讳换鍔℃渶杩戠殑绌挎杞� - for (ShuttleThread shuttleThread : sameLev) { - //褰撳墠绌挎杞﹀簱浣嶅彿 - String currentLocNo = shuttleThread.getShuttleProtocol().getCurrentLocNo(); - //褰撳墠绌挎杞︾嚎绋嬪埌鐩爣鍦扮偣璺濈 - List<NavigateNode> currentShuttlePath = NavigateUtils.calc(currentLocNo, distLocNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleThread.getSlave().getId(), Utils.getLev(currentLocNo)));//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘 - if (currentShuttlePath == null) { - continue; - } - Integer currentAllDistance = NavigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - if (currentAllDistance < recentAllDistance) { - //濡傛灉褰撳墠妤煎眰鐨勮溅璺緞鏇村皬锛屽垯鏇存柊鏈�杩戠┛姊溅 - recentShuttle = shuttleThread; - } - } - - map.put("sameLay", true);//鍚屽眰 - map.put("result", recentShuttle); - }else { - //鍚屼竴妤煎眰锛屾病鏈夌┖闂茬┛姊溅锛屽彧鑳戒粠鍏朵粬妤煎眰璋冨害 - //瀵绘壘绂讳换鍔℃渶杩戠殑绌挎杞� - for (ShuttleThread shuttleThread : diffLev) { - - //褰撳墠绌挎杞﹀簱浣嶅彿 - String currentLocNo = shuttleThread.getShuttleProtocol().getCurrentLocNo(); - int currentLev = Utils.getLev(currentLocNo); - List<WrkMast> wrkMasts1 = wrkMastService.selectNoShuttleWrkByLev(currentLev);//鍒ゆ柇褰撳墠绌挎杞︽ゼ灞傛槸鍚︽湁寰呭垎閰嶈溅杈嗙殑浠诲姟锛屽鏋滄湁鍒欎笉鍒嗛厤杩欒締杞� - if (wrkMasts1.size() > 0) { - //瀛樺湪鍏朵粬浠诲姟锛岃烦杩囪繖杈嗚溅 - continue; - } - - //褰撳墠绌挎杞︾嚎绋嬪埌褰撳墠杞﹀瓙鎵�鍦ㄦゼ灞傜殑鎻愬崌鏈哄彛璺濈 - List<NavigateNode> currentShuttlePath = NavigateUtils.calc(currentLocNo, Utils.levToOutInStaLocNo(currentLev), NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleThread.getSlave().getId(), currentLev));//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘 - if (currentShuttlePath == null) { - continue; - } - - Integer currentAllDistance = NavigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - if (currentAllDistance < recentAllDistance) { - //濡傛灉褰撳墠妤煎眰鐨勮溅璺緞鏇村皬锛屽垯鏇存柊鏈�杩戠┛姊溅 - recentShuttle = shuttleThread; - } - } - - map.put("sameLay", false);//涓嶅悓灞� - map.put("result", recentShuttle); - } - return map; } /** @@ -1172,16 +863,22 @@ && shuttleProtocol.getFree() == ShuttleStatusType.IDLE.id ) { //灏嗕换鍔℃。鏍囪涓哄畬鎴� - WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo().intValue()); + WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo()); if (wrkMast != null) { switch (wrkMast.getWrkSts().intValue()) { case 5://5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚 wrkMast.setWrkSts(9L); - //浠诲姟鍙锋竻闆� - shuttleProtocol.setTaskNo(0); + if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) { + //閲婃斁灏忚溅浠ょ墝 + shuttleProtocol.setToken(0); + } break; case 22://22.灏忚溅鎼繍涓� ==> 23.灏忚溅鎼繍瀹屾垚 wrkMast.setWrkSts(23L); + if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) { + //閲婃斁灏忚溅浠ょ墝 + shuttleProtocol.setToken(0); + } break; case 102://102.灏忚溅鍒版彁鍗囨満涓� ==> 103.灏忚溅鍒版彁鍗囨満瀹屾垚 wrkMast.setWrkSts(103L); @@ -1191,6 +888,10 @@ break; case 108://108.灏忚溅绉诲姩涓� ==> 109.灏忚溅绉诲姩瀹屾垚 wrkMast.setWrkSts(109L); + if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) { + //閲婃斁灏忚溅浠ょ墝 + shuttleProtocol.setToken(0); + } break; default: } @@ -1282,6 +983,10 @@ if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { return false; } + //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰� + if (liftProtocol.getToken() != 0) { + return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔� + } //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId()); if (liftWrkMast != null) { @@ -1312,6 +1017,7 @@ 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)); @@ -1344,6 +1050,10 @@ if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { return false; } + //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰� + if (liftProtocol.getToken() != 0) { + return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔� + } //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId()); if (liftWrkMast != null) { @@ -1374,6 +1084,7 @@ 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)); @@ -1409,9 +1120,20 @@ case 3://3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴� wrkMast.setWrkSts(4L); wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� + if (liftProtocol.getToken() == wrkMast.getWrkNo()) { + //閲婃斁鎻愬崌鏈轰护鐗� + liftProtocol.setToken(0); + } break; case 24://24.鎻愬崌鏈烘惉杩愪腑 ==> 25.鎻愬崌鏈烘惉杩愬畬鎴� wrkMast.setWrkSts(25L); + if (wrkMast.getIoType() == 11) {//搴撲綅绉昏浆 + wrkMast.setWrkSts(4L);//4.鎻愬崌鏈烘惉杩愬畬鎴� + } + if (liftProtocol.getToken() == wrkMast.getWrkNo()) { + //閲婃斁鎻愬崌鏈轰护鐗� + liftProtocol.setToken(0); + } break; case 104://104.鎻愬崌鏈烘惉杩愪腑 ==> 105.鎻愬崌鏈烘惉杩愬畬鎴� wrkMast.setWrkSts(105L); @@ -1448,106 +1170,31 @@ //鏌ヨ搴撲綅绉昏浆宸ヤ綔妗� List<WrkMast> wrkMasts1 = wrkMastMapper.selectLocToLocWrkMast(); for (WrkMast wrkMast : wrkMasts1) { - - boolean step1 = this.locToLocExecuteStep1(wrkMast);//缁戝畾灏忚溅 - if (!step1) { - continue; - } - - boolean step2 = this.locToLocExecuteStep2(wrkMast);//璋冨害灏忚溅鍒扮洰鏍囨ゼ灞� - if (!step2) { - continue; - } - - boolean step3 = this.locToLocExecuteStep3(wrkMast);//鍚屾ゼ灞傚簱浣嶇Щ杞� - if (!step3) { - continue; - } - - } - } - - /** - * 缁戝畾灏忚溅骞惰皟搴﹁溅 - * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false - * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue - */ - private boolean locToLocExecuteStep1(WrkMast wrkMast) { - if (wrkMast.getShuttleNo() == null) {//缁欏簱浣嶇Щ杞粦瀹氱┛姊溅鍙� - //瀵绘壘鏈�杩戜笖绌洪棽鐨勫洓鍚戠┛姊溅 - HashMap<String,Object> searchIdleShuttle = this.searchIdleShuttle(wrkMast); - ShuttleThread shuttleThread = (ShuttleThread) searchIdleShuttle.get("result"); - if (shuttleThread == null) { - //娌℃湁鎵惧埌绌洪棽绌挎杞� - return false; - } - wrkMast.setShuttleNo(shuttleThread.getSlave().getId());//缁欏伐浣滄。鍒嗛厤鍥涘悜绌挎杞﹀彿 - wrkMastMapper.updateById(wrkMast); - } - return true; - } - - /** - * 璋冨害灏忚溅鍒扮洰鏍囨ゼ灞� - * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false - * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue - */ - private boolean locToLocExecuteStep2(WrkMast wrkMast) { - if (wrkMast.getWrkSts() == 1 && wrkMast.getShuttleNo() != null) { - ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); - ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); - if (!shuttleProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { - return false;//灏忚溅澶勪簬涓嶇┖闂茬姸鎬� - } - - String currentLocNo = shuttleProtocol.getCurrentLocNo();//灏忚溅褰撳墠搴撲綅鍙� - int shuttleLev = Utils.getLev(currentLocNo);//灏忚溅鎵�鍦ㄦゼ灞� - - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); - LiftProtocol liftProtocol = liftThread.getLiftProtocol(); - - //鍒ゆ柇灏忚溅鏄惁鍐嶇洰鏍囨ゼ灞� - if (shuttleLev != Utils.getLev(wrkMast.getLocNo())) { - //灏忚溅鍜岀洰鏍囦笉鍦ㄥ悓涓�妤煎眰 - - //鎻愬崌鏈哄彛绔欑偣搴撲綅鍙� - String liftSiteLocNo = Utils.levToOutInStaLocNo(shuttleLev); - - //鍒涘缓鍒嗛厤鍛戒护 - ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); - assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 - assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� - assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue());//鍏ュ嚭搴撴ā寮� - assignCommand.setSourceLocNo(currentLocNo);//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) - - //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞 - List<ShuttleCommand> commands = this.shuttleAssignCommand(shuttleProtocol.getLocNo(), liftSiteLocNo, NavigationMapType.NONE.id, assignCommand, shuttleThread); - if (commands == null) { - return false;//鏈壘鍒拌矾寰� + if (wrkMast.getSourceLocNo().equals(wrkMast.getLocNo())) { + boolean step1 = this.locToLocExecuteStep1(wrkMast);//鍚屾ゼ灞傚簱浣嶇Щ杞� + if (!step1) { + continue; + } + }else { + //璺ㄦゼ灞傚簱浣嶇Щ杞� + boolean step2 = this.locToLocExecuteStep2(wrkMast);//璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鍑哄簱鍙� + if (!step2) { + continue; } - //鑾峰彇褰撳墠灏忚溅鎵�鍦ㄦゼ灞傜殑绔欑偣淇℃伅 - BasDevp basDevp = basDevpService.queryByLocNo(liftSiteLocNo); - Short endStartCode = Short.parseShort(basDevp.getQrCodeValue());//绔欑偣浜岀淮鐮� - -// //澧炲姞绉诲姩杩涙彁鍗囨満鍛戒护 -// ShuttleCommand moveCommand = shuttleThread.getMoveCommand(endStartCode, liftProtocol.getBarcode(), 1600, ShuttleRunDirection.TOP.id, null, null, 500); -// commands.add(moveCommand); - - //鍒嗛厤鐩爣搴撲綅 - shuttleProtocol.setLocNo(liftSiteLocNo); - //鐩爣搴撲綅 - assignCommand.setLocNo(liftSiteLocNo); -// assignCommand.setCommands(commands); - wrkMast.setWrkSts(5L);//灏忚溅杩佺Щ鐘舵�� - - if (wrkMastMapper.updateById(wrkMast) > 0) { - //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); + boolean step3 = this.locToLocExecuteStep3(wrkMast);//鎻愬崌鏈烘惉杩愯揣鐗� + if (!step3) { + continue; } + + boolean step4 = this.locToLocExecuteStep4(wrkMast);//璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鍑哄簱鍙� + if (!step4) { + continue; + } + } + } - return true; } /** @@ -1555,108 +1202,250 @@ * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue */ - private boolean locToLocExecuteStep3(WrkMast wrkMast) { - if (wrkMast.getShuttleNo() == null) { - return false; - } + private boolean locToLocExecuteStep1(WrkMast wrkMast) { + if (wrkMast.getWrkSts() == 21) {//21.鐢熸垚鍑哄簱浠诲姟 + if (wrkMast.getShuttleNo() == null) { + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣 + return false; + } - ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); - ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); - if (!shuttleProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { - 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()) { + return false; + } - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); - LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + //鍒ゆ柇灏忚溅鏄惁鍒拌揪婧愬簱浣� + if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { + //灏忚溅涓嶅湪婧愬簱浣嶄綅缃� + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣 + return false; + } - DevpThread devpThread = null; - for (DevpSlave devp : slaveProperties.getDevp()){ - // 鑾峰彇鍏ュ簱绔欎俊鎭� - devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); - } - - //鍒ゆ柇灏忚溅鏄惁鍦ㄥ伐浣滄。浠诲姟鐩爣妤煎眰 - String currentLocNo = shuttleProtocol.getCurrentLocNo();//灏忚溅褰撳墠搴撲綅鍙� - int shuttleLev = Utils.getLev(currentLocNo);//灏忚溅鎵�鍦ㄦゼ灞� - if (shuttleLev != Utils.getLev(wrkMast.getLocNo())) { - return false;//涓嶅湪鍚屼竴妤煎眰 - } - - if (wrkMast.getWrkSts() == 1 || wrkMast.getWrkSts() == 8) { - //璋冨害灏忚溅鎵ц鍚屾ゼ灞傜Щ搴撲换鍔� + //灏忚溅宸叉姷杈炬簮搴撲綅锛岃繘琛屾惉杩愯揣鐗� + NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getSourceLocNo(), wrkMast.getLocNo()); + if (result == null) {//璺緞璁$畻澶辫触 + return false; + } //鍒涘缓鍒嗛厤鍛戒护 ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� - assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue());//鍏ュ嚭搴撴ā寮� - assignCommand.setSourceLocNo(currentLocNo);//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) + assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue());//鍏ュ簱妯″紡 + assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) + assignCommand.setCommands(result.getCommands());//杩愯鍛戒护 + assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣 - List<ShuttleCommand> commands = new ArrayList<>(); - - if (wrkMast.getWrkSts() == 8) {//8.鎻愬崌鏈鸿縼绉诲皬杞﹀畬鎴愶紝闇�瑕佸皢灏忚溅绉诲嚭鎻愬崌鏈� - //鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂� - if (!liftProtocol.isIdleNoTask()) { - return false;//鎻愬崌鏈哄繖 - } - //鍒ゆ柇鎻愬崌鏈轰换鍔″彿鍜屽綋鍓嶅伐浣滄。浠诲姟鍙锋槸鍚︿竴鑷� - if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkMast.getWrkNo()) { - return false; - } - - //鍒ゆ柇鎻愬崌鏈烘ゼ灞傛槸鍚﹀埌浣嶏紝鍒ゆ柇绔欑偣鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙� - String locNo = wrkMast.getLocNo(); - int lev = Utils.getLev(locNo);//鐩爣浜岀淮鐮佹墍鍦ㄦゼ灞� - int liftLev = liftProtocol.getLev().intValue();//鎻愬崌鏈烘墍鍦ㄦゼ灞� - if (liftLev != lev) { - return false;//鎻愬崌鏈轰笉鍦ㄧ洰鏍囨ゼ灞傝烦杩� - } - - Integer staNo = Utils.levToOutInStaNo(lev >= 2 ? lev + 1 : lev); - //鑾峰彇鐩爣绔欎俊鎭� - StaProtocol staProtocol1 = devpThread.getStation().get(staNo); - if (staProtocol1 == null) { - return false;//绔欑偣淇℃伅涓嶅瓨鍦� - } - if (!staProtocol1.isLiftArrival()) { - return false;//绔欑偣鎻愬崌鏈哄埌浣嶄俊鍙穎alse - } - -// BasDevp basDevp = basDevpService.selectById(staNo); -// short startCode = liftProtocol.getBarcode();//鎻愬崌鏈哄唴閮ㄤ簩缁寸爜 -// Short distCode = Short.parseShort(basDevp.getQrCodeValue());//鎻愬崌鏈哄彛绔欑偣浜岀淮鐮� -// Short runDirection = ShuttleRunDirection.BOTTOM.id;//杩愯鏂瑰悜 -// //鑾峰彇鍛戒护 -// ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCode, distCode, 1600, runDirection, null, null, 500); -// commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶� - -// currentLocNo = basDevp.getLocNo();//浣跨敤杈撻�佺珯鐐瑰彛浣滀负璧风偣鍧愭爣 - } - - //鐩存帴璁$畻杞﹀埌婧愬簱浣嶅埌鐩爣搴撲綅璺緞 - List<ShuttleCommand> commands1 = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), wrkMast.getLocNo(), assignCommand, shuttleThread); - if (commands1 == null) { - return false;//鎵句笉鍒拌矾寰勭瓑寰呬笅涓�娆� - } - commands.addAll(commands1); - - //鍒嗛厤浠诲姟鍙� - shuttleProtocol.setTaskNo(wrkMast.getWrkNo().shortValue()); - //鍒嗛厤婧愬簱浣� - shuttleProtocol.setSourceLocNo(wrkMast.getSourceLocNo()); - -// assignCommand.setCommands(commands); - //鍒嗛厤鐩爣搴撲綅 - shuttleProtocol.setLocNo(wrkMast.getLocNo()); - //鐩爣搴撲綅 - assignCommand.setLocNo(wrkMast.getLocNo()); - wrkMast.setWrkSts(9L);//灏忚溅鍏ュ簱涓� + wrkMast.setWrkSts(5L);//21.鐢熸垚鍑哄簱浠诲姟 => 5.灏忚溅鎼繍涓� + wrkMast.setModiTime(new Date()); 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 + */ + private boolean locToLocExecuteStep2(WrkMast wrkMast) { + if (wrkMast.getWrkSts() == 21) {//21.鐢熸垚鍑哄簱浠诲姟 + if (wrkMast.getShuttleNo() == null) { + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣 + 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()) { + return false; + } + + //鍒ゆ柇灏忚溅鏄惁鍒拌揪婧愬簱浣� + if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { + //灏忚溅涓嶅湪婧愬簱浣嶄綅缃� + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣 + return false; + } + + //鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満杈撻�佺珯鐐� + BasDevp liftSta = shuttleDispatchUtils.getRecentLiftSta(shuttleThread.getSlave().getId()); + if (liftSta == null) { + return false;//娌℃湁鍙敤涓旂┖闂茬殑杈撻�佺珯鐐� + } + + //灏忚溅宸叉姷杈炬簮搴撲綅锛屽皢璐х墿鎼繍鍒拌緭閫佺珯鐐� + NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getSourceLocNo(), liftSta.getLocNo()); + if (result == null) {//璺緞璁$畻澶辫触 + return false; + } + + //鍒涘缓鍒嗛厤鍛戒护 + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_LOC_TO_LOC.id.shortValue());//搴撲綅绉昏浆妯″紡 + assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) + assignCommand.setCommands(result.getCommands());//杩愯鍛戒护 + assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣 + + wrkMast.setWrkSts(22L);//21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓� + wrkMast.setLiftNo(liftSta.getLiftNo());//璁剧疆鎻愬崌鏈哄彿 + wrkMast.setModiTime(new Date()); + 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 + */ + private boolean locToLocExecuteStep3(WrkMast wrkMast) { + Date now = new Date(); + if (wrkMast.getWrkSts() == 23) {//23.灏忚溅鎼繍瀹屾垚 + //鑾峰彇鎻愬崌鏈虹嚎绋� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); + if (liftThread == null) { + return false; + } + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol == null) { + return false; + } + + if (!liftProtocol.isIdle()) { + return false; + } + + //鎼滅储鏄惁鏈夊叾浠栦换鍔″崰鐢ㄤ簡鎻愬崌鏈猴紝濡傛灉鍗犵敤鎻愬崌鏈虹殑浠诲姟鍜屽綋鍓嶄换鍔$浉鍚岋紝鍒欒繍琛屾墽琛� + WrkMast wrkMast1 = wrkMastMapper.selectLiftWrkMast(liftProtocol.getLiftNo().intValue()); + if (wrkMast1 != null && wrkMast1.getWrkNo().intValue() != wrkMast.getWrkNo().intValue()) { + return false; + } + + //鑾峰彇婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐� + BasDevp sourceBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getSourceLocNo()), liftProtocol.getLiftNo().intValue()); + //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� + BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getLocNo()), liftProtocol.getLiftNo().intValue()); + if (sourceBasDevp == null || targetBasDevp == null) { + return false;//缂哄皯绔欑偣淇℃伅 + } + + //鑾峰彇鎻愬崌鏈哄懡浠� + NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, sourceBasDevp.getDevNo(), targetBasDevp.getDevNo(), 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.setShuttleNo(null);//娓呯┖灏忚溅鍙凤紝绛夎揣鐗╂惉杩愬畬鎴愬悗锛屽埌鐩爣妤煎眰閲嶆柊鎼滅储灏忚溅 + wrkMast.setModiTime(now); + 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 locToLocExecuteStep4(WrkMast wrkMast) { + if (wrkMast.getWrkSts() == 4) {//4.鎻愬崌鏈烘惉杩愬畬鎴� + //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� + BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getLocNo()), wrkMast.getLiftNo()); + if (targetBasDevp == null) { + return false;//缂哄皯绔欑偣淇℃伅 + } + + if (wrkMast.getShuttleNo() == null) { + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), targetBasDevp.getLocNo());//璋冨害灏忚溅鍒扮洰鏍囪緭閫佺珯鐐硅繘琛屽彇璐� + 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()) { + return false; + } + + //鍒ゆ柇灏忚溅鏄惁鍒拌揪鐩爣杈撻�佺珯鐐� + if (!shuttleProtocol.getCurrentLocNo().equals(targetBasDevp.getLocNo())) { + //灏忚溅涓嶅湪鐩爣杈撻�佺珯鐐� + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), targetBasDevp.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒扮洰鏍囪緭閫佺珯鐐硅繘琛屽彇璐� + return false; + } + + //灏忚溅宸叉姷杈剧洰鏍囪緭閫佺珯鐐癸紝灏嗚揣鐗╂惉杩愬埌鐩爣搴撲綅 + NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), targetBasDevp.getLocNo(), wrkMast.getLocNo()); + if (result == null) {//璺緞璁$畻澶辫触 + return false; + } + + //鍒涘缓鍒嗛厤鍛戒护 + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_LOC_TO_LOC.id.shortValue());//搴撲綅绉昏浆妯″紡 + assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) + assignCommand.setCommands(result.getCommands());//杩愯鍛戒护 + assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣 + + wrkMast.setWrkSts(5L);//4.鎻愬崌鏈烘惉杩愬畬鎴� => 5.灏忚溅鎼繍涓� + wrkMast.setModiTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) > 0) { + //涓嬪彂浠诲姟 + MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); + } + + return false; + } return true; } @@ -1666,6 +1455,7 @@ public void recErr() { try { this.recShuttleErr(); + this.recLiftErr(); } catch (Exception e) { News.error("recErr fail", e); } @@ -1677,27 +1467,27 @@ private void recShuttleErr() { Date now = new Date(); for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) { - // 鑾峰彇鍫嗗灈鏈轰俊鎭� - ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId()); + // 鑾峰彇鍥涘悜绌挎杞︿俊鎭� + NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId()); if (shuttleThread == null) { continue; } - ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); if (shuttleProtocol == null) { continue; } if (shuttleProtocol.getTaskNo() != 0) { //鏈変换鍔� - BasShuttleErrLog latest = basShuttleErrLogService.findLatestByTaskNo(shuttleSlave.getId(), shuttleProtocol.getTaskNo().intValue()); + BasShuttleErrLog latest = basShuttleErrLogService.findLatestByTaskNo(shuttleSlave.getId(), shuttleProtocol.getTaskNo()); // 鏈夊紓甯� if (latest == null) { - if (shuttleProtocol.getStatusErrorCode() != null && shuttleProtocol.getStatusErrorCode() > 0) { + if (shuttleProtocol.getErrState() != null && shuttleProtocol.getErrState() == 1) { WrkMast wrkMast = wrkMastMapper.selectById(shuttleProtocol.getTaskNo()); if (wrkMast == null) { continue; } - BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getStatusErrorCode().intValue()); + BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getErrCode()); String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName(); BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog( null, // 缂栧彿 @@ -1713,14 +1503,15 @@ wrkMast.getSourceStaNo(), // 婧愮珯 wrkMast.getSourceLocNo(), // 婧愬簱浣� wrkMast.getBarcode(), // 鏉$爜 - (int) shuttleProtocol.getStatusErrorCode(), // 寮傚父鐮� + shuttleProtocol.getErrCode(), // 寮傚父鐮� errName, // 寮傚父 1, // 寮傚父鎯呭喌 now, // 娣诲姞鏃堕棿 null, // 娣诲姞浜哄憳 now, // 淇敼鏃堕棿 null, // 淇敼浜哄憳 - "浠诲姟涓紓甯�" // 澶囨敞 + "浠诲姟涓紓甯�", // 澶囨敞 + JSON.toJSONString(shuttleProtocol) // 绯荤粺鐘舵�佹暟鎹� ); if (!basShuttleErrLogService.insert(basShuttleErrLog)) { News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName); @@ -1728,7 +1519,7 @@ } } else { // 寮傚父淇 - if (shuttleProtocol.getStatusErrorCode() == null || shuttleProtocol.getStatusErrorCode() == 0) { + if (shuttleProtocol.getErrState() == null || shuttleProtocol.getErrState() == 0) { latest.setEndTime(now); latest.setUpdateTime(now); latest.setStatus(2); @@ -1738,50 +1529,135 @@ } } }else { - //鏃犱换鍔� - BasShuttleErrLog latest = basShuttleErrLogService.findLatest(shuttleSlave.getId()); +// //鏃犱换鍔� +// BasShuttleErrLog latest = basShuttleErrLogService.findLatest(shuttleSlave.getId()); +// // 鏈夊紓甯� +// if (shuttleProtocol.getStatusErrorCode() != null && shuttleProtocol.getStatusErrorCode() > 0) { +// // 璁板綍鏂板紓甯� +// if (latest == null || (latest.getErrCode() != shuttleProtocol.getStatusErrorCode().intValue())) { +// BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getStatusErrorCode().intValue()); +// String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName(); +// BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog( +// null, // 缂栧彿 +// null, // 宸ヤ綔鍙� +// now, // 鍙戠敓鏃堕棿 +// null, // 缁撴潫鏃堕棿 +// null, // 宸ヤ綔鐘舵�� +// null, // 鍏ュ嚭搴撶被鍨� +// shuttleSlave.getId(), // 鍥涘悜绌挎杞� +// null, // plc +// null, // 鐩爣搴撲綅 +// null, // 鐩爣绔� +// null, // 婧愮珯 +// null, // 婧愬簱浣� +// null, // 鏉$爜 +// (int)shuttleProtocol.getStatusErrorCode(), // 寮傚父鐮� +// errName, // 寮傚父 +// 1, // 寮傚父鎯呭喌 +// now, // 娣诲姞鏃堕棿 +// null, // 娣诲姞浜哄憳 +// now, // 淇敼鏃堕棿 +// null, // 淇敼浜哄憳 +// "鏃犱换鍔″紓甯�" // 澶囨敞 +// ); +// if (!basShuttleErrLogService.insert(basShuttleErrLog)) { +// News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName); +// } +// } +// // 鏃犲紓甯� +// } else { +// // 寮傚父淇 +// if (latest != null && latest.getStatus() == 1) { +// latest.setEndTime(now); +// latest.setUpdateTime(now); +// latest.setStatus(2); +// if (!basShuttleErrLogService.updateById(latest)) { +// News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId()); +// } +// } +// } + } + } + } + + /** + * 鎻愬崌鏈哄紓甯镐俊鎭褰� + */ + private void recLiftErr() { + Date now = new Date(); + 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.getTaskNo() != 0) { + //鏈変换鍔� + BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(liftSlave.getId(), liftProtocol.getTaskNo().intValue()); // 鏈夊紓甯� - if (shuttleProtocol.getStatusErrorCode() != null && shuttleProtocol.getStatusErrorCode() > 0) { - // 璁板綍鏂板紓甯� - if (latest == null || (latest.getErrCode() != shuttleProtocol.getStatusErrorCode().intValue())) { - BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getStatusErrorCode().intValue()); - String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName(); - BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog( + if (latest == null) { + if (liftProtocol.getDeviceError() != null && liftProtocol.getDeviceError()) { + WrkMast wrkMast = wrkMastMapper.selectById(liftProtocol.getTaskNo()); + if (wrkMast == null) { + continue; + } + + String errName = ""; + if (liftProtocol.getFrontOverrun()) { + errName = "鍓嶈秴闄�"; + } else if (liftProtocol.getBackOverrun()) { + errName = "鍚庤秴闄�"; + } else if (liftProtocol.getLeftOverrun()) { + errName = "宸﹁秴闄�"; + } else if (liftProtocol.getRightOverrun()) { + errName = "鍙宠秴闄�"; + } else if (liftProtocol.getOverHeight()) { + errName = "瓒呴珮"; + } else if (liftProtocol.getOverWeight()) { + errName = "瓒呴噸"; + } + + BasLiftErrLog basLiftErrLog = new BasLiftErrLog( null, // 缂栧彿 - null, // 宸ヤ綔鍙� + wrkMast.getWrkNo(), // 宸ヤ綔鍙� now, // 鍙戠敓鏃堕棿 null, // 缁撴潫鏃堕棿 - null, // 宸ヤ綔鐘舵�� - null, // 鍏ュ嚭搴撶被鍨� - shuttleSlave.getId(), // 鍥涘悜绌挎杞� + wrkMast.getWrkSts(), // 宸ヤ綔鐘舵�� + wrkMast.getIoType(), // 鍏ュ嚭搴撶被鍨� + liftSlave.getId(), // 鎻愬崌鏈� null, // plc - null, // 鐩爣搴撲綅 - null, // 鐩爣绔� - null, // 婧愮珯 - null, // 婧愬簱浣� - null, // 鏉$爜 - (int)shuttleProtocol.getStatusErrorCode(), // 寮傚父鐮� + wrkMast.getLocNo(), // 鐩爣搴撲綅 + wrkMast.getStaNo(), // 鐩爣绔� + wrkMast.getSourceStaNo(), // 婧愮珯 + wrkMast.getSourceLocNo(), // 婧愬簱浣� + wrkMast.getBarcode(), // 鏉$爜 + null, // 寮傚父鐮� errName, // 寮傚父 1, // 寮傚父鎯呭喌 now, // 娣诲姞鏃堕棿 null, // 娣诲姞浜哄憳 now, // 淇敼鏃堕棿 null, // 淇敼浜哄憳 - "鏃犱换鍔″紓甯�" // 澶囨敞 + "浠诲姟涓紓甯�", // 澶囨敞 + JSON.toJSONString(liftProtocol) // 绯荤粺鐘舵�佹暟鎹� ); - if (!basShuttleErrLogService.insert(basShuttleErrLog)) { - News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName); + if (!basLiftErrLogService.insert(basLiftErrLog)) { + News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", liftSlave.getId(), errName); } } - // 鏃犲紓甯� } else { // 寮傚父淇 - if (latest != null && latest.getStatus() == 1) { + if (liftProtocol.getDeviceError() == null || !liftProtocol.getDeviceError()) { latest.setEndTime(now); latest.setUpdateTime(now); latest.setStatus(2); - if (!basShuttleErrLogService.updateById(latest)) { - News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId()); + if (!basLiftErrLogService.updateById(latest)) { + News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", liftSlave.getId(), latest.getId()); } } } @@ -2235,6 +2111,11 @@ return false; } + //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻 + if (shuttleProtocol.getToken() != 0) { + return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟 + } + if (Utils.getLev(wrkMast.getLocNo()) == shuttleProtocol.getPoint().getZ()) { //鐩爣搴撲綅鍜屽皬杞﹀簱浣嶅浜庡悓涓�妤煎眰锛岄渶瑕侀�氳繃鎻愬崌鏈鸿皟搴� return true;//鐩存帴杩涘叆108.灏忚溅绉诲姩涓� @@ -2313,6 +2194,7 @@ wrkMast.setWrkSts(102L);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 101.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 102.灏忚溅鍒版彁鍗囨満涓� wrkMast.setLiftNo(basLift.getLiftNo());//鎻愬崌鏈哄彿(閿佸畾鎻愬崌鏈洪槻姝㈣鍏朵粬浠诲姟鎶㈠崰) wrkMast.setModiTime(now); + shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗� if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); @@ -2343,6 +2225,10 @@ } if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { return false; + } + //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰� + if (liftProtocol.getToken() != 0) { + return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔� } //鑾峰彇鍥涘悜绌挎杞︾嚎绋� @@ -2384,6 +2270,7 @@ wrkMast.setWrkSts(104L);//鎻愬崌鏈烘惉杩愪腑 103.灏忚溅鍒版彁鍗囨満瀹屾垚 ==> 104.鎻愬崌鏈烘惉杩愪腑 wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤 wrkMast.setModiTime(now); + liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗� if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); @@ -2417,6 +2304,11 @@ return false; } + //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠浠诲姟 + if (liftProtocol.getToken() != wrkMast.getWrkNo()) { + return false; + } + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { @@ -2429,6 +2321,11 @@ //灏忚溅澶勪簬绌洪棽鐘舵�� if (!shuttleProtocol.isIdleNoCharge()) { + return false; + } + + //鍒ゆ柇灏忚溅浠ょ墝鏄惁涓哄綋鍓嶄换鍔� + if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) { return false; } @@ -2484,6 +2381,15 @@ //灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 107.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 108.灏忚溅绉诲姩涓� if (wrkMast.getWrkSts() == 107) { + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); + if (liftThread == null) { + return false; + } + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol == null) { + return false; + } + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { @@ -2496,6 +2402,11 @@ //灏忚溅澶勪簬绌洪棽鐘舵�� if (!shuttleProtocol.isIdleNoCharge()) { + return false; + } + + //鍒ゆ柇灏忚溅浠ょ墝鏄惁涓哄綋鍓嶄换鍔� + if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) { return false; } @@ -2534,6 +2445,7 @@ wrkMast.setWrkSts(108L);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 107.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 108.灏忚溅绉诲姩涓� wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� wrkMast.setModiTime(now); + liftProtocol.setToken(0);//閲婃斁鎻愬崌鏈轰护鐗� if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); -- Gitblit v1.9.1