#
Junjie
2024-10-17 d835d1b51f832889929cdf69010034a30ef44d02
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
@@ -11,20 +11,24 @@
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wcs.common.ExecuteSupport;
import com.zy.asrs.wcs.core.domain.param.ShuttleMoveLocParam;
import com.zy.asrs.wcs.core.entity.BasLift;
import com.zy.asrs.wcs.core.entity.BasShuttle;
import com.zy.asrs.wcs.core.entity.Loc;
import com.zy.asrs.wcs.core.model.NavigateNode;
import com.zy.asrs.wcs.core.model.command.ShuttleCommand;
import com.zy.asrs.wcs.core.model.command.ShuttleRedisCommand;
import com.zy.asrs.wcs.core.model.enums.*;
import com.zy.asrs.wcs.core.service.BasLiftService;
import com.zy.asrs.wcs.core.service.BasShuttleService;
import com.zy.asrs.wcs.core.service.LocService;
import com.zy.asrs.wcs.core.utils.LiftDispatcher;
import com.zy.asrs.wcs.core.utils.NavigateUtils;
import com.zy.asrs.wcs.core.utils.Utils;
import com.zy.asrs.wcs.rcs.News;
import com.zy.asrs.wcs.rcs.cache.OutputQueue;
import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant;
import com.zy.asrs.wcs.rcs.entity.DeviceDataLog;
import com.zy.asrs.wcs.rcs.model.CommandResponse;
import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType;
import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
@@ -124,7 +128,7 @@
                //当前二维码
                shuttleProtocol.setCurrentCode(data.getString("groundCode") == null ? "0" : data.getString("groundCode"));
                //电池电量
                shuttleProtocol.setBatteryPower(data.getString("battery") == null ? "0%" : data.getString("battery"));
                shuttleProtocol.setBatteryPower(data.getString("battery") == null ? "0" : data.getString("battery"));
                //故障
                shuttleProtocol.setErrorCode(deviceStatus == 6 ? "1" : "0");
