#
1
昨天 075cd1a82dc00988ed67b08c3a03fab51bf450e2
#
5个文件已修改
8个文件已添加
1326 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/Mat.java 282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/AgvBindCtnrAndBinParam.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/MatMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/MatService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 264 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/CodeBuilder.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/mat.sql 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/MatMapper.xml 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/mat/mat.js 297 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/mat/mat.html 338 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/Mat.java
New file
@@ -0,0 +1,282 @@
package com.zy.asrs.entity;
import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableField;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
@Data
@TableName("man_mat")
public class Mat implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * ID
     */
    @ApiModelProperty(value= "ID")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @ApiModelProperty(value= "")
    private String uuid;
    @ApiModelProperty(value= "")
    @TableField("tag_id")
    private Long tagId;
    @ApiModelProperty(value= "")
    private String matnr;
    @ApiModelProperty(value= "")
    private String maktx;
    @ApiModelProperty(value= "")
    private String name;
    @ApiModelProperty(value= "")
    private String specs;
    @ApiModelProperty(value= "")
    private String model;
    @ApiModelProperty(value= "")
    private String color;
    @ApiModelProperty(value= "")
    private String brand;
    @ApiModelProperty(value= "")
    private String unit;
    @ApiModelProperty(value= "")
    private Double price;
    @ApiModelProperty(value= "")
    private String sku;
    @ApiModelProperty(value= "")
    private Double units;
    @ApiModelProperty(value= "")
    private String barcode;
    @ApiModelProperty(value= "")
    private String origin;
    @ApiModelProperty(value= "")
    private String manu;
    @ApiModelProperty(value= "")
    @TableField("manu_date")
    private String manuDate;
    @ApiModelProperty(value= "")
    @TableField("item_num")
    private String itemNum;
    @ApiModelProperty(value= "")
    @TableField("safe_qty")
    private Double safeQty;
    @ApiModelProperty(value= "")
    private Double weight;
    @ApiModelProperty(value= "")
    @TableField("man_length")
    private Double manLength;
    @ApiModelProperty(value= "")
    private Double volume;
    @ApiModelProperty(value= "")
    @TableField("three_code")
    private String threeCode;
    @ApiModelProperty(value= "")
    private String supp;
    @ApiModelProperty(value= "")
    @TableField("supp_code")
    private String suppCode;
    @ApiModelProperty(value= "")
    @TableField("be_batch")
    private Integer beBatch;
    @ApiModelProperty(value= "")
    @TableField("dead_time")
    private String deadTime;
    @ApiModelProperty(value= "")
    @TableField("dead_warn")
    private Integer deadWarn;
    @ApiModelProperty(value= "")
    private Integer source;
    @ApiModelProperty(value= "")
    private Integer inspect;
    @ApiModelProperty(value= "")
    private Integer danger;
    @ApiModelProperty(value= "")
    private Integer status;
    @ApiModelProperty(value= "")
    @TableField("create_by")
    private Long createBy;
    @ApiModelProperty(value= "")
    @TableField("create_time")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    @ApiModelProperty(value= "")
    @TableField("update_by")
    private Long updateBy;
    @ApiModelProperty(value= "")
    @TableField("update_time")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    @ApiModelProperty(value= "")
    private String memo;
    @ApiModelProperty(value= "")
    @TableField("store_max")
    private Double storeMax;
    @ApiModelProperty(value= "")
    @TableField("store_min")
    private Double storeMin;
    @ApiModelProperty(value= "")
    @TableField("store_max_date")
    private Double storeMaxDate;
    @ApiModelProperty(value= "")
    private Double width;
    @ApiModelProperty(value= "")
    private Double height;
    public Mat() {}
    public Mat(String uuid,Long tagId,String matnr,String maktx,String name,String specs,String model,String color,String brand,String unit,Double price,String sku,Double units,String barcode,String origin,String manu,String manuDate,String itemNum,Double safeQty,Double weight,Double manLength,Double volume,String threeCode,String supp,String suppCode,Integer beBatch,String deadTime,Integer deadWarn,Integer source,Integer inspect,Integer danger,Integer status,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo,Double storeMax,Double storeMin,Double storeMaxDate,Double width,Double height) {
        this.uuid = uuid;
        this.tagId = tagId;
        this.matnr = matnr;
        this.maktx = maktx;
        this.name = name;
        this.specs = specs;
        this.model = model;
        this.color = color;
        this.brand = brand;
        this.unit = unit;
        this.price = price;
        this.sku = sku;
        this.units = units;
        this.barcode = barcode;
        this.origin = origin;
        this.manu = manu;
        this.manuDate = manuDate;
        this.itemNum = itemNum;
        this.safeQty = safeQty;
        this.weight = weight;
        this.manLength = manLength;
        this.volume = volume;
        this.threeCode = threeCode;
        this.supp = supp;
        this.suppCode = suppCode;
        this.beBatch = beBatch;
        this.deadTime = deadTime;
        this.deadWarn = deadWarn;
        this.source = source;
        this.inspect = inspect;
        this.danger = danger;
        this.status = status;
        this.createBy = createBy;
        this.createTime = createTime;
        this.updateBy = updateBy;
        this.updateTime = updateTime;
        this.memo = memo;
        this.storeMax = storeMax;
        this.storeMin = storeMin;
        this.storeMaxDate = storeMaxDate;
        this.width = width;
        this.height = height;
    }
