| | |
| | | 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.common.model.NavigateNode; |
| | | import com.zy.common.utils.NavigateUtils; |
| | | import com.zy.core.enums.RgvModeType; |
| | | 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 com.zy.core.network.entity.ZyStationStatusEntity; |
| | | |
| | | 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(); |
| | |
| | | @Override |
| | | public CommandResponse sendCommand(RgvCommand command) { |
| | | CommandResponse response = new CommandResponse(true); |
| | | executor.submit(() -> { |
| | | if (command.getTaskMode() != null && command.getTaskMode() == 1) { |
| | | status.setTaskNo((int) command.getTaskNo()); |
| | | status.setStatus(1); |
| | | try { Thread.sleep(300); } catch (InterruptedException ignored) {} |
| | | status.setRgvPos((int) command.getTargetPos()); |
| | | status.setStatus(0); |
| | | } else if (command.getTaskMode() != null && command.getTaskMode() == 0) { |
| | | status.setTaskNo(0); |
| | | status.setStatus(0); |
| | | } |
| | | }); |
| | | 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; |
| | | } |
| | | |
| | | List<NavigateNode> navigateNodes = null; |
| | | try { |
| | | navigateNodes = navigateUtils.calcByTrackSiteNo(status.getRgvPos(), sourcePos); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | if (navigateNodes == null) { |
| | | return; |
| | | } |
| | | |
| | | List<NavigateNode> targetNavigateNodes = null; |
| | | try { |
| | | targetNavigateNodes = navigateUtils.calcByTrackSiteNo(sourcePos, targetPos); |
| | | } 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; |
| | | } |
| | | |
| | | List<NavigateNode> navigateNodes = null; |
| | | try { |
| | | navigateNodes = navigateUtils.calcByTrackSiteNo(status.getRgvPos(), targetPos); |
| | | } 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(); |
| | | } |
| | | } |
| | | } |