自动化立体仓库 - WCS系统
f11edf2a41cd186ce46581f0b72ebccfc650674f..d34366b9d348f47a8083aa3dd2e3e0efa2377dcf
2 天以前 zc
初步调试
d34366 对比 | 目录
2 天以前 zc
初步调试
292ad9 对比 | 目录
2 天以前 zc
初步调试
715101 对比 | 目录
2 天以前 zc
初步调试
61dbf1 对比 | 目录
2 天以前 zc
初步调试
a3cd27 对比 | 目录
1个文件已添加
1个文件已删除
8个文件已修改
296 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/TVController.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 118 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/NoLiftInServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/NoLiftOutServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/impl/FyDevpThread.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/sql/20250419211417.nb3 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/sql/20250425082153.nb3 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/TVController.java
@@ -23,6 +23,7 @@
import com.zy.common.model.SearchLocParam;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.common.utils.RedisUtil;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.LedSlave;
@@ -33,6 +34,7 @@
import com.zy.core.thread.LedThread;
import com.zy.core.thread.ShuttleThread;
import com.zy.core.thread.impl.NormalLedThread;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
@@ -47,6 +49,7 @@
/**
 * Created by vincent on 2020/11/16
 */
@Slf4j
@RestController
@RequestMapping("/monitor")
public class TVController {
@@ -66,6 +69,9 @@
    private SlaveProperties slaveProperties;
    @Autowired
    private BasShuttleErrService basShuttleErrService;
    @Autowired
    private RedisUtil redisUtil;
    @Value("${asrs.wmsUrl}")
    private String wmsUrl;
@@ -225,94 +231,40 @@
     */
    @GetMapping("/led")
    public R monitorLed(@RequestParam("ledId") Integer ledId) {
        int dev_no = 1012;
        int dev_no1 = 1011;
        int dev_no2 = 1012;
        int dev_no3 = 1015;
        if (ledId == 1) {
            dev_no = 1012;
            dev_no1 = 1011;
            dev_no2 = 1012;
        } else if (ledId == 2) {
            dev_no = 1014;
            dev_no1 = 1013;
            dev_no2 = 1015;
            dev_no3 = 1015;
        } else if (ledId == 3) {
            dev_no = 1022;
            dev_no1 = 1021;
            dev_no2 = 1022;
            dev_no3 = 1023;
        } else if (ledId == 4) {
            dev_no = 1025;
            dev_no1 = 1024;
            dev_no2 = 1025;
            dev_no3 = 1026;
        }
        BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", dev_no));
        if (Cools.isEmpty(basDevp)) {
            return R.ok();
        Object o1 = redisUtil.get("LED_" + dev_no1);
        Object o2 = redisUtil.get("LED_" + dev_no2);
        Object o3 = redisUtil.get("LED_" + dev_no3);
        if (o1 != null) {
            log.info("电视机显示1:{}", JSONObject.toJSONString(o1));
            return R.ok().add(o1);
        } else if (o2 != null) {
            log.info("电视机显示2:{}", JSONObject.toJSONString(o2));
            return R.ok().add(o2);
        } else if (o3 != null) {
            log.info("电视机显示3:{}", JSONObject.toJSONString(o3));
            return R.ok().add(o3);
        }
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wms_wrk_no", basDevp.getWrkNo()));
        if (Cools.isEmpty(wrkMast)) {
            return R.ok();
        }
        List<LedCommand> commands = new ArrayList<>();
        return R.ok();
        // 组装命令
        LedCommand ledCommand = new LedCommand();
        ledCommand.setWorkNo(wrkMast.getWmsWrkNo());
        ledCommand.setIoType(wrkMast.getIoType());
        // 出库模式
        switch (wrkMast.getIoType()) {
            case 1:
                ledCommand.setTitle("全板入库");
                break;
            case 10:
                ledCommand.setTitle("空板入库");
                break;
            case 101:
                ledCommand.setTitle("全板出库");
                break;
            case 103:
                ledCommand.setTitle("拣料出库");
                break;
            case 104:
                ledCommand.setTitle("并板出库");
                break;
            case 107:
                ledCommand.setTitle("盘点出库");
                break;
            case 110:
                ledCommand.setTitle("空板出库");
                ledCommand.setEmptyMk(true);
                break;
            case 53:
                ledCommand.setTitle("拣料入库");
                break;
            case 57:
                ledCommand.setTitle("盘点入库");
                break;
            case 54:
                ledCommand.setTitle("并板入库");
                break;
            default:
                break;
        }
        ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
        ledCommand.setLocNo(wrkMast.getLocNo());
        ledCommand.setStaNo(wrkMast.getStaNo());
        if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
            Map<String, Object> param = new HashMap<>();
            param.put("taskNo", wrkMast.getWmsWrkNo());
            param.put("sta", wrkMast.getStaNo());
            String response = null;
            try {
                response = new HttpHandler.Builder()
                        .setUri(wmsUrl)
                        .setPath("/rpc/led/getTask2")
                        .setJson(JSON.toJSONString(param))
                        .build()
                        .doPost();
            } catch (IOException e) {
                e.printStackTrace();
            }
            JSONObject jsonObject = JSON.parseObject(response);
            Integer code = jsonObject.getInteger("code");
            if (code.equals(200)) {
                String data = jsonObject.getString("data");
                List<LedCommand> wrkDetls = JSONArray.parseArray(data, LedCommand.class);
                commands.addAll(wrkDetls);
            }
        }
        return R.ok().add(commands);
    }
    /**
@@ -381,6 +333,9 @@
                continue;
            }
            HashMap<String, Object> map = new HashMap<>();
            if (Cools.isEmpty(shuttleProtocol.getErrorCode())) {
                continue;
            }
            int i = Integer.parseInt(shuttleProtocol.getErrorCode());
            if (i > 0) {
                BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(i);
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1,8 +1,10 @@
package com.zy.asrs.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.domain.enums.NotifyMsgType;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
@@ -20,14 +22,8 @@
import com.zy.core.cache.SlaveConnection;
import com.zy.core.dispatcher.ShuttleDispatchUtils;
import com.zy.core.enums.*;
import com.zy.core.model.DevpSlave;
import com.zy.core.model.LiftSlave;
import com.zy.core.model.ShuttleSlave;
import com.zy.core.model.Task;
import com.zy.core.model.command.LiftAssignCommand;
import com.zy.core.model.command.LiftCommand;
import com.zy.core.model.command.ShuttleAssignCommand;
import com.zy.core.model.command.ShuttleCommand;
import com.zy.core.model.*;
import com.zy.core.model.command.*;
import com.zy.core.model.protocol.ForkLiftStaProtocol;
import com.zy.core.model.protocol.LiftProtocol;
import com.zy.core.model.protocol.ShuttleProtocol;
@@ -38,12 +34,15 @@
import com.zy.core.thread.LiftThread;
import com.zy.core.thread.ShuttleThread;
import com.zy.core.thread.impl.FyDevpThread;
import com.zy.core.thread.impl.NormalLedThread;
import com.zy.system.service.ConfigService;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.*;
/**
@@ -200,15 +199,8 @@
                    }
                    // 退回
                    if (back) {
                        if (!staProtocol.isLoading()) {
                            continue;
                        }
                        if (!staProtocol.isPakMk()) {
                            continue;
                        }
                        // led 异常显示
                        if (ledThread != null) {
                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
                            ledThread.error(errMsg);
                        }
                    }
@@ -216,6 +208,9 @@
                    // 判断是否满足入库条件
                    if (staProtocol.isAutoing() && staProtocol.isLoading() && isInEnable(devpThread, inSta.getStaNo()) && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999)) && staProtocol.isPakMk()) {
                        String barcode = staProtocol.getBarcode();
                        if (Cools.isEmpty(barcode) || "?".endsWith(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) {
                            continue;
                        }
                        // 判断重复工作档
                        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_sta_no", inSta.getStaNo()).eq("barcode", barcode));
                        if (wrkMast != null && wrkMast.getWrkSts() == WrkStsType.NEW_INBOUND.sts) {
@@ -303,6 +298,34 @@
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
                    String errMsg = "";
                    boolean back = false;
                    if (!back && staProtocol.isBackErr()) {
                        errMsg = "超宽异常";
                        back = true;
                    }
                    if (!back && staProtocol.isHighErr()) {
                        errMsg = "超高异常";
                        back = true;
                    }
                    if (!back && staProtocol.isRightErr()) {
                        errMsg = "超长异常";
                        back = true;
                    }
                    if (!back && staProtocol.isWeightErr()) {
                        errMsg = "超重";
                        back = true;
                    }
                    // 退回
                    if (back) {
                        // led 异常显示
                        if (ledThread != null) {
                            ledThread.error(errMsg);
                        }
                    }
                    Short workNo = staProtocol.getWorkNo();
                    if (staProtocol.isAutoing() && staProtocol.isLoading() && isInEnable(devpThread, inSta.getStaNo()) && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999)) && staProtocol.isPakMk()) {
                        String barcode = staProtocol.getBarcode();
@@ -395,6 +418,8 @@
                wrkMast.setModiTime(new Date());
                if (!wrkMastService.updateById(wrkMast)) {
                    News.info("{}任务,更新工作档失败", wrkMast.getWrkNo());
                } else {
                    setLedData(Integer.parseInt(wrkMast.getWmsWrkNo()), wrkMast.getStaNo());
                }
            }
        }
@@ -510,12 +535,39 @@
                        wrkMast.setModiTime(new Date());
                        wrkMast.setShuttleNo(null);
                        wrkMastService.updateById(wrkMast);
                        setLedData(Integer.parseInt(wrkMast.getWmsWrkNo()), wrkMast.getStaNo());
                    }
                }
            }
        }
    }
    private void setLedData(Integer wrkNo, Integer staNo) {
        try {
            Map<String, Object> param = new HashMap<>();
            param.put("taskNo", wrkNo);
            String response = null;
            response = new HttpHandler.Builder()
                    .setUri(wmsUrl)
                    .setPath("/rpc/led/getTask2")
                    .setJson(JSON.toJSONString(param))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            Integer code = jsonObject.getInteger("code");
            if (code.equals(200)) {
                String data = jsonObject.getString("data");
                List<LedCommand> wrkDetls = JSONArray.parseArray(data, LedCommand.class);
                redisUtil.set("LED_" + staNo, wrkDetls, 30);
                log.info("电视机数据设置:{},{}", staNo, data);
            } else {
                log.info("电视机数据设置异常:{},{}", wrkNo, response);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 初始化实时地图
@@ -915,16 +967,22 @@
                    ledThread.error(errMsg);
                }
            }
            if (!staProtocol.isAutoing()) {
                News.info("{}任务,{}站点,不在自动状态", wrkMast.getWrkNo(), staProtocol.getSiteId());
                return false;
            }
            String barcode = staProtocol.getBarcode();
            if (!staProtocol.isLoading()) {
                News.info("{}任务,{}站点,无托盘", wrkMast.getWrkNo(), staProtocol.getSiteId());
                return false;
            }
            if (wrkMast.getSourceStaNo() != 1031) {
                if (!staProtocol.isAutoing()) {
                    News.info("{}任务,{}站点,不在自动状态", wrkMast.getWrkNo(), staProtocol.getSiteId());
                    return false;
                }
                if (Cools.isEmpty(barcode) || "?".endsWith(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) {
                    return false;
                }
                if (!staProtocol.getBarcode().equals(wrkMast.getBarcode())) {
                    News.info("{}任务,{}站点,托盘码不匹配,站点托盘码:{},任务托盘码:{}", wrkMast.getWrkNo(), staProtocol.getSiteId(), staProtocol.getBarcode(), wrkMast.getBarcode());
                    return false;
@@ -956,6 +1014,7 @@
            wrkMast.setSystemMsg("");//清空消息
            wrkMast.setModiTime(now);
            if (wrkMastService.updateById(wrkMast)) {
                setLedData(Integer.parseInt(wrkMast.getWmsWrkNo()), wrkMast.getStaNo());
                return false;
            }
            return false;
@@ -1035,7 +1094,7 @@
                    return false;
                }
            } else if (sourceStaNo == 1012) {
                if (staProtocol.getWorkNo().intValue() != wrkMast.getWrkNo()) {
                if (staProtocol.getFinishWorkNo().intValue() != wrkMast.getWrkNo()) {
                    News.info("{}任务,{}站点,任务号不一致", wrkMast.getWrkNo(), staProtocol.getSiteId());
                    return false;
                }
@@ -1052,7 +1111,7 @@
            } else if (wrkMast.getSourceStaNo() == 1032) {
                locNo = "0200308";
            }
            boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleS(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_LIFT");
            boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleNoLift(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_LIFT");
            if (!dispatchShuttle) {
                News.info("{}任务,调度小车失败", wrkMast.getWrkNo());
                return false;
@@ -1281,12 +1340,12 @@
            //获取提升机命令
            List<LiftCommand> liftCommands = liftThread.getPalletOutCommand(wrkMast.getWrkNo(), sourceLev, wrkMast.getStaNo());
            LiftCommand liftCommand = liftCommands.get(0);
            if (wrkMast.getStaNo() == 1031) {
                liftCommand.setTaskNo(wrkMast.getWrkNo());
            } else {
                int deviceWrk = commonService.getWorkNo(8);//生成提升机设备工作号
                liftCommand.setTaskNo(deviceWrk);//更换随机任务号
            }
//            if (wrkMast.getMainWrkNo() != null) {
            liftCommand.setTaskNo(wrkMast.getWrkNo());
//            } else {
//                int deviceWrk = commonService.getWorkNo(8);//生成提升机设备工作号
//                liftCommand.setTaskNo(deviceWrk);//更换随机任务号
//            }
            ArrayList<LiftCommand> commands = new ArrayList<>();
            commands.add(liftCommand);
@@ -1304,6 +1363,7 @@
            wrkMast.setModiTime(now);
            if (wrkMastService.updateById(wrkMast)) {
                setLedData(Integer.parseInt(wrkMast.getWmsWrkNo()), wrkMast.getStaNo());
                //下发任务
                liftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
                return false;
@@ -2263,6 +2323,10 @@
     * 入出库模式切换函数
     */
    public synchronized void ioConvert() {
        for (LedSlave led : slaveProperties.getLed()) {
            NormalLedThread ledThread = (NormalLedThread) SlaveConnection.get(SlaveType.Led, led.getId());
            ledThread.reset();
        }
        try {
            // 根据输送线plc遍历
            FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
src/main/java/com/zy/asrs/service/impl/NoLiftInServiceImpl.java
@@ -489,7 +489,7 @@
            assignCommand.setAuto(true);//自动模式
            //获取小车到提升机行走命令
            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftThread.getLiftLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo())), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftThread.getLiftLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo())), NavigationMapType.DFX.id, assignCommand, shuttleThread);
            if (commands == null) {
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车,路径计算失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
@@ -861,7 +861,7 @@
            assignCommand.setLocNo(wrkMast.getLocNo());//目标库位
            List<ShuttleCommand> commands = new ArrayList<>();
            Integer mapType = NavigationMapType.NORMAL.id;
            Integer mapType = NavigationMapType.DFX.id;
            List<ShuttleCommand> moveCommands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), mapType, assignCommand, shuttleThread);
            if (moveCommands == null) {
src/main/java/com/zy/asrs/service/impl/NoLiftOutServiceImpl.java
@@ -465,7 +465,7 @@
            assignCommand.setAuto(true);//自动模式
            //获取小车到提升机行走命令
            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftThread.getLiftLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo())), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftThread.getLiftLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo())), NavigationMapType.DFX.id, assignCommand, shuttleThread);
            if (commands == null) {
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车,路径计算失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java
@@ -542,19 +542,19 @@
            //去待机位
            String locNo = Utils.getLocNo(Utils.getRow(liftStandByLocNo) + 1, Utils.getBay(liftStandByLocNo) - 1, Utils.getLev(liftStandByLocNo));
            //防止另一辆车占用待机位
            try{
            try {
                if (shuttleProtocol.getShuttleNo() == 2) {
                    ShuttleThread shuttleThread1 = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, 1);
                    if (locNo.equals(shuttleThread1.getStatus().getCurrentLocNo())) {
                        locNo = Utils.getLocNo(Utils.getRow(liftStandByLocNo) + 2, Utils.getBay(liftStandByLocNo) - 1, Utils.getLev(liftStandByLocNo));
                        locNo = Utils.getLocNo(Utils.getRow(liftStandByLocNo) - 1, Utils.getBay(liftStandByLocNo) - 1, Utils.getLev(liftStandByLocNo));
                    }
                } else {
                    ShuttleThread shuttleThread2 = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, 2);
                    if (locNo.equals(shuttleThread2.getStatus().getCurrentLocNo())) {
                        locNo = Utils.getLocNo(Utils.getRow(liftStandByLocNo) + 2, Utils.getBay(liftStandByLocNo) - 1, Utils.getLev(liftStandByLocNo));
                        locNo = Utils.getLocNo(Utils.getRow(liftStandByLocNo) - 1, Utils.getBay(liftStandByLocNo) - 1, Utils.getLev(liftStandByLocNo));
                    }
                }
            }catch (Exception e){
            } catch (Exception e) {
            }
            //获取小车到提升机待机行走命令
