pang.jiabao
2025-05-15 385a7a63f86903b74c4a878ab22b69a63a8f5e54
外置输送线wms通知输送线流动
3个文件已修改
1个文件已添加
601 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 286 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/param/ApplyInDevpDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OpenService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 277 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -2,15 +2,14 @@
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.annotations.AppAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.domain.param.ApplyInDevpDto;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.CrnStatusParam;
import com.zy.asrs.entity.param.TaskCreateParam;
import com.zy.asrs.entity.param.TaskOverParam;
import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam;
import com.zy.asrs.service.*;
import com.zy.common.web.BaseController;
@@ -20,11 +19,8 @@
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@RestController
@@ -55,55 +51,6 @@
    private LocMastService locMastService;
    @Autowired
    private BasCrnErrorService basCrnErrorService;
    public static <T> List<T> convertListMapToListObject(List<HashMap<String, Object>> listMap, Class<T> clazz) throws Exception {
        List<T> list = new ArrayList<>();
        for (Map<String, Object> map : listMap) {
            T obj = clazz.getDeclaredConstructor().newInstance();
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                String key = entry.getKey();
                Object value = entry.getValue();
                try {
                    Field field = clazz.getDeclaredField(key);
                    field.setAccessible(true);
                    setFieldValue(obj, field, value);
                } catch (NoSuchFieldException e) {
                    System.out.println("No such field: " + key + " in class " + clazz.getName());
                }
            }
            list.add(obj);
        }
        return list;
    }
    private static void setFieldValue(Object obj, Field field, Object value) throws IllegalAccessException {
        Class<?> fieldType = field.getType();
        if (fieldType.isAssignableFrom(value.getClass())) {
            field.set(obj, value);
        } else if (fieldType == int.class || fieldType == Integer.class) {
            field.set(obj, ((Number) value).intValue());
        } else if (fieldType == long.class || fieldType == Long.class) {
            field.set(obj, ((Number) value).longValue());
        } else if (fieldType == double.class || fieldType == Double.class) {
            field.set(obj, ((Number) value).doubleValue());
        } else if (fieldType == float.class || fieldType == Float.class) {
            field.set(obj, ((Number) value).floatValue());
        } else if (fieldType == boolean.class || fieldType == Boolean.class) {
            field.set(obj, (Boolean) value);
        } else if (fieldType == String.class) {
            field.set(obj, String.valueOf(value));
        } else {
            System.out.println("Unsupported field type: " + fieldType.getName());
        }
    }
    //创建任务
    @PostMapping("/taskCreate")
@@ -247,45 +194,6 @@
        return R.ok(crnStatusParams);
    }
    //取放货申请
    @PostMapping("/pick/and/place/v1")
    @AppAuth(memo = "agv取放货申请")
    public R getAgvPickAndPlaceV1(@RequestHeader String appkey,
                                  @RequestBody TaskOverParam param,
                                  HttpServletRequest request) {
        auth(appkey, param, request);
        if (Cools.isEmpty(param)) {
            return R.parse(BaseRes.PARAM);
        }
        if (Cools.isEmpty(param.getStartPoint())) {
            return R.error("码头[staNo]不能为空");
        }
        if (Cools.isEmpty(param.getType())) {
            return R.error("类型[type]不能为空");
        }
        return openService.getAgvPickAndPlaceV1(param);
    }
    //取放货完成反馈
    @PostMapping("/pick/and/place/v2")
    @AppAuth(memo = "agv取放货完成反馈")
    public R getAgvPickAndPlaceV2(@RequestHeader String appkey,
                                  @RequestBody TaskOverParam param,
                                  HttpServletRequest request) {
        auth(appkey, param, request);
        if (Cools.isEmpty(param)) {
            return R.parse(BaseRes.PARAM);
        }
        if (Cools.isEmpty(param.getStartPoint())) {
            return R.error("码头[staNo]不能为空");
        }
        if (Cools.isEmpty(param.getType())) {
            return R.error("类型[type]不能为空");
        }
        return openService.getAgvPickAndPlaceV2(param);
    }
    private void auth(String appkey, Object obj, HttpServletRequest request) {
        log.info("{}接口被访问;appkey:{};请求数据:{}", request.getServletPath(), appkey, JSON.toJSONString(obj));
        request.setAttribute("cache", obj);
@@ -314,6 +222,7 @@
    @GetMapping("/queryTaskCommand")
    public R queryTaskCommand(@RequestHeader String appkey,
                              @RequestParam String taskNo,
                              HttpServletRequest request) {
        auth(appkey, taskNo, request);
        TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo);
@@ -325,188 +234,13 @@
        return R.ok().add(commandInfos);
    }
    // 外置输送线wms通知输送线流动,上报时候上报站点即可
    @PostMapping("/applyInDevp")
    public R applyInDevp(@RequestHeader String appkey,
                         @RequestBody ApplyInDevpDto param,
                         HttpServletRequest request) {
        auth(appkey, param, request);
        return openService.applyInDevp(param);
    }
    //任务下发接口
