From ab290efb7df666e173fcd88c32f066f333825c5e Mon Sep 17 00:00:00 2001
From: dubin <bindu_bean@163.com>
Date: 星期六, 18 十月 2025 08:50:01 +0800
Subject: [PATCH] 联调

---
 src/main/java/com/zy/asrs/controller/InOutController.java    |   67 +++
 src/main/webapp/views/matInOut/matInOut.html                 |  111 ++++++
 src/main/java/com/zy/asrs/mapper/InOutMapper.java            |   15 
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java  |   45 ++
 src/main/webapp/static/js/matInOut/matInOut.js               |  567 +++++++++++++++++++++++++++++++++
 src/main/java/com/zy/asrs/service/impl/InOutServiceImpl.java |   21 +
 src/main/java/com/zy/asrs/controller/MatController.java      |   15 
 src/main/java/com/zy/asrs/entity/InOut.java                  |  110 ++++++
 src/main/resources/mapper/InOutMapper.xml                    |   19 +
 src/main/java/com/zy/asrs/service/InOutService.java          |    8 
 10 files changed, 977 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/InOutController.java b/src/main/java/com/zy/asrs/controller/InOutController.java
new file mode 100644
index 0000000..9f33e49
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/InOutController.java
@@ -0,0 +1,67 @@
+package com.zy.asrs.controller;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.InOut;
+import com.zy.asrs.entity.LocDetl;
+import com.zy.asrs.service.InOutService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+@RestController
+@RequestMapping
+public class InOutController extends BaseController{
+
+    @Autowired
+    private InOutService inOutService;
+
+    @RequestMapping(value = "/matInOut/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<InOut> wrapper = new EntityWrapper<>();
+        Object query_date = param.get("query_date");
+        param.remove("query_date");
+        excludeTrash(param);
+        convert(param, wrapper);
+        allLike(InOut.class, param.keySet(), wrapper, condition);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        if (query_date!=null){
+            if (query_date.toString().contains(" - ")) {
+                String[] dates = query_date.toString().split(" - ");
+                wrapper.ge("appe_time", dates[0]).le("appe_time",dates[1]);
+            }
+        }
+        return R.ok(inOutService.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 {
+                if (entry.getKey().equals("locNo")) {
+                    wrapper.eq("loc_no", String.valueOf(entry.getValue()));
+                } else {
+                    wrapper.like(entry.getKey(), String.valueOf(entry.getValue()));
+                }
+            }
+        }
+    }
+}
diff --git a/src/main/java/com/zy/asrs/controller/MatController.java b/src/main/java/com/zy/asrs/controller/MatController.java
index 11edc8d..85aceaf 100644
--- a/src/main/java/com/zy/asrs/controller/MatController.java
+++ b/src/main/java/com/zy/asrs/controller/MatController.java
@@ -10,11 +10,13 @@
 import com.core.annotations.ManagerAuth;
 import com.core.common.*;
 import com.core.exception.CoolException;
+import com.zy.asrs.entity.InOut;
 import com.zy.asrs.entity.Mat;
 import com.zy.asrs.entity.MatPrint;
 import com.zy.asrs.entity.OrderDetl;
 import com.zy.asrs.entity.param.EmptyPlateOutParam;
 import com.zy.asrs.entity.result.KeyValueVo;
+import com.zy.asrs.service.InOutService;
 import com.zy.asrs.service.MatService;
 import com.zy.asrs.utils.MatExcelListener;
 import com.zy.common.CodeRes;
@@ -42,6 +44,8 @@
     private MatService matService;
     @Autowired
     private SnowflakeIdWorker snowflakeIdWorker;
+    @Autowired
+    private InOutService inOutService;
 
     @RequestMapping(value = "/mat/auto/matnr/auth")
     public R autoMatnr(){
@@ -123,13 +127,22 @@
             return R.error("缂栧彿宸插瓨鍦�");
         }
         Date now = new Date();
+        InOut inOut=new InOut();
         mat.setCreateBy(getUserId());
         mat.setCreateTime(now);
         mat.setUpdateBy(getUserId());
         mat.setUpdateTime(now);
         mat.setStatus(1);
