From 4e1a8e484888b3d3f28dc9629904e6e54d90ebc5 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期五, 28 七月 2023 16:26:40 +0800 Subject: [PATCH] 穿梭车命令封装 --- src/main/java/com/zy/asrs/entity/BasShuttle.java | 14 src/main/java/com/zy/core/model/command/ShuttleRedisCommand.java | 4 src/main/java/com/zy/common/model/NyShuttleOperaResult.java | 20 src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java | 2 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 26 src/main/java/com/zy/core/thread/ShuttleThread.java | 1338 +++++++++++++++----------------- src/main/java/com/zy/common/utils/NyShuttleOperaUtils.java | 85 ++ src/main/java/com/zy/asrs/utils/Utils.java | 14 src/main/java/com/zy/core/model/protocol/NyShuttleProtocol.java | 12 src/main/webapp/static/readStatus.json | 4 src/main/java/com/zy/asrs/controller/ShuttleController.java | 55 + src/main/java/com/zy/common/utils/NyHttpUtils.java | 19 src/main/java/com/zy/core/enums/ShuttleTaskModeType.java | 9 src/main/java/com/zy/core/model/command/NyShuttleHttpCommand.java | 5 src/main/java/com/zy/core/thread/NyShuttleThread.java | 708 ++++------------- src/main/webapp/views/shuttle.html | 69 16 files changed, 1,056 insertions(+), 1,328 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/ShuttleController.java b/src/main/java/com/zy/asrs/controller/ShuttleController.java index 1614b21..896319a 100644 --- a/src/main/java/com/zy/asrs/controller/ShuttleController.java +++ b/src/main/java/com/zy/asrs/controller/ShuttleController.java @@ -15,7 +15,10 @@ import com.zy.asrs.service.LocMastService; import com.zy.asrs.service.WrkMastService; import com.zy.asrs.utils.Utils; +import com.zy.common.model.NyShuttleOperaResult; import com.zy.common.service.CommonService; +import com.zy.common.utils.NyHttpUtils; +import com.zy.common.utils.NyShuttleOperaUtils; import com.zy.common.utils.RedisUtil; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; @@ -23,8 +26,8 @@ import com.zy.core.enums.*; import com.zy.core.model.ShuttleSlave; import com.zy.core.model.Task; +import com.zy.core.model.command.NyShuttleHttpCommand; import com.zy.core.model.command.ShuttleAssignCommand; -import com.zy.core.model.command.ShuttleCommand; import com.zy.core.model.command.ShuttleRedisCommand; import com.zy.core.model.protocol.NyShuttleProtocol; import com.zy.core.model.protocol.ShuttleProtocol; @@ -184,8 +187,8 @@ } ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class); ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand(); - List<ShuttleCommand> commands = assignCommand.getCommands(); - ShuttleCommand command = commands.get(commandStep); + List<NyShuttleHttpCommand> commands = assignCommand.getCommands(); + NyShuttleHttpCommand command = commands.get(commandStep); command.setComplete(complete != 0); redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand)); return R.ok(); @@ -266,6 +269,52 @@ assignCommand.setTaskNo((short) commonService.getWorkNo(3));//鑾峰彇浠诲姟鍙� assignCommand.setAuto(false);//鎵嬪姩妯″紡 + if (shuttleTaskModeType == ShuttleTaskModeType.TRANSPORT) { + //鎼繍璐х墿浠诲姟 + NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(shuttleSlave.getId(), assignCommand.getTaskNo().intValue(), shuttleProtocol.getCurrentLocNo(), param.getSourceLocNo(), param.getDistLocNo()); + if (result == null) { + throw new CoolException("璺緞璁$畻澶辫触"); + } + + assignCommand.setCommands(result.getCommands()); + assignCommand.setNodes(result.getNodes()); + } else if (shuttleTaskModeType == ShuttleTaskModeType.MOVE_LOC_NO) { + //绉诲姩鍒扮洰鏍囧簱浣� + NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleSlave.getId(), assignCommand.getTaskNo().intValue(), shuttleProtocol.getCurrentLocNo(), param.getDistLocNo()); + if (result == null) { + throw new CoolException("璺緞璁$畻澶辫触"); + } + + assignCommand.setCommands(result.getCommands()); + assignCommand.setNodes(result.getNodes()); + } else if (shuttleTaskModeType == ShuttleTaskModeType.PALLET_LIFT) { + //鎵樼洏椤跺崌 + NyShuttleHttpCommand command = NyHttpUtils.getPalletLiftCommand(shuttleSlave.getId(), assignCommand.getTaskNo().intValue(), true); + ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>(); + commands.add(command); + assignCommand.setCommands(commands); + } else if (shuttleTaskModeType == ShuttleTaskModeType.PALLET_DOWN) { + //鎵樼洏涓嬮檷 + NyShuttleHttpCommand command = NyHttpUtils.getPalletLiftCommand(shuttleSlave.getId(), assignCommand.getTaskNo().intValue(), false); + ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>(); + commands.add(command); + assignCommand.setCommands(commands); + } else if (shuttleTaskModeType == ShuttleTaskModeType.CHARGE) { + //鍏呯數寮�鍏� + NyShuttleHttpCommand command = NyHttpUtils.getChargeCommand(shuttleSlave.getId(), assignCommand.getTaskNo().intValue(), true); + ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>(); + commands.add(command); + assignCommand.setCommands(commands); + } else if (shuttleTaskModeType == ShuttleTaskModeType.RESET) { + //澶嶄綅 + shuttleProtocol.setTaskNo(0);//宸ヤ綔鍙锋竻绌� + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);//浠诲姟鐘舵��-绌洪棽 + shuttleProtocol.setPakMk(true);//浣滀笟鏍囪澶嶄綅 + return R.ok(); + } else { + throw new CoolException("鏈煡鍛戒护"); + } + if (MessageQueue.offer(SlaveType.Shuttle, shuttleSlave.getId(), new Task(3, assignCommand))) { return R.ok(); } else { diff --git a/src/main/java/com/zy/asrs/entity/BasShuttle.java b/src/main/java/com/zy/asrs/entity/BasShuttle.java index 06ef802..b005b22 100644 --- a/src/main/java/com/zy/asrs/entity/BasShuttle.java +++ b/src/main/java/com/zy/asrs/entity/BasShuttle.java @@ -243,13 +243,13 @@ // @ApiModelProperty(value= "褰撳墠鐨勮璧颁己鏈嶈礋杞界巼") //// @TableField("current_move_servo_load") // private Integer currentMoveServoLoad; -// -// /** -// * 灏忚溅杩愯閫熷害 -// */ -// @ApiModelProperty(value= "灏忚溅杩愯閫熷害") -//// @TableField("run_speed") -// private Integer runSpeed; + + /** + * 灏忚溅杩愯閫熷害 + */ + @ApiModelProperty(value= "灏忚溅杩愯閫熷害") + @TableField("run_speed") + private Integer runSpeed; /** * 鐗涚溂-宸ヤ綔妯″紡 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 1654b29..45518cf 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -785,7 +785,7 @@ if (commands == null) { continue;//鎵句笉鍒拌矾寰勭瓑寰呬笅涓�娆� } - assignCommand.setCommands(commands); +// assignCommand.setCommands(commands); //鍒嗛厤鐩爣搴撲綅 shuttleProtocol.setLocNo(wrkMast.getLocNo()); //鐩爣搴撲綅 @@ -811,7 +811,7 @@ shuttleProtocol.setLocNo(liftSiteLocNo); //鐩爣搴撲綅 assignCommand.setLocNo(liftSiteLocNo); - assignCommand.setCommands(commands); +// assignCommand.setCommands(commands); wrkMast.setWrkSts(5L);//灏忚溅杩佺Щ鐘舵�� } } else if (wrkMast.getWrkSts() == 8) { @@ -832,7 +832,7 @@ ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCode, distCode, 1600, runDirection, null, null, 500); commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶� - assignCommand.setCommands(commands); +// assignCommand.setCommands(commands); //鍒嗛厤鐩爣搴撲綅 shuttleProtocol.setLocNo(wrkMast.getLocNo()); //鐩爣搴撲綅 @@ -1240,7 +1240,7 @@ shuttleProtocol.setSourceLocNo(currentLocNo); //鐩爣搴撲綅 assignCommand.setLocNo(wrkMast.getSourceLocNo()); - assignCommand.setCommands(commands); +// assignCommand.setCommands(commands); wrkMast.setWrkSts(26L);//灏忚溅鎼繍涓� if (wrkMastMapper.updateById(wrkMast) > 0) { @@ -1274,7 +1274,7 @@ //鐩爣搴撲綅 assignCommand.setLocNo(liftSiteLocNo); - assignCommand.setCommands(commands); +// assignCommand.setCommands(commands); wrkMast.setWrkSts(22L);//灏忚溅杩佺Щ鐘舵�� if (wrkMastMapper.updateById(wrkMast) > 0) { @@ -1321,7 +1321,7 @@ shuttleProtocol.setSourceLocNo(liftSiteLocNo); //鐩爣搴撲綅 assignCommand.setLocNo(wrkMast.getSourceLocNo()); - assignCommand.setCommands(commands); +// assignCommand.setCommands(commands); wrkMast.setWrkSts(26L);//灏忚溅鎼繍涓� if (wrkMastMapper.updateById(wrkMast) > 0) { @@ -1872,7 +1872,7 @@ //鎵�闇�鍛戒护缁勫悎瀹屾瘯锛屾洿鏂版暟鎹簱锛屾彁浜ゅ埌绾跨▼鍘诲伐浣� LiftAssignCommand assignCommand = new LiftAssignCommand(); - assignCommand.setCommands(commands); +// assignCommand.setCommands(commands); assignCommand.setLiftNo(liftProtocol.getLiftNo()); assignCommand.setTaskNo(liftProtocol.getTaskNo()); if (wrkMastMapper.updateById(wrkMast) > 0) { @@ -2126,7 +2126,7 @@ shuttleProtocol.setLocNo(liftSiteLocNo); //鐩爣搴撲綅 assignCommand.setLocNo(liftSiteLocNo); - assignCommand.setCommands(commands); +// assignCommand.setCommands(commands); wrkMast.setWrkSts(5L);//灏忚溅杩佺Щ鐘舵�� if (wrkMastMapper.updateById(wrkMast) > 0) { @@ -2233,7 +2233,7 @@ //鍒嗛厤婧愬簱浣� shuttleProtocol.setSourceLocNo(wrkMast.getSourceLocNo()); - assignCommand.setCommands(commands); +// assignCommand.setCommands(commands); //鍒嗛厤鐩爣搴撲綅 shuttleProtocol.setLocNo(wrkMast.getLocNo()); //鐩爣搴撲綅 @@ -2751,7 +2751,7 @@ commands.add(command); //鎸囦护闆嗗垎閰� - assignCommand.setCommands(commands); +// assignCommand.setCommands(commands); wrkCharge.setWrkSts(56L);//鍏呯數涓姸鎬� if (wrkChargeMapper.updateById(wrkCharge) > 0) { @@ -2793,7 +2793,7 @@ assignCommand.setLocNo(chargeLocNo); //婧愬簱浣� assignCommand.setSourceLocNo(currentLocNo); - assignCommand.setCommands(commands); +// assignCommand.setCommands(commands); wrkCharge.setWrkSts(52L);//灏忚溅杩佺Щ鐘舵�� if (wrkChargeMapper.updateById(wrkCharge) > 0) { //涓嬪彂浠诲姟 @@ -2831,7 +2831,7 @@ wrkCharge.setWrkSts(54L);//鎻愬崌鏈烘惉杩愪腑 //鎵�闇�鍛戒护缁勫悎瀹屾瘯锛屾洿鏂版暟鎹簱锛屾彁浜ゅ埌绾跨▼鍘诲伐浣� LiftAssignCommand assignCommand = new LiftAssignCommand(); - assignCommand.setCommands(commands); +// assignCommand.setCommands(commands); assignCommand.setLiftNo(liftProtocol.getLiftNo()); assignCommand.setTaskNo(liftProtocol.getTaskNo()); if (wrkChargeMapper.updateById(wrkCharge) > 0) { @@ -2886,7 +2886,7 @@ commands.add(command); //鎸囦护闆嗗垎閰� - assignCommand.setCommands(commands); +// assignCommand.setCommands(commands); wrkCharge.setWrkSts(56L);//鍏呯數涓姸鎬� if (wrkChargeMapper.updateById(wrkCharge) > 0) { diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java index 3471267..041ec0a 100644 --- a/src/main/java/com/zy/asrs/utils/Utils.java +++ b/src/main/java/com/zy/asrs/utils/Utils.java @@ -23,8 +23,10 @@ import com.zy.core.model.Task; import com.zy.core.model.command.ShuttleAssignCommand; import com.zy.core.model.command.ShuttleCommand; +import com.zy.core.model.protocol.NyShuttleProtocol; import com.zy.core.model.protocol.ShuttleProtocol; import com.zy.core.properties.SlaveProperties; +import com.zy.core.thread.NyShuttleThread; import com.zy.core.thread.ShuttleThread; import java.text.DecimalFormat; @@ -420,24 +422,24 @@ } //鑾峰彇绌挎杞︽墍鍦ㄨ妭鐐逛綅缃� - ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, slave.getId()); + NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, slave.getId()); if (shuttleThread == null) { continue; } - ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); if (shuttleProtocol == null) { continue; } - if (shuttleProtocol.getLocNo() == null) { + if (shuttleProtocol.getCurrentLocNo() == null) { continue; } - if (lev != Utils.getLev(shuttleProtocol.getLocNo())) { + if (lev != Utils.getLev(shuttleProtocol.getCurrentLocNo())) { continue;//妤煎眰涓嶅悓 } - int[] xyPosition = NavigatePositionConvert.positionToXY(shuttleProtocol.getLocNo());//閫氳繃搴撲綅鍙疯幏鍙杧y鍧愭爣 + int[] xyPosition = NavigatePositionConvert.positionToXY(shuttleProtocol.getCurrentLocNo());//閫氳繃搴撲綅鍙疯幏鍙杧y鍧愭爣 list.add(xyPosition); } return list; @@ -601,7 +603,7 @@ return null; } - assignCommand.setCommands(commands); +// assignCommand.setCommands(commands); return assignCommand; } return null; diff --git a/src/main/java/com/zy/common/model/NyShuttleOperaResult.java b/src/main/java/com/zy/common/model/NyShuttleOperaResult.java new file mode 100644 index 0000000..e21e9bc --- /dev/null +++ b/src/main/java/com/zy/common/model/NyShuttleOperaResult.java @@ -0,0 +1,20 @@ +package com.zy.common.model; + +import com.zy.core.model.command.NyShuttleHttpCommand; +import lombok.Data; + +import java.util.List; + +@Data +//缁撴灉闆� +public class NyShuttleOperaResult { + //鍛戒护闆嗗悎 + private List<NyShuttleHttpCommand> commands; + //琛岃蛋璺緞闆嗗悎 + private List<NavigateNode> nodes; + + public NyShuttleOperaResult(List<NyShuttleHttpCommand> commands, List<NavigateNode> nodes) { + this.commands = commands; + this.nodes = nodes; + } +} \ No newline at end of file diff --git a/src/main/java/com/zy/common/utils/NyHttpUtils.java b/src/main/java/com/zy/common/utils/NyHttpUtils.java index 5c28076..fd22a84 100644 --- a/src/main/java/com/zy/common/utils/NyHttpUtils.java +++ b/src/main/java/com/zy/common/utils/NyHttpUtils.java @@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSONObject; import com.zy.common.model.NavigateNode; import com.zy.core.model.command.NyShuttleHttpCommand; +import com.zy.core.model.protocol.NyShuttleProtocol; + import java.util.*; /** @@ -52,8 +54,8 @@ HashMap<String, Object> body = new HashMap<>(); body.put("requestType", "move");//绉诲姩鍛戒护 body.put("taskId", wrkNo);//浠诲姟鍙� - body.put("start", start);//璧风偣 - body.put("target", target);//缁堢偣 + body.put("start", navigateNodeToPointNode(start));//璧风偣 + body.put("target", navigateNodeToPointNode(target));//缁堢偣 request.setBody(body); httpStandard.setRequest(request); @@ -68,8 +70,8 @@ HashMap<String, Object> body = new HashMap<>(); body.put("requestType", in ? "intoLift" : "outLift");//杩涘嚭鎻愬崌鏈� body.put("taskId", wrkNo);//浠诲姟鍙� - body.put("start", start);//璧风偣 - body.put("target", target);//缁堢偣 + body.put("start", navigateNodeToPointNode(start));//璧风偣 + body.put("target", navigateNodeToPointNode(target));//缁堢偣 request.setBody(body); httpStandard.setRequest(request); @@ -294,4 +296,13 @@ return null; } + //鍦板浘鑺傜偣杞崲鏅�氳妭鐐箈yz + public static NyShuttleProtocol.NyShuttlePointClass navigateNodeToPointNode(NavigateNode node) { + NyShuttleProtocol.NyShuttlePointClass point = new NyShuttleProtocol.NyShuttlePointClass(); + point.setX(node.getX()); + point.setY(node.getY()); + point.setZ(node.getZ()); + return point; + } + } diff --git a/src/main/java/com/zy/common/utils/NyShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/NyShuttleOperaUtils.java new file mode 100644 index 0000000..6fdcd57 --- /dev/null +++ b/src/main/java/com/zy/common/utils/NyShuttleOperaUtils.java @@ -0,0 +1,85 @@ +package com.zy.common.utils; + +import com.zy.asrs.utils.Utils; +import com.zy.common.model.NavigateNode; +import com.zy.common.model.NyShuttleOperaResult; +import com.zy.common.model.enums.NavigationMapType; +import com.zy.core.model.command.NyShuttleHttpCommand; +import java.util.ArrayList; +import java.util.List; + +/** + * 鐗涚溂鍥涘悜杞︽搷浣滃伐鍏风被 + * 姝ゅ伐鍏风被鍙浣滅敤浜庤幏鍙栧皬杞︾殑鍚勭被鍛戒护List锛岀Щ鍔ㄥ懡浠ゃ�佹惉杩愯揣鐗╁懡浠ゃ�佸浣嶅懡浠ょ瓑銆傚鍛戒护涓虹Щ鍔ㄥ懡浠わ紝杩樺皢杩斿洖琛岃蛋璺緞List + */ +public class NyShuttleOperaUtils { + + /** + * 璁$畻骞惰幏鍙栧皬杞︿粠璧风偣鈥斺�斾腑闂寸偣鈥斺�旂洰鏍囩偣涔嬮棿鎼繍璐х墿鍔ㄤ綔鍛戒护 + * @param shuttleNo 灏忚溅鍙� + * @param wrkNo 宸ヤ綔鍙� + * @param startPoint 璧风偣锛堝皬杞﹀綋鍓嶄綅缃級 + * @param middlePoint 涓棿鐐癸紙璐х墿浣嶇疆锛� + * @param targetPoint 鐩爣鐐癸紙璐х墿鐩爣浣嶇疆锛� + */ + public static NyShuttleOperaResult getShuttleTransportCommands(Integer shuttleNo, Integer wrkNo, String startPoint, String middlePoint, String targetPoint) { + //璁$畻璧风偣鍒颁腑闂寸偣鍛戒护 + NyShuttleOperaResult result1 = getStartToTargetCommands(shuttleNo, wrkNo, startPoint, middlePoint); + //璁$畻涓棿鐐瑰埌鐩爣鐐瑰懡浠� + NyShuttleOperaResult result2 = getStartToTargetCommands(shuttleNo, wrkNo, middlePoint, targetPoint); + if (result1 == null || result2 == null) { + //涓や釜璁$畻缁撴灉蹇呴』涓嶄负绌猴紝鍚﹀垯璁$畻澶辫触 + return null; + } + + //琛岃蛋璺緞 + ArrayList<NavigateNode> nodes = new ArrayList<>(); + nodes.addAll(result1.getNodes()); + nodes.addAll(result2.getNodes()); + + //鍛戒护闆嗗悎 + ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>(); + commands.addAll(result1.getCommands()); + //褰撳皬杞﹁璧板埌涓棿鐐瑰悗锛岄渶瑕佷笅鍙戜竴鏉¢《鍗囧懡浠ゅ皢璐х墿杩涜鎼繍 + commands.add(NyHttpUtils.getPalletLiftCommand(shuttleNo, wrkNo, true)); + commands.addAll(result2.getCommands()); + //褰撳皬杞﹁璧板埌鐩爣鐐瑰悗锛岄渶瑕佷笅鍙戜竴鏉′笅闄嶅懡浠ゅ皢璐х墿鏀剧疆 + commands.add(NyHttpUtils.getPalletLiftCommand(shuttleNo, wrkNo, false)); + return result(commands, nodes); + } + + /** + * 鑾峰彇璧风偣鍒扮洰鏍囩偣琛岃蛋鍛戒护 + */ + public static NyShuttleOperaResult getStartToTargetCommands(Integer shuttleNo, Integer wrkNo, String startPoint, String targetPoint) { + //璁$畻璧风偣鍒扮洰鏍囩偣琛岃蛋鑺傜偣 + List<NavigateNode> calc = NavigateUtils.calc(startPoint, targetPoint, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleNo, Utils.getLev(startPoint))); + if (calc == null) { + return null; + } + + //鍛戒护闆嗗悎 + ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>(); + + //鑾峰彇鍒嗘璺緞 + ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc); + //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 + for (ArrayList<NavigateNode> nodes : data) { + //寮�濮嬭矾寰� + NavigateNode startPath = nodes.get(0); + //鐩爣璺緞 + NavigateNode targetPath = nodes.get(nodes.size() - 1); + //鑾峰彇绉诲姩鍛戒护 + NyShuttleHttpCommand moveCommand = NyHttpUtils.getMoveCommand(shuttleNo, wrkNo, startPath, targetPath); + commands.add(moveCommand); + } + + return result(commands, calc); + } + + //杩斿洖缁撴灉闆� + public static NyShuttleOperaResult result(List<NyShuttleHttpCommand> commands, List<NavigateNode> nodes) { + return new NyShuttleOperaResult(commands, nodes); + } + +} diff --git a/src/main/java/com/zy/core/enums/ShuttleTaskModeType.java b/src/main/java/com/zy/core/enums/ShuttleTaskModeType.java index 340dad8..27a7858 100644 --- a/src/main/java/com/zy/core/enums/ShuttleTaskModeType.java +++ b/src/main/java/com/zy/core/enums/ShuttleTaskModeType.java @@ -7,10 +7,10 @@ PAK_OUT(2, "鍑哄簱"), PALLET_LIFT(3, "鎵樼洏椤跺崌"), PALLET_DOWN(4, "鎵樼洏涓嬮檷"), - MOVE_LEFT(5, "宸︾Щ"), - MOVE_RIGHT(6, "鍙崇Щ"), - MOVE_TOP(7, "鍓嶇Щ"), - MOVE_BOTTOM(8, "鍚庣Щ"), + X_NEGATIVE(5, "X-鏂瑰悜"), + X_POSITIVE(6, "X+鏂瑰悜"), + Y_POSITIVE(7, "Y+鏂瑰悜"), + Y_NEGATIVE(8, "Y-鏂瑰悜"), RESET(9, "鐘舵�佸浣�"), SEARCH_LEFT(10, "姝f柟鍚�(鍙�)瀵诲簱浣�"), SEARCH_RIGHT(11, "璐熸柟鍚�(宸�)瀵诲簱浣�"), @@ -20,6 +20,7 @@ CHARGE(15, "鍏呯數"), MOVE_LIFT(16, "绉诲姩鍒版彁鍗囨満"), AVOID(17, "閬胯浠诲姟"), + TRANSPORT(18, "鎼繍浠诲姟"), ; public Integer id; diff --git a/src/main/java/com/zy/core/model/command/NyShuttleHttpCommand.java b/src/main/java/com/zy/core/model/command/NyShuttleHttpCommand.java index 172c49d..e7ffc1e 100644 --- a/src/main/java/com/zy/core/model/command/NyShuttleHttpCommand.java +++ b/src/main/java/com/zy/core/model/command/NyShuttleHttpCommand.java @@ -36,5 +36,10 @@ } + /** + * 鍛戒护鏄惁瀹屾垚,榛樿false鏈畬鎴� + */ + private Boolean complete = false; + } diff --git a/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java b/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java index ce8a9e4..f248396 100644 --- a/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java +++ b/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java @@ -46,7 +46,7 @@ /** * 鍛戒护list */ - private List<ShuttleCommand> commands = new ArrayList<>(); + private List<NyShuttleHttpCommand> commands = new ArrayList<>(); /** * 鏄惁鑷姩锛宼rue锛氳嚜鍔ㄦā寮忥紝false锛氭墜鍔ㄦā寮� diff --git a/src/main/java/com/zy/core/model/command/ShuttleRedisCommand.java b/src/main/java/com/zy/core/model/command/ShuttleRedisCommand.java index b139389..8305af3 100644 --- a/src/main/java/com/zy/core/model/command/ShuttleRedisCommand.java +++ b/src/main/java/com/zy/core/model/command/ShuttleRedisCommand.java @@ -3,7 +3,6 @@ import lombok.Data; import java.io.Serializable; -import java.util.List; /** * 鍥涘悜绌挎杞﹀懡浠�-瀛樺偍鍦╮edis @@ -22,9 +21,6 @@ //鍛戒护 private ShuttleAssignCommand assignCommand; - - //鍙戠敓閿欒鏃跺皾璇曟墽琛岀殑鎸囦护锛屼紭鍏堢骇鏈�楂� - private List<ShuttleCommand> errorCommands; //鎻愬崌鏈哄畨鍏ㄩ攣瀹氭爣璁� private Boolean liftSecurityMk = false; diff --git a/src/main/java/com/zy/core/model/protocol/NyShuttleProtocol.java b/src/main/java/com/zy/core/model/protocol/NyShuttleProtocol.java index 7169ca8..f6cd422 100644 --- a/src/main/java/com/zy/core/model/protocol/NyShuttleProtocol.java +++ b/src/main/java/com/zy/core/model/protocol/NyShuttleProtocol.java @@ -5,7 +5,6 @@ import com.zy.asrs.service.BasShuttleService; import com.zy.common.utils.NavigatePositionConvert; import com.zy.core.News; -import com.zy.core.enums.ShuttleErrorCodeType; import com.zy.core.enums.ShuttleProtocolStatusType; import com.zy.core.enums.ShuttleStatusType; import com.zy.core.model.command.ShuttleAssignCommand; @@ -55,6 +54,11 @@ * 鐩爣搴撲綅 */ private String locNo; + + /** + * 灏忚溅褰撳墠搴撲綅鍙� + */ + private String currentLocNo; /** * 浣滀笟鏍囪 @@ -381,6 +385,12 @@ return JSON.toJSONString(this.getCoord()); } + public void setPoint(NyShuttlePointClass point) { + String locNo = NavigatePositionConvert.xyzToLocNo(point.getX(), point.getY(), point.getZ()); + this.point = point; + this.currentLocNo = locNo; + } + // 鏄惁澶勪簬绌洪棽寰呭懡鐘舵�� public Boolean isIdle() { boolean res = this.free == ShuttleStatusType.IDLE.id diff --git a/src/main/java/com/zy/core/thread/NyShuttleThread.java b/src/main/java/com/zy/core/thread/NyShuttleThread.java index 44bcc59..f5c3500 100644 --- a/src/main/java/com/zy/core/thread/NyShuttleThread.java +++ b/src/main/java/com/zy/core/thread/NyShuttleThread.java @@ -1,5 +1,6 @@ package com.zy.core.thread; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.core.common.DateUtils; import com.core.common.SpringUtils; @@ -11,12 +12,15 @@ import com.zy.core.ThreadHandler; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; +import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.*; import com.zy.core.model.ShuttleSlave; import com.zy.core.model.Task; import com.zy.core.model.command.NyShuttleHttpCommand; import com.zy.core.model.command.ShuttleAssignCommand; import com.zy.core.model.command.ShuttleCommand; +import com.zy.core.model.command.ShuttleRedisCommand; +import com.zy.core.model.protocol.LiftProtocol; import com.zy.core.model.protocol.NyShuttleProtocol; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -24,6 +28,7 @@ import java.text.MessageFormat; import java.util.ArrayList; import java.util.Date; +import java.util.List; /** * 鐗涚溂鍥涘悜绌挎杞︾嚎绋� @@ -58,7 +63,7 @@ break; // 鍐欏叆鏁版嵁 case 2: - write((ShuttleCommand) task.getData()); + write((NyShuttleHttpCommand) task.getData()); break; //涓嬪彂浠诲姟 case 3: @@ -82,7 +87,7 @@ && shuttleProtocol.getTaskNo() != 0 && shuttleProtocol.getPakMk()) { //鎵ц涓嬩竴姝ユ寚浠� - executeWork(shuttleProtocol.getTaskNo()); + executeWork(shuttleProtocol.getTaskNo().shortValue()); } } catch (Exception e) { e.printStackTrace(); @@ -242,7 +247,7 @@ } - private boolean write(ShuttleCommand command){ + private boolean write(NyShuttleHttpCommand command){ if (null == command) { News.error("鍥涘悜绌挎杞﹀啓鍏ュ懡浠や负绌�"); return false; @@ -258,558 +263,175 @@ News.error("鍥涘悜绌挎杞︿笉瀛樺湪"); return false; } -// command.setShuttleNo(slave.getId().shortValue()); -// short[] array = getCommandArr(command);//鑾峰彇鍛戒护鎶ユ枃 -// OperateResult result = modbusTcpNet.Write("0", array); -// if (result != null && result.IsSuccess) { -// News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); -// OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); -// -// try { -// Thread.sleep(3000);//鍛戒护涓嬪彂鍚庝紤鐪� -// } catch (InterruptedException e) { -// throw new RuntimeException(e); -// } -// -// for (int i = 0; i < 5; i++) { -// if (command.getCommandWord().intValue() == 5 || command.getCommandWord().intValue() == 6) { -// break;//鍏呯數寮�鍏冲拰绯荤粺澶嶄綅涓嶉渶瑕侀噸鍙戞満鍒� -// } -// readStatus();//閲嶆柊璇诲彇鐘舵�� -// if (shuttleProtocol.getBusyStatusType().equals(ShuttleStatusType.BUSY)) { -// break; -// } -// -// //鍒ゆ柇鏄惁杩愯涓紝濡備笉杩愯锛岄噸鏂颁笅鍙戝懡浠� -// result = modbusTcpNet.Write("0", array); -// News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙慬id:{}] >>>>> {},娆℃暟锛歿}", slave.getId(), JSON.toJSON(command), i); -// OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2},娆℃暟锛歿}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command), i)); -// try { -// Thread.sleep(300);//鍛戒护涓嬪彂鍚庝紤鐪� -// } catch (InterruptedException e) { -// throw new RuntimeException(e); -// } -// } -// -// return true; -// } else { -// OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ洓鍚戠┛姊溅plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}],娆℃暟锛歿}", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); -// News.error("鍐欏叆鍥涘悜绌挎杞lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); -// return false; -// } - return false; + //鍙戝嚭璇锋眰 + JSONObject result = NyHttpUtils.requestCommand(command); + if (result == null) { + return false;//璇锋眰澶辫触 + } + + return true; } //鍒嗛厤浠诲姟 private void assignWork(ShuttleAssignCommand assignCommand) { -// ShuttleRedisCommand redisCommand = new ShuttleRedisCommand(); -// -// if (!assignCommand.getAuto()) { -// List<NavigateNode> allNode = new ArrayList<>(); -// List<ShuttleCommand> commands = new ArrayList<>(); -// LocMastService locMastService = SpringUtils.getBean(LocMastService.class); -// BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class); -// NavigateMapData navigateMapData; -// -// //鑾峰彇灏忚溅绉诲姩閫熷害 -// BasShuttle basShuttle = shuttleService.selectById(slave.getId()); -// Integer runSpeed = 1000; -// if (basShuttle != null) { -// Integer runSpeed1 = basShuttle.getRunSpeed(); -// if (runSpeed1 != null) { -// runSpeed = runSpeed1; -// } -// } -// -// LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); -// LiftProtocol liftProtocol = liftThread.getLiftProtocol(); -// -// switch (assignCommand.getTaskMode()) { -// case 1://鍏ュ簱 -// case 2://鍑哄簱 -// //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞 -// //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护 -// LocMast currentLocMast = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString()); -// List<NavigateNode> firstMastResult = NavigateUtils.calc(currentLocMast.getLocNo(), assignCommand.getSourceLocNo(), NavigationMapType.NORMAL.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(currentLocMast.getLocNo())));//灏忚溅鍒颁腑鐐癸紝澶勪簬鏃犺揣鐘舵�侊紝浣跨敤姝e父閫氶亾鍦板浘 -// boolean checkResult = Utils.checkShuttlePath(firstMastResult, shuttleProtocol.getShuttleNo().intValue()); -// if (firstMastResult != null && checkResult) { -// allNode.addAll(firstMastResult);//灏嗚妭鐐硅繘琛屼繚瀛� -// //鑾峰彇鍒嗘璺緞 -// ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(firstMastResult); -// //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 -// for (ArrayList<NavigateNode> nodes : data) { -// //寮�濮嬭矾寰� -// NavigateNode startPath = nodes.get(0); -// //涓棿璺緞 -// NavigateNode middlePath = nodes.get(nodes.size() - 2); -// //鐩爣璺緞 -// NavigateNode endPath = nodes.get(nodes.size() - 1); -// Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� -// Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� -// -// //姝e父绉诲姩鍛戒护 -// Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 -// Short middleCode = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());//鐩爣浜岀淮鐮� -// Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());//鐩爣浜岀淮鐮� -// commands.add(getMoveCommand(startCode, distCode, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCode, middleToDistDistance, runSpeed)); -// } -// -// //鎵樼洏椤跺崌 -// commands.add(getPalletCommand((short) 1)); -// }else { -// //娌℃湁璁$畻鍒拌矾寰勶紝鍙兘瀛樺湪灏忚溅浣嶇疆灏辨槸璧风偣浣嶇疆 -// if (currentLocMast.getLocNo().equals(assignCommand.getSourceLocNo())) { -// //灏忚溅浣嶇疆灏辨槸璧风偣浣嶇疆锛屾棤闇�绉诲姩锛岀洿鎺ラ《鍗� -// //鎵樼洏椤跺崌 -// commands.add(getPalletCommand((short) 1)); -// } -// } -// -// //璁$畻涓偣鍒扮粓鐐硅矾寰� -// List<NavigateNode> secMastResult = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getLocNo(), NavigationMapType.DFX.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(assignCommand.getSourceLocNo())));//灏忚溅浠庝腑鐐瑰埌缁堢偣锛屽浜庢湁璐х姸鎬侊紝浣跨敤DFX鍦板浘 -// boolean checkResult2 = Utils.checkShuttlePath(secMastResult, shuttleProtocol.getShuttleNo().intValue()); -// if (secMastResult != null && checkResult2) { -// allNode.addAll(secMastResult);//灏嗚妭鐐硅繘琛屼繚瀛� -// //鑾峰彇鍒嗘璺緞 -// ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(secMastResult); -// //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 -// for (ArrayList<NavigateNode> nodes : data) { -// //寮�濮嬭矾寰� -// NavigateNode startPath = nodes.get(0); -// //涓棿璺緞 -// NavigateNode middlePath = nodes.get(nodes.size() - 2); -// //鐩爣璺緞 -// NavigateNode endPath = nodes.get(nodes.size() - 1); -// Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� -// Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� -// -// //姝e父绉诲姩鍛戒护 -// Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 -// Short middleCode = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());//涓棿浜岀淮鐮� -// Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());//鐩爣浜岀淮鐮� -// commands.add(getMoveCommand(startCode, distCode, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCode, middleToDistDistance, runSpeed)); -// } -// -// //鎵樼洏涓嬮檷 -// commands.add(getPalletCommand((short) 2)); -// } -// -// if (firstMastResult == null || secMastResult == null) { -// throw new CoolException(MessageFormat.format( "鍥涘悜绌挎杞﹀嚭鍏ュ簱璺緞鎼滅储澶辫触 ===>> [id:{0}] [ip:{1}] [port:{2}]", slave.getId(), slave.getIp(), slave.getPort())); -// } -// -// navigateMapData = new NavigateMapData(Utils.getLev(currentLocMast.getLocNo())); -// //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� -// navigateMapData.writeNavigateNodeToRedisMap(firstMastResult, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� -// navigateMapData.writeNavigateNodeToRedisMap(secMastResult, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� -// break; -// case 3://鎵樼洏椤跺崌 -// case 4://鎵樼洏涓嬮檷 -// commands.add(getPalletCommand(assignCommand.getTaskMode() == 3 ? (short) 1 : (short) 2)); -// break; -// case 5://寮哄埗宸︾Щ -// commands.add(getForceMoveCommand((short) 2)); -// break; -// case 6://寮哄埗鍙崇Щ -// commands.add(getForceMoveCommand((short) 1)); -// break; -// case 7://寮哄埗涓婄Щ -// commands.add(getForceMoveCommand((short) 3)); -// break; -// case 8://寮哄埗涓嬬Щ -// commands.add(getForceMoveCommand((short) 4)); -// break; -// case 9://鐘舵�佸浣� -// ShuttleCommand reset = getResetCommand(); -// commands.add(reset); -// break; -// case 10://姝f柟鍚�(鍙�)瀵诲簱浣� -// commands.add(getFindLocCommand((short) 1)); -// break; -// case 11://璐熸柟鍚�(宸�)瀵诲簱浣� -// commands.add(getFindLocCommand((short) 2)); -// break; -// case 12://鍚戞鏂瑰悜(鍓�)瀵诲簱浣� -// commands.add(getFindLocCommand((short) 4)); -// break; -// case 13://鍚戣礋鏂瑰悜(鍚�)瀵诲簱浣� -// commands.add(getFindLocCommand((short) 3)); -// break; -// case 14://绉诲姩鍒扮洰鏍囧簱浣� -// String startQr = shuttleProtocol.getCurrentCode().toString();//璧峰浣嶇疆 -// //濡傛灉绌挎杞﹀湪鎻愬崌鏈哄唴锛岀Щ鍔ㄦ椂闇�瑕佸厛涓嬪彂鍑烘彁鍗囨満鍛戒护 -// if (liftProtocol.getBarcode().intValue() == shuttleProtocol.getCurrentCode().intValue()) { -// //绌挎杞﹀嚭鎻愬崌鏈� -// Short liftArrival = liftProtocol.getPositionArrivalFeedback();//鎻愬崌鏈轰綅缃弽棣� -// String liftSiteLocNo = Utils.liftArrivalToOutInStaLocNo(liftArrival); -// LocMast locMast1 = locMastService.selectById(liftSiteLocNo); -// ShuttleCommand moveCommand = getMoveCommand(liftProtocol.getBarcode(), Short.parseShort(locMast1.getQrCodeValue()), 1600, ShuttleRunDirection.BOTTOM.id, null, null, runSpeed); -// commands.add(moveCommand); -// -// //璧峰浣嶇疆淇敼涓烘彁鍗囨満鍙g珯鐐逛綅缃� -// startQr = locMast1.getQrCodeValue(); -// } -// -// LocMast locMast = locMastService.queryByQrCode(startQr); -// List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), assignCommand.getLocNo(), NavigationMapType.NONE.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(locMast.getLocNo())));//鎵嬪姩鍛戒护-绉诲姩鍛戒护锛屼娇鐢ㄦ棤杩囨护鍦板浘 -// boolean checkResult3 = Utils.checkShuttlePath(result, shuttleProtocol.getShuttleNo().intValue()); -// if (result != null && checkResult3) { -// //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� -// navigateMapData = new NavigateMapData(Utils.getLev(locMast.getLocNo())); -// navigateMapData.writeNavigateNodeToRedisMap(result, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� -// -// allNode.addAll(result);//灏嗚妭鐐硅繘琛屼繚瀛� -// //鑾峰彇鍒嗘璺緞 -// ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(result); -// //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 -// for (ArrayList<NavigateNode> nodes : data) { -// //寮�濮嬭矾寰� -// NavigateNode startPath = nodes.get(0); -// //涓棿璺緞 -// NavigateNode middlePath = nodes.get(nodes.size() - 2); -// //鐩爣璺緞 -// NavigateNode endPath = nodes.get(nodes.size() - 1); -// Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� -// Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� -// Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 -// Short middleCode = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());//涓棿浜岀淮鐮� -// Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());//鐩爣浜岀淮鐮� -// //姝e父绉诲姩鍛戒护 -// commands.add(getMoveCommand(startCode, distCode, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCode, middleToDistDistance, runSpeed)); -// } -// } -// break; -// case 15://鍏呯數寮�鍏� -// commands.add(getChargeSwitchCommand()); -// break; -// case 16://绉诲姩鍒版彁鍗囨満 -// LocMast locMast1 = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString()); -// int lev = Utils.getLev(locMast1.getLocNo());//绌挎杞﹀綋鍓嶉珮搴� -// String liftSiteLocNo = Utils.levToOutInStaLocNo(lev);//褰撳墠妤煎眰绔欑偣搴撲綅鍙� -// LocMast liftSitelocMast = locMastService.selectById(liftSiteLocNo); -// List<NavigateNode> result1 = NavigateUtils.calc(locMast1.getLocNo(), liftSiteLocNo, NavigationMapType.NONE.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(locMast1.getLocNo())));//绉诲姩鍒版彁鍗囨満锛屼娇鐢ㄦ棤杩囨护鍦板浘 -// boolean checkResult4 = Utils.checkShuttlePath(result1, shuttleProtocol.getShuttleNo().intValue()); -// Short endStartCode = null; -// if (result1 != null && checkResult4) { -// //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� -// navigateMapData = new NavigateMapData(Utils.getLev(locMast1.getLocNo())); -// navigateMapData.writeNavigateNodeToRedisMap(result1, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� -// -// allNode.addAll(result1);//灏嗚妭鐐硅繘琛屼繚瀛� -// //鑾峰彇鍒嗘璺緞 -// ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(result1); -// //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 -// for (ArrayList<NavigateNode> nodes : data) { -// //寮�濮嬭矾寰� -// NavigateNode startPath = nodes.get(0); -// //涓棿璺緞 -// NavigateNode middlePath = nodes.get(nodes.size() - 2); -// //鐩爣璺緞 -// NavigateNode endPath = nodes.get(nodes.size() - 1); -// Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� -// Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� -// Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 -// Short middleCode = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());//涓棿浜岀淮鐮� -// Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());//鐩爣浜岀淮鐮� -// endStartCode = distCode; -// //姝e父绉诲姩鍛戒护 -// commands.add(getMoveCommand(startCode, distCode, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCode, middleToDistDistance, runSpeed)); -// } -// } -// -// if (endStartCode == null && shuttleProtocol.getCurrentCode() == Short.parseShort(liftSitelocMast.getQrCodeValue())) { -// //绌挎杞﹀凡缁忓湪鎻愬崌鏈虹珯鐐瑰彛 -// endStartCode = shuttleProtocol.getCurrentCode(); -// } -// -// //澧炲姞绉诲姩杩涙彁鍗囨満鍛戒护 -// ShuttleCommand moveCommand = getMoveCommand(endStartCode, liftProtocol.getBarcode(), 1600, ShuttleRunDirection.TOP.id, null, null, runSpeed); -// commands.add(moveCommand); -// break; -// default: -// } -// assignCommand.setCommands(commands); -// assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist -// } -// -// redisCommand.setShuttleNo(assignCommand.getShuttleNo());//鍥涘悜绌挎杞﹀彿 -// redisCommand.setWrkNo(assignCommand.getTaskNo());//宸ヤ綔鍙� -// redisCommand.setCommandStep(0);//鍛戒护鎵ц姝ュ簭 -// redisCommand.setAssignCommand(assignCommand);//鍛戒护 -// redisCommand.setErrorCommands(new ArrayList<ShuttleCommand>());//鍙戠敓閿欒鏃跺皾璇曟墽琛岀殑鎸囦护锛屼紭鍏堢骇鏈�楂� -// shuttleProtocol.setTaskNo(assignCommand.getTaskNo()); -// shuttleProtocol.setAssignCommand(assignCommand); -// shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING); -// //浠诲姟鏁版嵁淇濆瓨鍒皉edis -// redisUtil.set("shuttle_wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand)); -// //鎵ц涓嬪彂浠诲姟 -// executeWork(assignCommand.getTaskNo()); + ShuttleRedisCommand redisCommand = new ShuttleRedisCommand(); + redisCommand.setShuttleNo(assignCommand.getShuttleNo());//鍥涘悜绌挎杞﹀彿 + redisCommand.setWrkNo(assignCommand.getTaskNo());//宸ヤ綔鍙� + redisCommand.setCommandStep(0);//鍛戒护鎵ц姝ュ簭 + redisCommand.setAssignCommand(assignCommand);//鍛戒护 + shuttleProtocol.setTaskNo(assignCommand.getTaskNo().intValue()); + shuttleProtocol.setAssignCommand(assignCommand); + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING); + //浠诲姟鏁版嵁淇濆瓨鍒皉edis + redisUtil.set("shuttle_wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand)); + //鎵ц涓嬪彂浠诲姟 + executeWork(assignCommand.getTaskNo()); } //鎵ц涓嬪彂鐨勬寚浠� - private boolean executeWork(Integer wrkNo) { -// //璇诲彇redis鏁版嵁 -// if (wrkNo == null) { -// return false; -// } -// -// WrkMastService wrkMastService = SpringUtils.getBean(WrkMastService.class); -// -// Object o = redisUtil.get("shuttle_wrk_no_" + wrkNo); -// if (o == null) { -// return false; -// } -// ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class); -// -// if (shuttleProtocol.getBusyStatus().intValue() == ShuttleStatusType.BUSY.id) { -// return false;//灏忚溅鐘舵�佸繖 -// } -// -// if (!checkLiftStation(wrkNo)) {//妫�娴嬫槸鍚︽湁鎻愬崌鏈虹珯鐐癸紝鏈夊垯璋冨害鎻愬崌鏈� -// return false; -// } -// -// LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); -// LiftProtocol liftProtocol = liftThread.getLiftProtocol(); -// -// List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands(); -// //褰撳墠姝ュ簭 -// int commandStep = redisCommand.getCommandStep(); -// //path璺緞鏁扮洰 -// int size = commands.size(); -// ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand(); -// -// if (commandStep != 0) { -// //鍒ゆ柇涓婁竴鏉℃寚浠ゆ槸鍚﹀畬鎴� -// ShuttleCommand command = commands.get(commandStep - 1); -// if (command.getCommandWord().intValue() == 1) { -// //绉诲姩鍛戒护 -// if (command.getDistCodeNum().intValue() == shuttleProtocol.getCurrentCode().intValue()) { -// //涓婁竴鏉℃寚浠ょ殑鐩爣浣嶇疆鍜屽綋鍓嶅皬杞︿綅缃浉鍚岋紝鍒欒瀹氫笂涓�鏉′换鍔″畬鎴� -// command.setComplete(true); -// -// //涓婁竴鏉℃寚浠よ捣鐐规槸鎻愬崌鏈轰簩缁寸爜锛屽垯娓呴浂鎻愬崌鏈轰换鍔″彿 -// if (command.getStartCodeNum().intValue() == liftProtocol.getBarcode().intValue()) { -// //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庣┖闂� -// if (liftProtocol.isIdleNoTask() && liftProtocol.getTaskNo().intValue() == redisCommand.getWrkNo().intValue()) { -// liftProtocol.setTaskNo((short) 0);//娓呯┖浠诲姟鍙� -// WrkMast wrkMast = wrkMastService.selectById(wrkNo); -// if (wrkMast != null) { -// wrkMast.setLiftNo(null);//瑙i攣鎻愬崌鏈� -// wrkMastService.updateById(wrkMast); -// } -// } -// } -// -// //鍏ュ簱鍛戒护锛屽綋灏忚溅鍙栧畬璐у悗锛岄渶瑕佸皢鎻愬崌鏈洪噴鏀� -// if (assignCommand.getTaskMode().intValue() == ShuttleTaskModeType.PAK_IN.id) { -// //鍒ゆ柇涓婁竴鏉℃寚浠ょ殑璧风偣鏄惁涓鸿緭閫佺珯鐐逛笖鐩爣鐐逛笉鏄彁鍗囨満鍐呴儴浜岀淮鐮� -// Short startCodeNum = command.getStartCodeNum(); -// BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); -// BasDevp basDevp = basDevpService.queryByQrCode(startCodeNum.intValue());//鐩爣绔欑偣 -// if (basDevp != null && command.getDistCodeNum().intValue() != liftProtocol.getBarcode().intValue()) { -// //涓婁竴鏉℃寚浠ょ殑璧风偣涓鸿緭閫佺珯鐐逛笖鐩爣鐐逛笉鏄彁鍗囨満鍐呴儴浜岀淮鐮� -// //姝ゆ椂灏忚溅搴旇宸茬粡绂诲紑杈撻�佺珯鐐癸紝鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂蹭笖鏈夊伐浣滃彿 -// if (liftProtocol.isIdleNoTask() && liftProtocol.getTaskNo().intValue() == redisCommand.getWrkNo().intValue()) { -// liftProtocol.setTaskNo((short) 0);//娓呯┖浠诲姟鍙� -// WrkMast wrkMast = wrkMastService.selectById(wrkNo); -// if (wrkMast != null) { -// wrkMast.setLiftNo(null);//瑙i攣鎻愬崌鏈� -// wrkMastService.updateById(wrkMast); -// } -// } -// } -// } -// -// } -// } else if (command.getCommandWord().intValue() == 2) { -// //鎵樼洏椤跺崌鍛戒护 -// if (command.getPalletLift().intValue() == 1) { -// //椤跺崌 -// //鍒ゆ柇鏄惁椤跺崌鍒颁綅 -// if (shuttleProtocol.getPlcOutputLift()) { -// //鑷姩妯″紡 -// if (assignCommand.getAuto() && shuttleProtocol.getPlcInputStatus().intValue() == 1) { -// //椤跺崌鍒颁綅,涓旀墭鐩橀浄杈炬湁鐗╋紝璁ゅ畾浠诲姟瀹屾垚 -// command.setComplete(true); -// }else { -// //鎵嬪姩妯″紡锛屼笉鍒ゆ柇鎵樼洏闆疯揪 -// //椤跺崌鍒颁綅锛岃瀹氫换鍔″畬鎴� -// command.setComplete(true); -// } -// } -// }else { -// //涓嬮檷 -// //鍒ゆ柇鏄惁涓嬮檷鍒颁綅锛屽垽鏂墭鐩橀浄杈炬槸鍚︽棤鐗� -// if (!shuttleProtocol.getPlcOutputLift() && !shuttleProtocol.getPlcOutputTransfer()) { -// //鑷姩妯″紡 -// if (assignCommand.getAuto() && shuttleProtocol.getPlcInputStatus().intValue() == 0) { -// //涓嬮檷鍒颁綅锛屼笖鎵樼洏闆疯揪鏃犵墿锛岃瀹氫换鍔″畬鎴� -// command.setComplete(true); -// }else { -// //鎵嬪姩妯″紡锛屼笉鍒ゆ柇鎵樼洏闆疯揪 -// //涓嬮檷鍒颁綅锛屼笖鎵樼洏闆疯揪鏃犵墿锛岃瀹氫换鍔″畬鎴� -// command.setComplete(true); -// } -// } -// } -// } else if (command.getCommandWord().intValue() == 5) { -// //鍏呯數鍛戒护 -// //鍒ゆ柇灏忚溅鍏呯數寮�鍏� -// if (shuttleProtocol.getPlcOutputCharge()) { -// //姝e父鍏呯數锛岃瀹氫换鍔″畬鎴� -// command.setComplete(true); + private boolean executeWork(Short wrkNo) { + //璇诲彇redis鏁版嵁 + if (wrkNo == null) { + return false; + } + + WrkMastService wrkMastService = SpringUtils.getBean(WrkMastService.class); + + Object o = redisUtil.get("shuttle_wrk_no_" + wrkNo); + if (o == null) { + return false; + } + ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class); + List<NyShuttleHttpCommand> commands = redisCommand.getAssignCommand().getCommands(); + ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand(); + //褰撳墠姝ュ簭 + int commandStep = redisCommand.getCommandStep(); + if (commands.size() == 0) { + return false; + } + //鍙栧嚭鍛戒护 + NyShuttleHttpCommand command = commands.get(commandStep); + + if (shuttleProtocol.getFree() == ShuttleStatusType.BUSY.id) { + return false;//灏忚溅鐘舵�佸繖锛岀姝㈡墽琛屽懡浠� + } + + //妫�娴嬪皬杞︽槸鍚﹁杩涙彁鍗囨満锛屽闇�瑕佽繘鎻愬崌鏈哄垯璋冨害鎻愬崌鏈� + if (!checkLiftStation(wrkNo)) { + return false; + } + + //妫�鏌ヨ矾寰勬槸鍚﹀彲琛岃蛋(妫�鏌ヨ矾寰勯攣瀹氱姸鎬侊紝妫�娴嬭矾寰勬槸鍚︽湁鍏朵粬灏忚溅) + + + //鍙墽琛屽懡浠� + if (!write(command)) { + News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); + return false; + } + + News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); + //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂) + shuttleProtocol.setPakMk(false); + + //淇濆瓨鏁版嵁鍒版暟鎹簱鍋氭祦姘� + BasShuttleOptService shuttleOptService = SpringUtils.getBean(BasShuttleOptService.class); + if (shuttleOptService != null) { + BasShuttleOpt opt = new BasShuttleOpt( + assignCommand.getTaskNo().intValue(), + assignCommand.getShuttleNo().intValue(), + new Date(), + ShuttleTaskModeType.get(assignCommand.getTaskMode()).desc, + assignCommand.getSourceLocNo(), + assignCommand.getLocNo(), + null, + null, + null, + JSON.toJSONString(command), + null + ); + shuttleOptService.insert(opt); + } + + //鍒ゆ柇鏁版嵁鏄惁鎵ц瀹屾垚 + if (commandStep < commands.size() - 1) { + //鏇存柊redis鏁版嵁 + //姝ュ簭澧炲姞 + commandStep++; + redisCommand.setCommandStep(commandStep); + //浠诲姟鏁版嵁淇濆瓨鍒皉edis + redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand)); + }else { + //宸叉墽琛屽畬鎴� + +// if (redisCommand.getLiftSecurityMk()) { +// //鏇鹃攣瀹氳繃鎻愬崌鏈猴紝闇�瑕佽繘琛岃В閿� +// if (liftProtocol != null) { +// liftProtocol.setSecurityMk(false); // } // } -// //浠诲姟鏁版嵁淇濆瓨鍒皉edis -// redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand)); -// -// if (!command.getComplete()) { -// //涓婁竴鏉′换鍔℃湭瀹屾垚锛岀姝笅鍙戝懡浠� -// return false; + +// String locNo = shuttleProtocol.getLocNo() == null ? shuttleProtocol.getSourceLocNo() : shuttleProtocol.getLocNo(); +// if (locNo != null) { +// //瑙i櫎閿佸畾鐨勫簱浣嶈矾寰� +// NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(locNo)); +// navigateMapData.writeNavigateNodeToRedisMap(redisCommand.getAssignCommand().getNodes(), false); // } -// } -// -// if (commands.size() == 0) { -// return false; -// } -// -// //鍙栧嚭鍛戒护 -// ShuttleCommand command = commands.get(commandStep); -// -// if (assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_IN.id.shortValue() -// || assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_OUT.id.shortValue() -// ) { -// //灏忚溅澶卞幓鍧愭爣锛岀姝笅鍙戝懡浠� -// if (shuttleProtocol.getCurrentCode() == 0) { -// return false; -// } -// } -// -// -// //鍒ゆ柇灏忚溅褰撳墠浜岀淮鐮佹槸鍚︿负鎻愬崌鏈轰簩缁寸爜 -// if (shuttleProtocol.getCurrentCode().intValue() == liftProtocol.getBarcode().intValue()) { -// //灏忚溅褰撳墠鍛戒护璧峰浣嶇疆灏辨槸鎻愬崌鏈轰簩缁寸爜锛岃鏄庡皬杞﹂渶瑕佸悜鎻愬崌鏈哄绉诲姩锛屽垯闇�瑕佸垽鏂姸鎬佹槸鍚︽弧瓒� -// if (command.getStartCodeNum().intValue() == liftProtocol.getBarcode().intValue()){ -// //鎻愬崌鏈烘槸鍚︾┖闂诧紝鎻愬崌鏈烘槸鍚﹀埌杈剧洰鏍囨ゼ灞傦紝鐩爣妤煎眰鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙蜂綅 -// if (!liftProtocol.isIdleNoTask()) { -// return false;//鎻愬崌鏈哄繖锛岀姝笅鍙戝懡浠� -// } -// if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkNo) { -// //鎻愬崌鏈哄伐浣滃彿鍜屽綋鍓嶅伐浣滀笉鐩稿悓锛岀姝笅鍙戝懡浠� -// return false; -// } -// -// Short distCodeNum = command.getDistCodeNum();//鐩爣浜岀淮鐮� -// BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); -// BasDevp basDevp = basDevpService.queryByQrCode(distCodeNum.intValue());//鐩爣绔欑偣 -// if (basDevp == null) { -// return false;//鎵句笉鍒扮洰鏍囩珯锛岀姝笅鍙戝懡浠� -// } -// -// int lev = Utils.getLev(basDevp.getLocNo());//鐩爣浜岀淮鐮佹墍鍦ㄦゼ灞� -// int liftLev = liftProtocol.getLev().intValue();//鎻愬崌鏈烘墍鍦ㄦゼ灞� -// if (liftLev != lev) { -// return false;//鎻愬崌鏈轰笉鍦ㄧ洰鏍囨ゼ灞傦紝绂佹涓嬪彂鍛戒护 -// } -// -// //鑾峰彇鐩爣绔欎俊鎭� -// SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); -// StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo()); -// if (staProtocol == null) { -// return false;//绔欑偣淇℃伅涓嶅瓨鍦紝绂佹涓嬪彂鍛戒护 -// } -// if (!staProtocol.isLiftArrival()) { -// return false;//绔欑偣鎻愬崌鏈哄埌浣嶄俊鍙穎alse锛岀姝笅鍙戝懡浠� -// } -// -// //鏉′欢婊¤冻锛屽崰鐢ㄦ彁鍗囨満 -// liftProtocol.setTaskNo(wrkNo); -// } -// } -// -// //涓嬪彂鍛戒护 -// if (!write(command)) { -// News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); -// return false; -// } else { -// News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); -// -// //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂) -// shuttleProtocol.setPakMk(false); -// -// //淇濆瓨鏁版嵁鍒版暟鎹簱鍋氭祦姘� -// BasShuttleOptService shuttleOptService = SpringUtils.getBean(BasShuttleOptService.class); -// if (shuttleOptService != null) { -// short[] commandArr = getCommandArr(command);//鑾峰彇鍛戒护鎶ユ枃 -// BasShuttleOpt opt = new BasShuttleOpt( -// assignCommand.getTaskNo().intValue(), -// assignCommand.getShuttleNo().intValue(), -// new Date(), -// ShuttleTaskModeType.get(assignCommand.getTaskMode()).desc, -// assignCommand.getSourceLocNo(), -// assignCommand.getLocNo(), -// null, -// null, -// null, -// JSON.toJSONString(command), -// JSON.toJSONString(commandArr) -// ); -// shuttleOptService.insert(opt); -// } -// -// //鍒ゆ柇鏁版嵁鏄惁鎵ц瀹屾垚 -// if (commandStep < size - 1) { -// //鏇存柊redis鏁版嵁 -// //姝ュ簭澧炲姞 -// commandStep++; -// redisCommand.setCommandStep(commandStep); -// //浠诲姟鏁版嵁淇濆瓨鍒皉edis -// redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand)); -// }else { -// //宸叉墽琛屽畬鎴� -// -// if (redisCommand.getLiftSecurityMk()) { -// //鏇鹃攣瀹氳繃鎻愬崌鏈猴紝闇�瑕佽繘琛岃В閿� -// if (liftProtocol != null) { -// liftProtocol.setSecurityMk(false); -// } -// } -// -// String locNo = shuttleProtocol.getLocNo() == null ? shuttleProtocol.getSourceLocNo() : shuttleProtocol.getLocNo(); -// if (locNo != null) { -// //瑙i櫎閿佸畾鐨勫簱浣嶈矾寰� -// NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(locNo)); -// navigateMapData.writeNavigateNodeToRedisMap(redisCommand.getAssignCommand().getNodes(), false); -// } -// -// //鍒犻櫎redis -// redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo()); -// -// if (!assignCommand.getAuto()) { -// //鎵嬪姩妯″紡涓嶆姏鍑虹瓑寰呯姸鎬侊紝鐩存帴澶嶄綅 -// //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵�� -// shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); -// //浠诲姟鍙锋竻闆� -// shuttleProtocol.setTaskNo((short) 0); -// //鏍囪澶嶄綅 -// shuttleProtocol.setPakMk(true); -// News.info("鍥涘悜绌挎杞︽墜鍔ㄤ换鍔℃墽琛屽畬鎴愶紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); -// }else { -// if (!assignCommand.getCharge()) { -// //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting -// shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING); -// }else { -// shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING); -// } -// News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屼笅鍙戝畬鎴愮瓑寰呮墽琛岀粨鏉燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); -// } -// -// } -// -// } + + //鍒犻櫎redis + redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo()); + + if (!assignCommand.getCharge()) { + //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING); + }else { + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING); + } + News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屼笅鍙戝畬鎴愮瓑寰呮墽琛岀粨鏉燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); + } + return true; } + //妫�娴嬪皬杞︽槸鍚﹁杩涙彁鍗囨満锛屽闇�瑕佽繘鎻愬崌鏈哄垯璋冨害鎻愬崌鏈� + private boolean checkLiftStation(Short wrkNo) { + //璇诲彇redis鏁版嵁 + if (wrkNo == null) { + return false; + } + + Object o = redisUtil.get("shuttle_wrk_no_" + wrkNo); + if (o == null) { + return false; + } + + //鎷垮埌鎻愬崌鏈虹嚎绋� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + if (liftThread == null) { + return false; + } + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol == null) { + return false; + } + + ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class); + //褰撳墠姝ュ簭 + int commandStep = redisCommand.getCommandStep(); + + //妫�娴嬫槸鍚﹀瓨鍦ㄦ彁鍗囨満鍙g殑鎸囦护 + List<NyShuttleHttpCommand> commands = redisCommand.getAssignCommand().getCommands(); + if (commands.size() == 0) { + return false; + } + + if (!commands.get(commandStep).getMsgType().equals("move")) { + return true;//涓嶆槸琛岃蛋鍛戒护锛岀洿鎺ユ斁琛� + } + + + return false;//榛樿涓嶆斁琛� + } + } diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java index 8a43bc3..fff71c0 100644 --- a/src/main/java/com/zy/core/thread/ShuttleThread.java +++ b/src/main/java/com/zy/core/thread/ShuttleThread.java @@ -402,248 +402,247 @@ //鍒嗛厤浠诲姟 private void assignWork(ShuttleAssignCommand assignCommand) { - ShuttleRedisCommand redisCommand = new ShuttleRedisCommand(); - - if (!assignCommand.getAuto()) { - List<NavigateNode> allNode = new ArrayList<>(); - List<ShuttleCommand> commands = new ArrayList<>(); - LocMastService locMastService = SpringUtils.getBean(LocMastService.class); - BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class); - NavigateMapData navigateMapData; - - //鑾峰彇灏忚溅绉诲姩閫熷害 - BasShuttle basShuttle = shuttleService.selectById(slave.getId()); - Integer runSpeed = 1000; -// if (basShuttle != null) { -// Integer runSpeed1 = basShuttle.getRunSpeed(); -// if (runSpeed1 != null) { -// runSpeed = runSpeed1; -// } +// ShuttleRedisCommand redisCommand = new ShuttleRedisCommand(); +// +// if (!assignCommand.getAuto()) { +// List<NavigateNode> allNode = new ArrayList<>(); +// List<ShuttleCommand> commands = new ArrayList<>(); +// LocMastService locMastService = SpringUtils.getBean(LocMastService.class); +// BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class); +// NavigateMapData navigateMapData; +// +// //鑾峰彇灏忚溅绉诲姩閫熷害 +// BasShuttle basShuttle = shuttleService.selectById(slave.getId()); +// Integer runSpeed = 1000; +//// if (basShuttle != null) { +//// Integer runSpeed1 = basShuttle.getRunSpeed(); +//// if (runSpeed1 != null) { +//// runSpeed = runSpeed1; +//// } +//// } +// +// LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); +// LiftProtocol liftProtocol = liftThread.getLiftProtocol(); +// +// switch (assignCommand.getTaskMode()) { +// case 1://鍏ュ簱 +// case 2://鍑哄簱 +// //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞 +// //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护 +// LocMast currentLocMast = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString()); +// List<NavigateNode> firstMastResult = NavigateUtils.calc(currentLocMast.getLocNo(), assignCommand.getSourceLocNo(), NavigationMapType.NORMAL.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(currentLocMast.getLocNo())));//灏忚溅鍒颁腑鐐癸紝澶勪簬鏃犺揣鐘舵�侊紝浣跨敤姝e父閫氶亾鍦板浘 +// boolean checkResult = Utils.checkShuttlePath(firstMastResult, shuttleProtocol.getShuttleNo().intValue()); +// if (firstMastResult != null && checkResult) { +// allNode.addAll(firstMastResult);//灏嗚妭鐐硅繘琛屼繚瀛� +// //鑾峰彇鍒嗘璺緞 +// ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(firstMastResult); +// //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 +// for (ArrayList<NavigateNode> nodes : data) { +// //寮�濮嬭矾寰� +// NavigateNode startPath = nodes.get(0); +// //涓棿璺緞 +// NavigateNode middlePath = nodes.get(nodes.size() - 2); +// //鐩爣璺緞 +// NavigateNode endPath = nodes.get(nodes.size() - 1); +// Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� +// Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� +// +// //姝e父绉诲姩鍛戒护 +// Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 +// Short middleCode = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());//鐩爣浜岀淮鐮� +// Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());//鐩爣浜岀淮鐮� +// commands.add(getMoveCommand(startCode, distCode, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCode, middleToDistDistance, runSpeed)); +// } +// +// //鎵樼洏椤跺崌 +// commands.add(getPalletCommand((short) 1)); +// }else { +// //娌℃湁璁$畻鍒拌矾寰勶紝鍙兘瀛樺湪灏忚溅浣嶇疆灏辨槸璧风偣浣嶇疆 +// if (currentLocMast.getLocNo().equals(assignCommand.getSourceLocNo())) { +// //灏忚溅浣嶇疆灏辨槸璧风偣浣嶇疆锛屾棤闇�绉诲姩锛岀洿鎺ラ《鍗� +// //鎵樼洏椤跺崌 +// commands.add(getPalletCommand((short) 1)); +// } +// } +// +// //璁$畻涓偣鍒扮粓鐐硅矾寰� +// List<NavigateNode> secMastResult = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getLocNo(), NavigationMapType.DFX.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(assignCommand.getSourceLocNo())));//灏忚溅浠庝腑鐐瑰埌缁堢偣锛屽浜庢湁璐х姸鎬侊紝浣跨敤DFX鍦板浘 +// boolean checkResult2 = Utils.checkShuttlePath(secMastResult, shuttleProtocol.getShuttleNo().intValue()); +// if (secMastResult != null && checkResult2) { +// allNode.addAll(secMastResult);//灏嗚妭鐐硅繘琛屼繚瀛� +// //鑾峰彇鍒嗘璺緞 +// ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(secMastResult); +// //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 +// for (ArrayList<NavigateNode> nodes : data) { +// //寮�濮嬭矾寰� +// NavigateNode startPath = nodes.get(0); +// //涓棿璺緞 +// NavigateNode middlePath = nodes.get(nodes.size() - 2); +// //鐩爣璺緞 +// NavigateNode endPath = nodes.get(nodes.size() - 1); +// Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� +// Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� +// +// //姝e父绉诲姩鍛戒护 +// Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 +// Short middleCode = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());//涓棿浜岀淮鐮� +// Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());//鐩爣浜岀淮鐮� +// commands.add(getMoveCommand(startCode, distCode, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCode, middleToDistDistance, runSpeed)); +// } +// +// //鎵樼洏涓嬮檷 +// commands.add(getPalletCommand((short) 2)); +// } +// +// if (firstMastResult == null || secMastResult == null) { +// throw new CoolException(MessageFormat.format( "鍥涘悜绌挎杞﹀嚭鍏ュ簱璺緞鎼滅储澶辫触 ===>> [id:{0}] [ip:{1}] [port:{2}]", slave.getId(), slave.getIp(), slave.getPort())); +// } +// +// navigateMapData = new NavigateMapData(Utils.getLev(currentLocMast.getLocNo())); +// //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� +// navigateMapData.writeNavigateNodeToRedisMap(firstMastResult, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� +// navigateMapData.writeNavigateNodeToRedisMap(secMastResult, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� +// break; +// case 3://鎵樼洏椤跺崌 +// case 4://鎵樼洏涓嬮檷 +// commands.add(getPalletCommand(assignCommand.getTaskMode() == 3 ? (short) 1 : (short) 2)); +// break; +// case 5://寮哄埗宸︾Щ +// commands.add(getForceMoveCommand((short) 2)); +// break; +// case 6://寮哄埗鍙崇Щ +// commands.add(getForceMoveCommand((short) 1)); +// break; +// case 7://寮哄埗涓婄Щ +// commands.add(getForceMoveCommand((short) 3)); +// break; +// case 8://寮哄埗涓嬬Щ +// commands.add(getForceMoveCommand((short) 4)); +// break; +// case 9://鐘舵�佸浣� +// ShuttleCommand reset = getResetCommand(); +// commands.add(reset); +// break; +// case 10://姝f柟鍚�(鍙�)瀵诲簱浣� +// commands.add(getFindLocCommand((short) 1)); +// break; +// case 11://璐熸柟鍚�(宸�)瀵诲簱浣� +// commands.add(getFindLocCommand((short) 2)); +// break; +// case 12://鍚戞鏂瑰悜(鍓�)瀵诲簱浣� +// commands.add(getFindLocCommand((short) 4)); +// break; +// case 13://鍚戣礋鏂瑰悜(鍚�)瀵诲簱浣� +// commands.add(getFindLocCommand((short) 3)); +// break; +// case 14://绉诲姩鍒扮洰鏍囧簱浣� +// String startQr = shuttleProtocol.getCurrentCode().toString();//璧峰浣嶇疆 +// //濡傛灉绌挎杞﹀湪鎻愬崌鏈哄唴锛岀Щ鍔ㄦ椂闇�瑕佸厛涓嬪彂鍑烘彁鍗囨満鍛戒护 +// if (liftProtocol.getBarcode().intValue() == shuttleProtocol.getCurrentCode().intValue()) { +// //绌挎杞﹀嚭鎻愬崌鏈� +// Short liftArrival = liftProtocol.getPositionArrivalFeedback();//鎻愬崌鏈轰綅缃弽棣� +// String liftSiteLocNo = Utils.liftArrivalToOutInStaLocNo(liftArrival); +// LocMast locMast1 = locMastService.selectById(liftSiteLocNo); +// ShuttleCommand moveCommand = getMoveCommand(liftProtocol.getBarcode(), Short.parseShort(locMast1.getQrCodeValue()), 1600, ShuttleRunDirection.BOTTOM.id, null, null, runSpeed); +// commands.add(moveCommand); +// +// //璧峰浣嶇疆淇敼涓烘彁鍗囨満鍙g珯鐐逛綅缃� +// startQr = locMast1.getQrCodeValue(); +// } +// +// LocMast locMast = locMastService.queryByQrCode(startQr); +// List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), assignCommand.getLocNo(), NavigationMapType.NONE.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(locMast.getLocNo())));//鎵嬪姩鍛戒护-绉诲姩鍛戒护锛屼娇鐢ㄦ棤杩囨护鍦板浘 +// boolean checkResult3 = Utils.checkShuttlePath(result, shuttleProtocol.getShuttleNo().intValue()); +// if (result != null && checkResult3) { +// //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� +// navigateMapData = new NavigateMapData(Utils.getLev(locMast.getLocNo())); +// navigateMapData.writeNavigateNodeToRedisMap(result, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� +// +// allNode.addAll(result);//灏嗚妭鐐硅繘琛屼繚瀛� +// //鑾峰彇鍒嗘璺緞 +// ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(result); +// //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 +// for (ArrayList<NavigateNode> nodes : data) { +// //寮�濮嬭矾寰� +// NavigateNode startPath = nodes.get(0); +// //涓棿璺緞 +// NavigateNode middlePath = nodes.get(nodes.size() - 2); +// //鐩爣璺緞 +// NavigateNode endPath = nodes.get(nodes.size() - 1); +// Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� +// Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� +// Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 +// Short middleCode = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());//涓棿浜岀淮鐮� +// Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());//鐩爣浜岀淮鐮� +// //姝e父绉诲姩鍛戒护 +// commands.add(getMoveCommand(startCode, distCode, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCode, middleToDistDistance, runSpeed)); +// } +// } +// break; +// case 15://鍏呯數寮�鍏� +// commands.add(getChargeSwitchCommand()); +// break; +// case 16://绉诲姩鍒版彁鍗囨満 +// LocMast locMast1 = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString()); +// int lev = Utils.getLev(locMast1.getLocNo());//绌挎杞﹀綋鍓嶉珮搴� +// String liftSiteLocNo = Utils.levToOutInStaLocNo(lev);//褰撳墠妤煎眰绔欑偣搴撲綅鍙� +// LocMast liftSitelocMast = locMastService.selectById(liftSiteLocNo); +// List<NavigateNode> result1 = NavigateUtils.calc(locMast1.getLocNo(), liftSiteLocNo, NavigationMapType.NONE.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(locMast1.getLocNo())));//绉诲姩鍒版彁鍗囨満锛屼娇鐢ㄦ棤杩囨护鍦板浘 +// boolean checkResult4 = Utils.checkShuttlePath(result1, shuttleProtocol.getShuttleNo().intValue()); +// Short endStartCode = null; +// if (result1 != null && checkResult4) { +// //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� +// navigateMapData = new NavigateMapData(Utils.getLev(locMast1.getLocNo())); +// navigateMapData.writeNavigateNodeToRedisMap(result1, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� +// +// allNode.addAll(result1);//灏嗚妭鐐硅繘琛屼繚瀛� +// //鑾峰彇鍒嗘璺緞 +// ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(result1); +// //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 +// for (ArrayList<NavigateNode> nodes : data) { +// //寮�濮嬭矾寰� +// NavigateNode startPath = nodes.get(0); +// //涓棿璺緞 +// NavigateNode middlePath = nodes.get(nodes.size() - 2); +// //鐩爣璺緞 +// NavigateNode endPath = nodes.get(nodes.size() - 1); +// Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� +// Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� +// Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 +// Short middleCode = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());//涓棿浜岀淮鐮� +// Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());//鐩爣浜岀淮鐮� +// endStartCode = distCode; +// //姝e父绉诲姩鍛戒护 +// commands.add(getMoveCommand(startCode, distCode, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCode, middleToDistDistance, runSpeed)); +// } +// } +// +// if (endStartCode == null && shuttleProtocol.getCurrentCode() == Short.parseShort(liftSitelocMast.getQrCodeValue())) { +// //绌挎杞﹀凡缁忓湪鎻愬崌鏈虹珯鐐瑰彛 +// endStartCode = shuttleProtocol.getCurrentCode(); +// } +// +// //澧炲姞绉诲姩杩涙彁鍗囨満鍛戒护 +// ShuttleCommand moveCommand = getMoveCommand(endStartCode, liftProtocol.getBarcode(), 1600, ShuttleRunDirection.TOP.id, null, null, runSpeed); +// commands.add(moveCommand); +// break; +// default: // } - - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); - LiftProtocol liftProtocol = liftThread.getLiftProtocol(); - - switch (assignCommand.getTaskMode()) { - case 1://鍏ュ簱 - case 2://鍑哄簱 - //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞 - //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护 - LocMast currentLocMast = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString()); - List<NavigateNode> firstMastResult = NavigateUtils.calc(currentLocMast.getLocNo(), assignCommand.getSourceLocNo(), NavigationMapType.NORMAL.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(currentLocMast.getLocNo())));//灏忚溅鍒颁腑鐐癸紝澶勪簬鏃犺揣鐘舵�侊紝浣跨敤姝e父閫氶亾鍦板浘 - boolean checkResult = Utils.checkShuttlePath(firstMastResult, shuttleProtocol.getShuttleNo().intValue()); - if (firstMastResult != null && checkResult) { - allNode.addAll(firstMastResult);//灏嗚妭鐐硅繘琛屼繚瀛� - //鑾峰彇鍒嗘璺緞 - ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(firstMastResult); - //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 - for (ArrayList<NavigateNode> nodes : data) { - //寮�濮嬭矾寰� - NavigateNode startPath = nodes.get(0); - //涓棿璺緞 - NavigateNode middlePath = nodes.get(nodes.size() - 2); - //鐩爣璺緞 - NavigateNode endPath = nodes.get(nodes.size() - 1); - Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� - - //姝e父绉诲姩鍛戒护 - Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 - Short middleCode = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());//鐩爣浜岀淮鐮� - Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());//鐩爣浜岀淮鐮� - commands.add(getMoveCommand(startCode, distCode, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCode, middleToDistDistance, runSpeed)); - } - - //鎵樼洏椤跺崌 - commands.add(getPalletCommand((short) 1)); - }else { - //娌℃湁璁$畻鍒拌矾寰勶紝鍙兘瀛樺湪灏忚溅浣嶇疆灏辨槸璧风偣浣嶇疆 - if (currentLocMast.getLocNo().equals(assignCommand.getSourceLocNo())) { - //灏忚溅浣嶇疆灏辨槸璧风偣浣嶇疆锛屾棤闇�绉诲姩锛岀洿鎺ラ《鍗� - //鎵樼洏椤跺崌 - commands.add(getPalletCommand((short) 1)); - } - } - - //璁$畻涓偣鍒扮粓鐐硅矾寰� - List<NavigateNode> secMastResult = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getLocNo(), NavigationMapType.DFX.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(assignCommand.getSourceLocNo())));//灏忚溅浠庝腑鐐瑰埌缁堢偣锛屽浜庢湁璐х姸鎬侊紝浣跨敤DFX鍦板浘 - boolean checkResult2 = Utils.checkShuttlePath(secMastResult, shuttleProtocol.getShuttleNo().intValue()); - if (secMastResult != null && checkResult2) { - allNode.addAll(secMastResult);//灏嗚妭鐐硅繘琛屼繚瀛� - //鑾峰彇鍒嗘璺緞 - ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(secMastResult); - //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 - for (ArrayList<NavigateNode> nodes : data) { - //寮�濮嬭矾寰� - NavigateNode startPath = nodes.get(0); - //涓棿璺緞 - NavigateNode middlePath = nodes.get(nodes.size() - 2); - //鐩爣璺緞 - NavigateNode endPath = nodes.get(nodes.size() - 1); - Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� - - //姝e父绉诲姩鍛戒护 - Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 - Short middleCode = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());//涓棿浜岀淮鐮� - Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());//鐩爣浜岀淮鐮� - commands.add(getMoveCommand(startCode, distCode, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCode, middleToDistDistance, runSpeed)); - } - - //鎵樼洏涓嬮檷 - commands.add(getPalletCommand((short) 2)); - } - - if (firstMastResult == null || secMastResult == null) { - throw new CoolException(MessageFormat.format( "鍥涘悜绌挎杞﹀嚭鍏ュ簱璺緞鎼滅储澶辫触 ===>> [id:{0}] [ip:{1}] [port:{2}]", slave.getId(), slave.getIp(), slave.getPort())); - } - - navigateMapData = new NavigateMapData(Utils.getLev(currentLocMast.getLocNo())); - //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� - navigateMapData.writeNavigateNodeToRedisMap(firstMastResult, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� - navigateMapData.writeNavigateNodeToRedisMap(secMastResult, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� - break; - case 3://鎵樼洏椤跺崌 - case 4://鎵樼洏涓嬮檷 - commands.add(getPalletCommand(assignCommand.getTaskMode() == 3 ? (short) 1 : (short) 2)); - break; - case 5://寮哄埗宸︾Щ - commands.add(getForceMoveCommand((short) 2)); - break; - case 6://寮哄埗鍙崇Щ - commands.add(getForceMoveCommand((short) 1)); - break; - case 7://寮哄埗涓婄Щ - commands.add(getForceMoveCommand((short) 3)); - break; - case 8://寮哄埗涓嬬Щ - commands.add(getForceMoveCommand((short) 4)); - break; - case 9://鐘舵�佸浣� - ShuttleCommand reset = getResetCommand(); - commands.add(reset); - break; - case 10://姝f柟鍚�(鍙�)瀵诲簱浣� - commands.add(getFindLocCommand((short) 1)); - break; - case 11://璐熸柟鍚�(宸�)瀵诲簱浣� - commands.add(getFindLocCommand((short) 2)); - break; - case 12://鍚戞鏂瑰悜(鍓�)瀵诲簱浣� - commands.add(getFindLocCommand((short) 4)); - break; - case 13://鍚戣礋鏂瑰悜(鍚�)瀵诲簱浣� - commands.add(getFindLocCommand((short) 3)); - break; - case 14://绉诲姩鍒扮洰鏍囧簱浣� - String startQr = shuttleProtocol.getCurrentCode().toString();//璧峰浣嶇疆 - //濡傛灉绌挎杞﹀湪鎻愬崌鏈哄唴锛岀Щ鍔ㄦ椂闇�瑕佸厛涓嬪彂鍑烘彁鍗囨満鍛戒护 - if (liftProtocol.getBarcode().intValue() == shuttleProtocol.getCurrentCode().intValue()) { - //绌挎杞﹀嚭鎻愬崌鏈� - Short liftArrival = liftProtocol.getPositionArrivalFeedback();//鎻愬崌鏈轰綅缃弽棣� - String liftSiteLocNo = Utils.liftArrivalToOutInStaLocNo(liftArrival); - LocMast locMast1 = locMastService.selectById(liftSiteLocNo); - ShuttleCommand moveCommand = getMoveCommand(liftProtocol.getBarcode(), Short.parseShort(locMast1.getQrCodeValue()), 1600, ShuttleRunDirection.BOTTOM.id, null, null, runSpeed); - commands.add(moveCommand); - - //璧峰浣嶇疆淇敼涓烘彁鍗囨満鍙g珯鐐逛綅缃� - startQr = locMast1.getQrCodeValue(); - } - - LocMast locMast = locMastService.queryByQrCode(startQr); - List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), assignCommand.getLocNo(), NavigationMapType.NONE.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(locMast.getLocNo())));//鎵嬪姩鍛戒护-绉诲姩鍛戒护锛屼娇鐢ㄦ棤杩囨护鍦板浘 - boolean checkResult3 = Utils.checkShuttlePath(result, shuttleProtocol.getShuttleNo().intValue()); - if (result != null && checkResult3) { - //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� - navigateMapData = new NavigateMapData(Utils.getLev(locMast.getLocNo())); - navigateMapData.writeNavigateNodeToRedisMap(result, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� - - allNode.addAll(result);//灏嗚妭鐐硅繘琛屼繚瀛� - //鑾峰彇鍒嗘璺緞 - ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(result); - //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 - for (ArrayList<NavigateNode> nodes : data) { - //寮�濮嬭矾寰� - NavigateNode startPath = nodes.get(0); - //涓棿璺緞 - NavigateNode middlePath = nodes.get(nodes.size() - 2); - //鐩爣璺緞 - NavigateNode endPath = nodes.get(nodes.size() - 1); - Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� - Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 - Short middleCode = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());//涓棿浜岀淮鐮� - Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());//鐩爣浜岀淮鐮� - //姝e父绉诲姩鍛戒护 - commands.add(getMoveCommand(startCode, distCode, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCode, middleToDistDistance, runSpeed)); - } - } - break; - case 15://鍏呯數寮�鍏� - commands.add(getChargeSwitchCommand()); - break; - case 16://绉诲姩鍒版彁鍗囨満 - LocMast locMast1 = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString()); - int lev = Utils.getLev(locMast1.getLocNo());//绌挎杞﹀綋鍓嶉珮搴� - String liftSiteLocNo = Utils.levToOutInStaLocNo(lev);//褰撳墠妤煎眰绔欑偣搴撲綅鍙� - LocMast liftSitelocMast = locMastService.selectById(liftSiteLocNo); - List<NavigateNode> result1 = NavigateUtils.calc(locMast1.getLocNo(), liftSiteLocNo, NavigationMapType.NONE.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(locMast1.getLocNo())));//绉诲姩鍒版彁鍗囨満锛屼娇鐢ㄦ棤杩囨护鍦板浘 - boolean checkResult4 = Utils.checkShuttlePath(result1, shuttleProtocol.getShuttleNo().intValue()); - Short endStartCode = null; - if (result1 != null && checkResult4) { - //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� - navigateMapData = new NavigateMapData(Utils.getLev(locMast1.getLocNo())); - navigateMapData.writeNavigateNodeToRedisMap(result1, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� - - allNode.addAll(result1);//灏嗚妭鐐硅繘琛屼繚瀛� - //鑾峰彇鍒嗘璺緞 - ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(result1); - //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 - for (ArrayList<NavigateNode> nodes : data) { - //寮�濮嬭矾寰� - NavigateNode startPath = nodes.get(0); - //涓棿璺緞 - NavigateNode middlePath = nodes.get(nodes.size() - 2); - //鐩爣璺緞 - NavigateNode endPath = nodes.get(nodes.size() - 1); - Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� - Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 - Short middleCode = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());//涓棿浜岀淮鐮� - Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());//鐩爣浜岀淮鐮� - endStartCode = distCode; - //姝e父绉诲姩鍛戒护 - commands.add(getMoveCommand(startCode, distCode, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCode, middleToDistDistance, runSpeed)); - } - } - - if (endStartCode == null && shuttleProtocol.getCurrentCode() == Short.parseShort(liftSitelocMast.getQrCodeValue())) { - //绌挎杞﹀凡缁忓湪鎻愬崌鏈虹珯鐐瑰彛 - endStartCode = shuttleProtocol.getCurrentCode(); - } - - //澧炲姞绉诲姩杩涙彁鍗囨満鍛戒护 - ShuttleCommand moveCommand = getMoveCommand(endStartCode, liftProtocol.getBarcode(), 1600, ShuttleRunDirection.TOP.id, null, null, runSpeed); - commands.add(moveCommand); - break; - default: - } - assignCommand.setCommands(commands); - assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist - } - - redisCommand.setShuttleNo(assignCommand.getShuttleNo());//鍥涘悜绌挎杞﹀彿 - redisCommand.setWrkNo(assignCommand.getTaskNo());//宸ヤ綔鍙� - redisCommand.setCommandStep(0);//鍛戒护鎵ц姝ュ簭 - redisCommand.setAssignCommand(assignCommand);//鍛戒护 - redisCommand.setErrorCommands(new ArrayList<ShuttleCommand>());//鍙戠敓閿欒鏃跺皾璇曟墽琛岀殑鎸囦护锛屼紭鍏堢骇鏈�楂� - shuttleProtocol.setTaskNo(assignCommand.getTaskNo()); - shuttleProtocol.setAssignCommand(assignCommand); - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING); - //浠诲姟鏁版嵁淇濆瓨鍒皉edis - redisUtil.set("shuttle_wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand)); - //鎵ц涓嬪彂浠诲姟 - executeWork(assignCommand.getTaskNo()); +// assignCommand.setCommands(commands); +// assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist +// } +// +// redisCommand.setShuttleNo(assignCommand.getShuttleNo());//鍥涘悜绌挎杞﹀彿 +// redisCommand.setWrkNo(assignCommand.getTaskNo());//宸ヤ綔鍙� +// redisCommand.setCommandStep(0);//鍛戒护鎵ц姝ュ簭 +// redisCommand.setAssignCommand(assignCommand);//鍛戒护 +// shuttleProtocol.setTaskNo(assignCommand.getTaskNo()); +// shuttleProtocol.setAssignCommand(assignCommand); +// shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING); +// //浠诲姟鏁版嵁淇濆瓨鍒皉edis +// redisUtil.set("shuttle_wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand)); +// //鎵ц涓嬪彂浠诲姟 +// executeWork(assignCommand.getTaskNo()); } //鎵ц涓嬪彂鐨勬寚浠� @@ -653,261 +652,261 @@ return false; } - WrkMastService wrkMastService = SpringUtils.getBean(WrkMastService.class); - - Object o = redisUtil.get("shuttle_wrk_no_" + wrkNo); - if (o == null) { - return false; - } - ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class); - - if (shuttleProtocol.getBusyStatus().intValue() == ShuttleStatusType.BUSY.id) { - return false;//灏忚溅鐘舵�佸繖 - } - - if (!checkLiftStation(wrkNo)) {//妫�娴嬫槸鍚︽湁鎻愬崌鏈虹珯鐐癸紝鏈夊垯璋冨害鎻愬崌鏈� - return false; - } - - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); - LiftProtocol liftProtocol = liftThread.getLiftProtocol(); - - List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands(); - //褰撳墠姝ュ簭 - int commandStep = redisCommand.getCommandStep(); - //path璺緞鏁扮洰 - int size = commands.size(); - ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand(); - - if (commandStep != 0) { - //鍒ゆ柇涓婁竴鏉℃寚浠ゆ槸鍚﹀畬鎴� - ShuttleCommand command = commands.get(commandStep - 1); - if (command.getCommandWord().intValue() == 1) { - //绉诲姩鍛戒护 - if (command.getDistCodeNum().intValue() == shuttleProtocol.getCurrentCode().intValue()) { - //涓婁竴鏉℃寚浠ょ殑鐩爣浣嶇疆鍜屽綋鍓嶅皬杞︿綅缃浉鍚岋紝鍒欒瀹氫笂涓�鏉′换鍔″畬鎴� - command.setComplete(true); - - //涓婁竴鏉℃寚浠よ捣鐐规槸鎻愬崌鏈轰簩缁寸爜锛屽垯娓呴浂鎻愬崌鏈轰换鍔″彿 - if (command.getStartCodeNum().intValue() == liftProtocol.getBarcode().intValue()) { - //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庣┖闂� - if (liftProtocol.isIdleNoTask() && liftProtocol.getTaskNo().intValue() == redisCommand.getWrkNo().intValue()) { - liftProtocol.setTaskNo((short) 0);//娓呯┖浠诲姟鍙� - WrkMast wrkMast = wrkMastService.selectById(wrkNo); - if (wrkMast != null) { - wrkMast.setLiftNo(null);//瑙i攣鎻愬崌鏈� - wrkMastService.updateById(wrkMast); - } - } - } - - //鍏ュ簱鍛戒护锛屽綋灏忚溅鍙栧畬璐у悗锛岄渶瑕佸皢鎻愬崌鏈洪噴鏀� - if (assignCommand.getTaskMode().intValue() == ShuttleTaskModeType.PAK_IN.id) { - //鍒ゆ柇涓婁竴鏉℃寚浠ょ殑璧风偣鏄惁涓鸿緭閫佺珯鐐逛笖鐩爣鐐逛笉鏄彁鍗囨満鍐呴儴浜岀淮鐮� - Short startCodeNum = command.getStartCodeNum(); - BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); - BasDevp basDevp = basDevpService.queryByQrCode(startCodeNum.intValue());//鐩爣绔欑偣 - if (basDevp != null && command.getDistCodeNum().intValue() != liftProtocol.getBarcode().intValue()) { - //涓婁竴鏉℃寚浠ょ殑璧风偣涓鸿緭閫佺珯鐐逛笖鐩爣鐐逛笉鏄彁鍗囨満鍐呴儴浜岀淮鐮� - //姝ゆ椂灏忚溅搴旇宸茬粡绂诲紑杈撻�佺珯鐐癸紝鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂蹭笖鏈夊伐浣滃彿 - if (liftProtocol.isIdleNoTask() && liftProtocol.getTaskNo().intValue() == redisCommand.getWrkNo().intValue()) { - liftProtocol.setTaskNo((short) 0);//娓呯┖浠诲姟鍙� - WrkMast wrkMast = wrkMastService.selectById(wrkNo); - if (wrkMast != null) { - wrkMast.setLiftNo(null);//瑙i攣鎻愬崌鏈� - wrkMastService.updateById(wrkMast); - } - } - } - } - - } - } else if (command.getCommandWord().intValue() == 2) { - //鎵樼洏椤跺崌鍛戒护 - if (command.getPalletLift().intValue() == 1) { - //椤跺崌 - //鍒ゆ柇鏄惁椤跺崌鍒颁綅 - if (shuttleProtocol.getPlcOutputLift()) { - //鑷姩妯″紡 - if (assignCommand.getAuto() && shuttleProtocol.getPlcInputStatus().intValue() == 1) { - //椤跺崌鍒颁綅,涓旀墭鐩橀浄杈炬湁鐗╋紝璁ゅ畾浠诲姟瀹屾垚 - command.setComplete(true); - }else { - //鎵嬪姩妯″紡锛屼笉鍒ゆ柇鎵樼洏闆疯揪 - //椤跺崌鍒颁綅锛岃瀹氫换鍔″畬鎴� - command.setComplete(true); - } - } - }else { - //涓嬮檷 - //鍒ゆ柇鏄惁涓嬮檷鍒颁綅锛屽垽鏂墭鐩橀浄杈炬槸鍚︽棤鐗� - if (!shuttleProtocol.getPlcOutputLift() && !shuttleProtocol.getPlcOutputTransfer()) { - //鑷姩妯″紡 - if (assignCommand.getAuto() && shuttleProtocol.getPlcInputStatus().intValue() == 0) { - //涓嬮檷鍒颁綅锛屼笖鎵樼洏闆疯揪鏃犵墿锛岃瀹氫换鍔″畬鎴� - command.setComplete(true); - }else { - //鎵嬪姩妯″紡锛屼笉鍒ゆ柇鎵樼洏闆疯揪 - //涓嬮檷鍒颁綅锛屼笖鎵樼洏闆疯揪鏃犵墿锛岃瀹氫换鍔″畬鎴� - command.setComplete(true); - } - } - } - } else if (command.getCommandWord().intValue() == 5) { - //鍏呯數鍛戒护 - //鍒ゆ柇灏忚溅鍏呯數寮�鍏� - if (shuttleProtocol.getPlcOutputCharge()) { - //姝e父鍏呯數锛岃瀹氫换鍔″畬鎴� - command.setComplete(true); - } - } - //浠诲姟鏁版嵁淇濆瓨鍒皉edis - redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand)); - - if (!command.getComplete()) { - //涓婁竴鏉′换鍔℃湭瀹屾垚锛岀姝笅鍙戝懡浠� - return false; - } - } - - if (commands.size() == 0) { - return false; - } - - //鍙栧嚭鍛戒护 - ShuttleCommand command = commands.get(commandStep); - - if (assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_IN.id.shortValue() - || assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_OUT.id.shortValue() - ) { - //灏忚溅澶卞幓鍧愭爣锛岀姝笅鍙戝懡浠� - if (shuttleProtocol.getCurrentCode() == 0) { - return false; - } - } - - - //鍒ゆ柇灏忚溅褰撳墠浜岀淮鐮佹槸鍚︿负鎻愬崌鏈轰簩缁寸爜 - if (shuttleProtocol.getCurrentCode().intValue() == liftProtocol.getBarcode().intValue()) { - //灏忚溅褰撳墠鍛戒护璧峰浣嶇疆灏辨槸鎻愬崌鏈轰簩缁寸爜锛岃鏄庡皬杞﹂渶瑕佸悜鎻愬崌鏈哄绉诲姩锛屽垯闇�瑕佸垽鏂姸鎬佹槸鍚︽弧瓒� - if (command.getStartCodeNum().intValue() == liftProtocol.getBarcode().intValue()){ - //鎻愬崌鏈烘槸鍚︾┖闂诧紝鎻愬崌鏈烘槸鍚﹀埌杈剧洰鏍囨ゼ灞傦紝鐩爣妤煎眰鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙蜂綅 - if (!liftProtocol.isIdleNoTask()) { - return false;//鎻愬崌鏈哄繖锛岀姝笅鍙戝懡浠� - } - if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkNo) { - //鎻愬崌鏈哄伐浣滃彿鍜屽綋鍓嶅伐浣滀笉鐩稿悓锛岀姝笅鍙戝懡浠� - return false; - } - - Short distCodeNum = command.getDistCodeNum();//鐩爣浜岀淮鐮� - BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); - BasDevp basDevp = basDevpService.queryByQrCode(distCodeNum.intValue());//鐩爣绔欑偣 - if (basDevp == null) { - return false;//鎵句笉鍒扮洰鏍囩珯锛岀姝笅鍙戝懡浠� - } - - int lev = Utils.getLev(basDevp.getLocNo());//鐩爣浜岀淮鐮佹墍鍦ㄦゼ灞� - int liftLev = liftProtocol.getLev().intValue();//鎻愬崌鏈烘墍鍦ㄦゼ灞� - if (liftLev != lev) { - return false;//鎻愬崌鏈轰笉鍦ㄧ洰鏍囨ゼ灞傦紝绂佹涓嬪彂鍛戒护 - } - - //鑾峰彇鐩爣绔欎俊鎭� - SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); - StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo()); - if (staProtocol == null) { - return false;//绔欑偣淇℃伅涓嶅瓨鍦紝绂佹涓嬪彂鍛戒护 - } - if (!staProtocol.isLiftArrival()) { - return false;//绔欑偣鎻愬崌鏈哄埌浣嶄俊鍙穎alse锛岀姝笅鍙戝懡浠� - } - - //鏉′欢婊¤冻锛屽崰鐢ㄦ彁鍗囨満 - liftProtocol.setTaskNo(wrkNo); - } - } - - //涓嬪彂鍛戒护 - if (!write(command)) { - News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); - return false; - } else { - News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); - - //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂) - shuttleProtocol.setPakMk(false); - - //淇濆瓨鏁版嵁鍒版暟鎹簱鍋氭祦姘� - BasShuttleOptService shuttleOptService = SpringUtils.getBean(BasShuttleOptService.class); - if (shuttleOptService != null) { - short[] commandArr = getCommandArr(command);//鑾峰彇鍛戒护鎶ユ枃 - BasShuttleOpt opt = new BasShuttleOpt( - assignCommand.getTaskNo().intValue(), - assignCommand.getShuttleNo().intValue(), - new Date(), - ShuttleTaskModeType.get(assignCommand.getTaskMode()).desc, - assignCommand.getSourceLocNo(), - assignCommand.getLocNo(), - null, - null, - null, - JSON.toJSONString(command), - JSON.toJSONString(commandArr) - ); - shuttleOptService.insert(opt); - } - - //鍒ゆ柇鏁版嵁鏄惁鎵ц瀹屾垚 - if (commandStep < size - 1) { - //鏇存柊redis鏁版嵁 - //姝ュ簭澧炲姞 - commandStep++; - redisCommand.setCommandStep(commandStep); - //浠诲姟鏁版嵁淇濆瓨鍒皉edis - redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand)); - }else { - //宸叉墽琛屽畬鎴� - - if (redisCommand.getLiftSecurityMk()) { - //鏇鹃攣瀹氳繃鎻愬崌鏈猴紝闇�瑕佽繘琛岃В閿� - if (liftProtocol != null) { - liftProtocol.setSecurityMk(false); - } - } - - String locNo = shuttleProtocol.getLocNo() == null ? shuttleProtocol.getSourceLocNo() : shuttleProtocol.getLocNo(); - if (locNo != null) { - //瑙i櫎閿佸畾鐨勫簱浣嶈矾寰� - NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(locNo)); - navigateMapData.writeNavigateNodeToRedisMap(redisCommand.getAssignCommand().getNodes(), false); - } - - //鍒犻櫎redis - redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo()); - - if (!assignCommand.getAuto()) { - //鎵嬪姩妯″紡涓嶆姏鍑虹瓑寰呯姸鎬侊紝鐩存帴澶嶄綅 - //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵�� - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); - //浠诲姟鍙锋竻闆� - shuttleProtocol.setTaskNo((short) 0); - //鏍囪澶嶄綅 - shuttleProtocol.setPakMk(true); - News.info("鍥涘悜绌挎杞︽墜鍔ㄤ换鍔℃墽琛屽畬鎴愶紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); - }else { - if (!assignCommand.getCharge()) { - //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING); - }else { - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING); - } - News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屼笅鍙戝畬鎴愮瓑寰呮墽琛岀粨鏉燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); - } - - } - - } +// WrkMastService wrkMastService = SpringUtils.getBean(WrkMastService.class); +// +// Object o = redisUtil.get("shuttle_wrk_no_" + wrkNo); +// if (o == null) { +// return false; +// } +// ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class); +// +// if (shuttleProtocol.getBusyStatus().intValue() == ShuttleStatusType.BUSY.id) { +// return false;//灏忚溅鐘舵�佸繖 +// } +// +// if (!checkLiftStation(wrkNo)) {//妫�娴嬫槸鍚︽湁鎻愬崌鏈虹珯鐐癸紝鏈夊垯璋冨害鎻愬崌鏈� +// return false; +// } +// +// LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); +// LiftProtocol liftProtocol = liftThread.getLiftProtocol(); +// +// List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands(); +// //褰撳墠姝ュ簭 +// int commandStep = redisCommand.getCommandStep(); +// //path璺緞鏁扮洰 +// int size = commands.size(); +// ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand(); +// +// if (commandStep != 0) { +// //鍒ゆ柇涓婁竴鏉℃寚浠ゆ槸鍚﹀畬鎴� +// ShuttleCommand command = commands.get(commandStep - 1); +// if (command.getCommandWord().intValue() == 1) { +// //绉诲姩鍛戒护 +// if (command.getDistCodeNum().intValue() == shuttleProtocol.getCurrentCode().intValue()) { +// //涓婁竴鏉℃寚浠ょ殑鐩爣浣嶇疆鍜屽綋鍓嶅皬杞︿綅缃浉鍚岋紝鍒欒瀹氫笂涓�鏉′换鍔″畬鎴� +// command.setComplete(true); +// +// //涓婁竴鏉℃寚浠よ捣鐐规槸鎻愬崌鏈轰簩缁寸爜锛屽垯娓呴浂鎻愬崌鏈轰换鍔″彿 +// if (command.getStartCodeNum().intValue() == liftProtocol.getBarcode().intValue()) { +// //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庣┖闂� +// if (liftProtocol.isIdleNoTask() && liftProtocol.getTaskNo().intValue() == redisCommand.getWrkNo().intValue()) { +// liftProtocol.setTaskNo((short) 0);//娓呯┖浠诲姟鍙� +// WrkMast wrkMast = wrkMastService.selectById(wrkNo); +// if (wrkMast != null) { +// wrkMast.setLiftNo(null);//瑙i攣鎻愬崌鏈� +// wrkMastService.updateById(wrkMast); +// } +// } +// } +// +// //鍏ュ簱鍛戒护锛屽綋灏忚溅鍙栧畬璐у悗锛岄渶瑕佸皢鎻愬崌鏈洪噴鏀� +// if (assignCommand.getTaskMode().intValue() == ShuttleTaskModeType.PAK_IN.id) { +// //鍒ゆ柇涓婁竴鏉℃寚浠ょ殑璧风偣鏄惁涓鸿緭閫佺珯鐐逛笖鐩爣鐐逛笉鏄彁鍗囨満鍐呴儴浜岀淮鐮� +// Short startCodeNum = command.getStartCodeNum(); +// BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); +// BasDevp basDevp = basDevpService.queryByQrCode(startCodeNum.intValue());//鐩爣绔欑偣 +// if (basDevp != null && command.getDistCodeNum().intValue() != liftProtocol.getBarcode().intValue()) { +// //涓婁竴鏉℃寚浠ょ殑璧风偣涓鸿緭閫佺珯鐐逛笖鐩爣鐐逛笉鏄彁鍗囨満鍐呴儴浜岀淮鐮� +// //姝ゆ椂灏忚溅搴旇宸茬粡绂诲紑杈撻�佺珯鐐癸紝鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂蹭笖鏈夊伐浣滃彿 +// if (liftProtocol.isIdleNoTask() && liftProtocol.getTaskNo().intValue() == redisCommand.getWrkNo().intValue()) { +// liftProtocol.setTaskNo((short) 0);//娓呯┖浠诲姟鍙� +// WrkMast wrkMast = wrkMastService.selectById(wrkNo); +// if (wrkMast != null) { +// wrkMast.setLiftNo(null);//瑙i攣鎻愬崌鏈� +// wrkMastService.updateById(wrkMast); +// } +// } +// } +// } +// +// } +// } else if (command.getCommandWord().intValue() == 2) { +// //鎵樼洏椤跺崌鍛戒护 +// if (command.getPalletLift().intValue() == 1) { +// //椤跺崌 +// //鍒ゆ柇鏄惁椤跺崌鍒颁綅 +// if (shuttleProtocol.getPlcOutputLift()) { +// //鑷姩妯″紡 +// if (assignCommand.getAuto() && shuttleProtocol.getPlcInputStatus().intValue() == 1) { +// //椤跺崌鍒颁綅,涓旀墭鐩橀浄杈炬湁鐗╋紝璁ゅ畾浠诲姟瀹屾垚 +// command.setComplete(true); +// }else { +// //鎵嬪姩妯″紡锛屼笉鍒ゆ柇鎵樼洏闆疯揪 +// //椤跺崌鍒颁綅锛岃瀹氫换鍔″畬鎴� +// command.setComplete(true); +// } +// } +// }else { +// //涓嬮檷 +// //鍒ゆ柇鏄惁涓嬮檷鍒颁綅锛屽垽鏂墭鐩橀浄杈炬槸鍚︽棤鐗� +// if (!shuttleProtocol.getPlcOutputLift() && !shuttleProtocol.getPlcOutputTransfer()) { +// //鑷姩妯″紡 +// if (assignCommand.getAuto() && shuttleProtocol.getPlcInputStatus().intValue() == 0) { +// //涓嬮檷鍒颁綅锛屼笖鎵樼洏闆疯揪鏃犵墿锛岃瀹氫换鍔″畬鎴� +// command.setComplete(true); +// }else { +// //鎵嬪姩妯″紡锛屼笉鍒ゆ柇鎵樼洏闆疯揪 +// //涓嬮檷鍒颁綅锛屼笖鎵樼洏闆疯揪鏃犵墿锛岃瀹氫换鍔″畬鎴� +// command.setComplete(true); +// } +// } +// } +// } else if (command.getCommandWord().intValue() == 5) { +// //鍏呯數鍛戒护 +// //鍒ゆ柇灏忚溅鍏呯數寮�鍏� +// if (shuttleProtocol.getPlcOutputCharge()) { +// //姝e父鍏呯數锛岃瀹氫换鍔″畬鎴� +// command.setComplete(true); +// } +// } +// //浠诲姟鏁版嵁淇濆瓨鍒皉edis +// redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand)); +// +// if (!command.getComplete()) { +// //涓婁竴鏉′换鍔℃湭瀹屾垚锛岀姝笅鍙戝懡浠� +// return false; +// } +// } +// +// if (commands.size() == 0) { +// return false; +// } +// +// //鍙栧嚭鍛戒护 +// ShuttleCommand command = commands.get(commandStep); +// +// if (assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_IN.id.shortValue() +// || assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_OUT.id.shortValue() +// ) { +// //灏忚溅澶卞幓鍧愭爣锛岀姝笅鍙戝懡浠� +// if (shuttleProtocol.getCurrentCode() == 0) { +// return false; +// } +// } +// +// +// //鍒ゆ柇灏忚溅褰撳墠浜岀淮鐮佹槸鍚︿负鎻愬崌鏈轰簩缁寸爜 +// if (shuttleProtocol.getCurrentCode().intValue() == liftProtocol.getBarcode().intValue()) { +// //灏忚溅褰撳墠鍛戒护璧峰浣嶇疆灏辨槸鎻愬崌鏈轰簩缁寸爜锛岃鏄庡皬杞﹂渶瑕佸悜鎻愬崌鏈哄绉诲姩锛屽垯闇�瑕佸垽鏂姸鎬佹槸鍚︽弧瓒� +// if (command.getStartCodeNum().intValue() == liftProtocol.getBarcode().intValue()){ +// //鎻愬崌鏈烘槸鍚︾┖闂诧紝鎻愬崌鏈烘槸鍚﹀埌杈剧洰鏍囨ゼ灞傦紝鐩爣妤煎眰鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙蜂綅 +// if (!liftProtocol.isIdleNoTask()) { +// return false;//鎻愬崌鏈哄繖锛岀姝笅鍙戝懡浠� +// } +// if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkNo) { +// //鎻愬崌鏈哄伐浣滃彿鍜屽綋鍓嶅伐浣滀笉鐩稿悓锛岀姝笅鍙戝懡浠� +// return false; +// } +// +// Short distCodeNum = command.getDistCodeNum();//鐩爣浜岀淮鐮� +// BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); +// BasDevp basDevp = basDevpService.queryByQrCode(distCodeNum.intValue());//鐩爣绔欑偣 +// if (basDevp == null) { +// return false;//鎵句笉鍒扮洰鏍囩珯锛岀姝笅鍙戝懡浠� +// } +// +// int lev = Utils.getLev(basDevp.getLocNo());//鐩爣浜岀淮鐮佹墍鍦ㄦゼ灞� +// int liftLev = liftProtocol.getLev().intValue();//鎻愬崌鏈烘墍鍦ㄦゼ灞� +// if (liftLev != lev) { +// return false;//鎻愬崌鏈轰笉鍦ㄧ洰鏍囨ゼ灞傦紝绂佹涓嬪彂鍛戒护 +// } +// +// //鑾峰彇鐩爣绔欎俊鎭� +// SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); +// StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo()); +// if (staProtocol == null) { +// return false;//绔欑偣淇℃伅涓嶅瓨鍦紝绂佹涓嬪彂鍛戒护 +// } +// if (!staProtocol.isLiftArrival()) { +// return false;//绔欑偣鎻愬崌鏈哄埌浣嶄俊鍙穎alse锛岀姝笅鍙戝懡浠� +// } +// +// //鏉′欢婊¤冻锛屽崰鐢ㄦ彁鍗囨満 +// liftProtocol.setTaskNo(wrkNo); +// } +// } +// +// //涓嬪彂鍛戒护 +// if (!write(command)) { +// News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); +// return false; +// } else { +// News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); +// +// //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂) +// shuttleProtocol.setPakMk(false); +// +// //淇濆瓨鏁版嵁鍒版暟鎹簱鍋氭祦姘� +// BasShuttleOptService shuttleOptService = SpringUtils.getBean(BasShuttleOptService.class); +// if (shuttleOptService != null) { +// short[] commandArr = getCommandArr(command);//鑾峰彇鍛戒护鎶ユ枃 +// BasShuttleOpt opt = new BasShuttleOpt( +// assignCommand.getTaskNo().intValue(), +// assignCommand.getShuttleNo().intValue(), +// new Date(), +// ShuttleTaskModeType.get(assignCommand.getTaskMode()).desc, +// assignCommand.getSourceLocNo(), +// assignCommand.getLocNo(), +// null, +// null, +// null, +// JSON.toJSONString(command), +// JSON.toJSONString(commandArr) +// ); +// shuttleOptService.insert(opt); +// } +// +// //鍒ゆ柇鏁版嵁鏄惁鎵ц瀹屾垚 +// if (commandStep < size - 1) { +// //鏇存柊redis鏁版嵁 +// //姝ュ簭澧炲姞 +// commandStep++; +// redisCommand.setCommandStep(commandStep); +// //浠诲姟鏁版嵁淇濆瓨鍒皉edis +// redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand)); +// }else { +// //宸叉墽琛屽畬鎴� +// +// if (redisCommand.getLiftSecurityMk()) { +// //鏇鹃攣瀹氳繃鎻愬崌鏈猴紝闇�瑕佽繘琛岃В閿� +// if (liftProtocol != null) { +// liftProtocol.setSecurityMk(false); +// } +// } +// +// String locNo = shuttleProtocol.getLocNo() == null ? shuttleProtocol.getSourceLocNo() : shuttleProtocol.getLocNo(); +// if (locNo != null) { +// //瑙i櫎閿佸畾鐨勫簱浣嶈矾寰� +// NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(locNo)); +// navigateMapData.writeNavigateNodeToRedisMap(redisCommand.getAssignCommand().getNodes(), false); +// } +// +// //鍒犻櫎redis +// redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo()); +// +// if (!assignCommand.getAuto()) { +// //鎵嬪姩妯″紡涓嶆姏鍑虹瓑寰呯姸鎬侊紝鐩存帴澶嶄綅 +// //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵�� +// shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); +// //浠诲姟鍙锋竻闆� +// shuttleProtocol.setTaskNo((short) 0); +// //鏍囪澶嶄綅 +// shuttleProtocol.setPakMk(true); +// News.info("鍥涘悜绌挎杞︽墜鍔ㄤ换鍔℃墽琛屽畬鎴愶紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); +// }else { +// if (!assignCommand.getCharge()) { +// //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting +// shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING); +// }else { +// shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING); +// } +// News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屼笅鍙戝畬鎴愮瓑寰呮墽琛岀粨鏉燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); +// } +// +// } +// +// } return true; } @@ -920,154 +919,155 @@ return false; } - //鎷垮埌鎻愬崌鏈虹嚎绋� - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); - if (liftThread == null) { - return false; - } - LiftProtocol liftProtocol = liftThread.getLiftProtocol(); - if (liftProtocol == null) { - return false; - } - - Object o = redisUtil.get("shuttle_wrk_no_" + wrkNo); - if (o == null) { - return false; - } - ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class); - //褰撳墠姝ュ簭 - int commandStep = redisCommand.getCommandStep(); - - //妫�娴嬫槸鍚﹀瓨鍦ㄦ彁鍗囨満鍙g殑鎸囦护 - List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands(); - if (commands.size() > 0) { - if (commands.get(commandStep).getCommandWord() != 1) { - //涓嶆槸琛岃蛋鍛戒护锛岀洿鎺ユ斁琛� - return true; - } - - if (commands.get(0).getStartCodeNum() == null) { - return false; - } - } - - if (commands.size() == 0) { - return false; - } - - //褰撳墠绛夊緟鎵ц鐨勬寚浠� - ShuttleCommand command = commands.get(commandStep); - - BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); - ArrayList<Short> qrCodeValues = new ArrayList<>(); - for (BasDevp basDevp : basDevpService.selectList(null)) { - //灏嗘墍鏈夋彁鍗囨満鍙d簩缁寸爜瀛樺叆list - qrCodeValues.add(Short.parseShort(basDevp.getQrCodeValue())); - } - - Integer siteNo = null;//绔欑偣鍙� - for (Short qrCodeValue : qrCodeValues) { - //鐩爣浣嶇疆鏄彁鍗囨満鍙o紝鎴栬捣鐐逛綅缃槸鎻愬崌鏈哄彛涓旂洰鏍囨槸鍘绘彁鍗囨満鍐� - if (command.getDistCodeNum() == null || command.getStartCodeNum() == null) { - continue; - } - - if (qrCodeValue.intValue() == command.getDistCodeNum().intValue() || (qrCodeValue.intValue() == command.getStartCodeNum().intValue() && command.getDistCodeNum().intValue() == liftProtocol.getBarcode().intValue())) { - //瀛樺湪 - BasDevp basDevp = basDevpService.queryByQrCode(qrCodeValue.intValue()); - siteNo = basDevp.getDevNo(); - break; - } - } - - if (siteNo == null) { - //鎵句笉鍒扮珯鐐癸紝璇存槑杩樻湭鍒版彁鍗囨満 - return true; - } - - -// //閬嶅巻鎵�鏈夋寚浠わ紝鍒ゆ柇鏄惁鏈夊埌鎻愬崌鏈哄彛鐨勬寚浠ゆ垨浠庢彁鍗囨満鍙e墠寰�鎻愬崌鏈哄唴鐨勬寚浠わ紝骞惰幏鍙栧埌杈捐鎻愬崌鏈哄彛鎵�闇�姝ュ簭 -// int step = 0; -// Integer siteNo = null;//绔欑偣鍙� -// ShuttleCommand command = null; -// for (int i = 0; i < commands.size(); i++) { -// command = commands.get(i); -// for (Short qrCodeValue : qrCodeValues) { -// //鐩爣浣嶇疆鏄彁鍗囨満鍙o紝鎴栬捣鐐逛綅缃槸鎻愬崌鏈哄彛涓旂洰鏍囨槸鍘绘彁鍗囨満鍐� -// if (command.getDistCodeNum() == null || command.getStartCodeNum() == null) { -// continue; -// } +// //鎷垮埌鎻愬崌鏈虹嚎绋� +// LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); +// if (liftThread == null) { +// return false; +// } +// LiftProtocol liftProtocol = liftThread.getLiftProtocol(); +// if (liftProtocol == null) { +// return false; +// } // -// if (qrCodeValue.intValue() == command.getDistCodeNum().intValue() || (qrCodeValue.intValue() == command.getStartCodeNum().intValue() && command.getDistCodeNum().intValue() == liftProtocol.getBarcode().intValue())) { -// //瀛樺湪 -// step = i + 1; -// BasDevp basDevp = basDevpService.queryByQrCode(qrCodeValue.intValue()); -// siteNo = basDevp.getDevNo(); -// break; +// Object o = redisUtil.get("shuttle_wrk_no_" + wrkNo); +// if (o == null) { +// return false; +// } +// ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class); +// //褰撳墠姝ュ簭 +// int commandStep = redisCommand.getCommandStep(); +// +// //妫�娴嬫槸鍚﹀瓨鍦ㄦ彁鍗囨満鍙g殑鎸囦护 +// List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands(); +// if (commands.size() > 0) { +// if (commands.get(commandStep).getCommandWord() != 1) { +// //涓嶆槸琛岃蛋鍛戒护锛岀洿鎺ユ斁琛� +// return true; +// } +// +// if (commands.get(0).getStartCodeNum() == null) { +// return false; +// } +// } +// +// if (commands.size() == 0) { +// return false; +// } +// +// //褰撳墠绛夊緟鎵ц鐨勬寚浠� +// ShuttleCommand command = commands.get(commandStep); +// +// BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); +// ArrayList<Short> qrCodeValues = new ArrayList<>(); +// for (BasDevp basDevp : basDevpService.selectList(null)) { +// //灏嗘墍鏈夋彁鍗囨満鍙d簩缁寸爜瀛樺叆list +// qrCodeValues.add(Short.parseShort(basDevp.getQrCodeValue())); +// } +// +// Integer siteNo = null;//绔欑偣鍙� +// for (Short qrCodeValue : qrCodeValues) { +// //鐩爣浣嶇疆鏄彁鍗囨満鍙o紝鎴栬捣鐐逛綅缃槸鎻愬崌鏈哄彛涓旂洰鏍囨槸鍘绘彁鍗囨満鍐� +// if (command.getDistCodeNum() == null || command.getStartCodeNum() == null) { +// continue; +// } +// +// if (qrCodeValue.intValue() == command.getDistCodeNum().intValue() || (qrCodeValue.intValue() == command.getStartCodeNum().intValue() && command.getDistCodeNum().intValue() == liftProtocol.getBarcode().intValue())) { +// //瀛樺湪 +// BasDevp basDevp = basDevpService.queryByQrCode(qrCodeValue.intValue()); +// siteNo = basDevp.getDevNo(); +// break; +// } +// } +// +// if (siteNo == null) { +// //鎵句笉鍒扮珯鐐癸紝璇存槑杩樻湭鍒版彁鍗囨満 +// return true; +// } +// +// +//// //閬嶅巻鎵�鏈夋寚浠わ紝鍒ゆ柇鏄惁鏈夊埌鎻愬崌鏈哄彛鐨勬寚浠ゆ垨浠庢彁鍗囨満鍙e墠寰�鎻愬崌鏈哄唴鐨勬寚浠わ紝骞惰幏鍙栧埌杈捐鎻愬崌鏈哄彛鎵�闇�姝ュ簭 +//// int step = 0; +//// Integer siteNo = null;//绔欑偣鍙� +//// ShuttleCommand command = null; +//// for (int i = 0; i < commands.size(); i++) { +//// command = commands.get(i); +//// for (Short qrCodeValue : qrCodeValues) { +//// //鐩爣浣嶇疆鏄彁鍗囨満鍙o紝鎴栬捣鐐逛綅缃槸鎻愬崌鏈哄彛涓旂洰鏍囨槸鍘绘彁鍗囨満鍐� +//// if (command.getDistCodeNum() == null || command.getStartCodeNum() == null) { +//// continue; +//// } +//// +//// if (qrCodeValue.intValue() == command.getDistCodeNum().intValue() || (qrCodeValue.intValue() == command.getStartCodeNum().intValue() && command.getDistCodeNum().intValue() == liftProtocol.getBarcode().intValue())) { +//// //瀛樺湪 +//// step = i + 1; +//// BasDevp basDevp = basDevpService.queryByQrCode(qrCodeValue.intValue()); +//// siteNo = basDevp.getDevNo(); +//// break; +//// } +//// } +//// } +//// +//// if (step == 0) { +//// //鏃犻渶鍚庣画妫�娴嬶紝鐩存帴鏀捐 +//// return true; +//// } +// +// //鍒ゆ柇涓嬩竴姝ユ槸鍚︿负鎻愬崌鏈哄彛鎴栨彁鍗囨満鍐� +// if (commandStep < commands.size()) { +// ShuttleCommand command1 = commands.get(commandStep); +// Short distCodeNum = command1.getDistCodeNum(); +// if (distCodeNum != null) { +// BasDevp basDevp = basDevpService.queryByQrCode(Integer.valueOf(distCodeNum)); +// if (basDevp == null && distCodeNum.intValue() != liftProtocol.getBarcode().intValue()) { +// return true;//涓嬩竴姝ヤ笉鏄彁鍗囨満鍙o紝璺宠繃鍚庣画娴佺▼ // } // } // } // -// if (step == 0) { -// //鏃犻渶鍚庣画妫�娴嬶紝鐩存帴鏀捐 +// //鑾峰彇鍥涘悜绌挎杞﹀綋鍓嶆ゼ灞� +// String shuttleLocNo = shuttleProtocol.getCurrentLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿 +// Integer shuttleLocNoLev = shuttleLocNo == null ? 0 : Utils.getLev(shuttleLocNo);//搴撲綅鍙峰搴斿眰楂� +// +// //鍒ゆ柇绌挎杞﹀拰鎻愬崌鏈烘槸鍚﹀湪鐩爣妤煎眰 +// if (shuttleLocNoLev >= 2) { +// shuttleLocNoLev++; +// } +// +// //鍒ゆ柇杈撻�佺嚎绔欑偣鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙� +// SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); +// StaProtocol staProtocol = siemensDevpThread.getStation().get(siteNo); +// if (!staProtocol.isLiftArrival()) { +// //杈撻�佺嚎鍙嶉鎻愬崌鏈烘病鏈夊埌浣� +// executeLift(liftThread, liftProtocol, redisCommand, shuttleLocNoLev);//璋冨害鎻愬崌鏈� +// return false; +// } +// +// if (shuttleProtocol.getCurrentCode().intValue() == liftProtocol.getBarcode().intValue()) { +// //灏忚溅澶勪簬鎻愬崌鏈哄唴 // return true; +// }else { +// if (liftProtocol.getPositionArrivalFeedback$() == shuttleLocNoLev) { +// //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁浠诲姟鍙� +// if (liftProtocol.getTaskNo().intValue() != 0) { +// //鍒ゆ柇浠诲姟鍙锋槸鍚﹀拰褰撳墠灏忚溅浠诲姟涓�鑷� +// if (liftProtocol.getTaskNo().intValue() != wrkNo.intValue()) { +// return false;//浠诲姟鍙蜂笉涓�鑷达紝涓旀彁鍗囨満浠诲姟鍙蜂笉涓�0 +// } +// } +// liftProtocol.setTaskNo(wrkNo);//缁欐彁鍗囨満鍐欏伐浣滃彿锛岄槻姝㈣鍗犵敤 +// WrkMastService wrkMastService = SpringUtils.getBean(WrkMastService.class); +// WrkMast wrkMast = wrkMastService.selectById(shuttleProtocol.getTaskNo()); +// if (wrkMast != null) { +// wrkMast.setLiftNo(liftProtocol.getLiftNo().intValue());//閿佸畾鎻愬崌鏈猴紝闃叉琚姠鍗� +// wrkMastService.updateById(wrkMast); +// } +// return true;//鎻愬崌鏈哄埌浣� +// } +// executeLift(liftThread, liftProtocol, redisCommand, shuttleLocNoLev);//璋冨害鎻愬崌鏈� +// return false;//鎻愬崌鏈烘病鏈夊埌浣� // } - //鍒ゆ柇涓嬩竴姝ユ槸鍚︿负鎻愬崌鏈哄彛鎴栨彁鍗囨満鍐� - if (commandStep < commands.size()) { - ShuttleCommand command1 = commands.get(commandStep); - Short distCodeNum = command1.getDistCodeNum(); - if (distCodeNum != null) { - BasDevp basDevp = basDevpService.queryByQrCode(Integer.valueOf(distCodeNum)); - if (basDevp == null && distCodeNum.intValue() != liftProtocol.getBarcode().intValue()) { - return true;//涓嬩竴姝ヤ笉鏄彁鍗囨満鍙o紝璺宠繃鍚庣画娴佺▼ - } - } - } - - //鑾峰彇鍥涘悜绌挎杞﹀綋鍓嶆ゼ灞� - String shuttleLocNo = shuttleProtocol.getCurrentLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿 - Integer shuttleLocNoLev = shuttleLocNo == null ? 0 : Utils.getLev(shuttleLocNo);//搴撲綅鍙峰搴斿眰楂� - - //鍒ゆ柇绌挎杞﹀拰鎻愬崌鏈烘槸鍚﹀湪鐩爣妤煎眰 - if (shuttleLocNoLev >= 2) { - shuttleLocNoLev++; - } - - //鍒ゆ柇杈撻�佺嚎绔欑偣鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙� - SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); - StaProtocol staProtocol = siemensDevpThread.getStation().get(siteNo); - if (!staProtocol.isLiftArrival()) { - //杈撻�佺嚎鍙嶉鎻愬崌鏈烘病鏈夊埌浣� - executeLift(liftThread, liftProtocol, redisCommand, shuttleLocNoLev);//璋冨害鎻愬崌鏈� - return false; - } - - if (shuttleProtocol.getCurrentCode().intValue() == liftProtocol.getBarcode().intValue()) { - //灏忚溅澶勪簬鎻愬崌鏈哄唴 - return true; - }else { - if (liftProtocol.getPositionArrivalFeedback$() == shuttleLocNoLev) { - //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁浠诲姟鍙� - if (liftProtocol.getTaskNo().intValue() != 0) { - //鍒ゆ柇浠诲姟鍙锋槸鍚﹀拰褰撳墠灏忚溅浠诲姟涓�鑷� - if (liftProtocol.getTaskNo().intValue() != wrkNo.intValue()) { - return false;//浠诲姟鍙蜂笉涓�鑷达紝涓旀彁鍗囨満浠诲姟鍙蜂笉涓�0 - } - } - liftProtocol.setTaskNo(wrkNo);//缁欐彁鍗囨満鍐欏伐浣滃彿锛岄槻姝㈣鍗犵敤 - WrkMastService wrkMastService = SpringUtils.getBean(WrkMastService.class); - WrkMast wrkMast = wrkMastService.selectById(shuttleProtocol.getTaskNo()); - if (wrkMast != null) { - wrkMast.setLiftNo(liftProtocol.getLiftNo().intValue());//閿佸畾鎻愬崌鏈猴紝闃叉琚姠鍗� - wrkMastService.updateById(wrkMast); - } - return true;//鎻愬崌鏈哄埌浣� - } - executeLift(liftThread, liftProtocol, redisCommand, shuttleLocNoLev);//璋冨害鎻愬崌鏈� - return false;//鎻愬崌鏈烘病鏈夊埌浣� - } - + return false; } private boolean executeLift(LiftThread liftThread, LiftProtocol liftProtocol, ShuttleRedisCommand redisCommand, Integer shuttleLocNoLev) {//璋冨害鎻愬崌鏈� @@ -1113,72 +1113,6 @@ liftAssignCommand.setTaskNo(liftProtocol.getTaskNo()); //涓嬪彂浠诲姟 MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, liftAssignCommand)); - return true; - } - - /** - * 澶嶄綅骞跺皾璇曚慨澶嶉敊璇� - */ - private boolean resetAndTryFix(Short wrkNo) { - //璇诲彇redis鏁版嵁 - if (wrkNo == null) { - return false; - } - - Object o = redisUtil.get("shuttle_wrk_no_" + wrkNo); - if (o == null) { - return false; - } - - ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class); - List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands(); - //褰撳墠姝ュ簭 - int commandStep = redisCommand.getCommandStep(); - //path璺緞鏁扮洰 - int size = commands.size(); - - ArrayList<ShuttleCommand> list = new ArrayList<>(); - - //鍙栧嚭鍛戒护 - ShuttleCommand command = commands.get(commandStep - 1); - - //澶嶄綅鍛戒护 - ShuttleCommand resetCommand = getResetCommand(); - list.add(resetCommand); - - //杞﹁締绌洪棽锛岀瓑寰呭啓鍏ユ壘搴撲綅鍛戒护 - //鎵惧簱浣嶅懡浠� - short direction = 1; - switch (command.getRunDirection()) {//杞崲杩愯鏂瑰悜 - case 1: - direction = 2; - break; - case 2: - direction = 1; - break; - case 3: - direction = 4; - break; - case 4: - direction = 3; - break; - default: - direction = 1; - } - //鎵惧簱浣嶅懡浠� - ShuttleCommand searchCommand = getFindLocCommand(direction, 1200, (short) 1000); - list.add(searchCommand); - - //绉诲姩杞﹁締锛岄渶瑕佸湪鎵ц瀹屽鎵惧畾浣嶇偣鍚庡啀鎵ц - ShuttleCommand moveCommand = new ShuttleCommand(); - moveCommand.setCommandWord((short) 1); - moveCommand.setStartCodeNum(command.getStartCodeNum());//瀛樺叆鐩爣搴撲綅鍙� - list.add(moveCommand); - - redisCommand.setErrorCommands(list); - //浠诲姟鏁版嵁淇濆瓨鍒皉edis - redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand)); - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.FIXING); return true; } diff --git a/src/main/webapp/static/readStatus.json b/src/main/webapp/static/readStatus.json index 33593c4..7b5cd11 100644 --- a/src/main/webapp/static/readStatus.json +++ b/src/main/webapp/static/readStatus.json @@ -25,8 +25,8 @@ "surplusQuantity": 450, "countQuantity": 500, "point": { - "x": 1, - "y": 2, + "x": 4, + "y": 21, "z": 1 }, "coord": { diff --git a/src/main/webapp/views/shuttle.html b/src/main/webapp/views/shuttle.html index d5be706..fda3c72 100644 --- a/src/main/webapp/views/shuttle.html +++ b/src/main/webapp/views/shuttle.html @@ -70,6 +70,7 @@ <th>鎬荤數閲�</th> <th>鎬婚噷绋嬫暟</th> <th>浣滀笟鏍囪</th> + <th>褰撳墠搴撲綅</th> </tr> </thead> <tbody> @@ -114,8 +115,7 @@ </div> <div style="margin-top: 10px;"> - <button class="item" onclick="shuttleOperator(1)">鍏ュ簱</button> - <button class="item" onclick="shuttleOperator(2)">鍑哄簱</button> + <button class="item" onclick="shuttleOperator(18)">鎼繍璐х墿</button> <button class="item" onclick="shuttleOperator(14)">绉诲姩鍒扮洰鏍囧簱浣�</button> <button class="item" onclick="shuttleOperator(16)">绉诲姩鍒版彁鍗囨満</button> </div> @@ -130,50 +130,42 @@ <div class="button-group"> <button class="item" onclick="shuttleOperator(3)">鎵樼洏椤跺崌</button> <button class="item" onclick="shuttleOperator(4)">鎵樼洏涓嬮檷</button> - <button class="item" onclick="shuttleOperator(5)">宸︾Щ</button> - <button class="item" onclick="shuttleOperator(6)">鍙崇Щ</button> - <button class="item" onclick="shuttleOperator(7)">鍚庣Щ</button> - <button class="item" onclick="shuttleOperator(8)">鍓嶇Щ</button> - <button class="item" onclick="shuttleOperator(9)">澶嶄綅</button> - <button class="item" onclick="shuttleOperator(10)">姝f柟鍚�(鍙�)瀵诲簱浣�</button> - <button class="item" onclick="shuttleOperator(11)">璐熸柟鍚�(宸�)瀵诲簱浣�</button> - <button class="item" onclick="shuttleOperator(12)">姝f柟鍚�(鍓�)瀵诲簱浣�</button> - <button class="item" onclick="shuttleOperator(13)">璐熸柟鍚�(鍚�)瀵诲簱浣�</button> <button class="item" onclick="shuttleOperator(15)">鍏呯數寮�鍏�</button> + <button class="item" onclick="shuttleOperator(9)">澶嶄綅</button> </div> </div> </div> </div> - <div style="width: 20%;"> - <div class="operator-item" style="height: auto;width: 100%;"> - <span class="select-title">璁剧疆閰嶇疆鍙傛暟</span> - <div class="select-container" style="height: auto;padding: 30px 10px 10px 10px;"> - <div class="select-container-item"> - <span>杩愯閫熷害</span> - <label><input id="runSpeed" type="text" name="runSpeed" /></label> - </div> - <div class="select-container-item"> - <span>鍏呯數闃堝��</span> - <label><input id="chargeLine" type="text" name="runSpeed" /></label> - </div> +<!-- <div style="width: 20%;">--> +<!-- <div class="operator-item" style="height: auto;width: 100%;">--> +<!-- <span class="select-title">璁剧疆閰嶇疆鍙傛暟</span>--> +<!-- <div class="select-container" style="height: auto;padding: 30px 10px 10px 10px;">--> +<!-- <div class="select-container-item">--> +<!-- <span>杩愯閫熷害</span>--> +<!-- <label><input id="runSpeed" type="text" name="runSpeed" /></label>--> +<!-- </div>--> +<!-- <div class="select-container-item">--> +<!-- <span>鍏呯數闃堝��</span>--> +<!-- <label><input id="chargeLine" type="text" name="runSpeed" /></label>--> +<!-- </div>--> - <div> - <button class="item" onclick="shuttleParamSave()">淇濆瓨</button> - </div> - </div> - </div> - </div> +<!-- <div>--> +<!-- <button class="item" onclick="shuttleParamSave()">淇濆瓨</button>--> +<!-- </div>--> +<!-- </div>--> +<!-- </div>--> +<!-- </div>--> - <div style="width: 15%;"> - <div class="operator-item" style="height: auto;width: 100%;"> - <span class="select-title">閰嶇疆鍙傛暟</span> - <div class="select-container" style="height: auto;padding: 30px 10px 10px 10px;"> - <div>杩愯閫熷害锛�<span id="runSpeedText"></span></div> - <div>鍏呯數闃堝�硷細<span id="chargeLineText"></span></div> - </div> - </div> - </div> +<!-- <div style="width: 15%;">--> +<!-- <div class="operator-item" style="height: auto;width: 100%;">--> +<!-- <span class="select-title">閰嶇疆鍙傛暟</span>--> +<!-- <div class="select-container" style="height: auto;padding: 30px 10px 10px 10px;">--> +<!-- <div>杩愯閫熷害锛�<span id="runSpeedText"></span></div>--> +<!-- <div>鍏呯數闃堝�硷細<span id="chargeLineText"></span></div>--> +<!-- </div>--> +<!-- </div>--> +<!-- </div>--> </div> </fieldset> </div> @@ -378,6 +370,7 @@ setVal(tr.children("td").eq(9), table[i-1].countQuantity); setVal(tr.children("td").eq(10), table[i-1].statusSum.mileage); setVal(tr.children("td").eq(11), table[i-1].pakMk$); + setVal(tr.children("td").eq(12), table[i-1].currentLocNo); if (table[i-1].shuttleNo == parseInt($('input[name="shuttleSelect"]:checked').val())) { $("#runSpeedText").text(table[i-1].runSpeed) $("#chargeLineText").text(table[i-1].chargeLine + "%") -- Gitblit v1.9.1