#
luxiaotao1123
2022-02-21 35ae54320befb54df4dd7e8b2cf81680c951720b
#
18个文件已修改
1621 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/CrnController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocDetl.java 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkDetl.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/VersionUtils.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/MelsecCrnThread.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocDetlMapper.xml 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkDetlMapper.xml 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/console.css 1001 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/crn.css 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/index.css 78 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/pipeline.css 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/crn.html 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/index.html 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pipeline.html 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/CrnController.java
@@ -420,6 +420,7 @@
                crnCommand.setCrnNo(crn.getId()); // 堆垛机编号
                crnCommand.setTaskMode(CrnTaskModeType.CLEAR);
                crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                crnCommand.setCommand((short) 0);  // 任务完成确认位
                // 延时发送
                Thread.sleep(1000L);
                if (MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, crnCommand))) {
src/main/java/com/zy/asrs/entity/LocDetl.java
@@ -22,46 +22,53 @@
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value= "库位号")
    @TableId(value = "loc_no", type = IdType.INPUT)
    @TableField("loc_no")
    private String locNo;
    @ApiModelProperty(value= "商品编号")
    @TableId(value = "matnr", type = IdType.INPUT)
    private String matnr;
    @ApiModelProperty(value= "产品编码")
    @TableId(value = "mat_no", type = IdType.INPUT)
    @TableField("mat_no")
    private String matNo;
    @ApiModelProperty(value= "商品名称")
    private String maktx;
    @ApiModelProperty(value= "产品名称")
    @TableId(value = "mat_name")
    @TableField("mat_name")
    private String matName;
    @ApiModelProperty(value= "规格")
    private String lgnum;
    private String specs;
    @ApiModelProperty(value= "型号")
    private String type;
    @ApiModelProperty(value= "尺寸")
    private String size;
    @ApiModelProperty(value= "条码")
    @ApiModelProperty(value= "颜色")
    private String color;
    @ApiModelProperty(value= "批号")
    @ApiModelProperty(value= "单重")
    private Double weight;
    @ApiModelProperty(value= "供应商")
    private String supplier;
    @ApiModelProperty(value= "单据编号")
    @ApiModelProperty(value= "仓库")
    private String warehouse;
    @ApiModelProperty(value= "品项数")
    @ApiModelProperty(value= "品牌")
    private String brand;
    @ApiModelProperty(value= "数量")
    private Double anfme;
    private Double qty;
    @ApiModelProperty(value= "单位")
    private String altme;
    private String unit;
    @ApiModelProperty(value= "托盘条码")
    private String zpallet;
    @ApiModelProperty(value= "客户名称")
    @ApiModelProperty(value= "用户ID")
    private String bname;
    @ApiModelProperty(value= "备注")
