dubin
9 天以前 c0fc45a7cd97c2ded531b85575e6f26ff269db1b
第一次进场调试
17个文件已修改
653 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/mapper/LocMastMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocMastService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 384 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/Utils.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/MatDto.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/SearchLocParam.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/command/LedCommand.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/LedThread.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocMastMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/console.map.js 94 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/crn.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -30,7 +30,7 @@
    LocMast queryDemoSourceLoc(@Param("crnNo") Integer crnNo);
    LocMast queryDemoLoc(@Param("crnNo") Integer crnNo,@Param("loc_type2") String locType2);
    LocMast queryDemoLoc(@Param("crnNo") Integer crnNo);
    @Select("select count(*) as count from asr_loc_mast where 1=1 and loc_sts = 'O' and loc_type1 = #{locType1} and crn_no = #{crnNo}")
    Integer selectEmptyLocCount(@Param("locType1") Short locType1, @Param("crnNo") Integer crnNo);
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -122,4 +122,6 @@
    @Select("select count(*) from asr_wrk_mast where wrk_sts = 11 OR wrk_sts = 12;")
    Integer selectOutCount();
    List<WrkMast> selectPakOutStep11To2(@Param("crnNo")Integer crnNO, @Param("sourceStaNo")Integer sourceStaNo);
}
src/main/java/com/zy/asrs/service/LocMastService.java
@@ -36,7 +36,7 @@
     * @param crn
     * @return
     */
    LocMast queryDemoLoc(Integer crn,String locType2);
    LocMast queryDemoLoc(Integer crn);
    /**
     * 检查当前库位所属巷道的空库位数量
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -40,8 +40,8 @@
    }
    @Override
    public LocMast queryDemoLoc(Integer crn,String locType2) {
        return this.baseMapper.queryDemoLoc(crn,locType2);
    public LocMast queryDemoLoc(Integer crn) {
        return this.baseMapper.queryDemoLoc(crn);
    }
    @Override
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -140,8 +140,9 @@
                // 尺寸检测异常
                boolean back = false;
                String errMsg = "";
                boolean fail = false;
                // 检测是否有出库任务 如果有出库任务 入库就停止
                List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no",1).in("wrk_sts", 11, 12));
                List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", 12).in("io_type",101,103,104,107,110));
                // 检测104站(堆垛机出库站 入库站)是否有物 如果有物没有工作号 入库停止 如果有物工作号是出库 入库停止 如果有物工作号是入库 可以入库 如果有物工作号不存在 入库停止
                StaProtocol staProtocol104 = devpThread.getStation().get(104);
                if (staProtocol104 == null){
@@ -149,9 +150,25 @@
                    continue;
                }
                //104站有物 有工作号 判断这个任务的类型
                WrkMast wrkMast1 = new WrkMast();
                WrkMast wrkMast1 = null;
                if (staProtocol104.isLoading() && staProtocol104.getWorkNo() != 0){
                    wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol104.getWorkNo()));
                }
                if (wrkMast1 != null){
                    if (wrkMast1.getIoType() > 100){
                        fail = true;
                    }
                }
                // 检测102站是否有物  有物继续向下执行
                if (!staProtocol.isLoading()){
                    continue;
                }
                // 如果工作号不是 9999 (入库任务) 不向下执行
                if (staProtocol.getWorkNo() != 9999){
                    continue;
                }
                if (staProtocol.isFrontErr()) {
@@ -187,20 +204,20 @@
                    errMsg = "托盘码格式有误--->" + barcode;
                    back = true;
                }
                if (!back && (!barcode.startsWith("5") &&  !barcode.startsWith("6") &&  !barcode.startsWith("7") && !barcode.startsWith("8"))) {
                if (!back && (!barcode.startsWith("5") && !barcode.startsWith("6") &&  !barcode.startsWith("7") && !barcode.startsWith("8"))) {
                    errMsg = "托盘码格式有误--->" + barcode;
                    back = true;
                }
                if (!back && !wrkMastList.isEmpty()) {
                    errMsg = "有出库任务,入库停止";
                    errMsg = "堆垛机有出库任务,入库停止";
                    back = true;
                }if (!back && staProtocol104.isLoading() && staProtocol104.getWorkNo() == 0 && (barcode.startsWith("6") || barcode.startsWith("5"))){
                    errMsg = "104站有物但是无工作号,请检查";
                    back = true;
                }if (!back && (!Cools.isEmpty(wrkMast1) && wrkMast1.getIoType() > 100)){
                    errMsg = "有出库任务,入库停止";
                }if (!back && ((wrkMast1 != null && fail))){
                    errMsg = "1号堆垛机有出库任务,入库停止";
                    back = true;
                }if (!back && (staProtocol104.isLoading() && Cools.isEmpty(wrkMast1)) && (barcode.startsWith("5") || barcode.startsWith("6"))){
                }if (!back && (staProtocol104.isLoading() && wrkMast1 == null) && (barcode.startsWith("5") || barcode.startsWith("6"))){
                    errMsg = "104站有物但是对应的工作号无工作档,请检查";
                    back = true;
                }
@@ -259,7 +276,7 @@
                    }
                    WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
                            .eq("barcode", barcode)
                            .in("io_type", 107, 103, 57));
                            .in("io_type", 107, 103, 104));
                    if (!Cools.isEmpty(checkPick)) {
                        continue;
                    }
@@ -267,12 +284,12 @@
                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
                        SearchLocParam param = new SearchLocParam();
                        locTypeDto.setLocType1((short) 1);
                        locTypeDto.setLocType1(staProtocol.toSqlModel().getLocType1());
                        param.setBarcode(barcode);
                        param.setIoType(1);
                        param.setSourceStaNo(inSta.getStaNo());
                        param.setLocType1(locTypeDto.getLocType1()); // 高低
                        param.setWeight(staProtocol.getWeight());
                        param.setWeight(staProtocol.getWeight()); // 重量
                        String response = new HttpHandler.Builder()
                                .setTimeout(30,TimeUnit.SECONDS)
                                .setUri(wmsUrl)
@@ -420,8 +437,16 @@
//                    News.error("站点信息未获得");
                    continue;
                }
                // 检测102站是否有物 有物继续向下执行
                if (!staProtocol.isLoading()){
                    continue;
                }
                // 如果工作号不是 9999 (入库任务) 不向下执行
                if (staProtocol.getWorkNo() != 9999){
                    continue;
                }
                // 检测是否有出库任务 如果有出库任务 入库就停止
                List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", 1).in("wrk_sts", 11, 12));
                List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", 12).in("io_type",101,103,104,107,110));
                // 检测104站(堆垛机出库站 入库站)是否有物 如果有物没有工作号 入库停止 如果有物工作号是出库 入库停止 如果有物工作号是入库 可以入库 如果有物工作号不存在 入库停止
                StaProtocol staProtocol104 = devpThread.getStation().get(104);
                if (staProtocol104 == null){
@@ -429,13 +454,21 @@
                    continue;
                }
                //104站有物 有工作号 判断这个任务的类型
                WrkMast wrkMast1 = new WrkMast();
                WrkMast wrkMast1 = null;
                if (staProtocol104.isLoading() && staProtocol104.getWorkNo() != 0){
                    wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol104.getWorkNo()));
                }
                // 尺寸检测异常
                boolean back = false;
                boolean fail = false;
                String errMsg = "";
                if (wrkMast1 != null){
                    if (wrkMast1.getIoType() > 100){
                        fail = true;
                    }
                }
                if (staProtocol.isFrontErr()) {
                    errMsg = "前超限";
                    back = true;
@@ -474,13 +507,13 @@
                    back = true;
                }
                if (!back && !wrkMastList.isEmpty()) {
                    errMsg = "有出库任务,入库停止";
                    errMsg = "堆垛机有出库任务,入库停止";
                    back = true;
                }if (!back && staProtocol104.isLoading() && staProtocol104.getWorkNo() == 0 && (barcode.startsWith("6") || barcode.startsWith("5"))){
                    errMsg = "104站有物但是无工作号,请检查";
                    back = true;
                }if (!back && (!Cools.isEmpty(wrkMast1) && wrkMast1.getIoType() > 100)){
                    errMsg = "有出库任务,入库停止";
                }if (!back && (wrkMast1 != null && fail)){
                    errMsg = "1号堆垛机有出库任务,入库停止";
                    back = true;
                }if (!back && (staProtocol104.isLoading() && Cools.isEmpty(wrkMast1)) && (barcode.startsWith("5") || barcode.startsWith("6"))){
                    errMsg = "104站有物但是对应的工作号无工作档,请检查";
@@ -511,27 +544,6 @@
                    }
                    continue;
                }
//                if(staProtocol.getSiteId() < 400){
//                    if (!Cools.isEmpty(barcode)) {
//                        News.infoNoLog("" + mark + " - 1" + " - {}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode);
//                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
//                            continue;
//                        }
//                    } else {
//                        continue;
//                    }
//
//
//                    if (!Cools.isEmpty(barcode)) {
//                    News.info(""+mark+" - 1"+" - {}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode);
//                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
//                            continue;
//                        }
//                    } else {
//                        continue;
//                    }
//
//                }
                if (staProtocol == null) {
@@ -818,6 +830,34 @@
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                //判断是不是2号堆垛机的106出库站
                if (staProtocol.getSiteId() == 106 && staProtocol.isLoading()){
                    CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, 2);
                    CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                    if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) {
                        // 移动中
                        continue;
                    }
                    if (crnProtocol.modeType == CrnModeType.AUTO
                            && crnProtocol.statusType == CrnStatusType.WAITING
                            && crnProtocol.forkPosType == CrnForkPosType.HOME){
                        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", crnProtocol.getTaskNo()).eq("wrk_sts",12));
                        if (wrkMast == null){
                            News.errorNoLog("2号堆垛机等待确认的工作档不存在");
                            continue;
                        }
                        wrkMast.setWrkSts(14L);
                        wrkMast.setCrnEndTime(new Date());
                        if (wrkMastMapper.updateById(wrkMast) != 0) {
                            // 复位堆垛机
                            log.error("出库任务完成下发堆垛机复位,{}", wrkMast.getWrkNo());
                            crnThread.setResetFlag(true);
                        } else {
                            News.error("" + mark + " - 1" + " - 更新工作档的工作状态为14失败!!! [工作号:{}]", wrkMast.getWrkNo());
                        }
                        break;
                    }
                }
                if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
                    // 查询工作档
@@ -1191,6 +1231,7 @@
            crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
            crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位排
            crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 源库位列
//            crnCommand.setSourcePosY((short)(wrkMast.getBarcode().startsWith("7")? 0:1));     // 源库位列
            crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 源库位层
            crnCommand.setDestinationPosX((short) (locMast.getRow1() + slave.getOffset()));     // 目标库位排
            crnCommand.setDestinationPosY((short) (locMast.getBay1() + slave.getOffset()));     // 目标库位列
@@ -1235,6 +1276,9 @@
            // 获取工作状态为11(生成出库ID)的出库工作档
//            WrkMast wrkMast = wrkMastMapper.selectPakOutStep1(slave.getId(), crnStn.getStaNo());
            List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo());
            if (wrkMasts.isEmpty()) {
                wrkMasts = wrkMastMapper.selectPakOutStep11To2(slave.getId(), 103);
            }
            for (WrkMast wrkMast : wrkMasts) {
                 if (wrkMast == null) {
                    continue;
@@ -1252,12 +1296,28 @@
                }
                // 获取堆垛机出库站信息
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
                StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
                StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getSourceStaNo());
                if (staProtocol == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol);
                    break;
                } else {
                    staProtocol = staProtocol.clone();
                }
                //工作档目标站为101 且 101有物  目标站为101 且工作档状态为12 15 14 停止给堆垛机下全板出库以外的任务
                if (wrkMast.getStaNo() == 101){
                    List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("sta_no", 101).in("wrk_sts", 12, 14, 15));
                    StaProtocol staProtocol101 = devpThread.getStation().get(101);
                    StaProtocol staProtocol102 = devpThread.getStation().get(102);
                    StaProtocol staProtocol103 = devpThread.getStation().get(103);
                    if (staProtocol101 == null) {
                        News.infoNoLog("" + mark + " - 2" + " - 3" + " - 工作档目标站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol);
                        break;
                    } else {
                        staProtocol101 = staProtocol101.clone();
                    }
                    if (staProtocol101.isLoading() || !Cools.isEmpty(wrkMastList) || staProtocol101.getWorkNo() != 0 || staProtocol102.isLoading() || staProtocol102.getWorkNo() != 0 || staProtocol103.isLoading() || staProtocol103.getWorkNo() != 0){
                        break;
                    }
                }
//                StaProtocol staProtocol1 = staProtocol.getSiteId()==101?devpThread.getStation().get(crnStn.getStaNo() + 1):devpThread.getStation().get(crnStn.getStaNo() - 1);
//                StaProtocol staProtocol1 = devpThread.getStation().get(crnStn.getStaNo() - 1);
@@ -1386,17 +1446,32 @@
                    // 1.堆垛机开始移动
                    CrnCommand crnCommand = new CrnCommand();
                    crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                    crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
//                    crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                    crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                    crnCommand.setSourcePosX((short) (sourceSta.getRow1() + slave.getOffset()));     // 源库位排
                    crnCommand.setSourcePosY((short) (sourceSta.getBay1() + slave.getOffset()));     // 源库位列
                    crnCommand.setSourcePosZ((short) (sourceSta.getLev1() + slave.getOffset()));     // 源库位层
                    crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 目标库位排
                    crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 目标库位列
                    crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 目标库位层
                    crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //库位类型
                    if (wrkMast.getCrnNo() == 2){
                        crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                        crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
//                      crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                        crnCommand.setSourcePosX((short) (sourceSta.getRow1() + slave.getOffset()));     // 源库位排
                        crnCommand.setSourcePosY((short) (sourceSta.getBay1() + slave.getOffset()));     // 源库位列
                        crnCommand.setSourcePosZ((short) (sourceSta.getLev1() + slave.getOffset()));     // 源库位层
                        crnCommand.setDestinationPosX(wrkMast.getIoType() == 101? crnStn.getRow().shortValue() : 3);     // 目标库位排
//                        crnCommand.setDestinationPosY((short)(Utils.getLev(wrkMast.getSourceLocNo()) <= 2? 0 : 1));     // 目标库位列
                        crnCommand.setDestinationPosY((short)1);     // 目标库位列
                        crnCommand.setDestinationPosZ((short)1);     // 目标库位层
                        crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //库位类型
                    }else {
                        crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                        crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
//                      crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                        crnCommand.setSourcePosX((short) (sourceSta.getRow1() + slave.getOffset()));     // 源库位排
                        crnCommand.setSourcePosY((short) (sourceSta.getBay1() + slave.getOffset()));     // 源库位列
                        crnCommand.setSourcePosZ((short) (sourceSta.getLev1() + slave.getOffset()));     // 源库位层
                        crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 目标库位排
                        crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 目标库位列
                        crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 目标库位层
                        crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //库位类型
                    }
                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                        News.error("" + mark + " - 2" + " - 13" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                    } else {
@@ -1816,12 +1891,16 @@
                if (!staProtocol.isLoading()) {
                    continue;
                }
                // 如果工作号不是 9998 (入库任务) 不向下执行
                if (staProtocol.getWorkNo() != 9998){
                    continue;
                }
                // 尺寸检测异常
                boolean back = false;
                String errMsg = "";
                // 检测是否有出库任务 如果有出库任务 入库就停止
                List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no",1).in("wrk_sts", 11, 12));
                List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("io_type",101,103,104,107,110).in("wrk_sts", 12));
                // 检测104站(堆垛机出库站 入库站)是否有物 如果有物没有工作号 入库停止 如果有物工作号是出库 入库停止 如果有物工作号是入库 可以入库 如果有物工作号不存在 入库停止
                StaProtocol staProtocol104 = devpThread.getStation().get(104);
                if (staProtocol104 == null){
@@ -1829,7 +1908,7 @@
                    continue;
                }
                //104站有物 有工作号 判断这个任务的类型
                WrkMast wrkMast1 = new WrkMast();
                WrkMast wrkMast1 = null;
                if (staProtocol104.isLoading() && staProtocol104.getWorkNo() != 0){
                    wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol104.getWorkNo()));
                }
@@ -1843,15 +1922,15 @@
                    back = true;
                }
                if (!back && !wrkMastList.isEmpty()) {
                    errMsg = "有出库任务,入库停止";
                    errMsg = "堆垛机有出库任务,入库停止";
                    back = true;
                }if (!back && staProtocol104.isLoading() && staProtocol104.getWorkNo() == 0 && (barcode.startsWith("5") || barcode.startsWith("6"))){ // 104虽然有物没有工作号 但是如果102的货物要进的是2号堆垛机 不能阻拦 (1号堆垛机条码 5xxx 6xxx   2号堆垛机 7xxx 8xxx)
                    errMsg = "104站有物但是无工作号,请检查";
                    back = true;
                }if (!back && (!Cools.isEmpty(wrkMast1) && wrkMast1.getIoType() > 100)){
                    errMsg = "有出库任务,入库停止";
                }if (!back && (wrkMast1 != null && wrkMast1.getIoType() > 100)){
                    errMsg = "1号堆垛机有出库任务,入库停止";
                    back = true;
                }if (!back && (staProtocol104.isLoading() && Cools.isEmpty(wrkMast1)) && (barcode.startsWith("5") || barcode.startsWith("6"))){ // 同上
                }if (!back && (staProtocol104.isLoading() && wrkMast1 == null) && (barcode.startsWith("5") || barcode.startsWith("6"))){ // 同上
                    errMsg = "104站有物但是对应的工作号无工作档,请检查";
                    back = true;
                }
@@ -1872,7 +1951,7 @@
                    staProtocol.setStaNo(emptyInSta.getBackSta().shortValue());
                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                    MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                    log.error("输送线下发(正在执行出库任务 空板入库暂停):" + wrkNo + "," + emptyInSta.getBackSta());
                    log.error("输送线下发:" + wrkNo + "," + emptyInSta.getBackSta());
                    break;//托盘退回不生成工作档
                }
                // 站点条件判断
@@ -1881,14 +1960,14 @@
                        && staProtocol.isInEnable()
                        && staProtocol.isEmptyMk()
                        && staProtocol.isPakMk()
                        && (staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() > 9700)
                        && staProtocol.getWorkNo() == 9998
                ) {
                    News.warnNoLog("" + mark + " - 0" + " - 开始执行:空栈板初始化入库,叉车入库站放货");
                    try {
                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
                        SearchLocParam param = new SearchLocParam();
                        locTypeDto.setLocType1((short) 1);
                        locTypeDto.setLocType1(staProtocol.toSqlModel().getLocType1());
                        param.setIoType(10);
                        param.setSourceStaNo(emptyInSta.getStaNo());
                        param.setLocType1(locTypeDto.getLocType1());
@@ -1971,8 +2050,7 @@
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
            // 命令集合
            List<LedCommand> commands = new ArrayList<>();
            // 工作档集合
            List<WrkMast> wrkMasts = new ArrayList<>();
            List<Integer> workNoList = new ArrayList<>();
            for (Integer staNo : led.getStaArr()) {
                // 获取叉车站点
                StaProtocol staProtocol = devpThread.getStation().get(staNo);
@@ -1981,32 +2059,42 @@
                } else {
                    staProtocol = staProtocol.clone();
                }
                Integer wrkNo = null;
                Integer ioType = null;
                Integer targetStaNo = null;
                String sourceLocNo = null;
                String locNo = null;
                String barcode = null;
                // 获取条码扫描仪信息
                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, staNo);
                // 获取工作档数据
                WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
                if (null == wrkMast) {
                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no",staProtocol.getWorkNo()));
                if (wrkMast == null && barcodeThread != null) {
                    wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode",barcodeThread.getBarcode()));
                }
                if (wrkMast == null){
                    continue;
                }
                wrkMasts.add(wrkMast);
                wrkNo = wrkMast.getWrkNo();
                ioType = wrkMast.getIoType();
                sourceLocNo = wrkMast.getSourceLocNo();
                locNo = wrkMast.getLocNo();
                targetStaNo = wrkMast.getStaNo();
                barcode = wrkMast.getBarcode();
                News.warnNoLog("" + mark + " - 0" + " - 开始执行:出库  ===>> 工作档信息写入led显示器");
                workNoList.add(wrkNo);
                // 组装命令
                LedCommand ledCommand = new LedCommand();
                ledCommand.setWorkNo(wrkMast.getWrkNo());
                ledCommand.setIoType(wrkMast.getIoType());
                ledCommand.setWorkNo(wrkNo);
                ledCommand.setIoType(ioType);
                // 出库模式
                switch (wrkMast.getIoType()) {
                switch (ioType) {
                    case 1:
                        ledCommand.setTitle("全板入库");
                        break;
                    case 10:
                        ledCommand.setTitle("空板入库");
                        break;
                    case 53:
                        ledCommand.setTitle("拣料再入库");
                        break;
                    case 54:
                        ledCommand.setTitle("并板再入库");
                        break;
                    case 57:
                        ledCommand.setTitle("盘点再入库");
                        break;
                    case 101:
                        ledCommand.setTitle("全板出库");
@@ -2024,60 +2112,130 @@
                        ledCommand.setTitle("空板出库");
                        ledCommand.setEmptyMk(true);
                        break;
                    case 53:
                        ledCommand.setTitle("拣料入库");
                        break;
                    case 57:
                        ledCommand.setTitle("盘点入库");
                        break;
                    case 54:
                        ledCommand.setTitle("并板入库");
                        break;
                    default:
                        News.error("任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
                        News.error("" + mark + " - 1" + " - 任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkNo, ioType);
                        break;
                }
                ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
                ledCommand.setStaNo(wrkMast.getStaNo());
                ledCommand.setBarcode(wrkMast.getBarcode());
                if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
                ledCommand.setSourceLocNo(sourceLocNo);
                ledCommand.setLocNo(locNo);
                ledCommand.setStaNo(targetStaNo);
                ledCommand.setBarcode(barcode);
                    wrkDetls.forEach(wrkDetl -> {
                        Double total = 0.0;
                        EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
                        LocDetl locDetl = locDetlService.selectOne(wrapper.eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr()));
                        if (Cools.isEmpty(locDetl)) {
                            total = wrkDetl.getAnfme();
                        } else {
                            total = locDetl.getAnfme();
                // 修改开始:处理多个wrkDetl,不合并
                if (ioType != 110 && ioType != 10) {
                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkNo);
                    if (!wrkDetls.isEmpty()) {
                        // 获取库存信息
                        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                                .eq("loc_no", wrkMast.getSourceLocNo()));
                        double totalAnfme = 0D;
                        double totalWeight = 0D;
                        for (LocDetl locDetl : locDetls) {
                            totalAnfme += locDetl.getAnfme();
//                        totalWeight += locDetl.getWeight();
                        }
                        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1 || wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57||wrkMast.getIoType() == 54) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getOrderNo(),wrkDetl.getOutOrderNo(),wrkDetl.getUnit(),wrkDetl.getWeight(),wrkDetl.getSupp(),wrkDetl.getLength() ,wrkDetl.getTemp1(), wrkDetl.getProType(),wrkDetl.getAnfme(),wrkDetl.getTemp2(), total));
                        // 为每个WrkDetl创建独立的MatDto
                        for (WrkDetl wrkDetl : wrkDetls) {
                            // 注意:这里使用每个wrkDetl的原始数据,不合并
                            ledCommand.getMatDtos().add(new MatDto(
                                    wrkDetl.getMatnr()
                                    , wrkDetl.getMaktx()
                                    , wrkDetl.getAnfme()  // 使用单个物料的数量,不累加
                                    , wrkDetl.getWeight() // 使用单个物料的重量,不累加
                                    , totalAnfme          // 库存总数(这个是正常的)
                                    , totalWeight         // 库存总重量(这个是正常的)
                                    , wrkDetl.getSpecs()
                                    , wrkDetl.getSku()
                                    , wrkDetl.getZpallet()
                                    , wrkDetl.getModel()
                                    , wrkDetl.getSupp()
                                    , wrkDetl.getBarcode()
                                    , wrkDetl.getOrderNo()
                                    , wrkDetl.getBatch()
//                                , wrkDetl.getCstateid$()
                            ));
                        }
                        if (wrkMast.getIoType() == 103 ) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getOrderNo(),wrkDetl.getOutOrderNo(),wrkDetl.getUnit(),wrkDetl.getWeight(),wrkDetl.getSupp(),wrkDetl.getLength() ,wrkDetl.getTemp1(), wrkDetl.getProType(),wrkDetl.getAnfme(),wrkDetl.getTemp2(), total));
                        }
                        if (wrkMast.getIoType() == 107||wrkMast.getIoType()==104) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getOrderNo(),wrkDetl.getOutOrderNo(),wrkDetl.getUnit(),wrkDetl.getWeight(),wrkDetl.getSupp(),wrkDetl.getLength() ,wrkDetl.getTemp1(), wrkDetl.getProType(),wrkDetl.getAnfme(),wrkDetl.getTemp2(), total));
                        }
                    });
                    } else {
//                        List<WrkDetlLog> wrkDetlLogs = wrkDetlLogService.selectTodayByWrkNo(wrkNo);
//                        if (!wrkDetlLogs.isEmpty()) {
//                            // 获取库存信息
//                            List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
//                                    .eq("loc_no", sourceLocNo));
//                            double totalAnfme = 0D;
//                            double totalWeight = 0D;
//                            for (LocDetl locDetl : locDetls) {
//                                totalAnfme += locDetl.getAnfme();
//                                totalWeight += locDetl.getWeight();
//                            }
//
//                            // 为每个WrkDetlLog创建独立的MatDto
//                            for (WrkDetlLog wrkDetlLog : wrkDetlLogs) {
//                                // 注意:这里使用每个wrkDetlLog的原始数据,不合并
//                                ledCommand.getMatDtos().add(new MatDto(
//                                        wrkDetlLog.getMatnr()
//                                        , wrkDetlLog.getMaktx()
//                                        , wrkDetlLog.getAnfme()  // 使用单个物料的数量,不累加
//                                        , wrkDetlLog.getWeight() // 使用单个物料的重量,不累加
//                                        , totalAnfme              // 库存总数
//                                        , totalWeight             // 库存总重量
//                                        , wrkDetlLog.getSpecs()
//                                        , wrkDetlLog.getSku()
//                                        , wrkDetlLog.getZpallet()
//                                        , wrkDetlLog.getModel()
//                                        , wrkDetlLog.getSupp()
//                                        , wrkDetlLog.getKpCstmrName()
//                                        , wrkDetlLog.getOrderNo()
//                                        , wrkDetlLog.getBatch()
////                                    , wrkDetlLog.getCstateid$()
//                                ));
//                            }
//                        }
                    }
                }
                // 修改结束
                commands.add(ledCommand);
            }
            Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
            Set<Integer> workNos = new HashSet<>(workNoList);
            // 获取LED线程
            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
            // 相同工作号集合则过滤
            if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
                continue;
            }
            // 命令下发 -------------------------------------------------------------------------------
            if (!commands.isEmpty()) {
                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
                    News.error("{}号LED显示内容命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                    News.error("{}号LED命令下发失败--->出库!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                    continue;
                } else {
                    ledThread.setLedMk(false);
                }
            }
            try {
                // 修改主档led标记
                for (WrkMast wrkMast : wrkMasts) {
                    wrkMast.setOveMk("Y");
                    wrkMast.setModiTime(new Date());
                    if (wrkMastMapper.updateById(wrkMast) == 0) {
                        throw new CoolException("更新工作档失败");
                for (Integer wrkNo : workNoList) {
                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", wrkNo));
                    if (wrkMast != null) {
                        wrkMast.setOveMk("Y");
                        wrkMast.setModiTime(new Date());
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                            News.errorNoLog("" + mark + " - 4" + " - 更新工作档失败");
                            throw new CoolException("更新工作档失败");
                        }
                    }
                }
@@ -2090,6 +2248,7 @@
            }
        }
        News.infoNoLog("" + mark + " - 0" + " - 出库  ===>> 工作档信息写入led显示器执行完成");
    }
    /**
@@ -2353,8 +2512,13 @@
                    }
                    LocMast sourceLoc = locMastService.queryDemoSourceLoc(crn.getId());
                    LocMast loc = locMastService.queryDemoLoc(crn.getId(),sourceLoc.getLocType2().toString());
                    if (null == sourceLoc || null == loc) {
                    LocMast loc = locMastService.queryDemoLoc(crn.getId());
                    if (null == sourceLoc) {
                        continue;
                    }
                    if (null == loc) {
                        log.error("库位已全部标记");
                        continue;
                    }
@@ -2413,6 +2577,7 @@
                    if (loc.getLocSts().equals("O")) {
                        loc.setLocSts("S"); // S.入库预约
                        loc.setModiTime(new Date());
                        loc.setLocType2((short) 1); // 标记
                        if (!locMastService.updateById(loc)) {
                            throw new CoolException("更新目标库位状态失败");
                        }
@@ -3365,7 +3530,10 @@
            }
            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
                if (crnProtocol.getBay()==0 && crnProtocol.getLevel() == 1) {
                if (crnProtocol.getBay()==1 && crnProtocol.getLevel() == 1 && crnProtocol.getCrnNo() == 1) {
                    continue;
                }
                if (crnProtocol.getCrnNo() == 2 && crnProtocol.getLevel() == 1 && (crnProtocol.getBay() == 0 || crnProtocol.getBay() == 1)){
                    continue;
                }
                Page<BasCrnOpt> basCrnOptPage = crnOptService.selectPage(new Page<>(1, 1), new EntityWrapper<BasCrnOpt>().eq("crn_no", crn.getId()).orderBy("send_time", false));
@@ -3410,7 +3578,7 @@
//                    crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式:  堆垛机移动
                    crnCommand.setTaskMode(CrnTaskModeType.X_MOVE);//余姚锐麒回原点任务模式:  站位转移
                    crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位排
                    crnCommand.setSourcePosY((short) 0);     // 源库位列
                    crnCommand.setSourcePosY((short) 1);     // 源库位列
                    crnCommand.setSourcePosZ((short) 1);     // 源库位层
                    crnCommand.setDestinationPosX((short) 0);     // 目标库位排
                    crnCommand.setDestinationPosY((short) 0);     // 目标库位列
src/main/java/com/zy/asrs/utils/Utils.java
@@ -144,6 +144,16 @@
    }
    /**
     * 通过库位号获取层 0100203
     */
    public static int getLev(String locNo) {
        if (!Cools.isEmpty(locNo)) {
            return Integer.parseInt(locNo.substring(5, 7));
        }
        throw new RuntimeException("库位解析异常");
    }
    /**
     * 当检索到双深库位的浅库位时,如果深库位无货,则放入对应的深库位
     */
    public static void toDeepIfEmptyByShallow(String shallowLoc) {
src/main/java/com/zy/common/model/MatDto.java
@@ -12,79 +12,64 @@
    private String matnr;
    // 物料名称
    private String maknx;
    private String maktx;
    private String batch;
    // 库位规格
    private String specs;
    private String temp1;
    private String temp2;
    private String outOrderNo;
    private String orderNo;
    private String unit;
    private Double weight;
    private String objectId;
    private String objectName;
    private Double length;
    // 客户信息
    private String manu;
    // 备注
    private String memo;
    private String proType;
    // 物料数量
    private Double count;
    private Double anfme;
    // 库位数量
    private Double total;
    //辅数量
    private Double weight;
    // 辅库位数量
    private Double totalWeight;
    //托盘码
    private String barcode;
    //u8旧品名
    private String sku;
    //型号
    private String model;
    //客户名称
    private String supp;
    //开票客户名称
    private String kpCstmrName;
    //单号
    private String orderNo;
    //批号
    private String batch;
//    private String cstateid;
    public MatDto() {
    }
    public MatDto(String matnr, String maknx, String batch, String specs,String OrderNo,String outOrderNo,String unit,Double weight,String objectName,Double length,String temp1,String proType,Double count,String temp2, Double total){
        this.matnr = matnr;
        this.maknx = maknx;
        this.batch = batch;
        this.specs = specs;
        this.orderNo = OrderNo;
        this.outOrderNo = outOrderNo;
        this.unit = unit;
        this.weight = weight;
        this.objectName = objectName;
        this.length = length;
        this.temp1 = temp1;
        this.proType = proType;
        this.count = count;
        this.temp2 = temp2;
        this.total = total;
    }
    public MatDto(String matnr, String maknx, String batch, String specs, String manu, String memo, Double count, Double total) {
        this.matnr = matnr;
        this.maknx = maknx;
        this.batch = batch;
        this.specs = specs;
        this.manu = manu;
        this.memo = memo;
        this.count = count;
        this.total = total;
    }
    public MatDto(String matNo, String maknx, Double count) {
    public MatDto(String matNo, String maktx, Double anfme, Double weight, Double total, Double totalWeight, String specs, String sku, String barcode, String model, String supp, String kpCstmrName, String orderNo, String batch) {
        this.matnr = matNo;
        this.maknx = maknx;
        this.count = count;
    }
    public MatDto(String matNo, String maknx, Double count,String specs) {
        this.maktx = maktx;
        this.specs = specs;
        this.matnr = matNo;
        this.maknx = maknx;
        this.count = count;
    }
    public MatDto(String matNo, String maknx, Double count,Double total,String specs) {
        this.specs = specs;
        this.matnr = matNo;
        this.maknx = maknx;
        this.count = count;
        this.anfme = anfme;
        this.weight = weight;
        this.total = total;
        this.totalWeight = totalWeight;
        this.sku = sku;
        this.barcode = barcode;
        this.model = model;
        this.supp = supp;
        this.kpCstmrName = kpCstmrName;
        this.orderNo = orderNo;
        this.batch = batch;
//        this.cstateid = cstateid;
    }
}
}
src/main/java/com/zy/common/model/SearchLocParam.java
@@ -18,7 +18,7 @@
    // 库位规格( 0:未知, 1:低库位, 2:中库位, 3:高库位 )
    private Short locType1;
    private Integer weight;
    private double weight;
    public static void main(String[] args) {
        SearchLocParam searchLocParam = new SearchLocParam();
src/main/java/com/zy/core/model/command/LedCommand.java
@@ -44,7 +44,7 @@
        if (!this.emptyMk){
            for (MatDto matDto : matDtos) {
                s.append("[商品编码:" + matDto.getMatnr() + ", 数量:" + matDto.getCount() + "]\n");
                s.append("[商品编码:" + matDto.getMatnr() + ", 数量:" + matDto.getAnfme() + "]\n");
            }
        }
src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -53,7 +53,7 @@
    private boolean pakMk = true;
    //托盘重量
    private Integer weight = 0;
    private double weight = 0;
    // 入库暂存数
    private Short inQty;
@@ -123,7 +123,7 @@
        basDevp.setLocType2((short) 0);  // 宽窄类型{0:未知,1:窄库位,2:宽库位}
        basDevp.setLocType3((short) 0);  // 轻重类型{0:未知,1:轻库位,2:重库位}
        basDevp.setLocType1(high != low && low ? (short) 1 : (short) 2);
        basDevp.setMaxWt((double) (weight !=null ?(int)weight : 0));
        basDevp.setMaxWt((double) (weight != 0 ?(int)weight : 0));
        return basDevp;
    }
