自动化立体仓库 - WMS系统
pang.jiabao
2025-11-03 a1dd6ff24f7cae0b529ad313ba07351c07965605
管控线边仓库存
13个文件已修改
272 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MobileController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/OrderDetl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/MatnrDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/DetlDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/system/entity/SaasLog.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/common.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/ioWorks/stockIn.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/order.js 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/saasLog/saasLog.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/saasLog/saasLog.html 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -58,7 +58,7 @@
    private WrkDetlLogService wrkDetlLogService;
    @PostMapping("/pda/OutOrder")
    @ManagerAuth(memo = "获得出库单")
    @ManagerAuth(memo = "获得出库单",value = ManagerAuth.Auth.NONE)
    @Transactional
    public R OutOrder(@RequestParam String orderNo) {
        List<Order> orders=new ArrayList<Order>();
@@ -90,7 +90,7 @@
    }
    @PostMapping("/pda/OutLocNo")
    @ManagerAuth(memo = "获得平库出库的对应库位号")
    @ManagerAuth(memo = "获得平库出库的对应库位号",value = ManagerAuth.Auth.NONE)
    @Transactional
    public R OutLocNo(@RequestParam Long orderId) {
        List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>()
@@ -114,10 +114,10 @@
                } else {
                    for (ManLocDetl l : locDetls
                    ) {
                        String s = l.getLocNo().substring(0, 2);
                        if (Integer.parseInt(s) > 8) {
//                        String s = l.getLocNo().substring(0, 2);
//                        if (Integer.parseInt(s) > 8) {
                            list.add(l.getLocNo());
                        }
//                        }
                    }
                }
            }
@@ -127,7 +127,7 @@
    }
    @PostMapping("/pda/OrderDetlContrastLocDetl")
    @ManagerAuth(memo = "获得订单明细对应的库存明细")
    @ManagerAuth(memo = "获得订单明细对应的库存明细",value = ManagerAuth.Auth.NONE)
    @Transactional
    public R OrderDetlContrastLocDetl(@RequestParam Long orderId, @RequestParam String locNo) {
        List<ManLocDetl> locDetlList = new ArrayList<ManLocDetl>();
src/main/java/com/zy/asrs/entity/OrderDetl.java
@@ -204,13 +204,13 @@
    /**
     * 供应商
     */
    @ApiModelProperty(value= "供应商")
    @ApiModelProperty(value= "调拨源库位")
    private String supp;
    /**
     * 供应商编码
     */
    @ApiModelProperty(value= "供应商编码")
    @ApiModelProperty(value= "调拨目标库位")
    @TableField("supp_code")
    private String suppCode;
@@ -377,10 +377,12 @@
    public String getInspect$(){
        if (null == this.inspect){ return null; }
        switch (this.inspect){
            case 1:
                return "是";
            case 0:
                return "否";
                return "未上报";
            case 1:
                return "已上报";
            case 2:
                return "待上报";
            default:
                return String.valueOf(this.inspect);
        }
src/main/java/com/zy/asrs/entity/param/MatnrDto.java
@@ -12,4 +12,6 @@
    private Double count;
    private String barcode;
}
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -152,7 +152,7 @@
                    manLocDetlMapper.updateAnfme(subtract.doubleValue(), combParam.getLocno(), combMat.getMatnr(), combMat.getBatch());
                }
                // 记录日志
                SaasUtils.insertLog(1, combParam.getLocno(), combMat.getMatnr(), combMat.getAnfme(), userId,combMat.getBatch());
                SaasUtils.insertLog(Cools.isEmpty(combParam.getOrderNo()) ? 1 : 4, combParam.getLocno(), combMat.getMatnr(), combMat.getAnfme(), userId,combMat.getBatch());
            } catch (Exception e) {
                throw new CoolException("更新库存数据出错" + e.getMessage());
            }