@@ -82,6 +89,31 @@
    @ApiModelProperty(value= "添加时间")
    @TableField("appe_time")
    private Date appeTime;
    @TableField("bill_no")
    private String billNo;
    @TableField("seq_no")
    private int seqNo;
    @TableField("bill_type")
    private int billType;
    @TableField("object_id")
    private String objectId;
    @TableField("object_name")
    private String objectName;
    @TableField("det_id")
    private int detId;
    @TableId(value = "Item_batch", type = IdType.INPUT)
    @TableField("Item_batch")
    private String itemBatch;
    @TableField("order_no")
    private String orderNo;
    public String getLocNo$(){
        LocMastService service = SpringUtils.getBean(LocMastService.class);
@@ -124,5 +156,4 @@
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
    }
}
src/main/java/com/zy/asrs/entity/WrkDetl.java
@@ -1,19 +1,24 @@
package com.zy.asrs.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.zy.system.entity.User;
import com.zy.system.service.UserService;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("asr_wrk_detl")
public class WrkDetl implements Serializable {
@@ -33,65 +38,59 @@
    @TableField("io_time")
    private Date ioTime;
    /**
     * 物料
     */
    @ApiModelProperty(value= "商品编号")
    private String matnr;
    @ApiModelProperty(value= "产品编码")
    @TableId(value = "mat_no")
    @TableField("mat_no")
    private String matNo;
    /**
     * 物料描述
     */
    @ApiModelProperty(value= "商品名称")
    private String maktx;
    @ApiModelProperty(value= "产品名称")
    @TableId(value = "mat_name")
    @TableField("mat_name")
    private String matName;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "规格")
    private String lgnum;
    private String specs;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "型号")
    private String type;
    @ApiModelProperty(value= "尺寸")
    private String size;
    /**
     * 条码
     */
    @ApiModelProperty(value= "条码")
    @ApiModelProperty(value= "颜色")
    private String color;
    /**
     * 批号
     */
    @ApiModelProperty(value= "批号")
    private String supplier;
    @ApiModelProperty(value= "单重")
    private Double weight;
    /**
     * 单据编号
     */
    @ApiModelProperty(value= "单据编号")
    private String warehouse;
    @TableField("bill_no")
    private String billNo;
    /**
     * 品项数
     * 序号
     */
    @ApiModelProperty(value= "品项数")
    @ApiModelProperty(value= "序号")
    @TableField("seq_no")
    private Integer seqNo;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "品牌")
    private String brand;
    /**
     * 数量
     */
    @ApiModelProperty(value= "数量")
    private Double anfme;
    private Double qty;
    /**
     * 单位
     */
    @ApiModelProperty(value= "单位")
    private String altme;
    private String unit;
    /**
     * 托盘条码
@@ -100,9 +99,9 @@
    private String zpallet;
    /**
     * 客户名称
     * 用户ID
     */
    @ApiModelProperty(value= "客户名称")
    @ApiModelProperty(value= "用户ID")
    private String bname;
    /**
@@ -139,6 +138,16 @@
    @TableField("appe_time")
    private Date appeTime;
    @ApiModelProperty(value= "库位号")
    @TableField(exist = false)
    private String locNo;
    @TableField("Item_batch")
    private String itemBatch;
    @TableField("order_no")
    private String orderNo;
    public String getIoTime$(){
        if (Cools.isEmpty(this.ioTime)){
            return "";
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -111,6 +111,8 @@
                    if("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
                        continue;
                    }
                } else {
                    continue;
                }
                // 获取入库站信息
@@ -662,7 +664,7 @@
                            wrkMast.setUpdMk("Y");
                            wrkMastMapper.updateById(wrkMast);
                            // 生成工作档、改变浅库位的源库/目标库 库位状态、下发堆垛机命令(立马执行)
//                            moveLocForDeepLoc(slave, shallowLoc);
                            moveLocForDeepLoc(slave, shallowLoc);
                        }
                        log.error("{}任务出库失败,浅库位堵塞!", wrkMast.getWrkNo());
                        continue;
@@ -1098,7 +1100,7 @@
                ledCommand.setStaNo(wrkMast.getStaNo());
                if (wrkMast.getIoType() != 110) {
                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme())));
                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatNo(), wrkDetl.getMatName(), wrkDetl.getQty())));
                }
                commands.add(ledCommand);
            }
@@ -1228,7 +1230,7 @@
                WrkDetl wrkDetl = new WrkDetl();
                wrkDetl.setWrkNo(workNo);
                wrkDetl.setIoTime(new Date());
                wrkDetl.setAnfme(locDetl.getAnfme());
                wrkDetl.setQty(locDetl.getQty());
                VersionUtils.setWrkDetl(wrkDetl, locDetl); // 版本控制
                wrkDetl.setAppeTime(new Date());
                wrkDetl.setModiTime(new Date());
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
@@ -38,7 +38,6 @@
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setIoTime(new Date());
            wrkDetl.setAnfme(waitPakin.getAnfme()); // 数量
            VersionUtils.setWrkDetl(wrkDetl, matCode); // 版本控制
            wrkDetl.setZpallet(barcode); // 托盘条码
            wrkDetl.setAppeTime(new Date());
src/main/java/com/zy/asrs/utils/VersionUtils.java
@@ -15,56 +15,50 @@
    // 业务 ----------------------------------------------------------------------
    public static void setWrkDetl(WrkDetl wrkDetl, MatCode matCode) {
        wrkDetl.setMatnr(matCode.getMatNo()); // 物料编号
        wrkDetl.setMaktx(matCode.getMatName()); // 物料描述
        wrkDetl.setLgnum(matCode.getStr2()); // 规格
        wrkDetl.setType(matCode.getStr5()); // 型号
        wrkDetl.setColor(matCode.getBarcode()); // 条码
        wrkDetl.setSupplier(matCode.getStr6()); // 批号
        wrkDetl.setWarehouse(matCode.getStr7()); // 单据编号
        wrkDetl.setBrand(matCode.getStr3()); // 品项数
        wrkDetl.setAltme(matCode.getStr1()); // 单位
        wrkDetl.setBname(matCode.getStr4()); // 客户名称
//        wrkDetl.setMatNo(matCode.getMatNo()); // 物料编号
//        wrkDetl.setMatName(matCode.getMatName()); // 物料描述
//        wrkDetl.setLgnum(matCode.getStr2()); // 规格
//        wrkDetl.setType(matCode.getStr5()); // 型号
//        wrkDetl.setColor(matCode.getBarcode()); // 条码
//        wrkDetl.setSupplier(matCode.getStr6()); // 批号
//        wrkDetl.setWarehouse(matCode.getStr7()); // 单据编号
//        wrkDetl.setBrand(matCode.getStr3()); // 品项数
//        wrkDetl.setAltme(matCode.getStr1()); // 单位
//        wrkDetl.setBname(matCode.getStr4()); // 客户名称
    }
    public static void setWrkDetl(WrkDetl wrkDetl, LocDetl locDetl) {
        wrkDetl.setMatnr(locDetl.getMatnr()); // 物料编号
        wrkDetl.setMaktx(locDetl.getMaktx()); // 物料描述
        wrkDetl.setLgnum(locDetl.getLgnum()); // 规格
        wrkDetl.setType(locDetl.getType()); // 型号
        wrkDetl.setColor(locDetl.getColor()); // 条码
        wrkDetl.setSupplier(locDetl.getSupplier()); // 批号
        wrkDetl.setWarehouse(locDetl.getWarehouse()); // 单据编号
        wrkDetl.setBrand(locDetl.getBrand()); // 品项数
        wrkDetl.setAltme(locDetl.getAltme()); // 单位
        wrkDetl.setBname(locDetl.getBname()); // 客户名称
        wrkDetl.setMatNo(locDetl.getMatNo()); // 产品编号
        wrkDetl.setMatName(locDetl.getMatName()); // 产品描述
        wrkDetl.setSpecs(locDetl.getSpecs()); // 规格
        wrkDetl.setUnit(locDetl.getUnit()); // 单位
        wrkDetl.setSize(locDetl.getSize()); // 尺寸
        wrkDetl.setColor(locDetl.getColor()); // 颜色
        wrkDetl.setWeight(locDetl.getWeight()); // 单重
        wrkDetl.setZpallet(locDetl.getZpallet()); // 托盘条码
    }
    public static void setLocDetl(LocDetl locDetl, MatCode matCode) {
        locDetl.setMatnr(matCode.getMatNo()); // 物料编号
        locDetl.setMaktx(matCode.getMatName()); // 物料描述
        locDetl.setLgnum(matCode.getStr2()); // 规格
        locDetl.setType(matCode.getStr5()); // 型号
        locDetl.setColor(matCode.getBarcode()); // 条码
        locDetl.setSupplier(matCode.getStr6()); // 批号
        locDetl.setWarehouse(matCode.getStr7()); // 单据编号
        locDetl.setBrand(matCode.getStr3()); // 品项数
        locDetl.setAltme(matCode.getStr1()); // 单位
        locDetl.setBname(matCode.getStr4()); // 客户名称
//        locDetl.setMatNo(matCode.getMatNo()); // 物料编号
//        locDetl.setMatName(matCode.getMatName()); // 物料描述
//        locDetl.setLgnum(matCode.getStr2()); // 规格
//        locDetl.setType(matCode.getStr5()); // 型号
//        locDetl.setColor(matCode.getBarcode()); // 条码
//        locDetl.setSupplier(matCode.getStr6()); // 批号
//        locDetl.setWarehouse(matCode.getStr7()); // 单据编号
//        locDetl.setBrand(matCode.getStr3()); // 品项数
//        locDetl.setAltme(matCode.getStr1()); // 单位
//        locDetl.setBname(matCode.getStr4()); // 客户名称
    }
    public static void setLocDetl(LocDetl locDetl, WrkDetl wrkDetl) {
        locDetl.setMatnr(wrkDetl.getMatnr()); // 物料编号
        locDetl.setMaktx(wrkDetl.getMaktx()); // 物料描述
        locDetl.setLgnum(wrkDetl.getLgnum()); // 规格
        locDetl.setType(wrkDetl.getType()); // 型号
        locDetl.setColor(wrkDetl.getColor()); // 条码
        locDetl.setSupplier(wrkDetl.getSupplier()); // 批号
        locDetl.setWarehouse(wrkDetl.getWarehouse()); // 单据编号
        locDetl.setBrand(wrkDetl.getBrand()); // 品项数
        locDetl.setAltme(wrkDetl.getAltme()); // 单位
        locDetl.setBname(wrkDetl.getBname()); // 客户名称
        locDetl.setMatNo(wrkDetl.getMatNo()); // 产品编号
        locDetl.setMatName(wrkDetl.getMatName()); // 产品描述
        locDetl.setSpecs(wrkDetl.getSpecs()); // 规格
        locDetl.setUnit(wrkDetl.getUnit()); // 单位
        locDetl.setSize(wrkDetl.getSize()); // 尺寸
        locDetl.setColor(wrkDetl.getColor()); // 颜色
        locDetl.setQty(wrkDetl.getQty()); // 数量
        locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码
    }
@@ -73,19 +67,16 @@
     **/
    public static void locMoveCheckLocType(LocMast sourceLoc, LocMast loc){
        // 如果源库位是高库位,目标库位是低库位
        if (sourceLoc.getLocType1() == 2 && loc.getLocType1() == 1) {
            throw new CoolException("高库位不能移转至低库位");
        }
//        if (sourceLoc.getLocType1() == 2 && loc.getLocType1() == 1) {
//            throw new CoolException("高库位不能移转至低库位");
//        }
    }
    /**
     *  库位移转时类型检测
     **/
    public static boolean locMoveCheckLocType(LocMast loc, LocTypeDto dto){
        // 如果源库位是高库位,目标库位是低库位
        if (dto.getLocType1() == 2 && loc.getLocType1() == 1) {
            return false;
        }
        return true;
    }