//    Mat mat = new Mat(
//            null,    //
//            null,    //
//            null,    // [非空]
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    // [非空]
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null    //
//    );
    public String getCreateTime$(){
        if (Cools.isEmpty(this.createTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
    }
    public String getUpdateTime$(){
        if (Cools.isEmpty(this.updateTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
    }
}
src/main/java/com/zy/asrs/entity/param/AgvBindCtnrAndBinParam.java
@@ -32,18 +32,6 @@
        switch (basAgvMast.getIoType()){
            case 0:
                getAgvTaskAssignmentParam0(basAgvMast);
                indBind = "0";
                return;
            case 1:
                getAgvTaskAssignmentParam0(basAgvMast);
                indBind = "0";
                return;
            case 2:
                getAgvTaskAssignmentParam1(basAgvMast);
                indBind = "1";
                return;
            case 3:
                getAgvTaskAssignmentParam1(basAgvMast);
                indBind = "1";
                return;
            default:
@@ -58,25 +46,9 @@
        BasAgvLocNo basAgvLocNoSou = basAgvLocNoService.selectOne(
                new EntityWrapper<BasAgvLocNo>().eq("loc_no", basAgvMast.getSourceLocNo())
        );
        this.positionCode = basAgvLocNoSou != null ? basAgvLocNoSou.getAgvLocNo() : "";
        BasAgvLocNo basAgvLocNoEnd = basAgvLocNoService.selectOne(
                new EntityWrapper<BasAgvLocNo>().eq("sta_no", basAgvMast.getStaNo())
        );
        this.stgBinCode = basAgvLocNoEnd != null ? basAgvLocNoEnd.getAgvLocNo() : "";
        this.stgBinCode = basAgvLocNoSou != null ? basAgvLocNoSou.getAgvLocNo() : "";
    }
    public void getAgvTaskAssignmentParam1(BasAgvMast basAgvMast) {
        BasAgvLocNoService basAgvLocNoService = SpringUtils.getBean(BasAgvLocNoService.class);
        this.reqCode = basAgvMast.getTaskNo() + "-" + System.currentTimeMillis();
//        BasAgvLocNo basAgvLocNoSou = basAgvLocNoService.selectOne(
//                new EntityWrapper<BasAgvLocNo>().eq("loc_no", basAgvMast.getLocNo())
//        );
//        this.positionCode = basAgvLocNoSou != null ? basAgvLocNoSou.getAgvLocNo() : "";
        BasAgvLocNo basAgvLocNoEnd = basAgvLocNoService.selectOne(
                new EntityWrapper<BasAgvLocNo>().eq("sta_no", basAgvMast.getSourceStaNo())
        );
        this.stgBinCode = basAgvLocNoEnd != null ? basAgvLocNoEnd.getAgvLocNo() : "";
    }
}
src/main/java/com/zy/asrs/mapper/MatMapper.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.mapper;
import com.zy.asrs.entity.Mat;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface MatMapper extends BaseMapper<Mat> {
}
src/main/java/com/zy/asrs/service/MatService.java
New file
@@ -0,0 +1,8 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.Mat;
import com.baomidou.mybatisplus.service.IService;
public interface MatService extends IService<Mat> {
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -110,6 +110,8 @@
    private ApiLogService apiLogService;
    @Autowired
    private BasDevpOptService basDevpOptService;
    @Autowired
    private MatService matService;
    @Value("${wms.url}")
    private String wmsUrl;
@@ -183,6 +185,9 @@
                    errMsg = "扫码失败";
                    log.error("物料码扫码失败");
                    back = true;
                }
                if(barcode.equals("0")){
                    continue;
                }
                // 退回
                if (back) {
@@ -4333,8 +4338,6 @@
        }
    }
    /*
     * arm任务完成自动组托
     * */
@@ -4450,9 +4453,9 @@
     * */
    public synchronized void armTaskAssignment() {
        try{
            List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<>());
            List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>().lt("arm_no",5));
            for (BasArm basArm : basArmList) {
                if (basArm.getStatus()!=1){
                if (basArm.getStatus()!=1 || basArm.getArmNo()>4){
                    continue;
                }
                try{
@@ -4469,31 +4472,23 @@
                    if(!Cools.isEmpty(barcode)) {
                        if("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
                            armTaskAssignmentCallApiLogSave(staProtocol, "托盘条码为空", staProtocol.getSiteId()+"码垛位置,===》托盘条码为空", false);
//                            log.error(staProtocol.getSiteId()+"码垛位置,===》托盘条码为空");
                            continue;
                        }
                    } else {
                        armTaskAssignmentCallApiLogSave(staProtocol, "托盘条码为空", staProtocol.getSiteId()+"码垛位置,===》托盘条码为空", false);
//                        log.error(staProtocol.getSiteId()+"码垛位置,===》托盘条码为空");
                        continue;
                    }
                    if(barcode.length()!=6){
                        armTaskAssignmentCallApiLogSave(staProtocol, "条码长度不是6位", staProtocol.getSiteId()+"码垛位置,条码长度不是6位===>>" + barcode, false);
//                        log.error(staProtocol.getSiteId()+"码垛位置,条码长度不是6位===>>" + barcode);
                        continue;
//                        throw new CoolException(staProtocol.getSiteId()+"码垛位置,条码长度不是6位===>>" + barcode);
                    }
                    int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",barcode));
                    int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",barcode));
                    int countwait = waitPakinMapper.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",barcode));
                    if (countLoc > 0 || countWrk > 0 || countwait > 0) {
//                        throw new CoolException("组托档/工作档/库存条码数据已存在===>>" + barcode);
                        armTaskAssignmentCallApiLogSave(staProtocol, "条码数据已存在", staProtocol.getSiteId()+"码垛位置,组托档/工作档/库存条码数据已存在===>>" + barcode, false);
//                        log.error(staProtocol.getSiteId()+"码垛位置,组托档/工作档/库存条码数据已存在===>>" + barcode);
                        continue;
                    }
@@ -4514,8 +4509,6 @@
                    );
                    if (!basArmMastListError.isEmpty()){
                        armTaskAssignmentCallApiLogSave(staProtocol, "存在异常机械臂任务", basArm.getArmNo()+"号机械臂存在异常数据需要维护!!!", false);
//                        log.error(basArm.getArmNo()+"号机械臂存在异常数据需要维护!!!");
                        continue;
                    }
                    List<BasArmMast> basArmMastListRuning = basArmMastService.selectList(
@@ -4527,9 +4520,7 @@
                    List<BasArmMast> basArmMastListRuning3 = basArmMastService.selectList(
                            new EntityWrapper<BasArmMast>()
                                    .eq("arm_no", basArm.getArmNo())
                                    .eq(
                                            "sorting_line", basArm.getSortingLineSou())
                                    .eq("sorting_line", basArm.getSortingLineSou())
                                    .eq("status", 3)
                    );
                    if (basArmMastListRuning.isEmpty() && basArmMastListRuning3.isEmpty()){
@@ -4544,8 +4535,6 @@
                        }
                        if (basArmMastList.size()>1){
                            armTaskAssignmentCallApiLogSave(staProtocol, "任务待执行数量大于1,无法分辨待执行任务", "arm编号:"+basArm.getArmNo()+"====》拆码垛任务异常禁止下发!!!任务待执行数量大于1!!!", false);
//                            log.error("arm编号:"+basArm.getArmNo()+"====》拆码垛任务异常禁止下发!!!任务待执行数量大于1!!!");
                            continue;
                        }
                        BasArmMast basArmMast = basArmMastList.get(0);
@@ -4560,26 +4549,20 @@
                        if (basArmMastListOrder.size()==1){
                            Thread.sleep(100);
                            List<BasArmMast> basArmMastListRuningBarCode2 = basArmMastService.selectList(
                                    new EntityWrapper<BasArmMast>()
                                            .eq("barcode", barcode)
                                    new EntityWrapper<BasArmMast>().eq("barcode", barcode)
                            );
                            if (!basArmMastListRuningBarCode2.isEmpty()){
                                int binding_tags = basArmMastService.selectCount(
                                        new EntityWrapper<BasArmMast>()
                                                .eq("status", 2)
                                                .eq("binding_tags", basArmMast.getBindingTags())
                                );
                                                .eq("binding_tags", basArmMast.getBindingTags()));
                                if (binding_tags<2){
                                    BasArmMast basArmMastOne = basArmMastService.selectOne(
                                            new EntityWrapper<BasArmMast>()
                                                    .eq("status", 2)
                                                    .eq("binding_tags", basArmMast.getBindingTags())
                                    );
                                                    .eq("binding_tags", basArmMast.getBindingTags()));
                                    Double anfmeSignOne = basArmMastService.selectBasArmMastSignValue(basArmMastOne.getOrderNo(), basArmMastOne.getMatnr(),basArmMastOne.getBindingTags());
                                    if (anfmeSignOne>1D){
                                        armTaskAssignmentCallApiLogSave(staProtocol, "条码数据已存在!!!", staProtocol.getSiteId()+"码垛位置,条码数据正在自动组托===>>" + barcode, false);
                                        continue;
@@ -4599,18 +4582,12 @@
                                ArmOrderAssignmentParam armOrderAssignmentParam = new ArmOrderAssignmentParam(basArmMast,orderDetlValueResultUtil);
//                                订单下发(SKU+订单)
                                ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取订单(SKU)下发:",ArmConstant.getArmUrl(basArmMast.getArmNo()), ArmConstant.ARM_ADAPTOR, armOrderAssignmentParam);
                                if (result.getCode()==200){
//                                    basArmMast.setStatus(1);
//                                    basArmMast.setBarcode(barcode);
//                                    basArmMastService.updateById(basArmMast);
                                } else {
                                if (result.getCode()!=200){
                                    armTaskAssignmentCallApiLogSave(staProtocol, "机械臂抓取订单(SKU)下发", "arm编号:"+basArm.getArmNo()+"订单下发订单信息下发失败!!!", false);
//                                    log.error("arm编号:"+basArm.getArmNo()+"机械臂抓取订单(SKU)下发:"+JSON.toJSON(basArmMast)+"===》订单信息下发失败");
                                    continue;
                                }
                            } catch (Exception e){
                                armTaskAssignmentCallApiLogSave(staProtocol, "机械臂抓取订单(SKU)下发", "arm编号:"+basArm.getArmNo()+"订单下发订单信息下发失败!!!", false);
//                                log.error("arm编号:"+basArm.getArmNo()+"机械臂抓取订单(SKU)下发:"+JSON.toJSON(basArmMast)+"===》订单下发订单信息下发失败");
                                continue;
                            }
                        }
@@ -4623,7 +4600,150 @@
                            basArmMastService.updateById(basArmMast);
                        } else {
                            armTaskAssignmentCallApiLogSave(staProtocol, "机械臂抓取任务信息下发失败", "arm编号:"+basArm.getArmNo()+"任务信息下发失败!!!", false);
//                            log.error("机械臂抓取任务:"+JSON.toJSON(basArmMast)+"===》任务信息下发失败");
                        }
                    }
                }  catch (Exception e){
                    log.error("arm编号:"+basArm.getArmNo()+"====》拆码垛任务下发失败"+e.getMessage());
                }
            }
        }catch (Exception e){
            log.error("arm任务下发失败"+e.getMessage());
        }
    }
    /*
     * arm任务下发
     * */
    public synchronized void armTaskAssignment2() {
        try{
            List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>().gt("arm_no",4));
            for (BasArm basArm : basArmList) {
                if (basArm.getStatus()!=1 || basArm.getArmNo()<5){
                    continue;
                }
                try{
                    LocMast locMastEnd = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", basArm.getStaNoSou()));
                    if(!locMastEnd.getLocSts().equals("D")){
                        continue;
                    }
                    String barcode = locMastEnd.getBarcode();
                    if(!Cools.isEmpty(barcode)) {
                        if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "0".equals(barcode)) {
                            armTaskAssignmentCallApiLogSave(locMastEnd, "托盘条码为空", basArm.getStaNoSou()+"码垛位置,===》托盘条码为空", false);
                            continue;
                        }
                    } else {
                        armTaskAssignmentCallApiLogSave(locMastEnd, "托盘条码为空", basArm.getStaNoSou()+"码垛位置,===》托盘条码为空", false);
                        continue;
                    }
                    if(barcode.length()!=6){
                        armTaskAssignmentCallApiLogSave(locMastEnd, "条码长度不是6位", basArm.getStaNoSou()+"码垛位置,条码长度不是6位===>>" + barcode, false);
                        continue;
                    }
                    int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",barcode));
                    int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",barcode));
                    int countwait = waitPakinMapper.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",barcode));
                    if (countLoc > 0 || countWrk > 0 || countwait > 0) {
                        armTaskAssignmentCallApiLogSave(locMastEnd, "条码数据已存在", basArm.getStaNoSou()+"码垛位置,组托档/工作档/库存条码数据已存在===>>" + barcode, false);
                        continue;
                    }
                    List<BasArmMast> basArmMastListRuningBarCode = basArmMastService.selectList(
                            new EntityWrapper<BasArmMast>()
                                    .eq("barcode", barcode)
                                    .eq("status", 3)
                    );
                    if (!basArmMastListRuningBarCode.isEmpty()){
                        armTaskAssignmentCallApiLogSave(locMastEnd, "条码数据已存在,正在自动组托!!!", basArm.getStaNoSou()+"码垛位置,条码数据正在自动组托===>>" + barcode, false);
                        continue;
                    }
                    List<BasArmMast> basArmMastListError = basArmMastService.selectList(
                            new EntityWrapper<BasArmMast>()
                                    .eq("arm_no", basArm.getArmNo())
                                    .eq("sorting_line", basArm.getSortingLineSou())
                                    .eq("status", 9)
                    );
                    if (!basArmMastListError.isEmpty()){
                        armTaskAssignmentCallApiLogSave(locMastEnd, "存在异常机械臂任务", basArm.getArmNo()+"号机械臂存在异常数据需要维护!!!", false);
                        continue;
                    }
                    List<BasArmMast> basArmMastListRuning = basArmMastService.selectList(
                            new EntityWrapper<BasArmMast>()
                                    .eq("arm_no", basArm.getArmNo())
                                    .eq("sorting_line", basArm.getSortingLineSou())
                                    .eq("status", 1)
                    );
                    List<BasArmMast> basArmMastListRuning3 = basArmMastService.selectList(
                            new EntityWrapper<BasArmMast>()
                                    .eq("arm_no", basArm.getArmNo())
                                    .eq("sorting_line", basArm.getSortingLineSou())
                                    .eq("status", 3)
                    );
                    if (basArmMastListRuning.isEmpty() && basArmMastListRuning3.isEmpty()){
                        List<BasArmMast> basArmMastList = basArmMastService.selectList(
                                new EntityWrapper<BasArmMast>()
                                        .eq("arm_no", basArm.getArmNo())
                                        .eq("sorting_line", basArm.getSortingLineSou())
                                        .eq("sta_no", basArm.getStaNoSou())
                                        .eq("status", 0)
                        );
                        if (basArmMastList.isEmpty()){
                            continue;
                        }
                        if (basArmMastList.size()>1){
                            armTaskAssignmentCallApiLogSave(locMastEnd, "任务待执行数量大于1,无法分辨待执行任务", "arm编号:"+basArm.getArmNo()+"====》拆码垛任务异常禁止下发!!!任务待执行数量大于1!!!", false);
                            continue;
                        }
                        BasArmMast basArmMast = basArmMastList.get(0);
//                        List<BasArmMast> basArmMastListOrder = basArmMastService.selectList(
//                                new EntityWrapper<BasArmMast>()
//                                        .eq("arm_no", basArm.getArmNo())
//                                        .eq("sorting_line", basArm.getSortingLineSou())
//                                        .eq("matnr", basArmMast.getMatnr())
//                                        .eq("order_no", basArmMast.getOrderNo())
//                                        .eq("binding_tags", basArmMast.getBindingTags())
//                        );
//                        if (basArmMastListOrder.size()==1){
//                            OrderDetlValueResultUtil orderDetlValueResultUtil = basArmMastService.selectOrderDetlValue(basArmMast.getOrderNo(), basArmMast.getMatnr());
//
//                            if (Cools.isEmpty(orderDetlValueResultUtil)){
//                                continue;
//                            }
                        OrderDetlValueResultUtil orderDetlValueResultUtil = new OrderDetlValueResultUtil();
                        Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", basArmMast.getMatnr()));
//                            Double anfmeSign = basArmMastService.selectBasArmMastSignValue(basArmMast.getOrderNo(), basArmMast.getMatnr(),basArmMast.getBindingTags());
                        orderDetlValueResultUtil.setAnfme(1D);
                        orderDetlValueResultUtil.setHeight(mat.getHeight());
                        orderDetlValueResultUtil.setWeight(mat.getWeight());
                        orderDetlValueResultUtil.setLength(mat.getManLength());
                        orderDetlValueResultUtil.setWidth(mat.getWidth());
                        //订单下发
                        try{
                            ArmOrderAssignmentParam armOrderAssignmentParam = new ArmOrderAssignmentParam(basArmMast,orderDetlValueResultUtil);
//                                订单下发(SKU+订单)
                            ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取订单(SKU)下发:",ArmConstant.getArmUrl(basArmMast.getArmNo()), ArmConstant.ARM_ADAPTOR, armOrderAssignmentParam);
                            if (result.getCode()!=200){
                                armTaskAssignmentCallApiLogSave(locMastEnd, "机械臂抓取订单(SKU)下发", "arm编号:"+basArm.getArmNo()+"订单下发订单信息下发失败!!!", false);
                                continue;
                            }
                        } catch (Exception e){
                            armTaskAssignmentCallApiLogSave(locMastEnd, "机械臂抓取订单(SKU)下发", "arm编号:"+basArm.getArmNo()+"订单下发订单信息下发失败!!!", false);
                            continue;
                        }
//                        }
                        ArmTaskAssignmentParam armTaskAssignmentParam = new ArmTaskAssignmentParam(basArm.getSortingLine());
                        //设置工作空间就绪
                        ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取任务下发:通知工作空间已就绪",ArmConstant.getArmUrl(basArmMast.getArmNo()), ArmConstant.ARM_WORKSPACE, armTaskAssignmentParam);
                        if (result.getCode()==200){
                            basArmMast.setStatus(1);
                            basArmMast.setBarcode(barcode);
                            basArmMastService.updateById(basArmMast);
                        } else {
                            armTaskAssignmentCallApiLogSave(locMastEnd, "机械臂抓取任务信息下发失败", "arm编号:"+basArm.getArmNo()+"任务信息下发失败!!!", false);
                        }
                    }
                }  catch (Exception e){
@@ -4659,6 +4779,33 @@
        // 如果没有符合条件的记录,或者所有记录时间差大于 5 分钟,保存新的日志
        apiLogService.save("机械臂任务相关", tableName, "null", staProtocol.getBarcode(),
                "站点号:" + staProtocol.getSiteId(),
                response, bool);
    }
    public void armTaskAssignmentCallApiLogSave(LocMast locMast, String tableName, String response, Boolean bool) {
        // 查询符合条件的所有 ApiLog
        List<ApiLog> apiLogs = apiLogService.selectList(new EntityWrapper<ApiLog>()
                .eq("namespace", "机械臂任务相关")
                .eq("request", "站点号:" + locMast.getLocNo())
                .eq("response", response)
                .eq("url", tableName)
                .eq("client_ip", locMast.getBarcode())
                .eq("result", 0)
                .orderBy("create_time", false)
        );
        // 遍历结果集,检查时间戳差值是否小于 5 分钟
        for (ApiLog apiLog : apiLogs) {
            long parseLong = Long.parseLong(apiLog.getTimestamp());
            if (new Date().getTime() - parseLong < 5 * 1000 * 60) {
                // 如果找到符合条件的记录且时间差小于 5 分钟,则不保存新记录,直接返回
                return;
            }
        }
        // 如果没有符合条件的记录,或者所有记录时间差大于 5 分钟,保存新的日志
        apiLogService.save("机械臂任务相关", tableName, "null", locMast.getBarcode(),
                "站点号:" + locMast.getLocNo(),
                response, bool);
    }
@@ -4774,8 +4921,8 @@
                String barcode = staProtocol.getBarcode();
                if(!Cools.isEmpty(barcode)) {
                    if("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
                        News.info("{}号站点扫描器检测条码信息:{}", outStaAgv.getStaNo(), barcode);
                    if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "0".equals(barcode)) {
//                        News.info("{}号站点扫描器检测条码信息:{}", outStaAgv.getStaNo(), barcode);
                        continue;
                    }
                } else {
@@ -4873,18 +5020,37 @@
                    BasAgvMast basAgvMast = new BasAgvMast();
                    try {
                        List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>()
                                .eq("loc_sts", "R")
                                .ge("row1", 23)
                                .le("row1", 32)
                                .orderBy("io_time",true)
                        );
                        List<LocMast> locMastList = null;
                        Integer floorNo = 1;
                        if(inStaAgv.getStaNo() < 2000){
                            locMastList = locMastService.selectList(new EntityWrapper<LocMast>()
                                    .eq("loc_sts", "R")
                                    .ge("row1", 21)
                                    .le("row1", 26)
                                    .orderBy("io_time",true)
                            );
                        }else if(inStaAgv.getStaNo() < 4000){
                            locMastList = locMastService.selectList(new EntityWrapper<LocMast>()
                                    .eq("loc_sts", "R")
                                    .ge("row1", 28)
                                    .le("row1", 31)
                                    .orderBy("io_time",true));
                            floorNo = 2;
                        }else{
                            locMastList = locMastService.selectList(new EntityWrapper<LocMast>()
                                    .eq("loc_sts", "R")
                                    .ge("row1", 32)
                                    .le("row1", 38)
                                    .orderBy("io_time",true));
                            floorNo = 3;
                        }
                        for (LocMast locMast : locMastList){
                            basAgvMast.setTaskNo(inStaAgv.getStaNo());
                            basAgvMast.setSourceLocNo(locMast.getLocNo());
                            basAgvMast.setStaNo(inStaAgv.getStaNo());
                            basAgvMast.setDevpId(devp.getId());
                            basAgvMast.setFloorNo(floorNo);
                            basAgvMast.setIoType(0);//AGV库位==》输送线站点  0
                            basAgvMastService.insert(basAgvMast);
                            break;
@@ -4966,6 +5132,12 @@
                    }
                    if (staProtocol.isAutoing()){
                        AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast);
                        agvBindCtnrAndBinParam.setCtnrCode(basAgvMast.getTimestamp().toString());
                        ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV容器绑定", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam);
                        if (resultBind.getCode()!=200){
                            agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV容器绑定", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false);
                        }
                        AgvTaskAssignmentParam agvTaskAssignmentParam = new AgvTaskAssignmentParam(basAgvMast);
                        //任务下发
@@ -5044,7 +5216,7 @@
                            (basAgvMast.getSourceStaNo().equals(2033))){
                        AgvTaskAssignmentParam agvTaskAssignmentParam = new AgvTaskAssignmentParam(basAgvMast);
                        if(basAgvMast.getFloorNo()==1) {
                        if(basAgvMast.getFloorNo()==1 || basAgvMast.getStaNo().equals(2034)) {
                            WrkMast wrkMast = wrkMastService.selectByWrkNo(staProtocol.getWorkNo());
                            AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast);
                            agvBindCtnrAndBinParam.setCtnrCode(wrkMast.getBarcode());
src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.service.impl;
import com.zy.asrs.mapper.MatMapper;
import com.zy.asrs.entity.Mat;
import com.zy.asrs.service.MatService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service("matService")
public class MatServiceImpl extends ServiceImpl<MatMapper, Mat> implements MatService {
}
src/main/java/com/zy/common/CodeBuilder.java
@@ -20,7 +20,7 @@
        generator.url="localhost:1433;databasename=jshdasrs";
        generator.username="sa";
        generator.password="sa@123";
        generator.table="asr_bas_rgv_error_log";
        generator.table="man_mat";
        generator.packagePath="com.zy.asrs";
        generator.build();
    }
src/main/java/com/zy/core/MainProcess.java
@@ -71,7 +71,7 @@
                // 入库  ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档
                mainService.generateStoreWrkFile(1); // 组托
//                    mainService.generateStoreWrkFile0(2); // WMS入库
                Thread.sleep(500);
                Thread.sleep(50);
                // 出库  ===>>  堆垛机出库站到出库站
                mainService.crnStnToOutStn(4);
@@ -146,6 +146,7 @@
                //arm任务下发
                mainService.armTaskAssignment();//0===》1
                mainService.armTaskAssignment2();//0===》1
            } catch (Exception e) {
                e.printStackTrace();
src/main/java/mat.sql
New file
@@ -0,0 +1,18 @@
-- save mat record
-- mysql
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'mat/mat.html', 'mat管理', null , '2', null , '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'mat#view', '查询', '', '3', '0', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'mat#btn-add', '新增', '', '3', '1', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'mat#btn-edit', '编辑', '', '3', '2', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'mat#btn-delete', '删除', '', '3', '3', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'mat#btn-export', '导出', '', '3', '4', '1');
-- sqlserver
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'mat/mat.html', N'mat管理', null, '2', null, '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'mat#view', N'查询', '', '3', '0', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'mat#btn-add', N'新增', '', '3', '1', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'mat#btn-edit', N'编辑', '', '3', '2', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'mat#btn-delete', N'删除', '', '3', '3', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'mat#btn-export', N'导出', '', '3', '4', '1');
src/main/resources/application.yml
@@ -480,9 +480,12 @@
    # 出库口1
    outSta[0]:
      staNo: 1041
      led: ${wcs-slave.led[0].id}
      led: ${wcs-slave.led[1].id}
    outStaAgvFull[0]:
      staNo: 1041
      led: ${wcs-slave.led[1].id}
    inStaAgv[0]:
      staNo: 1037
      led: ${wcs-slave.led[0].id}
src/main/resources/mapper/MatMapper.xml
New file
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zy.asrs.mapper.MatMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.Mat">
        <id column="id" property="id" />
        <result column="uuid" property="uuid" />
        <result column="tag_id" property="tagId" />
        <result column="matnr" property="matnr" />
        <result column="maktx" property="maktx" />
        <result column="name" property="name" />
        <result column="specs" property="specs" />
        <result column="model" property="model" />
        <result column="color" property="color" />
        <result column="brand" property="brand" />
        <result column="unit" property="unit" />
        <result column="price" property="price" />
        <result column="sku" property="sku" />
        <result column="units" property="units" />
        <result column="barcode" property="barcode" />
        <result column="origin" property="origin" />
        <result column="manu" property="manu" />
        <result column="manu_date" property="manuDate" />
        <result column="item_num" property="itemNum" />
        <result column="safe_qty" property="safeQty" />
        <result column="weight" property="weight" />
        <result column="man_length" property="manLength" />
        <result column="volume" property="volume" />
        <result column="three_code" property="threeCode" />
        <result column="supp" property="supp" />
        <result column="supp_code" property="suppCode" />
        <result column="be_batch" property="beBatch" />
        <result column="dead_time" property="deadTime" />
        <result column="dead_warn" property="deadWarn" />
        <result column="source" property="source" />
        <result column="inspect" property="inspect" />
        <result column="danger" property="danger" />
        <result column="status" property="status" />
        <result column="create_by" property="createBy" />
        <result column="create_time" property="createTime" />
        <result column="update_by" property="updateBy" />
        <result column="update_time" property="updateTime" />
        <result column="memo" property="memo" />
        <result column="store_max" property="storeMax" />
        <result column="store_min" property="storeMin" />
        <result column="store_max_date" property="storeMaxDate" />
        <result column="width" property="width" />
        <result column="height" property="height" />
    </resultMap>
</mapper>
src/main/webapp/static/js/mat/mat.js
New file
@@ -0,0 +1,297 @@
var pageCurr;
layui.config({
    base: baseUrl + "/static/layui/lay/modules/"
}).use(['table','laydate', 'form', 'admin'], function(){
    var table = layui.table;
    var $ = layui.jquery;
    var layer = layui.layer;
    var layDate = layui.laydate;
    var form = layui.form;
    var admin = layui.admin;
    // 数据渲染
    tableIns = table.render({
        elem: '#mat',
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/mat/list/auth',
        page: true,
        limit: 15,
        limits: [15, 30, 50, 100, 200, 500],
        toolbar: '#toolbar',
        cellMinWidth: 50,
        height: 'full-120',
        cols: [[
            {type: 'checkbox'}
            ,{field: 'id', align: 'center',title: 'ID'}
            ,{field: 'uuid', align: 'center',title: ''}
            ,{field: 'tagId', align: 'center',title: ''}
            ,{field: 'matnr', align: 'center',title: ''}
            ,{field: 'maktx', align: 'center',title: ''}
            ,{field: 'name', align: 'center',title: ''}
            ,{field: 'specs', align: 'center',title: ''}
            ,{field: 'model', align: 'center',title: ''}
            ,{field: 'color', align: 'center',title: ''}
            ,{field: 'brand', align: 'center',title: ''}
            ,{field: 'unit', align: 'center',title: ''}
            ,{field: 'price', align: 'center',title: ''}
            ,{field: 'sku', align: 'center',title: ''}
            ,{field: 'units', align: 'center',title: ''}
            ,{field: 'barcode', align: 'center',title: ''}
            ,{field: 'origin', align: 'center',title: ''}
            ,{field: 'manu', align: 'center',title: ''}
            ,{field: 'manuDate', align: 'center',title: ''}
            ,{field: 'itemNum', align: 'center',title: ''}
            ,{field: 'safeQty', align: 'center',title: ''}
            ,{field: 'weight', align: 'center',title: ''}
            ,{field: 'manLength', align: 'center',title: ''}
            ,{field: 'volume', align: 'center',title: ''}
            ,{field: 'threeCode', align: 'center',title: ''}
            ,{field: 'supp', align: 'center',title: ''}
            ,{field: 'suppCode', align: 'center',title: ''}
            ,{field: 'beBatch', align: 'center',title: ''}
            ,{field: 'deadTime', align: 'center',title: ''}
            ,{field: 'deadWarn', align: 'center',title: ''}
            ,{field: 'source', align: 'center',title: ''}
            ,{field: 'inspect', align: 'center',title: ''}
            ,{field: 'danger', align: 'center',title: ''}
            ,{field: 'status', align: 'center',title: ''}
            ,{field: 'createBy', align: 'center',title: ''}
            ,{field: 'createTime$', align: 'center',title: ''}
            ,{field: 'updateBy', align: 'center',title: ''}
            ,{field: 'updateTime$', align: 'center',title: ''}
            ,{field: 'memo', align: 'center',title: ''}
            ,{field: 'storeMax', align: 'center',title: ''}
            ,{field: 'storeMin', align: 'center',title: ''}
            ,{field: 'storeMaxDate', align: 'center',title: ''}
            ,{field: 'width', align: 'center',title: ''}
            ,{field: 'height', align: 'center',title: ''}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:120}
        ]],
        request: {
            pageName: 'curr',
            pageSize: 'limit'
        },
        parseData: function (res) {
            return {
                'code': res.code,
                'msg': res.msg,
                'count': res.data.total,
                'data': res.data.records
            }
        },
        response: {
            statusCode: 200
        },
        done: function(res, curr, count) {
            if (res.code === 403) {
                top.location.href = baseUrl+"/";
            }
            pageCurr=curr;
            limit();
        }
    });
    // 监听排序事件
    table.on('sort(mat)', function (obj) {
        var searchData = {};
        $.each($('#search-box [name]').serializeArray(), function() {
            searchData[this.name] = this.value;
        });
        searchData['orderByField'] = obj.field;
        searchData['orderByType'] = obj.type;
        tableIns.reload({
            where: searchData,
            page: {curr: 1}
        });
    });
    // 监听头工具栏事件
    table.on('toolbar(mat)', function (obj) {
        var checkStatus = table.checkStatus(obj.config.id).data;
        switch(obj.event) {
            case 'addData':
                showEditModel();
                break;
            case 'deleteData':
               if (checkStatus.length === 0) {
                   layer.msg('请选择要删除的数据', {icon: 2});
                   return;
               }
               del(checkStatus.map(function (d) {
                   return d.id;
               }));
               break;
            case 'exportData':
                admin.confirm('确定导出Excel吗', {shadeClose: true}, function(){
                    var titles=[];
                    var fields=[];
                    obj.config.cols[0].map(function (col) {
                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
                            titles.push(col.title);
                            fields.push(col.field);
                        }
                    });
                    var exportData = {};
                    $.each($('#search-box [name]').serializeArray(), function() {
                        exportData[this.name] = this.value;
                    });
                    var param = {
                        'mat': exportData,
                        'fields': fields
                    };
                    $.ajax({
                        url: baseUrl+"/mat/export/auth",
                        headers: {'token': localStorage.getItem('token')},
                        data: JSON.stringify(param),
                        dataType:'json',
                        contentType:'application/json;charset=UTF-8',
                        method: 'POST',
                        success: function (res) {
                            layer.closeAll();
                            if (res.code === 200) {
                                table.exportFile(titles,res.data,'xls');
                            } else if (res.code === 403) {
                                top.location.href = baseUrl+"/";
                            } else {
                                layer.msg(res.msg, {icon: 2})
                            }
                        }
                    });
                });
                break;
        }
    });
    // 监听行工具事件
    table.on('tool(mat)', function(obj){
        var data = obj.data;
        switch (obj.event) {
            case 'edit':
                showEditModel(data);
                break;
            case "del":
                del([data.id]);
                break;
        }
    });
    /* 弹窗 - 新增、修改 */
    function showEditModel(mData) {
        admin.open({
            type: 1,
            area: '600px',
            title: (mData ? '修改' : '添加') + '订单状态',
            content: $('#editDialog').html(),
            success: function (layero, dIndex) {
                layDateRender(mData);
                form.val('detail', mData);
                form.on('submit(editSubmit)', function (data) {
                    var loadIndex = layer.load(2);
                    $.ajax({
                        url: baseUrl+"/mat/"+(mData?'update':'add')+"/auth",
                        headers: {'token': localStorage.getItem('token')},
                        data: data.field,
                        method: 'POST',
                        success: function (res) {
                            layer.close(loadIndex);
                            if (res.code === 200){
                                layer.close(dIndex);
                                layer.msg(res.msg, {icon: 1});
                                tableReload();
                            } else if (res.code === 403){
                                top.location.href = baseUrl+"/";
                            }else {
                                layer.msg(res.msg, {icon: 2});
                            }
                        }
                    })
                    return false;
                });
                $(layero).children('.layui-layer-content').css('overflow', 'visible');
                layui.form.render('select');
            }
        });
    }
    /* 删除 */
    function del(ids) {
        layer.confirm('确定要删除选中数据吗?', {
            skin: 'layui-layer-admin',
            shade: .1
        }, function (i) {
            layer.close(i);
            var loadIndex = layer.load(2);
            $.ajax({
                url: baseUrl+"/mat/delete/auth",
                headers: {'token': localStorage.getItem('token')},
                data: {ids: ids},
                method: 'POST',
                success: function (res) {
                    layer.close(loadIndex);
                    if (res.code === 200){
                        layer.msg(res.msg, {icon: 1});
                        tableReload();
                    } else if (res.code === 403){
                        top.location.href = baseUrl+"/";
                    } else {
                        layer.msg(res.msg, {icon: 2});
                    }
                }
            })
        });
    }
    // 搜索
    form.on('submit(search)', function (data) {
        pageCurr = 1;
        tableReload(false);
    });
    // 重置
    form.on('submit(reset)', function (data) {
        pageCurr = 1;
        clearFormVal($('#search-box'));
        tableReload(false);
    });
    // 时间选择器
    function layDateRender(data) {
        setTimeout(function () {
            layDate.render({
                elem: '.layui-laydate-range'
                ,type: 'datetime'
                ,range: true
            });
            layDate.render({
                elem: '#createTime\\$',
                type: 'datetime',
                value: data!==undefined?data['createTime\\$']:null
            });
            layDate.render({
                elem: '#updateTime\\$',
                type: 'datetime',
                value: data!==undefined?data['updateTime\\$']:null
            });
        }, 300);
    }
    layDateRender();
});
// 关闭动作
$(document).on('click','#data-detail-close', function () {
    parent.layer.closeAll();
});
function tableReload(child) {
    var searchData = {};
    $.each($('#search-box [name]').serializeArray(), function() {
        searchData[this.name] = this.value;
    });
    tableIns.reload({
        where: searchData,
        page: {curr: pageCurr}
     });
}
src/main/webapp/views/mat/mat.html
New file
@@ -0,0 +1,338 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title></title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
</head>
<body>
<div class="layui-fluid">
    <div class="layui-card">
        <div class="layui-card-body">
            <div class="layui-form toolbar" id="search-box">
                <div class="layui-form-item">
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="id" placeholder="编号" autocomplete="off">
                        </div>
                    </div>
                     <div class="layui-inline" style="width: 300px">
                        <div class="layui-input-inline">
                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="起始时间 - 终止时间" autocomplete="off" style="width: 300px">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="condition" placeholder="请输入" autocomplete="off">
                        </div>
                    </div>
                    <div class="layui-inline">&emsp;
                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
                            <i class="layui-icon">&#xe615;</i>搜索
                        </button>
                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
                            <i class="layui-icon">&#xe666;</i>重置
                        </button>
                    </div>
                </div>
            </div>
            <table class="layui-hide" id="mat" lay-filter="mat"></table>
        </div>
    </div>
