自动化立体仓库 - WCS系统
lty
2025-03-14 5c10ee9ab5cf4e147c33f0a015e9daf4eebd6c53
#初始化
11个文件已修改
2054 ■■■■ 已修改文件
pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 184 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/index.css 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/common.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/console.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/console.map.js 972 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/console.html 778 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/crn.html 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/index.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -185,7 +185,7 @@
    </dependencies>
    <build>
        <finalName>xgmFlwcs</finalName>
        <finalName>tzglwcs</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -408,10 +408,14 @@
                StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
                if(staProtocol == null) {
                    News.error("站点信息未获得");
                    continue;
                }
                // 尺寸检测异常
                boolean back = false;
                String errMsg = "";
                if (staProtocol.isFrontErr()) {
                if (!back && staProtocol.isFrontErr()) {
                    errMsg = "前超限";
                    back = true;
                }
@@ -1018,48 +1022,48 @@
                continue;
            }
            // 双深库位且浅库位有货,则需先对浅库位进行库位移转
            if (Utils.isDeepLoc(slaveProperties, wrkMast.getLocNo())) {
                News.warnNoLog("" + mark + " - 1" + " - 8" + " - 双深库位且浅库位有货,则需先对浅库位进行库位移转 : 开始执行 任务号={}", wrkMast.getWrkNo());
                String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getLocNo());
                LocMast shallowLoc = locMastService.selectById(shallowLocNo);
                // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!
                if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
                    News.warnNoLog("" + mark + " - 1" + " - 9" + " - // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!库位状态={}", shallowLoc.getLocSts());
                    WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                    if (null == waitWrkMast) {
                        News.error("" + mark + " - 1" + " - 10" + " - {}库位异常,未检索到相应工作档!", shallowLocNo);
                    } else {
                        waitWrkMast.setIoPri(15D);
                        waitWrkMast.setModiTime(new Date());
                        if (wrkMastMapper.updateById(waitWrkMast) == 0) {
                            News.error("" + mark + " - 1" + " - 11" + " - 调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo());
                        }
                        continue;
                    }
                } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
                    News.warnNoLog("" + mark + " - 1" + " - 12" + " - // F、D  库位状态={}", shallowLoc.getLocSts());
                    // 此标记避免多次执行移库任务
                    if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
                        wrkMast.setUpdMk("Y");
                        wrkMast.setIoPri(14D);
                        wrkMastMapper.updateById(wrkMast);
                        // 生成工作档,将浅库位移转到新的库位中
                        moveLocForDeepLoc(slave, shallowLoc, mark);
                        // 生成工作档、改变浅库位的源库/目标库 库位状态、下发堆垛机命令(立马执行)
//                        moveLocForDeepLocPakin(slave, shallowLoc, wrkMast);
                    }
                    continue;
                } else if (shallowLoc.getLocSts().equals("Q")) {
                    News.warnNoLog("" + mark + " - 1" + " - 13" + " - // Q  库位状态={}", shallowLoc.getLocSts());
                    WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                    if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
                        News.infoNoLog("" + mark + " - 1" + " - 14" + " - // F、D  工作状态(判断条件为==4)={}", waitWrkMast.getWrkSts());
                        continue;
                    }
                }
            }
//            // 双深库位且浅库位有货,则需先对浅库位进行库位移转
//            if (Utils.isDeepLoc(slaveProperties, wrkMast.getLocNo())) {
//                News.warnNoLog("" + mark + " - 1" + " - 8" + " - 双深库位且浅库位有货,则需先对浅库位进行库位移转 : 开始执行 任务号={}", wrkMast.getWrkNo());
//                String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getLocNo());
//                LocMast shallowLoc = locMastService.selectById(shallowLocNo);
//                // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!
//                if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
//                    News.warnNoLog("" + mark + " - 1" + " - 9" + " - // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!库位状态={}", shallowLoc.getLocSts());
//                    WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
//                    if (null == waitWrkMast) {
//                        News.error("" + mark + " - 1" + " - 10" + " - {}库位异常,未检索到相应工作档!", shallowLocNo);
//                    } else {
//                        waitWrkMast.setIoPri(15D);
//                        waitWrkMast.setModiTime(new Date());
//                        if (wrkMastMapper.updateById(waitWrkMast) == 0) {
//                            News.error("" + mark + " - 1" + " - 11" + " - 调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo());
//                        }
//                        continue;
//                    }
//
//                } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
//                    News.warnNoLog("" + mark + " - 1" + " - 12" + " - // F、D  库位状态={}", shallowLoc.getLocSts());
//                    // 此标记避免多次执行移库任务
//                    if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
//                        wrkMast.setUpdMk("Y");
//                        wrkMast.setIoPri(14D);
//                        wrkMastMapper.updateById(wrkMast);
//                        // 生成工作档,将浅库位移转到新的库位中
//                        moveLocForDeepLoc(slave, shallowLoc, mark);
//                        // 生成工作档、改变浅库位的源库/目标库 库位状态、下发堆垛机命令(立马执行)
////                        moveLocForDeepLocPakin(slave, shallowLoc, wrkMast);
//                    }
//                    continue;
//                } else if (shallowLoc.getLocSts().equals("Q")) {
//                    News.warnNoLog("" + mark + " - 1" + " - 13" + " - // Q  库位状态={}", shallowLoc.getLocSts());
//                    WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
//                    if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
//                        News.infoNoLog("" + mark + " - 1" + " - 14" + " - // F、D  工作状态(判断条件为==4)={}", waitWrkMast.getWrkSts());
//                        continue;
//                    }
//                }
//            }
            News.warnNoLog("" + mark + " - 1" + " - 15" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue()
                    , crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue()
                    , locMast.getRow1().shortValue(), locMast.getBay1().shortValue(), locMast.getLev1().shortValue());
@@ -1167,54 +1171,54 @@
                        break;
                    }
                    // 双深库位且浅库位有货,则需先对浅库位进行库位移转
                    if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
                        News.warnNoLog("" + mark + " - 2" + " - 6" + " - 双深库位且浅库位有货,则需先对浅库位进行库位移转 : 开始执行 任务号={}", wrkMast.getWrkNo());
                        String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
                        LocMast shallowLoc = locMastService.selectById(shallowLocNo);
                        // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!
                        if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
                            News.warnNoLog("" + mark + " - 2" + " - 7" + " - // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!库位状态={}", shallowLoc.getLocSts());
                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                            if (null == waitWrkMast) {
                                News.error("{}库位异常,未检索到相应工作档!", shallowLocNo);
                            } else {
                                if (waitWrkMast.getWrkSts() == 11) {
                                    waitWrkMast.setIoPri(15D);
                                    waitWrkMast.setModiTime(new Date());
                                    if (wrkMastMapper.updateById(waitWrkMast) == 0) {
                                        News.error("" + mark + " - 2" + " - 8" + " - 调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo());
                                    }
                                    continue;
                                } else {
                                }
                            }
                        } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
                            News.warnNoLog("" + mark + " - 2" + " - 9" + " - // F、D  库位状态={}", shallowLoc.getLocSts());
//                    // 双深库位且浅库位有货,则需先对浅库位进行库位移转
//                    if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
//                        News.warnNoLog("" + mark + " - 2" + " - 6" + " - 双深库位且浅库位有货,则需先对浅库位进行库位移转 : 开始执行 任务号={}", wrkMast.getWrkNo());
//                        String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
//                        LocMast shallowLoc = locMastService.selectById(shallowLocNo);
//                        // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!
//                        if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
//                            News.warnNoLog("" + mark + " - 2" + " - 7" + " - // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!库位状态={}", shallowLoc.getLocSts());
//                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                            //2022-08-16 modify,不根据updmk标记移库任务(容易被取消导致堵塞),查询工作档是否存在任务
                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
                            // 此标记避免多次执行移库任务
