package com.zy.core.network.fake; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.core.common.SpringUtils; import com.zy.asrs.entity.DeviceConfig; import com.zy.asrs.service.BasMapService; import com.zy.common.model.NavigateNode; import com.zy.common.utils.NavigateUtils; import com.zy.core.enums.RgvStatusType; import com.zy.core.enums.RgvTaskModeType; import com.zy.core.model.CommandResponse; import com.zy.core.model.command.RgvCommand; import com.zy.core.network.api.ZyRgvConnectApi; import com.zy.core.network.entity.ZyRgvStatusEntity; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ZyRgvFakeConnect implements ZyRgvConnectApi { private ZyRgvStatusEntity status; private final DeviceConfig deviceConfig; private final ExecutorService executor = Executors.newSingleThreadExecutor(); public ZyRgvFakeConnect(DeviceConfig deviceConfig) { this.deviceConfig = deviceConfig; ZyRgvStatusEntity init = JSON.parseObject(deviceConfig.getFakeInitStatus(), ZyRgvStatusEntity.class); this.status = init == null ? new ZyRgvStatusEntity() : init; } @Override public boolean connect() { return true; } @Override public boolean disconnect() { return true; } @Override public ZyRgvStatusEntity getStatus() { return status; } @Override public CommandResponse sendCommand(RgvCommand command) { CommandResponse response = new CommandResponse(true); if (command.getTaskMode() == RgvTaskModeType.FETCH_PUT.id) { //取放货 executor.submit(() -> commandTake(command)); } else if (command.getTaskMode() == RgvTaskModeType.X_MOVE.id) { //移动 executor.submit(() -> commandMove(command)); }else if (command.getTaskMode() == RgvTaskModeType.NONE.id) { //复位 executor.submit(() -> commandTaskComplete(command)); } return response; } private void commandTake(RgvCommand command) { int taskNo = command.getTaskNo(); int taskMode = command.getTaskMode(); int sourcePos = command.getSourcePos(); int targetPos = command.getTargetPos(); NavigateUtils navigateUtils = SpringUtils.getBean(NavigateUtils.class); if (navigateUtils == null) { return; } BasMapService basMapService = SpringUtils.getBean(BasMapService.class); if (basMapService == null) { return; } List levList = basMapService.getLevList(); List navigateNodes = null; try { for (Integer lev : levList) { navigateNodes = navigateUtils.calcByTrackSiteNo(lev, status.getRgvPos(), sourcePos); if (navigateNodes != null) { break; } } } catch (Exception e) { e.printStackTrace(); } if (navigateNodes == null) { return; } List targetNavigateNodes = null; try { for (Integer lev : levList) { targetNavigateNodes = navigateUtils.calcByTrackSiteNo(lev, sourcePos, targetPos); if (targetNavigateNodes != null) { break; } } } catch (Exception e) { e.printStackTrace(); } if (targetNavigateNodes == null) { return; } status.setTaskNo(taskNo); status.setStatus(RgvStatusType.FETCHING.id); for (int i = 0; i < navigateNodes.size(); i++) { NavigateNode navigateNode = navigateNodes.get(i); JSONObject valueObject = JSON.parseObject(navigateNode.getNodeValue()); Integer currentTrackSiteNo = valueObject.getInteger("trackSiteNo"); status.setRgvPos(currentTrackSiteNo); sleep(1000); } status.setStatus(RgvStatusType.PUTTING.id); status.setLoaded(1); sleep(1000); for (int i = 0; i < targetNavigateNodes.size(); i++) { NavigateNode navigateNode = targetNavigateNodes.get(i); JSONObject valueObject = JSON.parseObject(navigateNode.getNodeValue()); Integer currentTrackSiteNo = valueObject.getInteger("trackSiteNo"); status.setRgvPos(currentTrackSiteNo); sleep(1000); } sleep(1000); status.setStatus(RgvStatusType.WAITING.id); } private void commandMove(RgvCommand command) { int taskNo = command.getTaskNo(); int taskMode = command.getTaskMode(); int targetPos = command.getTargetPos(); NavigateUtils navigateUtils = SpringUtils.getBean(NavigateUtils.class); if (navigateUtils == null) { return; } BasMapService basMapService = SpringUtils.getBean(BasMapService.class); if (basMapService == null) { return; } List levList = basMapService.getLevList(); List navigateNodes = null; try { for (Integer lev : levList) { navigateNodes = navigateUtils.calcByTrackSiteNo(lev, status.getRgvPos(), targetPos); if (navigateNodes != null) { break; } } } catch (Exception e) { e.printStackTrace(); } if (navigateNodes == null) { return; } status.setTaskNo(taskNo); status.setStatus(RgvStatusType.WORKING.id); for (int i = 0; i < navigateNodes.size(); i++) { NavigateNode navigateNode = navigateNodes.get(i); JSONObject valueObject = JSON.parseObject(navigateNode.getNodeValue()); Integer currentTrackSiteNo = valueObject.getInteger("trackSiteNo"); status.setRgvPos(currentTrackSiteNo); sleep(1000); } status.setStatus(RgvStatusType.WAITING.id); } private void commandTaskComplete(RgvCommand command) { status.setTaskNo(0); status.setStatus(RgvStatusType.IDLE.id); } private void sleep(long ms) { try { Thread.sleep(ms); } catch (InterruptedException e) { e.printStackTrace(); } } }