@@ -185,7 +185,7 @@
                throw new CoolException(locNo + ":库位不存在");
            }
            if (!Cools.isEmpty(locDetl1)) {
                locDetl1.setAnfme(waitPakin.getAnfme() + waitPakin.getAnfme());
                locDetl1.setAnfme(locDetl1.getAnfme() + waitPakin.getAnfme());
                locDetl1.setUpdateBy(userId);
                locDetl1.setModiTime(now);
                manLocDetlService.update(locDetl1, new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr", waitPakin.getMatnr()).
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -95,10 +95,10 @@
                    null,    // 物流单号
                    1L,    // 订单状态
                    1,    // 状态
                    9527L,    // 添加人员
                    null,    // 添加人员
                    now,    // 添加时间
                    9527L,    // 修改人员
                    now,    // 修改时间
                    null,    // 修改人员
                    null,    // 修改时间
                    null    // 备注
            );
@@ -110,7 +110,7 @@
            List<DetlDto> list = new ArrayList<>();
            List<DetlDto> orderDetails = param.getOrderDetails();
            for (DetlDto detail : orderDetails) {
                DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme());
                DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme(),detail.getSourceLoc(), detail.getStaLoc(),detail.getSku());
                if (DetlDto.has(list, dto)) {
                    DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch());
                    assert detlDto != null;
@@ -133,10 +133,12 @@
                orderDetl.setOrderId(order.getId());
                orderDetl.setOrderNo(order.getOrderNo());
                orderDetl.setSku(detlDto.getSku()); // 单行号,u8明细id,上报需要
                orderDetl.setCreateBy(9527L);
                orderDetl.setSupp(detlDto.getSourceLoc());
                orderDetl.setSuppCode(detlDto.getStaLoc());
//                orderDetl.setCreateBy(9527L);
                orderDetl.setCreateTime(now);
                orderDetl.setUpdateBy(9527L);
                orderDetl.setUpdateTime(now);
//                orderDetl.setUpdateBy(9527L);
//                orderDetl.setUpdateTime(now);
                orderDetl.setStatus(1);
                orderDetl.setQty(0.0D);
                if (!orderDetlService.insert(orderDetl)) {
@@ -255,10 +257,10 @@
                    null,    // 物流单号
                    1L,    // 订单状态
                    1,    // 状态
                    9527L,    // 添加人员
                    null,    // 添加人员
                    now,    // 添加时间
                    9527L,    // 修改人员
                    now,    // 修改时间
                    null,    // 修改人员
                    null,    // 修改时间
                    null    // 备注
            );
            if (!orderService.insert(order)) {
@@ -268,7 +270,7 @@
            List<DetlDto> list = new ArrayList<>();
            List<DetlDto> orderDetails = param.getOrderDetails();
            for (DetlDto detail : orderDetails) {
                DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme());
                DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme(),detail.getSourceLoc(),detail.getStaLoc(),detail.getSku());
                if (DetlDto.has(list, dto)) {
                    DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch());
                    assert detlDto != null;
@@ -289,10 +291,12 @@
                orderDetl.setOrderId(order.getId());
                orderDetl.setOrderNo(order.getOrderNo());
                orderDetl.setSku(detlDto.getSku()); // 单行号,u8明细id,上报需要
                orderDetl.setCreateBy(9527L);
                orderDetl.setSupp(detlDto.getSourceLoc());
                orderDetl.setSuppCode(detlDto.getStaLoc());
//                orderDetl.setCreateBy(9527L);
                orderDetl.setCreateTime(now);
                orderDetl.setUpdateBy(9527L);
                orderDetl.setUpdateTime(now);