src/main/java/com/zy/core/thread/MelsecCrnThread.java
@@ -24,6 +24,7 @@
import com.zy.core.model.protocol.CrnProtocol;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import java.text.MessageFormat;
import java.util.Date;
@@ -50,6 +51,11 @@
    @SuppressWarnings("InfiniteLoopStatement")
    public void run() {
        this.connect();
//        try {
//            Thread.sleep(2000);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
        while (true) {
            try {
                int step = 1;
@@ -137,7 +143,7 @@
            log.error("堆垛机plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
            initCrn();
        }
        melsecMcNet.ConnectClose();
//        melsecMcNet.ConnectClose();
        return result;
    }
@@ -146,9 +152,11 @@
     */
    private void readStatus(){
        try {
            if (this.slave.getId() == 1) {
                System.out.println("===");
            }
//            if (this.slave.getId() == 1 && flag1.equals(0)) {
//                Thread.sleep(3000);
//                flag1=1;
//                System.out.println("===");
//            }
            OperateResultExOne<byte[]> result = melsecMcNet.Read("D20", (short) 70);
            if (result.IsSuccess) {
                if (null == crnProtocol) {
@@ -190,6 +198,7 @@
                    }
                }
                // 根据实时信息更新数据库
                BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class);
                BasCrnp basCrnp = new BasCrnp();
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -123,7 +123,7 @@
                staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*2));     // 工作号
            }
        }
        Thread.sleep(50);
        Thread.sleep(200);
        OperateResultExOne<byte[]> result0 = siemensS7Net.Read("DB101.0", (short) 166);
        if (result0.IsSuccess) {
            for (int i = 0; i < 83; i++) {
@@ -137,7 +137,7 @@
                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result0.Content, i*2));   // 目标站
            }
        }
        Thread.sleep(50);
        Thread.sleep(200);
        OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB102.0", (short) 166);
        if (result1.IsSuccess) {
            for (int i = 0; i < 83; i++) {
@@ -181,7 +181,7 @@
        } 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());
//            log.error("读取输送线plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
        }
    }
src/main/resources/application.yml
@@ -8,10 +8,10 @@
    name: @pom.build.finalName@
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
#    url: jdbc:sqlserver://47.97.1.152:51433;databasename=xgmasrs
#    username: sa
#    password: Zoneyung@zy56$
    url: jdbc:sqlserver://localhost:1433;databasename=xgmasrs
    #    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
    username: sa
    password: sa@123
  mvc:
@@ -37,7 +37,8 @@
  enable: false
wms:
  url: localhost:8080/xgmwms
  # url: 10.10.10.238:8080/xgmwms
  url: localhost:8082/xgmwms
# 下位机配置
wcs-slave:
@@ -185,34 +186,17 @@
    id: 1
    ip: 10.10.10.52
    port: 51236
  # LED1
   # LED1
  led[0]:
    id: 1
    ip: 192.168.10.211
    ip: 10.10.10.60
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 170
    staArr: 173
  # LED2
  led[1]:
    id: 2
    ip: 192.168.10.221
    ip: 10.10.10.61
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 180
    staArr: 182
src/main/resources/mapper/LocDetlMapper.xml
@@ -5,16 +5,17 @@
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.LocDetl">
        <result column="loc_no" property="locNo" />
        <result column="matnr" property="matnr" />
        <result column="maktx" property="maktx" />
        <result column="lgnum" property="lgnum" />
        <result column="type" property="type" />
        <result column="mat_no" property="matNo" />
        <result column="mat_name" property="matName" />
        <result column="specs" property="specs" />
        <result column="size" property="size" />
        <result column="color" property="color" />
        <result column="weight" property="weight" />
        <result column="supplier" property="supplier" />
        <result column="warehouse" property="warehouse" />
        <result column="brand" property="brand" />
        <result column="anfme" property="anfme" />
        <result column="altme" property="altme" />
        <result column="qty" property="qty" />
        <result column="unit" property="unit" />
        <result column="zpallet" property="zpallet" />
        <result column="bname" property="bname" />
        <result column="memo" property="memo" />
@@ -28,11 +29,11 @@
        <if test="loc_no!=null and loc_no!='' ">
            and a.loc_no like '%' + #{loc_no} + '%'
        </if>
        <if test="matnr!=null and matnr!='' ">
            and a.matnr like '%' + #{matnr} + '%'
        <if test="matNo!=null and matNo!='' ">
            and a.mat_no like '%' + #{matNo} + '%'
        </if>
        <if test="maktx!=null and maktx!='' ">
            and a.maktx like '%' + #{maktx} + '%'
        <if test="matName!=null and matName!='' ">
            and a.mat_name like '%' + #{matName} + '%'
        </if>
        <if test="anfme!=null and anfme!='' ">
            and a.anfme like '%' + #{anfme} + '%'