+        inOut.setMatnr(mat.getMatnr());
+        inOut.setMaktx(mat.getMaktx());
+        inOut.setColor(mat.getColor());
+        inOut.setSpecs(mat.getSpecs());
+        inOut.setTemp1("");
         if (!matService.insert(mat)) {
-            throw new CoolException("娣诲姞澶辫触锛岃鑱旂郴绠$悊鍛�");
+            throw new CoolException("鍟嗗搧妗f娣诲姞澶辫触锛岃鑱旂郴绠$悊鍛�");
+        }
+        if (!inOutService.insert(inOut)){
+            throw new CoolException("鍟嗗搧淇℃伅娣诲姞澶辫触锛岃鑱旂郴绠$悊鍛�");
         }
         return R.ok();
     }
diff --git a/src/main/java/com/zy/asrs/entity/InOut.java b/src/main/java/com/zy/asrs/entity/InOut.java
new file mode 100644
index 0000000..0f0ad33
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/InOut.java
@@ -0,0 +1,110 @@
+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 io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+@Data
+@TableName("man_mat_inout")
+public class InOut {
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "鎵樼洏鏉$爜")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鎵�灞炲綊绫�
+     */
+    @TableField("tag_id")
+    private Long tagId;
+
+    /**
+     * 鍟嗗搧缂栧彿
+     */
+    @TableField("matnr")
+    private String matnr;
+
+
+    /**
+     * 鍟嗗搧鍚嶇О
+     */
+    @TableField("maktx")
+    private String maktx;
+
+    /**
+     * 鍒悕
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 瑙勬牸
+     */
+    @TableField("specs")
+    private String specs;
+
+    /**
+     * 棰滆壊
+     */
+    @TableField("color")
+    private String color;
+
+    /**
+     * 鏉$爜
+     */
+    @TableField("barcode")
+    private String barcode;
+
+    /**
+     * 鐢熶骇鏃ユ湡
+     */
+    @TableField("manu_date")
+    private String manuDate;
+
+    /**
+     * 渚涘簲鍟�
+     */
+    @TableField("supp")
+    private String supp;
+
+    /**
+     * 渚涘簲鍟嗙紪鐮�
+     */
+    @TableField("supp_code")
+    private String suppCode;
+
+    @TableField("temp1")
+    private String temp1;
+
+    @TableField("temp2")
+    private String temp2;
+
+    @TableField("temp3")
+    private String temp3;
+
+    @TableField("update_time")
+    private String modiTime;
+
+
+
+    public InOut() {}
+
+    public InOut(String uuid, Long tagId, String matnr, String maktx, String name, String specs, String model, String color, String brand, String unit, Double price, String sku, Double units, String barcode, String origin, String manu, String manuDate, String itemNum, Double safeQty, Double weight, String length, String volume, String threeCode, String supp, String suppCode, Integer beBatch, String deadTime, Integer deadWarn, Integer source, Integer inspect, Integer danger, Integer status, Long createBy, Date createTime, Long updateBy, Date updateTime, String memo) {
+        this.tagId = tagId;
+        this.matnr = matnr;
+        this.maktx = maktx;
+        this.name = name;
+        this.specs = specs;
+        this.color = color;
+        this.barcode = barcode;
+        this.manuDate = manuDate;
+        this.supp = supp;
+        this.suppCode = suppCode;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/mapper/InOutMapper.java b/src/main/java/com/zy/asrs/mapper/InOutMapper.java
new file mode 100644
index 0000000..7cf926b
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/InOutMapper.java
@@ -0,0 +1,15 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.InOut;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface InOutMapper extends BaseMapper<InOut> {
+    @Select("select top * from man_mat_inout where matnr = #{matnr}")
+    InOut selectByMatnr(String matnr);
+}
diff --git a/src/main/java/com/zy/asrs/service/InOutService.java b/src/main/java/com/zy/asrs/service/InOutService.java
new file mode 100644
index 0000000..fe51dea
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/InOutService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.InOut;
+
+public interface InOutService extends IService<InOut> {
+    InOut selectByMatnr(String matnr);
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/InOutServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/InOutServiceImpl.java
new file mode 100644
index 0000000..a83e08c
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/InOutServiceImpl.java
@@ -0,0 +1,21 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.entity.InOut;
+import com.zy.asrs.entity.MatBarcode;
+import com.zy.asrs.mapper.InOutMapper;
+import com.zy.asrs.service.InOutService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service("InOutService")
+public class InOutServiceImpl extends ServiceImpl<InOutMapper, InOut> implements InOutService {
+
+    @Autowired
+    private InOutMapper inOutMapper;
+
+    @Override
+    public InOut selectByMatnr(String matnr) {
+        return inOutMapper.selectByMatnr(matnr);
+    }
+}
diff --git a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
index 914e08c..56fda71 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -36,6 +36,8 @@
     private WaitPakinService waitPakinService;
     @Autowired
     private OrderDetlService orderDetlService;
+    @Autowired
+    private InOutService inOutService;
 
     public ReturnT<String> start(WrkMast wrkMast) {
         // 4.鍏ュ簱瀹屾垚
@@ -118,6 +120,16 @@
                             locDetl.setZpallet(wrkDetl.getZpallet()); // 鎵樼洏鏉$爜
                             locDetl.setModiTime(now);
                             locDetl.setAppeTime(now);
+
+                            InOut inOut=inOutService.selectByMatnr(wrkDetl.getMatnr());
+                            if (inOut != null){
+                                inOut.setTemp1("鍦ㄥ簱");
+                                inOut.setModiTime(now.toString());
+                            }
+                            if (inOutService.updateById(inOut)){
+                                return FAIL.setMsg("鏇存柊妯″叿灞炴�уけ璐�");
+                            }
+
                             if (!locDetlService.insert(locDetl)) {
 //                                exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 娣诲姞搴撳瓨鏄庣粏澶辫触锛沎workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -168,6 +180,17 @@
                         LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl);
 
                         if (locDetl != null) {
+
+                            InOut inOut=inOutService.selectByMatnr(wrkDetl.getMatnr());
+                            if (inOut != null){
+                                inOut.setTemp1("涓嶅湪搴�");
+                                inOut.setModiTime(now.toString());
+                            }
+                            if (inOutService.updateById(inOut)){
+                                return FAIL.setMsg("鏇存柊妯″叿灞炴�уけ璐�");
+                            }
+
+
                             if (!locDetlService.updateAnfme(locDetl.getAnfme() - wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl)) {
 //                                exceptionHandle("鎷f枡鍏ュ簱 ===>> 淇敼搴撳瓨鏄庣粏鏁伴噺澶辫触锛沎workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -225,6 +248,16 @@
                                 return FAIL.setMsg("骞舵澘鍏ュ簱 ===>> 淇敼搴撳瓨鏄庣粏鏁伴噺澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                             }
                         } else {
+
+                            InOut inOut=inOutService.selectByMatnr(wrkDetl.getMatnr());
+                            if (inOut != null){
+                                inOut.setTemp1("鍦ㄥ簱");
+                                inOut.setModiTime(now.toString());
+                            }
+                            if (inOutService.updateById(inOut)){
+                                return FAIL.setMsg("鏇存柊妯″叿灞炴�уけ璐�");
+                            }
+
                             locDetl = new LocDetl();
                             locDetl.sync(wrkDetl);
                             locDetl.setLocNo(wrkMast.getLocNo()); // 搴撲綅鍙�
@@ -356,6 +389,18 @@
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                         return FAIL.setMsg("鍏ㄦ澘鍑哄簱 ===>> 宸ヤ綔鏄庣粏妗d负绌�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                     }
+
+                    for (WrkDetl wrkDetl : wrkDetls101) {
+                        InOut inOut=inOutService.selectByMatnr(wrkDetl.getMatnr());
+                        if (inOut != null){
+                            inOut.setTemp1("涓嶅湪搴�");
+                            inOut.setModiTime(now.toString());
+                        }
+                        if (inOutService.updateById(inOut)){
+                            return FAIL.setMsg("鏇存柊妯″叿灞炴�уけ璐�");
+                        }
+                    }
+
                     for (WrkDetl wrkDetl : wrkDetls101) {
                         // 鏇存柊璁㈠崟瀹屾垚鏁伴噺
                         OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl);
diff --git a/src/main/resources/mapper/InOutMapper.xml b/src/main/resources/mapper/InOutMapper.xml
new file mode 100644
index 0000000..eacd449
--- /dev/null
+++ b/src/main/resources/mapper/InOutMapper.xml
@@ -0,0 +1,19 @@
+<?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.InOutMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.InOut">
+        <id column="id" property="id" />
+        <result column="tag_id" property="tagId" />
+        <result column="matnr" property="matnr" />
+        <result column="maktx" property="maktx" />
+        <result column="name" property="name" />
+        <result column="specs" property="specs" />
+        <result column="color" property="color" />
+        <result column="barcode" property="barcode" />
+        <result column="supp" property="supp" />
+        <result column="supp_code" property="suppCode" />
+        <result column="manu_date" property="manuDate" />
+    </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/src/main/webapp/static/js/matInOut/matInOut.js b/src/main/webapp/static/js/matInOut/matInOut.js
new file mode 100644
index 0000000..032cd1e
--- /dev/null
+++ b/src/main/webapp/static/js/matInOut/matInOut.js
@@ -0,0 +1,567 @@
+var pageCurr;
+function getCol() {
+    var cols = [
+        {field: 'locNo$', align: 'center',title: '搴撲綅鍙�', hide: true}
+        ,{field: 'storeDate', align: 'center',title: '搴撻緞(澶�)', sort:true, hide: true}
+        ,{field: 'matnr', align: 'center',title: '鍟嗗搧妯″叿鍚嶇О', sort:true}
+        ,{field: 'model', align: 'center',title: '浠g爜', hide: true}
+        ,{field: 'maktx', align: 'center',title: '鍟嗗搧鍨嬫潗鍨嬪彿', sort:true}
+        ,{field: 'spgNO', align: 'center',title: '娲惧伐鍗曞彿', hide:true,sort:true}
+        ,{field: 'orderNo', align: 'center',title: '鍗曟嵁缂栧彿', hide: false}
+        ,{field: 'batch', align: 'center',title: '鎵瑰彿', width: 200,hide:true, sort:true}
+        ,{field: 'outOrderNo', align: 'center',title: '鍚堝悓鍙�'}
+        ,{field: 'anfme', align: 'center',title: '鏁伴噺',hide: true}
+        ,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜',hide: true}
+        ,{field: 'specs', align: 'center',title: '瑙勬牸'}
+        ,{field: 'color', align: 'center',title: '棰滆壊', hide: true}
+        ,{field: 'brand', align: 'center',title: '鍝佺墝', hide: true}
+        ,{field: 'unit', align: 'center',title: '鍗曚綅', hide: false}
+        ,{field: 'price', align: 'center',title: '鍗曚环', hide: true}
+        ,{field: 'color', align: 'center',title: '鐘舵��', hide: false}
+        ,{field: 'units', align: 'center',title: '鍗曚綅閲�', hide: true}
+        ,{field: 'barcode', align: 'center',title: '鏉$爜', hide: true}
+        ,{field: 'origin', align: 'center',title: '浜у湴', hide: true}
+        ,{field: 'manu', align: 'center',title: '鍘傚', hide: true}
+        ,{field: 'manuDate', align: 'center',title: '鐢熶骇鏃ユ湡', hide: true}
+        ,{field: 'itemNum', align: 'center',title: '鍝侀」鏁�', hide: true}
+        ,{field: 'safeQty', align: 'center',title: '瀹夊叏搴撳瓨閲�', hide: true}
+        ,{field: 'weight', align: 'center',title: '鎬婚噸', hide: true}
+        ,{field: 'length', align: 'center',title: '鍗曠姣涢噸', hide: true}
+        ,{field: 'volume', align: 'center',title: '鍗曠浣撶Н', hide: true}
+        ,{field: 'threeCode', align: 'center',title: '绠卞瓙灏哄', hide: true}
+        ,{field: 'supp', align: 'center',title: '渚涘簲鍟�', hide: true}
+        ,{field: 'suppCode', align: 'center',title: '渚涘簲鍟嗙紪鐮�', hide: true}
+        ,{field: 'beBatch$', align: 'center',title: '鏄惁鎵规', hide: true}
+        ,{field: 'deadTime', align: 'center',title: '淇濊川鏈�', hide: true}
+        ,{field: 'deadWarn', align: 'center',title: '棰勮澶╂暟', hide: true}
+        ,{field: 'source$', align: 'center',title: '鍒惰喘', hide: true}
+        ,{field: 'check$', align: 'center',title: '瑕佹眰妫�楠�', hide: true}
+        ,{field: 'danger$', align: 'center',title: '鍗遍櫓鍝�', hide: true}
+        ,{field: 'temp1', align: 'center',title: '灞炴��', hide: false}
+        ,{field: 'temp1', align: 'center',title: '鍚嶇О鎬荤О', hide: true}
+        ,{field: 'temp2', align: 'center',title: '瀹㈡埛鍥惧彿', hide: true}
+
+    ];
+
+    // cols.push.apply(cols, detlCols);
+    cols.push({field: 'modiUser$', align: 'center',title: '淇敼浜哄憳',hide: true}
+        ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}
+    )
+    return cols;
+}
+
+layui.use(['table','laydate', 'form'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#locDetl',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/matInOut/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [getCol()],
+        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();
+            form.on('checkbox(tableCheckbox)', function (data) {
+                var _index = $(data.elem).attr('table-index')||0;
+                if(data.elem.checked){
+                    res.data[_index][data.value] = 'Y';
+                }else{
+                    res.data[_index][data.value] = 'N';
+                }
+            });
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(locDetl)', 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
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(locDetl)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            case 'addData':
+                layer.open({
+                    type: 2,
+                    title: '鏂板',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'locDetl_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-edit', index).hide();
+                        clearFormVal(layer.getChildFrame('#detail', index));
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                    }
+                });
+                break;
+            case 'refreshData':
+                tableIns.reload({
+                    page: {
+                        curr: pageCurr
+                    }
+                });
+                limit();
+                break;
+            case 'deleteData':
+                var data = checkStatus.data;
+                if (data.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/locDetl/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {param: JSON.stringify(data)},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'exportData':
+                layer.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 = {
+                        'locDetl': exportData,
+                        'fields': fields
+                    };
+                    var loadIndex = layer.msg('姝e湪瀵煎嚭...', {icon: 16, shade: 0.01, time: false});
+                    $.ajax({
+                        url: baseUrl+"/locDetl/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.close(loadIndex);
+                            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)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(locDetl)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'locDetl_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, true);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                        layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                    }
+                });
+                break;
+            // 缂栬緫
+            case 'edit':
+                layer.open({
+                    type: 2,
+                    title: '淇敼',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'locDetl_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-save', index).hide();
+                        setFormVal(layer.getChildFrame('#detail', index), data, false);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
+                        top.convertDisabled(layer.getChildFrame('#locNo,#matnr', index), true);
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                    }
+                });
+                break;
+            case 'locNo':
+                var param = top.reObject(data).locNo;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                    layer.open({
+                        type: 2,
+                        title: '搴撲綅鍙疯鎯�',
+                        maxmin: true,
+                        area: [top.detailWidth, top.detailHeight],
+                        shadeClose: false,
+                        content: '../locMast/locMast_detail.html',
+                        success: function(layero, index){
+                            $.ajax({
+                                url: baseUrl+"/locMast/"+ param +"/auth",
+                                headers: {'token': localStorage.getItem('token')},
+                                method: 'GET',
+                                success: function (res) {
+                                    if (res.code === 200){
+                                        setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                        layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
+                                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                                    } else if (res.code === 403){
+                                        parent.location.href = "/";
+                                    }else {
+                                        layer.msg(res.msg)
+                                    }
+                                }
+                            })
+                        }
+                    });
+                }
+                break;
+            case 'modiUser':
+                var param = top.reObject(data).modiUser;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                    layer.open({
+                        type: 2,
+                        title: '淇敼浜哄憳璇︽儏',
+                        maxmin: true,
+                        area: [top.detailWidth, top.detailHeight],
+                        shadeClose: false,
+                        content: '../user/user_detail.html',
+                        success: function(layero, index){
+                            $.ajax({
+                                url: baseUrl+"/user/"+ param +"/auth",
+                                headers: {'token': localStorage.getItem('token')},
+                                method: 'GET',
+                                success: function (res) {
+                                    if (res.code === 200){
+                                        setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                        layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
+                                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                                    } else if (res.code === 403){
+                                        parent.location.href = "/";
+                                    }else {
+                                        layer.msg(res.msg)
+                                    }
+                                }
+                            })
+                        }
+                    });
+                }
+                break;
+            case 'appeUser':
+                var param = top.reObject(data).appeUser;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                    layer.open({
+                        type: 2,
+                        title: '鍒涘缓鑰呰鎯�',
+                        maxmin: true,
+                        area: [top.detailWidth, top.detailHeight],
+                        shadeClose: false,
+                        content: '../user/user_detail.html',
+                        success: function(layero, index){
+                            $.ajax({
+                                url: baseUrl+"/user/"+ param +"/auth",
+                                headers: {'token': localStorage.getItem('token')},
+                                method: 'GET',
+                                success: function (res) {
+                                    if (res.code === 200){
+                                        setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                        layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
+                                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                                    } else if (res.code === 403){
+                                        parent.location.href = "/";
+                                    }else {
+                                        layer.msg(res.msg)
+                                    }
+                                }
+                            })
+                        }
+                    });
+                }
+                break;
+
+        }
+    });
+
+    // 鏁版嵁淇濆瓨鍔ㄤ綔
+    form.on('submit(save)', function () {
+        if (banMsg != null){
+            layer.msg(banMsg);
+            return;
+        }
+        method("add");
+    });
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(edit)', function () {
+        method("update")
+    });
+
+    function method(name){
+        var index = layer.load(1, {
+            shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙
+        });
+        var data = {
+//            id: $('#id').val(),
+            locNo: $('#locNo').val(),
+            matnr: $('#matnr').val(),
+            lgnum: $('#lgnum').val(),
+            tbnum: $('#tbnum').val(),
+            tbpos: $('#tbpos').val(),
+            zmatid: $('#zmatid').val(),
+            maktx: $('#maktx').val(),
+            werks: $('#werks').val(),
+            anfme: $('#anfme').val(),
+            altme: $('#altme').val(),
+            zpallet: $('#zpallet').val(),
+            bname: $('#bname').val(),
+            memo: $('#memo').val(),
+            modiUser: $('#modiUser').val(),
+            modiTime: top.strToDate($('#modiTime\\$').val()),
+            appeUser: $('#appeUser').val(),
+            appeTime: top.strToDate($('#appeTime\\$').val()),
+
+        };
+        $.ajax({
+            url: baseUrl+"/locDetl/"+name+"/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: top.reObject(data),
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    parent.$(".layui-laypage-btn")[0].click();
+                    $("#data-detail :input").each(function () {
+                        $(this).val("");
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+                layer.close(index);
+            }
+        })
+    }
+
+    // 澶嶉�夋浜嬩欢
+    form.on('checkbox(detailCheckbox)', function (data) {
+        var el = data.elem;
+        if (el.checked) {
+            $(el).val('Y');
+        } else {
+            $(el).val('N');
+        }
+    });
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+    layDate.render({
+        elem: '.layui-laydate-range'
+        ,type: 'datetime'
+        ,range: true
+    });
+    // 鏃堕棿閫夋嫨鍣�
+    layDate.render({
+        elem: '#modiTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#appeTime\\$',
+        type: 'datetime'
+    });
+
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(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;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function setFormVal(el, data, showImg) {
+    for (var val in data) {
+        var find = el.find(":input[id='" + val + "']");
+        if (find[0]!=null){
+            if (find[0].type === 'checkbox'){
+                if (data[val]==='Y'){
+                    find.attr("checked","checked");
+                    find.val('Y');
+                } else {
+                    find.remove("checked");
+                    find.val('N');
+                }
+                continue;
+            }
+        }
+        find.val(data[val]);
+        if (showImg){
+            var next = find.next();
+            if (next.get(0)){
+                if (next.get(0).localName === "img") {
+                    find.hide();
+                    next.attr("src", data[val]);
+                    next.show();
+                }
+            }
+        }
+    }
+}
+
+function clearFormVal(el) {
+    $(':input', el)
+        .val('')
+        .removeAttr('checked')
+        .removeAttr('selected');
+}
+
+function detailScreen(index) {
+    var detail = layer.getChildFrame('#data-detail', index);
+    var height = detail.height()+60;
+    if (height > ($(window).height()*0.9)) {
+        height = ($(window).height()*0.8);
+    }
+    layer.style(index, {
+//        top: (($(window).height()-height)/3)+"px",
+        height: height+'px'
+    });
+}
+
+$('body').keydown(function () {
+    if (event.keyCode === 13) {
+        $("#search").click();
+    }
+});
\ No newline at end of file
diff --git a/src/main/webapp/views/matInOut/matInOut.html b/src/main/webapp/views/matInOut/matInOut.html
new file mode 100644
index 0000000..a32dab4
--- /dev/null
+++ b/src/main/webapp/views/matInOut/matInOut.html
@@ -0,0 +1,111 @@
+<!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/cool.css" media="all">
+    <link rel="stylesheet" href="../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+<!--    <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">-->
+<!--        <div class="layui-input-inline">-->
+<!--            <input class="layui-input" type="text" name="zpallet" placeholder="鎵樼洏鐮�" autocomplete="off">-->
+<!--        </div>-->
+<!--    </div>-->
+<!--    <div class="layui-inline">-->
+<!--        <div class="layui-input-inline">-->
+<!--            <input class="layui-input" type="text" name="model" placeholder="浜у搧浠g爜" autocomplete="off">-->
+<!--        </div>-->
+<!--    </div>-->
+    <div class="layui-inline">
+        <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="specs" placeholder="瑙勬牸" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <select name="temp1" id="temp1" class="layui-input" type="text" placeholder="灞炴��" autocomplete="off">
+                <!--                    <option style="display: none"></option>-->
+                <option value="">灞炴��</option>
+                <option value="鍦ㄥ簱">鍦ㄥ簱</option>
+                <option value="涓嶅湪搴�">涓嶅湪搴�</option>
+            </select>
+        </div>
+    </div>
+    <!--    <div class="layui-inline">-->
+    <!--        <div class="layui-input-inline">-->
+    <!--            <input class="layui-input" type="text" name="pg_no" placeholder="娲惧伐鍗曞彿" autocomplete="off">-->
+    <!--        </div>-->
+    <!--    </div>-->
+<!--    <div class="layui-inline">-->
+<!--        <div class="layui-input-inline">-->
+<!--            <input class="layui-input" type="text" name="out_order_no" 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="query_date" type="text" placeholder="鍏ュ簱璧峰鏃堕棿 - 鍏ュ簱缁堟鏃堕棿" autocomplete="off" style="width: 290px">
+        </div>
+    </div>
+    <!--    <div class="layui-inline">-->
+    <!--        <div class="layui-input-inline">-->
+    <!--            <input class="layui-input" type="text" name="row" placeholder="鎺掓暟" autocomplete="off">-->
+    <!--        </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 id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block">
+        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
+        <!--        <button id="unreason" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="unreason">鏌ョ湅寮傚父鏁版嵁</button>-->
+    </div>
+
+</div>
+
+<!-- 琛ㄦ牸 -->
+<div class="layui-form">
+    <table class="layui-hide" id="locDetl" lay-filter="locDetl"></table>
+</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="margin-top: 10px">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</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/matInOut/matInOut.js?s=1" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+</body>
+</html>
\ No newline at end of file

--
Gitblit v1.9.1