src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java
@@ -30,6 +30,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.rmi.CORBA.Util;
import java.util.*;
/**
@@ -251,7 +252,7 @@
                if (wrkMast1 != null) {
                    wrkMast1.setShuttleNo(shuttleProtocol.getShuttleNo());
                    wrkMastService.updateById(wrkMast1);
                    sameLev.add(0,shuttleThread);
                    sameLev.add(0, shuttleThread);
                    //return true;
                }
                break;
@@ -364,7 +365,8 @@
     */
    public boolean searchDispatchShuttleNoLift(Integer wrkNo, String sourceLocNo, String locNo, String flag) {
        ArrayList<ShuttleThread> diffLev = new ArrayList<>();//不同楼层的穿梭车
        int lev1 = 0;
        boolean tongLev = false;
        for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
            //获取四向穿梭车线程
            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
@@ -388,9 +390,16 @@
                }
            }
            diffLev.add(shuttleThread);
            if (lev1 != 0) {
                if (lev1 == Utils.getLev(shuttleProtocol.getCurrentLocNo())) {
                    tongLev = true;
                }
            } else {
                lev1 = Utils.getLev(shuttleProtocol.getCurrentLocNo());
            }
        }
        //寻找离任务楼层最近的穿梭车(不考虑跨楼层小车移动距离)
        //
        if (!diffLev.isEmpty()) {
            Map<Integer, ShuttleThread> diffShuttles = new TreeMap<>();//自然排序小车Map
            //获取任务
@@ -422,19 +431,38 @@
                    //当前穿梭车库位号
                    String currentLocNo = shuttleProtocol.getCurrentLocNo();
                    int currentLev = Utils.getLev(currentLocNo);
                    if (wrkMast1.getIoType() == 101 && currentLocNo.equals(locNo)) {
                        //车辆当前位置已经是目标库位,调度该车
                        //给工作档绑定小车号
                        diffShuttles.put(-1, shuttleThread);
                        diffShuttles.put(-2, shuttleThread);
                    } else {
//                        if (tongLev && diffLev.size() >= 2) {
//                            //当前穿梭车线程到目标地点距离
//                            List<NavigateNode> currentShuttlePath = navigateUtils.calc(currentLocNo, locNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleProtocol.getShuttleNo(), Utils.getLev(currentLocNo)), null);//搜索空闲穿梭车,使用正常通道地图
//                            if (currentShuttlePath == null) {
//                                continue;
//                            }
//                            Integer currentAllDistance = navigateUtils.getOriginPathAllDistance(currentShuttlePath);//计算当前路径行走总距离
//                            diffShuttles.put(currentAllDistance, shuttleThread);
//                        } else {
                        //ABS(目标楼层 - 当前楼层) 得到差距,取最小差值
                        int currentValue = Math.abs(lev - currentLev);
                        if (diffShuttles.get(currentValue) != null) {
                            diffShuttles.put(currentValue + 1, shuttleThread);
                            try {
                                List<NavigateNode> currentShuttlePath = navigateUtils.calc(currentLocNo, locNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleProtocol.getShuttleNo(), Utils.getLev(currentLocNo)), null);//搜索空闲穿梭车,使用正常通道地图
                                if (currentShuttlePath == null) {
                                    continue;
                                }
                                Integer currentAllDistance = navigateUtils.getOriginPathAllDistance(currentShuttlePath);//计算当前路径行走总距离
                                diffShuttles.put(currentAllDistance, shuttleThread);
                                diffShuttles.put(currentValue - 1, shuttleThread);
                            } catch (Exception e) {
                                diffShuttles.put(currentValue + 1, shuttleThread);
                            }
                        } else {
                            diffShuttles.put(currentValue, shuttleThread);
                        }
                        //                   }
                    }
                }
src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -110,6 +110,7 @@
        basDevp.setAutoing(autoing ? "Y" : "N");
        basDevp.setLoading(loading ? "Y" : "N");
        basDevp.setInEnable(inEnable ? "Y" : "N");
        basDevp.setWrkNo1(finishWorkNo.intValue());
        if (siteId == 105 || siteId == 205 || siteId == 346) {
            basDevp.setOutEnable(outInModel == 2 ? "Y" : "N");
        } else {
src/main/java/com/zy/core/thread/impl/FyDevpThread.java
@@ -204,11 +204,7 @@
                    BasDevp sqlModel = staProtocol.toSqlModel();
                    stations.add(sqlModel);
                    //暂时写入数据库
                    BasDevp basDevp = basConveyorStaService.selectById(sta);
                    if (basDevp == null) {
                        basConveyorStaService.insert(sqlModel);
                    }
                }
                if (!stations.isEmpty()) {
                    if (null != basConveyorStaService && !basConveyorStaService.updateBatchById(stations)) {
src/main/resources/sql/20250419211417.nb3
Binary files differ
src/main/resources/sql/20250425082153.nb3
Binary files differ