src/main/resources/mapper/WrkDetlMapper.xml
@@ -6,16 +6,17 @@
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WrkDetl">
        <result column="wrk_no" property="wrkNo" />
        <result column="io_time" property="ioTime" />
        <result column="matnr" property="matnr" />
        <result column="maktx" property="maktx" />
        <result column="lgnum" property="lgnum" />
        <result column="type" property="type" />
        <result column="mat_no" property="matNo" />
        <result column="mat_name" property="matName" />
        <result column="specs" property="specs" />
        <result column="size" property="size" />
        <result column="color" property="color" />
        <result column="supplier" property="supplier" />
        <result column="warehouse" property="warehouse" />
        <result column="weight" property="weight" />
        <result column="bill_no" property="billNo" />
        <result column="seq_no" property="seqNo" />
        <result column="brand" property="brand" />
        <result column="anfme" property="anfme" />
        <result column="altme" property="altme" />
        <result column="qty" property="qty" />
        <result column="unit" property="unit" />
        <result column="zpallet" property="zpallet" />
        <result column="bname" property="bname" />
        <result column="memo" property="memo" />
src/main/webapp/static/css/console.css
@@ -1,512 +1,513 @@
        * {
            margin: 0;
            overflow: hidden;
        }
        html,body {
            height: 100%;
        }
        #root {
            width: 100%;
            height: 100%;
            background-color: rgb(108,167,168);
        }
        .head {
            height: 10%;
            width: 20%;
            padding-top: 1%;
            padding-left: 1%;
            color: #FFFFFF;
        }
        .head h1 {
            font-weight: 400;
            letter-spacing:3px;
        }
        .head h6 {
            font-weight: 400;
        }
        #body {
            width: 100%;
            height: 23%    ;
            position: absolute;
            bottom: 1%;
        }
        /* 控制开关 */
        .system-state {
            display: inline-block;
            width: 15%;
            height: 100%;
            background-color: rgba(0, 0, 0, 0.3);
            border-radius: 15px;
            margin-left: 1%;
        }
        /* 堆垛机状态 */
        .machine-status {
            display: inline-block;
            width: 15%;
            height: 100%;
            background-color: rgba(0, 0, 0, 0.3);
            border-radius: 15px;
            margin-left: 1%;
        }
        .state-ss {
            margin-left: 60px;
* {
    margin: 0;
    overflow: hidden;
}
html,body {
    height: 100%;
}
#root {
    width: 100%;
    height: 100%;
    background-color: rgb(108,167,168);
}
.head {
    height: 10%;
    width: 20%;
    padding-top: 1%;
    padding-left: 1%;
    color: #FFFFFF;
}
.head h1 {
    font-weight: 400;
    letter-spacing:3px;
}
.head h6 {
    font-weight: 400;
}
#body {
    width: 100%;
    height: 23%    ;
    position: absolute;
    bottom: 1%;
}
/* 控制开关 */
.system-state {
    display: inline-block;
    width: 15%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.3);
    border-radius: 15px;
    margin-left: 1%;
}
/* 堆垛机状态 */
.machine-status {
    display: inline-block;
    width: 15%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.3);
    border-radius: 15px;
    margin-left: 1%;
}
.state-ss {
    margin-left: 60px;
        }
}
        /* 输送线状态 */
        .line-status {
            display: inline-block;
            width: 15%;
            height: 100%;
            background-color: rgba(0, 0, 0, 0.3);
            border-radius: 15px;
            margin-left: 1%;
        }
        .line-ss {
            display: inline-block;
            float: right;
            height: 15px;
            width: 40px;
            margin-top: 10px;
            margin-right: 15px;
            line-height: 15px;
            text-align: center;
            background-color: rgba(5, 5, 5, 0.3);
            color: #ffdd00;
        }
        /* 条码扫描器 */
        .bar-code {
            display: inline-block;
            width: 49%;
            height: 100%;
            background-color: rgba(0, 0, 0, 0.3);
            border-radius: 15px;
            margin-left: 1%;
        }
        /*扫码表单*/
        .tablebox {
            display: inline-block;
            width: 290px;
            height: 162px;
            margin-left: 1.5%;
            color: white;
            font-size: 14px;
            list-style: none;
            line-height: 27px;
            text-indent: 10px;
        }
        .table-head {
            width: 100%;
            height: 27px;
            background:linear-gradient(to right, rgb(94, 193, 184),rgb(12,71,63));
        }
        .right {
            float: right;
            text-indent: 10px;
            padding-right: 10px;
        }
        .table-body li {
            background-color: #5D7677;
        }
        .table-body li:nth-child(even) {
            background-color: #4A6565;
        }
