#
Junjie
2024-06-06 627f9f28c8a19d9deae694c11c10dec1d4593270
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
@@ -10,6 +10,7 @@
import com.zy.asrs.framework.common.SpringUtils;
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.BasShuttle;
import com.zy.asrs.wcs.core.entity.Loc;
import com.zy.asrs.wcs.core.model.NavigateNode;
@@ -31,6 +32,8 @@
import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
import com.zy.asrs.wcs.core.utils.RedisUtil;
import com.zy.asrs.wcs.rcs.entity.Device;
import com.zy.asrs.wcs.system.entity.Dict;
import com.zy.asrs.wcs.system.service.DictService;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@@ -43,7 +46,7 @@
@SuppressWarnings("all")
public class SurayShuttleThread implements ShuttleThread {
    private static final String API_URL = "http://127.0.0.1:8082";
    private static final String API_URL = "http://192.168.7.149:8082";
    private Device device;
    private RedisUtil redisUtil;
@@ -111,6 +114,11 @@
                    //离线
                    shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE);
                }
                if(deviceStatus != 4 || deviceStatus != 6 || deviceStatus != 7 || deviceStatus != 8 || deviceStatus != 255 || deviceStatus != -1) {
                    shuttleProtocol.setMode(1);//自动状态
                }
                shuttleProtocol.setDeviceStatus(deviceStatus);
                //当前二维码
                shuttleProtocol.setCurrentCode(data.getString("groundCode") == null ? "0" : data.getString("groundCode"));
@@ -134,6 +142,8 @@
                extend.setStatusDescription(data.getString("statusDescription"));//状态描述
                shuttleProtocol.setExtend(extend);//扩展字段
                //最近一次在线时间
                shuttleProtocol.setLastOnlineTime(System.currentTimeMillis());
                ///读取四向穿梭车状态-end
                //小车处于忙碌状态,将标记置为true
@@ -175,6 +185,7 @@
                    basShuttle.setStatus(1);
                    basShuttle.setDeleted(0);
                    basShuttle.setHostId(device.getHostId());
                    basShuttle.setDeviceId(device.getId().intValue());
                    shuttleService.save(basShuttle);
                }
                //任务号
@@ -208,10 +219,15 @@
    @Override
    public ShuttleProtocol getStatus() {
        return getStatus(true);
    }
    @Override
    public ShuttleProtocol getStatus(boolean clone) {
        if (this.shuttleProtocol == null) {
            return null;
        }
        return this.shuttleProtocol.clone();
        return clone ? this.shuttleProtocol.clone() : this.shuttleProtocol;
    }
    @Override