//    @PostMapping("/outboundTaskSend")
//    @Transactional
//    public HashMap<String, Object> outboundTaskSend(@RequestBody List<CarryParam> params) {
//        HashMap<String, Object> map = new HashMap<>();
//        for (CarryParam param : params) {
//            if (Cools.isEmpty(param)) {
//                map.put("Code", "0");
//                map.put("Msg", "参数为空!");
//                return map;
//            } else if (Cools.isEmpty(param.getTaskNo())) {
//                map.put("Code", "0");
//                map.put("Msg", "任务号为空!");
//                return map;
//            } else if (Cools.isEmpty(param.getStereoscopicTaskType())) {
//                map.put("Code", "0");
//                map.put("Msg", "任务类型为空!");
//                return map;
//            }
//            String fusion = Utils.Fusion(param.getOriginalRowNo(), param.getOriginalFloorNo(), param.getOriginalColumnNo());
//            param.setStartPoint(fusion);
//            LocMast locMast = locMastService.selectByLocNo(param.getStartPoint());
//            if (Cools.isEmpty(locMast)) {
//                map.put("Code", "0");
//                map.put("Msg", "初始库位无法找到!");
//                return map;
//            }
//
//            HashMap<String, Object> r = new HashMap<>();
//
//            if (param.getStereoscopicTaskType() == 2) {
//                //出库任务创建
//                StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
//                        .eq("type_no", 2)
//                        .eq("crn_no", locMast.getCrnNo())
//                        .eq("stn_no", param.getTerminalNo()));
//                if (Cools.isEmpty(staDesc)) {
//                    map.put("Code", "0");
//                    map.put("Msg", "出库路径不存在!");
//                    return map;
//                }
//                r = openService.taskCreate(new TaskCreateParam(param, staDesc.getCrnNo()));
//                if (r.get("Code").equals("0")) {
//                    return r;
//                }
//            } else if (param.getStereoscopicTaskType() == 3) {
//                String fusion1 = Utils.Fusion(param.getGoalRowNo(), param.getGoalFloorNo(), param.getGoalColumnNo());
//                param.setTerminalNo(fusion1);
//                //移库任务创建
//                r = openService.taskCreate(new TaskCreateParam(param, locMast.getCrnNo()));
//                if (r.get("Code").equals("0")) {
//                    return r;
//                }
//            }
//            apiLogService.save("Wms任务下发接口"
//                    , request.getRemoteAddr() + request.getRequestURI()
//                    , ""
//                    , request.getRemoteAddr()
//                    , JSON.toJSONString(param)
//                    , r.toString()
//                    , true
//            );
//        }
//        map.put("Code", "1");
//        map.put("Msg", "ok");
//        return map;
//    }
    //AGV请求入库码头接口