/* 输送线状态 */
.line-status {
    display: inline-block;
    width: 15%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.3);
    border-radius: 15px;
    margin-left: 1%;
}
.line-ss {
    display: inline-block;
    float: right;
    height: 15px;
    width: 40px;
    margin-top: 10px;
    margin-right: 15px;
    line-height: 15px;
    text-align: center;
    background-color: rgba(5, 5, 5, 0.3);
    color: #ffdd00;
}
/* 条码扫描器 */
.bar-code {
    display: inline-block;
    width: 49%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.3);
    border-radius: 15px;
    margin-left: 1%;
}
/*扫码表单*/
.tablebox {
    display: inline-block;
    width: 290px;
    height: 162px;
    margin-left: 1.5%;
    color: white;
    font-size: 14px;
    list-style: none;
    line-height: 27px;
    text-indent: 10px;
}
.table-head {
    width: 100%;
    height: 27px;
    background:linear-gradient(to right, rgb(94, 193, 184),rgb(12,71,63));
}
.right {
    float: right;
    text-indent: 10px;
    padding-right: 10px;
}
.table-body li {
    background-color: #5D7677;
}
.table-body li:nth-child(even) {
    background-color: #4A6565;
}
        /* 控制表头 */
        .body-head {
            height: 35px;
            width: 100%;
            background-image: url(../images/status_bar_1.png);
            background-repeat: no-repeat;
            margin-left: 5%;
            margin-top: 20px;
            text-indent: 25px;
            color: white;
        }
        .system-icon-open {
            width: 153px;
            height: 153px;
            background-image: url(../images/start48.png);
            display: inline-block;
        }
        .system-icon-close {
            width: 153px;
            height: 153px;
            background-image: url(../images/stop48.png);
            display: inline-block;
        }
        .switch_r {
            color: #FFFFFF;
            font-size: 14px;
            width: 130px;
            height: 153px;
            float: right;
            padding-top: 30px;
        }
        #system-run-desc {
            font-size: 20px;
            margin-top: 15px;
        }
        .state {
            height: 34px;
            width: 200px;
            background-color: rgba(255,255,255,0.1);
            background-image: url(../images/stacker.png);
            background-repeat: no-repeat;
            border-radius: 17px 0 0 17px;
            padding-left: 50px;
            line-height: 34px;
            margin-bottom: 10px;
            margin-left: 5%;
            color: #FFFFFF;
            font-size: 10px;
        }
        .states {
            background-image: url(../images/line.png);
            margin-bottom:54px;
        }
        .button {
            margin-left: 5%;
            font-size: 14px;
            color: #FFFFFF;
        }
        /* 入库 */
        .machine-put-flag {
            padding: 0 10px;
            background-color: rgb(163,214,242);
        }
        /* 出库 */
        .machine-take-flag {
            padding: 0 10px;
            background-color: rgb(151,180,0);
        }
        /* 库到库 */
        .machine-stock-move-flag {
            padding: 0 10px;
            background-color: rgb(58,77,249);
        }
        /* 站到站 */
        .machine-site-move-flag {
            padding: 0 10px;
            background-color: rgb(240,140,10);
        }
        /* PToP */
        .machine-p-move-flag {
            padding: 0 10px;
            background-color: rgb(29,152,23);
        }
        /* 异常 */
        .machine-error-flag {
            padding: 0 10px;
            background-color: rgb(252,48,48);
        }
        /* 自动 */
        .machine-auto-flag {
            padding: 0 10px;
            background-color: rgb(132,255,115);
        }
        /* 非自动/手动 */
        .machine-unauto-flag {
            padding: 0 10px;
            background-color: rgb(184,184,184);
        }
        /* 自动+有物+ID */
        .site-auto-run-id {
            padding: 0 25px;
            background-color: rgb(252,48,48);
        }
        /* 自动+有物 */
        .site-auto-run {
            padding: 0 25px;
            background-color: rgb(250,81,246);
        }
        /* 自动+ID */
        .site-auto-id {
            padding: 0 10px;
            background-color: rgb(196,196,0);
        }
        .site-auto {
            padding: 0 10px;
            background-color: rgb(120,255,129);
        }
        /* 非自动/手动 */
        .site-unauto {
            padding: 0 10px;
            background-color: rgb(184,184,184);
        }
        #code {
            background-image: url(../images/status_bar_2.png);
            background-repeat: no-repeat;
            margin-left: 2%;
        }
        /* 站点 */
        .site {
            color: #333;
            height: 18px;
            border: 1px solid rgb(108,167,168);
            cursor: pointer;
            width: 50px;
            text-align: center;
            background-color: rgb(120,255,129);
            font-size: 13px;
        }
        /*空站点*/
        /* ------------------ 输送线总成 ------------------ */
        .site-row {
            position: absolute;
            top: 122px;
        }
        /* 输送线第一列 */
        .site-row-1 {
            top: 205px;
            left: 172px;
        }
        .site-row-1 .site {
            width: 70px;
        }
        /* 输送线第二列 */
        .site-row-2 {
            top: 205px;
            left: 243px;
        }
        .site-row-2 .site {
            width: 70px;
        }
        .site-row-3 {
            top: 246px;
            left: 314px;
        }
        .site-row-3 .site {
            width: 70px;
        }
        .site-row-4 {
            top: 205px;
            left: 314px;
        }
        .site-row-5 {
            top: 71px;
            left: 456px;
        }
        .site-row-5 .site {
            width: 70px;
        }
        .site-row-6 {
            top: 71px;
            left: 528px;
        }
        .site-row-6 .site {
            width: 70px;
        }
        /* ------------------ 货架总成 ------------------ */
        .main-part {
            position: absolute;
            top: 20px;
            left: 600px;
        }
        .main-part .lane {
            margin-top: 30px;
        }
        /* 库位组 */
        .stock-group .item {
            float: left;
            border-top: 1px solid rgb(194,76,65);
            border-bottom: 1px solid rgb(194,76,65);
            border-left: 1px solid rgb(194,76,65);
            border-right: 1px solid rgb(194,76,65);
            border-right: none;
            cursor: inherit;
            color: rgb(194,76,65);
        }
        .stock-group .site {
            width: 80px;
            float: left;
        }
        .stock-group::after, .stock-group::before {
            content: "";
            display: table;
            clear: both;
        }
        /* 堆垛机轨道 */
        .pathway {
            margin-left: 30px;
            border: 1px solid #333;
            position: absolute;
            background-color:#333!important;
            color: #333 !important;
            width: 100%;
            margin-top: 10px;
        }
        /* 堆垛机 */
        .machine {
            margin-left: 30px;
            position: relative;
            background-color: rgb(108,167,168);
            height: 20px;
            width: 80px;
            background-image: url("../images/Crane_auto.png");
            background-repeat: no-repeat;
            background-size:100% 100%;
            background-position: top center;
            cursor: pointer;
        }
        /* 入库 */
        .machine-pakin {
            background-image: url("../images/Crane_store.png");
        }
        /* 出库 */
        .machine-pakout {
            background-image: url("../images/Crane_retrieve.png");
        }
        /* 库到库 */
        .machine-stock-move {
            background-image: url("../images/Crane_loctoloc.png");
        }
        /* 站到站 */
        .machine-site-move {
            background-image: url("../images/Crane_stntostn.png");
        }
        /* p to p */
        .machine-p-move {
            background-image: url("../images/Crane_hptoohp.png");
        }
        /* 异常 */
        .machine-error {
            background-image: url("../images/Crane_error.png");
        }
        /* 自动 */
        .machine-auto {
            background-image: url("../images/Crane_auto.png");
        }
        /* 非自动/收到 */
        .machine-un-auto {
            background-image: url("../images/Crane_manual.png");
        }
