自动化立体仓库 - WMS系统
zhou zhou
2025-12-25 418a73bcee019e078307a1c2c255235de33d20ca
#agv任务
12个文件已添加
18个文件已修改
2200 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/LocCacheDetlController.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/LocDetlController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocCache.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocCacheDetl.java 327 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocDetl.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/TaskDetl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/TaskDetlLog.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/TaskLog.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/enums/LocAreaType.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/enums/TaskIOType.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocCacheDetlMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocCacheDetlService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocCacheDetlServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocCacheServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/TaskDetlLogServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/TaskLogServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/AgvHandler.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/CodeBuilder.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/param/GenerateAgvTaskParam.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/locCacheDetl.sql 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocCacheDetlMapper.xml 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/locCacheDetl/locCacheDetl.js 305 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/task/task.js 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locCache/locCache.html 436 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locCache/locDetail.html 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locCacheDetl/locCacheDetl.html 386 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/LocCacheDetlController.java
New file
@@ -0,0 +1,125 @@
package com.zy.asrs.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.common.DateUtils;
import com.zy.asrs.entity.LocCacheDetl;
import com.zy.asrs.service.LocCacheDetlService;
import com.core.annotations.ManagerAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.R;
import com.zy.common.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@RestController
public class LocCacheDetlController extends BaseController {
    @Autowired
    private LocCacheDetlService locCacheDetlService;
    @RequestMapping(value = "/locCacheDetl/{id}/auth")
    @ManagerAuth
    public R get(@PathVariable("id") String id) {
        return R.ok(locCacheDetlService.selectById(String.valueOf(id)));
    }
    @RequestMapping(value = "/locCacheDetl/list/auth")
    @ManagerAuth
    public R list(@RequestParam(defaultValue = "1")Integer curr,
                  @RequestParam(defaultValue = "10")Integer limit,
                  @RequestParam(required = false)String orderByField,
                  @RequestParam(required = false)String orderByType,
                  @RequestParam(required = false)String condition,
                  @RequestParam Map<String, Object> param){
        EntityWrapper<LocCacheDetl> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        convert(param, wrapper);
        allLike(LocCacheDetl.class, param.keySet(), wrapper, condition);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
        return R.ok(locCacheDetlService.selectPage(new Page<>(curr, limit), wrapper));
    }
    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
        for (Map.Entry<String, Object> entry : map.entrySet()){
            String val = String.valueOf(entry.getValue());
            if (val.contains(RANGE_TIME_LINK)){
                String[] dates = val.split(RANGE_TIME_LINK);
                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
            } else {
                wrapper.like(entry.getKey(), val);
            }
        }
    }
    @RequestMapping(value = "/locCacheDetl/add/auth")
    @ManagerAuth
    public R add(LocCacheDetl locCacheDetl) {
        locCacheDetlService.insert(locCacheDetl);
        return R.ok();
    }
    @RequestMapping(value = "/locCacheDetl/update/auth")
    @ManagerAuth
    public R update(LocCacheDetl locCacheDetl){
        if (Cools.isEmpty(locCacheDetl) || null==locCacheDetl.getId()){
            return R.error();
        }
        locCacheDetlService.updateById(locCacheDetl);
        return R.ok();
    }
    @RequestMapping(value = "/locCacheDetl/delete/auth")
    @ManagerAuth
    public R delete(@RequestParam(value="ids[]") Long[] ids){
         for (Long id : ids){
            locCacheDetlService.deleteById(id);
        }
        return R.ok();
    }
    @RequestMapping(value = "/locCacheDetl/export/auth")
    @ManagerAuth
    public R export(@RequestBody JSONObject param){
        EntityWrapper<LocCacheDetl> wrapper = new EntityWrapper<>();
        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
        Map<String, Object> map = excludeTrash(param.getJSONObject("locCacheDetl"));
        convert(map, wrapper);
        List<LocCacheDetl> list = locCacheDetlService.selectList(wrapper);
        return R.ok(exportSupport(list, fields));
    }
    @RequestMapping(value = "/locCacheDetlQuery/auth")
    @ManagerAuth
    public R query(String condition) {
        EntityWrapper<LocCacheDetl> wrapper = new EntityWrapper<>();
        wrapper.like("id", condition);
        Page<LocCacheDetl> page = locCacheDetlService.selectPage(new Page<>(0, 10), wrapper);
        List<Map<String, Object>> result = new ArrayList<>();
        for (LocCacheDetl locCacheDetl : page.getRecords()){
            Map<String, Object> map = new HashMap<>();
            map.put("id", locCacheDetl.getId());
            map.put("value", locCacheDetl.getId());
            result.add(map);
        }
        return R.ok(result);
    }
    @RequestMapping(value = "/locCacheDetl/check/column/auth")
    @ManagerAuth
    public R query(@RequestBody JSONObject param) {
        Wrapper<LocCacheDetl> wrapper = new EntityWrapper<LocCacheDetl>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
        if (null != locCacheDetlService.selectOne(wrapper)){
            return R.parse(BaseRes.REPEAT).add(getComment(LocCacheDetl.class, String.valueOf(param.get("key"))));
        }
        return R.ok();
    }
}
src/main/java/com/zy/asrs/controller/LocDetlController.java
@@ -24,6 +24,7 @@
import com.zy.asrs.service.LocOwnerService;
import com.zy.asrs.service.MatService;
import com.zy.common.web.BaseController;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -417,7 +418,8 @@
        for (LocDetl locDetl : stockStatis.getRecords()) {
            Mat mat = matService.selectByMatnr(locDetl.getMatnr());
            if (mat != null) {
                locDetl.sync(mat);
                BeanUtils.copyProperties(mat, locDetl);
//                locDetl.sync(mat);
            }
        }
        return R.ok().add(stockStatis);
@@ -433,7 +435,8 @@
        for (LocDetl locDetl : excel) {
            Mat mat = matService.selectByMatnr(locDetl.getMatnr());
            if (mat != null) {
                locDetl.sync(mat);
                BeanUtils.copyProperties(mat, locDetl);
//                locDetl.sync(mat);
            }
        }
        response.setContentType("application/vnd.ms-excel");