//                orderDetl.setUpdateBy(9527L);
//                orderDetl.setUpdateTime(now);
                orderDetl.setStatus(1);
                orderDetl.setQty(0.0D);
                if (!orderDetlService.insert(orderDetl)) {
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -2,18 +2,22 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.utils.SaasUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
 * Created by vincent on 2020/7/4
@@ -35,6 +39,15 @@
    private WaitPakinService waitPakinService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Resource
    private OrderService orderService;
    @Resource
    private ManLocDetlService manLocDetlService;
    @Resource
    private NodeService nodeService;
    public ReturnT<String> start(WrkMast wrkMast) {
        // 4.入库完成
@@ -127,6 +140,28 @@
//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                    return FAIL.setMsg("全板入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                                } else {
                                    // 插入调拨入库单对应线边仓出库记录
                                    Order order = orderService.selectByNo(orderDetl.getOrderNo());
                                    if (order.getDocType$().equals("调拨入库单")) {
                                        String locNo = orderDetl.getSupp();
                                        ManLocDetl locDetl2 = manLocDetlService.selectOne(new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr", wrkDetl.getMatnr()).eq("batch", wrkDetl.getBatch()));
                                        if (locDetl2 == null) { // 线边库无此库存
                                            log.warn("调拨入库单对应线边库库存无:{locNo:{},matnr:{},batch:{}}", locNo, wrkDetl.getMatnr(), wrkDetl.getBatch());
                                        } else if (locDetl2.getAnfme() < wrkDetl.getAnfme()) { // 线边库此库存不够
                                            manLocDetlService.delete(new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr", wrkDetl.getMatnr()).eq("batch", wrkDetl.getBatch()));
                                            log.warn("调拨入库单对应线边库库存不足:{locNo:{},matnr:{},batch:{},locAnfme:{},wrkAnfme:{}}", locNo, wrkDetl.getMatnr(), wrkDetl.getBatch(), locDetl2.getAnfme(), wrkDetl.getAnfme());
                                        } else if (Objects.equals(locDetl2.getAnfme(), wrkDetl.getAnfme())) { // 删除该物料线边库库存数据
                                            manLocDetlService.delete(new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr", wrkDetl.getMatnr()).eq("batch", wrkDetl.getBatch()));
                                        } else { // 更新该物料线边库库存
                                            locDetl2.setAnfme(locDetl2.getAnfme() - wrkDetl.getAnfme());
                                            locDetl2.setUpdateBy(wrkDetl.getAppeUser());
                                            locDetl2.setModiTime(new Date());
                                            manLocDetlService.update(locDetl2, new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr", wrkDetl.getMatnr()).eq("batch", wrkDetl.getBatch()));
                                        }
                                        // 记录日志
                                        SaasUtils.insertLog(3, locNo, wrkDetl.getMatnr(), wrkDetl.getAnfme(), wrkDetl.getAppeUser(), wrkDetl.getBatch());
                                    }
                                }
                            }
                        } catch (Exception ignore){}
@@ -361,6 +396,49 @@
//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                    return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                                } else  { // 插入调拨出库单对应线边仓入库记录
                                    Order order = orderService.selectByNo(orderDetl.getOrderNo());
                                    if(order.getDocType$().equals("调拨出库单")) {
                                        String locNo = orderDetl.getSuppCode(); // 线边仓
                                        Node node = nodeService.selectByUuid(locNo);
                                        if (Cools.isEmpty(node)) {
                                            throw new CoolException(locNo + ":库位不存在");
                                        }
                                        ManLocDetl locDetl1 = manLocDetlService.selectOne(new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr", wrkDetl.getMatnr()).
                                                eq("batch", wrkDetl.getBatch()));
                                        if (!Cools.isEmpty(locDetl1)) {
                                            locDetl1.setAnfme(locDetl1.getAnfme() + wrkDetl.getAnfme());
                                            locDetl1.setModiTime(now);
                                            manLocDetlService.update(locDetl1, new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr", wrkDetl.getMatnr()).
                                                    eq("batch", wrkDetl.getBatch()));
                                        } else {
                                            ManLocDetl manLocDetl = new ManLocDetl();
                                            manLocDetl.setLocNo(locNo);
//                                            manLocDetl.setBarcode(barcode);
//                                            manLocDetl.setZpallet(barcode);
                                            manLocDetl.setNodeId(node.getId());
                                            manLocDetl.setMaktx(wrkDetl.getMaktx());
                                            manLocDetl.setMatnr(wrkDetl.getMatnr());
                                            manLocDetl.setSpecs(wrkDetl.getSpecs());
                                            manLocDetl.setBatch(Cools.isEmpty(wrkDetl.getBatch()) ? "" : wrkDetl.getBatch());
                                            manLocDetl.setAnfme(wrkDetl.getAnfme());
                                            manLocDetl.setCreateBy(wrkDetl.getAppeUser());
                                            manLocDetl.setCreateTime(now);
                                            if (!manLocDetlService.insert(manLocDetl)) {
                                                log.error("库存更新时插入线边库明细失败");
                                                throw new CoolException("库存更新时插入线边库明细失败!");
                                            }
                                            node.setUpdateBy(wrkDetl.getAppeUser());
                                            node.setUpdateTime(now);
                                            nodeService.updateById(node);
                                        }
                                        // 记录日志
                                        SaasUtils.insertLog(2, locNo, wrkDetl.getMatnr(), wrkDetl.getAnfme(), wrkDetl.getAppeUser(),wrkDetl.getBatch());
                                    }
                                }
                            }
                        } catch (Exception ignore){}
