From 3644989d8aa96bcb5ac837f6c79dff4de5f83736 Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期一, 21 四月 2025 16:35:11 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java | 1702 ++++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 1,053 insertions(+), 649 deletions(-) diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java index 493ca83..b24f12a 100644 --- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java +++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java @@ -1,26 +1,22 @@ package com.zy.asrs.wcs.core.kernel; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.zy.asrs.framework.common.Cools; import com.zy.asrs.wcs.core.domain.dto.MotionDto; -import com.zy.asrs.wcs.core.entity.ShuttleStandby; -import com.zy.asrs.wcs.core.entity.Task; +import com.zy.asrs.wcs.core.entity.*; import com.zy.asrs.wcs.core.model.enums.DeviceCtgType; import com.zy.asrs.wcs.core.model.enums.MotionCtgType; +import com.zy.asrs.wcs.core.model.enums.TaskCtgType; import com.zy.asrs.wcs.core.model.enums.TaskStsType; -import com.zy.asrs.wcs.core.service.ShuttleStandbyService; -import com.zy.asrs.wcs.core.service.TaskService; +import com.zy.asrs.wcs.core.service.*; import com.zy.asrs.wcs.core.utils.ConveyorDispatcher; import com.zy.asrs.wcs.core.utils.LiftDispatcher; import com.zy.asrs.wcs.core.utils.ShuttleDispatcher; import com.zy.asrs.wcs.core.utils.Utils; import com.zy.asrs.wcs.rcs.cache.SlaveConnection; -import com.zy.asrs.wcs.core.entity.Motion; import com.zy.asrs.wcs.rcs.entity.Device; import com.zy.asrs.wcs.rcs.model.enums.SlaveType; import com.zy.asrs.wcs.rcs.model.protocol.LiftProtocol; import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol; -import com.zy.asrs.wcs.core.service.MotionService; import com.zy.asrs.wcs.rcs.service.DeviceService; import com.zy.asrs.wcs.rcs.thread.LiftThread; import com.zy.asrs.wcs.rcs.thread.ShuttleThread; @@ -53,15 +49,13 @@ private DeviceService deviceService; @Autowired private ShuttleStandbyService shuttleStandbyService; + @Autowired + private BasConveyorPathService basConveyorPathService; + @Autowired + private TaskCtgService taskCtgService; public List<Motion> generateMotion(Task task) { List<Motion> motionList = new ArrayList<>(); -// switch (Objects.requireNonNull(WorkZoneType.query(task.getTaskSts() == TaskStsType.NEW_INBOUND.sts ? task.getOriginSite() : task.getDestSite()))) { -// case FIRST_ZONE: -// motionList = this.generateFirstZoneMotion(task); -// break; -// default: -// } motionList = this.generateFirstZoneMotion(task); return motionList; } @@ -69,8 +63,6 @@ public List<Motion> generateFirstZoneMotion(Task task) { List<Motion> motionList = new ArrayList<>(); - String shuttleNo = null; - String liftNo = null; /** * 鍏ュ簱 * 涓�銆佸叆搴撶洰鏍囧眰鏈夌┛姊溅 @@ -81,172 +73,182 @@ * 5.绌挎杞﹀叆搴撹嚦鐩爣搴撲綅 */ if (task.getTaskSts() == TaskStsType.NEW_INBOUND.sts) { -// // lift -// LiftThread liftThread = liftDispatcher.queryLiftForTransport(task.getOriginSite()); -// LiftProtocol liftProtocol = liftThread.getStatus(); -// if (liftProtocol == null) { -// return motionList; -// } + // locNo + String destLoc = task.getDestLoc(); // shuttle -// ShuttleThread shuttleThread = shuttleDispatcher.queryShuttleWhichConvenient(task, Integer.parseInt(liftThread.getStatus().getLiftNo())); -// ShuttleThread shuttleThread = shuttleDispatcher.queryShuttleWhichConvenient(task, 1); - ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, 6); - if (Cools.isEmpty(shuttleThread)) { return motionList; } + Device shuttleDevice = deviceService.getOne(new LambdaQueryWrapper<Device>() + .eq(Device::getDeviceNo, task.getShuttleNo()) + .eq(Device::getDeviceType, DeviceCtgType.SHUTTLE.val()) + .eq(Device::getHostId, task.getHostId()) + .eq(Device::getStatus, 1)); + if (shuttleDevice == null) { + return motionList; + } + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleDevice.getId().intValue()); ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); -// String shuttleLocNo = shuttleProtocol.getCurrentLocNo(); - String shuttleLocNo = "0100201"; + if (shuttleProtocol == null || shuttleProtocol.getShuttleNo() == null) { + return motionList; + } + if (!shuttleThread.isIdle()) { + return motionList; + } -// // conveyor -// DevpSlave devpSlave = conveyorDispatcher.queryByInBound(task.getSourceStaNo()); -// DevpSlave.Sta slaveInSta = devpSlave.queryInSta(wrkMast.getSourceStaNo()); + String shuttleLocNo = shuttleProtocol.getCurrentLocNo(); -// //妫�娴嬬┛姊溅鏄惁鏈変换鍔$粦瀹� -// boolean shuttleResult = Utils.checkShuttleHasBinding(shuttleProtocol.getShuttleNo().intValue()); -// if (shuttleResult) { -// //瀛樺湪浠诲姟锛岀姝㈣В鏋� -// return motionList; -// } -// -// //妫�娴嬫彁鍗囨満鏄惁鏈変换鍔$粦瀹� -// boolean liftResult = Utils.checkLiftHasBinding(liftSlave.getId()); -// if (liftResult) { -// //瀛樺湪浠诲姟锛岀姝㈣В鏋� -// return motionList; -// } + //鑾峰彇璺濈鐩爣浣嶇疆鏈�杩戠殑绌洪棽鍙崲灞傛彁鍗囨満 + LiftThread liftThread = liftDispatcher.searchIdleLift(shuttleLocNo, task.getHostId(), true); + if (liftThread == null) { + return motionList; + } + Device transferLiftDevice = liftThread.getDevice(); -// //绌挎杞﹀埌鎻愬崌鏈哄簱浣嶅彿 -// String liftLocNoTo = LiftCodeType.getLocNo(Integer.parseInt(liftNo), Utils.getLev(shuttleLocNo), task.getHostId()); -// -// //绌挎杞﹀嚭鎻愬崌鏈哄簱浣嶅彿 -// String liftLocNoFrom = LiftCodeType.getLocNo(Integer.parseInt(liftNo), Utils.getLev(task.getDestLoc()), task.getHostId()); -// -// //绌挎杞﹀埌鎻愬崌鏈哄緟鏈轰綅搴撲綅鍙� -// String standbyLocNoTo = LiftCodeType.getStandbyLocNo(Integer.parseInt(liftNo), Utils.getLev(shuttleLocNo)); -// -// //绌挎杞﹀嚭鎻愬崌鏈哄緟鏈轰綅搴撲綅鍙� -// String standbyLocNoFrom = LiftCodeType.getStandbyLocNo(Integer.parseInt(liftNo), Utils.getLev(task.getDestLoc())); + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null || liftProtocol.getLiftNo() == null) { + return motionList; + } + + //妫�娴嬬┛姊溅鏄惁鏈変换鍔$粦瀹� + boolean shuttleResult = Utils.checkShuttleHasBinding(shuttleDevice, task.getTaskNo()); + if (shuttleResult) { + //瀛樺湪浠诲姟锛岀姝㈣В鏋� + return motionList; + } + + //鑾峰彇灏忚溅寰呮満搴撲綅 ==> 杩涙彁鍗囨満 + ShuttleStandby shuttleStandbyTo = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>() + .eq(ShuttleStandby::getDeviceId, transferLiftDevice.getId()) + .eq(ShuttleStandby::getDeviceLev, Utils.getLev(shuttleLocNo)) + .eq(ShuttleStandby::getStatus, 1)); + + //鑾峰彇灏忚溅寰呮満搴撲綅 ==> 鍑烘彁鍗囨満 + ShuttleStandby shuttleStandbyFrom = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>() + .eq(ShuttleStandby::getDeviceId, transferLiftDevice.getId()) + .eq(ShuttleStandby::getDeviceLev, Utils.getLev(destLoc)) + .eq(ShuttleStandby::getStatus, 1)); + if (shuttleStandbyTo == null || shuttleStandbyFrom == null) { + return motionList; + } + + //绌挎杞﹁繘鎻愬崌鏈哄簱浣嶅彿 + String liftLocNoTo = shuttleStandbyTo.getDeviceLoc(); + + //绌挎杞﹀嚭鎻愬崌鏈哄簱浣嶅彿 + String liftLocNoFrom = shuttleStandbyFrom.getDeviceLoc(); + + //绌挎杞﹁繘鎻愬崌鏈哄緟鏈轰綅搴撲綅鍙� + String standbyLocNoTo = shuttleStandbyTo.getDeviceStandbyLoc(); + + //绌挎杞﹀嚭鎻愬崌鏈哄緟鏈轰綅搴撲綅鍙� + String standbyLocNoFrom = shuttleStandbyFrom.getDeviceStandbyLoc(); // 鍏ュ簱鐩爣灞傛湁绌挎杞� if (Utils.getLev(shuttleLocNo) == Utils.getLev(task.getDestLoc())) { - // 绌挎杞﹁蛋琛岃嚦搴撲綅 + // 鎻愬崌鏈鸿浇璐хЩ鍔� + motionList.addAll(kernelService.liftMoveGoods( + MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLev(5);//绱㈢墝椤圭洰5灞傛槸杈撻�佺嚎灞� + dto.setStaNo(1);//鎻愬崌鏈哄乏渚� + })) + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLev(Utils.getLev(task.getDestLoc())); + dto.setStaNo(0);//鎻愬崌鏈哄唴渚� + dto.setSync(0);//寮傛鎵ц + })) + )); + + // 绌挎杞﹁蛋琛岃嚦鎻愬崌鏈哄簱浣嶅緟鏈轰綅 motionList.addAll(kernelService.shuttleMove( MotionDto.build((dto -> { - dto.setShuttleNo(Integer.valueOf(shuttleProtocol.getShuttleNo())); + dto.setShuttleNo(shuttleDevice.getId().intValue()); dto.setLocNo(shuttleLocNo); })), MotionDto.build((dto -> { - dto.setShuttleNo(Integer.valueOf(shuttleProtocol.getShuttleNo())); - dto.setLocNo(task.getDestLoc()); + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocNoTo); })), MotionCtgType.SHUTTLE_MOVE )); -// // 鎻愬崌鏈虹┖杞界Щ鍔� -// motionList.addAll(kernelService.liftMove( -// null -// , MotionDto.build((dto -> { -// dto.setLiftNo(Integer.valueOf(liftProtocol.getLiftNo())); -//// dto.setLev(slaveInSta.getLiftLev()); -// dto.setLev(1); -// })) -// )); -// -// // 杈撻�佺嚎鍏ュ簱鑷虫彁鍗囨満鍙� -// motionList.addAll(kernelService.conveyorInbound( -// MotionDto.build((dto -> { -//// dto.setDevpNo(devpSlave.getId()); -// dto.setDevpNo(1); -// dto.setStaNo(Integer.valueOf(task.getOriginSite())); -// })), -// MotionDto.build((dto -> { -// dto.setLiftNo(Integer.valueOf(liftProtocol.getLiftNo())); -//// dto.setLev(slaveInSta.getLiftLev()); -// dto.setLev(1); -// })), -// MotionCtgType.CONVEYOR_INBOUND_TO_LIFT -// )); -// -// // 鐩爣搴撲綅鏄惁涓庤緭閫佺嚎鍏ュ簱绔欏睘浜庡悓涓�灞� -// if (!slaveInSta.getLiftLev().equals(Utils.getLev(wrkMast.getLocNo()))) { -// // 鎻愬崌鏈鸿浇璐хЩ鍔� -// motionList.addAll(kernelService.liftMoveGoods( -// MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(slaveInSta.getLiftLev()); -// })) -// , MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(Utils.getLev(wrkMast.getLocNo())); -// })) -// )); -// } -// -// // 绌挎杞﹁蛋琛岃嚦鎻愬崌鏈哄簱浣嶅緟鏈轰綅 -// motionList.addAll(kernelService.shuttleMove( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(shuttleLocNo); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(standbyLocNoTo); -// })), -// MotionCtgType.SHUTTLE_MOVE -// )); -// -// // 鎻愬崌鏈虹Щ鍔ㄨ嚦灏忚溅妤煎眰 -// motionList.addAll(kernelService.liftMove( -// null -// , MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(Utils.getLev(shuttleLocNo)); -// })) -// )); -// -// // 绌挎杞﹀緟鏈轰綅鑷虫彁鍗囨満搴撲綅 -// motionList.addAll(kernelService.shuttleMove( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(standbyLocNoTo); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(liftLocNoTo); -// })), -// MotionCtgType.SHUTTLE_MOVE_TO_LIFT -// )); -// -// // 绌挎杞﹀叆搴撻《鍗囧苟绉诲姩鑷虫彁鍗囨満寰呮満浣� -// motionList.addAll(kernelService.shuttleTransport( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(liftLocNoFrom); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(standbyLocNoFrom); -// })), -// MotionCtgType.SHUTTLE_TRANSPORT_FROM_LIFT -// )); -// -// // 绌挎杞﹁蛋琛岃嚦鎻愬崌鏈哄簱浣嶅緟鏈轰綅 -// motionList.addAll(kernelService.shuttleMove( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(standbyLocNoFrom); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(wrkMast.getLocNo()); -// })), -// MotionCtgType.SHUTTLE_MOVE_DOWN_PALLET -// )); + // 閿佸畾鎻愬崌鏈� + motionList.addAll(kernelService.liftLock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + })) + )); + + // 绌挎杞﹀緟鏈轰綅鑷虫彁鍗囨満 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocNoTo); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLocNo(liftLocNoTo); + })), + MotionCtgType.SHUTTLE_MOVE_TO_LIFT + )); + + // 绌挎杞﹀叆搴撻《鍗� + motionList.addAll(kernelService.shuttleAction( + null, + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + })), + MotionCtgType.SHUTTLE_PALLET_LIFT + )); + + // 绌挎杞﹀叆搴撶Щ鍔ㄨ嚦鎻愬崌鏈哄緟鏈轰綅 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLocNo(liftLocNoFrom); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocNoFrom); + })), + MotionCtgType.SHUTTLE_MOVE_FROM_LIFT + )); + + // 瑙i攣鎻愬崌鏈� + motionList.addAll(kernelService.liftUnlock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setReleaseLift(1);//鎵ц瀹屾垚鍚庨噴鏀炬彁鍗囨満 + })) + )); + + // 绌挎杞﹁蛋琛岃嚦鐩爣搴撲綅 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocNoFrom); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLocNo(destLoc); + })), + MotionCtgType.SHUTTLE_MOVE + )); + + // 绌挎杞﹀叆搴撴墭鐩樹笅闄� + motionList.addAll(kernelService.shuttleAction( + null, + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + })), + MotionCtgType.SHUTTLE_PALLET_DOWN + )); /** * 浜屻�佸叆搴撶洰鏍囧眰娌℃湁绌挎杞� @@ -258,458 +260,670 @@ * 6.绌挎杞﹀叆搴撹嚦鐩爣搴撲綅 */ } else { -// -// // 绌挎杞﹁蛋琛岃嚦鎻愬崌鏈哄簱浣嶅緟鏈轰綅 -// motionList.addAll(kernelService.shuttleMove( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(shuttleLocNo); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(standbyLocNoTo); -// })), -// MotionCtgType.SHUTTLE_MOVE -// )); -// -// // 鎻愬崌鏈虹┖杞界Щ鍔ㄥ埌绌挎杞﹀眰 -// motionList.addAll(kernelService.liftMove( -// null -// , MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(Utils.getLev(shuttleLocNo)); -// })) -// )); -// -// // 绌挎杞﹀緟鏈轰綅鑷虫彁鍗囨満搴撲綅 -// motionList.addAll(kernelService.shuttleMove( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(standbyLocNoTo); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(liftLocNoTo); -// })), -// MotionCtgType.SHUTTLE_MOVE_TO_LIFT -// )); -// -// // 鎻愬崌鏈烘惉杞� 鑷� 杈撻�佺嚎灞� -// motionList.addAll(kernelService.liftMoveShuttle( -// MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(Utils.getLev(shuttleLocNo)); -// })), -// MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(slaveInSta.getLiftLev()); -// })) -// )); -// -// // 杈撻�佺嚎鍏ュ簱鑷虫彁鍗囨満鍙� -// motionList.addAll(kernelService.conveyorInbound( -// MotionDto.build((dto -> { -// dto.setDevpNo(devpSlave.getId()); -// dto.setStaNo(wrkMast.getSourceStaNo()); -// })), -// MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(slaveInSta.getLiftLev()); -// })), -// MotionCtgType.CONVEYOR_INBOUND_TO_LIFT -// )); -// -// // 鐩爣搴撲綅鏄惁涓庤緭閫佺嚎鍏ュ簱绔欏睘浜庡悓涓�灞� -// if (!slaveInSta.getLiftLev().equals(Utils.getLev(wrkMast.getLocNo()))) { -// // 鎻愬崌鏈鸿浇璐хЩ鍔� -// motionList.addAll(kernelService.liftMoveGoodsAndShuttle( -// MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(slaveInSta.getLiftLev()); -// })) -// , MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(Utils.getLev(wrkMast.getLocNo())); -// })) -// )); -// } -// -// // 绌挎杞﹀叆搴撻《鍗囧苟绉诲姩鑷虫彁鍗囨満寰呮満浣� -// motionList.addAll(kernelService.shuttleTransport( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(liftLocNoFrom); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(standbyLocNoFrom); -// })), -// MotionCtgType.SHUTTLE_TRANSPORT_FROM_LIFT -// )); -// -// // 绌挎杞﹀緟鏈轰綅鑷冲叆搴撳簱浣� -// motionList.addAll(kernelService.shuttleMove( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(standbyLocNoFrom); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(wrkMast.getLocNo()); -// })), -// MotionCtgType.SHUTTLE_MOVE_DOWN_PALLET -// )); + + // 绌挎杞﹁蛋琛岃嚦鎻愬崌鏈哄簱浣嶅緟鏈轰綅 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(shuttleLocNo); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLocNo(standbyLocNoTo); + })), + MotionCtgType.SHUTTLE_MOVE + )); + + // 鎻愬崌鏈虹┖杞界Щ鍔ㄥ埌绌挎杞﹀眰 + motionList.addAll(kernelService.liftMove( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLev(Utils.getLev(shuttleLocNo)); + })) + )); + + // 閿佸畾鎻愬崌鏈� + motionList.addAll(kernelService.liftLock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + })) + )); + + // 绌挎杞﹀緟鏈轰綅鑷虫彁鍗囨満 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocNoTo); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLocNo(liftLocNoTo); + })), + MotionCtgType.SHUTTLE_MOVE_TO_LIFT + )); + + // 瑙i攣鎻愬崌鏈� + motionList.addAll(kernelService.liftUnlock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + })) + )); + + // 鎻愬崌鏈鸿浇璐хЩ鍔� + motionList.addAll(kernelService.liftMoveGoods( + MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLev(5);//绱㈢墝椤圭洰5灞傛槸杈撻�佺嚎灞� + dto.setStaNo(1);//鎻愬崌鏈哄乏渚� + })) + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLev(Utils.getLev(task.getDestLoc())); + dto.setStaNo(0);//鎻愬崌鏈哄唴渚� + })) + )); + + // 閿佸畾鎻愬崌鏈� + motionList.addAll(kernelService.liftLock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + })) + )); + + // 绌挎杞﹀叆搴撻《鍗� + motionList.addAll(kernelService.shuttleAction( + null, + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + })), + MotionCtgType.SHUTTLE_PALLET_LIFT + )); + + // 鏇存柊灏忚溅鍧愭爣 + motionList.addAll(kernelService.shuttleUpdateLocation( + null + , MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(liftLocNoFrom); + })) + )); + + // 绌挎杞﹀叆搴撶Щ鍔ㄨ嚦鎻愬崌鏈哄緟鏈轰綅 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLocNo(liftLocNoFrom); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocNoFrom); + })), + MotionCtgType.SHUTTLE_MOVE_FROM_LIFT + )); + + // 瑙i攣鎻愬崌鏈� + motionList.addAll(kernelService.liftUnlock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setReleaseLift(1);//鎵ц瀹屾垚鍚庨噴鏀炬彁鍗囨満 + })) + )); + + // 绌挎杞﹁蛋琛岃嚦鐩爣搴撲綅 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocNoFrom); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLocNo(destLoc); + })), + MotionCtgType.SHUTTLE_MOVE + )); + + // 绌挎杞﹀叆搴撴墭鐩樹笅闄� + motionList.addAll(kernelService.shuttleAction( + null, + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + })), + MotionCtgType.SHUTTLE_PALLET_DOWN + )); } - shuttleNo = String.valueOf(shuttleProtocol.getShuttleNo()); -// liftNo = String.valueOf(liftProtocol.getLiftNo()); } /** * 鍑哄簱 */ if (task.getTaskSts() == TaskStsType.NEW_OUTBOUND.sts) { -// // lift -// LiftProtocol liftProtocol = liftDispatcher.queryLiftForTransport(wrkMast.getStaNo()); -// LiftSlave liftSlave = liftProtocol.querySlave(); -// -// // shuttle -// ShuttleProtocol shuttleProtocol = shuttleDispatcher.queryShuttleWhichConvenient(wrkMast, liftProtocol.getLiftNo().intValue()); -// if (Cools.isEmpty(shuttleProtocol)) { return motionList; } -// String shuttleLocNo = shuttleProtocol.getCurrentLocNo(); -// -// // conveyor -// DevpSlave devpSlave = conveyorDispatcher.queryByOutBound(wrkMast.getSourceStaNo()); -// DevpSlave.Sta slaveOutSta = devpSlave.queryOutSta(wrkMast.getSourceStaNo()); -// -// //妫�娴嬬┛姊溅鏄惁鏈変换鍔$粦瀹� -// boolean shuttleResult = Utils.checkShuttleHasBinding(shuttleProtocol.getShuttleNo().intValue()); -// if (shuttleResult) { -// //瀛樺湪浠诲姟锛岀姝㈣В鏋� -// return motionList; -// } -// -// //妫�娴嬫彁鍗囨満鏄惁鏈変换鍔$粦瀹� -// boolean liftResult = Utils.checkLiftHasBinding(liftSlave.getId()); -// if (liftResult) { -// //瀛樺湪浠诲姟锛岀姝㈣В鏋� -// return motionList; -// } -// -// //绌挎杞﹀埌鎻愬崌鏈哄簱浣嶅彿 -// String liftLocNoTo = LiftCodeType.getLocNo(liftSlave.getId(), Utils.getLev(shuttleLocNo)); -// -// //绌挎杞﹀嚭鎻愬崌鏈哄簱浣嶅彿 -// String liftLocNoFrom = LiftCodeType.getLocNo(liftSlave.getId(), Utils.getLev(wrkMast.getSourceLocNo())); -// -// //绌挎杞﹀埌鎻愬崌鏈哄緟鏈轰綅搴撲綅鍙� -// String standbyLocNoTo = LiftCodeType.getStandbyLocNo(liftSlave.getId(), Utils.getLev(shuttleLocNo)); -// -// //绌挎杞﹀嚭鎻愬崌鏈哄緟鏈轰綅搴撲綅鍙� -// String standbyLocNoFrom = LiftCodeType.getStandbyLocNo(liftSlave.getId(), Utils.getLev(wrkMast.getSourceLocNo())); -// -// /** -// * 鍑哄簱 -// * 涓�銆佸嚭搴撹捣濮嬪眰鏈夌┛姊溅 -// * 1.绌挎杞﹁蛋琛岃嚦鍑哄簱搴撲綅 -// * 2.鎻愬崌鏈哄埌鍑哄簱璧峰灞� -// * 3.绌挎杞﹀嚭搴撹嚦鎻愬崌鏈� -// * 4.绌挎杞︾寮�鎻愬崌鏈� -// * 5.鎻愬崌鏈鸿浇璐хЩ鍔紙闈炲繀闇�锛� -// * 6.杈撻�佺嚎杩愯緭鑷冲嚭搴撳彛 -// */ -// if (Utils.getLev(shuttleLocNo) == Utils.getLev(wrkMast.getSourceLocNo())) { -// -// //绌挎杞︿笉鍦ㄥ嚭搴撳簱浣� -// if (!shuttleLocNo.equals(wrkMast.getSourceLocNo())) { -// // 绌挎杞﹁蛋琛岃嚦鍑哄簱搴撲綅 -// motionList.addAll(kernelService.shuttleMove( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(shuttleLocNo); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(wrkMast.getSourceLocNo()); -// })), -// MotionCtgType.SHUTTLE_MOVE -// )); -// } -// -// // 绌挎杞﹀嚭搴撹嚦鎻愬崌鏈哄緟鏈轰綅 -// motionList.addAll(kernelService.shuttleTransport( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(wrkMast.getSourceLocNo()); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(standbyLocNoTo); -// })), -// MotionCtgType.SHUTTLE_MOVE_LIFT_PALLET -// )); -// -// // 鎻愬崌鏈虹┖杞界Щ鍔� -// motionList.addAll(kernelService.liftMove( -// null -// , MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(Utils.getLev(wrkMast.getSourceLocNo())); -// })) -// )); -// -// // 绌挎杞﹀緟鏈轰綅鑷虫彁鍗囨満 -// motionList.addAll(kernelService.shuttleTransport( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(standbyLocNoTo); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(liftLocNoTo); -// })), -// MotionCtgType.SHUTTLE_TRANSPORT_TO_LIFT -// )); -// -// // 绌挎杞︾寮�鎻愬崌鏈� - 鍒版彁鍗囨満寰呮満浣� -// motionList.addAll(kernelService.shuttleMove( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(liftLocNoFrom); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(standbyLocNoFrom); -// })), -// MotionCtgType.SHUTTLE_MOVE_FROM_LIFT -// )); -// -// // 鎻愬崌鏈鸿浇璐хЩ鍔� -// // 鍑哄簱搴撲綅鏄惁涓庤緭閫佺嚎鍑哄簱绔欏睘浜庡悓涓�灞� -// if (!slaveOutSta.getLiftLev().equals(Utils.getLev(wrkMast.getSourceLocNo()))) { -// motionList.addAll(kernelService.liftMoveGoods( -// MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(Utils.getLev(wrkMast.getSourceLocNo())); -// })), -// MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(slaveOutSta.getLiftLev()); -// })) -// )); -// } -// -// LiftNeighborType neighborType = LiftNeighborType.query(liftSlave.getId(), slaveOutSta.getLiftLev(), false, wrkMast.getStaNo()); -// -// // 鎻愬崌鏈鸿繍杈撳埌杈撻�佺嚎 -// motionList.addAll(kernelService.liftTransportGoodsToConveyor( -// MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(slaveOutSta.getLiftLev()); -// })), -// MotionDto.build((dto -> { -// dto.setDevpNo(devpSlave.getId()); -// dto.setStaNo(neighborType.staNo); -// })) -// )); -// -// // 绌挎杞︽彁鍗囨満寰呮満浣� - 鍒板緟鏈轰綅 -// motionList.addAll(kernelService.shuttleMove( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(standbyLocNoFrom); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo( -// ShuttleTempLocType.query(shuttleProtocol.getShuttleNo().intValue(), liftSlave.getId(), Utils.getLev(wrkMast.getSourceLocNo())).locNo -// ); -// })), -// MotionCtgType.SHUTTLE_MOVE -// )); -// -// /** -// * 浜屻�佸嚭搴撹捣濮嬪眰娌℃湁绌挎杞� -// * -// * 1.鎻愬崌鏈哄埌绌挎杞﹀眰 -// * 2.绌挎杞﹁蛋琛岃嚦鎻愬崌鏈� -// * 3.鎻愬崌鏈鸿浇杞﹁嚦鍑哄簱璧峰灞� -// * 4.绌挎杞﹁蛋琛岃嚦鍑哄簱搴撲綅 -// * 5.绌挎杞﹀嚭搴撹嚦鎻愬崌鏈� -// * 6.绌挎杞︾寮�鎻愬崌鏈� -// * 7.鎻愬崌鏈鸿浇璐хЩ鍔紙闈炲繀闇�锛� -// * 8.杈撻�佺嚎杩愯緭鑷冲嚭搴撳彛 -// * -// */ -// } else { -// -// // 绌挎杞﹁蛋琛岃嚦鎻愬崌鏈哄緟鏈轰綅 -// motionList.addAll(kernelService.shuttleMove( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(shuttleLocNo); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(standbyLocNoTo); -// })), -// MotionCtgType.SHUTTLE_MOVE -// )); -// -// // 鎻愬崌鏈哄埌绌挎杞﹀眰 -// motionList.addAll(kernelService.liftMove( -// null -// , MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(Utils.getLev(shuttleLocNo)); -// })) -// )); -// -// // 绌挎杞﹀緟鏈轰綅鑷虫彁鍗囨満 -// motionList.addAll(kernelService.shuttleMove( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(standbyLocNoTo); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(liftLocNoTo); -// })), -// MotionCtgType.SHUTTLE_MOVE_TO_LIFT -// )); -// -// // 鎻愬崌鏈鸿浇杞﹁嚦鍑哄簱璧峰灞� -// motionList.addAll(kernelService.liftMoveShuttle( -// MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(Utils.getLev(shuttleLocNo)); -// })), -// MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(Utils.getLev(wrkMast.getSourceLocNo())); -// })) -// )); -// -// // 绌挎杞﹁蛋琛岃嚦鎻愬崌鏈哄緟鏈轰綅 -// motionList.addAll(kernelService.shuttleMove( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(liftLocNoFrom); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(standbyLocNoFrom); -// })), -// MotionCtgType.SHUTTLE_MOVE_FROM_LIFT -// )); -// -// // 绌挎杞︽彁鍗囨満寰呮満浣嶈嚦鍑哄簱搴撲綅 -// motionList.addAll(kernelService.shuttleMove( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(standbyLocNoFrom); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(wrkMast.getSourceLocNo()); -// })), -// MotionCtgType.SHUTTLE_MOVE -// )); -// -// // 绌挎杞﹀嚭搴撹嚦鎻愬崌鏈哄緟鏈轰綅 -// motionList.addAll(kernelService.shuttleMove( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(wrkMast.getSourceLocNo()); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(standbyLocNoFrom); -// })), -// MotionCtgType.SHUTTLE_MOVE_LIFT_PALLET -// )); -// -// // 绌挎杞︽彁鍗囨満寰呮満浣嶈嚦鎻愬崌鏈� -// motionList.addAll(kernelService.shuttleTransport( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo(standbyLocNoFrom); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(liftLocNoFrom); -// })), -// MotionCtgType.SHUTTLE_TRANSPORT_TO_LIFT -// )); -// -// // 绌挎杞︾寮�鎻愬崌鏈� -// motionList.addAll(kernelService.shuttleMove( -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLiftNo(liftSlave.getId()); -// dto.setLocNo(liftLocNoFrom); -// })), -// MotionDto.build((dto -> { -// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue()); -// dto.setLocNo( -// ShuttleTempLocType.query(shuttleProtocol.getShuttleNo().intValue(), liftSlave.getId(), Utils.getLev(wrkMast.getSourceLocNo())).locNo -// ); -// })), -// MotionCtgType.SHUTTLE_MOVE_FROM_LIFT -// )); -// -// // 鎻愬崌鏈鸿浇璐хЩ鍔� -// // 鍑哄簱搴撲綅鏄惁涓庤緭閫佺嚎鍑哄簱绔欏睘浜庡悓涓�灞� -// if (!slaveOutSta.getLiftLev().equals(Utils.getLev(wrkMast.getSourceLocNo()))) { -// motionList.addAll(kernelService.liftMoveGoods( -// MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(Utils.getLev(wrkMast.getSourceLocNo())); -// })), -// MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(slaveOutSta.getLiftLev()); -// })) -// )); -// } -// -// LiftNeighborType neighborType = LiftNeighborType.query(liftSlave.getId(), slaveOutSta.getLiftLev(), false, wrkMast.getStaNo()); -// -// // 鎻愬崌鏈鸿繍杈撳埌杈撻�佺嚎 -// motionList.addAll(kernelService.liftTransportGoodsToConveyor( -// MotionDto.build((dto -> { -// dto.setLiftNo(liftSlave.getId()); -// dto.setLev(slaveOutSta.getLiftLev()); -// })), -// MotionDto.build((dto -> { -// dto.setDevpNo(devpSlave.getId()); -// dto.setStaNo(neighborType.staNo); -// })) -// )); -// -// } -// -// shuttleNo = String.valueOf(shuttleProtocol.getShuttleNo()); -// liftNo = String.valueOf(liftProtocol.getLiftNo()); - } + // locNo + String originLoc = task.getOriginLoc(); - assert !Cools.isEmpty(shuttleNo); -// task.setShuttleNo(Integer.parseInt(shuttleNo)); -// task.setLiftNo(Integer.parseInt(liftNo)); + // shuttle + Device shuttleDevice = deviceService.getOne(new LambdaQueryWrapper<Device>() + .eq(Device::getDeviceNo, task.getShuttleNo()) + .eq(Device::getDeviceType, DeviceCtgType.SHUTTLE.val()) + .eq(Device::getHostId, task.getHostId()) + .eq(Device::getStatus, 1)); + if (shuttleDevice == null) { + return motionList; + } + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleDevice.getId().intValue()); + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null || shuttleProtocol.getShuttleNo() == null) { + return motionList; + } + if (!shuttleThread.isIdle()) { + return motionList; + } + + String shuttleLocNo = shuttleProtocol.getCurrentLocNo(); + + //鑾峰彇璺濈鐩爣浣嶇疆鏈�杩戠殑绌洪棽鍙崲灞傛彁鍗囨満 + LiftThread liftThread = liftDispatcher.searchIdleLift(shuttleLocNo, task.getHostId(), true); + if (liftThread == null) { + return motionList; + } + Device transferLiftDevice = liftThread.getDevice(); + + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null || liftProtocol.getLiftNo() == null) { + return motionList; + } + + //妫�娴嬬┛姊溅鏄惁鏈変换鍔$粦瀹� + boolean shuttleResult = Utils.checkShuttleHasBinding(shuttleDevice, task.getTaskNo()); + if (shuttleResult) { + //瀛樺湪浠诲姟锛岀姝㈣В鏋� + return motionList; + } + + //鑾峰彇灏忚溅寰呮満搴撲綅 ==> 杩涙彁鍗囨満 + ShuttleStandby shuttleStandbyTo = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>() + .eq(ShuttleStandby::getDeviceId, transferLiftDevice.getId()) + .eq(ShuttleStandby::getDeviceLev, Utils.getLev(shuttleLocNo)) + .eq(ShuttleStandby::getStatus, 1)); + + //鑾峰彇灏忚溅寰呮満搴撲綅 ==> 鍑烘彁鍗囨満 + ShuttleStandby shuttleStandbyFrom = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>() + .eq(ShuttleStandby::getDeviceId, transferLiftDevice.getId()) + .eq(ShuttleStandby::getDeviceLev, Utils.getLev(originLoc)) + .eq(ShuttleStandby::getStatus, 1)); + if (shuttleStandbyTo == null || shuttleStandbyFrom == null) { + return motionList; + } + + //绌挎杞﹁繘鎻愬崌鏈哄簱浣嶅彿 + String liftLocNoTo = shuttleStandbyTo.getDeviceLoc(); + + //绌挎杞﹀嚭鎻愬崌鏈哄簱浣嶅彿 + String liftLocNoFrom = shuttleStandbyFrom.getDeviceLoc(); + + //绌挎杞﹁繘鎻愬崌鏈哄緟鏈轰綅搴撲綅鍙� + String standbyLocNoTo = shuttleStandbyTo.getDeviceStandbyLoc(); + + //绌挎杞﹀嚭鎻愬崌鏈哄緟鏈轰綅搴撲綅鍙� + String standbyLocNoFrom = shuttleStandbyFrom.getDeviceStandbyLoc(); + + //绌挎杞﹀嚭鎻愬崌鏈哄悗鍏ㄩ儴寰呮満浣� + String standbyLocs = shuttleStandbyFrom.getStandbyLoc();//鑾峰彇鍏ㄩ儴寰呮満浣� + + + //鑾峰彇鍑哄簱浠诲姟绫诲瀷 + TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>() + .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.OUT)) + .eq(TaskCtg::getStatus, 1)); + if (taskCtg == null) { + return motionList; + } + //鑾峰彇杈撻�佺嚎璺緞 + BasConveyorPath basConveyorPath = basConveyorPathService.getOne(new LambdaQueryWrapper<BasConveyorPath>() + .eq(BasConveyorPath::getDeviceStn, task.getOriginSite()) + .eq(BasConveyorPath::getDeviceNo, liftProtocol.getLiftNo()) + .eq(BasConveyorPath::getTypeNo, taskCtg.getId())); + if (basConveyorPath == null) { + return motionList; + } + + /** + * 鍑哄簱 + * 涓�銆佸嚭搴撹捣濮嬪眰鏈夌┛姊溅 + * 1.绌挎杞﹁蛋琛岃嚦鍑哄簱搴撲綅 + * 2.鎻愬崌鏈哄埌鍑哄簱璧峰灞� + * 3.绌挎杞﹀嚭搴撹嚦鎻愬崌鏈� + * 4.绌挎杞︾寮�鎻愬崌鏈� + * 5.鎻愬崌鏈鸿浇璐хЩ鍔紙闈炲繀闇�锛� + * 6.杈撻�佺嚎杩愯緭鑷冲嚭搴撳彛 + */ + if (Utils.getLev(shuttleLocNo) == Utils.getLev(originLoc)) { + + //绌挎杞︿笉鍦ㄥ嚭搴撳簱浣� + if (!shuttleLocNo.equals(task.getOriginLoc())) { + // 绌挎杞﹁蛋琛岃嚦鍑哄簱搴撲綅 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(shuttleLocNo); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(originLoc); + })), + MotionCtgType.SHUTTLE_MOVE + )); + } + + // 绌挎杞﹀嚭搴撻《鍗� + motionList.addAll(kernelService.shuttleAction( + null, + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + })), + MotionCtgType.SHUTTLE_PALLET_LIFT + )); + + // 绌挎杞﹀嚭搴撹嚦鎻愬崌鏈哄緟鏈轰綅 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(originLoc); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLocNo(standbyLocNoTo); + })), + MotionCtgType.SHUTTLE_MOVE + )); + + // 鎻愬崌鏈虹┖杞界Щ鍔ㄥ埌绌挎杞﹀眰 + motionList.addAll(kernelService.liftMove( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLev(Utils.getLev(shuttleLocNo)); + })) + )); + + // 閿佸畾鎻愬崌鏈� + motionList.addAll(kernelService.liftLock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + })) + )); + + // 绌挎杞﹀緟鏈轰綅鑷虫彁鍗囨満 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocNoTo); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLocNo(liftLocNoTo); + })), + MotionCtgType.SHUTTLE_MOVE_TO_LIFT + )); + + // 绌挎杞﹀嚭搴撴墭鐩樹笅闄� + motionList.addAll(kernelService.shuttleAction( + null, + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + })), + MotionCtgType.SHUTTLE_PALLET_DOWN + )); + + // 绌挎杞︾寮�鎻愬崌鏈� - 鍒版彁鍗囨満寰呮満浣� + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLocNo(liftLocNoFrom); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocNoFrom); + })), + MotionCtgType.SHUTTLE_MOVE_FROM_LIFT + )); + + // 瑙i攣鎻愬崌鏈� + motionList.addAll(kernelService.liftUnlock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + })) + )); + + // 鎻愬崌鏈鸿浇璐хЩ鍔� + motionList.addAll(kernelService.liftMoveGoods( + MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLev(Utils.getLev(task.getOriginLoc())); + dto.setStaNo(0);//鎻愬崌鏈哄唴渚� + })) + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLev(5);//绱㈢墝椤圭洰5灞傛槸杈撻�佺嚎灞� + dto.setStaNo(1);//鎻愬崌鏈哄乏渚� + dto.setSync(0);//寮傛鎵ц + dto.setReleaseLift(1);//鎵ц瀹屾垚鍚庨噴鏀炬彁鍗囨満 + })) + )); + + // 绌挎杞︽彁鍗囨満寰呮満浣� - 鍒板緟鏈轰綅 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocNoFrom); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocs); + })), + MotionCtgType.SHUTTLE_MOVE + )); + + // 杈撻�佺嚎杩愯緭鑷冲嚭搴撳彛 + motionList.addAll(kernelService.conveyorOutbound( + MotionDto.build((dto -> { + dto.setDevpNo(basConveyorPath.getDeviceId().intValue()); + dto.setStaNo(basConveyorPath.getDeviceStn()); + })), + MotionDto.build((dto -> { + dto.setDevpNo(basConveyorPath.getDeviceId().intValue()); + dto.setStaNo(basConveyorPath.getStnNo()); + })), + MotionCtgType.CONVEYOR_OUTBOUND + )); + + /** + * 浜屻�佸嚭搴撹捣濮嬪眰娌℃湁绌挎杞� + * + * 1.鎻愬崌鏈哄埌绌挎杞﹀眰 + * 2.绌挎杞﹁蛋琛岃嚦鎻愬崌鏈� + * 3.鎻愬崌鏈鸿浇杞﹁嚦鍑哄簱璧峰灞� + * 4.绌挎杞﹁蛋琛岃嚦鍑哄簱搴撲綅 + * 5.绌挎杞﹀嚭搴撹嚦鎻愬崌鏈� + * 6.绌挎杞︾寮�鎻愬崌鏈� + * 7.鎻愬崌鏈鸿浇璐хЩ鍔紙闈炲繀闇�锛� + * 8.杈撻�佺嚎杩愯緭鑷冲嚭搴撳彛 + * + */ + } else { + + // 绌挎杞﹁蛋琛岃嚦鎻愬崌鏈哄簱浣嶅緟鏈轰綅 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(shuttleLocNo); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLocNo(standbyLocNoTo); + })), + MotionCtgType.SHUTTLE_MOVE + )); + + // 閿佸畾鐩爣妤煎眰绌挎杞﹀緟鏈轰綅璺緞 + motionList.addAll(kernelService.mapLockPath( + null, + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocNoFrom); + })) + )); + + // 鎻愬崌鏈虹┖杞界Щ鍔ㄥ埌绌挎杞﹀眰 + motionList.addAll(kernelService.liftMove( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLev(Utils.getLev(shuttleLocNo)); + })) + )); + + // 閿佸畾鎻愬崌鏈� + motionList.addAll(kernelService.liftLock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + })) + )); + + // 绌挎杞﹀緟鏈轰綅鑷虫彁鍗囨満 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocNoTo); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLocNo(liftLocNoTo); + })), + MotionCtgType.SHUTTLE_MOVE_TO_LIFT + )); + + // 瑙i攣鎻愬崌鏈� + motionList.addAll(kernelService.liftUnlock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + })) + )); + + // 鎻愬崌鏈烘惉杞� 鑷� 鐩爣浣嶇疆灞� + motionList.addAll(kernelService.liftMoveShuttle( + MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLev(Utils.getLev(shuttleLocNo)); + })), + MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLev(Utils.getLev(liftLocNoFrom)); + })) + )); + + // 閿佸畾鎻愬崌鏈� + motionList.addAll(kernelService.liftLock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + })) + )); + + // 鏇存柊灏忚溅鍧愭爣 + motionList.addAll(kernelService.shuttleUpdateLocation( + null + , MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(liftLocNoFrom); + })) + )); + + // 绌挎杞﹁蛋琛岃嚦鎻愬崌鏈哄緟鏈轰綅 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLocNo(liftLocNoFrom); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocNoFrom); + })), + MotionCtgType.SHUTTLE_MOVE_FROM_LIFT + )); + + // 瑙i攣鎻愬崌鏈� + motionList.addAll(kernelService.liftUnlock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setReleaseLift(1);//鎵ц瀹屾垚鍚庨噴鏀炬彁鍗囨満 + })) + )); + + // 绌挎杞︽彁鍗囨満寰呮満浣嶈嚦鍑哄簱搴撲綅 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLocNo(standbyLocNoFrom); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(originLoc); + })), + MotionCtgType.SHUTTLE_MOVE + )); + + // 绌挎杞﹀嚭搴撻《鍗� + motionList.addAll(kernelService.shuttleAction( + null, + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + })), + MotionCtgType.SHUTTLE_PALLET_LIFT + )); + + // 绌挎杞﹀嚭搴撹嚦鎻愬崌鏈哄緟鏈轰綅 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(originLoc); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLocNo(standbyLocNoFrom); + })), + MotionCtgType.SHUTTLE_MOVE + )); + + // 鎻愬崌鏈虹┖杞界Щ鍔ㄥ埌鐩爣灞� + motionList.addAll(kernelService.liftMove( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLev(Utils.getLev(originLoc)); + })) + )); + + // 閿佸畾鎻愬崌鏈� + motionList.addAll(kernelService.liftLock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + })) + )); + + // 绌挎杞﹀緟鏈轰綅鑷虫彁鍗囨満 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocNoFrom); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLocNo(liftLocNoFrom); + })), + MotionCtgType.SHUTTLE_MOVE_TO_LIFT + )); + + // 绌挎杞﹀嚭搴撴墭鐩樹笅闄� + motionList.addAll(kernelService.shuttleAction( + null, + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + })), + MotionCtgType.SHUTTLE_PALLET_DOWN + )); + + // 绌挎杞︾寮�鎻愬崌鏈� - 鍒版彁鍗囨満寰呮満浣� + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLocNo(liftLocNoFrom); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocNoFrom); + })), + MotionCtgType.SHUTTLE_MOVE_FROM_LIFT + )); + + // 瑙i攣鎻愬崌鏈� + motionList.addAll(kernelService.liftUnlock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + })) + )); + + // 鎻愬崌鏈鸿浇璐хЩ鍔� + motionList.addAll(kernelService.liftMoveGoods( + MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLev(Utils.getLev(task.getOriginLoc())); + dto.setStaNo(0);//鎻愬崌鏈哄唴渚� + })) + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + dto.setLev(5);//绱㈢墝椤圭洰5灞傛槸杈撻�佺嚎灞� + dto.setStaNo(1);//鎻愬崌鏈哄乏渚� + dto.setSync(0);//寮傛鎵ц + })) + )); + + // 绌挎杞︽彁鍗囨満寰呮満浣� - 鍒板緟鏈轰綅 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocNoFrom); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocs); + })), + MotionCtgType.SHUTTLE_MOVE_STANDBY + )); + + // 杈撻�佺嚎杩愯緭鑷冲嚭搴撳彛 + motionList.addAll(kernelService.conveyorOutbound( + MotionDto.build((dto -> { + dto.setDevpNo(basConveyorPath.getDeviceId().intValue()); + dto.setStaNo(basConveyorPath.getDeviceStn()); + })), + MotionDto.build((dto -> { + dto.setDevpNo(basConveyorPath.getDeviceId().intValue()); + dto.setStaNo(basConveyorPath.getStnNo()); + })), + MotionCtgType.CONVEYOR_OUTBOUND + )); + + } + + } return motionList; } @@ -747,27 +961,21 @@ String shuttleLocNo = shuttleProtocol.getCurrentLocNo(); - // lift - Device transferLiftDevice = Utils.getRecentTransferLift(shuttleLocNo, shuttleProtocol.getShuttleNo()); - if (transferLiftDevice == null) { + //鑾峰彇璺濈鐩爣浣嶇疆鏈�杩戠殑绌洪棽鍙崲灞傛彁鍗囨満 + LiftThread liftThread = liftDispatcher.searchIdleLift(shuttleLocNo, task.getHostId(), true); + if (liftThread == null) { return motionList; } - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, transferLiftDevice.getId().intValue()); + Device transferLiftDevice = liftThread.getDevice(); + LiftProtocol liftProtocol = liftThread.getStatus(); if (liftProtocol == null || liftProtocol.getLiftNo() == null) { return motionList; } //妫�娴嬬┛姊溅鏄惁鏈変换鍔$粦瀹� - boolean shuttleResult = Utils.checkShuttleHasBinding(shuttleDevice); + boolean shuttleResult = Utils.checkShuttleHasBinding(shuttleDevice, task.getTaskNo()); if (shuttleResult) { - //瀛樺湪浠诲姟锛岀姝㈣В鏋� - return motionList; - } - - //妫�娴嬫彁鍗囨満鏄惁鏈変换鍔$粦瀹� - boolean liftResult = Utils.checkLiftHasBinding(Integer.parseInt(transferLiftDevice.getDeviceNo())); - if (liftResult) { //瀛樺湪浠诲姟锛岀姝㈣В鏋� return motionList; } @@ -839,7 +1047,15 @@ })) )); - // 绌挎杞︽彁鍗囨満寰呮満浣嶈嚦鎻愬崌鏈哄簱浣� + // 閿佸畾鎻愬崌鏈� + motionList.addAll(kernelService.liftLock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + })) + )); + + // 绌挎杞︽彁鍗囨満寰呮満浣嶈嚦鎻愬崌鏈� motionList.addAll(kernelService.shuttleMove( MotionDto.build((dto -> { dto.setShuttleNo(shuttleDevice.getId().intValue()); @@ -853,7 +1069,15 @@ MotionCtgType.SHUTTLE_MOVE_TO_LIFT )); - // 鎻愬崌鏈烘惉杞� 鑷� 杈撻�佺嚎灞� + // 瑙i攣鎻愬崌鏈� + motionList.addAll(kernelService.liftUnlock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + })) + )); + + // 鎻愬崌鏈烘惉杞� 鑷� 鍏呯數灞� motionList.addAll(kernelService.liftMoveShuttle( MotionDto.build((dto -> { dto.setLiftNo(transferLiftDevice.getId().intValue()); @@ -862,6 +1086,23 @@ MotionDto.build((dto -> { dto.setLiftNo(transferLiftDevice.getId().intValue()); dto.setLev(Utils.getLev(chargeLocNo)); + })) + )); + + // 閿佸畾鎻愬崌鏈� + motionList.addAll(kernelService.liftLock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + })) + )); + + // 鏇存柊灏忚溅鍧愭爣 + motionList.addAll(kernelService.shuttleUpdateLocation( + null + , MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(liftLocNoFrom); })) )); @@ -879,6 +1120,14 @@ MotionCtgType.SHUTTLE_MOVE_FROM_LIFT )); + // 瑙i攣鎻愬崌鏈� + motionList.addAll(kernelService.liftUnlock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(transferLiftDevice.getId().intValue()); + })) + )); + // 绌挎杞︽彁鍗囨満寰呮満浣嶈嚦鍏呯數浣� motionList.addAll(kernelService.shuttleMove( MotionDto.build((dto -> { @@ -892,16 +1141,15 @@ MotionCtgType.SHUTTLE_MOVE )); - task.setLiftNo(Integer.parseInt(transferLiftDevice.getDeviceNo())); - taskService.updateById(task); } // 绌挎杞﹀紑濮嬪厖鐢� - motionList.addAll(kernelService.shuttleCharge( + motionList.addAll(kernelService.shuttleAction( null, MotionDto.build((dto -> { dto.setShuttleNo(shuttleDevice.getId().intValue()); - })) + })), + MotionCtgType.SHUTTLE_CHARGE_ON )); return motionList; @@ -938,6 +1186,15 @@ // 鍒ゆ柇绌挎杞︽槸鍚﹀湪鐩爣灞� if (Utils.getLev(shuttleLocNo) == Utils.getLev(locNo)) { + + // 绌挎杞﹀叧闂厖鐢� + motionList.addAll(kernelService.shuttleAction( + null, + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + })), + MotionCtgType.SHUTTLE_CHARGE_OFF + )); // 绌挎杞﹁蛋琛岃嚦鐩爣搴撲綅 motionList.addAll(kernelService.shuttleMove( @@ -992,24 +1249,26 @@ // 鍒ゆ柇绌挎杞︽槸鍚﹀湪鐩爣灞� if (Utils.getLev(shuttleLocNo) == Utils.getLev(locNo)) { - // 绌挎杞﹁蛋琛岃嚦鐩爣搴撲綅 - motionList.addAll(kernelService.shuttleMove( - MotionDto.build((dto -> { - dto.setShuttleNo(shuttleDevice.getId().intValue()); - dto.setLocNo(shuttleLocNo); - })), - MotionDto.build((dto -> { - dto.setShuttleNo(shuttleDevice.getId().intValue()); - dto.setLocNo(locNo); - })), - MotionCtgType.SHUTTLE_MOVE - )); + if (!shuttleLocNo.equals(locNo)) {//灏忚溅涓嶅湪鐩爣搴撲綅 + // 绌挎杞﹁蛋琛岃嚦鐩爣搴撲綅 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(shuttleLocNo); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(locNo); + })), + MotionCtgType.SHUTTLE_MOVE + )); + } } else { //灏忚溅璺ㄥ眰 - //鑾峰彇璺濈鐩爣浣嶇疆鏈�杩戠殑绌洪棽鎻愬崌鏈� - LiftThread liftThread = liftDispatcher.searchIdleLift(locNo, task.getHostId()); + //鑾峰彇璺濈鐩爣浣嶇疆鏈�杩戠殑绌洪棽鍙崲灞傛彁鍗囨満 + LiftThread liftThread = liftDispatcher.searchIdleLift(locNo, task.getHostId(), true); if (liftThread == null) { return motionList; } @@ -1042,6 +1301,15 @@ MotionCtgType.SHUTTLE_MOVE )); + // 閿佸畾鐩爣妤煎眰绌挎杞﹀緟鏈轰綅璺緞 + motionList.addAll(kernelService.mapLockPath( + null, + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(standbyLocNoFrom); + })) + )); + // 鎻愬崌鏈虹┖杞界Щ鍔ㄥ埌绌挎杞﹀眰 motionList.addAll(kernelService.liftMove( null @@ -1051,7 +1319,15 @@ })) )); - // 绌挎杞﹀緟鏈轰綅鑷虫彁鍗囨満搴撲綅 + // 閿佸畾鎻愬崌鏈� + motionList.addAll(kernelService.liftLock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(liftDevice.getId().intValue()); + })) + )); + + // 绌挎杞﹀緟鏈轰綅鑷虫彁鍗囨満 motionList.addAll(kernelService.shuttleMove( MotionDto.build((dto -> { dto.setShuttleNo(shuttleDevice.getId().intValue()); @@ -1065,6 +1341,22 @@ MotionCtgType.SHUTTLE_MOVE_TO_LIFT )); + // 鍚戞彁鍗囨満鍙戦�佸皬杞﹀凡鍒颁綅淇″彿 + motionList.addAll(kernelService.liftShuttleArrival( + null + , MotionDto.build((dto -> { + dto.setLiftNo(liftDevice.getId().intValue()); + })) + )); + + // 瑙i攣鎻愬崌鏈� + motionList.addAll(kernelService.liftUnlock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(liftDevice.getId().intValue()); + })) + )); + // 鎻愬崌鏈烘惉杞� 鑷� 鐩爣浣嶇疆灞� motionList.addAll(kernelService.liftMoveShuttle( MotionDto.build((dto -> { @@ -1074,6 +1366,23 @@ MotionDto.build((dto -> { dto.setLiftNo(liftDevice.getId().intValue()); dto.setLev(Utils.getLev(locNo)); + })) + )); + + // 閿佸畾鎻愬崌鏈� + motionList.addAll(kernelService.liftLock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(liftDevice.getId().intValue()); + })) + )); + + // 鏇存柊灏忚溅鍧愭爣 + motionList.addAll(kernelService.shuttleUpdateLocation( + null + , MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(liftLocNoFrom); })) )); @@ -1091,6 +1400,14 @@ MotionCtgType.SHUTTLE_MOVE_FROM_LIFT )); + // 瑙i攣鎻愬崌鏈� + motionList.addAll(kernelService.liftUnlock( + null + , MotionDto.build((dto -> { + dto.setLiftNo(liftDevice.getId().intValue()); + })) + )); + // 绌挎杞︽彁鍗囨満寰呮満浣嶈嚦鐩爣浣嶇疆 motionList.addAll(kernelService.shuttleMove( MotionDto.build((dto -> { @@ -1105,6 +1422,91 @@ MotionCtgType.SHUTTLE_MOVE )); + } + return motionList; + } + /** + * 鐢熸垚灏忚溅杞借揣杩佺Щ鍔ㄤ綔 + */ + public List<Motion> generateShuttleLadenMoveMotion(Task task) { + List<Motion> motionList = new ArrayList<>(); + if (task.getTaskSts() != TaskStsType.NEW_LADEN_MOVE.sts) { + return motionList; + } + //originLoc 婧愬簱浣� + String originLoc = task.getOriginLoc(); + // locNo 鐩爣搴撲綅 + String locNo = task.getDestLoc(); + + Device shuttleDevice = deviceService.getOne(new LambdaQueryWrapper<Device>() + .eq(Device::getDeviceNo, task.getShuttleNo()) + .eq(Device::getDeviceType, DeviceCtgType.SHUTTLE.val()) + .eq(Device::getHostId, task.getHostId()) + .eq(Device::getStatus, 1)); + if (shuttleDevice == null) { + return motionList; + } + + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleDevice.getId().intValue()); + if (shuttleThread == null) { + return motionList; + } + + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null || shuttleProtocol.getShuttleNo() == null) { + return motionList; + } + + String shuttleLocNo = shuttleProtocol.getCurrentLocNo(); + + // 鍒ゆ柇绌挎杞︽槸鍚﹀湪鐩爣灞� + if (Utils.getLev(shuttleLocNo) == Utils.getLev(locNo)) { + + if (!shuttleLocNo.equals(locNo)) {//灏忚溅涓嶅湪鐩爣搴撲綅 + // 绌挎杞﹁蛋琛岃嚦婧愬簱浣� + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(shuttleLocNo); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(originLoc); + })), + MotionCtgType.SHUTTLE_MOVE + )); + + // 绌挎杞﹂《鍗� + motionList.add(Motion.build(motion -> { + motion.setDeviceCtg(DeviceCtgType.SHUTTLE.val()); + motion.setDevice(String.valueOf(shuttleDevice.getId())); + motion.setMotionCtg(MotionCtgType.SHUTTLE_PALLET_LIFT.val()); + })); + + // 绌挎杞﹁蛋琛岃嚦鐩爣搴撲綅 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(originLoc); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(locNo); + })), + MotionCtgType.SHUTTLE_MOVE + )); + + //绌挎杞︽墭鐩樹笅闄� + motionList.add(Motion.build(motion -> { + motion.setDeviceCtg(DeviceCtgType.SHUTTLE.val()); + motion.setDevice(String.valueOf(shuttleDevice.getId())); + motion.setMotionCtg(MotionCtgType.SHUTTLE_PALLET_DOWN.val()); + })); + + } + + } else { + //灏忚溅璺ㄥ眰 } return motionList; } @@ -1198,18 +1600,20 @@ // 鍒ゆ柇绌挎杞︽槸鍚﹀湪鐩爣灞� if (Utils.getLev(shuttleLocNo) == Utils.getLev(targetLoc)) { - // 绌挎杞﹁蛋琛岃嚦婧愬簱浣� - motionList.addAll(kernelService.shuttleMove( - MotionDto.build((dto -> { - dto.setShuttleNo(device.getId().intValue()); - dto.setLocNo(shuttleLocNo); - })), - MotionDto.build((dto -> { - dto.setShuttleNo(device.getId().intValue()); - dto.setLocNo(sourceLoc); - })), - MotionCtgType.SHUTTLE_MOVE - )); + if (!shuttleLocNo.equals(sourceLoc)) {//灏忚溅涓嶅湪鐩爣搴撲綅 + // 绌挎杞﹁蛋琛岃嚦婧愬簱浣� + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(device.getId().intValue()); + dto.setLocNo(shuttleLocNo); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(device.getId().intValue()); + dto.setLocNo(sourceLoc); + })), + MotionCtgType.SHUTTLE_MOVE + )); + } //鎵樼洏椤跺崌 motionList.add(Motion.build(motion -> { -- Gitblit v1.9.1