luxiaotao1123
2024-03-28 9564b5da6e019b29b9779fcc13f9b82c9487befa
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
@@ -8,8 +8,12 @@
import com.zy.asrs.framework.common.SpringUtils;
import com.zy.asrs.framework.exception.CoolException;
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.enums.ShuttleCommandModeType;
import com.zy.asrs.wcs.core.model.enums.ShuttleRunDirection;
import com.zy.asrs.wcs.core.service.LocService;
import com.zy.asrs.wcs.core.utils.NavigateUtils;
import com.zy.asrs.wcs.rcs.News;
import com.zy.asrs.wcs.rcs.cache.OutputQueue;
import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType;
@@ -21,8 +25,7 @@
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.*;
@Slf4j
@SuppressWarnings("all")
@@ -81,24 +84,29 @@
            if (data != null) {
                if (null == shuttleProtocol) {
                    shuttleProtocol = new ShuttleProtocol();
                    shuttleProtocol.setShuttleNo(device.getDeviceNo());
                    shuttleProtocol.setShuttleNo(Integer.valueOf(device.getDeviceNo()));
                    shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
                    shuttleProtocol.setDevice(device);
                }
                //----------读取四向穿梭车状态-----------
                //小车忙状态位
                shuttleProtocol.setDeviceStatus(data.getInteger("deviceStatus"));
                //小车设备状态
                Integer deviceStatus = data.getInteger("deviceStatus");
                shuttleProtocol.setDeviceStatus(deviceStatus);
                //当前二维码
                shuttleProtocol.setCurrentCode(data.getString("deviceLocation") == null ? "0" : data.getString("deviceLocation"));
                shuttleProtocol.setCurrentCode(data.getString("groundCode") == null ? "0" : data.getString("groundCode"));
                //电池电量
                shuttleProtocol.setBatteryPower(data.getString("battery") == null ? "0%" : data.getString("battery"));
                //是否顶升
                shuttleProtocol.setHasLift(data.getInteger("palletStatus") == 1 ? true : false);
                //是否有托盘
                shuttleProtocol.setHasPallet(data.getInteger("hasPallet") != 2 ? true : false);
                //行驶方向
                shuttleProtocol.setRunDirection(data.getString("direction") == null ? "none" : data.getString("direction"));
                //是否为充电状态
                shuttleProtocol.setHasCharge((deviceStatus == 5 || deviceStatus == 13) ? true : false);
                ///读取四向穿梭车状态-end
@@ -158,17 +166,161 @@
    }
    @Override
    public synchronized boolean movePath() {
    public synchronized boolean movePath(List<NavigateNode> nodes, Integer taskNo) {
        try {
            String loginToken = requestLoginToken();
            if (loginToken == null) {
                return false;
            }
            HashMap<String, Object> headers = new HashMap<>();
            headers.put("Authorization", "Bearer " + loginToken);
            ArrayList<HashMap<String, Object>> modes = new ArrayList<>();
            //获取分段路径
            ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(nodes);
            for (ArrayList<NavigateNode> sectionNodes : data) {
                boolean flag = true;
                int oper;
                //开始路径
                NavigateNode startPath = nodes.get(0);
                if (ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.LEFT
                        || ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.RIGHT) {
                    //母轨方向
                    oper = 5;
                }else {
                    //子轨方向
                    oper = 6;
                }
                for (NavigateNode node : sectionNodes) {
                    HashMap<String, Object> map = new HashMap<>();
                    map.put("nodexX", node.getX());
                    map.put("nodexY", node.getY());
                    map.put("nodexZ", node.getZ());
                    if (flag) {
                        map.put("oper", oper);
                        flag = false;
                    }
                    modes.add(map);
                }
            }
            HashMap<String, Object> param = new HashMap<>();
            param.put("messageName", "runRoute");
            param.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            param.put("deviceNo", device.getDeviceNo());
            param.put("taskId", taskNo);
            param.put("nodeNum", nodes.size());
            param.put("modes", modes);
            String response = new HttpHandler.Builder()
                    .setUri(API_URL)
                    .setPath("/RDS/runRoute")
                    .setHeaders(headers)
                    .setJson(JSON.toJSONString(param))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            Integer code = jsonObject.getInteger("code");
            if (code.equals(200)) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    @Override
    public synchronized boolean move() {
    public synchronized boolean move(ShuttleCommand command) {
        try {
            String loginToken = requestLoginToken();
            if (loginToken == null) {
                return false;
            }
            HashMap<String, Object> headers = new HashMap<>();
            headers.put("Authorization", "Bearer " + loginToken);
            String response = new HttpHandler.Builder()
                    .setUri(API_URL)
                    .setPath("/RDS/runOrder")
                    .setHeaders(headers)
                    .setJson(command.getBody())
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            Integer code = jsonObject.getInteger("code");
            if (code.equals(200)) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    @Override
    public synchronized boolean lift() {
    public synchronized boolean lift(ShuttleCommand command) {
        try {
            String loginToken = requestLoginToken();
            if (loginToken == null) {
                return false;
            }
            HashMap<String, Object> headers = new HashMap<>();
            headers.put("Authorization", "Bearer " + loginToken);
            String response = new HttpHandler.Builder()
                    .setUri(API_URL)
                    .setPath("/RDS/actionOrder")
                    .setHeaders(headers)
                    .setJson(command.getBody())
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            Integer code = jsonObject.getInteger("code");
            if (code.equals(200)) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    @Override
    public synchronized boolean charge(ShuttleCommand command) {
        try {
            String loginToken = requestLoginToken();
            if (loginToken == null) {
                return false;
            }
            HashMap<String, Object> headers = new HashMap<>();
            headers.put("Authorization", "Bearer " + loginToken);
            String response = new HttpHandler.Builder()
                    .setUri(API_URL)
                    .setPath("/RDS/actionOrder")
                    .setHeaders(headers)
                    .setJson(command.getBody())
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            Integer code = jsonObject.getInteger("code");
            if (code.equals(200)) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    @Override
    public synchronized boolean reset(ShuttleCommand command) {
        return false;
    }
@@ -194,6 +346,8 @@
        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());
        return command;
    }