@@ -237,7 +241,8 @@
    }
    @Override
    public synchronized boolean movePath(List<NavigateNode> nodes, Integer taskNo) {
    public synchronized CommandResponse movePath(List<NavigateNode> nodes, Integer taskNo) {
        CommandResponse response = new CommandResponse(false);
        try {
            //默认地图母轨方向x
            String mapDirection = "x";
@@ -251,7 +256,7 @@
            String loginToken = requestLoginToken();
            if (loginToken == null) {
                return false;
                return response;
            }
            HashMap<String, Object> headers = new HashMap<>();
@@ -307,7 +312,7 @@
            param.put("taskId", taskNo);
            param.put("nodeNum", nodes.size());
            param.put("modes", modes);
            String response = new HttpHandler.Builder()
            String responseStr = new HttpHandler.Builder()
                    .setUri(API_URL)
                    .setPath("/RDS/runRoute")
                    .setHeaders(headers)
@@ -315,33 +320,36 @@
                    .setTimeout(60, TimeUnit.SECONDS)
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            JSONObject jsonObject = JSON.parseObject(responseStr);
            Integer code = jsonObject.getInteger("code");
            System.out.println("路径下发" + taskNo);
            System.out.println(JSON.toJSONString(jsonObject));
            System.out.println(JSON.toJSONString(param));
            if (code.equals(200)) {
                System.out.println("路径下发" + taskNo);
                return true;
                response.setResult(true);
                response.setMessage(responseStr);
                return response;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
        return response;
    }
    @Override
    public synchronized boolean move(ShuttleCommand command) {
    public synchronized CommandResponse move(ShuttleCommand command) {
        CommandResponse response = new CommandResponse(false);
        try {
            String loginToken = requestLoginToken();
            if (loginToken == null) {
                return false;
                return response;
            }
            HashMap<String, Object> headers = new HashMap<>();
            headers.put("Authorization", "Bearer " + loginToken);
            String response = new HttpHandler.Builder()
            String responseStr = new HttpHandler.Builder()
                    .setUri(API_URL)
                    .setPath("/RDS/runOrder")
                    .setHeaders(headers)
@@ -349,31 +357,34 @@
                    .setTimeout(60, TimeUnit.SECONDS)
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            JSONObject jsonObject = JSON.parseObject(responseStr);
            Integer code = jsonObject.getInteger("code");
            System.out.println(JSON.toJSONString(command.getBody()));
            if (code.equals(200)) {
                this.shuttleProtocol.setSendTime(System.currentTimeMillis());//指令下发时间
                return true;
                response.setResult(true);
                response.setMessage(responseStr);
                return response;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
        return response;
    }
    @Override
    public synchronized boolean lift(ShuttleCommand command) {
    public synchronized CommandResponse lift(ShuttleCommand command) {
        CommandResponse response = new CommandResponse(false);
        try {
            String loginToken = requestLoginToken();
            if (loginToken == null) {
                return false;
                return response;
            }
            HashMap<String, Object> headers = new HashMap<>();
            headers.put("Authorization", "Bearer " + loginToken);
            String response = new HttpHandler.Builder()
            String responseStr = new HttpHandler.Builder()
                    .setUri(API_URL)
                    .setPath("/RDS/actionOrder")
                    .setHeaders(headers)
@@ -381,30 +392,33 @@
                    .setTimeout(60, TimeUnit.SECONDS)
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            JSONObject jsonObject = JSON.parseObject(responseStr);
            Integer code = jsonObject.getInteger("code");
            if (code.equals(200)) {
                this.shuttleProtocol.setSendTime(System.currentTimeMillis());//指令下发时间
                return true;
                response.setResult(true);
                response.setMessage(responseStr);
                return response;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
        return response;
    }
    @Override
    public synchronized boolean charge(ShuttleCommand command) {
    public synchronized CommandResponse charge(ShuttleCommand command) {
        CommandResponse response = new CommandResponse(false);
        try {
            String loginToken = requestLoginToken();
            if (loginToken == null) {
                return false;
                return response;
            }
            HashMap<String, Object> headers = new HashMap<>();
            headers.put("Authorization", "Bearer " + loginToken);
            String response = new HttpHandler.Builder()
            String responseStr = new HttpHandler.Builder()
                    .setUri(API_URL)
                    .setPath("/RDS/actionOrder")
                    .setHeaders(headers)
@@ -412,24 +426,60 @@
                    .setTimeout(60, TimeUnit.SECONDS)
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            JSONObject jsonObject = JSON.parseObject(responseStr);
            Integer code = jsonObject.getInteger("code");
            if (code.equals(200)) {
                this.shuttleProtocol.setSendTime(System.currentTimeMillis());//指令下发时间
                return true;
                response.setResult(true);
                response.setMessage(responseStr);
                return response;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
        return response;
    }
    @Override
    public synchronized boolean reset(ShuttleCommand command) {
    public synchronized CommandResponse reset(ShuttleCommand command) {
        setSyncTaskNo(0);
        setProtocolStatus(ShuttleProtocolStatusType.IDLE);
        enableMoveLoc(null, false);
        return true;
        return new CommandResponse(true, JSON.toJSONString(command));
    }
    @Override
    public CommandResponse updateLocation(ShuttleCommand command) {
        CommandResponse response = new CommandResponse(false);
        try {
            String loginToken = requestLoginToken();
            if (loginToken == null) {
                return response;
            }
            HashMap<String, Object> headers = new HashMap<>();
            headers.put("Authorization", "Bearer " + loginToken);
            String responseStr = new HttpHandler.Builder()
                    .setUri(API_URL)
                    .setPath("/RDS/changeLocation")
                    .setHeaders(headers)
                    .setJson(command.getBody())
                    .setTimeout(60, TimeUnit.SECONDS)
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(responseStr);
            Integer code = jsonObject.getInteger("code");
            if (code.equals(200)) {
                this.shuttleProtocol.setSendTime(System.currentTimeMillis());//指令下发时间
                response.setResult(true);
                response.setMessage(responseStr);
                return response;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return response;
    }
    @Override
@@ -515,7 +565,7 @@
                if (shuttleService == null) {
                    return false;
                }
                BasShuttle basShuttle = shuttleService.getById(this.device.getDeviceNo());
                BasShuttle basShuttle = shuttleService.getOne(new LambdaQueryWrapper<BasShuttle>().eq(BasShuttle::getDeviceId, this.device.getId()));
                if (basShuttle == null) {
                    return false;
                }
@@ -656,6 +706,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");
@@ -674,11 +733,23 @@
        body.put("nodeY", loc.getBay());
        body.put("nodeZ", loc.getLev());
        //检测目标点是否为提升机
        BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class);
        BasLift basLift = basLiftService.getOne(new LambdaQueryWrapper<BasLift>().eq(BasLift::getRow, loc.getRow())
                .eq(BasLift::getBay, loc.getBay())
                .eq(BasLift::getHostId, this.device.getHostId()));
        if (basLift != null) {
            LiftDispatcher liftDispatcher = SpringUtils.getBean(LiftDispatcher.class);
            Integer realLev = liftDispatcher.getLiftLevOffset(basLift.getDeviceId().intValue(), loc.getLev());
            body.put("nodeZ", realLev);
        }
        ShuttleCommand command = new ShuttleCommand();
        command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo()));
        command.setBody(JSON.toJSONString(body));
        command.setMode(ShuttleCommandModeType.MOVE.id);
        command.setTargetLocNo(loc.getLocNo());
        command.setTaskNo(taskNo);
        return command;
    }
@@ -695,6 +766,7 @@
        command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo()));
        command.setBody(JSON.toJSONString(body));
        command.setMode(lift ? ShuttleCommandModeType.PALLET_LIFT.id : ShuttleCommandModeType.PALLET_DOWN.id);
        command.setTaskNo(taskNo);
        return command;
    }
@@ -711,6 +783,25 @@
        command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo()));
        command.setBody(JSON.toJSONString(body));
        command.setMode(charge ? ShuttleCommandModeType.CHARGE_OPEN.id : ShuttleCommandModeType.CHARGE_CLOSE.id);
        command.setTaskNo(taskNo);
        return command;
    }
    @Override
    public ShuttleCommand getUpdateLocationCommand(Integer taskNo, String locNo) {
        HashMap<String, Object> body = new HashMap<>();
        body.put("messageName", "runOrder");
        body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo()));
        String coord = "(" + Utils.getRow(locNo) + "," + Utils.getBay(locNo) + "," + Utils.getLev(locNo) + ")";
        body.put("coord", coord);
        ShuttleCommand command = new ShuttleCommand();
        command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo()));
        command.setBody(JSON.toJSONString(body));
        command.setMode(ShuttleCommandModeType.UPDATE_LOCATION.id);
        command.setTaskNo(taskNo);
        return command;
    }