From d56b8093dc9e3e75f8efe1a0f1aa6d821c9c3dfb Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期二, 15 四月 2025 13:30:35 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java | 328 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 294 insertions(+), 34 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 8542d54..b0204ad 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 @@ -12,7 +12,9 @@ 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.rcs.model.protocol.StaProtocol; import com.zy.asrs.wcs.rcs.service.DeviceService; +import com.zy.asrs.wcs.rcs.thread.DevpThread; import com.zy.asrs.wcs.rcs.thread.LiftThread; import com.zy.asrs.wcs.rcs.thread.ShuttleThread; import org.springframework.beans.factory.annotation.Autowired; @@ -65,7 +67,13 @@ public List<Motion> generateMotion(Task task) { List<Motion> motionList = new ArrayList<>(); - motionList = this.generateFirstZoneMotion(task); + int originSite = Integer.parseInt(task.getOriginSite()); + int destSite = Integer.parseInt(task.getDestSite()); + if (originSite == 1015 || originSite == 1026 || destSite == 1015 || destSite == 1026) { + motionList = generateSecondZoneMotion(task); + }else { + motionList = generateFirstZoneMotion(task); + } return motionList; } @@ -111,11 +119,6 @@ return motionList; } - BasConveyorSta basConveyorStaDest = basConveyorStaService.selectBySiteNo(task.getDestSite()); - if (basConveyorStaDest == null) { - return motionList; - } - //妫�娴嬬┛姊溅鏄惁鏈変换鍔$粦瀹� boolean shuttleResult = Utils.checkShuttleHasBinding(shuttleDevice, task.getTaskNo()); if (shuttleResult) { @@ -150,9 +153,9 @@ dto.setLiftNo(transferLiftDevice.getId().intValue()); dto.setLev(Utils.getLev(task.getDestLoc())); dto.setStaNo(Integer.parseInt(task.getDestSite())); - dto.setDevpNo(basConveyorStaDest.getConveyorDeviceId().intValue()); - dto.setReleaseLift(1);//鎵ц瀹屾垚鍚庨噴鏀炬彁鍗囨満 - })) +// dto.setReleaseLift(1);//鎵ц瀹屾垚鍚庨噴鏀炬彁鍗囨満 + })), + MotionCtgType.LIFT_WITH_GOODS_IN )); // 绌挎杞﹁蛋琛岃嚦鎻愬崌鏈哄簱浣� @@ -189,6 +192,7 @@ dto.setShuttleDevice(shuttleDevice); dto.setLiftNo(transferLiftDevice.getId().intValue()); dto.setLocNo(standbyLocNoTo); + dto.setReleaseLift(1);//鎵ц瀹屾垚鍚庨噴鏀炬彁鍗囨満 })), MotionCtgType.SHUTTLE_TRANSPORT )); @@ -260,11 +264,6 @@ return motionList; } - BasConveyorSta basConveyorStaOrigin = basConveyorStaService.selectBySiteNo(task.getOriginSite()); - if (basConveyorStaOrigin == null) { - return motionList; - } - //妫�娴嬬┛姊溅鏄惁鏈変换鍔$粦瀹� boolean shuttleResult = Utils.checkShuttleHasBinding(shuttleDevice, task.getTaskNo()); if (shuttleResult) { @@ -284,22 +283,14 @@ //绌挎杞﹁繘鎻愬崌鏈哄緟鏈轰綅搴撲綅鍙� 杈撻�佺嚎浣嶇疆 String standbyLocNoTo = shuttleStandbyTo.getDeviceStandbyLoc(); - //绌挎杞︽崲灞傛椂寰呮満浣嶇疆 浣跨敤琛ㄥ垪 memo鏁版嵁 - String standbyLocNoMemo = shuttleStandbyTo.getMemo(); + //绌挎杞﹀緟鏈轰綅缃� 浣跨敤琛ㄥ垪 + String standbyLocNoList = shuttleStandbyTo.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; } @@ -369,15 +360,16 @@ dto.setLocNo(standbyLocNoTo); dto.setStaNo(getStaByLev(Utils.getLev(task.getOriginLoc())));//杈撻�佺珯 })), - MotionCtgType.SHUTTLE_TRANSPORT_TO_CONVEYOR + MotionCtgType.SHUTTLE_TRANSPORT )); + Integer liftLevLogic = liftDispatcher.getLiftLevOffset(transferLiftDevice.getId().intValue(), Utils.getLev(originLoc)); // 鎻愬崌鏈虹┖杞界Щ鍔ㄥ埌鍑哄簱灞� motionList.addAll(kernelService.liftMove( null , MotionDto.build((dto -> { dto.setLiftNo(transferLiftDevice.getId().intValue()); - dto.setLev(Utils.getLev(originLoc)); + dto.setLev(liftLevLogic); })) )); @@ -413,8 +405,8 @@ MotionDto.build((dto -> { dto.setShuttleNo(shuttleDevice.getId().intValue()); dto.setShuttleDevice(shuttleDevice); - dto.setLocNo(standbyLocNoTo); - dto.setSync(0);//寮傛鎵ц + dto.setLocNo(standbyLocNoList); +// dto.setSync(0);//寮傛鎵ц dto.setReleaseShuttle(1);//鎵ц瀹屾垚鍚庨噴鏀惧皬杞� })), MotionCtgType.SHUTTLE_MOVE_STANDBY @@ -430,9 +422,9 @@ , MotionDto.build((dto -> { dto.setLiftNo(transferLiftDevice.getId().intValue()); dto.setStaNo(Integer.parseInt(task.getDestSite()));//鍑哄簱绔欑偣 - dto.setDevpNo(basConveyorStaOrigin.getConveyorDeviceId().intValue()); dto.setReleaseLift(1);//鎵ц瀹屾垚鍚庨噴鏀炬彁鍗囨満 - })) + })), + MotionCtgType.LIFT_WITH_GOODS_OUT )); } @@ -442,6 +434,269 @@ return motionList; } + public List<Motion> generateSecondZoneMotion(Task task) { + List<Motion> motionList = new ArrayList<>(); + int originSite = Integer.parseInt(task.getOriginSite()); + + String conveyLocNo; + if (originSite == 1015 || originSite == 1026) { + BasConveyorSta basConveyorStaOrigin = basConveyorStaService.selectBySiteNo(task.getOriginSite()); + if (basConveyorStaOrigin == null) { + return motionList; + } + + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyorStaOrigin.getConveyorId().intValue()); + StaProtocol staProtocol = devpThread.getStation().get(originSite); + if (staProtocol == null) { + return motionList; + } else { + staProtocol = staProtocol.clone(); + } + conveyLocNo = staProtocol.getLocNo(); + }else { + conveyLocNo = null; + } + + if(conveyLocNo == null) { + return motionList; + } + + /** + * 鍏ュ簱 + */ + if (task.getTaskSts() == TaskStsType.NEW_INBOUND.sts) { + // locNo + String destLoc = task.getDestLoc(); + + // 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(); + + //妫�娴嬬┛姊溅鏄惁鏈変换鍔$粦瀹� + boolean shuttleResult = Utils.checkShuttleHasBinding(shuttleDevice, task.getTaskNo()); + if (shuttleResult) { + //瀛樺湪浠诲姟锛岀姝㈣В鏋� + return motionList; + } + + // 鍏ュ簱鐩爣灞傛湁绌挎杞� + if (Utils.getLev(shuttleLocNo) == Utils.getLev(task.getDestLoc())) { + + // 绌挎杞﹁蛋琛岃嚦鍙栬揣搴撲綅 + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(shuttleLocNo); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setShuttleDevice(shuttleDevice); + dto.setLocNo(conveyLocNo); + })), + 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(conveyLocNo); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setShuttleDevice(shuttleDevice); + dto.setLocNo(destLoc); + })), + MotionCtgType.SHUTTLE_TRANSPORT + )); + + // 绌挎杞﹀叆搴撴墭鐩樹笅闄� + motionList.addAll(kernelService.shuttleAction( + null, + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + })), + MotionCtgType.SHUTTLE_PALLET_DOWN + )); + } + + } + + /** + * 鍑哄簱 + */ + if (task.getTaskSts() == TaskStsType.NEW_OUTBOUND.sts) { + // locNo + String originLoc = task.getOriginLoc(); + + // 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(); + + //妫�娴嬬┛姊溅鏄惁鏈変换鍔$粦瀹� + boolean shuttleResult = Utils.checkShuttleHasBinding(shuttleDevice, task.getTaskNo()); + if (shuttleResult) { + //瀛樺湪浠诲姟锛岀姝㈣В鏋� + return motionList; + } + + //鍒嗘瀽鍑哄簱璺緞鏀捐揣搴撲綅 + String lastPathStartLoc = shuttleDispatcher.analyzeOutPathWaitLoc(originLoc, conveyLocNo, shuttleDevice); + if (lastPathStartLoc == null) { + return motionList;//鏈垎鏋愭垚鍔� + } + + //鑾峰彇灏忚溅寰呮満搴撲綅 ==> 杩涙彁鍗囨満 + ShuttleStandby shuttleStandbyTo = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>() + .eq(ShuttleStandby::getDeviceLev, Utils.getLev(shuttleLocNo)) + .eq(ShuttleStandby::getStatus, 1)); + + //绌挎杞﹀緟鏈轰綅缃� 浣跨敤琛ㄥ垪 + String standbyLocNoList = shuttleStandbyTo.getStandbyLoc(); + + String standbyLocNo; + if (originSite == 1015) { + standbyLocNo = "1200101"; + } else if (originSite == 1026) { + standbyLocNo = "1200105"; + } else { + standbyLocNo = null; + } + + /** + * 鍑哄簱 + */ + 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.setShuttleDevice(shuttleDevice); + dto.setLocNo(originLoc); + })), + MotionCtgType.SHUTTLE_MOVE + )); + } + + // 绌挎杞﹀嚭搴撻《鍗� + motionList.addAll(kernelService.shuttleAction( + null, + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + })), + MotionCtgType.SHUTTLE_PALLET_LIFT + )); + + if (!originLoc.equals(lastPathStartLoc)) { + // 绌挎杞﹁浇璐у嚭搴撹嚦鏈�鍚庝竴娈佃矾寰勭瓑寰� + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(originLoc); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setShuttleDevice(shuttleDevice); + dto.setLocNo(lastPathStartLoc); + })), + MotionCtgType.SHUTTLE_TRANSPORT + )); + } + + // 绌挎杞﹁浇璐ц嚦杈撻�佺嚎浣� + motionList.addAll(kernelService.shuttleMove( + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setLocNo(lastPathStartLoc); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setShuttleDevice(shuttleDevice); + dto.setLocNo(conveyLocNo); + dto.setStaNo(getStaByLev(Utils.getLev(task.getOriginLoc())));//杈撻�佺珯 + })), + MotionCtgType.SHUTTLE_TRANSPORT_TO_CONVEYOR + )); + + // 绌挎杞﹀嚭搴撴墭鐩樹笅闄� + 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.setLocNo(conveyLocNo); + })), + MotionDto.build((dto -> { + dto.setShuttleNo(shuttleDevice.getId().intValue()); + dto.setShuttleDevice(shuttleDevice); + dto.setLocNo(standbyLocNoList); +// dto.setSync(0);//寮傛鎵ц + dto.setReleaseShuttle(1);//鎵ц瀹屾垚鍚庨噴鏀惧皬杞� + })), + MotionCtgType.SHUTTLE_MOVE_STANDBY + )); + + } + + } + + return motionList; + } /** * 鐢熸垚鍏呯數鍔ㄤ綔 @@ -956,12 +1211,13 @@ if (destSite.equals("move")) { //鎻愬崌鏈哄崌闄嶆ゼ灞� + Integer liftLevLogic = liftDispatcher.getLiftLevOffset(device.getId().intValue(), Integer.parseInt(task.getDestLoc())); // 鎻愬崌鏈虹┖杞界Щ鍔ㄥ埌绌挎杞﹀眰 motionList.addAll(kernelService.liftMove( null , MotionDto.build((dto -> { dto.setLiftNo(device.getId().intValue()); - dto.setLev(Integer.parseInt(task.getDestLoc())); + dto.setLev(liftLevLogic); })) )); @@ -973,19 +1229,23 @@ return motionList; } + Integer originLev = liftDispatcher.getLiftLevOffset(device.getId().intValue(), Utils.getLev(basConveyorStaOrigin.getLocNo())); + Integer targetLev = liftDispatcher.getLiftLevOffset(device.getId().intValue(), Utils.getLev(basConveyorStaDest.getLocNo())); + // 鎻愬崌鏈虹Щ鍔ㄦ墭鐩� motionList.addAll(kernelService.liftMoveGoods( MotionDto.build((dto -> { dto.setLiftNo(device.getId().intValue()); - dto.setLev(Utils.getLev(basConveyorStaOrigin.getLocNo())); + dto.setLev(originLev); dto.setStaNo(Integer.parseInt(task.getOriginSite())); })) , MotionDto.build((dto -> { dto.setLiftNo(device.getId().intValue()); - dto.setLev(Utils.getLev(basConveyorStaDest.getLocNo())); + dto.setLev(targetLev); dto.setDevpNo(basConveyorStaDest.getConveyorDeviceId().intValue()); dto.setStaNo(Integer.parseInt(task.getDestSite())); - })) + })), + MotionCtgType.LIFT_WITH_GOODS )); } else if (destSite.equals("lock")) { -- Gitblit v1.9.1