luxiaotao1123
2022-03-22 7912915a2b076e7ed4772ce2939f33862587a54b
Merge branch 'xgmwcs' of http://47.97.1.152:5880/r/zy-wcs into xgmwcs
20个文件已修改
2个文件已添加
698 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/ConsoleController.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasDevp.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WrkMastService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/LedThread.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/MelsecCrnThread.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/car_vue.css 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/console.css 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/crn.css 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/index.css 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/pipeline.css 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/images/zy-logo.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/console.html 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/crn.html 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/index.html 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -1,16 +1,20 @@
package com.zy.asrs.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.core.annotations.ManagerAuth;
import com.core.common.Arith;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
import com.zy.asrs.domain.enums.CrnStatusType;
import com.zy.asrs.domain.enums.SiteStatusType;
import com.zy.asrs.domain.param.SystemSwitchParam;
import com.zy.asrs.domain.vo.*;
import com.zy.asrs.entity.BasCrnError;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.mapper.BasCrnErrorMapper;
import com.zy.asrs.mapper.LocMastMapper;
import com.zy.asrs.service.BasDevpService;
import com.zy.asrs.service.WrkMastService;
@@ -54,6 +58,8 @@
    private BasDevpService basDevpService;
    @Autowired
    private LocMastMapper locMastMapper;
    @Autowired
    private BasCrnErrorMapper basCrnErrorMapper;
    @PostMapping("/system/running/status")
    @ManagerAuth(memo = "系统运行状态")
