#
Junjie
2025-11-21 7f9435bb4a074b4964f290c4d6905e0e233a19ec
src/main/java/com/zy/core/network/fake/ZyRgvFakeConnect.java
@@ -1,15 +1,25 @@
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();
@@ -38,18 +48,153 @@
    @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;
        }
        BasMapService basMapService = SpringUtils.getBean(BasMapService.class);
        if (basMapService == null) {
            return;
        }
        List<Integer> levList = basMapService.getLevList();
        List<NavigateNode> 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<NavigateNode> 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<Integer> levList = basMapService.getLevList();
        List<NavigateNode> 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();
        }
    }
}