/* 控制表头 */
.body-head {
    height: 35px;
    width: 100%;
    background-image: url(../images/status_bar_1.png);
    background-repeat: no-repeat;
    margin-left: 5%;
    margin-top: 20px;
    text-indent: 25px;
    color: white;
}
        /* 堆垛机弹窗 */
        #crnWindow {
            width: 291px;
            height: 365px;
            background-image: url(../images/Popup-yellow.png);
            position: fixed;
            color:white;
            left: 50%;
            top: 50%;
            transform: translate(-50%,-50%);
        }
        /* 输送设备弹窗 */
        #siteWindow {
            width: 291px;
            height: 336px;
            background-image: url(../images/Popup-green.png);
            position: fixed;
            color:white;
            left: 50%;
            top: 50%;
            transform: translate(-50%,-50%);
        }
        #siteWindow-head {
            width: 291px;
            height: 55px;
            line-height: 55px;
            margin-left: 25px;
            color: #000000;
            font-weight: 700;
            letter-spacing: 2px;
        }
        #siteWindow-head .detailed {
            display: inline-block;
        }
        #siteWindow-head button {
            width: 25px;
            height: 25px;
            padding: 0px;
            border: none;
            border-radius: 25px;
            background-image: url(../images/siteclose.png);
            display: inline-block;
            float: right;
            margin-top: 15px;
            margin-right: 50px;
        }
        #crnWindow-head {
            width: 291px;
            height: 55px;
            line-height: 55px;
            margin-left: 55px;
            color: #000000;
            font-weight: 700;
            letter-spacing: 2px;
        }
        #crnWindow-head .detailed {
            display: inline-block;
        }
        #crnWindow-head button {
            width: 25px;
            height: 25px;
            padding: 0px;
            border: none;
            border-radius: 25px;
            background-image: url(../images/siteclose.png);
            display: inline-block;
            float: right;
            margin-top: 15px;
            margin-right: 80px;
        }
        /* 弹窗 */
        form .form-item {
            display: inline-block;
            padding-left: 10px;
        }
        form .form-item-label {
            display: inline-block;
            width: 90px;
            font-size: 10px;
        }
        form .form-item-input {
            display: inline-block;
            width: 180px;
        }
        form .form-item-input input {
            background-color: rgba(255,255,255,.3);
            color: #FFFFFF;
            padding: 0;
            border: none;
            border-radius: 2px;
            height: 18px;
            padding-left: 10px;
        }
        /* checkbox */
        form .form-item-checkbox {
            display: inline-block;
            padding-left: 10px;
            width: 20%;
        }
        form .form-item-label-checkbox {
            display: inline-block;
            width: auto;
            font-size: 14px;
        }
        form .form-item-input-checkbox {
            display: inline-block;
            width: auto;
.system-icon-open {
    width: 153px;
    height: 153px;
    background-image: url(../images/start48.png);
    display: inline-block;
}
.system-icon-close {
    width: 153px;
    height: 153px;
    background-image: url(../images/stop48.png);
    display: inline-block;
}
.switch_r {
    color: #FFFFFF;
    font-size: 14px;
    width: 130px;
    height: 153px;
    float: right;
    padding-top: 30px;
}
#system-run-desc {
    font-size: 20px;
    margin-top: 15px;
}
.state {
    height: 34px;
    width: 200px;
    background-color: rgba(255,255,255,0.1);
    background-image: url(../images/stacker.png);
    background-repeat: no-repeat;
    border-radius: 17px 0 0 17px;
    padding-left: 50px;
    line-height: 34px;
    margin-bottom: 10px;
    margin-left: 5%;
    color: #FFFFFF;
    font-size: 10px;
}
.states {
    background-image: url(../images/line.png);
    margin-bottom:54px;
}
.button {
    margin-left: 5%;
    font-size: 14px;
    color: #FFFFFF;
}
/* 入库 */
.machine-put-flag {
    padding: 0 10px;
    background-color: rgb(163,214,242);
}
/* 出库 */
.machine-take-flag {
    padding: 0 10px;
    background-color: rgb(151,180,0);
}
/* 库到库 */
.machine-stock-move-flag {
    padding: 0 10px;
    background-color: rgb(58,77,249);
}
/* 站到站 */
.machine-site-move-flag {
    padding: 0 10px;
    background-color: rgb(240,140,10);
}
/* PToP */
.machine-p-move-flag {
    padding: 0 10px;
    background-color: rgb(29,152,23);
}
/* 异常 */
.machine-error-flag {
    padding: 0 10px;
    background-color: rgb(252,48,48);
}
/* 自动 */
.machine-auto-flag {
    padding: 0 10px;
    background-color: rgb(132,255,115);
}
/* 非自动/手动 */
.machine-unauto-flag {
    padding: 0 10px;
    background-color: rgb(184,184,184);
}
/* 自动+有物+ID */
.site-auto-run-id {
    background-color: rgb(252,48,48);
}
/* 自动+有物 */
.site-auto-run {
    background-color: rgb(250,81,246);
}
/* 自动+ID */
.site-auto-id {
    background-color: rgb(196,196,0);
}
/* 自动 */
.site-auto {
    background-color: rgb(120,255,129);
}
/* 非自动/手动 */
.site-unauto {
    background-color: rgb(184,184,184);
}
#code {
    background-image: url(../images/status_bar_2.png);
    background-repeat: no-repeat;
    margin-left: 2%;
}
/* 站点 */
.site {
    color: #333;
    height: 18px;
    border: 1px solid rgb(108,167,168);
    cursor: pointer;
    width: 50px;
    text-align: center;
    background-color: rgb(120,255,129);
    font-size: 13px;
}
.site-k {
    border: 1px solid rgb(108,167,168);
    background-color: rgb(108, 167, 168);
}
/*空站点*/
/* ------------------ 输送线总成 ------------------ */
.site-row {
    position: absolute;
    top: 122px;
}
/* 输送线第一列 */
.site-row-1 {
    top: 205px;
    left: 128px;
}
.site-row-1 .site {
    width: 90px;
}
        }