src/main/java/com/zy/core/thread/LedThread.java
@@ -41,7 +41,7 @@
    // 显示器
    private StringBuffer stringBuffer = new StringBuffer();
    private List<LedCommand> commandList;
    private boolean ledMk = false;
    private StringBuffer errorMsg = new StringBuffer();
    public LedThread(Slave slave) {
@@ -84,7 +84,7 @@
    private void write(List<LedCommand> list) {
        commandList = list;
        this.ledMk = false;
        StringBuilder sb = new StringBuilder();
        for (LedCommand command : list) {
            sb.append(command.getTitle()).append("(").append(command.getWorkNo()).append(")").append("\n");
@@ -92,7 +92,9 @@
            sb.append("目标站:").append(command.getStaNo()).append("\n");
            if (!command.isEmptyMk()) {
                for (MatDto matDto : command.getMatDtos()) {
                    sb.append(matDto.getSpecs()).append("-").append(matDto.getBatch()).append("\n");
                    sb.append("物料编码:").append(matDto.getMatnr()).append("\n");
                    sb.append("数量:").append(matDto.getAnfme()).append("\n");
                    sb.append("规格:").append(matDto.getSpecs()).append("\n");
                }
            }
            sb.append("\n");
@@ -114,6 +116,7 @@
    private void error(String msg) {
        errorMsg.delete(0, errorMsg.length());
        errorMsg.append(msg);
        this.ledMk = false;
    }
    public void errorReset() {
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -314,6 +314,12 @@
                staProtocol.setHigh(status[6]);     // 高库位
                staProtocol.setLow(status[7]);      // 低库位
                //读取磅秤
                if (staProtocol.getSiteId() == 102){
                    resultWeight = siemensS7Net.Read("DB101.1272", (short) (4));
                    staProtocol.setWeight(siemensS7Net.getByteTransform().TransInt16(resultWeight.Content, 0));
                }
                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
                    staProtocol.setPakMk(true);
                }
@@ -322,7 +328,7 @@
            //条码扫描器
            ArrayList<Integer> barcodeList = getBarcodeList();
            OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.840", (short) (barcodeList.size() * 8));
            OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.602", (short) (barcodeList.size() * 8));
            if (result2.IsSuccess) {
                for (int i = 0; i < barcodeList.size(); i++) {
                    Integer barcodeId = barcodeList.get(i);
src/main/resources/application.yml
@@ -98,6 +98,13 @@
      row: 4
      bay: 1
      lev: 1
    # 堆垛机出库站点
    crnOutStn[1]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 103
      row: 3
      bay: 1
      lev: 1
  # plc
  devp[0]:
    id: 1
@@ -137,7 +144,7 @@
  # LED1
  led[0]:
    id: 121
    ip: 127.0.0.1
    ip: 10.10.10.133
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 102
@@ -145,7 +152,7 @@
  # LED2
  led[1]:
    id: 123
    ip: 127.0.0.1
    ip: 10.10.10.132
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 105
src/main/resources/mapper/LocMastMapper.xml
@@ -55,8 +55,8 @@
    </select>
    <select id="queryDemoLoc" resultMap="BaseResultMap">
        select top 1 * from asr_loc_mast where crn_no = #{crnNo} and loc_sts = 'O' and loc_type2 =#{locType2}
        ORDER BY NEWID()
        select top 1 * from asr_loc_mast where crn_no = #{crnNo} and loc_sts = 'O' and loc_type2 is null and lev1 in (3,4,5,6)
        ORDER BY lev1 asc,bay1 asc
    </select>
</mapper>
src/main/resources/mapper/WrkMastMapper.xml
@@ -169,6 +169,10 @@
        select * from dbo.asr_wrk_mast where crn_no=#{crnNo} and source_sta_no=#{sourceStaNo} and wrk_sts=11 and io_type>100 order by io_pri desc,io_time,wrk_no asc
    </select>
    <select id="selectPakOutStep11To2" resultMap="BaseResultMap">
        select * from dbo.asr_wrk_mast where crn_no=#{crnNo} and source_sta_no =#{sourceStaNo} and wrk_sts=11 and io_type>100 order by io_pri desc,io_time,wrk_no asc
    </select>
    <!--                                       入出库模式相关                                      -->
    <select id="selectWorkingPakin" resultMap="BaseResultMap">
        select top 1 * from dbo.asr_wrk_mast where wrk_sts in (2,3,4) and io_type != 11 and source_sta_no = #{sourceStaNo} order by io_time,wrk_no
src/main/webapp/static/js/console.map.js
@@ -1,9 +1,9 @@
mapInfo ={
    "mapName": "wcs",
    "rackCount": 8,
    "crnCount": 4,
    "rackCount": 4,
    "crnCount": 2,
    "stbCount": 120,
    "hpPosition": 0,
    "hpPosition": 1,
    "minBayNo": 2,
    "racks": [
        {
@@ -11,41 +11,41 @@
            "id": "rack1",
            "top": 160,
            "left": 500,
            "width": 800,
            "width": 1150,
            "height": 23,
            "minBayNo": 1,
            "maxBayNo": 26
            "minBayNo": 2,
            "maxBayNo": 35
        },
        {
            "type": "rack",
            "id": "rack2",
            "top": 210,
            "left": 500,
            "width": 800,
            "width": 1150,
            "height": 23,
            "minBayNo": 1,
            "maxBayNo": 27
            "minBayNo": 2,
            "maxBayNo": 35
        },
        {
            "type": "rack",
            "id": "rack3",
            "top": 300,
            "left": 500,
            "width": 800,
            "width": 1000,
            "height": 23,
            "minBayNo": 1,
            "maxBayNo": 35
            "minBayNo": 2,
            "maxBayNo": 26
        },
        {
            "type": "rack",
            "id": "rack4",
            "top": 350,
            "left": 500,
            "width": 800,
            "width": 1000,
            "height": 23,
            "minBayNo": 1,
            "maxBayNo": 35
        },
            "minBayNo": 2,
            "maxBayNo": 26
        }
    ],
    "rackDescs": [
        {
@@ -53,7 +53,7 @@
            "id": "lb_desc2",
            "text": "#4",
            "top": 160,
            "left": 460,
            "left": 1650,
            "width": 30,
            "height": 23
        },
@@ -62,7 +62,7 @@
            "id": "lb_desc3",
            "text": "#3",
            "top": 210,
            "left": 460,
            "left": 1650,
            "width": 30,
            "height": 23
        },
@@ -71,16 +71,16 @@
            "id": "lb_desc4",
            "text": "#2",
            "top": 300,
            "left": 460,
            "left": 1500,
            "width": 30,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc4",
            "id": "lb_desc5",
            "text": "#1",
            "top": 350,
            "left": 460,
            "left": 1500,
            "width": 30,
            "height": 23
        }
@@ -91,25 +91,7 @@
            "id": "crn-2",
            "text": "1",
            "top": 187,
            "left": 1250,
            "width": 100,
            "height": 22
        },
        {
            "type": "track",
            "id": "lb_track1",
            "text": "",
            "top": 197,
            "left": 500,
            "width": 800,
            "height": 2
        },
        {
            "type": "crane",
            "id": "crn-1",
            "text": "1",
            "top": 327,
            "left": 1250,
            "width": 100,
            "height": 22
        },
@@ -117,9 +99,27 @@
            "type": "track",
            "id": "lb_track2",
            "text": "",
            "top": 197,
            "left": 500,
            "width": 1150,
            "height": 2
        },
        {
            "type": "crane",
            "id": "crn-1",
            "text": "1",
            "top": 327,
            "left": 500,
            "width": 100,
            "height": 22
        },
        {
            "type": "track",
            "id": "lb_track1",
            "text": "",
            "top": 337,
            "left": 500,
            "width": 800,
            "width": 1000,
            "height": 2
        }
    ],
@@ -142,16 +142,16 @@
                    "width": 2900,
                    "height": 600,
                    "stns": [
                        { "type": "stn", "id": "site-105", "text": "105", "top": 130, "left": 1400, "width": 90, "height": 70 },
                        { "type": "stn", "id": "site-101", "text": "101", "top": 210, "left": 1500, "width": 90, "height": 23 },
                        { "type": "stn", "id": "site-102", "text": "102", "top": 210, "left": 1400, "width": 90, "height": 23 },
                        { "type": "stn", "id": "site-106", "text": "106", "top": 163, "left": 1301, "width": 90, "height": 23 },
                        { "type": "stn", "id": "site-103", "text": "103", "top": 210, "left": 1301, "width": 90, "height": 23 },
                        { "type": "stn", "id": "site-104", "text": "104", "top": 260, "left": 1400, "width": 90, "height": 70 },
                        { "type": "stn", "id": "site-105", "text": "105", "top": 130, "left": 300, "width": 90, "height": 70 },
                        { "type": "stn", "id": "site-101", "text": "101", "top": 210, "left": 200, "width": 90, "height": 23 },
                        { "type": "stn", "id": "site-102", "text": "102", "top": 210, "left": 300, "width": 90, "height": 23 },
                        { "type": "stn", "id": "site-106", "text": "106", "top": 163, "left": 400, "width": 90, "height": 23 },
                        { "type": "stn", "id": "site-103", "text": "103", "top": 210, "left": 400, "width": 90, "height": 23 },
                        { "type": "stn", "id": "site-104", "text": "104", "top": 260, "left": 300, "width": 90, "height": 70 }
                    ],
                    "barcode": []
                }
            ]
        }
    ]
}
}
src/main/webapp/views/crn.html
@@ -155,7 +155,7 @@
                    <span class="select-title">堆垛机号</span>
                    <div class="select-container" style="padding: 20px 0;">
                        <label><input type="radio" name="crnSelect" value="1" checked>&nbsp;1号堆垛机</label>
<!--                        <label><input type="radio" name="crnSelect" value="2">&nbsp;2号堆垛机</label>-->
                        <label><input type="radio" name="crnSelect" value="2">&nbsp;2号堆垛机</label>
<!--                        <label><input type="radio" name="crnSelect" value="3">&nbsp;3号堆垛机</label>-->
<!--                        <label><input type="radio" name="crnSelect" value="4">&nbsp;4号堆垛机</label>-->
                        <!--                        <label><input type="radio" name="crnSelect" value="5">&nbsp;5号堆垛机</label>-->