</div>
<script type="text/html" id="toolbar">
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">新增</button>
        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">删除</button>
        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">导出</button>
    </div>
</script>
<script type="text/html" id="operate">
    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">修改</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">删除</a>
</script>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/mat/mat.js" charset="utf-8"></script>
</body>
<!-- 表单弹窗 -->
<script type="text/html" id="editDialog">
    <form id="detail" lay-filter="detail" class="layui-form admin-form model-form">
        <input name="id" type="hidden">
        <div class="layui-row">
            <div class="layui-col-md12">
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="uuid" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="tagId" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="matnr" placeholder="请输入" lay-vertype="tips" lay-verify="required">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="maktx" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="name" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="specs" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="model" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="color" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="brand" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="unit" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="price" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="sku" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="units" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="barcode" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="origin" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="manu" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="manuDate" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="itemNum" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="safeQty" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="weight" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="manLength" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="volume" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="threeCode" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="supp" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="suppCode" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="beBatch" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="deadTime" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="deadWarn" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="source" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="inspect" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="danger" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="status" placeholder="请输入" lay-vertype="tips" lay-verify="required">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="createBy" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="createTime" id="createTime$" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="updateBy" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="updateTime" id="updateTime$" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="memo" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="storeMax" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="storeMin" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="storeMaxDate" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="width" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="height" placeholder="请输入">
                    </div>
                </div>
             </div>
        </div>
        <hr class="layui-bg-gray">
        <div class="layui-form-item text-right">
            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">保存</button>
            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
        </div>
    </form>
</script>
</html>