zy-asrs-flow/src/pages/device/shuttle/index.jsx
@@ -339,6 +339,7 @@ <Button onClick={() => shuttleOperator('palletDown')}>托盘下降</Button> <Button onClick={() => shuttleOperator('chargeOpen')}>充电开</Button> <Button onClick={() => shuttleOperator('chargeClose')}>充电关</Button> <Button onClick={() => shuttleOperator('requestWaiting')}>申请确认</Button> <Button onClick={() => shuttleOperator('reset')}>复位</Button> </div> </Card> zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/BasShuttleController.java
@@ -176,6 +176,23 @@ shuttleThread.reset(null); return R.ok(); } else if (param.getShuttleTaskMode().equals("requestWaiting")) { //申请确认 Device device = deviceService.getOne(new LambdaQueryWrapper<Device>() .eq(Device::getDeviceType, DeviceCtgType.SHUTTLE.val()) .eq(Device::getStatus, 1) .eq(Device::getDeviceNo, shuttleNo)); if (device == null) { return R.error("设备不存在"); } ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue()); if (shuttleThread == null) { return R.error("设备离线"); } shuttleThread.requestWaiting(); return R.ok(); } Task task = new Task(); zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/dto/MotionDto.java
@@ -35,6 +35,9 @@ //执行完成后是否释放提升机,默认不释放 1: 释放 0: 不释放 private Integer releaseLift; //执行完成后是否释放穿梭车,默认不释放 1: 释放 0: 不释放 private Integer releaseShuttle; public static MotionDto build(BuildSupport<MotionDto> support) { MotionDto dto = new MotionDto(); zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Motion.java
@@ -82,6 +82,12 @@ private Integer releaseLift; /** * 执行完成后是否释放穿梭车,默认不释放 1: 释放 0: 不释放 */ @ApiModelProperty(value= "执行完成后是否释放穿梭车,默认不释放 1: 释放 0: 不释放") private Integer releaseShuttle; /** * 任务类型 */ @ApiModelProperty(value= "任务类型") zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
@@ -539,6 +539,21 @@ MotionCtgType.SHUTTLE_PALLET_DOWN )); // 穿梭车提升机待机位 - 到待机位 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(shuttleFromLiftStandbyLoc); dto.setSync(0);//异步执行 dto.setReleaseShuttle(1);//执行完成后释放小车 })), MotionCtgType.SHUTTLE_MOVE )); // 提升机载货移动 motionList.addAll(kernelService.liftMoveGoods( MotionDto.build((dto -> { @@ -551,22 +566,8 @@ dto.setLev(1);//光泰1层是输送线层 dto.setStaNo(31001);//出库站点 dto.setDevpNo(basConveyorStaOrigin.getConveyorDeviceId().intValue()); 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(shuttleFromLiftStandbyLoc); })), MotionCtgType.SHUTTLE_MOVE )); // 输送线运输至出库口 @@ -747,6 +748,21 @@ MotionCtgType.SHUTTLE_PALLET_DOWN )); // 穿梭车提升机待机位 - 到待机位 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(shuttleFromLiftStandbyLoc); dto.setSync(0);//异步执行 dto.setReleaseShuttle(1);//执行完成后释放穿梭车 })), MotionCtgType.SHUTTLE_MOVE )); // 提升机载货移动 motionList.addAll(kernelService.liftMoveGoods( MotionDto.build((dto -> { @@ -758,23 +774,9 @@ dto.setLiftNo(transferLiftDevice.getId().intValue()); dto.setLev(1);//光泰1层是输送线层 dto.setStaNo(31001);//出库站点 dto.setSync(0);//异步执行 dto.setDevpNo(basConveyorStaOrigin.getConveyorDeviceId().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.setLocNo(shuttleFromLiftStandbyLoc); })), MotionCtgType.SHUTTLE_MOVE )); // 输送线运输至出库口 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
@@ -302,6 +302,14 @@ break; } if (target.getSync() != null) { motion.setSync(target.getSync()); } if (target.getReleaseShuttle() != null) { motion.setReleaseShuttle(target.getReleaseShuttle()); } })); return motionList; zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
@@ -9,6 +9,7 @@ import com.zy.asrs.wcs.core.action.ShuttleAction; import com.zy.asrs.wcs.core.entity.BasShuttle; import com.zy.asrs.wcs.core.entity.Loc; import com.zy.asrs.wcs.core.entity.Task; import com.zy.asrs.wcs.core.model.NavigateNode; import com.zy.asrs.wcs.core.model.command.*; import com.zy.asrs.wcs.core.model.enums.*; @@ -282,6 +283,11 @@ return false; } Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, motion.getTaskNo())); if (task == null) { return false; } LiftThread liftThread = null; LiftProtocol liftProtocol = null; @@ -294,6 +300,15 @@ if (!shuttleProtocol.getCurrentLocNo().equals(motion.getTarget())) { return false; } if (Optional.ofNullable(motion.getReleaseShuttle()).orElse(0) == 1) {//释放穿梭车 task.setShuttleNo(0); task.setUpdateTime(new Date()); if (!taskService.updateById(task)) { return false; } } break; case SHUTTLE_MOVE_TO_LIFT: liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, Integer.parseInt(motion.getTemp())); zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/TaskTimer.java
@@ -8,6 +8,8 @@ import com.zy.asrs.wcs.core.model.enums.LocStsType; import com.zy.asrs.wcs.core.model.enums.TaskStsType; import com.zy.asrs.wcs.core.service.*; import com.zy.asrs.wcs.system.entity.Dict; import com.zy.asrs.wcs.system.service.DictService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; @@ -30,6 +32,8 @@ private MotionLogService motionLogService; @Autowired private LocService locService; @Autowired private DictService dictService; @Scheduled(cron = "0/1 * * * * ? ") @Transactional @@ -41,14 +45,18 @@ taskSts.add(TaskStsType.COMPLETE_MOVE.sts); taskSts.add(TaskStsType.COMPLETE_MANUAL.sts); Dict reportWms = dictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getFlag, "reportWms")); List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>() .eq(Task::getStatus, 1) .in(Task::getTaskSts, taskSts)); for (Task task : tasks) { if(task.getTaskSts().equals(TaskStsType.COMPLETE_INBOUND.sts) || task.getTaskSts().equals(TaskStsType.COMPLETE_OUTBOUND.sts)){ boolean httpRequest = doHttpRequest(task, "127.0.0.1:8080", "/wms/open/asrs//wrkMast/finish/v1"); if (!httpRequest) { return; if (reportWms != null && reportWms.getFlag().equals("true")) { if(task.getTaskSts().equals(TaskStsType.COMPLETE_INBOUND.sts) || task.getTaskSts().equals(TaskStsType.COMPLETE_OUTBOUND.sts)){ boolean httpRequest = doHttpRequest(task, "127.0.0.1:8080", "/wms/open/asrs//wrkMast/finish/v1"); if (!httpRequest) { return; } } } zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java
@@ -57,6 +57,8 @@ boolean enableMoveLoc(ShuttleMoveLocParam param, boolean enable); boolean requestWaiting(); //***************获取命令***************** ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes);//获取移动命令 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java
@@ -173,6 +173,7 @@ BasShuttle basShuttle = shuttleService.getOne(new LambdaQueryWrapper<BasShuttle>() .eq(BasShuttle::getShuttleNo, device.getDeviceNo()) .eq(BasShuttle::getHostId, device.getHostId())); if (basShuttle == null) { basShuttle = new BasShuttle(); //四向穿梭车号 @@ -182,6 +183,10 @@ basShuttle.setHostId(device.getHostId()); basShuttle.setDeviceId(device.getId().intValue()); shuttleService.save(basShuttle); }else { Integer shuttleId = basShuttle.getId(); basShuttle = new BasShuttle(); basShuttle.setId(shuttleId); } //任务号 basShuttle.setTaskNo(shuttleProtocol.getTaskNo().intValue()); @@ -791,6 +796,15 @@ } @Override public boolean requestWaiting() { if (this.shuttleProtocol.getProtocolStatusType().equals(ShuttleProtocolStatusType.IDLE)) { this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING); return true; } return false; } @Override public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes) { NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class); NyShuttleHttpCommand httpStandard = getHttpStandard(Integer.parseInt(device.getDeviceNo()), taskNo); zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
@@ -690,6 +690,15 @@ } @Override public boolean requestWaiting() { if (this.shuttleProtocol.getProtocolStatusType().equals(ShuttleProtocolStatusType.IDLE)) { this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING); return true; } return false; } @Override public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes) { HashMap<String, Object> body = new HashMap<>(); body.put("messageName", "runOrder");