/* 输送线第二列 */
.site-row-2 {
    top: 205px;
    left: 230px;
}
.site-row-2 .site {
    width: 90px;
}
.site-row-3 {
    top: 205px;
    left: 302px;
    width: 144px;
}
.site-row-3 .site {
    width: 90px;
}
.site-row-4 {
    top: 246px;
    left: 374px;
}
.site-row-5 {
    top: 71px;
    left: 446px;
}
.site-row-5 .site {
    width: 90px;
}
.site-row-6 {
    top: 71px;
    left: 518px;
}
.site-row-6 .site {
    width: 90px;
}
/* ------------------ 货架总成 ------------------ */
.main-part {
    position: absolute;
    top: 20px;
    left: 590px;
}
.main-part .lane {
    margin-top: 30px;
}
/* 库位组 */
.stock-group .item {
    float: left;
    border-top: 1px solid rgb(194,76,65);
    border-bottom: 1px solid rgb(194,76,65);
    border-left: 1px solid rgb(194,76,65);
    border-right: 1px solid rgb(194,76,65);
    border-right: none;
    cursor: inherit;
    color: rgb(194,76,65);
}
.stock-group .site {
    width: 80px;
    float: left;
}
.stock-group::after, .stock-group::before {
    content: "";
    display: table;
    clear: both;
}
/* 堆垛机轨道 */
.pathway {
    margin-left: 30px;
    border: 1px solid #333;
    position: absolute;
    background-color:#333!important;
    color: #333 !important;
    width: 100%;
    margin-top: 10px;
}
/* 堆垛机 */
.machine {
    margin-left: 30px;
    position: relative;
    background-color: rgb(108,167,168);
    height: 20px;
    width: 80px;
    background-image: url("../images/Crane_auto.png");
    background-repeat: no-repeat;
    background-size:100% 100%;
    background-position: top center;
    cursor: pointer;
}
/* 入库 */
.machine-pakin {
    background-image: url("../images/Crane_store.png");
}
/* 出库 */
.machine-pakout {
    background-image: url("../images/Crane_retrieve.png");
}
/* 库到库 */
.machine-stock-move {
    background-image: url("../images/Crane_loctoloc.png");
}
/* 站到站 */
.machine-site-move {
    background-image: url("../images/Crane_stntostn.png");
}
/* p to p */
.machine-p-move {
    background-image: url("../images/Crane_hptoohp.png");
}
/* 异常 */
.machine-error {
    background-image: url("../images/Crane_error.png");
}
/* 自动 */
.machine-auto {
    background-image: url("../images/Crane_auto.png");
}
/* 非自动/收到 */
.machine-un-auto {
    background-image: url("../images/Crane_manual.png");
}
/* 堆垛机弹窗 */
#crnWindow {
    width: 291px;
    height: 365px;
    background-image: url(../images/Popup-yellow.png);
    position: fixed;
    color:white;
    left: 50%;
    top: 50%;
    transform: translate(-50%,-50%);
}
/* 输送设备弹窗 */
#siteWindow {
    width: 291px;
    height: 336px;
    background-image: url(../images/Popup-green.png);
    position: fixed;
    color:white;
    left: 50%;
    top: 50%;
    transform: translate(-50%,-50%);
}
#siteWindow-head {
    width: 291px;
    height: 55px;
    line-height: 55px;
    margin-left: 25px;
    color: #000000;
    font-weight: 700;
    letter-spacing: 2px;
}
#siteWindow-head .detailed {
    display: inline-block;
}
#siteWindow-head button {
    width: 25px;
    height: 25px;
    padding: 0px;
    border: none;
    border-radius: 25px;
    background-image: url(../images/siteclose.png);
    display: inline-block;
    float: right;
    margin-top: 15px;
    margin-right: 50px;
}
#crnWindow-head {
    width: 291px;
    height: 55px;
    line-height: 55px;
    margin-left: 55px;
    color: #000000;
    font-weight: 700;
    letter-spacing: 2px;
}
#crnWindow-head .detailed {
    display: inline-block;
}
#crnWindow-head button {
    width: 25px;
    height: 25px;
    padding: 0px;
    border: none;
    border-radius: 25px;
    background-image: url(../images/siteclose.png);
    display: inline-block;
    float: right;
    margin-top: 15px;
    margin-right: 80px;
}
/* 弹窗 */
form .form-item {
    display: inline-block;
    padding-left: 10px;
}
form .form-item-label {
    display: inline-block;
    width: 90px;
    font-size: 10px;
}
form .form-item-input {
    display: inline-block;
    width: 180px;
}
form .form-item-input input {
    background-color: rgba(255,255,255,.3);
    color: #FFFFFF;
    padding: 0;
    border: none;
    border-radius: 2px;
    height: 18px;
    padding-left: 10px;
}
/* checkbox */
form .form-item-checkbox {
    display: inline-block;
    padding-left: 10px;
    width: 20%;
}
form .form-item-label-checkbox {
    display: inline-block;
    width: auto;
    font-size: 14px;
}
form .form-item-input-checkbox {
    display: inline-block;
    width: auto;
}
src/main/webapp/static/css/crn.css
@@ -2,7 +2,11 @@
    padding: 10px;
    background-color: #f1f1f1;
}
.button-window {
    float: left;
    width: 5%;
    height: 100%;
}
/* -------------------- 第一模块 -------------------- */
.log-board {
    background-color: #fff;
@@ -15,7 +19,7 @@
.command-log {
    float: left;
    height: 100%;
    width: 20%;
    width: 19%;
    text-align: center;
}
.command-log h2 {
@@ -47,7 +51,7 @@
.crn-state {
    float: left;
    height: 100%;
    width: 80%;
    width: 76%;
    overflow: auto;
}
/* 堆垛机状态表 */
@@ -75,7 +79,7 @@
/* -------------------- 第二模块 -------------------- */
.crn-msg {
    overflow: auto;
    /*overflow: auto;*/
    margin-top: 10px;
    height: 23%;
    background-color: #fff;
src/main/webapp/static/css/index.css
@@ -1,63 +1,65 @@
* {
    margin: 0;
    overflow: hidden;
    margin: 0;
    overflow: hidden;
}
html,body {
    height: 100%;
    height: 100%;
}
.nav {
    width: 100%;
    height: 90px;
    line-height: 90px;
    list-style: none;
    color: #fff;
    position: fixed;
    text-align: center;
    letter-spacing:3px;
    width: 100%;
    height: 90px;
    line-height: 90px;
    list-style: none;
    color: #fff;
    position: fixed;
    text-align: center;
    letter-spacing:3px;
}
.right {
    float: right;
    margin-right: 1%;
    margin-top: 1%;
    float: right;
    margin-right: 1%;
    margin-top: 1%;
}
#about {
    width: 47px;
    height: 47px;
    display: inline-block;
    background-image: url(../images/cancellation.png);
    width: 47px;
    height: 47px;
    display: inline-block;
    background-image: url(../images/cancellation.png);
}
.sidebar {
    width: 7%;
    height: 40%;
    line-height: 90px;
    position: fixed;
    top: 50%;
    transform: translateY(-50%);
    width: 7%;
    height: 40%;
    line-height: 90px;
    position: fixed;
    top: 50%;
    transform: translateY(-50%);
}
.sidebar ul {
    font-size: 20px;
    font-weight: 500;
    padding-left: 15%;
    font-size: 20px;
    font-weight: 700;
    padding-left: 15%;
}
.sidebar a {
    text-decoration: none;
    /* color: #fff; */
    text-decoration: none;
    /*color: #cbcbcb;*/
}
.sidebar a:hover {
    color: rgb(87,214,201);
    color: rgb(87,214,201);
}
.nav-unselect {
    color: #fff;
    color: #5D7677;
}
.nav-select {
.nav-select {
    color: rgb(87,214,201);
}
@@ -66,9 +68,9 @@
/* 主体 */
iframe {
    width: 100%;
    height: 100%;
    border-width: 0;
    width: 100%;
    height: 100%;
    border-width: 0;
}
/* 底部 */
footer {
src/main/webapp/static/css/pipeline.css
@@ -9,9 +9,15 @@
    box-shadow: 0 0 3px rgba(0,0,0,.3);
    margin-bottom: 8px;
}
.main-board {
.button-window {
    float: left;
    width: 50%;
    width: 5%;
    height: 100%;
}
.main-board {
    padding-left: 1%;
    float: left;
    width: 47.5%;
    height: 100%;
    overflow: auto;
}
src/main/webapp/views/crn.html
@@ -41,6 +41,7 @@
    </style>
</head>
<body>
<div class="button-window"></div>
<!-- 日志监控板 -->
<div class="log-board">
    <!-- 执行命令 -->
@@ -83,19 +84,19 @@
    <div class="crn-state">
        <table id="crn-state-table">
            <thead>
                <tr>
                    <th>堆垛机</th>
                    <th>模式</th>
                    <th>状态</th>
                    <th>有物</th>
                    <th>列</th>
                    <th>层</th>
                    <th>货叉定位</th>
                    <th>载货台定位</th>
                    <th>走行在定位</th>
                    <th>故障代码</th>
                    <th>故障描述</th>
                </tr>
            <tr>
                <th>堆垛机</th>
                <th>模式</th>
                <th>状态</th>
                <th>有物</th>
                <th>列</th>
                <th>层</th>
                <th>货叉定位</th>
                <th>载货台定位</th>
                <th>走行在定位</th>
                <th>故障代码</th>
                <th>故障描述</th>
            </tr>
            </thead>
            <tbody>
            </tbody>
@@ -106,22 +107,22 @@
<div class="crn-msg">
    <table id="crn-msg-table">
        <thead>
            <tr>
                <th>堆垛机</th>
                <th>工作号</th>
                <th>状态</th>
                <th>源站</th>
                <th>目标站</th>
                <th>源库位</th>
                <th>目标库位</th>
                <th>走行速度(m/min)</th>
                <th>升降速度(m/min)</th>
                <th>叉牙速度(m/min)</th>
                <th>走行距离(m)</th>
                <th>升降距离(m)</th>
                <th>走行时长(s)</th>
                <th>升降时长(s)</th>
            </tr>
        <tr>
            <th>堆垛机</th>
            <th>工作号</th>
            <th>状态</th>
            <th>源站</th>
            <th>目标站</th>
            <th>源库位</th>
            <th>目标库位</th>
            <th>走行速度(m/min)</th>
            <th>升降速度(m/min)</th>
            <th>叉牙速度(m/min)</th>
            <th>走行距离(m)</th>
            <th>升降距离(m)</th>
            <th>走行时长(s)</th>
            <th>升降时长(s)</th>
        </tr>
        </thead>
        <tbody>
        </tbody>
@@ -205,12 +206,12 @@
                <button class="item" onclick="take()">出库</button>
                <button class="item" onclick="stockMove()">库位转移</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="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="pause()">暂停</button>-->
                <!--                <button class="item" onclick="boot()">启动</button>-->
                <button class="item" onclick="clearCommand()">清除命令</button>
                <button class="item" onclick="handleReset()">复位</button>
            </div>
src/main/webapp/views/index.html
@@ -1,43 +1,43 @@
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>自动仓库WCS系统</title>
        <link rel="stylesheet" href="../static/css/index.css">
        <script src="../static/js/jquery/jquery-3.3.1.min.js"></script>
    </head>
    <body>
        <!-- 导航栏 -->
<head>
    <meta charset="utf-8">
    <title>自动仓库WCS系统</title>
    <link rel="stylesheet" href="../static/css/index.css">
    <script src="../static/js/jquery/jquery-3.3.1.min.js"></script>
</head>
<body>
<!-- 导航栏 -->
<!--        <div class="nav">-->
<!--            <li class="right">注销<a id="about" class="nav-unselect" onclick="logout()" href="#"></a></li>-->
<!--        </div>-->
        <div class="sidebar">
            <ul>
                <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>
        <!-- 主体内容 -->
        <iframe id="content" src="console.html"></iframe>
        <footer class="footer">
            Copyright © 2015 All Rights Reserved. <a href="http://www.zoneyung.com" target="_blank">浙江中扬立库技术有限公司</a>  保留所有权利
        </footer>
    </body>
    <script>
    // 导航栏
      function nav(id) {
          $('.nav-select').attr("class", "nav-unselect");
          $('#'+id).attr("class", "nav-select");
          $('#content').attr("src", id+".html");
      }
<div class="sidebar">
    <ul>
        <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>
<!-- 主体内容 -->
<iframe id="content" src="console.html"></iframe>
<footer class="footer">
    Copyright © 2015 All Rights Reserved. <a href="http://www.zoneyung.com" target="_blank">浙江中扬立库技术有限公司</a>  保留所有权利
</footer>
</body>
<script>
    // 导航栏
    function nav(id) {
        $('.nav-select').attr("class", "nav-unselect");
        $('#'+id).attr("class", "nav-select");
        $('#content').attr("src", id+".html");
    }
      function logout() {
          localStorage.removeItem("token");
          window.location.href = baseUrl + "/login";
      }
    function logout() {
        localStorage.removeItem("token");
        window.location.href = baseUrl + "/login";
    }
      // 系统运行状态
      var systemRunning = true;
    </script>
    // 系统运行状态
    var systemRunning = true;
</script>
</html>
src/main/webapp/views/pipeline.html
@@ -18,16 +18,17 @@
</head>
<body>
<main>
    <div class="button-window"></div>
    <!-- plc异常日志监控版 -->
    <div id="plc-error" class="main-board" style="padding-left: 10px">
        <!-- 头部 -->
        <div class="plc-log-header">
<!--            <div style="height: 40%">-->
<!--                <span>东侧PLC执行指令</span>-->
<!--            </div>-->
<!--            <div style="height: 40%">-->
<!--                <span>西侧PLC执行指令</span>-->
<!--            </div>-->
            <!--            <div style="height: 40%">-->
            <!--                <span>东侧PLC执行指令</span>-->
            <!--            </div>-->
            <!--            <div style="height: 40%">-->
            <!--                <span>西侧PLC执行指令</span>-->
            <!--            </div>-->
            <div>
                <span style="color: #1E9FFF">PLC异常信息表:</span>
            </div>
@@ -36,11 +37,11 @@
        <div class="plc-log-body">
            <table id="plc-error-table">
                <thead>
                    <tr>
                        <th style="width: 200px">序号</th>
                        <th style="width: 400px">PLC错误描述</th>
                        <th style="width: 400px">异常</th>
                    </tr>
                <tr>
                    <th style="width: 200px">序号</th>
                    <th style="width: 400px">PLC错误描述</th>
                    <th style="width: 400px">异常</th>
                </tr>
                </thead>
                <tbody>
@@ -55,17 +56,17 @@
        <table id="site-table">
            <!-- 表头 -->
            <thead>
                <tr>
                    <th>站号</th>
                    <th>工作号</th>
                    <th>自动</th>
                    <th>有物</th>
                    <th>可入</th>
                    <th>可出</th>
                    <th>入库标记</th>
                    <th>空板信号</th>
                    <th>目标站</th>
                </tr>
            <tr>
                <th>站号</th>
                <th>工作号</th>
                <th>自动</th>
                <th>有物</th>
                <th>可入</th>
                <th>可出</th>
                <th>入库标记</th>
                <th>空板信号</th>
                <th>目标站</th>
            </tr>
            </thead>
            <!-- 表格内容 -->
            <tbody></tbody>