Junjie
2024-04-12 89e6e823e4eeed9c08ac612d8089678ad24b4ef2
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
@@ -7,10 +7,12 @@
import com.zy.asrs.framework.common.DateUtils;
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.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.ShuttleCommandModeType;
import com.zy.asrs.wcs.core.model.enums.ShuttleRunDirection;
import com.zy.asrs.wcs.core.service.BasShuttleService;
@@ -18,6 +20,7 @@
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.constant.DeviceRedisConstant;
import com.zy.asrs.wcs.rcs.entity.DeviceDataLog;
import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType;
import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
@@ -32,6 +35,7 @@
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
@Slf4j
@SuppressWarnings("all")
@@ -110,7 +114,8 @@
                shuttleProtocol.setCurrentCode(data.getString("groundCode") == null ? "0" : data.getString("groundCode"));
                //电池电量
                shuttleProtocol.setBatteryPower(data.getString("battery") == null ? "0%" : data.getString("battery"));
                //故障
                shuttleProtocol.setErrorCode(deviceStatus == 6 ? "1" : "0");
                //是否顶升
                shuttleProtocol.setHasLift(data.getInteger("palletStatus") == 1 ? true : false);
@@ -130,7 +135,7 @@
                ///读取四向穿梭车状态-end
                //小车处于忙碌状态,将标记置为true
                if (!shuttleProtocol.getIdle()) {
                if (deviceStatus == 1 || deviceStatus == 2 || deviceStatus == 5) {
                    shuttleProtocol.setPakMk(true);
                }
@@ -223,25 +228,37 @@
            ArrayList<HashMap<String, Object>> modes = new ArrayList<>();
            //获取分段路径
            ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(nodes);
            for (ArrayList<NavigateNode> sectionNodes : data) {
            for (int idx = 0; idx < data.size(); idx++) {
                ArrayList<NavigateNode> sectionNodes = data.get(idx);
                boolean isRemoveFooterNode = false;//是否剔除尾节点
                if (idx != data.size() - 1) {
                    isRemoveFooterNode = true;//剔除尾节点
                }
                boolean flag = true;
                int oper;
                //开始路径
                NavigateNode startPath = nodes.get(0);
                NavigateNode startPath = sectionNodes.get(0);
                //结束路径
                NavigateNode targetPath = sectionNodes.get(sectionNodes.size() - 1);
                if (ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.LEFT
                        || ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.RIGHT) {
                    //母轨方向
                    oper = 5;
                }else {
                } else {
                    //子轨方向
                    oper = 6;
                }
                for (NavigateNode node : sectionNodes) {
                for (int i = 0; i < sectionNodes.size(); i++) {
                    if (isRemoveFooterNode && i == sectionNodes.size() - 1) {
                        continue;
                    }
                    NavigateNode node = sectionNodes.get(i);
                    HashMap<String, Object> map = new HashMap<>();
                    map.put("nodexX", node.getX());
                    map.put("nodexY", node.getY());
                    map.put("nodexZ", node.getZ());
                    map.put("nodeX", node.getX());
                    map.put("nodeY", node.getY());
                    map.put("nodeZ", node.getZ());
                    if (flag) {
                        map.put("oper", oper);
                        flag = false;
@@ -255,7 +272,7 @@
            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("taskId", generateDeviceTaskNo(taskNo));
            param.put("nodeNum", nodes.size());
            param.put("modes", modes);
            String response = new HttpHandler.Builder()
@@ -263,6 +280,7 @@
                    .setPath("/RDS/runRoute")
                    .setHeaders(headers)
                    .setJson(JSON.toJSONString(param))
                    .setTimeout(60, TimeUnit.SECONDS)
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
@@ -292,6 +310,7 @@
                    .setPath("/RDS/runOrder")
                    .setHeaders(headers)
                    .setJson(command.getBody())
                    .setTimeout(60, TimeUnit.SECONDS)
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
@@ -321,6 +340,7 @@
                    .setPath("/RDS/actionOrder")
                    .setHeaders(headers)
                    .setJson(command.getBody())
                    .setTimeout(60, TimeUnit.SECONDS)
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
@@ -350,6 +370,7 @@
                    .setPath("/RDS/actionOrder")
                    .setHeaders(headers)
                    .setJson(command.getBody())
                    .setTimeout(60, TimeUnit.SECONDS)
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
@@ -370,27 +391,35 @@
    @Override
    public boolean isIdle() {
        if (this.shuttleProtocol.getIdle() == null
        return this.isIdle(null);
    }
    @Override
    public boolean isIdle(ExecuteSupport support) {
        if (null != support) {
            if (!support.judgement()) {
                return false;
            }
        }
        if (this.shuttleProtocol.getDeviceStatus() == null
                || this.shuttleProtocol.getPakMk() == null
                || this.shuttleProtocol.getErrorCode() == null
                || this.shuttleProtocol.getProtocolStatus() == null
                || this.shuttleProtocol.getTaskNo() == null
        ) {
            return false;
        }
        boolean res = this.shuttleProtocol.getIdle()
        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.getTaskNo() == 0
                ;
        return res;
    }
    @Override
    public boolean isRequireCharge() {
        if (this.shuttleProtocol.getIdle() == null
        if (this.shuttleProtocol.getDeviceStatus() == null
                || this.shuttleProtocol.getPakMk() == null
                || this.shuttleProtocol.getErrorCode() == null
                || this.shuttleProtocol.getProtocolStatus() == null
@@ -398,7 +427,7 @@
            return false;
        }
        boolean res = this.shuttleProtocol.getIdle()
        boolean res = (this.shuttleProtocol.getDeviceStatus() == 3)
                && this.shuttleProtocol.getPakMk()
                && this.shuttleProtocol.getErrorCode().equals("0")
                && this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id
@@ -454,12 +483,38 @@
    }
    @Override
    public List<NavigateNode> getMoveAdvancePath() {
        ArrayList<NavigateNode> path = new ArrayList<>();
        if (shuttleProtocol.getTaskNo() != 0) {
            //存在任务,获取指令
            Object object = redisUtil.get(DeviceRedisConstant.SHUTTLE_WORK_FLAG + shuttleProtocol.getTaskNo());
            if (object != null) {
                ShuttleRedisCommand redisCommand = JSON.parseObject(object.toString(), ShuttleRedisCommand.class);
                List<NavigateNode> nodes = redisCommand.getAssignCommand().getNodes();//穿梭车预计路径
                if (!nodes.isEmpty()) {
                    path.addAll(nodes);
                }
            }
        }
        return path;
    }
    @Override
    public int generateDeviceTaskNo(int taskNo) {
        int no = taskNo % 255;
        if (no <= 1) {
            no = 2;
        }
        return no;
    }
    @Override
    public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed) {
        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()));
        body.put("taskId", taskNo);
        body.put("taskId", generateDeviceTaskNo(taskNo));
        LocService locService = SpringUtils.getBean(LocService.class);
        Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>()