src/main/java/com/zy/asrs/entity/LocCache.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.zy.asrs.enums.LocStsType;
@@ -25,7 +26,7 @@
    @ApiModelProperty("主键ID")
    @TableId
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
src/main/java/com/zy/asrs/entity/LocCacheDetl.java
New file
@@ -0,0 +1,327 @@
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 lombok.experimental.Accessors;
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("asr_loc_cache_detl")
@Accessors(chain = true)
public class LocCacheDetl implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value= "")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @ApiModelProperty(value= "")
    @TableField("loc_id")
    private Long locId;
    @ApiModelProperty(value= "")
    @TableField("loc_no")
    private String locNo;
    @ApiModelProperty(value= "")
    @TableField("area_id")
    private Long areaId;
    @ApiModelProperty(value= "")
    @TableField("area_name")
    private String areaName;
    @ApiModelProperty(value= "")
    private String zpallet;
    @ApiModelProperty(value= "")
    private Double anfme;
    @ApiModelProperty(value= "")
    private String matnr;
    @ApiModelProperty(value= "")
    private String maktx;
    @ApiModelProperty(value= "")
    private String batch;
    @ApiModelProperty(value= "")
    @TableField("order_no")
    private String orderNo;
    @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= "")
    private Double weight;
    @ApiModelProperty(value= "")
    @TableField("item_num")
    private String itemNum;
    @ApiModelProperty(value= "")
    @TableField("safe_qty")
    private Double safeQty;
    @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= "")
    @TableField("modi_user")
    private Long modiUser;
    @ApiModelProperty(value= "")
    @TableField("modi_time")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date modiTime;
    @ApiModelProperty(value= "")
    @TableField("appe_user")
    private Long appeUser;
    @ApiModelProperty(value= "")
    @TableField("appe_time")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date appeTime;
    @ApiModelProperty(value= "")
    private String memo;
    @ApiModelProperty(value= "")
    @TableField("store_date")
    private Double storeDate;
    @ApiModelProperty(value= "")
    private Integer owner;
    @ApiModelProperty(value= "")
    private Integer frozen;
    @ApiModelProperty(value= "")
    private String standby1;
    @ApiModelProperty(value= "")
    private String standby2;
    @ApiModelProperty(value= "")
    private String standby3;
    @ApiModelProperty(value= "")
    @TableField("box_type1")
    private String boxType1;
    @ApiModelProperty(value= "")
    @TableField("box_type2")
    private String boxType2;
    @ApiModelProperty(value= "")
    @TableField("box_type3")
    private String boxType3;
    public LocCacheDetl() {}
    public LocCacheDetl(Long locId,String locNo,Long areaId,String areaName,String zpallet,Double anfme,String matnr,String maktx,String batch,String orderNo,String specs,String model,String color,String brand,String unit,Double price,String sku,Double units,String barcode,String origin,String manu,String manuDate,Double weight,String itemNum,Double safeQty,Double manLength,Double volume,String threeCode,String supp,String suppCode,Integer beBatch,String deadTime,Integer deadWarn,Integer source,Integer inspect,Integer danger,Long modiUser,Date modiTime,Long appeUser,Date appeTime,String memo,Double storeDate,Integer owner,Integer frozen,String standby1,String standby2,String standby3,String boxType1,String boxType2,String boxType3) {
        this.locId = locId;
        this.locNo = locNo;
        this.areaId = areaId;
        this.areaName = areaName;
        this.zpallet = zpallet;
        this.anfme = anfme;
        this.matnr = matnr;
        this.maktx = maktx;
        this.batch = batch;
        this.orderNo = orderNo;
        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.weight = weight;
        this.itemNum = itemNum;
        this.safeQty = safeQty;
        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.modiUser = modiUser;
        this.modiTime = modiTime;
        this.appeUser = appeUser;
        this.appeTime = appeTime;
        this.memo = memo;
        this.storeDate = storeDate;
        this.owner = owner;
        this.frozen = frozen;
        this.standby1 = standby1;
        this.standby2 = standby2;
        this.standby3 = standby3;
        this.boxType1 = boxType1;
        this.boxType2 = boxType2;
        this.boxType3 = boxType3;
    }