//    @PostMapping("/targetWharfApply")
//    @AppAuth(memo = "AGV请求入库码头接口")
//    public R targetWharfApply(@RequestHeader String appkey,
//                              @RequestBody WMSAndAGVInterfaceParam param,
//                              HttpServletRequest request) throws IOException {
//        auth(appkey, param, request);
//
//        if (Cools.isEmpty(param)) {
//            return R.error("参数为空!");
//        } else if (Cools.isEmpty(param.getTaskNo())) {
//            return R.error("工作号为空!");
//        } else if (Cools.isEmpty(param.getContainerCode())) {
//            return R.error("托盘编码为空!");
//        } else if (Cools.isEmpty(param.getWharfSource())) {
//            return R.error("源码头为空!");
//        } else if (Cools.isEmpty(param.getFreeWharfs()) || param.getFreeWharfs().size() == 0) {
//            return R.error("空闲的入库码头(AGV)为空!");
//        }
//        R r = openService.AgvToWCSToWms(param);
//        apiLogService.save("AGV请求入库码头接口"
//                , request.getRemoteAddr() + request.getRequestURI()
//                , appkey
//                , request.getRemoteAddr()
//                , JSON.toJSONString(param)
//                , r.toString()
//                , true
//        );
//        return r;
//    }
//
//    //AGV请求动作接口
//    @PostMapping("/agvTaskRequest")
//    @AppAuth(memo = "AGV请求动作接口")
//    public R agvTaskRequest(@RequestHeader String appkey,
//                            @RequestBody WMSAndAGVInterfaceParam param,
//                            HttpServletRequest request) {
//        auth(appkey, param, request);
//        if (Cools.isEmpty(param)) {
//            return R.error("参数为空!");
//        } else if (Cools.isEmpty(param.getRequestType())) {
//            return R.error("请求类型为空!");
//        } else if (Cools.isEmpty(param.getWharfCode())) {
//            return R.error("码头编号为空!");
//        }
//
//        Map<String, Integer> map = new HashMap<>();
//        map.put("J-1102", 102);
//        map.put("J-1101", 101);
//        map.put("J-1103", 105);
//        map.put("J-1104", 106);
//        map.put("J-1105", 109);
//        map.put("J-1106", 110);
//        map.put("J-1107", 113);
//        map.put("J-1108", 114);
//        map.put("J-1109", 117);
//        map.put("J-1110", 118);
//        map.put("J-1111", 121);
//        map.put("J-1112", 122);
//        map.put("H-1102", 300);
//        map.put("H-1101", 305);
//        map.put("G-1102", 400);
//        map.put("G-1101", 405);
////        StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
////                .eq("stn_desc", param.getWharfCode()));
////
////        if (Cools.isEmpty(staDesc)){
////            return R.error("程序报错,未查询到站点");
////        }
//        if (Cools.isEmpty(map.get(param.getWharfCode()))) {
//            return R.error("未查询到站点");
//        }
//        BasDevp basDevp = basDevpService.selectById(map.get(param.getWharfCode()));
//        if (basDevp.getAutoing().equals("Y") && (basDevp.getInEnable().equals("Y") || basDevp.getOutEnable().equals("Y"))) {
//            apiLogService.save("AGV请求入库码头接口"
//                    , request.getRemoteAddr() + request.getRequestURI()
//                    , appkey
//                    , request.getRemoteAddr()
//                    , JSON.toJSONString(param)
//                    , R.ok().toString()
//                    , true
//            );
//            return R.ok("可入");
//        } else {
//            apiLogService.save("AGV请求入库码头接口"
//                    , request.getRemoteAddr() + request.getRequestURI()
//                    , appkey
//                    , request.getRemoteAddr()
//                    , JSON.toJSONString(param)
//                    , R.error("站点状态不可入").toString()
//                    , true
//            );
//            return R.error("站点状态不可入");
//        }
//
//
//    }
//    @PostMapping("/toAgvTaskOver")
//    @AppAuth(memo = "agv任务完成接口")
//    public R getAgvTaskOver(@RequestHeader String appkey,
//                            @RequestBody TaskOverParam param,
//                            HttpServletRequest request) {
//        auth(appkey, param, request);
//        if (Cools.isEmpty(param)) {
//            return R.parse(BaseRes.PARAM);
//        }
//        if (Cools.isEmpty(param.getStartPoint())) {
//            return R.error("码头[wharfCode]不能为空");
//        }
//        if (Cools.isEmpty(param.getStatus())) {
//            return R.error("完成标记[status]不能为空");
//        }
//        openService.getAgvTaskOver(param);
//        return R.ok();
//    }
}
src/main/java/com/zy/asrs/domain/param/ApplyInDevpDto.java
New file
@@ -0,0 +1,23 @@
package com.zy.asrs.domain.param;
import lombok.Data;
/**
 * @author pang.jiabao
 * @description 通知输送线流动
 * @createDate 2025/5/15 14:27
 */