//                            if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())
//                                || Cools.isEmpty(waitWrkMast)) {
                            if (Cools.isEmpty(waitWrkMast)) {
                                wrkMast.setUpdMk("Y");
                                wrkMastMapper.updateById(wrkMast);
                                // 生成工作档,将浅库位移转到新的库位中
                                moveLocForDeepLoc(slave, shallowLoc, mark);
                            }
                            News.error("{}任务出库失败,浅库位堵塞!浅库位号:{}", wrkMast.getWrkNo(), shallowLocNo);
                            continue;
                        } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) {
                            News.warnNoLog("" + mark + " - 2" + " - 10" + " - // Q、S  库位状态={}", shallowLoc.getLocSts());
                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
                            if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
                                News.infoNoLog("" + mark + " - 2" + " - 11" + " - // F、D  工作状态(判断条件为==4)={}", waitWrkMast.getWrkSts());
                                continue;
                            }
                        }
                    }
//                            if (null == waitWrkMast) {
//                                News.error("{}库位异常,未检索到相应工作档!", shallowLocNo);
//                            } else {
//                                if (waitWrkMast.getWrkSts() == 11) {
//                                    waitWrkMast.setIoPri(15D);
//                                    waitWrkMast.setModiTime(new Date());
//                                    if (wrkMastMapper.updateById(waitWrkMast) == 0) {
//                                        News.error("" + mark + " - 2" + " - 8" + " - 调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo());
//                                    }
//                                    continue;
//                                } else {
//
//                                }
//                            }
//                        } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
//                            News.warnNoLog("" + mark + " - 2" + " - 9" + " - // F、D  库位状态={}", shallowLoc.getLocSts());
////                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
//                            //2022-08-16 modify,不根据updmk标记移库任务(容易被取消导致堵塞),查询工作档是否存在任务
//                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
//                            // 此标记避免多次执行移库任务
////                            if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())
////                                || Cools.isEmpty(waitWrkMast)) {
//                            if (Cools.isEmpty(waitWrkMast)) {
//                                wrkMast.setUpdMk("Y");
//                                wrkMastMapper.updateById(wrkMast);
//                                // 生成工作档,将浅库位移转到新的库位中
//                                moveLocForDeepLoc(slave, shallowLoc, mark);
//                            }
//                            News.error("{}任务出库失败,浅库位堵塞!浅库位号:{}", wrkMast.getWrkNo(), shallowLocNo);
//                            continue;
//                        } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) {
//                            News.warnNoLog("" + mark + " - 2" + " - 10" + " - // Q、S  库位状态={}", shallowLoc.getLocSts());
//                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
//                            if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
//                                News.infoNoLog("" + mark + " - 2" + " - 11" + " - // F、D  工作状态(判断条件为==4)={}", waitWrkMast.getWrkSts());
//                                continue;
//                            }
//                        }
//                    }
                    // 已经存在吊车执行任务时,则过滤
                    if (wrkMastMapper.selectWorking(slave.getId()) != null) {
src/main/java/com/zy/core/MainProcess.java
@@ -78,7 +78,7 @@
                    // 其他  ===>> LED显示器复位,显示默认信息
                    mainService.ledReset();
                    mainService.outOfDevp(11);
//                    mainService.outOfDevp(11);
//                    if (i>10){
//                        //空托盘自动出库
src/main/resources/application.yml
@@ -8,7 +8,7 @@
    name: @pom.build.finalName@
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://192.168.11.30:1433;databasename=xgmFlasrs
    url: jdbc:sqlserver://127.0.0.1:1433;databasename=tzglasrs
    username: sa
    password: sa@123
  mvc:
@@ -34,7 +34,7 @@
  enable: false
wms:
  url: 192.168.11.30:8080/xgmFlwms
  url: 127.0.0.1:8080/tzglwms
# 下位机配置
wcs-slave:
@@ -158,6 +158,44 @@
      row: 5
      bay: 42
      lev: 1
  # 堆垛机4
  crn[3]:
    id: 4
    ip: 10.10.10.141
    port: 102
    rack: 0
    slot: 0
    # 偏移量,当堆垛机站点列号=1时,偏移量=2
    offset: 0
    demo: false
    # 堆垛机入库站点
    crnInStn[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 204
      row: 6
      bay: 1
      lev: 1
    # 堆垛机出库站点
    crnOutStn[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 208
      row: 5
      bay: 1
      lev: 1
    # 堆垛机入库站点
    crnInStn[1]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 104
      row: 6
      bay: 42
      lev: 1
    # 堆垛机出库站点
    crnOutStn[1]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 108
      row: 5
      bay: 42
      lev: 1
  # 输送线1
  devp[0]:
    id: 1
src/main/webapp/static/css/index.css
@@ -34,7 +34,7 @@
    height: 40%;
    line-height: 90px;
    position: fixed;
    top: 50%;
    top: 60%;
    transform: translateY(-50%);
}
.nav ul {
src/main/webapp/static/js/common.js
@@ -1,4 +1,4 @@
var baseUrl = "/xgmFlwcs";
var baseUrl = "/tzglwcs";
// 赋值
function setVal(el, val) {
src/main/webapp/static/js/console.js
@@ -129,7 +129,7 @@
        let floor = areas[i].text
        let barcodes = areas[i].barcode
        floorId = areas[i].id
        var position = (i+1)*100
        var position = (i+1)*50 + 400
        floorBtn =
            "<button class='floorBtn btn-16' onclick='changFloor("+i+")' style='top: "+position+"px;'>" + floor +"</button>"
        if (mapInfo.areas[0].floors.length == 1) {
src/main/webapp/static/js/console.map.js
@@ -1,553 +1,435 @@
mapInfo ={
    "mapName": "xgmFlwcs",
    "rackCount": 6,
    "crnCount": 3,
    "stbCount": 48,
    "mapName": "tzglwcs",
    "rackCount": 8,
    "crnCount": 4,
    "stbCount": 120,
    "hpPosition": 0,
    "minBayNo": 2,
    "floors": 1,
    "racks": [{
        "type": "rack",
        "id": "rack5",
        "top": 448,
        "left": 447,
        "width": 845,
        "height": 20,
        "minBayNo": 2,
        "maxBayNo": 41
    }, {
        "type": "rack",
        "id": "rack6",
        "top": 500,
        "left": 447,
        "width": 845,
        "height": 20,
        "minBayNo": 2,
        "maxBayNo": 41
    }, {
        "type": "rack",
        "id": "rack4",
        "top": 427,
        "left": 447,
        "width": 845,
        "height": 20,
        "minBayNo": 2,
        "maxBayNo": 41
    }, {
        "type": "rack",
        "id": "rack1",
        "top": 308,
        "left": 447,
        "width": 845,
        "height": 20,
        "minBayNo": 2,
        "maxBayNo": 41
    }, {
        "type": "rack",
        "id": "rack2",
        "top": 356,
        "left": 447,
        "width": 845,
        "height": 20,
        "minBayNo": 2,
        "maxBayNo": 41
    }, {
        "type": "rack",
        "id": "rack3",
        "top": 377,
        "left": 447,
        "width": 845,
        "height": 20,
        "minBayNo": 2,
        "maxBayNo": 41
    }],
    "rackDescs": [{
        "type": "rackDescs",
        "id": "lb_desc1",
        "text": "#1",
        "top": 273,
        "left": 1217,
        "width": 30,
        "height": 23
    }, {
        "type": "rackDescs",
        "id": "lb_desc2",
        "text": "#6",
        "top": 551,
        "left": 1218,
        "width": 33,
        "height": 23
    }],
    "crns": [{
        "type": "track",
        "id": "lb_track3",
        "text": "",
        "top": 485,
        "left": 408,
        "width": 900,
        "height": 2
    }, {
        "type": "crane",
        "id": "crn-3",
        "text": "3",
        "top": 474,
        "left": 866,
        "width": 93,
        "height": 22
    }, {
        "type": "track",
        "id": "lb_track2",
        "text": "",
        "top": 412,
        "left": 408,
        "width": 900,
        "height": 2
    }, {
        "type": "crane",
        "id": "crn-2",
        "text": "2",
        "top": 402,
        "left": 866,
        "width": 93,
        "height": 22
    }, {
        "type": "track",
        "id": "lb_track1",
        "text": "",
        "top": 339,
        "left": 408,
        "width": 900,
        "height": 2
    }, {
        "type": "crane",
        "id": "crn-1",
        "text": "1",
        "top": 329,
        "left": 866,
        "width": 93,
        "height": 22
    }],
    "areas": [{
        "type": "Control_floor",
        "id": "tabControl_floor1",
        "text": "楼层",
        "top": 66,
        "left": 77,
        "width": 1537,
        "height": 598,
        "floors": [{
            "type": "floor",
            "id": "page_floor1",
            "text": "1F",
            "top": 4,
            "left": 22,
            "width": 1511,
            "height": 590,
            "stns": [{
                "type": "stn",
                "id": "site-221",
                "text": "221",
                "top": 311,
                "left": 284,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-222",
                "text": "222",
                "top": 311,
                "left": 365,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-217",
                "text": "217",
                "top": 357,
                "left": 284,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-223",
                "text": "223",
                "top": 290,
                "left": 203,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-220",
                "text": "220",
                "top": 311,
                "left": 203,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-200",
                "text": "200",
                "top": 542,
                "left": 203,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-214",
                "text": "214",
                "top": 378,
                "left": 284,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-213",
                "text": "213",
                "top": 378,
                "left": 203,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-215",
                "text": "215",
                "top": 378,
                "left": 365,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-211",
                "text": "211",
                "top": 427,
                "left": 365,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-210",
                "text": "210",
                "top": 427,
                "left": 284,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-212",
                "text": "212",
                "top": 399,
                "left": 203,
                "width": 80,
                "height": 27
            }, {
                "type": "stn",
                "id": "site-208",
                "text": "208",
                "top": 448,
                "left": 365,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-207",
                "text": "207",
                "top": 448,
                "left": 284,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-209",
                "text": "209",
                "top": 427,
                "left": 203,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-205",
                "text": "205",
                "top": 469,
                "left": 203,
                "width": 80,
                "height": 30
            }, {
                "type": "stn",
                "id": "site-204",
                "text": "204",
                "top": 500,
                "left": 365,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-206",
                "text": "206",
                "top": 448,
                "left": 203,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-202",
                "text": "202",
                "top": 500,
                "left": 203,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-201",
                "text": "201",
                "top": 521,
                "left": 203,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-203",
                "text": "203",
                "top": 500,
                "left": 284,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-219",
                "text": "219",
                "top": 332,
                "left": 203,
                "width": 80,
                "height": 24
            }, {
                "type": "stn",
                "id": "site-216",
                "text": "216",
                "top": 357,
                "left": 203,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-218",
                "text": "218",
                "top": 357,
                "left": 365,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-121",
                "text": "121",
                "top": 311,
                "left": 1375,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-122",
                "text": "122",
                "top": 311,
                "left": 1294,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-117",
                "text": "117",
                "top": 357,
                "left": 1375,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-123",
                "text": "123",
                "top": 290,
                "left": 1456,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-120",
                "text": "120",
                "top": 311,
                "left": 1456,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-100",
                "text": "100",
                "top": 542,
                "left": 1456,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-114",
                "text": "114",
                "top": 378,
                "left": 1375,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-113",
                "text": "113",
                "top": 378,
                "left": 1456,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-115",
                "text": "115",
                "top": 378,
                "left": 1294,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-111",
                "text": "111",
                "top": 427,
                "left": 1294,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-110",
                "text": "110",
                "top": 427,
                "left": 1375,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-112",
                "text": "112",
                "top": 399,
                "left": 1456,
                "width": 80,
                "height": 27
            }, {
                "type": "stn",
                "id": "site-108",
                "text": "108",
                "top": 448,
                "left": 1294,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-107",
                "text": "107",
                "top": 448,
                "left": 1375,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-109",
                "text": "109",
                "top": 427,
                "left": 1456,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-105",
                "text": "105",
                "top": 469,
                "left": 1456,
                "width": 80,
                "height": 30
            }, {
                "type": "stn",
                "id": "site-104",
                "text": "104",
                "top": 500,
                "left": 1294,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-106",
                "text": "106",
                "top": 448,
                "left": 1456,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-102",
                "text": "102",
                "top": 500,
                "left": 1456,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-101",
                "text": "101",
                "top": 521,
                "left": 1456,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-103",
                "text": "103",
                "top": 500,
                "left": 1375,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-119",
                "text": "119",
                "top": 332,
                "left": 1456,
                "width": 80,
                "height": 24
            }, {
                "type": "stn",
                "id": "site-116",
                "text": "116",
                "top": 357,
                "left": 1456,
                "width": 80,
                "height": 20
            }, {
                "type": "stn",
                "id": "site-118",
                "text": "118",
                "top": 357,
                "left": 1294,
                "width": 80,
                "height": 20
            }],
            "barcode":[
    "racks": [
        {
            "type": "rack",
            "id": "rack1",
            "top": 80,
            "left": 140,
            "width": 1600,
            "height": 23,
            "minBayNo": 2,
            "maxBayNo": 120
        },
        {
            "type": "rack",
            "id": "rack2",
            "top": 130,
            "left": 140,
            "width": 1600,
            "height": 23,
            "minBayNo": 2,
            "maxBayNo": 120
        },
        {
            "type": "rack",
            "id": "rack3",
            "top": 160,
            "left": 140,
            "width": 1600,
            "height": 23,
            "minBayNo": 2,
            "maxBayNo": 120
        },
        {
            "type": "rack",
            "id": "rack4",
            "top": 210,
            "left": 140,
            "width": 1600,
            "height": 23,
            "minBayNo": 2,
            "maxBayNo": 120
        },
        {
            "type": "rack",
            "id": "rack5",
            "top": 240,
            "left": 140,
            "width": 1600,
            "height": 23,
            "minBayNo": 2,
            "maxBayNo": 120
        },
        {
            "type": "rack",
            "id": "rack6",
            "top": 290,
            "left": 140,
            "width": 1600,
            "height": 23,
            "minBayNo": 2,
            "maxBayNo": 120
        },
        {
            "type": "rack",
            "id": "rack7",
            "top": 320,
            "left": 140,
            "width": 1600,
            "height": 23,
            "minBayNo": 2,
            "maxBayNo": 120
        },
        {
            "type": "rack",
            "id": "rack8",
            "top": 370,
            "left": 140,
            "width": 1600,
            "height": 23,
            "minBayNo": 2,
            "maxBayNo": 120
        }
    ],
    "rackDescs": [
        {
            "type": "rackDescs",
            "id": "lb_desc1",
            "text": "#1",
            "top": 80,
            "left": 1860,
            "width": 30,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc2",
            "text": "#2",
            "top": 130,
            "left": 1860,
            "width": 30,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc3",
            "text": "#3",
            "top": 160,
            "left": 1860,
            "width": 30,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc4",
            "text": "#4",
            "top": 210,
            "left": 1860,
            "width": 30,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc5",
            "text": "#5",
            "top": 240,
            "left": 1860,
            "width": 30,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc6",
            "text": "#6",
            "top": 290,
            "left": 1860,
            "width": 30,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc7",
            "text": "#7",
            "top": 320,
            "left": 1860,
            "width": 30,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc8",
            "text": "#8",
            "top": 370,
            "left": 1860,
            "width": 30,
            "height": 23
        },
    ],
    "crns": [
        {
            "type": "crane",
            "id": "crn-1",
            "text": "1",
            "top": 110,
            "left": 1550,
            "width": 100,
            "height": 22
        },
        {
            "type": "crane",
            "id": "crn-2",
            "text": "2",
            "top": 190,
            "left": 1550,
            "width": 100,
            "height": 22
        },
        {
            "type": "crane",
            "id": "crn-3",
            "text": "3",
            "top": 270,
            "left": 1550,
            "width": 100,
            "height": 22
        },
        {
            "type": "crane",
            "id": "crn-4",
            "text": "4",
            "top": 350,
            "left": 1550,
            "width": 100,
            "height": 22
        },
        {
            "type": "track",
            "id": "lb_track1",
            "text": "",
            "top": 117,
            "left": 140,
            "width": 1600,
            "height": 2
        },
        {
            "type": "track",
            "id": "lb_track2",
            "text": "",
            "top": 197,
            "left": 140,
            "width": 1600,
            "height": 2
        },
        {
            "type": "track",
            "id": "lb_track3",
            "text": "",
            "top": 277,
            "left": 140,
            "width": 1600,
            "height": 2
        },
        {
            "type": "track",
            "id": "lb_track4",
            "text": "",
            "top": 357,
            "left": 140,
            "width": 1600,
            "height": 2
        }
    ],
    "areas": [
        {
            "type": "Control_floor",
            "id": "tabControl_floor1",
            "text": "楼层",
            "top": 50,
            "left": 50,
            "width": 2900,
            "height": 600,
            "floors": [
                {
                    "type": "barcode",
                    "id": "barcode-1",
                    "text": "",
                    "top": 522,
                    "left": 1370,
                    "width": 80,
                    "height": 20
                    "type": "floor",
                    "id": "page_floor1",
                    "text": "1F",
                    "top": 0,
                    "left": 0,
                    "width": 2900,
                    "height": 600,
                    "stns": [
                        { "type": "stn", "id": "site-100", "text": "100", "top": 80, "left": 94, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-101", "text": "101", "top": 80, "left": 52, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-102", "text": "102", "top": 80, "left": 10, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-103", "text": "103", "top": 80, "left": 1742, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-104", "text": "104", "top": 80, "left": 1784, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-105", "text": "105", "top": 80, "left": 1826, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-106", "text": "106", "top": 130, "left": 94, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-107", "text": "107", "top": 130, "left": 52, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-108", "text": "108", "top": 130, "left": 10, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-109", "text": "109", "top": 130, "left": 1742, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-110", "text": "110", "top": 130, "left": 1784, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-111", "text": "111", "top": 130, "left": 1826, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-112", "text": "112", "top": 160, "left": 94, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-113", "text": "113", "top": 160, "left": 52, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-114", "text": "114", "top": 160, "left": 10, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-115", "text": "115", "top": 160, "left": 1742, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-116", "text": "116", "top": 160, "left": 1784, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-117", "text": "117", "top": 160, "left": 1826, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-118", "text": "118", "top": 240, "left": 94, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-119", "text": "119", "top": 240, "left": 52, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-120", "text": "120", "top": 240, "left": 10, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-121", "text": "121", "top": 240, "left": 1742, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-122", "text": "122", "top": 240, "left": 1784, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-123", "text": "123", "top": 240, "left": 1826, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-124", "text": "124", "top": 320, "left": 94, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-125", "text": "125", "top": 320, "left": 52, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-126", "text": "126", "top": 320, "left": 10, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-127", "text": "127", "top": 320, "left": 1742, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-128", "text": "128", "top": 320, "left": 1784, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-129", "text": "129", "top": 320, "left": 1826, "width": 40, "height": 23 }
                    ],
                    "barcode": []
                },
                {
                    "type": "barcode",
                    "id": "barcode-2",
                    "text": "",
                    "top": 522,
                    "left": 285,
                    "width": 80,
                    "height": 20
                    "type": "floor",
                    "id": "page_floor2",
                    "text": "2F",
                    "top": 0,
                    "left": 0,
                    "width": 2900,
                    "height": 600,
                    "stns": [
                        { "type": "stn", "id": "site-200", "text": "200", "top": 80, "left": 94, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-201", "text": "201", "top": 80, "left": 52, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-202", "text": "202", "top": 80, "left": 10, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-203", "text": "203", "top": 80, "left": 1742, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-204", "text": "204", "top": 80, "left": 1784, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-205", "text": "205", "top": 80, "left": 1826, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-206", "text": "206", "top": 130, "left": 94, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-207", "text": "207", "top": 130, "left": 52, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-208", "text": "208", "top": 130, "left": 10, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-209", "text": "209", "top": 130, "left": 1742, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-210", "text": "210", "top": 130, "left": 1784, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-211", "text": "211", "top": 130, "left": 1826, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-212", "text": "212", "top": 160, "left": 94, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-213", "text": "213", "top": 160, "left": 52, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-214", "text": "214", "top": 160, "left": 10, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-215", "text": "215", "top": 160, "left": 1742, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-216", "text": "216", "top": 160, "left": 1784, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-217", "text": "217", "top": 160, "left": 1826, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-218", "text": "218", "top": 240, "left": 94, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-219", "text": "219", "top": 240, "left": 52, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-220", "text": "220", "top": 240, "left": 10, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-221", "text": "221", "top": 240, "left": 1742, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-222", "text": "222", "top": 240, "left": 1784, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-223", "text": "223", "top": 240, "left": 1826, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-224", "text": "224", "top": 320, "left": 94, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-225", "text": "225", "top": 320, "left": 52, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-226", "text": "226", "top": 320, "left": 10, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-227", "text": "227", "top": 320, "left": 1742, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-228", "text": "228", "top": 320, "left": 1784, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-229", "text": "229", "top": 320, "left": 1826, "width": 40, "height": 23 }
                    ],
                    "barcode": []
                },
                {
                    "type": "floor",
                    "id": "page_floor3",
                    "text": "3F",
                    "top": 0,
                    "left": 0,
                    "width": 2900,
                    "height": 600,
                    "stns": [
                        // { "type": "stn", "id": "site-300", "text": "300", "top": 80, "left": 94, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-301", "text": "301", "top": 80, "left": 52, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-302", "text": "302", "top": 80, "left": 10, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-303", "text": "303", "top": 80, "left": 1742, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-304", "text": "304", "top": 80, "left": 1784, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-305", "text": "305", "top": 80, "left": 1826, "width": 40, "height": 23 },
                        //
                        // { "type": "stn", "id": "site-306", "text": "306", "top": 130, "left": 94, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-307", "text": "307", "top": 130, "left": 52, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-308", "text": "308", "top": 130, "left": 10, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-309", "text": "309", "top": 130, "left": 1742, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-310", "text": "310", "top": 130, "left": 1784, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-311", "text": "311", "top": 130, "left": 1826, "width": 40, "height": 23 },
                        //
                        // { "type": "stn", "id": "site-312", "text": "312", "top": 160, "left": 94, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-313", "text": "313", "top": 160, "left": 52, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-314", "text": "314", "top": 160, "left": 10, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-315", "text": "315", "top": 160, "left": 1742, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-316", "text": "316", "top": 160, "left": 1784, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-317", "text": "317", "top": 160, "left": 1826, "width": 40, "height": 23 },
                        //
                        // { "type": "stn", "id": "site-318", "text": "318", "top": 240, "left": 94, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-319", "text": "319", "top": 240, "left": 52, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-320", "text": "320", "top": 240, "left": 10, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-321", "text": "321", "top": 240, "left": 1742, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-322", "text": "322", "top": 240, "left": 1784, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-323", "text": "323", "top": 240, "left": 1826, "width": 40, "height": 23 },
                        //
                        // { "type": "stn", "id": "site-324", "text": "324", "top": 320, "left": 94, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-325", "text": "325", "top": 320, "left": 52, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-326", "text": "326", "top": 320, "left": 10, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-327", "text": "327", "top": 320, "left": 1742, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-328", "text": "328", "top": 320, "left": 1784, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-329", "text": "329", "top": 320, "left": 1826, "width": 40, "height": 23 }
                    ],
                    "barcode": []
                },
                {
                    "type": "floor",
                    "id": "page_floor4",
                    "text": "4F",
                    "top": 0,
                    "left": 0,
                    "width": 2900,
                    "height": 600,
                    "stns": [
                        { "type": "stn", "id": "site-400", "text": "400", "top": 80, "left": 94, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-401", "text": "401", "top": 80, "left": 52, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-402", "text": "402", "top": 80, "left": 10, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-403", "text": "403", "top": 80, "left": 1742, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-404", "text": "404", "top": 80, "left": 1784, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-405", "text": "405", "top": 80, "left": 1826, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-406", "text": "406", "top": 130, "left": 94, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-407", "text": "407", "top": 130, "left": 52, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-408", "text": "408", "top": 130, "left": 10, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-409", "text": "409", "top": 130, "left": 1742, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-410", "text": "410", "top": 130, "left": 1784, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-411", "text": "411", "top": 130, "left": 1826, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-412", "text": "412", "top": 160, "left": 94, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-413", "text": "413", "top": 160, "left": 52, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-414", "text": "414", "top": 160, "left": 10, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-415", "text": "415", "top": 160, "left": 1742, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-416", "text": "416", "top": 160, "left": 1784, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-417", "text": "417", "top": 160, "left": 1826, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-418", "text": "418", "top": 240, "left": 94, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-419", "text": "419", "top": 240, "left": 52, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-420", "text": "420", "top": 240, "left": 10, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-421", "text": "421", "top": 240, "left": 1742, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-422", "text": "422", "top": 240, "left": 1784, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-423", "text": "423", "top": 240, "left": 1826, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-424", "text": "424", "top": 320, "left": 94, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-425", "text": "425", "top": 320, "left": 52, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-426", "text": "426", "top": 320, "left": 10, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-427", "text": "427", "top": 320, "left": 1742, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-428", "text": "428", "top": 320, "left": 1784, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-429", "text": "429", "top": 320, "left": 1826, "width": 40, "height": 23 }
                    ],
                    "barcode": []
                }
            ]
        }]
    }]
}
        }
    ]
}
src/main/webapp/views/console.html
@@ -14,318 +14,318 @@
</head>
<body>
    <div id="main">
        <div class="head">
            <div class="head-left">
                <h1>自动仓库WCS监控图</h1>
                <h6>AUTOMATIC WAREHOUSE WCS MONITORING DIAGRAM</h6>
            </div>
            <div class="head-right">
                <img src="../static/images/zy-logo.png" alt="中扬" height="44" width="80">
            </div>
<div id="main">
    <div class="head">
        <div class="head-left">
            <h1>自动仓库WCS监控图</h1>
            <h6>AUTOMATIC WAREHOUSE WCS MONITORING DIAGRAM</h6>
        </div>
        <!-- 货架 + 堆垛机 + 入库站点 -->
        <div class="main-part">
        <div class="head-right">
            <!--                <img src="../static/images/zy-logo.png" alt="徐工汉云" height="44" width="80">-->
        </div>
    </div>
    <!-- 货架 + 堆垛机 + 入库站点 -->
    <div class="main-part">
    </div>
    <div id="body">
        <!-- 总开关 -->
        <div class="system-state">
            <div class="body-head">总开关</div>
            <div class="switch">
                <div id="system-icon" class="system-icon-open" onclick="systemSwitch()"></div>
                <div class="switch_r">
                    <p>系统状态</p>
                    <p id="system-run-desc">系统运行中</p>
                </div>
            </div>
        </div>
        <div id="body">
            <!-- 总开关 -->
            <div class="system-state">
                <div class="body-head">总开关</div>
                <div class="switch">
                    <div id="system-icon" class="system-icon-open" onclick="systemSwitch()"></div>
                    <div class="switch_r">
                        <p>系统状态</p>
                        <p id="system-run-desc">系统运行中</p>
                    </div>
        <!-- 堆垛机状态 -->
        <div class="machine-status">
            <div class="body-head">堆垛机状态</div>
            <div class="state">
                <span>堆垛机 1</span>
                <span class="state-ss machine-put-flag    ">入库</span>
            </div>
            <div class="state">
                <span>堆垛机 2</span>
                <span class="state-ss machine-auto-flag    ">自动</span>
            </div>
            <div class="button"><span>所有状态</span></div>
            <div class="button item-group">
                <span class="machine-put-flag">入库</span>
                <span class="machine-take-flag">出库</span>
                <span class="machine-stock-move-flag">库到库</span>
                <span class="machine-site-move-flag">站到站</span>
                <span class="machine-p-move-flag">PToP</span>
                <span class="machine-error-flag">异常</span>
                <span class="machine-auto-flag">自动</span>
                <span class="machine-unauto-flag">非自动/手动</span>
            </div>
        </div>
        <div class="line-status">
            <div class="body-head">输送线状态</div>
            <div class="state states">
                <span>运输线总数</span>
                <span id="line-total" class="line-ss"></span>
            </div>
            <div class="button"><span>所有状态</span></div>
            <div class="button item-group">
                <span class="site-auto-run-id">自动+有物+ID</span>
                <span class="site-auto-run">自动+有物</span>
                <span class="site-auto-id">自动+ID</span>
                <span class="site-auto">自动</span>
                <span class="site-unauto">非自动/手动</span>
            </div>
        </div>
        <div class="bar-code">
            <div class="body-head" id="code">条码扫描器</div>
            <div class="tablebox">
                <div class="table-head">
                    <li><span>条码名称</span><span class="right">扫码时间</span></li>
                </div>
                <div id="barcode1" class="table-body">
                </div>
            </div>
            <div class="tablebox">
                <div class="table-head">
                    <li><span>条码名称</span><span class="right">扫码时间</span></li>
                </div>
                <div id="barcode2" class="table-body">
                </div>
            </div>
            <div class="tablebox">
                <div class="table-head">
                    <li><span>条码名称</span><span class="right">扫码时间</span></li>
                </div>
                <div id="barcode3" class="table-body">
                </div>
            </div>
        </div>
    </div>
    <!-- 堆垛机弹窗 -->
    <div id="crnWindow" style="display: none;" class="animate__animated animate__fadeIn">
        <div id="crnWindow-head">
            <div class='detailed'></div>
            <button></button>
        </div>
        <form>
            <!-- 堆垛机号 -->
            <div class="form-item">
                <div class="form-item-label" style>
                    <span>堆垛机号:</span>
                </div>
                <div class="form-item-input">
                    <input type="text" name="crnNo" value="">
                </div>
            </div>
            <!-- 工作号 -->
            <div class="form-item">
                <div class="form-item-label">
                    <span>工作号:</span>
                </div>
                <div class="form-item-input">
                    <input type="text" name="workNo" value="">
                </div>
            </div>
            <!-- 站源 -->
            <div class="form-item">
                <div class="form-item-label">
                    <span>站源:</span>
                </div>
                <div class="form-item-input">
                    <input type="text" name="sourceStaNo" value="">
                </div>
            </div>
            <!-- 目标站 -->
            <div class="form-item">
                <div class="form-item-label">
                    <span>目标站:</span>
                </div>
                <div class="form-item-input">
                    <input type="text" name="staNo" value="">
                </div>
            </div>
            <!-- 工作状态 -->
            <div class="form-item">
                <div class="form-item-label">
                    <span>工作状态:</span>
                </div>
                <div class="form-item-input">
                    <input type="text" name="wrkSts" value="">
                </div>
            </div>
            <!-- 出入类型 -->
            <div class="form-item">
                <div class="form-item-label">
                    <span>出入类型:</span>
                </div>
                <div class="form-item-input">
                    <input type="text" name="ioType" value="">
                </div>
            </div>
            <!-- 源库位 -->
            <div class="form-item">
                <div class="form-item-label">
                    <span>源库位:</span>
                </div>
                <div class="form-item-input">
                    <input type="text" name="sourceLocNo" value="">
                </div>
            </div>
            <!-- 目标库位 -->
            <div class="form-item">
                <div class="form-item-label">
                    <span>目标库位:</span>
                </div>
                <div class="form-item-input">
                    <input type="text" name="locNo" value="">
                </div>
            </div>
            <!-- 堆垛机状态 -->
            <div class="machine-status">
                <div class="body-head">堆垛机状态</div>
                <div class="state">
                    <span>堆垛机 1</span>
                    <span class="state-ss machine-put-flag    ">入库</span>
            <div class="form-item">
                <div class="form-item-label">
                    <span>堆垛机状态:</span>
                </div>
                <div class="state">
                    <span>堆垛机 2</span>
                    <span class="state-ss machine-auto-flag    ">自动</span>
                </div>
                <div class="button"><span>所有状态</span></div>
                <div class="button item-group">
                    <span class="machine-put-flag">入库</span>
                    <span class="machine-take-flag">出库</span>
                    <span class="machine-stock-move-flag">库到库</span>
                    <span class="machine-site-move-flag">站到站</span>
                    <span class="machine-p-move-flag">PToP</span>
                    <span class="machine-error-flag">异常</span>
                    <span class="machine-auto-flag">自动</span>
                    <span class="machine-unauto-flag">非自动/手动</span>
                <div class="form-item-input">
                    <input type="text" name="crnStatus" value="">
                </div>
            </div>
            <div class="line-status">
                <div class="body-head">输送线状态</div>
                <div class="state states">
                    <span>运输线总数</span>
                    <span id="line-total" class="line-ss"></span>
            <!-- 异常 -->
            <div class="form-item">
                <div class="form-item-label">
                    <span>异常:</span>
                </div>
                <div class="button"><span>所有状态</span></div>
                <div class="button item-group">
                    <span class="site-auto-run-id">自动+有物+ID</span>
                    <span class="site-auto-run">自动+有物</span>
                    <span class="site-auto-id">自动+ID</span>
                    <span class="site-auto">自动</span>
                    <span class="site-unauto">非自动/手动</span>
                <div class="form-item-input">
                    <input type="text" name="error" value="">
                </div>
            </div>
            <div class="bar-code">
                <div class="body-head" id="code">条码扫描器</div>
                <div class="tablebox">
                    <div class="table-head">
                        <li><span>条码名称</span><span class="right">扫码时间</span></li>
                    </div>
                    <div id="barcode1" class="table-body">
                    </div>
                </div>
                <div class="tablebox">
                    <div class="table-head">
                        <li><span>条码名称</span><span class="right">扫码时间</span></li>
                    </div>
                    <div id="barcode2" class="table-body">
                    </div>
                </div>
                <div class="tablebox">
                    <div class="table-head">
                        <li><span>条码名称</span><span class="right">扫码时间</span></li>
                    </div>
                    <div id="barcode3" class="table-body">
                    </div>
                </div>
            </div>
        </div>
        <!-- 堆垛机弹窗 -->
        <div id="crnWindow" style="display: none;" class="animate__animated animate__fadeIn">
            <div id="crnWindow-head">
                <div class='detailed'></div>
                <button></button>
            </div>
            <form>
                <!-- 堆垛机号 -->
                <div class="form-item">
                    <div class="form-item-label" style>
                        <span>堆垛机号:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="crnNo" value="">
                    </div>
                </div>
                <!-- 工作号 -->
                <div class="form-item">
                    <div class="form-item-label">
                        <span>工作号:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="workNo" value="">
                    </div>
                </div>
                <!-- 站源 -->
                <div class="form-item">
                    <div class="form-item-label">
                        <span>站源:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="sourceStaNo" value="">
                    </div>
                </div>
                <!-- 目标站 -->
                <div class="form-item">
                    <div class="form-item-label">
                        <span>目标站:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="staNo" value="">
                    </div>
                </div>
                <!-- 工作状态 -->
                <div class="form-item">
                    <div class="form-item-label">
                        <span>工作状态:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="wrkSts" value="">
                    </div>
                </div>
                <!-- 出入类型 -->
                <div class="form-item">
                    <div class="form-item-label">
                        <span>出入类型:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="ioType" value="">
                    </div>
                </div>
                <!-- 源库位 -->
                <div class="form-item">
                    <div class="form-item-label">
                        <span>源库位:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="sourceLocNo" value="">
                    </div>
                </div>
                <!-- 目标库位 -->
                <div class="form-item">
                    <div class="form-item-label">
                        <span>目标库位:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="locNo" value="">
                    </div>
                </div>
                <!-- 堆垛机状态 -->
                <div class="form-item">
                    <div class="form-item-label">
                        <span>堆垛机状态:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="crnStatus" value="">
                    </div>
                </div>
                <!-- 异常 -->
                <div class="form-item">
                    <div class="form-item-label">
                        <span>异常:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="error" value="">
                    </div>
                </div>
            </form>
        </div>
        <!-- 输送设备弹窗 -->
        <div id="siteWindow" style="display: none;" class="animate__animated animate__fadeIn">
            <!-- 表头 -->
            <div id="siteWindow-head">
                <div class='detailed'></div>
                <button></button>
            </div>
            <form>
                <!-- 设备号 -->
                <div class="form-item">
                    <div class="form-item-label">
                        <span>设备号:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="siteId" value="">
                    </div>
                </div>
                <!-- 工作号 -->
                <div class="form-item">
                    <div class="form-item-label">
                        <span>工作号:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="workNo" value="">
                    </div>
                </div>
                <!-- 工作状态 -->
                <div class="form-item">
                    <div class="form-item-label">
                        <span>工作状态:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="wrkSts" value="">
                    </div>
                </div>
                <!-- 自动 -->
                <div class="form-item-checkbox">
                    <div class="form-item-label-checkbox">
                        <span>自动</span>
                    </div>
                    <div class="form-item-input-checkbox">
                        <input type="checkbox" name="autoing">
                    </div>
                </div>
                <!-- 有物 -->
                <div class="form-item-checkbox">
                    <div class="form-item-label-checkbox">
                        <span>有物</span>
                    </div>
                    <div class="form-item-input-checkbox">
                        <input type="checkbox" name="loading">
                    </div>
                </div>
                <!-- 能入 -->
                <div class="form-item-checkbox">
                    <div class="form-item-label-checkbox">
                        <span>能入</span>
                    </div>
                    <div class="form-item-input-checkbox">
                        <input type="checkbox" name="canining">
                    </div>
                </div>
                <!-- 能出 -->
                <div class="form-item-checkbox">
                    <div class="form-item-label-checkbox">
                        <span>能出</span>
                    </div>
                    <div class="form-item-input-checkbox">
                        <input type="checkbox" name="canouting">
                    </div>
                </div>
                <!-- 出入类型 -->
                <div class="form-item">
                    <div class="form-item-label">
                        <span>出入类型:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="ioType" value="">
                    </div>
                </div>
                <!-- 源站 -->
                <div class="form-item">
                    <div class="form-item-label">
                        <span>源站:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="sourceStaNo" value="">
                    </div>
                </div>
                <!-- 目标站 -->
                <div class="form-item">
                    <div class="form-item-label">
                        <span>目标站:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="staNo" value="">
                    </div>
                </div>
                <!-- 源库位 -->
                <div class="form-item">
                    <div class="form-item-label">
                        <span>源库位:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="sourceLocNo" value="">
                    </div>
                </div>
                <!-- 目标库位 -->
                <div class="form-item">
                    <div class="form-item-label">
                        <span>目标库位:</span>
                    </div>
                    <div class="form-item-input">
                        <input type="text" name="locNo" value="">
                    </div>
                </div>
            </form>
        </div>
        </form>
    </div>
    <!-- 输送设备弹窗 -->
    <div id="siteWindow" style="display: none;" class="animate__animated animate__fadeIn">
        <!-- 表头 -->
        <div id="siteWindow-head">
            <div class='detailed'></div>
            <button></button>
        </div>
        <form>
            <!-- 设备号 -->
            <div class="form-item">
                <div class="form-item-label">
                    <span>设备号:</span>
                </div>
                <div class="form-item-input">
                    <input type="text" name="siteId" value="">
                </div>
            </div>
            <!-- 工作号 -->
            <div class="form-item">
                <div class="form-item-label">
                    <span>工作号:</span>
                </div>
                <div class="form-item-input">
                    <input type="text" name="workNo" value="">
                </div>
            </div>
            <!-- 工作状态 -->
            <div class="form-item">
                <div class="form-item-label">
                    <span>工作状态:</span>
                </div>
                <div class="form-item-input">
                    <input type="text" name="wrkSts" value="">
                </div>
            </div>
            <!-- 自动 -->
            <div class="form-item-checkbox">
                <div class="form-item-label-checkbox">
                    <span>自动</span>
                </div>
                <div class="form-item-input-checkbox">
                    <input type="checkbox" name="autoing">
                </div>
            </div>
            <!-- 有物 -->
            <div class="form-item-checkbox">
                <div class="form-item-label-checkbox">
                    <span>有物</span>
                </div>
                <div class="form-item-input-checkbox">
                    <input type="checkbox" name="loading">
                </div>
            </div>
            <!-- 能入 -->
            <div class="form-item-checkbox">
                <div class="form-item-label-checkbox">
                    <span>能入</span>
                </div>
                <div class="form-item-input-checkbox">
                    <input type="checkbox" name="canining">
                </div>
            </div>
            <!-- 能出 -->
            <div class="form-item-checkbox">
                <div class="form-item-label-checkbox">
                    <span>能出</span>
                </div>
                <div class="form-item-input-checkbox">
                    <input type="checkbox" name="canouting">
                </div>
            </div>
            <!-- 出入类型 -->
            <div class="form-item">
                <div class="form-item-label">
                    <span>出入类型:</span>
                </div>
                <div class="form-item-input">
                    <input type="text" name="ioType" value="">
                </div>
            </div>
            <!-- 源站 -->
            <div class="form-item">
                <div class="form-item-label">
                    <span>源站:</span>
                </div>
                <div class="form-item-input">
                    <input type="text" name="sourceStaNo" value="">
                </div>
            </div>
            <!-- 目标站 -->
            <div class="form-item">
                <div class="form-item-label">
                    <span>目标站:</span>
                </div>
                <div class="form-item-input">
                    <input type="text" name="staNo" value="">
                </div>
            </div>
            <!-- 源库位 -->
            <div class="form-item">
                <div class="form-item-label">
                    <span>源库位:</span>
                </div>
                <div class="form-item-input">
                    <input type="text" name="sourceLocNo" value="">
                </div>
            </div>
            <!-- 目标库位 -->
            <div class="form-item">
                <div class="form-item-label">
                    <span>目标库位:</span>
                </div>
                <div class="form-item-input">
                    <input type="text" name="locNo" value="">
                </div>
            </div>
        </form>
    </div>
</div>
</body>
@@ -344,7 +344,6 @@
            url: baseUrl + '/console/barcode/output/site',
            method: 'GET',
            success: function (res) {
                console.log(res)
                if (res.code === 200) {
                    tData = eval(res.data);
                    if (tData.length <= 5) {
@@ -384,21 +383,16 @@
    }
</script>
<script type="text/javascript">
    // 弹窗站点信息
    $('.site').on('click', function () {
    // 弹窗站点信息 —— 使用事件委托
    $(document).on('click', '.site', function () {
        var id = this.id.split("-")[1];
        $("#siteWindow").attr("style", "display:block;");//显示div
        $("#crnWindow").attr("style", "display:none;");
        $(".detailed").empty();
        $('.detailed').append(id + '站点详细信息');
        $("#siteWindow").css("display", "block"); // 显示站点信息窗口
        $("#crnWindow").css("display", "none");
        $(".detailed").empty().append(id + '站点详细信息');
        $.ajax({
            url: baseUrl + "/console/site/detail",
            headers: {
                'token': localStorage.getItem('token')
            },
            data: {
                siteId: id
            },
            headers: { 'token': localStorage.getItem('token') },
            data: { siteId: id },
            method: 'post',
            success: function (res) {
                for (var val in res.data) {
@@ -406,29 +400,23 @@
                    if (find[0].type === 'text') {
                        find.val(res.data[val]);
                    } else if (find[0].type === 'checkbox') {
                        find.attr("checked", res.data[val] === 'Y');
                        find.prop("checked", res.data[val] === 'Y');
                    }
                }
            }
        })
        });
    });
    // 堆垛机信息
    $('.machine').on('click', function () {
    // 堆垛机信息 —— 使用事件委托
    $(document).on('click', '.machine', function () {
        var id = this.id.split("-")[1];
        $("#crnWindow").attr('style', 'display:block;');
        $("#siteWindow").attr("style", "display:none;");
        $('.detailed').empty();
        $('.detailed').append(id + '号堆垛机');
        $("#crnWindow").css("display", "block");
        $("#siteWindow").css("display", "none");
        $(".detailed").empty().append(id + '号堆垛机');
        $.ajax({
            url: baseUrl + "/console/crn/detail",
            headers: {
                'token': localStorage.getItem('token')
            },
            data: {
                crnNo: id
            },
            headers: { 'token': localStorage.getItem('token') },
            data: { crnNo: id },
            method: 'post',
            success: function (res) {
                for (var val in res.data) {
@@ -436,14 +424,13 @@
                    if (find[0].type === 'text') {
                        find.val(res.data[val]);
                    } else if (find[0].type === 'checkbox') {
                        find.attr("checked", res.data[val] === 'Y');
                        find.prop("checked", res.data[val] === 'Y');
                    }
                }
            }
        });
    });
        })
    })
    // 弹窗关闭
    $('button').on('click', function () {
        $('#siteWindow').attr('style', 'display:none')
@@ -463,6 +450,8 @@
    getSystemRunningStatus();
    getBarcodeInfo();
    getScaleInfo();
    // carAnimate();
    carAnimate2();
    // 实时访问
    setInterval(function () {
        getCrnInfo();
@@ -516,8 +505,8 @@
                } else if (res.code === 403) {
                    parent.location.href = baseUrl + "/login";
                } else {
                    alert(res.msg);
                    console.log(res.msg);
                }
            }
        });
@@ -561,14 +550,16 @@
                    var sites = res.data;
                    for (var i = 0; i < sites.length; i++) {
                        var siteEl = $("#site-" + sites[i].siteId);
                        console.log(sites[i].siteId)
                        siteEl.attr("class", "site " + sites[i].siteStatus);
                        // siteEl.attr("class", "site site-auto-run-id");
                        if (sites[i].workNo != null && sites[i].workNo > 0) {
                            siteEl.html(sites[i].siteId + "[" + sites[i].workNo + "]");
                        } else {
                            siteEl.html(sites[i].siteId);
                        }
                        if (sites[i].siteId === '1' || sites[i].siteId === '2' || sites[i].siteId === '3') {
                        if (sites[i].siteId === '16' || sites[i].siteId === '016') {
                            carAnimate(Number(sites[i].siteId), Number(sites[i].nearbySta));
                        }
@@ -602,25 +593,11 @@
                        }
                        // crnEl.animate({left: (crns[i].bay * unit) + 'px'}, 1000);
                        // crns[i].bay = 15;
                        var offSet = 0;
                        switch (i) {
                            case 0:
                            case 1:
                            case 2:
                            case 3:
                                unit = 18;
                                offSet = 500;
                                break;
                            case 5:
                                unit = 124;
                                offSet = 550;
                                break;
                            case 4:
                            case 6:
                                unit = 62;
                                offSet = 550;
                                break;
                        }
                        unit = 15;
                        offSet = 140;
                        if(crns[i].bay === 1){
                            crnEl.animate({left: offSet + 'px'}, 1000);
@@ -648,7 +625,7 @@
                if (res.code === 200) {
                    var barcodes = res.data;
                    for (var i = 0; i < barcodes.length; i++) {
                        $("#barcode-"+barcodes[i].barcodeId).html(barcodes[i].codeValue ? barcodes[i].codeValue : "--");
                        $("#code-decoder-data-" + barcodes[i].barcodeId).html(barcodes[i].codeValue);
                    }
                } else if (res.code === 403) {
                    parent.location.href = baseUrl + "/login";
@@ -698,14 +675,14 @@
                $("#crn-3").animate({left: leftVal + 'px'}, 1000);
                crn3Position = leftVal;
                break;
            // case 4:
            //     $("#crn-4").animate({left: leftVal + 'px'}, 1000);
            //     crn4Position = leftVal;
            //     break;
            // case 5:
            //     $("#crn-5").animate({left: leftVal + 'px'}, 1000);
            //     crn5Position = leftVal;
            //     break;
            case 4:
                $("#crn-4").animate({left: leftVal + 'px'}, 1000);
                crn4Position = leftVal;
                break;
            case 5:
                $("#crn-5").animate({left: leftVal + 'px'}, 1000);
                crn5Position = leftVal;
                break;
            default:
                break
        }
@@ -715,43 +692,37 @@
    function carAnimate(id, target) {
        // debugger
        var targetTop = 0;
        if (id === 1 || id === '1' || id === '2' || id === 2 || id === '3' || id === 3) {
        if (id === 16 || id === '16' || id === '016') {
            switch (target) {
                case 1:
                    targetTop += 792;
                    targetTop += 827;
                    break;
                case 2:
                    targetTop += 771;
                    targetTop += 765;
                    break;
                case 3:
                    targetTop += 727;
                    targetTop += 651;
                    break;
                case 4:
                    targetTop += 706;
                    targetTop += 589;
                    break;
                case 5:
                    targetTop += 662;
                    targetTop += 505;
                    break;
                case 6:
                    targetTop += 620;
                    targetTop += 443;
                    break;
                case 7:
                    targetTop += 578;
                    targetTop += 362;
                    break;
                case 8:
                    targetTop += 530;
                    targetTop += 297;
                    break;
                case 9:
                    targetTop += 190;
                    targetTop += 243;
                    break;
                case 10:
                    targetTop += 147;
                    break;
                case 11:
                    targetTop += 107;
                    break;
                case 12:
                    targetTop += 63;
                    targetTop += 129;
                    break;
                default:
                    return;
@@ -760,8 +731,57 @@
            return;
        }
        $("#site-" + id).animate({top: targetTop + 'px'}, 1000);
        $("#site-0" + id).animate({top: targetTop + 'px'}, 1000);
    }
    //RGV车辆各站点距离数据
    let sitePosition = {
        101: '68px',
        102: '117px',
        122: '183px',
        104: '183px',
        105: '232px',
        118: '297px',
        107: '297px',
        108: '345px',
        119: '355px',
        110: '410px',
        120: '421px',
        111: '459px',
        121: '479px',
        113: '524px',
        123: '556px',
        114: '572px',
        1142: '600px',
        116: '639px',
        117: '687px',
    }
    //RGV车移动动画
    function moveSite(siteId, staNo) {
        $(siteId).animate({top: sitePosition[staNo]}, 1000);
    }
    // moveSite("#site-1", 117);//测试移动方法,可删除
    // Rgv实时数据获取
    function carAnimate2() {
        // console.log("1=============1")
        $.ajax({
            url: baseUrl + "/rgv/console/rgv/site/data",
            headers: {'token': localStorage.getItem('token')},
            method: 'POST',
            success: function (res) {
                if (res.code === 200) {
                    var rgvMap = res.data;
                    for (var i = 0; i < rgvMap.length; i++) {
                        moveSite("#site-"+rgvMap[i].id, rgvMap[i].title);
                    }
                } else {
                    console.log(res.msg);
                }
            }
        });
    }
</script>
src/main/webapp/views/crn.html
@@ -71,12 +71,24 @@
                    <!--            <span>&nbsp;</span>-->
                    <input id="crn3" disabled="disabled">
                </div>
<!--                <div class="crn-command-item">-->
<!--                    <label>4#</label>-->
<!--                    <button id="demoBtn-4" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>-->
<!--                    &lt;!&ndash;            <span>&nbsp;</span>&ndash;&gt;-->
<!--                    <input id="crn4" disabled="disabled">-->
<!--                </div>-->
                <div class="crn-command-item">
                    <label>4#</label>
                    <button id="demoBtn-4" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>
                    <!--            <span>&nbsp;</span>-->
                    <input id="crn4" disabled="disabled">
                </div>
                <!--                <div class="crn-command-item">-->
                <!--                    <label>5#</label>-->
                <!--                    <button id="demoBtn-5" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>-->
                <!--                    &lt;!&ndash;            <span>&nbsp;</span>&ndash;&gt;-->
                <!--                    <input id="crn5" disabled="disabled">-->
                <!--                </div>-->
                <!--                <div class="crn-command-item">-->
                <!--                    <label>6#</label>-->
                <!--                    <button id="demoBtn-6" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>-->
                <!--                    &lt;!&ndash;            <span>&nbsp;</span>&ndash;&gt;-->
                <!--                    <input id="crn6" disabled="disabled">-->
                <!--                </div>-->
            </div>
            <!-- 堆垛机状态位信息 -->
            <div class="crn-state">
@@ -113,13 +125,13 @@
                    <th>目标站</th>
                    <th>源库位</th>
                    <th>目标库位</th>
                    <th>走行速度(m/min)</th>
                    <th>升降速度(m/min)</th>
                    <th>叉牙速度(m/min)</th>
                    <th>走行距离(Km)</th>
                    <th>升降距离(Km)</th>
                    <th>走行时长(H)</th>
                    <th>升降时长(H)</th>
                    <!--                    <th>走行速度(m/min)</th>-->
                    <!--                    <th>升降速度(m/min)</th>-->
                    <!--                    <th>叉牙速度(m/min)</th>-->
                    <!--                    <th>走行距离(Km)</th>-->
                    <!--                    <th>升降距离(Km)</th>-->
                    <!--                    <th>走行时长(H)</th>-->
                    <!--                    <th>升降时长(H)</th>-->
                </tr>
                </thead>
                <tbody>
@@ -145,7 +157,9 @@
                        <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="3">&nbsp;3号堆垛机</label>
<!--                        <label><input type="radio" name="crnSelect" value="4">&nbsp;4号堆垛机</label>-->
                        <label><input type="radio" name="crnSelect" value="4">&nbsp;4号堆垛机</label>
                        <!--                        <label><input type="radio" name="crnSelect" value="5">&nbsp;5号堆垛机</label>-->
                        <!--                        <label><input type="radio" name="crnSelect" value="6">&nbsp;6号堆垛机</label>-->
                    </div>
                </div>
                <!-- 源站/源库位 选择 -->
@@ -199,18 +213,18 @@
                <fieldset>
                    <legend>手动操作</legend>
                    <div class="button-group">
<!--                        <button class="item" onclick="put()">入库</button>-->
<!--                        <button class="item" onclick="take()">出库</button>-->
                        <button class="item" onclick="put()">入库</button>
                        <button class="item" onclick="take()">出库</button>
                        <button class="item" onclick="stockMove()">库位转移</button>
<!--                        <button class="item" onclick="siteMove()">站到站</button>-->
                        <button class="item" onclick="siteMove()">站到站</button>
                        <!--                <button class="item" onclick="bacOrigin()">回原点</button>-->
                        <!--                <button class="item" onclick="reverseOrigin()">反原点</button>-->
                        <!--                <button class="item" onclick="coorMove()">坐标移行</button>-->
                        <button class="item" onclick="taskComplete()">任务完成</button>
                        <!--                <button class="item" onclick="pause()">暂停</button>-->
                        <!--                <button class="item" onclick="boot()">启动</button>-->
<!--                        <button class="item" onclick="clearCommand()">清除命令</button>-->
<!--                        <button class="item" onclick="handleReset()">复位</button>-->
                        <button class="item" onclick="clearCommand()">清除命令</button>
                        <button class="item" onclick="handleReset()">复位</button>
                    </div>
                </fieldset>
            </div>
@@ -346,13 +360,13 @@
                        setVal(tr.children("td").eq(4), table[i-1].staNo);
                        setVal(tr.children("td").eq(5), table[i-1].sourceLocNo);
                        setVal(tr.children("td").eq(6), table[i-1].locNo);
                        setVal(tr.children("td").eq(7), table[i-1].xspeed);
                        setVal(tr.children("td").eq(8), table[i-1].yspeed);
                        setVal(tr.children("td").eq(9), table[i-1].zspeed);
                        setVal(tr.children("td").eq(10), table[i-1].xdistance);
                        setVal(tr.children("td").eq(11), table[i-1].ydistance);
                        setVal(tr.children("td").eq(12), table[i-1].xduration);
                        setVal(tr.children("td").eq(13), table[i-1].yduration);
                        // setVal(tr.children("td").eq(7), table[i-1].xspeed);
                        // setVal(tr.children("td").eq(8), table[i-1].yspeed);
                        // setVal(tr.children("td").eq(9), table[i-1].zspeed);
                        // setVal(tr.children("td").eq(10), table[i-1].xdistance);
                        // setVal(tr.children("td").eq(11), table[i-1].ydistance);
                        // setVal(tr.children("td").eq(12), table[i-1].xduration);
                        // setVal(tr.children("td").eq(13), table[i-1].yduration);
                    }
                } else if (res.code === 403){
                    window.location.href = baseUrl+"/login";
src/main/webapp/views/index.html
@@ -25,7 +25,7 @@
            <li><a id="console" onclick="nav(this.id)" class="nav-select" href="#">主控图</a></li>
            <li><a id="pipeline" onclick="nav(this.id)" class="nav-unselect" href="#">输送设备</a></li>
            <li><a id="crn" onclick="nav(this.id)" class="nav-unselect" href="#">堆垛机</a></li>
            <li><a id="rgv" onclick="nav(this.id)" class="nav-unselect" href="#">RGV</a></li>
<!--            <li><a id="rgv" onclick="nav(this.id)" class="nav-unselect" href="#">RGV</a></li>-->
        </ul>
    </div>
</div>