*
lsh
2025-11-24 9ada554508bbaba431c9cf6745268ac9b87561d5
*
2个文件已添加
7个文件已修改
2174 ■■■■ 已修改文件
src/main/java/com/zy/asrs/domain/enums/TaskStatusType.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/TaskWrkService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 1927 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/RouteRgvUtils.java 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/TaskWrkMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/enums/TaskStatusType.java
New file
@@ -0,0 +1,34 @@
package com.zy.asrs.domain.enums;
public enum TaskStatusType {
    RECEIVE(1,"接收"),
    DISTRIBUTE(2,"派发"),
    COMPLETE(3,"命令完成"),
    CANCEL(4,"取消"),
    OVER(5,"完结"),
    OVER2(7,"手动完结"),
    OVER3(9,"出库到输送线")
    ;
    public Integer id;
    public String desc;
    TaskStatusType(Integer id, String desc){
        this.id = id;
        this.desc = desc;
    }
    public static String get(Integer id) {
        if (null == id) {
            return null;
        }
        for (TaskStatusType type : TaskStatusType.values()) {
            if (type.id.equals(id)) {
                return type.desc;
            }
        }
        return null;
    }
}
src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java
@@ -8,5 +8,5 @@
@Mapper
@Repository
public interface TaskWrkMapper extends BaseMapper<TaskWrk> {
    TaskWrk selectByWrkNo(Integer wrkNo);
}
src/main/java/com/zy/asrs/service/TaskWrkService.java
@@ -3,6 +3,11 @@
import com.zy.asrs.entity.TaskWrk;
import com.baomidou.mybatisplus.service.IService;
import java.util.Date;
import java.util.List;
public interface TaskWrkService extends IService<TaskWrk> {
    TaskWrk selectByWrkNo(Integer wrkNo);
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.common.*;
import com.core.exception.CoolException;
import com.zy.asrs.domain.enums.TaskStatusType;
import com.zy.asrs.entity.*;
import com.zy.asrs.mapper.*;
import com.zy.asrs.service.*;
@@ -80,6 +81,8 @@
    private WrkMastService wrkMastService;
    @Autowired
    private BasDevpPositionService basDevpPositionService;
    @Autowired
    private TaskWrkService taskWrkService;
    @Value("${wms.url}")
    private String wmsUrl;
@@ -87,6 +90,24 @@
    private Integer inventoryNumber;
    public Integer wrkNo = 10002;
    @Value("${wms.rgvOpen}")
    private boolean rgvOpen;
    @Value("${constant-parameters.trackEntireLength}")
    private Long trackEntireLength;
    @Value("${constant-parameters.trackBenchmark}")
    private Long trackBenchmark;
    @Value("${constant-parameters.trackProportion}")
    private Long trackProportion;
    @Value("${constant-parameters.avoidDistance}")
    private Long avoidDistance;
    @Autowired
    private TaskWrkLogServiceImpl taskWrkLogService;
    public Long currentTimeMilliConnectCrnAuto= 0L;
    /*
     * 验证许可证是否有效
@@ -2519,1133 +2540,795 @@
    }
//
//    public synchronized void taskStart() {
//        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
//            try {
//                if (rgvDetection(rgvSlave)) {
//                    String taskNoNow = rgvOtherTaskWrk(rgvSlave);
//                    List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position", true));
//                    boolean itSmall = new TrackRangeUtils().IsItSmall(rgvSlave);
//                    if (basDevpPositions.isEmpty()) {
//                        log.error("获取所有站点信息异常");
//                        try{
//                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
//                            deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "指令生成:获取所有站点信息异常");
//                        } catch (Exception e2){
//                        }
//                        continue;
//                    }
//                    List<WrkMast> wrkMastList = new ArrayList<>();
//                    List<Integer> staList = new ArrayList<>();
//                    for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()) {
//                        TaskWrk taskWrk = deviceDetection(inSta);
//                        if (taskWrk != null) {
//                            if (taskWrk.getWrkNo().toString().equals(taskNoNow)) continue;
//                            wrkMastList.add(taskWrk);
//                            staList.add(inSta.getStaNo());
//                        }
//                    }
//
//                    if (wrkMastList.isEmpty() || staList.isEmpty()) continue;
//
//                    boolean sign = false;
//
//                    if (rgvOtherStatusEnable(rgvSlave)) {
//                        //分成上下两部分任务
//                        List<Integer>[] avoidRange = RouteUtils.gradeRange(staList, basDevpPositions, itSmall);
//                        List<Integer> rangeListSou = avoidRange[itSmall ? 0 : 1];
//                        List<Integer> rangeListSouOther = avoidRange[itSmall ? 1 : 0];
//                        //就近排序
//                        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
//                        List<Integer> rangeList = RouteUtils.SortNearby(rangeListSou, rgvProtocol.RgvPos, basDevpPositions);
//                        List<Integer> rangeListOther = RouteUtils.SortNearby(rangeListSouOther, rgvProtocol.RgvPos, basDevpPositions);
//
//                        //所属部分就进取货
//
//                        //筛选范围内任务
//                        //就近排序
//                        //筛选在范围任务
//                        Long[][] avoidedRange = new TrackRangeUtils().avoidRangeArr(rgvSlave, trackEntireLength, trackBenchmark, avoidDistance);
//                        List<Integer> belongToRange = RouteUtils.SortNearby(RouteUtils.belongToRange(rangeList, avoidedRange[0], basDevpPositions), rgvProtocol.RgvPos, basDevpPositions);
//
//                        if (!sign && staList.size()==1){
//                            if (rgvOtherIDLEOther(rgvSlave)){
//                                if (!rgvOtherIDLE(rgvSlave,staList.get(0))){
//                                    System.out.println("空闲就近跳过==="+rgvSlave.getId()+"===");
//                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"空闲就近跳过");
//
//                                    sign=true;
//                                }
//                            }
//                            if (sign){
//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                    if (rgvStn.getStaNo().equals(staList.get(0))) {
//                                        WrkMast wrkMast = deviceDetection(rgvStn);
//                                        if (wrkMast != null) {
//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(wrkMast.getStaNo().toString());//站点转换  需要修改
//                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
//                                                if (rgvSuper.getStaNo().equals(outStaNo)){
//                                                    System.out.println("空闲就近跳过后因最远再次执行==="+rgvSlave.getId()+"===");
//
//                                                    sign=false;
//                                                    break;
//                                                }
//                                            }
//                                        } else {
//                                            return;
//                                        }
//                                        break;
//                                    }
//                                }
//                            }
//                        }
//
//                        if(!sign){
//                            for (Integer staNoNow : belongToRange) {
//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
//                                        WrkMast wrkMast = deviceDetection(rgvStn);
//                                        if (wrkMast != null) {
//                                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(wrkMast.getStaNo().toString())));//站点转换  需要修改
//                                            if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
//                                                System.out.println("全范围执行==="+rgvSlave.getId()+"==="+wrkMast);
//                                                System.out.println("全范围执行==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
//
//                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
//                                            }
//                                        }
//                                        break;
//                                    }
//                                }
//                                if (sign) {
//                                    break;
//                                }
//                            }
//                        }
//                        if (!sign) {
//                            //  筛选范围内取货任务
//                            for (Integer staNoNow : belongToRange) {
//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
//                                        if (taskWrk != null) {
//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
//                                            for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
//                                                if (rgvStnOut.getStaNo().equals(outStaNo)) {
//                                                    System.out.println("筛选范围内取货任务==="+rgvSlave.getId()+"==="+taskWrk);
//                                                    System.out.println("筛选范围内取货任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
//
//                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
//                                                    break;
//                                                }
//                                            }
//                                        }
//                                        break;
//                                    }
//                                }
//                                if (sign) {
//                                    break;
//                                }
//                            }
//                        }
//
//                        if (!sign && staList.size()==1){
//                            if (rgvOtherIDLEOther2(rgvSlave)){
//                                if (!rgvOtherIDLE2(rgvSlave,staList.get(0))){
//                                    System.out.println("运行就近跳过==="+rgvSlave.getId()+"===");
//                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"运行就近跳过");
//
//                                    sign=true;
//                                }
//                            }
//                            if (sign){
//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                    if (rgvStn.getStaNo().equals(staList.get(0))) {
//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
//                                        if (taskWrk != null) {
//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
//                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
//                                                if (rgvSuper.getStaNo().equals(outStaNo)){
//                                                    System.out.println("运行就近跳过后因最远再次执行==="+rgvSlave.getId()+"===");
//
//                                                    sign=false;
//                                                    break;
//                                                }
//                                            }
//                                        } else {
//                                            return;
//                                        }
//                                        break;
//                                    }
//                                }
//                            }
//                        }
//
//
//
//                        if (!sign && staList.size()>1) {
//                            for (Integer staNoNow : rangeList) {
//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
//                                        if (taskWrk != null) {
//                                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
//                                            if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
//                                                System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+taskWrk);
//                                                System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
//
//                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
//                                            }
//                                        }
//                                        break;
//                                    }
//                                }
//                                if (sign) {
//                                    break;
//                                }
//                            }
//                        }else if (!sign && staList.size()==1){
//                            BasDevpPosition basDevpPosition1 = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staList.get(0)));
//                            if (Math.abs(basDevpPosition1.getPlcPosition()- rgvProtocol.getRgvPos())<rgvProtocol.getCarBodyJiaoMing()+rgvProtocol.getCarBodyKunPeng() + avoidDistance*2){
//                                for (Integer staNoNow : rangeList) {
//                                    for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                        if (rgvStn.getStaNo().equals(staNoNow)) {
//                                            TaskWrk taskWrk = deviceDetection(rgvStn);
//                                            if (taskWrk != null) {
//                                                BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
//                                                if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
//                                                    System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+taskWrk);
//                                                    System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
//
//                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
//                                                }
//                                            }
//                                            break;
//                                        }
//                                    }
//                                    if (sign) {
//                                        break;
//                                    }
//                                }
//                            }
//                        }
//
//
//
//                        if (!sign && staList.size()>1) {
//                            //  半边区域内取货任务
//                            for (Integer staNoNow : rangeList) {
//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
//                                        if (taskWrk != null) {
//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
//                                            for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
//                                                if (rgvStnOut.getStaNo().equals(outStaNo)) {
//                                                    System.out.println("筛选半边范围取货任务==="+rgvSlave.getId()+"==="+taskWrk);
//                                                    System.out.println("筛选半边范围取货任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
//
//                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
//                                                    break;
//                                                }
//                                            }
//                                        }
//                                        break;
//                                    }
//                                }
//                                if (sign) {
//                                    break;
//                                }
//                            }
//                        }
//                        if (!sign && staList.size()>1) {
//                            for (Integer staNoNow : rangeListOther) {
//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
//                                        if (taskWrk != null) {
//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
//                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
//                                                if (rgvSuper.getStaNo().equals(outStaNo)){
//                                                    System.out.println("因最远执行半边区域内放货任务==="+rgvSlave.getId()+"===");
//                                                    BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
//                                                    if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
//                                                        sign = taskGenerate(rgvSlave, rgvStn, 0);
//                                                    }
//                                                    break;
//                                                }
//                                            }
//                                        }
//                                        break;
//                                    }
//                                    if (sign) {
//                                        break;
//                                    }
//                                }
//                                if (sign) {
//                                    break;
//                                }
//                            }
//
//                        }else if (!sign && staList.size()==1){
//                            for (Integer staNoNow : rangeList) {
//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
//                                        if (taskWrk != null) {
//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
//                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
//                                                if (rgvSuper.getStaNo().equals(outStaNo)){
//                                                    System.out.println("因最远执行半边区域内放货任务==="+rgvSlave.getId()+"===");
//                                                    BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
//                                                    if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
//                                                        sign = taskGenerate(rgvSlave, rgvStn, 0);
//                                                    }
//                                                    break;
//                                                }
//                                            }
//                                        }
//                                        break;
//                                    }
//                                    if (sign) {
//                                        break;
//                                    }
//                                }
//                                if (sign) {
//                                    break;
//                                }
//                            }
//
//                        }
//                        RgvErrCache.updateRgvErr(rgvSlave.getId(),"未查询到可执行任务");
//
//                    } else {
//                        //可用区域就近取货
//                        //就近排序
//                        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
//                        List<Integer> rangeList = RouteUtils.SortNearby(staList, rgvProtocol.RgvPos, basDevpPositions);
//                        //  半边区域内取货任务
//                        for (Integer staNoNow : rangeList) {
//                            for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                if (rgvStn.getStaNo().equals(staNoNow)) {
//                                    TaskWrk taskWrk = deviceDetection(rgvStn);
//                                    if (taskWrk != null) {
//                                        Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
//                                        for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
//                                            if (rgvStnOut.getStaNo().equals(outStaNo)) {
//                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
//                                                break;
//                                            }
//                                        }
//                                    }
//                                    break;
//                                }
//                            }
//                            if (sign) {
//                                break;
//                            }
//                        }
//                    }
//                }
//            } catch (Exception e) {
//                log.error("任务生成失败===》异常信息:{}", e.getMessage());
//                try{
//                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
//                    deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "指令生成失败");
//                } catch (Exception e2){
//                }
//            }
//        }
//    }
//
//    public String rgvOtherTaskWrk(RgvSlave slave) {
//
//        RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getOtherId());
//        TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache();
//        ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
//        if (!allTaskProtocol.isEmpty()) {
//            for (TaskProtocol taskProtocol : allTaskProtocol.values()) {
//                if (taskProtocol.getTaskNo() != 0) {
//                    return taskProtocol.getTaskNo().toString();
//                }
//            }
//        }
//        return "无";
//
//    }
//
//    public boolean rgvDetection(RgvSlave slave) {
//        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
//        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
//
//        if (rgvProtocol == null || rgvTaskProtocol == null) {
//            return false;
//        }
//        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1
//                || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
//            return false;
//        }
//        if (rgvProtocol.getLoaded()==1){
//            return false;
//        }
//        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
//        RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
//
//        if (rgvProtocolOther == null) {
//            return false;
//        }
//        if (rgvProtocolOther.statusEnable) {
//            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1 || rgvProtocolOther.getRgvPosDestination() == 0L) {
//                return false;
//            }
//        }
//        return true;
//    }
//    public boolean rgvOtherIDLEOther(RgvSlave slave) {
//        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getOtherId());
//        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getOtherId());
//
//        if (rgvProtocol == null || rgvTaskProtocol == null) {
//            return false;
//        }
//        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1
//                || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
//            return false;
//        }
//
//        if (rgvProtocol.getLoaded()!=0) {
//            return false;
//        }
//        return true;
//    }
//    public boolean rgvOtherIDLEOther2(RgvSlave slave) {
//        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getOtherId());
//        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getOtherId());
//
//        if (rgvProtocol == null || rgvTaskProtocol == null) {
//            return false;
//        }
//        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO)
//                || rgvProtocol.getRgvPos().equals(0L)
//                || rgvTaskProtocol.getAvoid() == -1) {
//            return false;
//        }
//
//        if (rgvProtocol.getLoaded()!=0) {
//            return false;
//        }
//        return true;
//    }
//    public boolean rgvOtherIDLE(RgvSlave slave,Integer staNo) {
//        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
//        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
//
//        if (rgvProtocol == null || rgvTaskProtocol == null) {
//            return false;
//        }
//        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1
//                || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
//            return false;
//        }
//        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
//
//        if (rgvProtocolOther == null) {
//            return true;
//        }
//        if (rgvProtocolOther.statusEnable) {
//            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staNo));
//            long abs = Math.abs(Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos())
//                    -
//                    Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos()));
//            if (abs<100){
//                return true;
//            }
//            if (Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos())
//                    >=
//                    Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos())){
//                return false;
//            }
//        }
//        return true;
//    }
//    public boolean rgvOtherIDLE2(RgvSlave slave,Integer staNo) {
//        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
//        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
//
//        if (rgvProtocol == null || rgvTaskProtocol == null) {
//            return false;
//        }
//        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1
//                || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
//            return false;
//        }
//        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
//
//        if (rgvProtocolOther == null) {
//            return true;
//        }
//        if (rgvProtocolOther.statusEnable) {
//            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staNo));
//            long abs = Math.abs(Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos())
//                    -
//                    Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos()));
//            if (abs<100){
//                return true;
//            }
//            if (Math.abs(basDevpPosition.getPlcPosition()-rgvProtocol.getRgvPos())
//                    >=
//                    Math.abs(basDevpPosition.getPlcPosition()-rgvProtocolOther.getRgvPos())){
//                return false;
//            }
//        }
//        return true;
//    }
//
//    public TaskWrk deviceDetection(RgvSlave.RgvStn inSta) {
//
//        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId());
//        StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
//        if (staProtocol == null) {
//            return null;
//        }
//        // 判断是否满足取货条件
//        if (!staProtocol.isPakMkTask()) {
//            devpThread.setErrorDev(staProtocol.getSiteId(), "任务已下发等待小车取");
//            return null;
//        }
//        // 判断是否满足取货条件
//        if (staProtocol.isAutoing()
////                && staProtocol.isLoading()
////                && staProtocol.isStaOk()
//                && staProtocol.getWorkNo() != 0) {
//            TaskWrk taskWrk = taskWrkService.selectByWrkNo(staProtocol.getWorkNo());
//            if (taskWrk != null) {
//                Integer stano = staProtocol.getStaNo();
//                if (staProtocol.getSiteId() == 1004 || staProtocol.getSiteId()==1020){
//                    if (!staProtocol.isPakMkRun()) {
//                        devpThread.setErrorDev(staProtocol.getSiteId(), "异常回退标记,需要回退");
//                        return null;
//                    }
//                    if (!staProtocol.isLoading()) {
//                        devpThread.setErrorDev(staProtocol.getSiteId(), "无物");
//                        return null;
//                    }
//                    if (!staProtocol.isInEnable()) {
//                        devpThread.setErrorDev(staProtocol.getSiteId(), "等待可入信号");
//                        return null;
//                    }
    public synchronized void taskStart() {
        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
            try {
                if (rgvDetection(rgvSlave)) {
                    String taskNoNow = rgvOtherTaskWrk(rgvSlave);
                    List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position", true));
                    boolean itSmall = new TrackRangeUtils().IsItSmall(rgvSlave);
                    if (basDevpPositions.isEmpty()) {
                        log.error("获取所有站点信息异常");
                        try{
                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                            deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "指令生成:获取所有站点信息异常");
                        } catch (Exception e2){
                        }
                        continue;
                    }
                    List<TaskWrk> taskWrkList = new ArrayList<>();
                    List<Integer> staList = new ArrayList<>();
                    for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()) {
                        TaskWrk taskWrk = deviceDetection(inSta);
                        if (taskWrk != null) {
                            if (taskWrk.getWrkNo().toString().equals(taskNoNow)) continue;
                            taskWrkList.add(taskWrk);
                            staList.add(inSta.getStaNo());
                        }
                    }
                    if (taskWrkList.isEmpty() || staList.isEmpty()) continue;
                    boolean sign = false;
                    if (rgvOtherStatusEnable(rgvSlave)) {
                        //分成上下两部分任务
                        List<Integer>[] avoidRange = RouteRgvUtils.gradeRange(staList, basDevpPositions, itSmall);
                        List<Integer> rangeListSou = avoidRange[itSmall ? 0 : 1];
                        List<Integer> rangeListSouOther = avoidRange[itSmall ? 1 : 0];
                        //就近排序
                        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
                        List<Integer> rangeList = RouteRgvUtils.SortNearby(rangeListSou, rgvProtocol.RgvPos, basDevpPositions);
                        List<Integer> rangeListOther = RouteRgvUtils.SortNearby(rangeListSouOther, rgvProtocol.RgvPos, basDevpPositions);
                        //所属部分就进取货
                        //筛选范围内任务
                        //就近排序
                        //筛选在范围任务
                        Long[][] avoidedRange = new TrackRangeUtils().avoidRangeArr(rgvSlave, trackEntireLength, trackBenchmark, avoidDistance);
                        List<Integer> belongToRange = RouteRgvUtils.SortNearby(RouteRgvUtils.belongToRange(rangeList, avoidedRange[0], basDevpPositions), rgvProtocol.RgvPos, basDevpPositions);
                        if (!sign && staList.size()==1){
                            if (rgvOtherIDLEOther(rgvSlave)){
                                if (!rgvOtherIDLE(rgvSlave,staList.get(0))){
                                    System.out.println("空闲就近跳过==="+rgvSlave.getId()+"===");
                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"空闲就近跳过");
                                    sign=true;
                                }
                            }
                            if (sign){
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                    if (rgvStn.getStaNo().equals(staList.get(0))) {
                                        TaskWrk taskWrk = deviceDetection(rgvStn);
                                        if (taskWrk != null) {
                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
                                                if (rgvSuper.getStaNo().equals(outStaNo)){
                                                    System.out.println("空闲就近跳过后因最远再次执行==="+rgvSlave.getId()+"===");
                                                    sign=false;
                                                    break;
                                                }
                                            }
                                        } else {
                                            return;
                                        }
                                        break;
                                    }
                                }
                            }
                        }
                        if(!sign){
                            for (Integer staNoNow : belongToRange) {
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                    if (rgvStn.getStaNo().equals(staNoNow)) {
                                        TaskWrk taskWrk = deviceDetection(rgvStn);
                                        if (taskWrk != null) {
                                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
                                            if (RouteRgvUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
                                                System.out.println("全范围执行==="+rgvSlave.getId()+"==="+taskWrk);
                                                System.out.println("全范围执行==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
                                            }
                                        }
                                        break;
                                    }
                                }
                                if (sign) {
                                    break;
                                }
                            }
                        }
                        if (!sign) {
                            //  筛选范围内取货任务
                            for (Integer staNoNow : belongToRange) {
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                    if (rgvStn.getStaNo().equals(staNoNow)) {
                                        TaskWrk taskWrk = deviceDetection(rgvStn);
                                        if (taskWrk != null) {
                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                                            for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
                                                if (rgvStnOut.getStaNo().equals(outStaNo)) {
                                                    System.out.println("筛选范围内取货任务==="+rgvSlave.getId()+"==="+taskWrk);
                                                    System.out.println("筛选范围内取货任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
                                                    break;
                                                }
                                            }
                                        }
                                        break;
                                    }
                                }
                                if (sign) {
                                    break;
                                }
                            }
                        }
                        if (!sign && staList.size()==1){
                            if (rgvOtherIDLEOther2(rgvSlave)){
                                if (!rgvOtherIDLE2(rgvSlave,staList.get(0))){
                                    System.out.println("运行就近跳过==="+rgvSlave.getId()+"===");
                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"运行就近跳过");
                                    sign=true;
                                }
                            }
                            if (sign){
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                    if (rgvStn.getStaNo().equals(staList.get(0))) {
                                        TaskWrk taskWrk = deviceDetection(rgvStn);
                                        if (taskWrk != null) {
                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
                                                if (rgvSuper.getStaNo().equals(outStaNo)){
                                                    System.out.println("运行就近跳过后因最远再次执行==="+rgvSlave.getId()+"===");
                                                    sign=false;
                                                    break;
                                                }
                                            }
                                        } else {
                                            return;
                                        }
                                        break;
                                    }
                                }
                            }
                        }
                        if (!sign && staList.size()>1) {
                            for (Integer staNoNow : rangeList) {
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                    if (rgvStn.getStaNo().equals(staNoNow)) {
                                        TaskWrk taskWrk = deviceDetection(rgvStn);
                                        if (taskWrk != null) {
                                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
                                            if (RouteRgvUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
                                                System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+taskWrk);
                                                System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
                                            }
                                        }
                                        break;
                                    }
                                }
                                if (sign) {
                                    break;
                                }
                            }
                        }else if (!sign && staList.size()==1){
                            BasDevpPosition basDevpPosition1 = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staList.get(0)));
                            if (Math.abs(basDevpPosition1.getPlcPosition()- rgvProtocol.getRgvPos())<rgvProtocol.getCarBodyJiaoMing()+rgvProtocol.getCarBodyKunPeng() + avoidDistance*2){
                                for (Integer staNoNow : rangeList) {
                                    for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                        if (rgvStn.getStaNo().equals(staNoNow)) {
                                            TaskWrk taskWrk = deviceDetection(rgvStn);
                                            if (taskWrk != null) {
                                                BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
                                                if (RouteRgvUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
                                                    System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+taskWrk);
                                                    System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
                                                }
                                            }
                                            break;
                                        }
                                    }
                                    if (sign) {
                                        break;
                                    }
                                }
                            }
                        }
                        if (!sign && staList.size()>1) {
                            //  半边区域内取货任务
                            for (Integer staNoNow : rangeList) {
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                    if (rgvStn.getStaNo().equals(staNoNow)) {
                                        TaskWrk taskWrk = deviceDetection(rgvStn);
                                        if (taskWrk != null) {
                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                                            for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
                                                if (rgvStnOut.getStaNo().equals(outStaNo)) {
                                                    System.out.println("筛选半边范围取货任务==="+rgvSlave.getId()+"==="+taskWrk);
                                                    System.out.println("筛选半边范围取货任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
                                                    break;
                                                }
                                            }
                                        }
                                        break;
                                    }
                                }
                                if (sign) {
                                    break;
                                }
                            }
                        }
                        if (!sign && staList.size()>1) {
                            for (Integer staNoNow : rangeListOther) {
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                    if (rgvStn.getStaNo().equals(staNoNow)) {
                                        TaskWrk taskWrk = deviceDetection(rgvStn);
                                        if (taskWrk != null) {
                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
                                                if (rgvSuper.getStaNo().equals(outStaNo)){
                                                    System.out.println("因最远执行半边区域内放货任务==="+rgvSlave.getId()+"===");
                                                    BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
                                                    if (RouteRgvUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
                                                        sign = taskGenerate(rgvSlave, rgvStn, 0);
                                                    }
                                                    break;
                                                }
                                            }
                                        }
                                        break;
                                    }
                                    if (sign) {
                                        break;
                                    }
                                }
                                if (sign) {
                                    break;
                                }
                            }
                        }else if (!sign && staList.size()==1){
                            for (Integer staNoNow : rangeList) {
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                    if (rgvStn.getStaNo().equals(staNoNow)) {
                                        TaskWrk taskWrk = deviceDetection(rgvStn);
                                        if (taskWrk != null) {
                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
                                                if (rgvSuper.getStaNo().equals(outStaNo)){
                                                    System.out.println("因最远执行半边区域内放货任务==="+rgvSlave.getId()+"===");
                                                    BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
                                                    if (RouteRgvUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
                                                        sign = taskGenerate(rgvSlave, rgvStn, 0);
                                                    }
                                                    break;
                                                }
                                            }
                                        }
                                        break;
                                    }
                                    if (sign) {
                                        break;
                                    }
                                }
                                if (sign) {
                                    break;
                                }
                            }
                        }
                        RgvErrCache.updateRgvErr(rgvSlave.getId(),"未查询到可执行任务");
                    } else {
                        //可用区域就近取货
                        //就近排序
                        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
                        List<Integer> rangeList = RouteRgvUtils.SortNearby(staList, rgvProtocol.RgvPos, basDevpPositions);
                        //  半边区域内取货任务
                        for (Integer staNoNow : rangeList) {
                            for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                if (rgvStn.getStaNo().equals(staNoNow)) {
                                    TaskWrk taskWrk = deviceDetection(rgvStn);
                                    if (taskWrk != null) {
                                        Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                                        for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
                                            if (rgvStnOut.getStaNo().equals(outStaNo)) {
                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
                                                break;
                                            }
                                        }
                                    }
                                    break;
                                }
                            }
                            if (sign) {
                                break;
                            }
                        }
                    }
                }
            } catch (Exception e) {
                log.error("任务生成失败===》异常信息:{}", e.getMessage());
                try{
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "指令生成失败");
                } catch (Exception e2){
                }
            }
        }
    }
    public String rgvOtherTaskWrk(RgvSlave slave) {
        RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getOtherId());
        TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache();
        ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
        if (!allTaskProtocol.isEmpty()) {
            for (TaskProtocol taskProtocol : allTaskProtocol.values()) {
                if (taskProtocol.getTaskNo() != 0) {
                    return taskProtocol.getTaskNo().toString();
                }
            }
        }
        return "无";
    }
    public boolean rgvDetection(RgvSlave slave) {
        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
        if (rgvProtocol == null || rgvTaskProtocol == null) {
            return false;
        }
        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1
                || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
            return false;
        }
        if (rgvProtocol.getLoaded()==1){
            return false;
        }
        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
        RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
        if (rgvProtocolOther == null) {
            return false;
        }
        if (rgvProtocolOther.statusEnable) {
            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1 || rgvProtocolOther.getRgvPosDestination() == 0L) {
                return false;
            }
        }
        return true;
    }
    public boolean rgvOtherIDLEOther(RgvSlave slave) {
        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getOtherId());
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getOtherId());
        if (rgvProtocol == null || rgvTaskProtocol == null) {
            return false;
        }
        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1
                || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
            return false;
        }
        if (rgvProtocol.getLoaded()!=0) {
            return false;
        }
        return true;
    }
    public boolean rgvOtherIDLEOther2(RgvSlave slave) {
        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getOtherId());
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getOtherId());
        if (rgvProtocol == null || rgvTaskProtocol == null) {
            return false;
        }
        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO)
                || rgvProtocol.getRgvPos().equals(0L)
                || rgvTaskProtocol.getAvoid() == -1) {
            return false;
        }
        if (rgvProtocol.getLoaded()!=0) {
            return false;
        }
        return true;
    }
    public boolean rgvOtherIDLE(RgvSlave slave,Integer staNo) {
        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
        if (rgvProtocol == null || rgvTaskProtocol == null) {
            return false;
        }
        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1
                || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
            return false;
        }
        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
        if (rgvProtocolOther == null) {
            return true;
        }
        if (rgvProtocolOther.statusEnable) {
            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staNo));
            long abs = Math.abs(Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos())
                    -
                    Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos()));
            if (abs<100){
                return true;
            }
            if (Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos())
                    >=
                    Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos())){
                return false;
            }
        }
        return true;
    }
    public boolean rgvOtherIDLE2(RgvSlave slave,Integer staNo) {
        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
        if (rgvProtocol == null || rgvTaskProtocol == null) {
            return false;
        }
        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1
                || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
            return false;
        }
        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
        if (rgvProtocolOther == null) {
            return true;
        }
        if (rgvProtocolOther.statusEnable) {
            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staNo));
            long abs = Math.abs(Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos())
                    -
                    Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos()));
            if (abs<100){
                return true;
            }
            if (Math.abs(basDevpPosition.getPlcPosition()-rgvProtocol.getRgvPos())
                    >=
                    Math.abs(basDevpPosition.getPlcPosition()-rgvProtocolOther.getRgvPos())){
                return false;
            }
        }
        return true;
    }
    public TaskWrk deviceDetection(RgvSlave.RgvStn inSta) {
        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId());
        StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
        if (staProtocol == null) {
            return null;
        }
        // 判断是否满足取货条件
        if (!staProtocol.isPakMkTask()) {
            devpThread.setErrorDev(staProtocol.getSiteId(), "任务已下发等待小车取");
            return null;
        }
        // 判断是否满足取货条件
        if (staProtocol.isAutoing()
//                && staProtocol.isLoading()
//                && staProtocol.isStaOk()
                && staProtocol.getWorkNo() != 0) {
            TaskWrk taskWrk = taskWrkService.selectByWrkNo(staProtocol.getWorkNo());
            if (taskWrk != null) {
                Integer stano = staProtocol.getStaNo().intValue();
                if (staProtocol.getSiteId() == 1004 || staProtocol.getSiteId()==1020){
                    if (!staProtocol.isPakMkRun()) {
                        devpThread.setErrorDev(staProtocol.getSiteId(), "异常回退标记,需要回退");
                        return null;
                    }
                    if (!staProtocol.isLoading()) {
                        devpThread.setErrorDev(staProtocol.getSiteId(), "无物");
                        return null;
                    }
                    if (!staProtocol.isInEnable()) {
                        devpThread.setErrorDev(staProtocol.getSiteId(), "等待可入信号");
                        return null;
                    }
//                    if (!staProtocol.isStaOk()) {
//                        devpThread.setErrorDev(staProtocol.getSiteId(), "等待链条就绪");
//                        return null;
//                    }
//                    // 尺寸检测异常
//                    boolean back = false;
//                    String errMsg = "-";
//                    if (staProtocol.getGrossWt()>=600){
//                        errMsg = "超重:"+staProtocol.getGrossWt()+"kg";
                    // 尺寸检测异常
                    boolean back = false;
                    String errMsg = "-";
                    if (staProtocol.getGrossWt()>=600){
                        errMsg = "超重:"+staProtocol.getGrossWt()+"kg";
                        back = true;
                    }
                    if (staProtocol.isFrontErr()) {
                        if (!back){
                            errMsg = "前超限";
                        } else {
                            errMsg = errMsg+"---"+"前超限";
                        }
                        back = true;
                    }
                    if (staProtocol.isBackErr()) {
                        if (!back){
                            errMsg = "后超限";
                        } else {
                            errMsg = errMsg+"---"+"后超限";
                        }
                        back = true;
                    }
                    if (staProtocol.isHighErr()) {
                        if (!back){
                            errMsg = "高超限";
                        } else {
                            errMsg = errMsg+"---"+"高超限";
                        }
                        back = true;
                    }
                    if (staProtocol.isLeftErr()) {
                        if (!back){
                            errMsg = "左超限";
                        } else {
                            errMsg = errMsg+"---"+"左超限";
                        }
                        back = true;
                    }
                    if (staProtocol.isRightErr()) {
                        if (!back){
                            errMsg = "右超限";
                        } else {
                            errMsg = errMsg+"---"+"右超限";
                        }
                        back = true;
                    }
//                    if (!back && staProtocol.isWeightErr()) {
//                        errMsg = "超重";
//                        back = true;
//                    }
//                    if (staProtocol.isFrontErr()) {
//                        if (!back){
//                            errMsg = "前超限";
//                        } else {
//                            errMsg = errMsg+"---"+"前超限";
//                        }
//                        back = true;
//                    }
//                    if (staProtocol.isBackErr()) {
//                        if (!back){
//                            errMsg = "后超限";
//                        } else {
//                            errMsg = errMsg+"---"+"后超限";
//                        }
//                        back = true;
//                    }
//                    if (staProtocol.isHighErr()) {
//                        if (!back){
//                            errMsg = "高超限";
//                        } else {
//                            errMsg = errMsg+"---"+"高超限";
//                        }
//                        back = true;
//                    }
//                    if (staProtocol.isLeftErr()) {
//                        if (!back){
//                            errMsg = "左超限";
//                        } else {
//                            errMsg = errMsg+"---"+"左超限";
//                        }
//                        back = true;
//                    }
//                    if (staProtocol.isRightErr()) {
//                        if (!back){
//                            errMsg = "右超限";
//                        } else {
//                            errMsg = errMsg+"---"+"右超限";
//                        }
//                        back = true;
//                    }
////                    if (!back && staProtocol.isWeightErr()) {
////                        errMsg = "超重";
////                        back = true;
////                    }
//                    if (staProtocol.isBarcodeErr()) {
//                        if (!back){
//                            errMsg = "扫码失败";
//                        } else {
//                            errMsg = errMsg+"---"+"扫码失败";
//                        }
//                        back = true;
//                    }
//                    // 退回
//                    if (back) {
//                        if (stano.equals(staProtocol.getStaNo() + 1)) {
//                            return null;
//                        }
//                        if (!staProtocol.isPakMk()) {
//                            return null;
//                        }
//                        System.out.println("扫码入库失败,{"+inSta.getStaNo()+"}入库站因{"+errMsg+"}异常,托盘已被退回");
////                        News.warn("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg);
//                        staProtocol.setWorkNo(9999);
//                        staProtocol.setStaNo(staProtocol.getStaNo()+1);
//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
//                        devpThread.setPakMkRun(staProtocol.getSiteId(), false);
//                        devpThread.setPakMkTask(staProtocol.getSiteId(), false);
//                        devpThread.setErrorDev(staProtocol.getSiteId(), errMsg);
//                        MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
//                        try{
//                            taskWrk.setMemo(errMsg);//将错误码存入备注字段进行展示
//                            taskWrk.setModiTime(new Date());
//                            taskWrkMapper.updateById(taskWrk);
//                        } catch (Exception e){
//                            devpThread.setErrorDev(staProtocol.getSiteId(), errMsg+"异常信息保存工作档案失败!");
//                        }
//                        return null;
//                    }
//                }
//                return taskWrk;
                    if (staProtocol.isBarcodeErr()) {
                        if (!back){
                            errMsg = "扫码失败";
                        } else {
                            errMsg = errMsg+"---"+"扫码失败";
                        }
                        back = true;
                    }
                    // 退回
                    if (back) {
                        if (stano.equals(staProtocol.getStaNo() + 1)) {
                            return null;
                        }
                        if (!staProtocol.isPakMk()) {
                            return null;
                        }
                        System.out.println("扫码入库失败,{"+inSta.getStaNo()+"}入库站因{"+errMsg+"}异常,托盘已被退回");
//                        News.warn("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg);
                        staProtocol.setWorkNo(9999);
                        int staNoInt = staProtocol.getStaNo() + 1;
                        staProtocol.setStaNo((short)staNoInt);
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        devpThread.setPakMkRun(staProtocol.getSiteId(), false);
                        devpThread.setPakMkTask(staProtocol.getSiteId(), false);
                        devpThread.setErrorDev(staProtocol.getSiteId(), errMsg);
                        MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
                        try{
                            taskWrk.setMemo(errMsg);//将错误码存入备注字段进行展示
                            taskWrk.setModiTime(new Date());
                            taskWrkService.updateById(taskWrk);
                        } catch (Exception e){
                            devpThread.setErrorDev(staProtocol.getSiteId(), errMsg+"异常信息保存工作档案失败!");
                        }
                        return null;
                    }
                }
                return taskWrk;
            }
        } else if (staProtocol.isAutoing() && staProtocol.getWorkNo() == 0 && !staProtocol.isLoading()){
            if (inSta.isDirectionOther()){
                StaProtocol staProtocolOther = devpThread.getStation().get(inSta.getStaNoOther());
                if (staProtocolOther == null) {
                    return null;
                }
                // 判断是否满足取货条件
                if (staProtocolOther.isAutoing()
                        && staProtocolOther.getWorkNo() != 0) {
                    TaskWrk taskWrkOther = taskWrkService.selectByWrkNo(staProtocolOther.getWorkNo());
                    if (taskWrkOther != null) {
                        return taskWrkOther;
                    }
                }
            }
        }
        return null;
    }
    public boolean deviceDetection(RgvSlave.RgvStn inSta,Integer rgvNo) {
        ArrayList<Integer> arrayList = new ArrayList<Integer>() {{
            add(1009);
            add(1011);
            add(1012);
            add(1014);
            add(1016);
        }};
        try{
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId());
            ArrayList<Integer> listW = new ArrayList<Integer>();
            ArrayList<Integer> listL = new ArrayList<Integer>();
            for (Integer staNo : arrayList){
                StaProtocol staProtocol = devpThread.getStation().get(staNo);
                if (staProtocol == null) {
                    RgvErrCache.updateRgvErr(rgvNo,staNo+"站点数据丢失");
                    return false;
                }
                // 判断是否满足取货条件
                if (staProtocol.getWorkNo() != 0) {
                    if (!listW.contains(staProtocol.getWorkNo())) {
                        listW.add(staProtocol.getWorkNo());
                    }
                }
                // 判断是否满足取货条件
                if (staProtocol.isLoading()) {
                    if (!listL.contains(staProtocol.getStaNo().intValue())) {
                        listL.add(staProtocol.getStaNo().intValue());
                    }
                }
            }
            if (listW.size()>=3){
                RgvErrCache.updateRgvErr(rgvNo,"等待1012拣选,防止堵塞");
                return false;
            }
            if (listL.size()>=3){
                RgvErrCache.updateRgvErr(rgvNo,"等待1012拣选,防止堵塞");
                return false;
            }
        } catch (Exception e){
            RgvErrCache.updateRgvErr(rgvNo,"1012检测异常:"+e.getMessage());
            return false;
        }
        return true;
    }
    public boolean rgvOtherStatusEnable(RgvSlave slave) {
        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
        if (rgvProtocolOther == null) {
            return true;
        }
        if (rgvProtocolOther.statusEnable) {
//            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) {
            return true;
//            }
//        } else if (staProtocol.isAutoing() && staProtocol.getWorkNo() == 0 && !staProtocol.isLoading()){
//            if (inSta.isDirectionOther()){
//                StaProtocol staProtocolOther = devpThread.getStation().get(inSta.getStaNoOther());
//                if (staProtocolOther == null) {
//                    return null;
//                }
//                // 判断是否满足取货条件
//                if (staProtocolOther.isAutoing()
//                        && staProtocolOther.getWorkNo() != 0) {
//                    TaskWrk taskWrkOther = taskWrkService.selectByWrkNo(staProtocolOther.getWorkNo());
//                    if (taskWrkOther != null) {
//                        return taskWrkOther;
//                    }
//                }
//            }
//        }
//        return null;
//    }
//    public boolean deviceDetection(RgvSlave.RgvStn inSta,Integer rgvNo) {
//        ArrayList<Integer> arrayList = new ArrayList<Integer>() {{
//            add(1009);
//            add(1011);
//            add(1012);
//            add(1014);
//            add(1016);
//        }};
//        try{
//
//            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId());
//            ArrayList<Integer> listW = new ArrayList<Integer>();
//            ArrayList<Integer> listL = new ArrayList<Integer>();
//            for (Integer staNo : arrayList){
//                StaProtocol staProtocol = devpThread.getStation().get(staNo);
//                if (staProtocol == null) {
//                    RgvErrCache.updateRgvErr(rgvNo,staNo+"站点数据丢失");
//                    return false;
//                }
//                // 判断是否满足取货条件
//                if (staProtocol.getWorkNo() != 0) {
//                    if (!listW.contains(staProtocol.getWorkNo())) {
//                        listW.add(staProtocol.getWorkNo());
//                    }
//                }
//                // 判断是否满足取货条件
//                if (staProtocol.isLoading()) {
//                    if (!listL.contains(staProtocol.getStaNo())) {
//                        listL.add(staProtocol.getStaNo());
//                    }
//                }
//            }
//            if (listW.size()>=3){
//                RgvErrCache.updateRgvErr(rgvNo,"等待1012拣选,防止堵塞");
//                return false;
//            }
//            if (listL.size()>=3){
//                RgvErrCache.updateRgvErr(rgvNo,"等待1012拣选,防止堵塞");
//                return false;
//            }
//        } catch (Exception e){
//            RgvErrCache.updateRgvErr(rgvNo,"1012检测异常:"+e.getMessage());
//            return false;
//        }
//        return true;
//    }
//
//    public boolean rgvOtherStatusEnable(RgvSlave slave) {
//        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
//        if (rgvProtocolOther == null) {
//            return true;
//        }
//        if (rgvProtocolOther.statusEnable) {
////            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) {
//            return true;
////            }
//        }
//        return false;
//    }
//
//    public synchronized void taskStart() {
//        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
//            try {
//                if (rgvDetection(rgvSlave)) {
//                    String taskNoNow = rgvOtherTaskWrk(rgvSlave);
//                    List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("PLC_POSITION", true));
//                    boolean itSmall = new TrackRangeUtils().IsItSmall(rgvSlave);
//                    if (basDevpPositions.isEmpty()) {
//                        log.error("获取所有站点信息异常");
//                        try{
//                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
//                            deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "指令生成:获取所有站点信息异常");
//                        } catch (Exception e2){
//                        }
//                        continue;
//                    }
//                    List<TaskWrk> taskWrkList = new ArrayList<>();
//                    List<Integer> staList = new ArrayList<>();
//                    for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()) {
//                        TaskWrk taskWrk = deviceDetection(inSta);
//                        if (taskWrk != null) {
//                            if (taskWrk.getWrkNo().toString().equals(taskNoNow)) continue;
//                            taskWrkList.add(taskWrk);
//                            staList.add(inSta.getStaNo());
//                        }
//                    }
//
//                    if (taskWrkList.isEmpty() || staList.isEmpty()) continue;
//
//                    boolean sign = false;
//
//                    if (rgvOtherStatusEnable(rgvSlave)) {
//                        //分成上下两部分任务
//                        List<Integer>[] avoidRange = RouteUtils.gradeRange(staList, basDevpPositions, itSmall);
//                        List<Integer> rangeListSou = avoidRange[itSmall ? 0 : 1];
//                        List<Integer> rangeListSouOther = avoidRange[itSmall ? 1 : 0];
//                        //就近排序
//                        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
//                        List<Integer> rangeList = RouteUtils.SortNearby(rangeListSou, rgvProtocol.RgvPos, basDevpPositions);
//                        List<Integer> rangeListOther = RouteUtils.SortNearby(rangeListSouOther, rgvProtocol.RgvPos, basDevpPositions);
//
//                        //所属部分就进取货
//
//                        //筛选范围内任务
//                        //就近排序
//                        //筛选在范围任务
//                        Long[][] avoidedRange = new TrackRangeUtils().avoidRangeArr(rgvSlave, trackEntireLength, trackBenchmark, avoidDistance);
//                        List<Integer> belongToRange = RouteUtils.SortNearby(RouteUtils.belongToRange(rangeList, avoidedRange[0], basDevpPositions), rgvProtocol.RgvPos, basDevpPositions);
//
//                        if (!sign && staList.size()==1){
//                            if (rgvOtherIDLEOther(rgvSlave)){
//                                if (!rgvOtherIDLE(rgvSlave,staList.get(0))){
//                                    System.out.println("空闲就近跳过==="+rgvSlave.getId()+"===");
//                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"空闲就近跳过");
//
//                                    sign=true;
//                                }
//                            }
//                            if (sign){
//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                    if (rgvStn.getStaNo().equals(staList.get(0))) {
//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
//                                        if (taskWrk != null) {
//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
//                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
//                                                if (rgvSuper.getStaNo().equals(outStaNo)){
//                                                    System.out.println("空闲就近跳过后因最远再次执行==="+rgvSlave.getId()+"===");
//
//                                                    sign=false;
//                                                    break;
//                                                }
//                                            }
//                                        } else {
//                                            return;
//                                        }
//                                        break;
//                                    }
//                                }
//                            }
//                        }
//
//                        if(!sign){
//                            for (Integer staNoNow : belongToRange) {
//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
//                                        if (taskWrk != null) {
//                                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
//                                            if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
//                                                System.out.println("全范围执行==="+rgvSlave.getId()+"==="+taskWrk);
//                                                System.out.println("全范围执行==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
//
//                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
//                                            }
//                                        }
//                                        break;
//                                    }
//                                }
//                                if (sign) {
//                                    break;
//                                }
//                            }
//                        }
//                        if (!sign) {
//                            //  筛选范围内取货任务
//                            for (Integer staNoNow : belongToRange) {
//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
//                                        if (taskWrk != null) {
//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
//                                            for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
//                                                if (rgvStnOut.getStaNo().equals(outStaNo)) {
//                                                    System.out.println("筛选范围内取货任务==="+rgvSlave.getId()+"==="+taskWrk);
//                                                    System.out.println("筛选范围内取货任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
//
//                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
//                                                    break;
//                                                }
//                                            }
//                                        }
//                                        break;
//                                    }
//                                }
//                                if (sign) {
//                                    break;
//                                }
//                            }
//                        }
//
//                        if (!sign && staList.size()==1){
//                            if (rgvOtherIDLEOther2(rgvSlave)){
//                                if (!rgvOtherIDLE2(rgvSlave,staList.get(0))){
//                                    System.out.println("运行就近跳过==="+rgvSlave.getId()+"===");
//                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"运行就近跳过");
//
//                                    sign=true;
//                                }
//                            }
//                            if (sign){
//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                    if (rgvStn.getStaNo().equals(staList.get(0))) {
//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
//                                        if (taskWrk != null) {
//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
//                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
//                                                if (rgvSuper.getStaNo().equals(outStaNo)){
//                                                    System.out.println("运行就近跳过后因最远再次执行==="+rgvSlave.getId()+"===");
//
//                                                    sign=false;
//                                                    break;
//                                                }
//                                            }
//                                        } else {
//                                            return;
//                                        }
//                                        break;
//                                    }
//                                }
//                            }
//                        }
//
//
//
//                        if (!sign && staList.size()>1) {
//                            for (Integer staNoNow : rangeList) {
//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
//                                        if (taskWrk != null) {
//                                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
//                                            if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
//                                                System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+taskWrk);
//                                                System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
//
//                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
//                                            }
//                                        }
//                                        break;
//                                    }
//                                }
//                                if (sign) {
//                                    break;
//                                }
//                            }
//                        }else if (!sign && staList.size()==1){
//                            BasDevpPosition basDevpPosition1 = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staList.get(0)));
//                            if (Math.abs(basDevpPosition1.getPlcPosition()- rgvProtocol.getRgvPos())<rgvProtocol.getCarBodyJiaoMing()+rgvProtocol.getCarBodyKunPeng() + avoidDistance*2){
//                                for (Integer staNoNow : rangeList) {
//                                    for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                        if (rgvStn.getStaNo().equals(staNoNow)) {
//                                            TaskWrk taskWrk = deviceDetection(rgvStn);
//                                            if (taskWrk != null) {
//                                                BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
//                                                if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
//                                                    System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+taskWrk);
//                                                    System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
//
//                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
//                                                }
//                                            }
//                                            break;
//                                        }
//                                    }
//                                    if (sign) {
//                                        break;
//                                    }
//                                }
//                            }
//                        }
//
//
//
//                        if (!sign && staList.size()>1) {
//                            //  半边区域内取货任务
//                            for (Integer staNoNow : rangeList) {
//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
//                                        if (taskWrk != null) {
//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
//                                            for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
//                                                if (rgvStnOut.getStaNo().equals(outStaNo)) {
//                                                    System.out.println("筛选半边范围取货任务==="+rgvSlave.getId()+"==="+taskWrk);
//                                                    System.out.println("筛选半边范围取货任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
//
//                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
//                                                    break;
//                                                }
//                                            }
//                                        }
//                                        break;
//                                    }
//                                }
//                                if (sign) {
//                                    break;
//                                }
//                            }
//                        }
//                        if (!sign && staList.size()>1) {
//                            for (Integer staNoNow : rangeListOther) {
//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
//                                        if (taskWrk != null) {
//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
//                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
//                                                if (rgvSuper.getStaNo().equals(outStaNo)){
//                                                    System.out.println("因最远执行半边区域内放货任务==="+rgvSlave.getId()+"===");
//                                                    BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
//                                                    if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
//                                                        sign = taskGenerate(rgvSlave, rgvStn, 0);
//                                                    }
//                                                    break;
//                                                }
//                                            }
//                                        }
//                                        break;
//                                    }
//                                    if (sign) {
//                                        break;
//                                    }
//                                }
//                                if (sign) {
//                                    break;
//                                }
//                            }
//
//                        }else if (!sign && staList.size()==1){
//                            for (Integer staNoNow : rangeList) {
//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
//                                        if (taskWrk != null) {
//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
//                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
//                                                if (rgvSuper.getStaNo().equals(outStaNo)){
//                                                    System.out.println("因最远执行半边区域内放货任务==="+rgvSlave.getId()+"===");
//                                                    BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
//                                                    if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
//                                                        sign = taskGenerate(rgvSlave, rgvStn, 0);
//                                                    }
//                                                    break;
//                                                }
//                                            }
//                                        }
//                                        break;
//                                    }
//                                    if (sign) {
//                                        break;
//                                    }
//                                }
//                                if (sign) {
//                                    break;
//                                }
//                            }
//
//                        }
//                        RgvErrCache.updateRgvErr(rgvSlave.getId(),"未查询到可执行任务");
//
//                    } else {
//                        //可用区域就近取货
//                        //就近排序
//                        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
//                        List<Integer> rangeList = RouteUtils.SortNearby(staList, rgvProtocol.RgvPos, basDevpPositions);
//                        //  半边区域内取货任务
//                        for (Integer staNoNow : rangeList) {
//                            for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                if (rgvStn.getStaNo().equals(staNoNow)) {
//                                    TaskWrk taskWrk = deviceDetection(rgvStn);
//                                    if (taskWrk != null) {
//                                        Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
//                                        for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
//                                            if (rgvStnOut.getStaNo().equals(outStaNo)) {
//                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
//                                                break;
//                                            }
//                                        }
//                                    }
//                                    break;
//                                }
//                            }
//                            if (sign) {
//                                break;
//                            }
//                        }
//                    }
//                }
//            } catch (Exception e) {
//                log.error("任务生成失败===》异常信息:{}", e.getMessage());
//                try{
//                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
//                    deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "指令生成失败");
//                } catch (Exception e2){
//                }
//            }
//        }
//    }
//
//
//    public boolean taskGenerate(RgvSlave rgvSlave, RgvSlave.RgvStn rgvStn, Integer sign) {
//        try {
//            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
//            TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache();
//            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId());
//
//            TaskProtocol issuedTake = new TaskProtocol();
//            TaskProtocol issuedPut = new TaskProtocol();
//            try {
//                ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
//                if (allTaskProtocol.size() > 0) {
//                    return false;
//                }
//                TaskWrk taskWrk = deviceDetection(rgvStn);
//                if (taskWrk == null) {
//                    return false;
//                }
////                Integer targetPointConvert = taskWrk.getTargetPointConvert();
//                Integer targetPointConvert = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
//                if (targetPointConvert == null) {
//                    return false;
//                }
//                if (targetPointConvert == 1009){
//                    if (!deviceDetection(rgvStn, rgvSlave.getId())){
//                        return false;
//                    }
//                }
//                try{
//                    devpThread.setPakMkTask(rgvStn.getStaNo(), false);
//                } catch (Exception e2){
//                    RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"小车任务下发标记更新失败");
//                }
//
//
//                BasDevpPosition basDevpPositionSou = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStn.getStaNo()));
//                BasDevpPosition basDevpPositionEnd = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", targetPointConvert));
//                //执行
//                issuedTake.setTaskNo(Long.valueOf(taskWrk.getWrkNo()));
//                issuedTake.setTaskStatus(2);
//                issuedTake.setTargetPositionStaNo(basDevpPositionSou.getDevNo());
//                issuedTake.setTargetPositionStaNoPlcId(basDevpPositionSou.getPlcId());
//                issuedTake.setTaskNoDirection(issuedTake.gettaskNoDirection$(issuedTake.getTaskNo(), issuedTake.getTaskStatus()));
//                issuedTake.setTargetPosition(basDevpPositionSou.getPlcPosition());
//                issuedTake.setIsRunning(1);
//                issuedTake.setDirection(basDevpPositionSou.getRgvSign()==1);
//
//
//                issuedPut.setTaskNo(Long.valueOf(taskWrk.getWrkNo()));
//                issuedPut.setTaskStatus(3);
//                issuedPut.setTargetPositionStaNo(basDevpPositionEnd.getDevNo());
//                issuedPut.setTargetPositionStaNoPlcId(basDevpPositionEnd.getPlcId());
//                issuedPut.setTaskNoDirection(issuedPut.gettaskNoDirection$(issuedPut.getTaskNo(), issuedPut.getTaskStatus()));
//                issuedPut.setTargetPosition(basDevpPositionEnd.getPlcPosition());
//                issuedPut.setIsRunning(1);
//                issuedPut.setDirection(basDevpPositionEnd.getRgvSign()==1);
//
//                try{
//                    if (taskWrk.getIoType()==2 && basDevpPositionEnd.getRgvSign()==1){
//                        Date now = new Date();
//                        taskWrk.setStatus(TaskStatusType.OVER.id);
//                        taskWrk.setModiTime(now);//更新时间
//                        taskWrk.setCompleteTime(now);//完结时间
//                        taskWrkService.updateById(taskWrk);
//                    }
//                } catch (Exception e){
//
//                }
//            } catch (Exception e) {
//                log.error("任务生成失败issued1===》异常信息:{}", e.getMessage());
//                RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"站点任务生成失败issued1");
//
//                try{
//                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
//                    deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "任务生成失败issued1");
//                } catch (Exception e2){
//                }
//                return false;
//            }
//
//            switch (sign) {
//                case 1:
//                    taskProtocolCache.updateTaskProtocol(issuedTake);
//                    break;
//                case 2:
//                    taskProtocolCache.updateTaskProtocol(issuedPut);
//                    break;
//                default:
//                    taskProtocolCache.updateTaskProtocol(issuedTake);
//                    taskProtocolCache.updateTaskProtocol(issuedPut);
//                    break;
//            }
//        } catch (Exception e) {
//            log.error("任务生成失败issued2===》异常信息:{}", e.getMessage());
//            RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"站点任务生成失败issued2");
//
//            try{
//                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
//                deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "站点任务生成失败issued2");
//            } catch (Exception e2){
//            }
//        }
//        return true;
//    }
        }
        return false;
    }
    public boolean taskGenerate(RgvSlave rgvSlave, RgvSlave.RgvStn rgvStn, Integer sign) {
        try {
            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
            TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache();
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId());
            TaskProtocol issuedTake = new TaskProtocol();
            TaskProtocol issuedPut = new TaskProtocol();
            try {
                ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
                if (allTaskProtocol.size() > 0) {
                    return false;
                }
                TaskWrk taskWrk = deviceDetection(rgvStn);
                if (taskWrk == null) {
                    return false;
                }
//                Integer targetPointConvert = taskWrk.getTargetPointConvert();
                Integer targetPointConvert = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                if (targetPointConvert == null) {
                    return false;
                }
                if (targetPointConvert == 1009){
                    if (!deviceDetection(rgvStn, rgvSlave.getId())){
                        return false;
                    }
                }
                try{
                    devpThread.setPakMkTask(rgvStn.getStaNo(), false);
                } catch (Exception e2){
                    RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"小车任务下发标记更新失败");
                }
                BasDevpPosition basDevpPositionSou = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStn.getStaNo()));
                BasDevpPosition basDevpPositionEnd = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", targetPointConvert));
                //执行
                issuedTake.setTaskNo(Long.valueOf(taskWrk.getWrkNo()));
                issuedTake.setTaskStatus(2);
                issuedTake.setTargetPositionStaNo(basDevpPositionSou.getDevNo());
                issuedTake.setTargetPositionStaNoPlcId(basDevpPositionSou.getPlcId());
                issuedTake.setTaskNoDirection(issuedTake.gettaskNoDirection$(issuedTake.getTaskNo(), issuedTake.getTaskStatus()));
                issuedTake.setTargetPosition(basDevpPositionSou.getPlcPosition());
                issuedTake.setIsRunning(1);
                issuedTake.setDirection(basDevpPositionSou.getRgvSign()==1);
                issuedPut.setTaskNo(Long.valueOf(taskWrk.getWrkNo()));
                issuedPut.setTaskStatus(3);
                issuedPut.setTargetPositionStaNo(basDevpPositionEnd.getDevNo());
                issuedPut.setTargetPositionStaNoPlcId(basDevpPositionEnd.getPlcId());
                issuedPut.setTaskNoDirection(issuedPut.gettaskNoDirection$(issuedPut.getTaskNo(), issuedPut.getTaskStatus()));
                issuedPut.setTargetPosition(basDevpPositionEnd.getPlcPosition());
                issuedPut.setIsRunning(1);
                issuedPut.setDirection(basDevpPositionEnd.getRgvSign()==1);
                try{
                    if (taskWrk.getIoType()==2 && basDevpPositionEnd.getRgvSign()==1){
                        Date now = new Date();
                        taskWrk.setStatus(TaskStatusType.OVER.id);
                        taskWrk.setModiTime(now);//更新时间
                        taskWrk.setCompleteTime(now);//完结时间
                        taskWrkService.updateById(taskWrk);
                    }
                } catch (Exception e){
                }
            } catch (Exception e) {
                log.error("任务生成失败issued1===》异常信息:{}", e.getMessage());
                RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"站点任务生成失败issued1");
                try{
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "任务生成失败issued1");
                } catch (Exception e2){
                }
                return false;
            }
            switch (sign) {
                case 1:
                    taskProtocolCache.updateTaskProtocol(issuedTake);
                    break;
                case 2:
                    taskProtocolCache.updateTaskProtocol(issuedPut);
                    break;
                default:
                    taskProtocolCache.updateTaskProtocol(issuedTake);
                    taskProtocolCache.updateTaskProtocol(issuedPut);
                    break;
            }
        } catch (Exception e) {
            log.error("任务生成失败issued2===》异常信息:{}", e.getMessage());
            RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"站点任务生成失败issued2");
            try{
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "站点任务生成失败issued2");
            } catch (Exception e2){
            }
        }
        return true;
    }
}
src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java
@@ -9,4 +9,8 @@
@Service("taskWrkService")
public class TaskWrkServiceImpl extends ServiceImpl<TaskWrkMapper, TaskWrk> implements TaskWrkService {
    @Override
    public TaskWrk selectByWrkNo(Integer wrkNo) {
        return this.baseMapper.selectByWrkNo(wrkNo);
    }
}
src/main/java/com/zy/asrs/utils/RouteRgvUtils.java
New file
@@ -0,0 +1,183 @@
package com.zy.asrs.utils;
import com.zy.asrs.entity.BasDevpPosition;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
 * Created by Monkey D. Luffy on 2023/7/18
 */
public class RouteRgvUtils {
    //排序  执行方向(面朝轨道 定位值左小右大)  0:左 小   1:右 大
    public static List<Integer>[] gradeRange(List<Integer> staNoList, List<BasDevpPosition> basDevpPositionList, boolean itSmall) {
        List<Integer>[] avoidRangeArray = new ArrayList[2];
        Integer[] rangeList = new Integer[staNoList.size()];
        List<Integer> rangeList1 = new ArrayList<>();
        List<Integer> rangeList2 = new ArrayList<>();
        int i = 0;
        for (BasDevpPosition basDevpPosition : basDevpPositionList) {
            for (Integer staNo : staNoList) {
                if (basDevpPosition.getDevNo().equals(staNo)) {
                    rangeList[i] = staNo;
                    i = i + 1;
                    break;
                }
            }
        }
        boolean sign = true;
        for (int j = 0; j < rangeList.length; j++) {
            if (itSmall) {
                if (sign) {
                    rangeList1.add(rangeList[j]);
                } else {
                    rangeList2.add(rangeList[j]);
                }
                if (sign && j >= rangeList.length / 2) {
                    sign = false;
                }
            } else {
                if (sign && j >= rangeList.length / 2) {
                    sign = false;
                }
                if (sign) {
                    rangeList1.add(rangeList[j]);
                } else {
                    rangeList2.add(rangeList[j]);
                }
            }
        }
        avoidRangeArray[0] = rangeList1;
        avoidRangeArray[1] = rangeList2;
        return avoidRangeArray;
    }
    //获取在范围的站点
    public static List<Integer> belongToRange(List<Integer> staNoList, Long[] avoid, List<BasDevpPosition> basDevpPositions) {
        List<Integer> siteList = new ArrayList<>();
        for (BasDevpPosition basDevpPosition : basDevpPositions) {
            if (new TrackRangeUtils().avoidRange(basDevpPosition.getPlcPosition(), avoid)) {
                for (Integer staNo : staNoList) {
                    if (basDevpPosition.getDevNo().equals(staNo)) {
                        siteList.add(staNo);
                        break;
                    }
                }
            }
        }
        return siteList;
    }
    //提取站点集合
    public static List<Integer> BasDevpPositionExtractSites(List<BasDevpPosition> basDevpPositions) {
        List<Integer> siteList = new ArrayList<>();
        for (BasDevpPosition basDevpPosition : basDevpPositions) {
            if (!siteList.contains(basDevpPosition.getDevNo())) {
                siteList.add(basDevpPosition.getDevNo());
            }
        }
        return siteList;
    }
    //提取站点集合//就近排序
    public static List<Integer> SortNearby(List<Integer> staNoList, Long rgvNowPos, List<BasDevpPosition> basDevpPositionList) {
        List<Integer> siteList = new ArrayList<>();
        List<BasDevpPosition> basDevpPositions = devpNoSort(basDevpPositionList, rgvNowPos);
        for (BasDevpPosition basDevpPosition : basDevpPositions) {
            for (Integer staNo : staNoList) {
                if (basDevpPosition.getDevNo().equals(staNo)) {
                    siteList.add(staNo);
                    break;
                }
            }
        }
        return siteList;
    }
    //站点过滤
    public static List<BasDevpPosition> devpNoSort(List<BasDevpPosition> devpPositionList, Long rgvNowPos) {
        List<BasDevpPosition> basDevpPositions = new ArrayList<>();
        List<BasDevpPosition> basDevpPositionSort = new ArrayList<>();
        ArrayList<Long> arrayList = new ArrayList<>();
        for (BasDevpPosition basDevpPosition : devpPositionList) {
            long position = Math.abs(basDevpPosition.getPlcPosition() - rgvNowPos);
            BasDevpPosition devpPosition = new BasDevpPosition(basDevpPosition, position);
            basDevpPositions.add(devpPosition);
            arrayList.add(position);
        }
        Collections.sort(arrayList); // 升序排序
        for (Long position : arrayList) {
            for (BasDevpPosition basDevpPosition : basDevpPositions) {
                if (basDevpPosition.getPlcPosition().equals(position)) {
                    basDevpPositionSort.add(basDevpPosition);
                    basDevpPositions.remove(basDevpPosition);
                    break;
                }
            }
        }
        return basDevpPositionSort;
    }
    //检测是否在范围
    public static boolean CheckIfItIsWithinTheRange(List<Integer> staNoList, Long staNoNowPos, List<BasDevpPosition> basDevpPositionList, boolean itSmall) {
        List<Integer> siteList = new ArrayList<>();
        Long maxOrMin = 0L;
        Integer[] rangeList = new Integer[staNoList.size()];
        int i = 0;
        for (BasDevpPosition basDevpPosition : basDevpPositionList) {
            for (Integer staNo : staNoList) {
                if (basDevpPosition.getDevNo().equals(staNo)) {
                    rangeList[i] = staNo;
                    i = i + 1;
                    break;
                }
            }
        }
        if (itSmall) {
            for (BasDevpPosition basDevpPosition : basDevpPositionList) {
                if (basDevpPosition.getDevNo().equals(rangeList[rangeList.length - 1])) {
                    maxOrMin = basDevpPosition.getPlcPosition();
                    break;
                }
            }
            if (maxOrMin == 0){
                return false;
            }
            return staNoNowPos <= maxOrMin+50;
        }
        for (BasDevpPosition basDevpPosition : basDevpPositionList) {
            if (basDevpPosition.getDevNo().equals(rangeList[0])) {
                maxOrMin = basDevpPosition.getPlcPosition();
                break;
            }
        }
        if (maxOrMin == 0){
            return false;
        }
        return staNoNowPos >= maxOrMin-50;
    }
    public static long absoluteDifference(Long a, Long b) {
        if (a == null || b == null) {
            a = 0L;
            b = 0L;
//            throw new IllegalArgumentException("");
            System.out.println("a or b is null");
        }
        return Math.abs(a - b);
    }
}
src/main/java/com/zy/core/MainProcess.java
@@ -103,7 +103,7 @@
                    continue;
                }
                // 任务下发
//                mainService.taskStart();
                mainService.taskStart();
            } catch (Exception e) {
                e.printStackTrace();
src/main/resources/application.yml
@@ -38,6 +38,7 @@
  enable: false
wms:
  rgvOpen: false
  url: 127.0.0.1:8081/zzgtasrs
  comb: mobile/combAuto/wcs/auth
@@ -49,6 +50,16 @@
  licensePath: license.lic
  publicKeysStorePath: publicCerts.keystore
constant-parameters:
  # 轨道总长
  trackEntireLength: 224000
  # 轨道基准点
  trackBenchmark: 1
  # 轨道转换为米比例
  trackProportion: 10000
  # 避让距离
  avoidDistance: 4000
inventory:
  number: 7
src/main/resources/mapper/TaskWrkMapper.xml
@@ -30,4 +30,10 @@
    </resultMap>
    <select id="selectByWrkNo" resultMap="BaseResultMap">
        select top 1 * from wcs_task_wrk
        where 1=1
          and "wrk_no" = #{wrkNo}
    </select>
</mapper>