//    LocCacheDetl locCacheDetl = new LocCacheDetl(
//            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,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null    //
//    );
    public String getModiTime$(){
        if (Cools.isEmpty(this.modiTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
    }
    public String getAppeTime$(){
        if (Cools.isEmpty(this.appeTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
    }
}
src/main/java/com/zy/asrs/entity/LocDetl.java
@@ -32,7 +32,10 @@
    private static final long serialVersionUID = 1L;
    @TableId(value = "loc_id", type = IdType.AUTO)
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @TableField("loc_id")
    private Long locId;
src/main/java/com/zy/asrs/entity/TaskDetl.java
@@ -1,7 +1,9 @@
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.baomidou.mybatisplus.enums.IdType;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.zy.system.entity.User;
@@ -22,8 +24,12 @@
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @TableField("task_id")
    private Long taskId;
    /**
     * 工作号
     */
src/main/java/com/zy/asrs/entity/TaskDetlLog.java
@@ -1,7 +1,9 @@
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.baomidou.mybatisplus.enums.IdType;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.zy.system.entity.User;
@@ -20,10 +22,11 @@
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @TableField("log_id")
    private Long logId;
    @TableField("task_id")
    private Long taskID;
    /**
     * 工作号
src/main/java/com/zy/asrs/entity/TaskLog.java
@@ -32,10 +32,6 @@
    private Integer wrkNo;
    @ApiModelProperty(value = "")
    @TableField("log_id")
    private Long logId;
    @ApiModelProperty(value = "")
    @TableField("inv_wh")
    private String invWh;
@@ -336,68 +332,7 @@
    public TaskLog() {
    }
    public TaskLog(Long id, Integer wrkNo, Long logId, String invWh, Date ymd, String mk, Integer whsType, Integer wrkSts, Integer ioType, Integer crnNo, String sheetNo, Double ioPri, Date wrkDate, String locNo, Integer staNo, Integer sourceStaNo, String sourceLocNo, String locSts, String picking, String linkMis, String onlineYn, String updMk, String exitMk, Integer pltType, String emptyMk, Date ioTime, Integer ctnType, String packed, String oveMk, Double mtnType, String userNo, Date crnStrTime, Date crnEndTime, Date plcStrTime, Date crnPosTime, Double loadTime, Double expTime, Double refWrkno, Date refIotime, Long modiUser, Date modiTime, Long appeUser, Date appeTime, String pauseMk, Date errorTime, String errorMemo, Integer ctnKind, String manuType, String memoM, Double scWeight, String logMk, Date logErrTime, String logErrMemo, String barcode, String PdcType, String ctnNo, String fullPlt, String preHave, String takeNone, Long lineNumber) {
        this.id = id;
        this.wrkNo = wrkNo;
        this.logId = logId;
        this.invWh = invWh;
        this.ymd = ymd;
        this.mk = mk;
        this.whsType = whsType;
        this.wrkSts = Long.valueOf(wrkSts);
        this.ioType = ioType;
        this.crnNo = crnNo;
        this.sheetNo = sheetNo;
        this.ioPri = ioPri;
        this.wrkDate = wrkDate;
        this.locNo = locNo;
        this.staNo = String.valueOf(staNo);
        this.sourceStaNo = String.valueOf(sourceStaNo);
        this.sourceLocNo = sourceLocNo;
        this.locSts = locSts;
        this.picking = picking;
        this.linkMis = linkMis;
        this.onlineYn = onlineYn;
        this.updMk = updMk;
        this.exitMk = exitMk;
        this.pltType = pltType;
        this.emptyMk = emptyMk;
        this.ioTime = ioTime;
        this.ctnType = ctnType;
        this.packed = packed;
        this.oveMk = oveMk;
        this.mtnType = mtnType;
        this.userNo = userNo;
        this.crnStrTime = crnStrTime;
        this.crnEndTime = crnEndTime;
        this.plcStrTime = plcStrTime;
        this.crnPosTime = crnPosTime;
        this.loadTime = loadTime;
        this.expTime = expTime;
        this.refWrkno = refWrkno;
        this.refIotime = refIotime;
        this.modiUser = modiUser;
        this.modiTime = modiTime;
        this.appeUser = appeUser;
        this.appeTime = appeTime;
        this.pauseMk = pauseMk;
        this.errorTime = errorTime;
        this.errorMemo = errorMemo;
        this.ctnKind = ctnKind;
        this.manuType = manuType;
        this.memoM = memoM;
        this.scWeight = scWeight;
        this.logMk = logMk;
        this.logErrTime = logErrTime;
        this.logErrMemo = logErrMemo;
        this.barcode = barcode;
        this.PdcType = PdcType;
        this.ctnNo = ctnNo;
        this.fullPlt = fullPlt;
        this.preHave = preHave;
        this.takeNone = takeNone;
        this.lineNumber = lineNumber;
    }
//    TaskLog taskLog = new TaskLog(
//            null,    // 
src/main/java/com/zy/asrs/enums/LocAreaType.java
New file
@@ -0,0 +1,29 @@
package com.zy.asrs.enums;
/**
 * 库区类型
 * @author Ryan
 * @date 2025/12/3 9:59
 * @return null
 */
public enum LocAreaType {
    //堆垛机
    LOC_AREA_TYPE_YL("1", "余料暂存区"),
    LOC_AREA_TYPE_CK("2", "出库暂存区"),
    ;
    public Long type;
    public String desc;
    LocAreaType(String type, String desc) {
        this.type = Long.valueOf(type);
        this.desc = desc;
    }
}
src/main/java/com/zy/asrs/enums/TaskIOType.java
New file
@@ -0,0 +1,51 @@
package com.zy.asrs.enums;
/**
 * 任务出入库类型
 * @author Ryan
 * @date 2025/12/6 14:55
 * @param null
 * @return null
 */
public enum TaskIOType {
    //料箱
    ALL_IN("1", "1.入库"),
    //托盘
    STATION_STATION("3", "3.站到站"),
    DEVICE_OUT("6", "6.设备上退出"),
    PICKING_MEGER("8", "8.拣料途中并板"),
    EMPTY_IN("10", "10.空板入库"),
    MOVE("11", "11.库格移载"),
    PICK_IN("53", "53.拣料入库"),
    MERGE_IN("54", "54.并板入库"),
    CHECK_IN("57", "57.盘点入库"),
    ALL_OUT("101", "101.出库"),
    PICK_OUT("103", "103.拣料出库"),
    MERGE_OUT("104", "104.并板出库"),
    CHECK_OUT("107", "107.盘点出库"),
    EMPTY_OUT("110", "110.空板出库"),
    ;
    public Integer type;
    public String desc;
    TaskIOType(String type, String desc) {
        this.type = Integer.valueOf(type);
        this.desc = desc;
    }
}
src/main/java/com/zy/asrs/mapper/LocCacheDetlMapper.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.mapper;
import com.zy.asrs.entity.LocCacheDetl;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface LocCacheDetlMapper extends BaseMapper<LocCacheDetl> {
}
src/main/java/com/zy/asrs/service/LocCacheDetlService.java
New file
@@ -0,0 +1,8 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.LocCacheDetl;
import com.baomidou.mybatisplus.service.IService;
public interface LocCacheDetlService extends IService<LocCacheDetl> {
}
src/main/java/com/zy/asrs/service/impl/LocCacheDetlServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.service.impl;
import com.zy.asrs.mapper.LocCacheDetlMapper;
import com.zy.asrs.entity.LocCacheDetl;
import com.zy.asrs.service.LocCacheDetlService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service("locCacheDetlService")
public class LocCacheDetlServiceImpl extends ServiceImpl<LocCacheDetlMapper, LocCacheDetl> implements LocCacheDetlService {
}
src/main/java/com/zy/asrs/service/impl/LocCacheServiceImpl.java
@@ -45,7 +45,7 @@
                for (int b = param.getStartBay(); b <= param.getEndBay(); b++) {
                    for (int l = param.getStartLev(); l <= param.getEndLev(); l++) {
                        // 获取库位号
                        String locNo = String.format("CA") + String.format("%02d", r) + String.format("%03d", b) + String.format("%02d", l);
                        String locNo = areas.getAreaNo() + String.format("%02d", r) + String.format("%03d", b) + String.format("%02d", l);
                        Date now = new Date();
                        LocCache locMast = new LocCache();
                        locMast.setLocNo(locNo);
src/main/java/com/zy/asrs/service/impl/TaskDetlLogServiceImpl.java
@@ -34,7 +34,7 @@
            TaskDetlLog detlLog = new TaskDetlLog();
            BeanUtils.copyProperties(detl, detlLog);
            detlLog.setId(null);
            detlLog.setLogId(detl.getId());
            detlLog.setTaskID(detl.getId());
            if (!this.insert(detlLog)) {
                throw new CoolException("工作档明细历史保存失败!!");
            }
src/main/java/com/zy/asrs/service/impl/TaskLogServiceImpl.java
@@ -4,8 +4,12 @@
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.core.exception.CoolException;
import com.zy.asrs.entity.Task;
import com.zy.asrs.entity.TaskDetl;
import com.zy.asrs.entity.TaskDetlLog;
import com.zy.asrs.entity.TaskLog;
import com.zy.asrs.mapper.TaskLogMapper;
import com.zy.asrs.service.TaskDetlLogService;
import com.zy.asrs.service.TaskDetlService;
import com.zy.asrs.service.TaskLogService;
import com.zy.asrs.service.TaskService;
import org.springframework.beans.BeanUtils;
@@ -13,6 +17,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Objects;
@Service("taskLogService")
@@ -20,6 +25,10 @@
    @Autowired
    private TaskService taskService;
    @Autowired
    private TaskDetlService taskDetlService;
    @Autowired
    private TaskDetlLogService taskDetlLogService;
    /**
     * @author Ryan
@@ -36,12 +45,25 @@
        }
        TaskLog taskLog = new TaskLog();
        BeanUtils.copyProperties(task, taskLog);
        taskLog.setLogId(task.getId());
        if (!this.insert(taskLog)) {
            throw new CoolException("任务日志保存失败!!");
        }
        return false;
        List<TaskDetl> detls = taskDetlService.selectList(new EntityWrapper<TaskDetl>().eq("wrk_no", wrkNo));
        if (Objects.isNull(detls) || detls.isEmpty()) {
            throw new CoolException("数据错误:任务不存在!!");
        }
        detls.forEach(detl -> {
            TaskDetlLog detlLog = new TaskDetlLog();
            BeanUtils.copyProperties(detl, detlLog);
            detlLog.setId(null);
            detlLog.setTaskID(taskLog.getId());
            if (!taskDetlLogService.insert(detlLog)) {
                throw new CoolException("工作档明细历史保存失败!!");
            }
        });
        return true;
    }
}
src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
@@ -14,6 +14,7 @@
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
@Service("taskService")
@@ -139,7 +140,7 @@
        String locNo = ""; // 待修改目标库位
        String locSts = ""; // 待修改目标库位状态
        // 入库取消(修改目标库位)
        if (wrkMast.getWrkSts() < 4) {
        if (wrkMast.getIoType() < 100) {
            locNo = wrkMast.getLocNo();
            locSts = "O";
@@ -156,7 +157,7 @@
                locCacheService.updateById(locMast);
            }
            // 出库取消(修改源库位)
        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14) {
        } else {
            locNo = wrkMast.getSourceLocNo();
            // 出库 ===>> F.在库
            if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
@@ -177,8 +178,6 @@
                locMast.setModiUser(userId);
                locCacheService.updateById(locMast);
            }
        } else {
            throw new CoolException("当前工作状态无法取消");
        }
        //取消入库工作档时,查询组托表,如果有将状态改为待处理
@@ -197,53 +196,7 @@
            }
        }
        //取消出库工作档时,查询单据管理表,回滚作业中数量
        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103) {
            List<TaskDetl> wrkDetls = taskDetlService.selectList(new EntityWrapper<TaskDetl>().eq("wrk_no", wrkMast.getWrkNo()));
            for (TaskDetl wrkDetl : wrkDetls) {
                if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
                    if (!orderDetlPakoutService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(),
                            wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                            wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) {
                        throw new CoolException("订单数据回滚失败");
                    }
                    //修改订单主表状态,没有作业数量时才可以修改
                    boolean flag = true;
//                    List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no",wrkDetl.getOrderNo()));
                    OrderPakout order = orderPakoutService.selectByNo(wrkDetl.getOrderNo());
                    List<OrderDetlPakout> orderDetls = orderDetlPakoutService.selectByOrderId(order.getId());
                    for (OrderDetlPakout orderDetl : orderDetls) {
                        if (orderDetl.getWorkQty() > 0) {
                            flag = false;
                        }
                    }
                    if (flag) {
                        if (!Cools.isEmpty(order) && order.getSettle() == 2) {
                            order.setSettle(1L);
                            order.setUpdateBy(userId);
                            order.setUpdateTime(now);
                        }
                        if (!orderPakoutService.update(order, new EntityWrapper<OrderPakout>().eq("order_no", wrkDetl.getOrderNo()))) {
                            throw new CoolException("修改订单状态失败");
                        }
                    }
                }
            }
        }
//        // 订单关联
//        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
//        for (WrkDetl wrkDetl : wrkDetls) {
//            if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
//                if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
//                    throw new CoolException("订单数据回滚失败");
//                }
//                // 生成新的出库作业
////                        stockOutRe(wrkMast, wrkDetls);
//            }
//        }
        // 取消操作人员记录
        wrkMast.setManuType("手动取消");
@@ -260,10 +213,6 @@
        boolean wrkMastRes = taskService.deleteById(wrkMast);
        if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) {
            // 保存工作明细档历史档
            if (!taskDetlLogService.save(wrkMast.getWrkNo())) {
//                throw new CoolException("保存工作明细历史档失败, workNo = " + wrkMast.getWrkNo());
            }
            // 删除工作档明细
            boolean wrkDetlRes = taskDetlService.delete(new EntityWrapper<TaskDetl>().eq("wrk_no", workNo));
        }
src/main/java/com/zy/asrs/task/handler/AgvHandler.java
@@ -16,6 +16,7 @@
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -52,11 +53,18 @@
    @Resource
    private BasStationMapper basStationMapper;
    @Value("${Agv.sendTask}")
    private boolean agvSendTask;
    /**
     * 呼叫agv搬运
     */
    public void callAgv(List<Task> taskList) {
        if (!agvSendTask) {
            return;
        }
        for (Task task : taskList) {
            // 呼叫agv
            String response = "";
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -57,6 +57,9 @@
    @Autowired
    private BasStationServiceImpl basStationService;
    @Autowired
    private LocCacheDetlService locCacheDetlService;
    public ReturnT<String> start(WrkMast wrkMast) {
        // 4.入库完成
        if (wrkMast.getWrkSts() == 4) {
@@ -125,7 +128,8 @@
                            }
                        } else {
                            locDetl = new LocDetl();
                            locDetl.sync(wrkDetl);
                            BeanUtils.copyProperties(wrkDetl, locDetl);
//                            locDetl.sync(wrkDetl);
                            locDetl.setLocNo(wrkMast.getLocNo()); // 库位号
                            locDetl.setAnfme(wrkDetl.getAnfme()); // 数量
                            locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码
@@ -196,7 +200,8 @@
                            }
                        } else {
                            locDetl = new LocDetl();
                            locDetl.sync(wrkDetl);
                            BeanUtils.copyProperties(wrkDetl, locDetl);
//                            locDetl.sync(wrkDetl);
                            locDetl.setLocNo(wrkMast.getLocNo()); // 库位号
                            locDetl.setAnfme(wrkDetl.getAnfme()); // 数量
                            locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码
@@ -302,7 +307,8 @@
                            }
                        } else {
                            locDetl = new LocDetl();
                            locDetl.sync(wrkDetl);
                            BeanUtils.copyProperties(wrkDetl, locDetl);
//                            locDetl.sync(wrkDetl);
                            locDetl.setLocNo(wrkMast.getLocNo()); // 库位号
                            locDetl.setAnfme(wrkDetl.getAnfme()); // 数量
                            locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码
@@ -607,26 +613,6 @@
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return FAIL.setMsg("全板出库 ===>> 工作明细档为空; [workNo=" + task.getWrkNo() + "],[locNo=" + task.getSourceLocNo() + "]");
            }
            for (TaskDetl wrkDetl : wrkDetls101) {
                // 更新订单完成数量
                OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                if (orderDetlPakout == null) {
                    orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                            wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                }
                try {
                    if (!Cools.isEmpty(orderDetlPakout)) {
                        if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) {
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                            return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + task.getWrkNo() + "],[locNo=" + task.getSourceLocNo() + "]");
                        }
                    }
                } catch (Exception ignore) {
                }
            }
            // 删除工作档源库位的库存明细
            if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", task.getSourceLocNo()))) {
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -644,16 +630,6 @@
                }
            } else {
                throw new CoolException("当前库位状态" + locMast.getLocSts() + ", 无法执行出库操作!!");
            }
            BasStation devNo = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", task.getStaNo()));
            if (Objects.isNull(devNo)) {
                throw new CoolException("站点:" + task.getSourceStaNo() + ", 不存在!!");
            }
            devNo.setLocSts(LocStsType.LOC_STS_TYPE_F.type);
            devNo.setModiTime(new Date());
            if (!basStationService.updateById(devNo)) {
                throw new CoolException("站点信息修改失败!!");
            }
            task.setWrkSts(15L);
            if (!taskService.updateById(task)) {
@@ -680,9 +656,10 @@
            throw new CoolException("数据错误:组托数据不存在!!");
        }
        apallet.forEach(pakin -> {
            LocDetl detl = new LocDetl();
            LocCacheDetl detl = new LocCacheDetl();
            BeanUtils.copyProperties(pakin, detl);
            detl.setBarcode(pakin.getBarcode())
                    .setLocId(locCache.getId())
                    .setAnfme(pakin.getAnfme())
                    .setBrand(pakin.getBrand())
                    .setAppeTime(new Date())
@@ -693,7 +670,7 @@
                    .setAreaName(locCache.getAreaName())
                    .setUnit(pakin.getUnit())
                    .setBatch(pakin.getBatch());
            if (!locDetlService.insert(detl)) {
            if (!locCacheDetlService.insert(detl)) {
                throw new CoolException("库位明细保存失败!!");
            }
        });
@@ -710,12 +687,6 @@
        wrkMast.setModiTime(new Date());
        if (!taskService.updateById(wrkMast)) {
            throw new CoolException("任务状态修改失败!!");
        }
        Set<Long> list = apallet.stream().map(WaitPakin::getOrderId).collect(Collectors.toSet());
        List<OrderPakin> pakins = orderPakinService.selectList(new EntityWrapper<OrderPakin>().in("id", list));
        if (Objects.isNull(pakins) || pakins.isEmpty()) {
            throw new CoolException("单据不存在!!");
        }
        return SUCCESS;
src/main/java/com/zy/common/CodeBuilder.java
@@ -20,10 +20,10 @@
        generator.url = "192.168.4.15:1433;databasename=yhfzasrs";
        generator.username = "sa";
        generator.password = "sa@123";
        generator.table = "man_inventory_reserve_log";
        generator.table = "asr_loc_cache_detl";
        generator.packagePath = "com.zy.asrs";
        generator.html = false;
        generator.js = false;
//        generator.html = false;
//        generator.js = false;
        generator.build();
    }
src/main/java/com/zy/common/web/WcsController.java
@@ -8,20 +8,29 @@
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.EmptyPlateOutParam;
import com.zy.asrs.entity.result.FindLocNoAttributeVo;
import com.zy.asrs.enums.LocAreaType;
import com.zy.asrs.enums.LocStsType;
import com.zy.asrs.enums.TaskIOType;
import com.zy.asrs.service.*;
import com.zy.common.CodeRes;
import com.zy.common.model.LocTypeDto;
import com.zy.common.model.StartupDto;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.service.CommonService;
import com.zy.common.web.param.GenerateAgvTaskParam;
import com.zy.common.web.param.SearchLocParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import static com.zy.asrs.enums.TaskIOType.EMPTY_IN;
/**
 * Created by vincent on 2020/10/30
@@ -49,6 +58,102 @@
    private RowLastnoService rowLastnoService;
    @Autowired
    private WorkService workService;
    @Autowired
    private TaskService taskService;
    @Autowired
    private TaskDetlService taskDetlService;
    @Autowired
    private BasAreasService basAreasService;
    @Autowired
    private LocCacheService locCacheService;
    @PostMapping("/generate/AgvTask/v1")
    @ResponseBody
    @Transactional(rollbackFor = Exception.class)
    public synchronized R generateAgvTask(@RequestBody GenerateAgvTaskParam param) {
        if (Cools.isEmpty(param.getStaNo(),param.getWrkNo())){
            return R.error("站点编号和工作号不能为空");
        }
        Task searchTask = taskService.selectOne(new EntityWrapper<Task>()
                .eq("source_sta_no", param.getStaNo())
        );
        if (!Cools.isEmpty(searchTask)){
            return R.error("任务已存在");
        }
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
                .eq("wrk_no", param.getWrkNo())
                .eq("sta_no", param.getStaNo())
        );
        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>()
                .eq("wrk_no", param.getWrkNo())
        );
        if (Cools.isEmpty(wrkMast) || Cools.isEmpty(wrkDetls)){
            return R.error("工作关联任务或明细不存在");
        }
        BasAreas basAreas = basAreasService
                .selectOne(new EntityWrapper<BasAreas>().eq("whs_type_id", LocAreaType.LOC_AREA_TYPE_CK.type));
        LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>()
                .eq("area_id", basAreas.getId())
                .eq("frozen", 0)
                .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)
                // .eq("loc_no", params.getTarSite())
                .orderAsc(Arrays.asList("loc_no"))
                .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
        // 获取工作号
        int workNo = commonService.getWorkNo(WorkNoType.PICK.type);
        // 保存工作档
        Task task = new Task();
        Date now = new Date();
        task.setWrkNo(workNo)
                .setIoTime(now)
                .setWrkSts(7L) // 工作状态:11.生成出库ID
                .setIoType(1) // 入出库状态: 1.入库
                .setTaskType("agv")
                .setIoPri(10D)
                .setLocNo(locCache.getLocNo()) // 目标库位
                .setFullPlt(wrkMast.getIoType().equals(TaskIOType.EMPTY_IN.type) ? "N" : "Y")// 满板:Y
                .setPicking("N") // 拣料
                .setExitMk("N")// 退出
                .setSourceStaNo(param.getStaNo().toString())
                .setEmptyMk(wrkMast.getIoType().equals(TaskIOType.EMPTY_IN.type) ? "Y" : "N")// 空板
                .setBarcode(wrkMast.getBarcode())// 托盘码
                .setLinkMis("N")
                .setAppeTime(now)
                .setModiTime(now);
        if (!taskService.insert(task)) {
            throw new CoolException("保存工作档失败");
        }
        wrkDetls.forEach(wrkDetl -> {
            TaskDetl taskDetl = new TaskDetl();
            BeanUtils.copyProperties(wrkDetl, taskDetl);
            taskDetl.setTaskId(task.getId());
            taskDetl.setWrkNo(task.getWrkNo());
            taskDetl.setAppeTime(now);
            taskDetl.setModiTime(now);
            if (!taskDetlService.insert(taskDetl)) {
                throw new CoolException("保存AGV工作档明细失败");
            }
        });
        // 修改目标库位状态
        if (locCache.getLocSts().equals(LocStsType.LOC_STS_TYPE_O.type)) {
            locCache.setLocSts(LocStsType.LOC_STS_TYPE_S.type); // S.入库预约
            locCache.setModiTime(new Date());
            if (!locCacheService.updateById(locCache)) {
                throw new CoolException("更新目标库位状态失败");
            }
        } else {
            throw new CoolException("移转失败,目标库位状态:" + locCache.getLocSts$());
        }
        return R.ok();
    }
    @PostMapping("/pakin/loc/v1")
    @ResponseBody
src/main/java/com/zy/common/web/param/GenerateAgvTaskParam.java
New file
@@ -0,0 +1,9 @@
package com.zy.common.web.param;
import lombok.Data;
@Data
public class GenerateAgvTaskParam {
    private Integer staNo;
    private Integer wrkNo;
}
src/main/java/locCacheDetl.sql
New file
@@ -0,0 +1,18 @@
-- save locCacheDetl record
-- mysql
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'locCacheDetl/locCacheDetl.html', 'locCacheDetl管理', null , '2', null , '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'locCacheDetl#view', '查询', '', '3', '0', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'locCacheDetl#btn-add', '新增', '', '3', '1', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'locCacheDetl#btn-edit', '编辑', '', '3', '2', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'locCacheDetl#btn-delete', '删除', '', '3', '3', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'locCacheDetl#btn-export', '导出', '', '3', '4', '1');
-- sqlserver
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'locCacheDetl/locCacheDetl.html', N'locCacheDetl管理', null, '2', null, '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'locCacheDetl#view', N'查询', '', '3', '0', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'locCacheDetl#btn-add', N'新增', '', '3', '1', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'locCacheDetl#btn-edit', N'编辑', '', '3', '2', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'locCacheDetl#btn-delete', N'删除', '', '3', '3', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'locCacheDetl#btn-export', N'导出', '', '3', '4', '1');
src/main/resources/application-dev.yml
@@ -66,5 +66,8 @@
  # 右深库位排号
  doubleLocsRight: 4,8,12,16,20,24,28,32
Agv:
  sendTask: false
src/main/resources/mapper/LocCacheDetlMapper.xml
New file
@@ -0,0 +1,61 @@
<?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.LocCacheDetlMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.LocCacheDetl">
        <id column="id" property="id" />
        <result column="loc_id" property="locId" />
        <result column="loc_no" property="locNo" />
        <result column="area_id" property="areaId" />
        <result column="area_name" property="areaName" />
        <result column="zpallet" property="zpallet" />
        <result column="anfme" property="anfme" />
        <result column="matnr" property="matnr" />
        <result column="maktx" property="maktx" />
        <result column="batch" property="batch" />
        <result column="order_no" property="orderNo" />
        <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="weight" property="weight" />
        <result column="item_num" property="itemNum" />
        <result column="safe_qty" property="safeQty" />
        <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="modi_user" property="modiUser" />
        <result column="modi_time" property="modiTime" />
        <result column="appe_user" property="appeUser" />
        <result column="appe_time" property="appeTime" />
        <result column="memo" property="memo" />
        <result column="store_date" property="storeDate" />
        <result column="owner" property="owner" />
        <result column="frozen" property="frozen" />
        <result column="standby1" property="standby1" />
        <result column="standby2" property="standby2" />
        <result column="standby3" property="standby3" />
        <result column="box_type1" property="boxType1" />
        <result column="box_type2" property="boxType2" />
        <result column="box_type3" property="boxType3" />
    </resultMap>
</mapper>
src/main/webapp/static/js/locCacheDetl/locCacheDetl.js
New file
@@ -0,0 +1,305 @@
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: '#locCacheDetl',
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/locCacheDetl/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: ''}
            ,{field: 'locId', align: 'center',title: ''}
            ,{field: 'locNo', align: 'center',title: ''}
            ,{field: 'areaId', align: 'center',title: ''}
            ,{field: 'areaName', align: 'center',title: ''}
            ,{field: 'zpallet', align: 'center',title: ''}
            ,{field: 'anfme', align: 'center',title: ''}
            ,{field: 'matnr', align: 'center',title: ''}
            ,{field: 'maktx', align: 'center',title: ''}
            ,{field: 'batch', align: 'center',title: ''}
            ,{field: 'orderNo', 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: 'weight', align: 'center',title: ''}
            ,{field: 'itemNum', align: 'center',title: ''}
            ,{field: 'safeQty', 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: 'modiUser', align: 'center',title: ''}
            ,{field: 'modiTime$', align: 'center',title: ''}
            ,{field: 'appeUser', align: 'center',title: ''}
            ,{field: 'appeTime$', align: 'center',title: ''}
            ,{field: 'memo', align: 'center',title: ''}
            ,{field: 'storeDate', align: 'center',title: ''}
            ,{field: 'owner', align: 'center',title: ''}
            ,{field: 'frozen', align: 'center',title: ''}
            ,{field: 'standby1', align: 'center',title: ''}
            ,{field: 'standby2', align: 'center',title: ''}
            ,{field: 'standby3', align: 'center',title: ''}
            ,{field: 'boxType1', align: 'center',title: ''}
            ,{field: 'boxType2', align: 'center',title: ''}
            ,{field: 'boxType3', 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(locCacheDetl)', 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(locCacheDetl)', 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 = {
                        'locCacheDetl': exportData,
                        'fields': fields
                    };
                    $.ajax({
                        url: baseUrl+"/locCacheDetl/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(locCacheDetl)', 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+"/locCacheDetl/"+(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+"/locCacheDetl/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: '#modiTime\\$',
                type: 'datetime',
                value: data!==undefined?data['modiTime\\$']:null
            });
            layDate.render({
                elem: '#appeTime\\$',
                type: 'datetime',
                value: data!==undefined?data['appeTime\\$']: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/static/js/task/task.js
@@ -22,26 +22,22 @@
        height: 'full-120',
        cols: [[
            {type: 'checkbox'}
            , {field: 'id', align: 'center', title: 'id'}
            , {field: 'wrkNo', align: 'center', title: '任务号'}
            , {field: 'ioType$', align: 'center', title: '入出库类型',}
            , {field: 'wrkSts$', align: 'center', title: '工作状态'}
            , {field: 'ioPri', align: 'center', title: '优先级',hide: true}
            , {field: 'sourceStaNo', align: 'center', title: '源站'}
            , {field: 'staNo', align: 'center', title: '目标站'}
            , {field: 'invWh', align: 'center', title: 'agv'}
            , {field: 'barcode', align: 'center', title: '条码'}
            , {field: 'appeUser$', align: 'center', title: '创建人'}
            , {field: 'appeTime$', align: 'center', title: '创建时间',width: 170}
            , {field: 'wrkNo', align: 'center', title: '工作号', sort: true, width: 105}
            , {field: 'ioTime$', align: 'center', title: '工作时间', width: 160}
            , {field: 'wrkSts$', align: 'center', title: '工作状态', width: 150}
            , {field: 'ioType$', align: 'center', title: '入出库类型', width: 150}
            , {field: 'ioPri', align: 'center', title: '优先级', width: 80}
            , {field: 'taskType$', align: 'center', title: '任务类型', width: 120}
            , {field: 'crnNo$', align: 'center', title: '堆垛机', hide: true}
            , {field: 'sourceStaNo$', align: 'center', title: '源站', width: 120}
            , {field: 'sourceLocNo', align: 'center', title: '源库位', width: 120}
            , {field: 'staNo$', align: 'center', title: '目标站', width: 120}
            , {field: 'locNo', align: 'center', title: '目标库位', width: 120}
            , {field: 'barcode', align: 'center', title: '条码', width: 110}
            , {field: 'preHave', align: 'center', title: '先入品', hide: true}
            , {field: 'takeNone', align: 'center', title: '空操作', hide: true}
            , {field: 'modiUser$', align: 'center', title: '修改人员', hide: true}
            , {field: 'modiTime$', align: 'center', title: '修改时间', hide: true,width: 170}
            // , {field: 'taskType$', align: 'center', title: '任务类型'}
            // , {field: 'crnNo$', align: 'center', title: '堆垛机', hide: true}
            // , {field: 'sourceLocNo', align: 'center', title: '源库位', width: 120}
            // , {field: 'locNo', align: 'center', title: '目标库位', width: 120}
            // , {field: 'preHave', align: 'center', title: '先入品', hide: true}
            // , {field: 'takeNone', align: 'center', title: '空操作', hide: true}
            , {field: 'modiTime$', align: 'center', title: '修改时间', hide: true, width: 160}
            , {fixed: 'right', title: '操作', align: 'center', toolbar: '#operate', width: 200}
        ]],
        request: {
@@ -175,7 +171,7 @@
                        title: '工作号:' + data.wrkNo,
                        shadeClose: true
                    }, function () {
                        http.post(baseUrl + "/hand/control/wrkMast", {workNo: data.wrkNo, type: 2}, function (res) {
                        http.post(baseUrl + "/task/control", {workNo: data.wrkNo, type: 2}, function (res) {
                            $(".layui-laypage-btn")[0].click();
                            layer.msg(data.wrkNo + res.msg);
                        })
@@ -186,7 +182,7 @@
                        title: '工作号:' + data.wrkNo,
                        shadeClose: true
                    }, function () {
                        http.post(baseUrl + "/hand/control/wrkMast", {workNo: data.wrkNo, type: 2}, function (res) {
                        http.post(baseUrl + "/task/control", {workNo: data.wrkNo, type: 2}, function (res) {
                            $(".layui-laypage-btn")[0].click();
                            layer.msg(data.wrkNo + res.msg);
                        })
@@ -197,7 +193,7 @@
            //  拣料入库
            case 'pick':
                layer.confirm('拣料入库该笔工作档?', {title: '工作号:' + data.wrkNo, shadeClose: true}, function () {
                    http.post(baseUrl + "/hand/control/wrkMast", {workNo: data.wrkNo, type: 3}, function (res) {
                    http.post(baseUrl + "/task/control", {workNo: data.wrkNo, type: 3}, function (res) {
                        $(".layui-laypage-btn")[0].click();
                        layer.msg(data.wrkNo + res.msg);
                    })
src/main/webapp/views/locCache/locCache.html
@@ -1,5 +1,6 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title></title>
@@ -10,46 +11,48 @@
    <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="loc_no" placeholder="编号" autocomplete="off">
    <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="loc_no" placeholder="编号"
                                    autocomplete="off">
                            </div>
                        </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 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>
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="condition" placeholder="请输入"
                                   autocomplete="off">
                        <div class="layui-inline">
                            <div class="layui-input-inline">
                                <input class="layui-input" type="text" name="condition" placeholder="请输入"
                                    autocomplete="off">
                            </div>
                        </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 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="locCache" lay-filter="locCache"></table>
            </div>
            <table class="layui-hide" id="locCache" lay-filter="locCache"></table>
        </div>
    </div>
</div>
<script type="text/html" id="toolbar">
    <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" id="btn-print-batch" lay-event="batchModifties">批量修改</button>
@@ -59,214 +62,217 @@
</script>
<div id="batchModify" style="margin: 20px 0 10px 30px; display: none">
    <div class="layui-form layui-form-pane">
        <div class="layui-form-item">
            <div class="layui-inline">
                <label class="layui-form-label"><span class="not-null">*</span>库区名称:</label>
                <div class="layui-input-inline cool-auto-complete">
                    <input id="identifying" name="identifying" class="layui-input" type="text" style="display: none">
                    <input id="identifying$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)"
                           type="text" onfocus=this.blur()>
                    <div class="cool-auto-complete-window">
                        <input class="cool-auto-complete-window-input" data-key="basAreasQueryBywhsType"
                               onkeyup="autoLoad(this.getAttribute('data-key'))">
                        <select class="cool-auto-complete-window-select" data-key="basAreasQueryBywhsTypeSelect"
    <div id="batchModify" style="margin: 20px 0 10px 30px; display: none">
        <div class="layui-form layui-form-pane">
            <div class="layui-form-item">
                <div class="layui-inline">
                    <label class="layui-form-label"><span class="not-null">*</span>库区名称:</label>
                    <div class="layui-input-inline cool-auto-complete">
                        <input id="identifying" name="identifying" class="layui-input" type="text"
                            style="display: none">
                        <input id="identifying$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)"
                            type="text" onfocus=this.blur()>
                        <div class="cool-auto-complete-window">
                            <input class="cool-auto-complete-window-input" data-key="basAreasQueryBywhsType"
                                onkeyup="autoLoad(this.getAttribute('data-key'))">
                            <select class="cool-auto-complete-window-select" data-key="basAreasQueryBywhsTypeSelect"
                                onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
                        </select>
                            </select>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <!-- 库位类型 -->
        <div class="layui-form-item">
            <label class="layui-form-label">高低类型</label>
            <div class="layui-input-inline">
                <select name="locType1">
                    <option style="display: none"></option>
                    <option value="0">未知</option>
                    <option value="1">低库位</option>
                    <option value="2">高库位</option>
                </select>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">宽窄类型</label>
            <div class="layui-input-inline">
                <select name="locType2">
                    <option style="display: none"></option>
                    <option value="0">未知</option>
                    <option value="1">窄库位</option>
                    <option value="2">宽库位</option>
                </select>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">轻重类型</label>
            <div class="layui-input-inline">
                <select name="locType3">
                    <option style="display: none"></option>
                    <option value="0">未知</option>
                    <option value="1">轻库位</option>
                    <option value="2">重库位</option>
                </select>
            </div>
        </div>
        <div style="text-align: center; margin-top: 20px">
            <button class="layui-btn layui-btn-normal" id="initDo" lay-submit lay-filter="initDo">
                确定
            </button>
        </div>
    </div>
</div>
<!-- 重置库位弹窗 -->
<div id="resetLocDiv" style="margin: 20px 0 10px 30px; display: none">
    <div class="layui-form layui-form-pane">
        <div class="layui-form-item">
            <div class="layui-inline">
                <label class="layui-form-label">删除库位</label>
                <div class="layui-input-inline" style="width: 100px;">
                    <input type="checkbox" name="enable" lay-skin="switch" value="1" lay-text="删除|保留">
                </div>
            </div>
        </div>
        <div class="layui-form-item">
            <div class="layui-inline">
                <label class="layui-form-label"><span class="not-null">*</span>库区名称:</label>
                <div class="layui-input-inline cool-auto-complete">
                    <input id="identifying" name="identifying" class="layui-input" type="text" style="display: none">
                    <input id="identifying$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)"
                           type="text" onfocus=this.blur()>
                    <div class="cool-auto-complete-window">
                        <input class="cool-auto-complete-window-input" data-key="basAreasQueryBywhsType"
                               onkeyup="autoLoad(this.getAttribute('data-key'))">
                        <select class="cool-auto-complete-window-select" data-key="basAreasQueryBywhsTypeSelect"
                                onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
                        </select>
                    </div>
                </div>
            </div>
        </div>
        <!-- 排 -->
        <div class="layui-form-item">
            <div class="layui-inline">
                <label class="layui-form-label">起止排</label>
                <div class="layui-input-inline" style="width: 100px;">
                    <input type="text" name="startRow" autocomplete="off" class="layui-input"
                           lay-verify="required|number">
                </div>
                <div class="layui-form-mid">-</div>
                <div class="layui-input-inline" style="width: 100px;">
                    <input type="text" name="endRow" autocomplete="off" class="layui-input"
                           lay-verify="required|number">
                </div>
            </div>
        </div>
        <!-- 列 -->
        <div class="layui-form-item">
            <div class="layui-inline">
                <label class="layui-form-label">起止列</label>
                <div class="layui-input-inline" style="width: 100px;">
                    <input type="text" name="startBay" autocomplete="off" class="layui-input"
                           lay-verify="required|number">
                </div>
                <div class="layui-form-mid">-</div>
                <div class="layui-input-inline" style="width: 100px;">
                    <input type="text" name="endBay" autocomplete="off" class="layui-input"
                           lay-verify="required|number">
                </div>
            </div>
        </div>
        <!-- 层 -->
        <div class="layui-form-item">
            <div class="layui-inline">
                <label class="layui-form-label">起止层</label>
                <div class="layui-input-inline" style="width: 100px;">
                    <input type="text" name="startLev" autocomplete="off" class="layui-input"
                           lay-verify="required|number">
                </div>
                <div class="layui-form-mid">-</div>
                <div class="layui-input-inline" style="width: 100px;">
                    <input type="text" name="endLev" autocomplete="off" class="layui-input"
                           lay-verify="required|number">
                </div>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">堆垛机数量</label>
            <div class="layui-input-inline">
                <input type="text" name="crnAmount" lay-verify="required|number" autocomplete="off" class="layui-input">
            </div>
        </div>
        <div class="layui-form-item">
            <div class="layui-inline">
                <label class="layui-form-label">起始堆垛机</label>
            <!-- 库位类型 -->
            <div class="layui-form-item">
                <label class="layui-form-label">高低类型</label>
                <div class="layui-input-inline">
                    <input type="text" name="staCrn" autocomplete="off" class="layui-input" lay-verify="number">
                    <select name="locType1">
                        <option style="display: none"></option>
                        <option value="0">未知</option>
                        <option value="1">低库位</option>
                        <option value="2">高库位</option>
                    </select>
                </div>
            </div>
        </div>
        <!-- 库位类型 -->
        <div class="layui-form-item">
            <label class="layui-form-label">高低类型</label>
            <div class="layui-input-inline">
                <select name="locType1">
                    <option style="display: none"></option>
                    <option value="0">未知</option>
                    <option value="1">低库位</option>
                    <option value="2">高库位</option>
                </select>
            <div class="layui-form-item">
                <label class="layui-form-label">宽窄类型</label>
                <div class="layui-input-inline">
                    <select name="locType2">
                        <option style="display: none"></option>
                        <option value="0">未知</option>
                        <option value="1">窄库位</option>
                        <option value="2">宽库位</option>
                    </select>
                </div>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">宽窄类型</label>
            <div class="layui-input-inline">
                <select name="locType2">
                    <option style="display: none"></option>
                    <option value="0">未知</option>
                    <option value="1">窄库位</option>
                    <option value="2">宽库位</option>
                </select>
            <div class="layui-form-item">
                <label class="layui-form-label">轻重类型</label>
                <div class="layui-input-inline">
                    <select name="locType3">
                        <option style="display: none"></option>
                        <option value="0">未知</option>
                        <option value="1">轻库位</option>
                        <option value="2">重库位</option>
                    </select>
                </div>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">轻重类型</label>
            <div class="layui-input-inline">
                <select name="locType3">
                    <option style="display: none"></option>
                    <option value="0">未知</option>
                    <option value="1">轻库位</option>
                    <option value="2">重库位</option>
                </select>
            <div style="text-align: center; margin-top: 20px">
                <button class="layui-btn layui-btn-normal" id="initDo" lay-submit lay-filter="initDo">
                    确定
                </button>
            </div>
        </div>
        <div style="text-align: center; margin-top: 20px">
            <button class="layui-btn layui-btn-radius layui-btn-normal" id="initDo" lay-submit lay-filter="initDo">
                确定
            </button>
        </div>
    </div>
</div>
<script type="text/html" id="toolbar">
    <!-- 重置库位弹窗 -->
    <div id="resetLocDiv" style="margin: 20px 0 10px 30px; display: none">
        <div class="layui-form layui-form-pane">
            <div class="layui-form-item">
                <div class="layui-inline">
                    <label class="layui-form-label">删除库位</label>
                    <div class="layui-input-inline" style="width: 100px;">
                        <input type="checkbox" name="enable" lay-skin="switch" value="1" lay-text="删除|保留">
                    </div>
                </div>
            </div>
            <div class="layui-form-item">
                <div class="layui-inline">
                    <label class="layui-form-label"><span class="not-null">*</span>库区名称:</label>
                    <div class="layui-input-inline cool-auto-complete">
                        <input id="initIdentifying" name="identifying" class="layui-input" type="text"
                            style="display: none">
                        <input id="initIdentifying$" class="layui-input cool-auto-complete-div"
                            onclick="autoShow(this.id)" type="text" onfocus=this.blur()>
                        <div class="cool-auto-complete-window">
                            <input class="cool-auto-complete-window-input" data-key="basAreasQueryBywhsType2"
                                onkeyup="autoLoad(this.getAttribute('data-key'))">
                            <select class="cool-auto-complete-window-select" data-key="basAreasQueryBywhsType2Select"
                                onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
                            </select>
                        </div>
                    </div>
                </div>
            </div>
            <!-- 排 -->
            <div class="layui-form-item">
                <div class="layui-inline">
                    <label class="layui-form-label">起止排</label>
                    <div class="layui-input-inline" style="width: 100px;">
                        <input type="text" name="startRow" autocomplete="off" class="layui-input"
                            lay-verify="required|number">
                    </div>
                    <div class="layui-form-mid">-</div>
                    <div class="layui-input-inline" style="width: 100px;">
                        <input type="text" name="endRow" autocomplete="off" class="layui-input"
                            lay-verify="required|number">
                    </div>
                </div>
            </div>
            <!-- 列 -->
            <div class="layui-form-item">
                <div class="layui-inline">
                    <label class="layui-form-label">起止列</label>
                    <div class="layui-input-inline" style="width: 100px;">
                        <input type="text" name="startBay" autocomplete="off" class="layui-input"
                            lay-verify="required|number">
                    </div>
                    <div class="layui-form-mid">-</div>
                    <div class="layui-input-inline" style="width: 100px;">
                        <input type="text" name="endBay" autocomplete="off" class="layui-input"
                            lay-verify="required|number">
                    </div>
                </div>
            </div>
            <!-- 层 -->
            <div class="layui-form-item">
                <div class="layui-inline">
                    <label class="layui-form-label">起止层</label>
                    <div class="layui-input-inline" style="width: 100px;">
                        <input type="text" name="startLev" autocomplete="off" class="layui-input"
                            lay-verify="required|number">
                    </div>
                    <div class="layui-form-mid">-</div>
                    <div class="layui-input-inline" style="width: 100px;">
                        <input type="text" name="endLev" autocomplete="off" class="layui-input"
                            lay-verify="required|number">
                    </div>
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">堆垛机数量</label>
                <div class="layui-input-inline">
                    <input type="text" name="crnAmount" lay-verify="required|number" autocomplete="off"
                        class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <div class="layui-inline">
                    <label class="layui-form-label">起始堆垛机</label>
                    <div class="layui-input-inline">
                        <input type="text" name="staCrn" autocomplete="off" class="layui-input" lay-verify="number">
                    </div>
                </div>
            </div>
            <!-- 库位类型 -->
            <div class="layui-form-item">
                <label class="layui-form-label">高低类型</label>
                <div class="layui-input-inline">
                    <select name="locType1">
                        <option style="display: none"></option>
                        <option value="0">未知</option>
                        <option value="1">低库位</option>
                        <option value="2">高库位</option>
                    </select>
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">宽窄类型</label>
                <div class="layui-input-inline">
                    <select name="locType2">
                        <option style="display: none"></option>
                        <option value="0">未知</option>
                        <option value="1">窄库位</option>
                        <option value="2">宽库位</option>
                    </select>
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">轻重类型</label>
                <div class="layui-input-inline">
                    <select name="locType3">
                        <option style="display: none"></option>
                        <option value="0">未知</option>
                        <option value="1">轻库位</option>
                        <option value="2">重库位</option>
                    </select>
                </div>
            </div>
            <div style="text-align: center; margin-top: 20px">
                <button class="layui-btn layui-btn-radius layui-btn-normal" id="initDo" lay-submit lay-filter="initDo">
                    确定
                </button>
            </div>
        </div>
    </div>
    <script type="text/html" id="toolbar">
    <div class="layui-btn-container">
        <!--        <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">
    <script type="text/html" id="operate">
    <a class="layui-btn layui-btn-xs btn-detlShow" lay-event="showDetl">明细</a>
<!--    <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/locCache/locCache.js" charset="utf-8"></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/locCache/locCache.js" charset="utf-8"></script>
</body>
</html>
</html>
src/main/webapp/views/locCache/locDetail.html
@@ -1,5 +1,6 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title></title>
@@ -12,14 +13,15 @@
    <style>
    </style>
</head>
<body>
<div class="layui-inline" style="width:31%;margin-top: 20px">
    <label class="layui-form-label">库 位 号:</label>
    <div class="layui-input-inline">
        <input id="locNo" class="layui-input" type="text" disabled="disabled">
    <div class="layui-inline" style="width:31%;margin-top: 20px">
        <label class="layui-form-label">库 位 号:</label>
        <div class="layui-input-inline">
            <input id="locNo" class="layui-input" type="text" disabled="disabled">
        </div>
    </div>
</div>
<table class="layui-hide" id="locCacheDetls" lay-filter="locCacheDetls"></table>
    <table class="layui-hide" id="locCacheDetls" lay-filter="locCacheDetls"></table>
</body>
<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>
@@ -31,7 +33,7 @@
    function getCol() {
        var cols = [
            {field: 'locNo', align: 'center', title: '库位号'}
            { field: 'locNo', align: 'center', title: '库位号' }
        ];
        cols.push.apply(cols, cacheCols);
        return cols;
@@ -46,9 +48,9 @@
        // 数据渲染
        tableIns1 = table.render({
            elem: '#locCacheDetls',
            headers: {token: localStorage.getItem('token')},
            url: baseUrl + '/locDetl/list/auth',
            where: {loc_no: parent.locNo},
            headers: { token: localStorage.getItem('token') },
            url: baseUrl + '/locCacheDetl/list/auth',
            where: { loc_no: parent.locNo },
            page: true,
            limit: 16,
            limits: [16, 30, 50, 100, 200, 500],
@@ -88,5 +90,5 @@
        });
    });
</script>
</html>
</html>
src/main/webapp/views/locCacheDetl/locCacheDetl.html
New file
@@ -0,0 +1,386 @@
<!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="locCacheDetl" lay-filter="locCacheDetl"></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/locCacheDetl/locCacheDetl.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="locId" 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="locNo" 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="areaId" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="areaName" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="zpallet" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="anfme" 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="batch" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="orderNo" 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="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="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="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">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="modiUser" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="modiTime" id="modiTime$" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="appeUser" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="appeTime" id="appeTime$" 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="storeDate" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="owner" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="frozen" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="standby1" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="standby2" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="standby3" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="boxType1" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="boxType2" placeholder="请输入">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="boxType3" 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>