@Data
public class ApplyInDevpDto {
    /**
     * 源站点
     */
    private Integer sourceSite;
    /**
     * 目标站点
     */
    private Integer targetSite;
}
src/main/java/com/zy/asrs/service/OpenService.java
@@ -1,11 +1,9 @@
package com.zy.asrs.service;
import com.core.common.R;
import com.zy.asrs.domain.param.ApplyInDevpDto;
import com.zy.asrs.entity.param.TaskCreateParam;
import com.zy.asrs.entity.param.TaskOverParam;
import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam;
import java.io.IOException;
import java.util.HashMap;
public interface OpenService {
@@ -13,11 +11,8 @@
    //创建任务
    HashMap<String, Object> taskCreate(TaskCreateParam param);
    R AgvToWCSToWms(WMSAndAGVInterfaceParam param) throws IOException;
    void getAgvTaskOver(TaskOverParam param);
    R getAgvPickAndPlaceV1(TaskOverParam param);
    R getAgvPickAndPlaceV2(TaskOverParam param);
    /**
     * 外置输送线wms通知输送线流动
     */
    R applyInDevp(ApplyInDevpDto param);
}
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -1,25 +1,22 @@
package com.zy.asrs.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.R;
import com.zy.asrs.domain.enums.TaskStatusType;
import com.zy.asrs.domain.enums.WorkNoType;
import com.zy.asrs.entity.*;
import com.zy.asrs.domain.param.ApplyInDevpDto;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.TaskWrk;
import com.zy.asrs.entity.param.TaskCreateParam;
import com.zy.asrs.entity.param.TaskOverParam;
import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.Utils;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.core.DevpThread;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.DevpSlave;
import com.zy.core.model.Task;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.properties.SlaveProperties;
@@ -27,22 +24,12 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.*;
import java.util.Date;
import java.util.HashMap;
@Service
public class OpenServiceImpl implements OpenService {
    public ArrayList<String> wharfCode1 = new ArrayList<String>() {{
        add("J-1101");
        add("J-1103");
        add("J-1105");
        add("J-1107");
        add("J-1109");
        add("J-1111");
        add("H-1101");
        add("G-1101");
    }};
    @Autowired
    private TaskWrkService taskWrkService;
    @Autowired
@@ -131,251 +118,27 @@
    }
    @Override
    public R AgvToWCSToWms(WMSAndAGVInterfaceParam param) throws IOException {
        ToWmsDTO toWmsDTO = new ToWmsDTO();
        Map<String, Object> map = new HashMap<>();
        map.put("x-api-key", "7a15b5db-29b6-552c-8cff-0cfec3756da2");
        List<Integer> list = new ArrayList<>();
        if (param.getWharfSource().contains("J")) {
            list = getInEnableRoadway();
        } else {
            list = getInEnableRoadway2();
    public R applyInDevp(ApplyInDevpDto param) {
        Integer sourceSite = param.getSourceSite();
        BasDevp basDevp = basDevpService.selectById(sourceSite);
        if (basDevp == null) {
            return R.error("源站点不存在:" + param);
        }
        //TaskWrk taskWrk = taskWrkService.selectByTaskNo(param.getTaskNo());
        toWmsDTO.setWarehouseId("1688469798893297665");
        toWmsDTO.setContainerCode(param.getContainerCode());
        toWmsDTO.setApplyType("TUNNEL");
        toWmsDTO.setWharfSource(null);
        toWmsDTO.setCanInboundTunnels(list);
        String response = null;
        try {
            response = new HttpHandler.Builder()
                    .setHeaders(map)
                    .setUri(wmsUrl)
                    .setPath("wcsManager/wcsInterface/inboundTaskApply")
                    .setJson(JSON.toJSONString(toWmsDTO))
                    .build()
                    .doPost();
        } catch (Exception e) {
            return R.error("wms连接失败" + e.getMessage());
        }
        JSONObject jsonObject = JSON.parseObject(response);
        apiLogService.save("wms请求入库码头接口"
                , wmsUrl + "wcsManager/wcsInterface/inboundTaskApply"
                , null
                , "127.0.0.1"
                , JSON.toJSONString(toWmsDTO)
                , response
                , true
        );
        if (jsonObject.getInteger("code").equals(200)) {
            //解析
            List<WMSAndAGVInterfaceParam> params = new ArrayList<>();
            params.add(param);
            WMSAndAGVInterfaceParam data = JSONObject.parseObject(jsonObject.get("data").toString(), WMSAndAGVInterfaceParam.class);
            String msg = null;
            try {
                taskCreate(new TaskCreateParam(data));
            } catch (Exception e) {
                msg = e.getMessage();
            }
            if (msg != null) {
                return R.error(msg);
            }
            Map<String, String> map1 = new HashMap<>();
            StaDesc staDesc = new StaDesc();
            if (param.getWharfSource().contains("J")) {
                staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                        .eq("crn_no", data.getTaskTunnel())
                        .eq("type_no", 1)
                        .lt("stn_no", 200));
            } else if (param.getWharfSource().contains("H")) {
                staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                        .eq("crn_no", data.getTaskTunnel())
                        .eq("type_no", 1)
                        .lt("stn_no", 400)
                        .gt("stn_no", 200));
            } else {
                staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                        .eq("crn_no", data.getTaskTunnel())
                        .eq("type_no", 1)
                        .lt("stn_no", 500)
                        .ge("stn_no", 400));
            }
            map1.put("taskTunnel", staDesc.getStnDesc());
            //map1.put("taskTunnel", "J-1104");
            return R.ok(map1);
        }
        return R.error((String) jsonObject.get("msg"));
    }
    @Override
    public void getAgvTaskOver(TaskOverParam param) {
        // 根据输送线plc遍历
        for (DevpSlave devp : slaveProperties.getDevp()) {
            StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                    .eq("stn_desc", param.getStartPoint()));
            if (Cools.isEmpty(staDesc)) {
                throw new RuntimeException("未查询到站点信息");
            }
            // 获取入库站信息
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
            StaProtocol staProtocol = devpThread.getStation().get(staDesc.getStnNo());
        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
        StaProtocol staProtocol = devpThread.getStation().get(sourceSite);
            if (staProtocol == null) {
                continue;
            return R.parse(sourceSite + "线程为空!");
            } else {
                staProtocol = staProtocol.clone();
            }
            Short workNo = staProtocol.getWorkNo();
            if (wharfCode1.contains(param.getStartPoint())) {
                if (!staProtocol.isLoading() && !staProtocol.isCar() && staProtocol.getWorkNo() > 0) {
                    //AGV出库完成以后
                    staProtocol.setWorkNo((short) 0);
                    staProtocol.setStaNo((short) 0);
                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol));
                    if (result) {
                    } else {
                        throw new RuntimeException("agv返回完成后,命令下发失败");
                    }
                }
            } else {
                for (DevpSlave.Sta inSta : devp.getInSta()) {
                    if (inSta.getBackSta().equals(staDesc.getStnNo())) {
                        if (staProtocol.isLoading() && !staProtocol.isCar() && workNo == 0) {
                            //AGV入库完成以后
                            staProtocol.setWorkNo((short) 9999);
                            staProtocol.setStaNo(inSta.getStaNo().shortValue());
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol));
                            if (result) {
                            } else {
                                throw new RuntimeException("agv返回完成后,命令下发失败");
                            }
                        }
                    }
                }
            }
        }
    }
    @Override
    public R getAgvPickAndPlaceV1(TaskOverParam param) {
        BasDevp basDevp = basDevpService.selectById(param.getStartPoint());
        if (Cools.isEmpty(basDevp)) {
            return R.error("站点号有误" + param.getStartPoint());
        }
        if (Cools.isEmpty(param.getHeight())) {
            return R.error("高度不能为空" + param.getStartPoint());
        }
        if (param.getType() == 0 && basDevp.getAgvStartPick() == 1) {
            basDevp.setInreq2(param.getHeight().toString());
            return R.ok();
        } else if (param.getType() == 1 && basDevp.getAgvStartPlace() == 1) {
            return R.ok();
        } else {
            return R.error("不允许");
        }
    }
    @Override
    public R getAgvPickAndPlaceV2(TaskOverParam param) {
        BasDevp basDevp = basDevpService.selectById(param.getStartPoint());
        if (Cools.isEmpty(basDevp)) {
            return R.error("站点号有误" + param.getStartPoint());
        }
        if (param.getType() == 0) {
            basDevp.setAgvTargetPick(1);
        staProtocol.setWorkNo((short) commonService.getWorkNo(WorkNoType.PICK.type));
        staProtocol.setStaNo(param.getTargetSite().shortValue());
            basDevpService.updateById(basDevp);
            return R.ok();
        } else if (param.getType() == 1) {
            basDevp.setAgvTargetPlace(1);
            basDevpService.updateById(basDevp);
            return R.ok();
        boolean result = MessageQueue.offer(SlaveType.Devp, 2, new Task(2, staProtocol));
        if (result) {
            return R.ok("成功");
        } else {
            return R.error("请求类型异常" + param.getType());
            return R.error("下发命令失败:" + param);
        }
    }
    public List<Integer> getInEnableRoadway() {
        int[] roadway = null;
        List<Integer> list = new ArrayList<>();
        Map<Integer, Integer> map = new HashMap<>();
        map.put(103, 1);
        map.put(107, 2);
        map.put(111, 3);
        map.put(115, 4);
        map.put(119, 5);
        map.put(123, 6);
        //put(301,7);
        // 根据输送线plc遍历
        for (DevpSlave devp : slaveProperties.getDevp()) {
            // 遍历入库口
            for (DevpSlave.Sta inSta : devp.getInSta()) {
                // 获取入库站信息
                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                StaProtocol staProtocol = devpThread.getStation().get(inSta.getBackSta());
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                Short workNo = staProtocol.getWorkNo();
                if (workNo == 0 && !staProtocol.isLoading()) {
                    if (Cools.isEmpty(map.get(inSta.getStaNo()))) {
                        continue;
                    }
                    list.add(map.get(inSta.getStaNo()));
                }
            }
        }
        //roadway = list.stream().mapToInt(Integer::intValue).toArray();
        return list;
    }
    public List<Integer> getInEnableRoadway2() {
        int[] roadway = null;
        List<Integer> list = new ArrayList<>();
        Map<Integer, Integer> map = new HashMap<>();
        map.put(205, 1);
        map.put(211, 2);
        map.put(217, 3);
        map.put(223, 4);
        map.put(229, 5);
        map.put(235, 6);
        //put(301,7);
        // 根据输送线plc遍历
        for (DevpSlave devp : slaveProperties.getDevp()) {
            // 遍历入库口
            for (DevpSlave.Sta inSta : devp.getInSta()) {
                // 获取入库站信息
                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                StaProtocol staProtocol = devpThread.getStation().get(inSta.getBackSta());
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                Short workNo = staProtocol.getWorkNo();
                if (workNo == 0 && !staProtocol.isLoading()) {
                    if (Cools.isEmpty(map.get(inSta.getStaNo()))) {
                        continue;
                    }
                    list.add(map.get(inSta.getStaNo()));
                }
            }
        }
        //roadway = list.stream().mapToInt(Integer::intValue).toArray();
        return list;
    }
}