src/main/java/com/zy/common/model/DetlDto.java
@@ -21,6 +21,12 @@
    private Double anfme;
    // 调拨源库位
    private String sourceLoc;
    // 调拨目标库位
    private String staLoc;
    /**
     * 单行号,u8明细id
     */
@@ -45,6 +51,15 @@
        this.anfme = anfme;
    }
    public DetlDto(String matnr, String batch, Double anfme,String sourceLoc,String staLoc,String sku) {
        this.matnr = matnr;
        this.batch = batch;
        this.anfme = anfme;
        this.sourceLoc = sourceLoc;
        this.staLoc = staLoc;
        this.sku = sku;
    }
    public DetlDto(String orderNo, String matnr, String batch, Double anfme) {
        this.orderNo = orderNo;
        this.matnr = matnr;
src/main/java/com/zy/system/entity/SaasLog.java
@@ -5,6 +5,8 @@
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.service.UserService;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@@ -27,7 +29,7 @@
    private Long id;
    /**
     * {0:入库,1:出库}
     * {0:入库,1:出库,2.调拨入,3.调拨出,4.领料出}
     */
    @ApiModelProperty(value= "{0:入库,1:出库}")
    private Integer type;
@@ -81,19 +83,33 @@
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ioTime);
    }
    public String getType$(){
        if (this.type ==0) {
            return "入库";
           } else if (this.type == 1) {
            return "出库";
        } else if (this.type == 2) {
            return "库位移转";
        } else if (this.type == 3) {
            return "库存调整";
        }else {
            return "";
    /**
     * {0:入库,1:出库,2.调拨入,3.调拨出,4.领料出}
     */
    public String getType$() {
        switch (this.type) {
            case 0:
                return "入库";
            case 1:
                return "出库";
            case 2:
                return "调拨入";
            case 3:
                return "调拨出";
            case 4:
                return "领料出";
            default:
                return "";
        }
    }
    public String getCreateBy$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.selectById(this.createBy);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getUsername());
        }
        return null;
    }
src/main/webapp/static/js/common.js
@@ -195,7 +195,7 @@
    ,{field: 'price', align: 'center',title: '单价', hide: true}
    ,{field: 'sku', align: 'center',title: 'sku', hide: true}
    ,{field: 'units', align: 'center',title: '单位量', hide: true}
    ,{field: 'barcode', align: 'center',title: '条码', hide: true}
    ,{field: 'barcode', align: 'center',title: '条码', edit:'text'}
    ,{field: 'origin', align: 'center',title: '产地', hide: true}
    ,{field: 'manu', align: 'center',title: '厂家', hide: true}
    ,{field: 'manuDate', align: 'center',title: '生产日期', hide: true}
src/main/webapp/static/js/ioWorks/stockIn.js
@@ -39,7 +39,7 @@
    // 页面修改
    table.on('edit(chooseData)', function (obj) {
        updateMatCodeData(obj.data.matnr, Number(obj.value));
        updateMatCodeData(obj.data.matnr, obj.field, obj.value);
    });
    // 监听头工具栏事件