@@ -130,7 +136,7 @@
            /**
             * 堆垛机状态判断
             */
            if (crn.getId() == 1 && crnProtocol.getAlarm() > 0) {
            if (crnProtocol.getAlarm() > 0) {
                vo.setCrnStatus(CrnStatusType.MACHINE_ERROR);
            } else {
                if (crnProtocol.getTaskNo()>0) {
@@ -246,6 +252,13 @@
                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                vo.setCrnNo(crnNo);
                vo.setWorkNo(crnProtocol.getTaskNo());
                vo.setCrnStatus(crnProtocol.getStatusType().desc);
                if (crnProtocol.getAlarm() > 0) {
                    BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
                    vo.setError(crnError == null ? "未知异常" : crnError.getErrName());
                }
                if (crnProtocol.getTaskNo() > 0) {
                    WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo());
                    if (wrkMast != null) {
@@ -281,15 +294,16 @@
    @GetMapping("/barcode/output/site")
    public R crnOutput(){
//        StringBuilder str = new StringBuilder();
//        String s;
//        int i = 0;
//        while((s = OutputQueue.CRN.poll()) != null && i <=32) {
//            str.append("\n").append(s);
//            i++;
//        }
//        return R.ok().add(str.toString());
        return R.ok().add(JSON.toJSONString(new ArrayList<>(OutputQueue.BARCODE)));
        ArrayList<JSONObject> jsonObjects = new ArrayList<>(OutputQueue.BARCODE);
        jsonObjects.sort(new Comparator<JSONObject>() {
            @Override
            public int compare(JSONObject o1, JSONObject o2) {
                Date o1Time = DateUtils.convert(o1.getString("time"), DateUtils.yyyyMMddHHmmss_F);
                Date o2Time = DateUtils.convert(o2.getString("time"), DateUtils.yyyyMMddHHmmss_F);
                return (int) (o2Time.getTime() - o1Time.getTime());
            }
        });
        return R.ok().add(JSON.toJSONString(jsonObjects));
    }
}
src/main/java/com/zy/asrs/entity/BasDevp.java
@@ -129,7 +129,7 @@
    @ApiModelProperty(value= "条形码")
    private String barcode;
    @ApiModelProperty(value= "")
    @ApiModelProperty(value= "入库暂存数")
    @TableField("in_qty")
    private Integer inQty;
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -74,4 +74,17 @@
    WrkMast selectWorkingPakout();
    /**
     * 堆垛机是否存在出库任务
     * @param crnNo
     * @return
     */
    WrkMast selectCrnWorking(@Param("crnNo")Integer crnNo);
    /**
     * 输送线是否存在入库任务
     * @param crnNo
     * @return
     */
    WrkMast selectDevWorking(@Param("crnNo")Integer crnNo);
}
src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -13,4 +13,6 @@
    List<WrkMast> selectToBeHistoryData();
    int getOutToStn182(Integer devpNo);
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -89,6 +89,8 @@
    private BasCrnErrorMapper basCrnErrorMapper;
    @Value("${wms.url}")
    private String wmsUrl;
    @Value("${crnBackHp.enable}")
    private boolean crnBackHp;
    /**
     * 组托
@@ -105,14 +107,14 @@
                    continue;
                }
                String barcode = barcodeThread.getBarcode();
//                if(!Cools.isEmpty(barcode)) {
//                    log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode);
//                    if("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
//                        continue;
//                    }
//                } else {
//                    continue;
//                }
                if(!Cools.isEmpty(barcode)) {
                    log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode);
                    if("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
                        continue;
                    }
                } else {
                    continue;
                }
                // 获取入库站信息
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
@@ -123,8 +125,8 @@
                    staProtocol = staProtocol.clone();
                }
                // 入出库模式判断
                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
//                // 入出库模式判断
//                if ( inSta.getStaNo()==180 && devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
                // 判断是否满足入库条件
                if (staProtocol.isAutoing() && staProtocol.isLoading()
@@ -132,18 +134,18 @@
                        && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999)
                        && staProtocol.isPakMk()){// && !Cools.isEmpty(barcode)) {
                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) {
                        log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode);
                        //条码为空或者不符合,退库到172站点
                        staProtocol.setWorkNo((short)9999);
                        staProtocol.setStaNo((short)172);
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        if (!result) {
                            throw new CoolException("更新plc站点信息失败");
                        }
                        continue;
                    }
//                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) {
//                        log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode);
//                        //条码为空或者不符合,退库到172站点
//                        staProtocol.setWorkNo((short)9999);
//                        staProtocol.setStaNo((short)172);
//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
//                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
//                        if (!result) {
//                            throw new CoolException("更新plc站点信息失败");
//                        }
//                        continue;
//                    }
                    // 判断重复工作档
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
@@ -278,8 +280,8 @@
                    staProtocol = staProtocol.clone();
                }
                // 入出库模式判断
                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
//                // 入出库模式判断
//                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
                // 判断是否满足入库条件
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
@@ -328,14 +330,14 @@
                    continue;
                }
                String barcode = barcodeThread.getBarcode();
//                if(!Cools.isEmpty(barcode)) {
//                    log.info("{}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode);
//                    if("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
//                        continue;
//                    }
//                } else {
//                    continue;
//                }
                if(!Cools.isEmpty(barcode)) {
                    log.info("{}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode);
                    if("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
                        continue;
                    }
                } else {
                    continue;
                }
                // 获取拣料入库站信息
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
@@ -346,23 +348,23 @@
                    staProtocol = staProtocol.clone();
                }
                // 入出库模式判断
                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
//                // 入出库模式判断
//                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()){
                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) {
                        log.info("{}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode);
                        //条码为空或者不符合,退库到172站点
                        staProtocol.setWorkNo((short)9999);
                        staProtocol.setStaNo((short)172);
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        if (!result) {
                            throw new CoolException("更新plc站点信息失败");
                        }
                        continue;
                    }
//                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) {
//                        log.info("{}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode);
//                        //条码为空或者不符合,退库到172站点
//                        staProtocol.setWorkNo((short)9999);
//                        staProtocol.setStaNo((short)172);
//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
//                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
//                        if (!result) {
//                            throw new CoolException("更新plc站点信息失败");
//                        }
//                        continue;
//                    }
                    WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
                    if (wrkMast == null) {
@@ -549,7 +551,57 @@
            }
            // 库位移转
            this.locToLoc(crn, crnProtocol);
            if (crnBackHp) {
                //堆垛机没有执行中任务,设备存在入库任务时叫回原点
                this.crnRebackHp(crn, crnProtocol);
            }
        }
    }
    /**
     * 回原点,堆垛机没有执行中任务,设备存在入库任务时叫回原点
     * @param slave
     * @param crnProtocol
     */
    public void crnRebackHp(CrnSlave slave, CrnProtocol crnProtocol){
            // 堆垛机控制过滤
            if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0
                || crnProtocol.getModeType() != CrnModeType.AUTO) {
                return;
            }
            // 已经存在吊车执行任务时,则过滤
            if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                return;
            }
            //堆垛机有执行中任务,过滤
            if (wrkMastMapper.selectCrnWorking(slave.getId()) != null) {
                return;
            }
            //输送线没有入库任务,过滤
            if (wrkMastMapper.selectDevWorking(slave.getId()) == null) {
                return;
            }
            // 命令下发区 --------------------------------------------------------------------------
            CrnCommand crnCommand = new CrnCommand();
            crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
            crnCommand.setTaskNo((short) 1); // 工作号
            crnCommand.setAckFinish((short) 0);  // 任务完成确认位
            crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式:  回原点
            crnCommand.setSourcePosX((short) 0);     // 源库位排
            crnCommand.setSourcePosY((short) 0);     // 源库位列
            crnCommand.setSourcePosZ((short) 0);     // 源库位层
            crnCommand.setDestinationPosX((short) 0);     // 目标库位排
            crnCommand.setDestinationPosY((short) 0);     // 目标库位列
            crnCommand.setDestinationPosZ((short) 0);     // 目标库位层
            if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand))) {
                log.error("堆垛机回原点命令下发失败,堆垛机号={},任务数据={}", slave.getId(), JSON.toJSON(crnCommand));
            } else {
            }
    }
    /**
@@ -711,8 +763,8 @@
                staProtocol = staProtocol.clone();
            }
            // 入出库模式判断
            if (devpThread.ioMode != IoModeType.PAKOUT_MODE) { continue; }
//            // 入出库模式判断
//            if (devpThread.ioMode != IoModeType.PAKOUT_MODE) { continue; }
            // 查询站点详细信息
@@ -835,7 +887,7 @@
        }
        // 已经存在吊车执行任务时,则过滤
        if (wrkMastMapper.selectLocMoving(slave.getId()) != null) {
        if (wrkMastMapper.selectWorking(slave.getId()) != null) {
            return;
        }
@@ -1042,8 +1094,8 @@
                    staProtocol = staProtocol.clone();
                }
                // 入出库模式判断
                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
//                // 入出库模式判断
//                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
                // 站点条件判断
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -27,4 +27,8 @@
        return this.baseMapper.selectToBeHistoryData();
    }
    @Override
    public int getOutToStn182(Integer devpNo) {
        return selectCount(new EntityWrapper<WrkMast>().eq("sta_no", devpNo).in("wrk_sts",11,12));
    }
}
src/main/java/com/zy/core/MainProcess.java
@@ -42,7 +42,7 @@
                    // 演示
                    mainService.crnDemoOfLocMove1();
                    // 入出库模式切换函数
                    mainService.ioConvert();
//                    mainService.ioConvert();
                    // 入库  ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档
                    mainService.generateStoreWrkFile(); // 组托
                    mainService.generateStoreWrkFile0(); // WMS入库
src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -49,6 +49,8 @@
    // 锁定标记
    private boolean pakMk = true;
    // 入库暂存数
    private Short inQty;
    public BasDevp toSqlModel(){
        BasDevp basDevp = new BasDevp();
@@ -62,6 +64,7 @@
        basDevp.setLocType2((short) 0);  // 宽窄类型{0:未知,1:窄库位,2:宽库位}
        basDevp.setLocType3((short) 0);  // 轻重类型{0:未知,1:轻库位,2:重库位}
        basDevp.setLocType1(high != low && low ? (short) 1 : (short) 2);
        basDevp.setInQty(inQty !=null ?(int)inQty : 0);
        return basDevp;
    }
src/main/java/com/zy/core/thread/LedThread.java
@@ -100,14 +100,21 @@
            page.newLine("目标站:"+command.getStaNo());
            if (!command.isEmptyMk()) {
                for (MatDto matDto : command.getMatDtos()) {
                    page.newLine(matDto.getMaknx() + "【数量" + matDto.getCount() +"】");
                    //去掉小数点
                    String strQty = matDto.getCount().toString();
                    int idx = strQty.lastIndexOf(".");
                    if(idx >= 0){
                        strQty.substring(0,idx);
                    }
                    page.newLine(matDto.getMaknx() + "[数量" + strQty +"]");
//                    page.newLine(matDto.getMaknx() + "【数量" + matDto.getCount() +"】");
                }
            }
            page.newLine("\n");
        }
        // 设置字体
        page.setFont(new Font("宋体",Font.PLAIN,12));
        page.setFont(new Font("宋体",Font.PLAIN,10));
        // 设置文本颜色
        page.setForeground(Color.red);
        // 设置显示特技为快速打出
@@ -198,6 +205,13 @@
    public static void main(String[] args) throws Exception {
        String strQty = "1234";
        int index = strQty.lastIndexOf(".");
        if(index>=0) {
            strQty=strQty.substring(0, index);
        }
        System.out.println("2==>>"+strQty);
        Bx5GEnv.initial(3000);
        Bx5GScreenClient screen = new Bx5GScreenClient("my");
        DisplayStyleFactory.DisplayStyle[] styles = DisplayStyleFactory.getStyles().toArray(new DisplayStyleFactory.DisplayStyle[0]);
src/main/java/com/zy/core/thread/MelsecCrnThread.java
@@ -229,6 +229,55 @@
            log.error("堆垛机写入命令为空");
            return false;
        }
//        OperateResult result = null;
//        try{
//            Integer exeCount=0;
//            do{
//                command.setCrnNo(slave.getId());
//                short[] array = new short[10];
//                array[0] = command.getAckFinish();
//                array[1] = command.getTaskNo();
//                array[2] = command.getTaskMode();
//                array[3] = command.getSourcePosX();
//                array[4] = command.getSourcePosY();
//                array[5] = command.getSourcePosZ();
//                array[6] = command.getDestinationPosX();
//                array[7] = command.getDestinationPosY();
//                array[8] = command.getDestinationPosZ();
//                array[9] = command.getCommand();
//                result = melsecMcNet.Write("D0", array);
//                if(result.IsSuccess) {
//                    if (command.getAckFinish() == 0) {
//                        short commandFinish = 1;
//                        result = melsecMcNet.Write("D9", commandFinish);
//                        if(result.IsSuccess){
//                            //写任务确认返回成功后,查询确认一次
//                            Thread.sleep(200);
//                            OperateResultExOne<byte[]> result1 = melsecMcNet.Read("D9", (short)2);
//                            if(result1.IsSuccess){
//                                short commandVal = melsecMcNet.getByteTransform().TransInt16(result1.Content,2);
//                                if(commandVal==1){
//                                    break;
//                                } else {
//                                    exeCount++;
//                                }
//                            } else{
//                                exeCount++;
//                            }
//                        }else{
//                            exeCount++;
//                        }
//                    }
//                }else{
//                    exeCount++;
//                }
//                Thread.sleep(200);
//            }while(exeCount>3);
//        }catch (Exception e){
//
//        }
        command.setCrnNo(slave.getId());
        short[] array = new short[10];
        array[0] = command.getAckFinish();
@@ -271,7 +320,7 @@
            bean.insert(basCrnOpt);
        } catch (Exception ignore) {}
        if (result.IsSuccess) {
        if (result != null && result.IsSuccess) {
            log.info("堆垛机命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
            OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
            return true;
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -9,6 +9,7 @@
import com.core.common.SpringUtils;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.service.BasDevpService;
import com.zy.asrs.service.WrkMastService;
import com.zy.core.DevpThread;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
@@ -48,11 +49,15 @@
        add(150);add(151);add(152);add(153);add(154);add(155);add(156);add(157);add(158);add(159);
        add(160);add(161);add(162);add(163);add(164);add(165);add(166);add(167);add(168);add(169);
        add(170);add(171);add(172);add(173);add(174);add(175);add(176);add(177);add(178);add(179);
        add(180);add(181);add(182);add(183);add(184);add(185);add(186);add(187);add(188);add(189);
        add(190);add(191);add(192);
        add(180);add(181);add(182);
        add(183);add(184);add(185);add(186);add(187);add(188);add(189);add(190);add(191);add(192);
    }};
    public IoModeType ioMode = IoModeType.NONE;
    /**
     * 182站堆垛机执行中出库数量
     */
    public int PRE_COUNT=0;
    public SiemensDevpThread(DevpSlave slave) {
        this.slave = slave;
@@ -114,11 +119,11 @@
     * 读取状态 ====> 整块plc
     */
    private void read() throws InterruptedException {
        // 更新入出库模式
        updateIoMode();
//        // 更新入出库模式
//        updateIoMode();
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) 186);
        if (result.IsSuccess) {
            for (int i = 0; i < 83; i++) {
            for (int i = 0; i < 93; i++) {
                Integer siteId = staNos.get(i); // 站点编号
                StaProtocol staProtocol = station.get(siteId);
                if (null == staProtocol) {
@@ -132,7 +137,7 @@
        Thread.sleep(200);
        OperateResultExOne<byte[]> result0 = siemensS7Net.Read("DB101.0", (short) 186);
        if (result0.IsSuccess) {
            for (int i = 0; i < 83; i++) {
            for (int i = 0; i < 93; i++) {
                Integer siteId = staNos.get(i); // 站点编号
                StaProtocol staProtocol = station.get(siteId);
                if (null == staProtocol) {
@@ -146,7 +151,7 @@
        Thread.sleep(200);
        OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB102.0", (short) 186);
        if (result1.IsSuccess) {
            for (int i = 0; i < 83; i++) {
            for (int i = 0; i < 93; i++) {
                Integer siteId = staNos.get(i); // 站点编号
                boolean[] status = siemensS7Net.getByteTransform().TransBool(result1.Content, i*2, 1);
                StaProtocol staProtocol = station.get(siteId);
@@ -165,10 +170,44 @@
            }
        }
        OperateResultExOne<Short> result2 = siemensS7Net.ReadInt16("DB200.0");
        if (result2.IsSuccess) {
            this.ioMode = IoModeType.get(result2.Content);
        Thread.sleep(200);
        OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB300.0", (short) 10);
        if (result3.IsSuccess) {
//            Integer siteId = staNos.get(i); // 站点编号
            Integer siteId = 0;
            for (int i = 0; i < 5; i++) {
                switch (i){
                    case 0:
                        siteId = 100;
                        break;
                    case 1:
                        siteId = 102;
                        break;
                    case 2:
                        siteId = 104;
                        break;
                    case 3:
                        siteId = 106;
                        break;
                    case 4:
                        siteId = 108;
                        break;
                }
                StaProtocol staProtocol = station.get(siteId);
                if (null == staProtocol) {
                    staProtocol = new StaProtocol();
                    staProtocol.setSiteId(siteId);
                    station.put(siteId, staProtocol);
                }
                short value = siemensS7Net.getByteTransform().TransInt16(result3.Content, i*2);
                staProtocol.setInQty(value);     // 入库暂存数
            }
        }
//        OperateResultExOne<Short> result2 = siemensS7Net.ReadInt16("DB200.0");
//        if (result2.IsSuccess) {
//            this.ioMode = IoModeType.get(result2.Content);
//        }
        if (result.IsSuccess && result0.IsSuccess && result1.IsSuccess) {
@@ -181,15 +220,36 @@
                    StaProtocol staProtocol = station.get(siteId);
                    basDevps.add(staProtocol.toSqlModel());
                }
                BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
                if (!basDevpService.updateBatchById(basDevps)) {
                if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) {
                    throw new Exception("更新数据库数据失败");
                }
            } catch (Exception e) {
                e.printStackTrace();
                OutputQueue.DEVP.offer(MessageFormat.format("【{0}】更新数据库数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
                log.error("更新数据库数据失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
            }
            //出库到182站堆垛机任务数据发送给PLC
            try{
                WrkMastService wrkMastService = SpringUtils.getBean(WrkMastService.class);
                if(null != wrkMastService){
                    int count = wrkMastService.getOutToStn182(182);
                    if(count != PRE_COUNT){
                        OperateResult write = siemensS7Net.Write("DB300.2",(short)count);
                        if (write.IsSuccess) {
                            PRE_COUNT = count;
                        } else {
                            log.error("更新堆垛机出库到182站任务数量错误,任务数量==>>" + count);
                        }
                    }
                }
            }catch (Exception e) {
                e.printStackTrace();
                log.error("更新堆垛机出库到182站任务数量失败");
            }
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】读取输送线plc状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
//            log.error("读取输送线plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
src/main/resources/application.yml
@@ -11,8 +11,8 @@
    #    url: jdbc:sqlserver://47.97.1.152:51433;databasename=xgmasrs
    #    username: sa
    #    password: Zoneyung@zy56$
#    url: jdbc:sqlserver://10.10.10.238:1433;databasename=xgmasrs
    url: jdbc:sqlserver://localhost:1433;databasename=xgmasrs
    url: jdbc:sqlserver://10.10.10.238:1433;databasename=xgmasrs
#    url: jdbc:sqlserver://localhost:1433;databasename=xgmasrs
    username: sa
    password: sa@123
  mvc:
@@ -40,6 +40,10 @@
wms:
  url: 10.10.10.238:8080/xgmwms
#  url: localhost:8082/xgmwms
#堆垛机没有执行中任务,输送有入库任务,叫回原点
crnBackHp:
  enable: true
# 下位机配置
wcs-slave:
@@ -170,6 +174,7 @@
    inSta[0]:
      staNo: 176
      barcode: ${wcs-slave.barcode[0].id}
    # 入库口2
    inSta[1]:
      staNo: 180
      barcode: ${wcs-slave.barcode[1].id}
src/main/resources/mapper/WrkMastMapper.xml
@@ -121,7 +121,7 @@
    <!-- 入库任务 -->
    <select id="selectWorkingPakin" resultMap="BaseResultMap">
        select top 1 * from dbo.asr_wrk_mast where wrk_sts in (2,3,4) and io_type != 11 order by io_time,wrk_no
        select top 1 * from dbo.asr_wrk_mast where wrk_sts in (2,3,4) and io_type != 11 and source_sta_no = 180 order by io_time,wrk_no
    </select>
    <!-- 出库任务 -->
@@ -136,8 +136,16 @@
        where wrk_no > 0)
        ))
        and io_type != 11
        and source_sta_no = 180
        order by io_time,wrk_no
    </select>
    <select id="selectCrnWorking" resultMap="BaseResultMap">
        select top 1 * from dbo.asr_wrk_mast where 1=1 and wrk_sts in (3,4,11,12) and crn_no=#{crnNo} order by io_time,wrk_no
    </select>
    <select id="selectDevWorking" resultMap="BaseResultMap">
        select top 1 * from dbo.asr_wrk_mast where 1=1 and wrk_sts=2 and crn_no=#{crnNo} order by io_time,wrk_no
    </select>
</mapper>
src/main/webapp/static/css/car_vue.css
New file
@@ -0,0 +1,14 @@
body {
    background-color: #6CA7A8;
}
.title {
    margin-top: 10px;
    font-size: 20px;
    text-align: center;
}
.bg-orgin {
    color: white;
    background-color: #FF5722;
}
src/main/webapp/static/css/console.css
@@ -12,17 +12,35 @@
}
.head {
    height: 10%;
    width: 20%;
    padding-top: 1%;
    padding-left: 1%;
    width: 100%;
    color: #FFFFFF;
}
.head-left {
    height: 100%;
    width: 20%;
    display: inline-block;
}
.head-right {
    height: 100%;
    width: 30%;
    display: inline-block;
    float: right;
}
.head h1 {
    margin-top: 2%;
    margin-left: 2%;
    font-weight: 400;
    letter-spacing:3px;
}
.head h6 {
    margin-left: 2%;
    font-weight: 400;
}
img {
    float: right;
    margin-top: 10px;
    margin-right: 10px;
}
#body {
    width: 100%;
@@ -293,16 +311,23 @@
    width: 80px;
}
.site-row-5 {
.site-row-4 {
    top: 71px;
    left: 448px;
}
.site-row-4 .site {
    width: 80px;
}
.site-row-5 {
    top: 71px;
    left: 530px;
}
.site-row-5 .site {
    width: 80px;
}
.site-row-6 {
    top: 71px;
    left: 530px;
    left: 612px;
}
.site-row-6 .site {
    width: 80px;
@@ -313,7 +338,7 @@
.main-part {
    position: absolute;
    top: 20px;
    left: 612px;
    left: 694px;
}
.main-part .lane {
    margin-top: 30px;
src/main/webapp/static/css/crn.css
@@ -1,12 +1,11 @@
body {
    background-color: #f1f1f1;
    background-color: #6CA7A8;
}
.button-window {
    float: left;
    width: 100%;
    height: 100%;
    padding: 10px;
    background-color: #6CA7A8;
    border-radius: 5px;
    box-shadow: 0 0 3px rgba(0 0 0 .3);
}
src/main/webapp/static/css/index.css
@@ -30,19 +30,53 @@
}
.sidebar {
    width: 7%;
    width: 8%;
    height: 40%;
    line-height: 90px;
    position: fixed;
    top: 50%;
    transform: translateY(-50%);
}
/* Effect 1: Brackets */
.cl-effect-1 a::before,
.cl-effect-1 a::after {
    display: inline-block;
    opacity: 0;
    -webkit-transition: -webkit-transform 0.3s, opacity 0.2s;
    -moz-transition: -moz-transform 0.3s, opacity 0.2s;
    transition: transform 0.3s, opacity 0.2s;
}
.cl-effect-1 a::before {
    margin-right: 10px;
    content: '[';
    -webkit-transform: translateX(20px);
    -moz-transform: translateX(20px);
    transform: translateX(20px);
}
.cl-effect-1 a::after {
    margin-left: 10px;
    content: ']';
    -webkit-transform: translateX(-20px);
    -moz-transform: translateX(-20px);
    transform: translateX(-20px);
}
.cl-effect-1 a:hover::before,
.cl-effect-1 a:hover::after,
.cl-effect-1 a:focus::before,
.cl-effect-1 a:focus::after {
    opacity: 1;
    -webkit-transform: translateX(0px);
    -moz-transform: translateX(0px);
    transform: translateX(0px);
}
/* Effect 1: Brackets 👆*/
.sidebar ul {
    font-size: 20px;
    font-weight: 5c00;
    padding-left: 15%;
    font-weight: 500;
    padding-left: 5%;
}
.sidebar a {
src/main/webapp/static/css/pipeline.css
@@ -1,6 +1,6 @@
body {
    /*padding: 10px;*/
    background-color: #f1f1f1;
    background-color: #6CA7A8;
}
main {
    background-color: #fff;
@@ -14,7 +14,6 @@
    width: 100%;
    height: 100%;
    padding: 10px;
    background-color: #6CA7A8;
    border-radius: 5px;
    box-shadow: 0 0 3px rgba(0 0 0 .3);
}
src/main/webapp/static/images/zy-logo.png
src/main/webapp/views/console.html
@@ -17,8 +17,13 @@
<body>
<div id="root">
    <div class="head">
        <h1>自动仓库WCS监控图</h1>
        <h6>AUTOMATIC WAREHOUSE WCS MONITORING DIAGRAM</h6>
        <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>
    <!--第1列(宽度 70px) -->
    <div class="site-row site-row-1">
@@ -50,8 +55,8 @@
    </div>
    <!-- 第4列(宽度 70px 140px) -->
    <!--&lt;!&ndash; 第5列(宽度 70px) &ndash;&gt;-->
    <div class="site-row site-row-5">
    <!--&lt;!&ndash; 第4列(宽度 70px) &ndash;&gt;-->
    <div class="site-row site-row-4">
        <div id="site-163" class="site" style="height: 28.5px;line-height: 28.5px">163</div>
        <div id="site-162" class="site" style="height: 28.5px;line-height: 28.5px">162</div>
        <div id="site-161" class="site" style="height: 71px;line-height: 71px">161</div>
@@ -67,8 +72,8 @@
        <div id="site-151" class="site" style="height: 28.5px;line-height: 28.5px">151</div>
        <div id="site-150" class="site" style="height: 28.5px;line-height: 28.5px">150</div>
    </div>
    <!--&lt;!&ndash; 第6列(宽度 70px) &ndash;&gt;-->
    <div class="site-row site-row-6">
    <!--&lt;!&ndash; 第5列(宽度 70px) &ndash;&gt;-->
    <div class="site-row site-row-5">
        <div id="site-120" class="site" style="height: 28.5px;line-height: 28.5px">120</div>
        <div id="site-121" class="site" style="height: 28.5px;line-height: 28.5px">121</div>
        <div id="site-122" class="site" style="height: 71px;line-height: 71px">122</div>
@@ -84,6 +89,19 @@
        <div id="site-132" class="site" style="height: 28.5px;line-height: 28.5px">132</div>
        <div id="site-133" class="site" style="height: 28.5px;line-height: 28.5px">133</div>
    </div>
    <!--&lt;!&ndash; 第6列(宽度 70px) &ndash;&gt;-->
    <div class="site-row site-row-6">
        <div id="site-183" class="site">183</div>
        <div id="site-184" class="site" style="margin-top: 21px">184</div>
        <div id="site-185" class="site" style="margin-top: 73px">185</div>
        <div id="site-186" class="site" style="margin-top: 21px">186</div>
        <div id="site-187" class="site" style="margin-top: 73px">187</div>
        <div id="site-188" class="site" style="margin-top: 21px">188</div>
        <div id="site-189" class="site" style="margin-top: 73px">189</div>
        <div id="site-190" class="site" style="margin-top: 21px">190</div>
        <div id="site-191" class="site" style="margin-top: 73px">191</div>
        <div id="site-192" class="site" style="margin-top: 21px">192</div>
    </div>
    <!-- 货架 + 堆垛机 + 入库站点 -->
    <div class="main-part">
@@ -91,10 +109,10 @@
        <div class="lane">
            <!-- 货架 -->
            <div class="stock-group">
                <button class="item" style="margin-left: 82px">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item" style="margin-left: 82px">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -130,10 +148,10 @@
            </div>
            <div class="stock-group">
                <div id="site-100" class="site" style="">100</div>
                <button class="item">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -175,10 +193,10 @@
            <!-- 货架 -->
            <div class="stock-group">
                <div id="site-101" class="site" style="">101</div>
                <button class="item">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -213,10 +231,10 @@
                <span class="row-no">3#</span>
            </div>
            <div class="stock-group">
                <button class="item" style="margin-left: 82px">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item" style="margin-left: 82px">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -257,10 +275,10 @@
            <!-- 货架 -->
            <div class="stock-group">
                <div class="site" style="background-color: rgb(108,167,168)"></div>
                <button class="item">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -296,10 +314,10 @@
            </div>
            <div class="stock-group">
                <div id="site-102" class="site" style="">102</div>
                <button class="item">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -341,10 +359,10 @@
            <!-- 货架 -->
            <div class="stock-group">
                <div id="site-103" class="site" style="">103</div>
                <button class="item">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -380,10 +398,10 @@
            </div>
            <div class="stock-group">
                <div class="site" style="background-color: rgb(108,167,168)"></div>
                <button class="item">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -423,10 +441,10 @@
            <span class="row-no"></span>
            <!-- 货架 -->
            <div class="stock-group">
                <button class="item" style="margin-left: 82px">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item" style="margin-left: 82px">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -462,10 +480,10 @@
            </div>
            <div class="stock-group">
                <div id="site-104" class="site" style="">104</div>
                <button class="item">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -507,10 +525,10 @@
            <!-- 货架 -->
            <div class="stock-group">
                <div id="site-105" class="site" style="">105</div>
                <button class="item">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -545,10 +563,10 @@
                <span class="row-no">11#</span>
            </div>
            <div class="stock-group">
                <button class="item" style="margin-left: 82px">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item" style="margin-left: 82px">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -588,10 +606,10 @@
            <span class="row-no"></span>
            <!-- 货架 -->
            <div class="stock-group">
                <button class="item" style="margin-left: 82px">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item" style="margin-left: 82px">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -627,10 +645,10 @@
            </div>
            <div class="stock-group">
                <div id="site-106" class="site" style="">106</div>
                <button class="item">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -672,10 +690,10 @@
            <!-- 货架 -->
            <div class="stock-group">
                <div id="site-107" class="site" style="">107</div>
                <button class="item">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -710,10 +728,10 @@
                <span class="row-no">15#</span>
            </div>
            <div class="stock-group">
                <button class="item" style="margin-left: 82px">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item" style="margin-left: 82px">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -753,10 +771,10 @@
            <span class="row-no"></span>
            <!-- 货架 -->
            <div class="stock-group">
                <button class="item" style="margin-left: 82px">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item" style="margin-left: 82px">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -792,10 +810,10 @@
            </div>
            <div class="stock-group">
                <div id="site-108" class="site" style="">108</div>
                <button class="item">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -837,10 +855,10 @@
            <!-- 货架 -->
            <div class="stock-group">
                <div id="site-109" class="site" style="">109</div>
                <button class="item">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -875,10 +893,10 @@
                <span class="row-no">19#</span>
            </div>
            <div class="stock-group">
                <button class="item" style="margin-left: 82px">2</button>
                <button class="item">4</button>
                <button class="item">6</button>
                <button class="item">8</button>
                <button class="item" style="margin-left: 82px">&nbsp2&nbsp</button>
                <button class="item">&nbsp4&nbsp</button>
                <button class="item">&nbsp6&nbsp</button>
                <button class="item">&nbsp8&nbsp</button>
                <button class="item">10</button>
                <button class="item">12</button>
                <button class="item">14</button>
@@ -955,7 +973,7 @@
            <div class="body-head">输送线状态</div>
            <div class="state states">
                <span>运输线总数</span>
                <span class="line-ss">48</span>
                <span class="line-ss">58</span>
            </div>
            <div class="button"><span>所有状态</span></div>
            <div class="button item-group">
@@ -1485,8 +1503,11 @@
                    for (var i = 0; i < crns.length; i++){
                        var crnEl = $("#crn-"+crns[i].crnId);
                        crnEl.attr("class", "machine " + crns[i].crnStatus);
                        var unit = ($('.item').eq(0).width()+4)/2;
                        crnEl.animate({left: (crns[i].bay * unit + 25) +'px'}, 1000);
                        var unit = ($('.item').eq(0).width()+13)/2;
                        if (crns[i].bay < 0) {
                            crns[i].bay = 0
                        }
                        crnEl.animate({left: (crns[i].bay * unit) +'px'}, 1000);
                    }
                } else if (res.code === 403){
                    parent.location.href = baseUrl+"/login";
@@ -1496,7 +1517,6 @@
            }
        });
    }
    // 扫码器实时数据获取
    function getBarcodeInfo(){
        $.ajax({
src/main/webapp/views/crn.html
@@ -122,10 +122,10 @@
                    <th>走行速度(m/min)</th>
                    <th>升降速度(m/min)</th>
                    <th>叉牙速度(m/min)</th>
                    <th>走行距离(m)</th>
                    <th>升降距离(m)</th>
                    <th>走行时长(s)</th>
                    <th>升降时长(s)</th>
                    <th>走行距离(Km)</th>
                    <th>升降距离(Km)</th>
                    <th>走行时长(H)</th>
                    <th>升降时长(H)</th>
                </tr>
                </thead>
                <tbody>
src/main/webapp/views/index.html
@@ -12,12 +12,15 @@
<!--            <li class="right">注销<a id="about" class="nav-unselect" onclick="logout()" href="#"></a></li>-->
<!--        </div>-->
<div class="sidebar">
    <ul>
    <ul class="cl-effect-1">
        <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>
    </ul>
</div>
<!--<div style="z-index: 999; position: absolute; top: 250px; left: 900px; width: 200px; height: 200px; opacity: 0.5;background-color: #0000FF">-->
<!--</div>-->
<!-- 主体内容 -->
<iframe id="content" src="console.html"></iframe>
<footer class="footer">