@@ -222,6 +238,16 @@
    @Override
    public synchronized boolean movePath(List<NavigateNode> nodes, Integer taskNo) {
        try {
            //默认地图母轨方向x
            String mapDirection = "x";
            DictService dictService = SpringUtils.getBean(DictService.class);
            Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>()
                    .eq(Dict::getFlag, "direction_map")
                    .eq(Dict::getStatus, 1));
            if (dict != null) {
                mapDirection = dict.getValue();
            }
            String loginToken = requestLoginToken();
            if (loginToken == null) {
                return false;
@@ -246,7 +272,7 @@
                NavigateNode startPath = sectionNodes.get(0);
                //结束路径
                NavigateNode targetPath = sectionNodes.get(sectionNodes.size() - 1);
                if (ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.LEFT
                if (mapDirection.equals("y") && ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.LEFT
                        || ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.RIGHT) {
                    //母轨方向
                    oper = 5;
@@ -290,7 +316,11 @@
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            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;
            }
        } catch (Exception e) {
@@ -320,7 +350,9 @@
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            Integer code = jsonObject.getInteger("code");
            System.out.println(JSON.toJSONString(command.getBody()));
            if (code.equals(200)) {
                this.shuttleProtocol.setSendTime(System.currentTimeMillis());//指令下发时间
                return true;
            }
        } catch (Exception e) {
@@ -351,6 +383,7 @@
            JSONObject jsonObject = JSON.parseObject(response);
            Integer code = jsonObject.getInteger("code");
            if (code.equals(200)) {
                this.shuttleProtocol.setSendTime(System.currentTimeMillis());//指令下发时间
                return true;
            }
        } catch (Exception e) {
@@ -381,6 +414,7 @@
            JSONObject jsonObject = JSON.parseObject(response);
            Integer code = jsonObject.getInteger("code");
            if (code.equals(200)) {
                this.shuttleProtocol.setSendTime(System.currentTimeMillis());//指令下发时间
                return true;
            }
        } catch (Exception e) {
@@ -391,7 +425,10 @@
    @Override
    public synchronized boolean reset(ShuttleCommand command) {
        return false;
        setSyncTaskNo(0);
        setProtocolStatus(ShuttleProtocolStatusType.IDLE);
        enableMoveLoc(null, false);
        return true;
    }
    @Override
@@ -402,10 +439,12 @@
    @Override
    public boolean isIdle(ExecuteSupport support) {
        if (null != support) {
            if (!support.judgement()) {
                return false;
            Boolean judgement = support.judgement();
            if (judgement != null && !judgement) {
                return true;
            }
        }
        if (this.shuttleProtocol.getDeviceStatus() == null
                || this.shuttleProtocol.getPakMk() == null
                || this.shuttleProtocol.getErrorCode() == null
@@ -417,13 +456,26 @@
        boolean res = (this.shuttleProtocol.getDeviceStatus() == 3 || this.shuttleProtocol.getDeviceStatus() == 11)
                && this.shuttleProtocol.getPakMk()
                && this.shuttleProtocol.getErrorCode().equals("0")
                && (this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id)
                ;
                && (this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id
                || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id
                || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.CHARGING_WAITING.id);
        return res;
    }
    @Override
    public boolean isDeviceIdle() {
        return isDeviceIdle(null);
    }
    @Override
    public boolean isDeviceIdle(ExecuteSupport support) {
        if (null != support) {
            Boolean judgement = support.judgement();
            if (judgement != null && !judgement) {
                return true;
            }
        }
        if (this.shuttleProtocol.getDeviceStatus() == null
                || this.shuttleProtocol.getPakMk() == null
                || this.shuttleProtocol.getErrorCode() == null
@@ -472,7 +524,6 @@
                }
                return Integer.valueOf(this.shuttleProtocol.getBatteryPower()) < chargeLine;
            } catch (Exception e) {
                News.error("fail", e);
                return false;
            }
        }
@@ -493,11 +544,22 @@
    @Override
    public boolean isChargingCompleted() {
        Integer maxPower = 100;
        DictService dictService = SpringUtils.getBean(DictService.class);
        if (dictService != null) {
            Dict chargeMaxValue = dictService.getOne(new LambdaQueryWrapper<Dict>()
                    .eq(Dict::getFlag, "chargeMaxValue")
                    .eq(Dict::getStatus, 1));
            if (chargeMaxValue != null) {
                maxPower = Integer.parseInt(chargeMaxValue.getValue());
            }
        }
        if (this.shuttleProtocol.getBatteryPower() == null) {
            return false;
        }
        if (Integer.valueOf(this.shuttleProtocol.getBatteryPower()) >= 100) {
        if (Integer.valueOf(this.shuttleProtocol.getBatteryPower()) >= maxPower) {
            return true;
        }
        return false;
@@ -569,7 +631,31 @@
    }
    @Override
    public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed) {
    public boolean enableMoveLoc(ShuttleMoveLocParam param, boolean enable) {
        if (enable) {
            shuttleProtocol.setMoveLoc(true);//开启跑库
            shuttleProtocol.setMoveType(param.getMoveType());
            shuttleProtocol.setXStart(param.getStartX());
            shuttleProtocol.setXTarget(param.getTargetX());
            shuttleProtocol.setXCurrent(param.getStartX());
            shuttleProtocol.setYStart(param.getStartY());
            shuttleProtocol.setYTarget(param.getTargetY());
            shuttleProtocol.setYCurrent(param.getStartY());
        }else {
            shuttleProtocol.setMoveLoc(false);
            shuttleProtocol.setMoveType(0);
            shuttleProtocol.setXStart(0);
            shuttleProtocol.setXTarget(0);
            shuttleProtocol.setXCurrent(0);
            shuttleProtocol.setYStart(0);
            shuttleProtocol.setYTarget(0);
            shuttleProtocol.setYCurrent(0);
        }
        return true;
    }
    @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");
        body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));