@@ -119,18 +119,21 @@
        }
    }
    function updateMatCodeData(matnr, count) {
        if (isNaN(count)) {
            layer.msg("请输入数字");
        } else {
            if (count > 0) {
                for (var i=0;i<matCodeData.length;i++){
                    if (matCodeData[i]["matnr"] === matnr){
                        matCodeData[i]["count"] = count;
                    }
                }
            } else {
    function updateMatCodeData(matnr, count, value) {
        if (field === 'count') {
            if (isNaN(value)) {
                layer.msg("请输入数字");
                return;
            } else if (value <= 0) {
                layer.msg("数量必须大于零");
                return;
            }
        }
        // ✅ 遍历数组更新对应字段
        for (var i = 0; i < matCodeData.length; i++) {
            if (matCodeData[i]["matnr"] === matnr) {
                matCodeData[i][field] = value;
            }
        }
src/main/webapp/static/js/order/order.js
@@ -104,7 +104,7 @@
            layer.open({
                type: 1,
                title: false,
                area: '820px',
                area: '1000px',
                offset: [top + 'px', (left - 530 + $a.outerWidth()) + 'px'],
                shade: .01,
                shadeClose: true,
@@ -128,6 +128,9 @@
                            {field: 'anfme', title: '数量'},
                            {field: 'workQty', title: '作业数量'},
                            {field: 'qty', title: '完成数量', style: 'font-weight: bold'},
                            {field: 'supp', title: '源库位'},
                            {field: 'suppCode', title: '目标库位'},
                            {field: 'inspect$', title: '是否上报'}
                            // {field: 'unit', title: '单位'},
                            // {
                            //     field: 'createTime$', title: '创建时间', sort: true, templet: function (d) {
@@ -136,7 +139,7 @@
                            // },
                            // {field: 'inQty', title: '已入库量'},
                            // {field: 'color', title: '颜色'},
                            {field: 'specs', title: '规格'}
                            // {field: 'specs', title: '规格'}
                        ]],
                        request: {
                            pageName: 'curr',
@@ -238,6 +241,8 @@
                        {field: 'maktx', title: '商品名称', width: 200},
                        {field: 'batch', title: '批号', edit: true},
                        {field: 'specs', title: '规格'},
                        {field: 'supp', title: '源库位', edit: true},
                        {field: 'suppCode', title: '目标库位', edit: true},
                        {field: 'anfme', title: '数量(修改)', style: 'color: blue;font-weight: bold', edit: true, minWidth: 110, width: 110},
                        {field: 'workQty', title: '作业数量',  minWidth: 100, width: 100},
                        // {field: 'unit', title: '单位', width: 80},
src/main/webapp/static/js/saasLog/saasLog.js
@@ -28,7 +28,7 @@
            ,{field: 'matnr', align: 'center',title: '物料'}
            ,{field: 'batch', align: 'center',title: '批次'}
            ,{field: 'anfme', align: 'center',title: '数量'}
            ,{field: 'createBy', align: 'center',title: '操作账号'}
            ,{field: 'createBy$', align: 'center',title: '操作账号'}
            ,{field: 'ioTime$', align: 'center',title: '操作时间'}
            // ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:120}
        ]],
@@ -232,6 +232,18 @@
    }
    layDateRender();
    // 时间选择器
    layDate.render({
        elem: '#io_time\\$',
        type: 'datetime'
    });
    layDate.render({
        elem: '.layui-laydate-range'
        ,type: 'datetime'
        ,range: true
    });
});
// 关闭动作
src/main/webapp/views/saasLog/saasLog.html
@@ -18,18 +18,37 @@
            <div class="layui-form toolbar" id="search-box">
                <div class="layui-form-item">
                    <div class="layui-inline">
                        <label class="layui-form-label">编号:</label>
                        <div class="layui-input-inline">
                            <select name="type">
                                <option value="">操作类型</option>
                                <option value="0">入库</option>
                                <option value="1">出库</option>
                                <option value="2">调拨入</option>
                                <option value="3">调拨出</option>
                                <option value="4">领料出</option>
                            </select>
                        </div>
                    </div>
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="loc_no" placeholder="库位" autocomplete="off">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <label class="layui-form-label">物料编号:</label>
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="matnr" placeholder="物料编号" autocomplete="off">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="batch" 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="io_time" type="text" placeholder="起始时间 - 终止时间" autocomplete="off" style="width: 300px">
                        </div>
                    </div>
                    <div class="layui-inline">&emsp;
                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
                            <i class="layui-icon">&#xe615;</i>搜索