From 8aef28e39575b910aa08c0c102c868d60fb306ea Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期六, 11 七月 2020 16:10:42 +0800
Subject: [PATCH] Merge branch 'dev' of https://gitee.com/luxiaotao1123/zy-asrs

---
 src/main/java/com/zy/asrs/entity/param/CombParam.java               |   56 
 src/main/webapp/views/pda/stockIn.html                              |  256 +
 src/main/java/com/zy/asrs/task/core/WcsDispatcher.java              |   59 
 src/main/java/com/zy/asrs/mapper/WrkDetlLogMapper.java              |   16 
 src/main/webapp/static/js/operateLog/operateLog.js                  |   14 
 src/main/java/com/zy/asrs/service/WrkMastLogService.java            |    2 
 src/main/java/com/zy/asrs/task/handler/NotifyLogHandler.java        |   44 
 src/main/java/com/zy/common/web/AuthController.java                 |    2 
 src/main/webapp/views/trayCode/trayCode.html                        |  147 
 src/main/java/com/zy/asrs/task/ErrorStockScheduler.java             |   30 
 src/main/java/com/zy/Boot.java                                      |    2 
 src/main/java/com/zy/asrs/mapper/TrayCodeMapper.java                |   12 
 src/main/java/com/zy/system/controller/UserController.java          |    4 
 src/main/java/com/zy/asrs/service/LocDetlService.java               |    6 
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java         |  342 +
 src/main/java/com/zy/asrs/entity/TrayCode.java                      |  211 +
 src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java      |    5 
 src/main/java/com/zy/common/utils/QrCode.java                       |   10 
 src/main/resources/mapper/WaitPakinLogMapper.xml                    |   23 
 src/main/resources/mapper/TrayCodeMapper.xml                        |   19 
 src/main/java/com/zy/asrs/entity/LocDetl.java                       |    4 
 src/main/webapp/views/operateLog/operateLog.html                    |   12 
 src/main/webapp/views/trayCode/trayCode_detail.html                 |  114 
 src/main/webapp/static/css/cool.css                                 |    6 
 src/main/webapp/static/js/role/rolePower.js                         |    1 
 src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java   |    5 
 src/main/java/com/zy/asrs/service/TrayCodeService.java              |    8 
 src/main/webapp/static/js/waitPakinLog/waitPakinLog.js              |  480 ++
 src/main/java/com/zy/asrs/entity/param/TrayCodeParam.java           |   37 
 src/main/java/com/zy/asrs/controller/WrkMastLogController.java      |    2 
 src/main/java/com/zy/asrs/service/WrkDetlLogService.java            |   10 
 src/main/java/com/zy/asrs/mapper/WaitPakinLogMapper.java            |   12 
 src/main/webapp/static/js/adjDetl/adjDetl.js                        |    4 
 src/main/webapp/static/js/pakStore/pakStore.js                      |    2 
 src/main/java/com/zy/asrs/service/MobileService.java                |   13 
 src/main/webapp/views/pdaCe/login.html                              |  152 
 src/main/java/com/zy/asrs/entity/WrkDetlLog.java                    |  375 +
 src/main/webapp/views/locMast/locMast.html                          |    2 
 src/main/java/com/zy/common/model/OutLocDto.java                    |   25 
 src/main/java/com/zy/common/web/RouterController.java               |   20 
 src/main/webapp/views/pda/index.html                                |   92 
 src/main/java/com/zy/asrs/task/OverYearLogScheduler.java            |   30 
 src/main/resources/mapper/WrkMastMapper.xml                         |   13 
 src/main/java/com/zy/asrs/task/handler/ErrorStockHandler.java       |   42 
 src/main/webapp/views/waitPakin/waitPakin_detail.html               |  132 
 src/main/java/com/zy/asrs/controller/WrkDetlLogController.java      |  133 
 src/main/java/com/zy/asrs/service/impl/TrayCodeServiceImpl.java     |   12 
 src/main/webapp/views/locMast/locMast_detail.html                   |   24 
 src/main/java/com/zy/asrs/controller/MatCodeController.java         |   10 
 src/main/java/com/zy/asrs/entity/WaitPakin.java                     |  258 +
 src/main/webapp/views/matCode/matCode.html                          |  183 
 src/main/webapp/views/pdaCe/index.html                              |  495 ++
 src/main/webapp/static/css/pda.css                                  |   95 
 src/main/webapp/views/pda/login.html                                |  146 
 src/main/java/com/zy/asrs/task/core/AsrsException.java              |   16 
 src/main/webapp/views/errorWrkMast/errorWrkMast.html                |  123 
 src/main/resources/application.yml                                  |    4 
 src/main/java/com/zy/asrs/task/handler/OverYearLogHandler.java      |   37 
 src/main/webapp/static/js/trayCode/trayCode.js                      |  451 ++
 src/main/resources/mapper/WrkDetlLogMapper.xml                      |   29 
 src/main/java/com/zy/asrs/mapper/LocDetlMapper.java                 |    7 
 src/main/java/com/zy/asrs/service/impl/WaitPakinLogServiceImpl.java |   12 
 src/main/resources/UpdateThread.cs                                  | 1732 +++++++++
 src/main/java/com/zy/common/config/AdminInterceptor.java            |    2 
 src/main/java/com/zy/system/entity/User.java                        |    8 
 src/main/webapp/static/js/wrkMast/wrkMast.js                        |   10 
 src/main/java/com/zy/asrs/controller/WaitPakinController.java       |  133 
 src/main/java/com/zy/asrs/controller/WaitPakinLogController.java    |  133 
 src/main/java/com/zy/asrs/task/core/ReturnT.java                    |   65 
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java         |  106 
 src/main/webapp/views/pda/stockOut.html                             |  408 ++
 src/main/java/com/zy/asrs/controller/TrayCodeController.java        |  179 
 src/main/webapp/static/js/errorWrkMast/errorWrkMast.js              |  495 ++
 src/main/java/com/zy/asrs/task/NotifyLogScheduler.java              |   30 
 src/main/java/com/zy/common/utils/BarcodeUtils.java                 |    4 
 src/main/webapp/static/js/wrkDetl/wrkDetl.js                        |    2 
 src/main/java/com/zy/asrs/entity/param/FullStoreParam.java          |   17 
 src/main/webapp/views/wrkMast/wrkMast.html                          |   24 
 src/main/webapp/views/stkPlcm/stkPlcm.html                          |    5 
 src/main/resources/mapper/WaitPakinMapper.xml                       |   22 
 src/main/java/com/zy/asrs/task/WorkMastScheduler.java               |   48 
 src/main/java/com/zy/asrs/entity/MatCodeCountDto.java               |    8 
 src/main/java/com/zy/common/CodeBuilder.java                        |    2 
 src/main/webapp/views/pda/locDetlIframe.html                        |  135 
 src/main/java/com/zy/asrs/mapper/WaitPakinMapper.java               |   12 
 src/main/webapp/views/pda/matQuery.html                             |  175 
 src/main/webapp/views/waitPakinLog/waitPakinLog.html                |   58 
 src/main/java/com/zy/asrs/entity/WaitPakinLog.java                  |  275 +
 src/main/webapp/static/js/waitPakin/waitPakin.js                    |  481 ++
 src/main/webapp/views/wrkMastLog/wrkMastLog.html                    |   10 
 src/main/webapp/views/user/user.html                                |    4 
 src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java      |   13 
 src/main/webapp/static/js/matCode/matCode.js                        |   30 
 src/main/java/com/zy/asrs/mapper/WrkMastLogMapper.java              |    4 
 src/main/webapp/static/css/print.css                                |    7 
 src/main/webapp/views/login.html                                    |   33 
 src/main/java/com/zy/asrs/service/impl/WrkDetlLogServiceImpl.java   |   16 
 src/main/webapp/views/user/user_detail.html                         |   27 
 src/main/webapp/views/pda/comb.html                                 |  159 
 src/main/java/com/zy/asrs/service/WaitPakinLogService.java          |    8 
 src/main/java/com/zy/asrs/controller/WorkController.java            |    5 
 src/main/java/com/zy/asrs/controller/WrkMastController.java         |    2 
 src/main/webapp/static/css/optimize.css                             |    0 
 src/main/java/com/zy/asrs/task/PlcLogScheduler.java                 |   30 
 src/main/java/com/zy/asrs/task/handler/PlcLogHandler.java           |   39 
 src/main/webapp/views/adjDetl/adjDetl.html                          |    4 
 src/main/webapp/views/wrkDetlLog/wrkDetlLog.html                    |   59 
 src/main/java/com/zy/asrs/task/AbstractHandler.java                 |   26 
 src/main/webapp/static/js/wrkMastLog/wrkMastLog.js                  |    8 
 src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java       |   66 
 src/main/webapp/static/layui/layer_mobile/layer.js                  |    2 
 src/main/webapp/static/js/user/user.js                              |  101 
 src/main/webapp/views/waitPakinLog/waitPakinLog_detail.html         |  138 
 src/main/java/com/zy/asrs/service/WrkDetlService.java               |    2 
 src/main/java/com/zy/asrs/service/WorkService.java                  |    7 
 src/main/java/com/zy/asrs/controller/LocDetlController.java         |    8 
 src/main/webapp/views/wrkDetlLog/wrkDetlLog_detail.html             |  174 
 src/main/java/com/zy/asrs/entity/WrkMast.java                       |    3 
 src/main/java/com/zy/asrs/service/impl/WaitPakinServiceImpl.java    |   12 
 src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java      |   16 
 src/main/java/com/zy/common/model/MobileLocDetlVo.java              |   47 
 src/main/webapp/static/js/role/role.js                              |    2 
 src/main/java/com/zy/asrs/controller/MobileController.java          |  102 
 src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java          |   59 
 src/main/java/com/zy/common/web/FileController.java                 |   34 
 src/main/webapp/static/css/common.css                               |   28 
 src/main/webapp/static/layui/layer_mobile/need/layer.css            |    1 
 src/main/java/com/zy/asrs/service/WaitPakinService.java             |    8 
 src/main/java/com/zy/asrs/service/WrkMastService.java               |    6 
 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java                 |    7 
 src/main/webapp/views/waitPakin/waitPakin.html                      |   67 
 src/main/java/com/zy/asrs/task/WorkLogScheduler.java                |   42 
 src/main/webapp/static/js/wrkDetlLog/wrkDetlLog.js                  |  496 ++
 133 files changed, 11,015 insertions(+), 354 deletions(-)

diff --git a/src/main/java/com/zy/Boot.java b/src/main/java/com/zy/Boot.java
index e04866a..c2e5b78 100644
--- a/src/main/java/com/zy/Boot.java
+++ b/src/main/java/com/zy/Boot.java
@@ -5,7 +5,9 @@
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.builder.SpringApplicationBuilder;
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
+@EnableScheduling
 @SpringBootApplication
 public class Boot extends SpringBootServletInitializer {
 
diff --git a/src/main/java/com/zy/asrs/controller/LocDetlController.java b/src/main/java/com/zy/asrs/controller/LocDetlController.java
index b4eef0a..bfc5113 100644
--- a/src/main/java/com/zy/asrs/controller/LocDetlController.java
+++ b/src/main/java/com/zy/asrs/controller/LocDetlController.java
@@ -24,6 +24,14 @@
     @Autowired
     private LocDetlService locDetlService;
 
+    @RequestMapping(value = "/locDetl/update")
+    public R update1() {
+        if (!locDetlService.updateLocNo("0402805", "0402804")) {
+            return R.error();
+        }
+        return R.ok();
+    }
+
     @RequestMapping(value = "/locDetl/{id}/auth")
     @ManagerAuth
     public R get(@PathVariable("id") String id) {
diff --git a/src/main/java/com/zy/asrs/controller/MatCodeController.java b/src/main/java/com/zy/asrs/controller/MatCodeController.java
index 5558b3c..1594efb 100644
--- a/src/main/java/com/zy/asrs/controller/MatCodeController.java
+++ b/src/main/java/com/zy/asrs/controller/MatCodeController.java
@@ -16,6 +16,7 @@
 import com.zy.asrs.entity.MatCodePrint;
 import com.zy.asrs.service.MatCodeService;
 import com.zy.common.CodeRes;
+import com.zy.common.config.AdminInterceptor;
 import com.zy.common.utils.BarcodeUtils;
 import com.zy.common.utils.QrCode;
 import com.zy.common.utils.excel.matcode.MatCodeExcel;
@@ -41,6 +42,12 @@
     @RequestMapping(value = "/matCode/{id}/auth")
     @ManagerAuth
     public R get(@PathVariable("id") String id) {
+        return R.ok(matCodeService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/matCode/auth")
+    @ManagerAuth
+    public R find(@RequestParam("id") String id) {
         return R.ok(matCodeService.selectById(String.valueOf(id)));
     }
 
@@ -151,7 +158,7 @@
     }
 
     // 鎵撳嵃
-    @RequestMapping(value = "/macCode/print/auth")
+    @RequestMapping(value = "/matCode/print/auth")
     @ManagerAuth(memo = "鐗╂枡缂栫爜鎵撳嵃")
     public R matCodePrint(@RequestParam(value = "param[]") String[] param) {
         if(Cools.isEmpty(param)) {
@@ -177,6 +184,7 @@
     public R matCodeBarcode(@RequestParam(defaultValue = "1") Integer type
                         , @RequestParam String param
                         , HttpServletResponse response) throws Exception {
+        AdminInterceptor.cors(response);
         if (Cools.isEmpty(param)){
             return R.parse(BaseRes.EMPTY);
         }
diff --git a/src/main/java/com/zy/asrs/controller/MobileController.java b/src/main/java/com/zy/asrs/controller/MobileController.java
new file mode 100644
index 0000000..9e8be25
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/MobileController.java
@@ -0,0 +1,102 @@
+package com.zy.asrs.controller;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.zy.asrs.entity.LocDetl;
+import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.entity.param.CombParam;
+import com.zy.asrs.service.LocDetlService;
+import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.service.MobileService;
+import com.zy.common.model.MobileLocDetlVo;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 绉诲姩绔帴鍙f帶鍒跺櫒
+ * Created by vincent on 2020/6/10
+ */
+@RestController
+@RequestMapping("mobile")
+public class MobileController extends BaseController  {
+
+    @Autowired
+    private MobileService mobileService;
+    @Autowired
+    private LocMastService locMastService;
+    @Autowired
+    private LocDetlService locDetlService;
+
+    /**
+     * 缁勬墭
+     */
+    @RequestMapping("/comb/auth")
+    @ManagerAuth(memo = "缁勬墭")
+    public R comb(@RequestBody CombParam combParam){
+        mobileService.comb(combParam, getUserId());
+        return R.ok();
+    }
+
+
+    /**
+     * 缁勬墭
+     */
+    @RequestMapping("/comb/form")
+    @ManagerAuth(memo = "缁勬墭")
+    public R combForm(@RequestParam CombParam combParam){
+        mobileService.comb(combParam, getUserId());
+        return R.ok();
+    }
+
+    /**
+     *  鏍规嵁搴撲綅鍙锋煡鎵惧簱瀛樻槑缁�
+     */
+    @RequestMapping("/locDetl")
+    @ManagerAuth
+    public R getLocDetl(@RequestParam(required = false)String locNo,
+                        @RequestParam(required = false)String matNo){
+        if (!Cools.isEmpty(locNo)) {
+            LocMast locMast = locMastService.selectById(locNo);
+            if (null == locMast || !"F".equals(locMast.getLocType())) {
+                return R.parse(BaseRes.EMPTY);
+            }
+            List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
+                    .eq("loc_no", locNo).orderBy("appe_time", false));
+            List<MobileLocDetlVo> res = new ArrayList<>();
+            locDetls.forEach(locDetl -> {
+                MobileLocDetlVo vo = new MobileLocDetlVo();
+                vo.setLocNo(locDetl.getLocNo());
+                vo.setMatnr(locDetl.getMatnr());
+                vo.setMaktx(locDetl.getMaktx());
+                vo.setCount(locDetl.getAnfme());
+                res.add(vo);
+            });
+            return R.ok().add(res);
+        }
+        if (!Cools.isEmpty(matNo)) {
+            List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
+                    .eq("matnr", matNo).orderBy("appe_time", false));
+            List<MobileLocDetlVo> res = new ArrayList<>();
+            locDetls.forEach(locDetl -> {
+                MobileLocDetlVo vo = new MobileLocDetlVo();
+                vo.setLocNo(locDetl.getLocNo());
+                vo.setMatnr(locDetl.getMatnr());
+                vo.setMaktx(locDetl.getMaktx());
+                vo.setCount(locDetl.getAnfme());
+                res.add(vo);
+            });
+            return R.ok().add(res);
+        }
+        return R.parse(BaseRes.PARAM);
+    }
+}
diff --git a/src/main/java/com/zy/asrs/controller/TrayCodeController.java b/src/main/java/com/zy/asrs/controller/TrayCodeController.java
new file mode 100644
index 0000000..555c80d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/TrayCodeController.java
@@ -0,0 +1,179 @@
+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.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.TrayCode;
+import com.zy.asrs.service.TrayCodeService;
+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 TrayCodeController extends BaseController {
+
+    @Autowired
+    private TrayCodeService trayCodeService;
+
+    @RequestMapping(value = "/trayCode/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(trayCodeService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/trayCode/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 Map<String, Object> param){
+        EntityWrapper<TrayCode> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        else {
+//            wrapper.orderBy("id", false);
+        }
+        return R.ok(trayCodeService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private void convert(Map<String, Object> map, EntityWrapper 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 = "/trayCode/add/auth")
+    @ManagerAuth
+    public R add(TrayCode trayCode) {
+        trayCodeService.insert(trayCode);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/trayCode/update/auth")
+	@ManagerAuth
+    public R update(TrayCode trayCode){
+        if (Cools.isEmpty(trayCode) || null==trayCode.getId()){
+            return R.error();
+        }
+        trayCodeService.updateById(trayCode);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/trayCode/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam String param){
+        List<TrayCode> list = JSONArray.parseArray(param, TrayCode.class);
+        if (Cools.isEmpty(list)){
+            return R.error();
+        }
+        for (TrayCode entity : list){
+            trayCodeService.delete(new EntityWrapper<>(entity));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/trayCode/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<TrayCode> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("trayCode"));
+        convert(map, wrapper);
+        List<TrayCode> list = trayCodeService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/trayCodeQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<TrayCode> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<TrayCode> page = trayCodeService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (TrayCode trayCode : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", trayCode.getId());
+            map.put("value", trayCode.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/trayCode/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<TrayCode> wrapper = new EntityWrapper<TrayCode>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != trayCodeService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(TrayCode.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/trayCode/latest")
+    @ManagerAuth
+    public R trayCodeLatest() {
+        List<TrayCode> latest = trayCodeService.selectList(new EntityWrapper<TrayCode>().orderBy("id", false));
+        return R.ok().add(latest.isEmpty()?"10000001": Integer.parseInt(latest.get(0).getTrayNo())+1);
+    }
+
+    @RequestMapping(value = "/trayCode/print/preview")
+    @ManagerAuth
+    public R printPreview(@RequestParam String startNo,
+                          @RequestParam Integer count,
+                          @RequestParam Integer type) {
+        if (count <= 0) {
+            return R.error("鏁伴噺蹇呴』澶т簬闆�");
+        }
+        List<Map<String, Object>> res = new ArrayList<>();
+        for (int i = 0; i<count; i++) {
+            res.add(Cools.add("item", String.valueOf(Integer.parseInt(startNo)+i)));
+        }
+        return R.ok().add(res);
+    }
+
+    @RequestMapping(value = "/trayCode/print/auth")
+    @ManagerAuth(memo = "鎵樼洏鐮佹墦鍗�")
+    public R print(@RequestParam String startNo,
+                  @RequestParam Integer count,
+                  @RequestParam Integer type){
+        if (count <= 0) {
+            return R.error("鏁伴噺蹇呴』澶т簬闆�");
+        }
+        for (int i = 0; i<count; i++) {
+            TrayCode trayCode = new TrayCode(
+                    String.valueOf(Integer.parseInt(startNo)+i),    // 搴忓垪鍙穂闈炵┖]
+                    i==0?"Y":"N",    // 璧峰
+                    i==count-1?"Y":"N",    // 缁堟
+                    null,    // 澶囨敞
+                    new Date(),    // 淇敼鏃堕棿
+                    getUserId(),    // 淇敼浜哄憳
+                    new Date(),    // 娣诲姞鏃堕棿
+                    getUserId()    // 娣诲姞浜哄憳
+            );
+            if (!trayCodeService.insert(trayCode)) {
+                throw new CoolException("淇濆瓨搴忓垪鍙峰け璐�");
+            }
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/WaitPakinController.java b/src/main/java/com/zy/asrs/controller/WaitPakinController.java
new file mode 100644
index 0000000..2db6de1
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/WaitPakinController.java
@@ -0,0 +1,133 @@
+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.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.WaitPakin;
+import com.zy.asrs.service.WaitPakinService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+public class WaitPakinController extends BaseController {
+
+    @Autowired
+    private WaitPakinService waitPakinService;
+
+    @RequestMapping(value = "/waitPakin/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(waitPakinService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/waitPakin/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 Map<String, Object> param){
+        excludeTrash(param);
+        EntityWrapper<WaitPakin> wrapper = new EntityWrapper<>();
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        else {
+            wrapper.orderBy("modi_time", false);
+        }
+        return R.ok(waitPakinService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private void convert(Map<String, Object> map, EntityWrapper 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 = "/waitPakin/add/auth")
+    @ManagerAuth
+    public R add(WaitPakin waitPakin) {
+        waitPakinService.insert(waitPakin);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/waitPakin/update/auth")
+	@ManagerAuth
+    public R update(WaitPakin waitPakin){
+        if (Cools.isEmpty(waitPakin) || null==waitPakin.getId()){
+            return R.error();
+        }
+        waitPakinService.updateById(waitPakin);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/waitPakin/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam String param){
+        List<WaitPakin> list = JSONArray.parseArray(param, WaitPakin.class);
+        if (Cools.isEmpty(list)){
+            return R.error();
+        }
+        for (WaitPakin entity : list){
+            waitPakinService.delete(new EntityWrapper<>(entity));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/waitPakin/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        EntityWrapper<WaitPakin> wrapper = new EntityWrapper<>();
+        Map<String, Object> map = excludeTrash(param.getJSONObject("waitPakin"));
+        convert(map, wrapper);
+        List<WaitPakin> list = waitPakinService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/waitPakinQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<WaitPakin> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<WaitPakin> page = waitPakinService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (WaitPakin waitPakin : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", waitPakin.getId());
+            map.put("value", waitPakin.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/waitPakin/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != waitPakinService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(WaitPakin.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/WaitPakinLogController.java b/src/main/java/com/zy/asrs/controller/WaitPakinLogController.java
new file mode 100644
index 0000000..ab32674
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/WaitPakinLogController.java
@@ -0,0 +1,133 @@
+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.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.WaitPakinLog;
+import com.zy.asrs.service.WaitPakinLogService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+public class WaitPakinLogController extends BaseController {
+
+    @Autowired
+    private WaitPakinLogService waitPakinLogService;
+
+    @RequestMapping(value = "/waitPakinLog/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(waitPakinLogService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/waitPakinLog/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 Map<String, Object> param){
+        EntityWrapper<WaitPakinLog> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        else {
+            wrapper.orderBy("id", false);
+        }
+        return R.ok(waitPakinLogService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private void convert(Map<String, Object> map, EntityWrapper 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 = "/waitPakinLog/add/auth")
+    @ManagerAuth
+    public R add(WaitPakinLog waitPakinLog) {
+        waitPakinLogService.insert(waitPakinLog);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/waitPakinLog/update/auth")
+	@ManagerAuth
+    public R update(WaitPakinLog waitPakinLog){
+        if (Cools.isEmpty(waitPakinLog) || null==waitPakinLog.getId()){
+            return R.error();
+        }
+        waitPakinLogService.updateById(waitPakinLog);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/waitPakinLog/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam String param){
+        List<WaitPakinLog> list = JSONArray.parseArray(param, WaitPakinLog.class);
+        if (Cools.isEmpty(list)){
+            return R.error();
+        }
+        for (WaitPakinLog entity : list){
+            waitPakinLogService.delete(new EntityWrapper<>(entity));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/waitPakinLog/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<WaitPakinLog> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("waitPakinLog"));
+        convert(map, wrapper);
+        List<WaitPakinLog> list = waitPakinLogService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/waitPakinLogQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<WaitPakinLog> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<WaitPakinLog> page = waitPakinLogService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (WaitPakinLog waitPakinLog : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", waitPakinLog.getId());
+            map.put("value", waitPakinLog.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/waitPakinLog/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<WaitPakinLog> wrapper = new EntityWrapper<WaitPakinLog>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != waitPakinLogService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(WaitPakinLog.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/WorkController.java b/src/main/java/com/zy/asrs/controller/WorkController.java
index c76f3f7..5ac9cfc 100644
--- a/src/main/java/com/zy/asrs/controller/WorkController.java
+++ b/src/main/java/com/zy/asrs/controller/WorkController.java
@@ -58,7 +58,7 @@
     }
 
     @RequestMapping("/plate/out/start")
-    @ManagerAuth(memo = "鍏ㄦ澘鍑哄簱")
+    @ManagerAuth(memo = "鍑哄簱浣滀笟")
     public R fullStoreTakeStart(@RequestBody StockOutParam param) {
         workService.startupFullTakeStore(param, getUserId());
         return R.ok("鍑哄簱鍚姩鎴愬姛");
@@ -109,6 +109,9 @@
         } else if (type == 2) {
             workService.cancelWrkMast(workNo, getUserId());
             return R.ok("宸ヤ綔妗e凡鍙栨秷");
+        } else if (type == 3) {
+            workService.pickWrkMast(workNo, getUserId());
+            return R.ok("宸ヤ綔妗e凡鎷f枡鍏ュ簱");
         }
         return R.ok();
     }
diff --git a/src/main/java/com/zy/asrs/controller/WrkDetlLogController.java b/src/main/java/com/zy/asrs/controller/WrkDetlLogController.java
new file mode 100644
index 0000000..6965127
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/WrkDetlLogController.java
@@ -0,0 +1,133 @@
+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.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.WrkDetlLog;
+import com.zy.asrs.service.WrkDetlLogService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+public class WrkDetlLogController extends BaseController {
+
+    @Autowired
+    private WrkDetlLogService wrkDetlLogService;
+
+    @RequestMapping(value = "/wrkDetlLog/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(wrkDetlLogService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/wrkDetlLog/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 Map<String, Object> param){
+        EntityWrapper<WrkDetlLog> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        else {
+            wrapper.orderBy("appe_time", false);
+        }
+        return R.ok(wrkDetlLogService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private void convert(Map<String, Object> map, EntityWrapper 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 = "/wrkDetlLog/add/auth")
+    @ManagerAuth
+    public R add(WrkDetlLog wrkDetlLog) {
+        wrkDetlLogService.insert(wrkDetlLog);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/wrkDetlLog/update/auth")
+	@ManagerAuth
+    public R update(WrkDetlLog wrkDetlLog){
+        if (Cools.isEmpty(wrkDetlLog) || null==wrkDetlLog.getWrkNo()){
+            return R.error();
+        }
+        wrkDetlLogService.updateById(wrkDetlLog);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/wrkDetlLog/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam String param){
+        List<WrkDetlLog> list = JSONArray.parseArray(param, WrkDetlLog.class);
+        if (Cools.isEmpty(list)){
+            return R.error();
+        }
+        for (WrkDetlLog entity : list){
+            wrkDetlLogService.delete(new EntityWrapper<>(entity));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/wrkDetlLog/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<WrkDetlLog> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("wrkDetlLog"));
+        convert(map, wrapper);
+        List<WrkDetlLog> list = wrkDetlLogService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/wrkDetlLogQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<WrkDetlLog> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<WrkDetlLog> page = wrkDetlLogService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (WrkDetlLog wrkDetlLog : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", wrkDetlLog.getWrkNo());
+            map.put("value", wrkDetlLog.getWrkNo());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/wrkDetlLog/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<WrkDetlLog> wrapper = new EntityWrapper<WrkDetlLog>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != wrkDetlLogService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(WrkDetlLog.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/WrkMastController.java b/src/main/java/com/zy/asrs/controller/WrkMastController.java
index 7fa4e46..3a6a9c5 100644
--- a/src/main/java/com/zy/asrs/controller/WrkMastController.java
+++ b/src/main/java/com/zy/asrs/controller/WrkMastController.java
@@ -61,7 +61,7 @@
                 wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
                 wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
             } else {
-                wrapper.like(entry.getKey(), val);
+                wrapper.eq(entry.getKey(), val);
             }
         }
     }
diff --git a/src/main/java/com/zy/asrs/controller/WrkMastLogController.java b/src/main/java/com/zy/asrs/controller/WrkMastLogController.java
index c7b24b5..669978a 100644
--- a/src/main/java/com/zy/asrs/controller/WrkMastLogController.java
+++ b/src/main/java/com/zy/asrs/controller/WrkMastLogController.java
@@ -51,7 +51,7 @@
             }
             wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
         }else {
-            wrapper.orderBy("io_time", false);
+            wrapper.orderBy("modi_time", false).orderBy("wrk_no", false);
         }
         return R.ok(wrkMastLogService.selectPage(new Page<>(curr, limit), wrapper));
     }
diff --git a/src/main/java/com/zy/asrs/entity/LocDetl.java b/src/main/java/com/zy/asrs/entity/LocDetl.java
index 852c4d8..8be72f5 100644
--- a/src/main/java/com/zy/asrs/entity/LocDetl.java
+++ b/src/main/java/com/zy/asrs/entity/LocDetl.java
@@ -131,7 +131,9 @@
 
     public LocDetl() {}
 
-    public LocDetl(String lgnum,Integer tbnum,Integer tbpos,String zmatid,String maktx,String werks,Double anfme,String altme,String zpallet,String bname,String memo,Long modiUser,Date modiTime,Long appeUser,Date appeTime) {
+    public LocDetl(String locNo, String matnr, String lgnum,Integer tbnum,Integer tbpos,String zmatid,String maktx,String werks,Double anfme,String altme,String zpallet,String bname,String memo,Long modiUser,Date modiTime,Long appeUser,Date appeTime) {
+        this.locNo = locNo;
+        this.matnr = matnr;
         this.lgnum = lgnum;
         this.tbnum = tbnum;
         this.tbpos = tbpos;
diff --git a/src/main/java/com/zy/asrs/entity/MatCodeCountDto.java b/src/main/java/com/zy/asrs/entity/MatCodeCountDto.java
index 592f751..cf738da 100644
--- a/src/main/java/com/zy/asrs/entity/MatCodeCountDto.java
+++ b/src/main/java/com/zy/asrs/entity/MatCodeCountDto.java
@@ -7,12 +7,12 @@
 
     private String matNo;
 
-    private int count;
+    private Double count;
 
     public MatCodeCountDto() {
     }
 
-    public MatCodeCountDto(String matNo, int count) {
+    public MatCodeCountDto(String matNo, Double count) {
         this.matNo = matNo;
         this.count = count;
     }
@@ -25,11 +25,11 @@
         this.matNo = matNo;
     }
 
-    public int getCount() {
+    public Double getCount() {
         return count;
     }
 
-    public void setCount(int count) {
+    public void setCount(Double count) {
         this.count = count;
     }
 }
diff --git a/src/main/java/com/zy/asrs/entity/TrayCode.java b/src/main/java/com/zy/asrs/entity/TrayCode.java
new file mode 100644
index 0000000..cbb30ba
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/TrayCode.java
@@ -0,0 +1,211 @@
+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.service.UserService;
+import com.zy.system.entity.User;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@TableName("bas_tray_code")
+public class TrayCode implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 缂栧彿
+     */
+    @ApiModelProperty(value= "缂栧彿")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 搴忓垪鍙�
+     */
+    @ApiModelProperty(value= "搴忓垪鍙�")
+    @TableField("tray_no")
+    private String trayNo;
+
+    /**
+     * 璧峰
+     */
+    @ApiModelProperty(value= "璧峰")
+    private String start;
+
+    /**
+     * 缁堟
+     */
+    @ApiModelProperty(value= "缁堟")
+    private String finish;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("modi_time")
+    private Date modiTime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("modi_user")
+    private Long modiUser;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("appe_time")
+    private Date appeTime;
+
+    /**
+     * 娣诲姞浜哄憳
+     */
+    @ApiModelProperty(value= "娣诲姞浜哄憳")
+    @TableField("appe_user")
+    private Long appeUser;
+
+    public TrayCode() {}
+
+    public TrayCode(String trayNo,String start,String finish,String memo,Date modiTime,Long modiUser,Date appeTime,Long appeUser) {
+        this.trayNo = trayNo;
+        this.start = start;
+        this.finish = finish;
+        this.memo = memo;
+        this.modiTime = modiTime;
+        this.modiUser = modiUser;
+        this.appeTime = appeTime;
+        this.appeUser = appeUser;
+    }
+
+//    TrayCode trayCode = new TrayCode(
+//            null,    // 搴忓垪鍙穂闈炵┖]
+//            null,    // 璧峰
+//            null,    // 缁堟
+//            null,    // 澶囨敞
+//            null,    // 淇敼鏃堕棿
+//            null,    // 淇敼浜哄憳
+//            null,    // 娣诲姞鏃堕棿
+//            null    // 娣诲姞浜哄憳
+//    );
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getTrayNo() {
+        return trayNo;
+    }
+
+    public void setTrayNo(String trayNo) {
+        this.trayNo = trayNo;
+    }
+
+    public String getStart() {
+        return start;
+    }
+
+    public void setStart(String start) {
+        this.start = start;
+    }
+
+    public String getFinish() {
+        return finish;
+    }
+
+    public void setFinish(String finish) {
+        this.finish = finish;
+    }
+
+    public String getMemo() {
+        return memo;
+    }
+
+    public void setMemo(String memo) {
+        this.memo = memo;
+    }
+
+    public Date getModiTime() {
+        return modiTime;
+    }
+
+    public String getModiTime$(){
+        if (Cools.isEmpty(this.modiTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
+    }
+
+    public void setModiTime(Date modiTime) {
+        this.modiTime = modiTime;
+    }
+
+    public Long getModiUser() {
+        return modiUser;
+    }
+
+    public String getModiUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.modiUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public void setModiUser(Long modiUser) {
+        this.modiUser = modiUser;
+    }
+
+    public Date getAppeTime() {
+        return appeTime;
+    }
+
+    public String getAppeTime$(){
+        if (Cools.isEmpty(this.appeTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
+    }
+
+    public void setAppeTime(Date appeTime) {
+        this.appeTime = appeTime;
+    }
+
+    public Long getAppeUser() {
+        return appeUser;
+    }
+
+    public String getAppeUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.appeUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public void setAppeUser(Long appeUser) {
+        this.appeUser = appeUser;
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/WaitPakin.java b/src/main/java/com/zy/asrs/entity/WaitPakin.java
new file mode 100644
index 0000000..c55f1a6
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/WaitPakin.java
@@ -0,0 +1,258 @@
+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;
+import com.zy.system.service.UserService;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@TableName("cust_wait_pakin")
+public class WaitPakin implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 缂栧彿
+     */
+    @ApiModelProperty(value= "缂栧彿")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鎵樼洏鐮�
+     */
+    @ApiModelProperty(value= "鎵樼洏鐮�")
+    private String barcode;
+
+    /**
+     * 鐗╂枡缂栫爜
+     */
+    @ApiModelProperty(value= "鐗╂枡缂栫爜")
+    private String matnr;
+
+    /**
+     * 鐗╂枡鎻忚堪
+     */
+    @ApiModelProperty(value= "鐗╂枡鎻忚堪")
+    private String maktx;
+
+    /**
+     * 鏁伴噺
+     */
+    @ApiModelProperty(value= "鏁伴噺")
+    private Double anfme;
+
+    /**
+     * 鍗曚綅
+     */
+    @ApiModelProperty(value= "鍗曚綅")
+    private String unit;
+
+    /**
+     * 鐘舵��
+     */
+    @ApiModelProperty(value= "鐘舵��")
+    private String status;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("modi_time")
+    private Date modiTime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("modi_user")
+    private Long modiUser;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("appe_time")
+    private Date appeTime;
+
+    /**
+     * 鍒涘缓鑰�
+     */
+    @ApiModelProperty(value= "鍒涘缓鑰�")
+    @TableField("appe_user")
+    private Long appeUser;
+
+    public WaitPakin() {}
+
+    public WaitPakin(String barcode,String matnr,String maktx,Double anfme,String unit,String status,String memo,Date modiTime,Long modiUser,Date appeTime,Long appeUser) {
+        this.barcode = barcode;
+        this.matnr = matnr;
+        this.maktx = maktx;
+        this.anfme = anfme;
+        this.unit = unit;
+        this.status = status;
+        this.memo = memo;
+        this.modiTime = modiTime;
+        this.modiUser = modiUser;
+        this.appeTime = appeTime;
+        this.appeUser = appeUser;
+    }
+
+//    WaitPakin waitPakin = new WaitPakin(
+//            null,    // 鎵樼洏鐮�
+//            null,    // 鐗╂枡缂栫爜
+//            null,    // 鐗╂枡鎻忚堪
+//            null,    // 鏁伴噺
+//            null,    // 鍗曚綅
+//            null,    // 鐘舵��
+//            null,    // 澶囨敞
+//            null,    // 淇敼鏃堕棿
+//            null,    // 淇敼浜哄憳
+//            null,    // 娣诲姞鏃堕棿
+//            null    // 鍒涘缓鑰�
+//    );
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getBarcode() {
+        return barcode;
+    }
+
+    public void setBarcode(String barcode) {
+        this.barcode = barcode;
+    }
+
+    public String getMatnr() {
+        return matnr;
+    }
+
+    public void setMatnr(String matnr) {
+        this.matnr = matnr;
+    }
+
+    public String getMaktx() {
+        return maktx;
+    }
+
+    public void setMaktx(String maktx) {
+        this.maktx = maktx;
+    }
+
+    public Double getAnfme() {
+        return anfme;
+    }
+
+    public void setAnfme(Double anfme) {
+        this.anfme = anfme;
+    }
+
+    public String getUnit() {
+        return unit;
+    }
+
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getMemo() {
+        return memo;
+    }
+
+    public void setMemo(String memo) {
+        this.memo = memo;
+    }
+
+    public Date getModiTime() {
+        return modiTime;
+    }
+
+    public String getModiTime$(){
+        if (Cools.isEmpty(this.modiTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
+    }
+
+    public void setModiTime(Date modiTime) {
+        this.modiTime = modiTime;
+    }
+
+    public Long getModiUser() {
+        return modiUser;
+    }
+
+    public String getModiUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.modiUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public void setModiUser(Long modiUser) {
+        this.modiUser = modiUser;
+    }
+
+    public Date getAppeTime() {
+        return appeTime;
+    }
+
+    public String getAppeTime$(){
+        if (Cools.isEmpty(this.appeTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
+    }
+
+    public void setAppeTime(Date appeTime) {
+        this.appeTime = appeTime;
+    }
+
+    public Long getAppeUser() {
+        return appeUser;
+    }
+
+    public String getAppeUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.appeUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public void setAppeUser(Long appeUser) {
+        this.appeUser = appeUser;
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/WaitPakinLog.java b/src/main/java/com/zy/asrs/entity/WaitPakinLog.java
new file mode 100644
index 0000000..48c70f6
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/WaitPakinLog.java
@@ -0,0 +1,275 @@
+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;
+import com.zy.system.service.UserService;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@TableName("cust_wait_pakin_log")
+public class WaitPakinLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 缂栧彿
+     */
+    @ApiModelProperty(value= "缂栧彿")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鍏ュ簱閫氱煡鍙�
+     */
+    @ApiModelProperty(value= "鍏ュ簱閫氱煡鍙�")
+    @TableField("pakin_id")
+    private Long pakinId;
+
+    /**
+     * 鎵樼洏鐮�
+     */
+    @ApiModelProperty(value= "鎵樼洏鐮�")
+    private String barcode;
+
+    /**
+     * 鐗╂枡缂栫爜
+     */
+    @ApiModelProperty(value= "鐗╂枡缂栫爜")
+    private String matnr;
+
+    /**
+     * 鐗╂枡鎻忚堪
+     */
+    @ApiModelProperty(value= "鐗╂枡鎻忚堪")
+    private String maktx;
+
+    /**
+     * 鏁伴噺
+     */
+    @ApiModelProperty(value= "鏁伴噺")
+    private Double anfme;
+
+    /**
+     * 鍗曚綅
+     */
+    @ApiModelProperty(value= "鍗曚綅")
+    private String unit;
+
+    /**
+     * 鐘舵��
+     */
+    @ApiModelProperty(value= "鐘舵��")
+    private String status;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("modi_time")
+    private Date modiTime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("modi_user")
+    private Long modiUser;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("appe_time")
+    private Date appeTime;
+
+    /**
+     * 鍒涘缓鑰�
+     */
+    @ApiModelProperty(value= "鍒涘缓鑰�")
+    @TableField("appe_user")
+    private Long appeUser;
+
+    public WaitPakinLog() {}
+
+    public WaitPakinLog(Long pakinId,String barcode,String matnr,String maktx,Double anfme,String unit,String status,String memo,Date modiTime,Long modiUser,Date appeTime,Long appeUser) {
+        this.pakinId = pakinId;
+        this.barcode = barcode;
+        this.matnr = matnr;
+        this.maktx = maktx;
+        this.anfme = anfme;
+        this.unit = unit;
+        this.status = status;
+        this.memo = memo;
+        this.modiTime = modiTime;
+        this.modiUser = modiUser;
+        this.appeTime = appeTime;
+        this.appeUser = appeUser;
+    }
+
+//    WaitPakinLog waitPakinLog = new WaitPakinLog(
+//            null,    // 鍏ュ簱閫氱煡鍙�
+//            null,    // 鎵樼洏鐮�
+//            null,    // 鐗╂枡缂栫爜
+//            null,    // 鐗╂枡鎻忚堪
+//            null,    // 鏁伴噺
+//            null,    // 鍗曚綅
+//            null,    // 鐘舵��
+//            null,    // 澶囨敞
+//            null,    // 淇敼鏃堕棿
+//            null,    // 淇敼浜哄憳
+//            null,    // 娣诲姞鏃堕棿
+//            null    // 鍒涘缓鑰�
+//    );
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getPakinId() {
+        return pakinId;
+    }
+
+    public void setPakinId(Long pakinId) {
+        this.pakinId = pakinId;
+    }
+
+    public String getBarcode() {
+        return barcode;
+    }
+
+    public void setBarcode(String barcode) {
+        this.barcode = barcode;
+    }
+
+    public String getMatnr() {
+        return matnr;
+    }
+
+    public void setMatnr(String matnr) {
+        this.matnr = matnr;
+    }
+
+    public String getMaktx() {
+        return maktx;
+    }
+
+    public void setMaktx(String maktx) {
+        this.maktx = maktx;
+    }
+
+    public Double getAnfme() {
+        return anfme;
+    }
+
+    public void setAnfme(Double anfme) {
+        this.anfme = anfme;
+    }
+
+    public String getUnit() {
+        return unit;
+    }
+
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getMemo() {
+        return memo;
+    }
+
+    public void setMemo(String memo) {
+        this.memo = memo;
+    }
+
+    public Date getModiTime() {
+        return modiTime;
+    }
+
+    public String getModiTime$(){
+        if (Cools.isEmpty(this.modiTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
+    }
+
+    public void setModiTime(Date modiTime) {
+        this.modiTime = modiTime;
+    }
+
+    public Long getModiUser() {
+        return modiUser;
+    }
+
+    public String getModiUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.modiUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public void setModiUser(Long modiUser) {
+        this.modiUser = modiUser;
+    }
+
+    public Date getAppeTime() {
+        return appeTime;
+    }
+
+    public String getAppeTime$(){
+        if (Cools.isEmpty(this.appeTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
+    }
+
+    public void setAppeTime(Date appeTime) {
+        this.appeTime = appeTime;
+    }
+
+    public Long getAppeUser() {
+        return appeUser;
+    }
+
+    public String getAppeUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.appeUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public void setAppeUser(Long appeUser) {
+        this.appeUser = appeUser;
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/WrkDetlLog.java b/src/main/java/com/zy/asrs/entity/WrkDetlLog.java
new file mode 100644
index 0000000..7f41257
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/WrkDetlLog.java
@@ -0,0 +1,375 @@
+package com.zy.asrs.entity;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.core.common.Cools;
+import com.core.common.SpringUtils;
+import com.zy.system.entity.User;
+import com.zy.system.service.UserService;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@TableName("asr_wrk_detl_log")
+public class WrkDetlLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 宸ヤ綔鍙�
+     */
+    @ApiModelProperty(value= "宸ヤ綔鍙�")
+    @TableField("wrk_no")
+    private Integer wrkNo;
+
+    /**
+     * 宸ヤ綔鏃堕棿
+     */
+    @ApiModelProperty(value= "宸ヤ綔鏃堕棿")
+    @TableField("io_time")
+    private Date ioTime;
+
+    /**
+     * 鐗╂枡缂栧彿
+     */
+    @ApiModelProperty(value= "鐗╂枡缂栧彿")
+    private String matnr;
+
+    /**
+     * 浠撳簱鍙�
+     */
+    @ApiModelProperty(value= "浠撳簱鍙�")
+    private String lgnum;
+
+    /**
+     * 杞偍璇锋眰缂栧彿
+     */
+    @ApiModelProperty(value= "杞偍璇锋眰缂栧彿")
+    private Integer tbnum;
+
+    /**
+     * 琛岄」鐩�
+     */
+    @ApiModelProperty(value= "琛岄」鐩�")
+    private Integer tbpos;
+
+    /**
+     * 鐗╂枡鏍囩ID
+     */
+    @ApiModelProperty(value= "鐗╂枡鏍囩ID")
+    private String zmatid;
+
+    /**
+     * 鐗╂枡鎻忚堪
+     */
+    @ApiModelProperty(value= "鐗╂枡鎻忚堪")
+    private String maktx;
+
+    /**
+     * 宸ュ巶
+     */
+    @ApiModelProperty(value= "宸ュ巶")
+    private String werks;
+
+    /**
+     * 鏁伴噺
+     */
+    @ApiModelProperty(value= "鏁伴噺")
+    private Double anfme;
+
+    /**
+     * 鍗曚綅
+     */
+    @ApiModelProperty(value= "鍗曚綅")
+    private String altme;
+
+    /**
+     * 鎵樼洏鏉$爜
+     */
+    @ApiModelProperty(value= "鎵樼洏鏉$爜")
+    private String zpallet;
+
+    /**
+     * 鐢ㄦ埛ID
+     */
+    @ApiModelProperty(value= "鐢ㄦ埛ID")
+    private String bname;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("modi_user")
+    private Long modiUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("modi_time")
+    private Date modiTime;
+
+    /**
+     * 鍒涘缓鑰�
+     */
+    @ApiModelProperty(value= "鍒涘缓鑰�")
+    @TableField("appe_user")
+    private Long appeUser;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("appe_time")
+    private Date appeTime;
+
+    @ApiModelProperty(value= "")
+    private Double nista;
+
+    public WrkDetlLog() {}
+
+    public WrkDetlLog(Integer wrkNo,Date ioTime,String matnr,String lgnum,Integer tbnum,Integer tbpos,String zmatid,String maktx,String werks,Double anfme,String altme,String zpallet,String bname,String memo,Long modiUser,Date modiTime,Long appeUser,Date appeTime,Double nista) {
+        this.wrkNo = wrkNo;
+        this.ioTime = ioTime;
+        this.matnr = matnr;
+        this.lgnum = lgnum;
+        this.tbnum = tbnum;
+        this.tbpos = tbpos;
+        this.zmatid = zmatid;
+        this.maktx = maktx;
+        this.werks = werks;
+        this.anfme = anfme;
+        this.altme = altme;
+        this.zpallet = zpallet;
+        this.bname = bname;
+        this.memo = memo;
+        this.modiUser = modiUser;
+        this.modiTime = modiTime;
+        this.appeUser = appeUser;
+        this.appeTime = appeTime;
+        this.nista = nista;
+    }
+
+//    WrkDetlLog wrkDetlLog = new WrkDetlLog(
+//            null,    // 宸ヤ綔鍙穂闈炵┖]
+//            null,    // 宸ヤ綔鏃堕棿
+//            null,    // 鐗╂枡缂栧彿[闈炵┖]
+//            null,    // 浠撳簱鍙穂闈炵┖]
+//            null,    // 杞偍璇锋眰缂栧彿[闈炵┖]
+//            null,    // 琛岄」鐩甗闈炵┖]
+//            null,    // 鐗╂枡鏍囩ID
+//            null,    // 鐗╂枡鎻忚堪
+//            null,    // 宸ュ巶
+//            null,    // 鏁伴噺
+//            null,    // 鍗曚綅
+//            null,    // 鎵樼洏鏉$爜
+//            null,    // 鐢ㄦ埛ID
+//            null,    // 澶囨敞
+//            null,    // 淇敼浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null,    // 鍒涘缓鑰�
+//            null,    // 娣诲姞鏃堕棿
+//            null    // 
+//    );
+
+    public Integer getWrkNo() {
+        return wrkNo;
+    }
+
+    public void setWrkNo(Integer wrkNo) {
+        this.wrkNo = wrkNo;
+    }
+
+    public Date getIoTime() {
+        return ioTime;
+    }
+
+    public String getIoTime$(){
+        if (Cools.isEmpty(this.ioTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ioTime);
+    }
+
+    public void setIoTime(Date ioTime) {
+        this.ioTime = ioTime;
+    }
+
+    public String getMatnr() {
+        return matnr;
+    }
+
+    public void setMatnr(String matnr) {
+        this.matnr = matnr;
+    }
+
+    public String getLgnum() {
+        return lgnum;
+    }
+
+    public void setLgnum(String lgnum) {
+        this.lgnum = lgnum;
+    }
+
+    public Integer getTbnum() {
+        return tbnum;
+    }
+
+    public void setTbnum(Integer tbnum) {
+        this.tbnum = tbnum;
+    }
+
+    public Integer getTbpos() {
+        return tbpos;
+    }
+
+    public void setTbpos(Integer tbpos) {
+        this.tbpos = tbpos;
+    }
+
+    public String getZmatid() {
+        return zmatid;
+    }
+
+    public void setZmatid(String zmatid) {
+        this.zmatid = zmatid;
+    }
+
+    public String getMaktx() {
+        return maktx;
+    }
+
+    public void setMaktx(String maktx) {
+        this.maktx = maktx;
+    }
+
+    public String getWerks() {
+        return werks;
+    }
+
+    public void setWerks(String werks) {
+        this.werks = werks;
+    }
+
+    public Double getAnfme() {
+        return anfme;
+    }
+
+    public void setAnfme(Double anfme) {
+        this.anfme = anfme;
+    }
+
+    public String getAltme() {
+        return altme;
+    }
+
+    public void setAltme(String altme) {
+        this.altme = altme;
+    }
+
+    public String getZpallet() {
+        return zpallet;
+    }
+
+    public void setZpallet(String zpallet) {
+        this.zpallet = zpallet;
+    }
+
+    public String getBname() {
+        return bname;
+    }
+
+    public void setBname(String bname) {
+        this.bname = bname;
+    }
+
+    public String getMemo() {
+        return memo;
+    }
+
+    public void setMemo(String memo) {
+        this.memo = memo;
+    }
+
+    public Long getModiUser() {
+        return modiUser;
+    }
+
+    public String getModiUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.modiUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public void setModiUser(Long modiUser) {
+        this.modiUser = modiUser;
+    }
+
+    public Date getModiTime() {
+        return modiTime;
+    }
+
+    public String getModiTime$(){
+        if (Cools.isEmpty(this.modiTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
+    }
+
+    public void setModiTime(Date modiTime) {
+        this.modiTime = modiTime;
+    }
+
+    public Long getAppeUser() {
+        return appeUser;
+    }
+
+    public String getAppeUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.appeUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public void setAppeUser(Long appeUser) {
+        this.appeUser = appeUser;
+    }
+
+    public Date getAppeTime() {
+        return appeTime;
+    }
+
+    public String getAppeTime$(){
+        if (Cools.isEmpty(this.appeTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
+    }
+
+    public void setAppeTime(Date appeTime) {
+        this.appeTime = appeTime;
+    }
+
+    public Double getNista() {
+        return nista;
+    }
+
+    public void setNista(Double nista) {
+        this.nista = nista;
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/WrkMast.java b/src/main/java/com/zy/asrs/entity/WrkMast.java
index af7fb57..ca90c09 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMast.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -927,6 +927,9 @@
     }
 
     public void setErrorMemo(String errorMemo) {
+        if (errorMemo.length() > 255) {
+            errorMemo = errorMemo.substring(0, 150);
+        }
         this.errorMemo = errorMemo;
     }
 
diff --git a/src/main/java/com/zy/asrs/entity/param/CombParam.java b/src/main/java/com/zy/asrs/entity/param/CombParam.java
new file mode 100644
index 0000000..568b7e6
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/CombParam.java
@@ -0,0 +1,56 @@
+package com.zy.asrs.entity.param;
+
+import java.util.List;
+
+/**
+ * Created by vincent on 2020/6/28
+ */
+public class CombParam {
+
+    // 鎵樼洏鏉$爜
+    private String barcode;
+
+    private List<CombMat> combMats;
+
+    public static class CombMat {
+
+        // 鐗╂枡缂栧彿
+        private String matNo;
+
+        // 鐗╂枡鏁伴噺
+        private Double count;
+
+        public String getMatNo() {
+            return matNo;
+        }
+
+        public void setMatNo(String matNo) {
+            this.matNo = matNo;
+        }
+
+        public Double getCount() {
+            return count;
+        }
+
+        public void setCount(Double count) {
+            this.count = count;
+        }
+
+    }
+
+    public String getBarcode() {
+        return barcode;
+    }
+
+    public void setBarcode(String barcode) {
+        this.barcode = barcode;
+    }
+
+    public List<CombMat> getCombMats() {
+        return combMats;
+    }
+
+    public void setCombMats(List<CombMat> combMats) {
+        this.combMats = combMats;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/entity/param/FullStoreParam.java b/src/main/java/com/zy/asrs/entity/param/FullStoreParam.java
index de82fa3..289ba63 100644
--- a/src/main/java/com/zy/asrs/entity/param/FullStoreParam.java
+++ b/src/main/java/com/zy/asrs/entity/param/FullStoreParam.java
@@ -7,6 +7,9 @@
  */
 public class FullStoreParam {
 
+    // 鎵樼洏鏉$爜
+    private String barcode;
+
     // 绔欑偣缂栧彿
     private Integer devpNo;
 
@@ -19,7 +22,7 @@
         private String matNo;
 
         // 鐗╂枡鏁伴噺
-        private Integer count;
+        private Double count;
 
         public String getMatNo() {
             return matNo;
@@ -29,15 +32,23 @@
             this.matNo = matNo;
         }
 
-        public Integer getCount() {
+        public Double getCount() {
             return count;
         }
 
-        public void setCount(Integer count) {
+        public void setCount(Double count) {
             this.count = count;
         }
     }
 
+    public String getBarcode() {
+        return barcode;
+    }
+
+    public void setBarcode(String barcode) {
+        this.barcode = barcode;
+    }
+
     public Integer getDevpNo() {
         return devpNo;
     }
diff --git a/src/main/java/com/zy/asrs/entity/param/TrayCodeParam.java b/src/main/java/com/zy/asrs/entity/param/TrayCodeParam.java
new file mode 100644
index 0000000..687638c
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/TrayCodeParam.java
@@ -0,0 +1,37 @@
+package com.zy.asrs.entity.param;
+
+/**
+ * Created by vincent on 2020/7/2
+ */
+public class TrayCodeParam {
+
+    private String startNo;
+
+    private Integer count;
+
+    private Integer type;
+
+    public String getStartNo() {
+        return startNo;
+    }
+
+    public void setStartNo(String startNo) {
+        this.startNo = startNo;
+    }
+
+    public Integer getCount() {
+        return count;
+    }
+
+    public void setCount(Integer count) {
+        this.count = count;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java b/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
index a1c4763..919a2d6 100644
--- a/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.mapper.BaseMapper;
 import com.zy.asrs.entity.LocDetl;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Update;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -16,4 +17,10 @@
 
     Integer getStockOutPageCount(Map<String, Object> map);
 
+    @Update("update asr_loc_detl set anfme=#{anfme}, modi_time = getDate() where loc_no = #{locNo} and matnr = #{matnr}")
+    int updateAnfme(Double anfme, String locNo, String matnr);
+
+    @Update("update asr_loc_detl set loc_no = #{newLocNo}, modi_time=getDate() where loc_no = #{oldLocNo}")
+    int updateLocNo(String newLocNo, String oldLocNo);
+
 }
diff --git a/src/main/java/com/zy/asrs/mapper/TrayCodeMapper.java b/src/main/java/com/zy/asrs/mapper/TrayCodeMapper.java
new file mode 100644
index 0000000..9a90105
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/TrayCodeMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.TrayCode;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface TrayCodeMapper extends BaseMapper<TrayCode> {
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/WaitPakinLogMapper.java b/src/main/java/com/zy/asrs/mapper/WaitPakinLogMapper.java
new file mode 100644
index 0000000..7933b5f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/WaitPakinLogMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.WaitPakinLog;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface WaitPakinLogMapper extends BaseMapper<WaitPakinLog> {
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/WaitPakinMapper.java b/src/main/java/com/zy/asrs/mapper/WaitPakinMapper.java
new file mode 100644
index 0000000..1ab9a07
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/WaitPakinMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.WaitPakin;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface WaitPakinMapper extends BaseMapper<WaitPakin> {
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/WrkDetlLogMapper.java b/src/main/java/com/zy/asrs/mapper/WrkDetlLogMapper.java
new file mode 100644
index 0000000..54b9216
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/WrkDetlLogMapper.java
@@ -0,0 +1,16 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.WrkDetlLog;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface WrkDetlLogMapper extends BaseMapper<WrkDetlLog> {
+
+    @Insert("insert into asr_wrk_detl_log select * from asr_wrk_detl where wrk_no=#{workNo}")
+    int save(Integer workNo);
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastLogMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastLogMapper.java
index e6fde4a..c229b41 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastLogMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastLogMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.mapper.BaseMapper;
 import com.zy.asrs.entity.WrkMastLog;
+import org.apache.ibatis.annotations.Insert;
 import org.apache.ibatis.annotations.Mapper;
 import org.springframework.stereotype.Repository;
 
@@ -9,4 +10,7 @@
 @Repository
 public interface WrkMastLogMapper extends BaseMapper<WrkMastLog> {
 
+    @Insert("insert into asr_wrk_mast_log select * from asr_wrk_mast where wrk_no=#{workNo}")
+    int save(Integer workNo);
+
 }
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index 8d9e59c..dd349bd 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -5,8 +5,15 @@
 import org.apache.ibatis.annotations.Mapper;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Mapper
 @Repository
 public interface WrkMastMapper extends BaseMapper<WrkMast> {
 
+//    @Select("select * from asr_wrk_mast where ((wrk_sts = 4 Or wrk_sts = 14 ) and io_type <> 103 and io_type <> 104 and io_type <> 107 ) or (wrk_sts = 2 and io_type=6) order by upd_mk,io_time,wrk_no")
+    List<WrkMast> selectToBeCompleteData();
+
+    List<WrkMast> selectToBeHistoryData();
+
 }
diff --git a/src/main/java/com/zy/asrs/service/LocDetlService.java b/src/main/java/com/zy/asrs/service/LocDetlService.java
index 23e1a37..d5bf2f4 100644
--- a/src/main/java/com/zy/asrs/service/LocDetlService.java
+++ b/src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -8,4 +8,10 @@
 
     Page<LocDetl> getStockOut(Page<LocDetl> page);
 
+    /**
+     * 淇敼搴撳瓨鏄庣粏鏁伴噺锛屽鏋滄暟閲忎负0锛屽垯鍒犻櫎璁板綍
+     */
+    boolean updateAnfme(Double anfme, String locNo, String matnr);
+
+    boolean updateLocNo(String newLocNo, String oldLocNo);
 }
diff --git a/src/main/java/com/zy/asrs/service/MobileService.java b/src/main/java/com/zy/asrs/service/MobileService.java
new file mode 100644
index 0000000..c3b6fd3
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/MobileService.java
@@ -0,0 +1,13 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.param.CombParam;
+
+public interface MobileService {
+
+    /**
+     * 缁勬墭
+     * @param param
+     */
+    void comb(CombParam param, Long userId);
+
+}
diff --git a/src/main/java/com/zy/asrs/service/TrayCodeService.java b/src/main/java/com/zy/asrs/service/TrayCodeService.java
new file mode 100644
index 0000000..c29772d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/TrayCodeService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.TrayCode;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface TrayCodeService extends IService<TrayCode> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/WaitPakinLogService.java b/src/main/java/com/zy/asrs/service/WaitPakinLogService.java
new file mode 100644
index 0000000..8d7227c
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/WaitPakinLogService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.WaitPakinLog;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface WaitPakinLogService extends IService<WaitPakinLog> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/WaitPakinService.java b/src/main/java/com/zy/asrs/service/WaitPakinService.java
new file mode 100644
index 0000000..b09602a
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/WaitPakinService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.WaitPakin;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface WaitPakinService extends IService<WaitPakin> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/WorkService.java b/src/main/java/com/zy/asrs/service/WorkService.java
index c74bdfc..f639fba 100644
--- a/src/main/java/com/zy/asrs/service/WorkService.java
+++ b/src/main/java/com/zy/asrs/service/WorkService.java
@@ -18,7 +18,7 @@
     String startupFullPutStore(FullStoreParam param, Long userId);
 
     /**
-     * 鍏ㄦ澘鍑哄簱
+     * 鍑哄簱浣滀笟
      */
     void startupFullTakeStore(StockOutParam param, Long userId);
 
@@ -65,4 +65,9 @@
      * 鎵嬪姩鍙栨秷宸ヤ綔妗�
      */
     void cancelWrkMast(String workNo, Long userId);
+
+    /**
+     * 鎵嬪姩鎷f枡鍏ュ簱宸ヤ綔妗�
+     */
+    void pickWrkMast(String workNo, Long userId);
 }
diff --git a/src/main/java/com/zy/asrs/service/WrkDetlLogService.java b/src/main/java/com/zy/asrs/service/WrkDetlLogService.java
new file mode 100644
index 0000000..8e56fa2
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/WrkDetlLogService.java
@@ -0,0 +1,10 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.WrkDetlLog;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface WrkDetlLogService extends IService<WrkDetlLog> {
+
+    boolean save(Integer workNo);
+
+}
diff --git a/src/main/java/com/zy/asrs/service/WrkDetlService.java b/src/main/java/com/zy/asrs/service/WrkDetlService.java
index 3e23f9a..13ed68b 100644
--- a/src/main/java/com/zy/asrs/service/WrkDetlService.java
+++ b/src/main/java/com/zy/asrs/service/WrkDetlService.java
@@ -8,6 +8,6 @@
 
 public interface WrkDetlService extends IService<WrkDetl> {
 
-    void createWorkDetail(Integer workNo, List<MatCodeCountDto> matCodeCountDtos, Long userId);
+    void createWorkDetail(Integer workNo, List<MatCodeCountDto> matCodeCountDtos, String barcode, Long userId);
 
 }
diff --git a/src/main/java/com/zy/asrs/service/WrkMastLogService.java b/src/main/java/com/zy/asrs/service/WrkMastLogService.java
index 8ef290a..78ea016 100644
--- a/src/main/java/com/zy/asrs/service/WrkMastLogService.java
+++ b/src/main/java/com/zy/asrs/service/WrkMastLogService.java
@@ -5,4 +5,6 @@
 
 public interface WrkMastLogService extends IService<WrkMastLog> {
 
+    boolean save(Integer workNo);
+
 }
diff --git a/src/main/java/com/zy/asrs/service/WrkMastService.java b/src/main/java/com/zy/asrs/service/WrkMastService.java
index 55f5f51..f5c3e5c 100644
--- a/src/main/java/com/zy/asrs/service/WrkMastService.java
+++ b/src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -3,8 +3,14 @@
 import com.baomidou.mybatisplus.service.IService;
 import com.zy.asrs.entity.WrkMast;
 
+import java.util.List;
+
 public interface WrkMastService extends IService<WrkMast> {
 
     int getWorkingMast(Integer devpNo);
 
+    List<WrkMast> selectToBeCompleteData();
+
+    List<WrkMast> selectToBeHistoryData();
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
index 593daa5..7fa471b 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.service.impl;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.zy.asrs.entity.LocDetl;
@@ -17,4 +18,19 @@
         return page;
     }
 
+    @Override
+    public boolean updateAnfme(Double anfme, String locNo, String matnr) {
+        if (anfme <= 0) {
+            return delete(new EntityWrapper<LocDetl>().eq("loc_no", locNo).eq("matnr", matnr));
+        } else {
+            int res = baseMapper.updateAnfme(anfme, locNo, matnr);
+            return res > 0;
+        }
+    }
+
+    @Override
+    public boolean updateLocNo(String newLocNo, String oldLocNo) {
+        return baseMapper.updateLocNo(newLocNo, oldLocNo) > 0;
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
new file mode 100644
index 0000000..5197b90
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -0,0 +1,66 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.MatCode;
+import com.zy.asrs.entity.WaitPakin;
+import com.zy.asrs.entity.param.CombParam;
+import com.zy.asrs.service.MatCodeService;
+import com.zy.asrs.service.MobileService;
+import com.zy.asrs.service.WaitPakinService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+
+/**
+ * 绉诲姩绔湇鍔℃牳蹇冪被
+ * Created by vincent on 2020/6/28
+ */
+@Service
+public class MobileServiceImpl implements MobileService {
+
+    @Autowired
+    private MatCodeService matCodeService;
+    @Autowired
+    private WaitPakinService waitPakinService;
+
+    @Override
+    @Transactional
+    public void comb(CombParam param, Long userId) {
+        if (Cools.isEmpty(param.getBarcode()) || param.getCombMats().isEmpty()) {
+            throw new CoolException(BaseRes.PARAM);
+        }
+        int count = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
+                eq("barcode", param.getBarcode()).eq("status", "N"));
+        if (count > 0) {
+            throw new CoolException("鏉$爜鏁版嵁宸插瓨鍦�");
+        }
+        for (CombParam.CombMat combMat : param.getCombMats()) {
+            MatCode matCode = matCodeService.selectById(combMat.getMatNo());
+            if (Cools.isEmpty(matCode)) {
+                throw new CoolException("鐗╂枡鏁版嵁閿欒");
+            }
+            WaitPakin waitPakin = new WaitPakin(
+                    param.getBarcode(),    // 鎵樼洏鐮�
+                    matCode.getMatNo(),    // 鐗╂枡缂栫爜
+                    matCode.getMatName(),    // 鐗╂枡鎻忚堪
+                    combMat.getCount(),    // 鏁伴噺
+                    matCode.getStr1(),    // 鍗曚綅
+                    "N",    // 鐘舵��
+                    null,    // 澶囨敞
+                    new Date(),    // 淇敼鏃堕棿
+                    userId,    // 淇敼浜哄憳
+                    new Date(),    // 娣诲姞鏃堕棿
+                    userId    // 鍒涘缓鑰�
+            );
+            if (!waitPakinService.insert(waitPakin)) {
+                throw new CoolException("淇濆瓨鏁版嵁澶辫触");
+            }
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/TrayCodeServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TrayCodeServiceImpl.java
new file mode 100644
index 0000000..4f96791
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/TrayCodeServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.TrayCodeMapper;
+import com.zy.asrs.entity.TrayCode;
+import com.zy.asrs.service.TrayCodeService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("trayCodeService")
+public class TrayCodeServiceImpl extends ServiceImpl<TrayCodeMapper, TrayCode> implements TrayCodeService {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/WaitPakinLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WaitPakinLogServiceImpl.java
new file mode 100644
index 0000000..2d11ea0
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/WaitPakinLogServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.WaitPakinLogMapper;
+import com.zy.asrs.entity.WaitPakinLog;
+import com.zy.asrs.service.WaitPakinLogService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("waitPakinLogService")
+public class WaitPakinLogServiceImpl extends ServiceImpl<WaitPakinLogMapper, WaitPakinLog> implements WaitPakinLogService {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/WaitPakinServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WaitPakinServiceImpl.java
new file mode 100644
index 0000000..fada025
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/WaitPakinServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.WaitPakinMapper;
+import com.zy.asrs.entity.WaitPakin;
+import com.zy.asrs.service.WaitPakinService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("waitPakinService")
+public class WaitPakinServiceImpl extends ServiceImpl<WaitPakinMapper, WaitPakin> implements WaitPakinService {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index 0f62468..03d7555 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -29,6 +29,8 @@
 
     // 宸ヤ綔鍙风敓鎴愯鍒欓粯璁ょ被鍨�
     private static final int DEFAULT_WORK_NO_TYPE = 0;
+    // 搴撲綅鎺掑彿鍒嗛厤榛樿绫诲埆
+    private static final int DEFAULT_ROW_NO_TYPE = 1;
 
     @Autowired
     private WrkMastService wrkMastService;
@@ -48,6 +50,10 @@
     private MatCodeService matCodeService;
     @Autowired
     private AdjDetlService adjDetlService;
+    @Autowired
+    private WrkMastLogService wrkMastLogService;
+    @Autowired
+    private WrkDetlLogService wrkDetlLogService;
 
     @Override
     @Transactional
@@ -61,7 +67,7 @@
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE);
         // 妫�绱㈠簱浣�
-        StartupDto dto = commonService.getLocNo(1, 1, param.getDevpNo());
+        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo());
         // 鐢熸垚宸ヤ綔妗�
         WrkMast wrkMast = new WrkMast();
         wrkMast.setWrkNo(workNo);
@@ -73,6 +79,7 @@
         wrkMast.setSourceStaNo(dto.getSourceStaNo());
         wrkMast.setStaNo(dto.getStaNo());
         wrkMast.setLocNo(dto.getLocNo());
+        wrkMast.setBarcode(param.getBarcode()); // 鎵樼洏鐮�
         wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
         wrkMast.setPicking("N"); // 鎷f枡
         wrkMast.setExitMk("N"); // 閫�鍑�
@@ -93,7 +100,7 @@
         param.getList().forEach(elem -> {
             matDtos.add(new MatCodeCountDto(elem.getMatNo(), elem.getCount()));
         });
-        wrkDetlService.createWorkDetail(workNo, matDtos, userId);
+        wrkDetlService.createWorkDetail(workNo, matDtos, param.getBarcode(), userId);
         // 鏇存柊婧愮珯鐐逛俊鎭�
         sourceStaNo.setWrkNo(workNo);
         sourceStaNo.setModiUser(userId);
@@ -134,7 +141,7 @@
         }
         if (!locDetlDtos.isEmpty()) {
             // 鍚姩鍑哄簱寮�濮� 101.鍑哄簱
-            stockOut(staNo, locDetlDtos, 101, userId);
+            stockOut(staNo, locDetlDtos, null, userId);
         } else {
             throw new CoolException("搴撲綅鐗╂枡涓嶅瓨鍦�");
         }
@@ -161,6 +168,10 @@
         }
         // 鐢熸垚宸ヤ綔妗�
         for (OutLocDto dto : dtos) {
+            // 鍒ゆ柇鍏ュ嚭搴撶被鍨嬶細101.鍏ㄦ澘鍑哄簱 or 103.鎷f枡鍑哄簱
+            if (ioType == null) {
+                ioType = dto.isAll() ? 101 : 103;
+            }
             // 鑾峰彇搴撲綅
             LocMast locMast = locMastService.selectById(dto.getLocNo());
             // 鑾峰彇璺緞
@@ -179,7 +190,7 @@
             wrkMast.setWrkNo(workNo);
             wrkMast.setIoTime(new Date());
             wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
-            wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬侊細101.鍑哄簱
+            wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
             wrkMast.setIoPri(13D); // 浼樺厛绾э細13
             wrkMast.setCrnNo(locMast.getCrnNo());
             wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 婧愮珯
@@ -222,10 +233,10 @@
                     throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
                 }
             }
-            // 淇敼搴撲綅鐘舵��:   F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害
+            // 淇敼搴撲綅鐘舵��:   F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓�
             locMast = locMastService.selectById(dto.getLocNo());
             if (locMast.getLocType().equals("F")) {
-                locMast.setLocType("R");
+                locMast.setLocType(ioType==101?"R":"P");
                 locMast.setModiUser(userId);
                 locMast.setModiTime(new Date());
                 if (!locMastService.updateById(locMast)) {
@@ -245,7 +256,7 @@
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE);
         // 妫�绱㈠簱浣�
-        StartupDto dto = commonService.getLocNo(1, 10, devpNo);
+        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo);
         // 鐢熸垚宸ヤ綔妗�
         WrkMast wrkMast = new WrkMast();
         wrkMast.setWrkNo(workNo);
@@ -400,7 +411,7 @@
         wrkMast.setWrkNo(workNo);
         wrkMast.setIoTime(new Date());
         wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
-        wrkMast.setIoType(110); // 鍏ュ嚭搴撶姸鎬侊細 110.绌烘澘鍑哄簱
+        wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
         wrkMast.setIoPri(10D);
         wrkMast.setCrnNo(sourceLoc.getCrnNo());
         wrkMast.setSourceLocNo(sourceLocNo); // 婧愬簱浣�
@@ -641,4 +652,83 @@
         }
     }
 
+    @Override
+    @Transactional
+    public void pickWrkMast(String workNo, Long userId) {
+        WrkMast wrkMast = wrkMastService.selectById(workNo);
+        if (Cools.isEmpty(wrkMast)){
+            throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪");
+        }
+        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+        String locNo = wrkMast.getSourceLocNo();
+        // 鎷f枡浣滀笟鍒ゆ柇
+        if (wrkMast.getIoType() != 103) {
+            throw new CoolException("鍏ュ嚭搴撶被鍨嬩笉鏄�103.鎷f枡鍑哄簱");
+        }
+        // 宸ヤ綔鐘舵�佸垽鏂�
+        if (wrkMast.getWrkSts() < 11 || wrkMast.getWrkSts() == 15) {
+            throw new CoolException("褰撳墠宸ヤ綔鐘舵�佷笉鑳芥嫞鏂欏叆搴�");
+        }
+        // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
+//        if (!wrkDetlLogService.save(wrkMast.getWrkNo())) {
+//            throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。澶辫触");
+//        }
+        // 鍒犻櫎宸ヤ綔鏄庣粏妗�
+//        if (!wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()))) {
+//            throw new CoolException("鍒犻櫎宸ヤ綔鏄庣粏妗f。鍘嗗彶妗eけ璐�");
+//        }
+        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+        if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
+            throw new CoolException("淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
+        }
+        // 鑾峰彇鐩爣绔�
+        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+                .eq("type_no", 53)  // type_no: 53.鎷f枡鍐嶅叆搴�
+                .eq("stn_no", wrkMast.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
+                .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
+        StaDesc staDesc = staDescService.selectOne(wrapper);
+        if (Cools.isEmpty(staDesc)) {
+            throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+        }
+        // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
+        Integer staNo = staDesc.getCrnStn();
+        // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
+        wrkMast.setIoType(53); // 鍏ュ嚭搴撶被鍨�: 53.鎷f枡鍐嶅叆搴�
+        wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
+        wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
+        wrkMast.setStaNo(staNo); // 鐩爣绔�
+        wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
+        wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
+        wrkMast.setModiTime(new Date());
+        wrkMast.setModiUser(userId);
+        if (!wrkMastService.updateById(wrkMast)) {
+            throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
+        }
+//        // 鏇存柊/鍒犻櫎鎷f枡搴撳瓨鏄庣粏
+//        for (WrkDetl wrkDetl : wrkDetls) {
+//            LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locNo).eq("matnr", wrkDetl.getMatnr()));
+//            // 搴撳瓨鏁伴噺璁$畻
+//            locDetl.setAnfme(locDetl.getAnfme() - wrkDetl.getAnfme());
+//            if (locDetl.getAnfme() > 0) {
+//                locDetl.setModiTime(new Date());
+//                locDetl.setModiUser(userId);
+//                if (!locDetlService.updateById(locDetl)) {
+//                    throw new CoolException("鏇存柊搴撳瓨鏄庣粏澶辫触");
+//                }
+//            } else {
+//                if (!locDetlService.delete(new EntityWrapper<>(locDetl))) {
+//                    throw new CoolException("鍒犻櫎搴撳瓨鏄庣粏澶辫触");
+//                }
+//            }
+//        }
+        // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
+        LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+        locMast.setLocType("Q");
+        locMast.setModiTime(new Date());
+        locMast.setModiUser(userId);
+        if (!locMastService.updateById(locMast)) {
+            throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
+        }
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkDetlLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkDetlLogServiceImpl.java
new file mode 100644
index 0000000..dbf91b6
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/WrkDetlLogServiceImpl.java
@@ -0,0 +1,16 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.WrkDetlLogMapper;
+import com.zy.asrs.entity.WrkDetlLog;
+import com.zy.asrs.service.WrkDetlLogService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("wrkDetlLogService")
+public class WrkDetlLogServiceImpl extends ServiceImpl<WrkDetlLogMapper, WrkDetlLog> implements WrkDetlLogService {
+
+    @Override
+    public boolean save(Integer workNo) {
+        return this.baseMapper.save(workNo)>0;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
index 536b2ea..fe31337 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
@@ -24,7 +24,7 @@
 
     @Override
     @Transactional
-    public void createWorkDetail(Integer workNo, List<MatCodeCountDto> matCodeCountDtos, Long userId) {
+    public void createWorkDetail(Integer workNo, List<MatCodeCountDto> matCodeCountDtos, String barcode, Long userId) {
         if (matCodeCountDtos.isEmpty()){
             return;
         }
@@ -38,7 +38,8 @@
             wrkDetl.setWrkNo(workNo);
             wrkDetl.setIoTime(new Date());
             wrkDetl.setMatnr(matCode.getMatNo()); // 鐗╂枡缂栧彿
-            wrkDetl.setAnfme((double) dto.getCount()); // 鏁伴噺
+            wrkDetl.setAnfme(dto.getCount()); // 鏁伴噺
+            wrkDetl.setZpallet(barcode); // 鎵樼洏鏉$爜
             wrkDetl.setLgnum("寰呭畾"); // todo
             wrkDetl.setTbnum(0); // todo
             wrkDetl.setTbpos(0); // todo
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
index e0caced..bd51e68 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
@@ -9,4 +9,9 @@
 @Service("wrkMastLogService")
 public class WrkMastLogServiceImpl extends ServiceImpl<WrkMastLogMapper, WrkMastLog> implements WrkMastLogService {
 
+    @Override
+    public boolean save(Integer workNo) {
+        return this.baseMapper.save(workNo) > 0;
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
index ddcbc22..63e7cd2 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -7,6 +7,8 @@
 import com.zy.asrs.service.WrkMastService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service("wrkMastService")
 public class WrkMastServiceImpl extends ServiceImpl<WrkMastMapper, WrkMast> implements WrkMastService {
 
@@ -14,4 +16,15 @@
     public int getWorkingMast(Integer devpNo) {
         return selectCount(new EntityWrapper<WrkMast>().eq("source_sta_no", devpNo).in("wrk_sts", 1, 6));
     }
+
+    @Override
+    public List<WrkMast> selectToBeCompleteData() {
+        return this.baseMapper.selectToBeCompleteData();
+    }
+
+    @Override
+    public List<WrkMast> selectToBeHistoryData() {
+        return this.baseMapper.selectToBeHistoryData();
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/task/AbstractHandler.java b/src/main/java/com/zy/asrs/task/AbstractHandler.java
new file mode 100644
index 0000000..9e630fb
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/AbstractHandler.java
@@ -0,0 +1,26 @@
+package com.zy.asrs.task;
+
+import com.zy.asrs.task.core.AsrsException;
+import com.zy.asrs.task.core.ReturnT;
+
+import java.text.MessageFormat;
+
+/**
+ * Created by vincent on 2020/7/4
+ */
+public abstract class AbstractHandler<T> {
+
+    public final ReturnT<T> SUCCESS = new ReturnT<>(200, null);
+    public final ReturnT<T> FAIL = new ReturnT<>(500, null);
+
+//    protected abstract ReturnT<T> start();
+
+    protected void exceptionHandle(String errorMsg){
+        exceptionHandle(errorMsg, (Object) null);
+    }
+
+    protected void exceptionHandle(String errorMsg, Object... args){
+        throw new AsrsException(MessageFormat.format(errorMsg, args));
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/ErrorStockScheduler.java b/src/main/java/com/zy/asrs/task/ErrorStockScheduler.java
new file mode 100644
index 0000000..917cfc4
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/ErrorStockScheduler.java
@@ -0,0 +1,30 @@
+package com.zy.asrs.task;
+
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.task.handler.ErrorStockHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by vincent on 2020/7/7
+ */
+@Component
+public class ErrorStockScheduler {
+
+    private static final Logger log = LoggerFactory.getLogger(ErrorStockScheduler.class);
+
+    @Autowired
+    private ErrorStockHandler errorStockHandler;
+
+    @Scheduled(cron = "0/3 * * * * ? ")
+    private void execute(){
+        ReturnT<String> returnT = errorStockHandler.start();
+        if (!returnT.isSuccess()) {
+            log.error(returnT.getMsg());
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/NotifyLogScheduler.java b/src/main/java/com/zy/asrs/task/NotifyLogScheduler.java
new file mode 100644
index 0000000..93799d9
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/NotifyLogScheduler.java
@@ -0,0 +1,30 @@
+package com.zy.asrs.task;
+
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.task.handler.NotifyLogHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by vincent on 2020/7/7
+ */
+@Component
+public class NotifyLogScheduler {
+
+    private static final Logger log = LoggerFactory.getLogger(NotifyLogScheduler.class);
+
+    @Autowired
+    private NotifyLogHandler notifyLogHandler;
+
+    @Scheduled(cron = "0/3 * * * * ? ")
+    private void execute(){
+        ReturnT<String> returnT = notifyLogHandler.start();
+        if (!returnT.isSuccess()) {
+            log.error(returnT.getMsg());
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/OverYearLogScheduler.java b/src/main/java/com/zy/asrs/task/OverYearLogScheduler.java
new file mode 100644
index 0000000..95a8a29
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/OverYearLogScheduler.java
@@ -0,0 +1,30 @@
+package com.zy.asrs.task;
+
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.task.handler.OverYearLogHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by vincent on 2020/7/7
+ */
+@Component
+public class OverYearLogScheduler {
+
+    private static final Logger log = LoggerFactory.getLogger(OverYearLogScheduler.class);
+
+    @Autowired
+    private OverYearLogHandler overYearLogHandler;
+
+    @Scheduled(cron = "0/3 * * * * ? ")
+    private void execute(){
+        ReturnT<String> returnT = overYearLogHandler.start();
+        if (!returnT.isSuccess()) {
+            log.error(returnT.getMsg());
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/PlcLogScheduler.java b/src/main/java/com/zy/asrs/task/PlcLogScheduler.java
new file mode 100644
index 0000000..708392f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/PlcLogScheduler.java
@@ -0,0 +1,30 @@
+package com.zy.asrs.task;
+
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.task.handler.PlcLogHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by vincent on 2020/7/7
+ */
+@Component
+public class PlcLogScheduler {
+
+    private static final Logger log = LoggerFactory.getLogger(PlcLogScheduler.class);
+
+    @Autowired
+    private PlcLogHandler plcLogHandler;
+
+    @Scheduled(cron = "0/3 * * * * ? ")
+    private void execute(){
+        ReturnT<String> returnT = plcLogHandler.start();
+        if (!returnT.isSuccess()) {
+            log.error(returnT.getMsg());
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/WorkLogScheduler.java b/src/main/java/com/zy/asrs/task/WorkLogScheduler.java
new file mode 100644
index 0000000..dddcf8d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/WorkLogScheduler.java
@@ -0,0 +1,42 @@
+package com.zy.asrs.task;
+
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.service.WrkMastService;
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.task.handler.WorkLogHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * Created by vincent on 2020/7/7
+ */
+@Component
+public class WorkLogScheduler {
+
+    private static final Logger log = LoggerFactory.getLogger(WorkLogScheduler.class);
+
+    @Autowired
+    private WorkLogHandler workLogHandler;
+    @Autowired
+    private WrkMastService wrkMastService;
+
+    @Scheduled(cron = "0/3 * * * * ? ")
+    private void execute(){
+        List<WrkMast> wrkMasts = wrkMastService.selectToBeHistoryData();
+        if (wrkMasts.isEmpty()) {
+            return;
+        }
+        for (WrkMast wrkMast : wrkMasts) {
+            ReturnT<String> result = workLogHandler.start(wrkMast);
+            if (!result.isSuccess()) {
+                log.error("宸ヤ綔妗workNo={}]鍘嗗彶妗e鐞嗗け璐�", wrkMast.getWrkNo());
+            }
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
new file mode 100644
index 0000000..10bffd4
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -0,0 +1,48 @@
+package com.zy.asrs.task;
+
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.service.WrkMastService;
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.task.handler.WorkMastHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by vincent on 2020/7/7
+ */
+@Component
+public class WorkMastScheduler {
+
+    private static final Logger log = LoggerFactory.getLogger(WorkMastScheduler.class);
+
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private WorkMastHandler workMastHandler;
+
+    @Scheduled(cron = "0/3 * * * * ? ")
+    private void execute(){
+        List<WrkMast> wrkMasts = wrkMastService.selectToBeCompleteData();
+        if (wrkMasts.isEmpty()) {
+            return;
+        }
+        for (WrkMast wrkMast : wrkMasts) {
+            ReturnT<String> returnT = workMastHandler.start(wrkMast);
+            if (!returnT.isSuccess()) {
+                wrkMast.setUpdMk("X");
+                wrkMast.setErrorMemo(returnT.getMsg());
+                wrkMast.setErrorTime(new Date());
+                if (!wrkMastService.updateById(wrkMast)) {
+                    log.error("宸ヤ綔妗workNo={}]鏍囪寰呭鐞嗗け璐�", wrkMast.getWrkNo());
+                }
+            }
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/core/AsrsException.java b/src/main/java/com/zy/asrs/task/core/AsrsException.java
new file mode 100644
index 0000000..7c0d744
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/core/AsrsException.java
@@ -0,0 +1,16 @@
+package com.zy.asrs.task.core;
+
+/**
+ * Created by vincent on 2020/7/7
+ */
+public class AsrsException extends RuntimeException {
+
+    public AsrsException(Throwable e) {
+        super(e);
+    }
+
+    public AsrsException(String message) {
+        super(message);
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/core/ReturnT.java b/src/main/java/com/zy/asrs/task/core/ReturnT.java
new file mode 100644
index 0000000..26b8c12
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/core/ReturnT.java
@@ -0,0 +1,65 @@
+package com.zy.asrs.task.core;
+
+import java.io.Serializable;
+
+/**
+ * Created by vincent on 2020/7/7
+ */
+public class ReturnT<T> implements Serializable {
+
+    public static final long serialVersionUID = 42L;
+    public static final int SUCCESS_CODE = 200;
+    public static final int FAIL_CODE = 500;
+    private int code;
+    private String msg;
+    private T content;
+
+    public ReturnT() {
+    }
+
+    public ReturnT(int code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public ReturnT(T content) {
+        this.code = 200;
+        this.content = content;
+    }
+
+    public boolean isSuccess(){
+        return this.code == 200;
+    }
+
+    public int getCode() {
+        return this.code;
+    }
+
+    public ReturnT<T> setCode(int code) {
+        this.code = code;
+        return this;
+    }
+
+    public String getMsg() {
+        return this.msg;
+    }
+
+    public ReturnT<T> setMsg(String msg) {
+        this.msg = msg;
+        return this;
+    }
+
+    public T getContent() {
+        return this.content;
+    }
+
+    public ReturnT<T> setContent(T content) {
+        this.content = content;
+        return this;
+    }
+
+    public String toString() {
+        return "ReturnT [code=" + this.code + ", msg=" + this.msg + ", content=" + this.content + "]";
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/core/WcsDispatcher.java b/src/main/java/com/zy/asrs/task/core/WcsDispatcher.java
new file mode 100644
index 0000000..64f09f0
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/core/WcsDispatcher.java
@@ -0,0 +1,59 @@
+package com.zy.asrs.task.core;
+
+import com.zy.asrs.task.handler.WorkLogHandler;
+import com.zy.asrs.task.handler.WorkMastHandler;
+import com.zy.system.service.ConfigService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+
+/**
+ * 鍗曠嚎绋嬫ā寮�  锛� 宸插純鐢� )
+ * 浠诲姟涓績璋冨害鍣�
+ * Created by vincent on 2020/7/4
+ */
+//@Component
+@Deprecated
+public class WcsDispatcher {
+
+    private static final Logger log = LoggerFactory.getLogger(WcsDispatcher.class);
+    private Thread thread;
+
+    @Autowired
+    private WorkMastHandler workMastHandler;
+    @Autowired
+    private WorkLogHandler workLogHandler;
+    @Autowired
+    private ConfigService configService;
+
+    @PostConstruct
+    private void start(){
+        thread = new Thread(() -> {
+            while (!Thread.currentThread().isInterrupted()) {
+                try {
+                    Thread.sleep(3000);
+
+//                    workMastHandler.start();
+//
+//                    workLogHandler.start();
+
+                } catch (Exception e) {
+                    log.error("Exception", e);
+                }
+            }
+        });
+        thread.start();
+        log.info("浠诲姟涓績璋冨害鍣ㄥ凡鍚姩......");
+    }
+
+    @PreDestroy
+    public void shutDown(){
+        if (thread != null)
+            thread.interrupt();
+        log.info("浠诲姟涓績璋冨害鍣ㄥ凡鍋滄......");
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/handler/ErrorStockHandler.java b/src/main/java/com/zy/asrs/task/handler/ErrorStockHandler.java
new file mode 100644
index 0000000..85cc3fa
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/handler/ErrorStockHandler.java
@@ -0,0 +1,42 @@
+package com.zy.asrs.task.handler;
+
+import com.zy.asrs.task.AbstractHandler;
+import com.zy.asrs.task.core.ReturnT;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by vincent on 2020/7/7
+ */
+@Service
+public class ErrorStockHandler extends AbstractHandler<String> {
+
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+
+    @Transactional
+    public ReturnT<String> start() {
+        try {
+            String sql = "SELECT distinct a.loc_no as locNo FROM asr_loc_mast a,asr_loc_detl b where a.loc_no=b.loc_no and (a.loc_type ='O' or a.loc_type ='D')";
+            List<Map<String, Object>> result = jdbcTemplate.queryForList(sql);
+            if (!result.isEmpty()) {
+                for (Map<String, Object> map : result) {
+                    int delCount = jdbcTemplate.update("delete from asr_loc_detl where loc_no=?;", map.get("locNo"));
+                    System.out.println(delCount);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            return FAIL.setMsg(e.getMessage());
+        }
+        return SUCCESS;
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/handler/NotifyLogHandler.java b/src/main/java/com/zy/asrs/task/handler/NotifyLogHandler.java
new file mode 100644
index 0000000..bc75cb9
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/handler/NotifyLogHandler.java
@@ -0,0 +1,44 @@
+package com.zy.asrs.task.handler;
+
+import com.zy.asrs.task.AbstractHandler;
+import com.zy.asrs.task.core.ReturnT;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+/**
+ * Created by vincent on 2020/7/7
+ */
+@Service
+public class NotifyLogHandler extends AbstractHandler<String> {
+
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+
+    @Transactional
+    public ReturnT<String> start() {
+        try {
+            // 鍏ュ簱閫氱煡妗h浆鍘嗗彶妗�
+            int pakInLog = jdbcTemplate.update("insert into cust_wait_pakin_log select * from cust_wait_pakin where status = 'Y';");
+            if (pakInLog > 0) {
+                int pakInDelete = jdbcTemplate.update("delete from cust_wait_pakin where status = 'Y';");
+                if (pakInDelete <= 0) {
+                    exceptionHandle("鍏ュ簱閫氱煡妗h浆鍘嗗彶妗eけ璐�");
+                }
+            }
+            // todo:luxiaotao
+            // 鍑哄簱閫氱煡妗h浆鍘嗗彶妗�
+
+            // 鐩樼偣閫氱煡妗h浆鍘嗗彶妗�
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            return FAIL.setMsg(e.getMessage());
+        }
+        return SUCCESS;
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/handler/OverYearLogHandler.java b/src/main/java/com/zy/asrs/task/handler/OverYearLogHandler.java
new file mode 100644
index 0000000..62b7596
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/handler/OverYearLogHandler.java
@@ -0,0 +1,37 @@
+package com.zy.asrs.task.handler;
+
+import com.zy.asrs.task.AbstractHandler;
+import com.zy.asrs.task.core.ReturnT;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+/**
+ * Created by vincent on 2020/7/7
+ */
+@Service
+public class OverYearLogHandler extends AbstractHandler<String> {
+
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+
+    @Transactional
+    public ReturnT<String> start() {
+        try {
+            // 鍒犻櫎鍗婂勾浠ヤ笂鐨勫巻鍙叉。
+            jdbcTemplate.update("delete from asr_stk_hplc where dateadd(day,180,appe_time) <= getdate();");
+            jdbcTemplate.update("delete from asr_wrk_detl_log where dateadd(day,360,appe_time) <= getdate();");
+            jdbcTemplate.update("delete from asr_wrk_mast_log where dateadd(day,360,appe_time) <= getdate();");
+            jdbcTemplate.update("delete from cust_wait_pakin_log where dateadd(day,360,appe_time) <= getdate();");
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            return FAIL.setMsg(e.getMessage());
+        }
+        return SUCCESS;
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/handler/PlcLogHandler.java b/src/main/java/com/zy/asrs/task/handler/PlcLogHandler.java
new file mode 100644
index 0000000..d2cecf1
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/handler/PlcLogHandler.java
@@ -0,0 +1,39 @@
+package com.zy.asrs.task.handler;
+
+import com.zy.asrs.task.AbstractHandler;
+import com.zy.asrs.task.core.ReturnT;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+/**
+ * Created by vincent on 2020/7/7
+ */
+@Service
+public class PlcLogHandler extends AbstractHandler<String> {
+
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+
+    @Transactional
+    public ReturnT<String> start() {
+        try {
+            // 涓嬩綅鏈哄懡浠よ浆鍘嗗彶妗�
+            int updateCount = jdbcTemplate.update("insert into asr_stk_hplc select * from asr_stk_plcm where dateadd(day,7,appe_time) <= getdate();");
+            if (updateCount > 0) {
+                int deleteCount = jdbcTemplate.update("delete from asr_stk_plcm where dateadd(day,7,io_time) <= getdate();");
+                if (deleteCount <= 0) {
+                    exceptionHandle("鍫嗗灈鏈�&PLC鍛戒护杞巻鍙叉。閿欒 ! ");
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            return FAIL.setMsg(e.getMessage());
+        }
+        return SUCCESS;
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
new file mode 100644
index 0000000..b78196a
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
@@ -0,0 +1,59 @@
+package com.zy.asrs.task.handler;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.WrkDetl;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.service.WrkDetlLogService;
+import com.zy.asrs.service.WrkDetlService;
+import com.zy.asrs.service.WrkMastLogService;
+import com.zy.asrs.service.WrkMastService;
+import com.zy.asrs.task.AbstractHandler;
+import com.zy.asrs.task.core.ReturnT;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+/**
+ * Created by vincent on 2020/7/6
+ */
+@Service
+public class WorkLogHandler extends AbstractHandler<String> {
+
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private WrkMastLogService wrkMastLogService;
+    @Autowired
+    private WrkDetlService wrkDetlService;
+    @Autowired
+    private WrkDetlLogService wrkDetlLogService;
+
+    @Transactional
+    public ReturnT<String> start(WrkMast wrkMast) {
+        try {
+            // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+            if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
+                exceptionHandle("淇濆瓨宸ヤ綔鍘嗗彶妗workNo={0}]澶辫触", wrkMast.getWrkNo());
+            }
+            // 鍒犻櫎宸ヤ綔涓绘。
+            if (!wrkMastService.deleteById(wrkMast)) {
+                exceptionHandle("鍒犻櫎宸ヤ綔涓绘。[workNo={0}]澶辫触", wrkMast.getWrkNo());
+            }
+            // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
+            if (!wrkDetlLogService.save(wrkMast.getWrkNo())) {
+//                exceptionHandle("淇濆瓨宸ヤ綔鏄庣粏鍘嗗彶妗workNo={0}]澶辫触", wrkMast.getWrkNo());
+            }
+            // 鍒犻櫎宸ヤ綔鏄庣粏妗�
+            if (!wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()))) {
+//                exceptionHandle("鍒犻櫎宸ヤ綔鏄庣粏妗workNo={0}]澶辫触", wrkMast.getWrkNo());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            return FAIL.setMsg(e.getMessage());
+        }
+        return SUCCESS;
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
new file mode 100644
index 0000000..e6c949d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -0,0 +1,342 @@
+package com.zy.asrs.task.handler;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.service.*;
+import com.zy.asrs.task.AbstractHandler;
+import com.zy.asrs.task.core.ReturnT;
+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 java.util.Date;
+import java.util.List;
+
+/**
+ * Created by vincent on 2020/7/4
+ */
+@Service
+@Transactional
+public class WorkMastHandler extends AbstractHandler<String> {
+
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private WrkDetlService wrkDetlService;
+    @Autowired
+    private LocMastService locMastService;
+    @Autowired
+    private LocDetlService locDetlService;
+    @Autowired
+    private WaitPakinService waitPakinService;
+
+    public ReturnT<String> start(WrkMast wrkMast) {
+        // 4.鍏ュ簱瀹屾垚
+        if (wrkMast.getWrkSts() == 4) {
+            return doIn(wrkMast);
+        // 14.鍑哄簱瀹屾垚
+        } else  if (wrkMast.getWrkSts() == 14) {
+            return doOut(wrkMast);
+        }
+        return SUCCESS;
+    }
+
+    private ReturnT<String> doIn(WrkMast wrkMast){
+        Date now = new Date();
+        LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+        try {
+            if (null == locMast) {
+                exceptionHandle("宸ヤ綔妗workNo={0}]搴撲綅鍙烽敊璇痆locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+            }
+            switch (wrkMast.getIoType()) {
+                // 绌烘澘鍏ュ簱
+                case 10:
+                    // 淇敼搴撲綅鐘舵��=D
+                    if (locMast.getLocType().equals("S") || locMast.getLocType().equals("Q")) {
+                        locMast.setLocType("D");
+                        locMast.setIoTime(now);
+                        locMast.setModiTime(now);
+                        if (!locMastService.updateById(locMast)) {
+                            exceptionHandle("绌烘澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐�;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                        }
+                    }
+                    break;
+                // 鍏ㄦ澘鍏ュ簱
+                case 1:
+                    // 娓呴櫎鎵�灞炲簱浣嶄箣鍓嶇殑搴撳瓨鏄庣粏
+                    List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getLocNo()));
+                    if (!locDetls.isEmpty()) {
+                        locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getLocNo()));
+                    }
+                    // 鏍规嵁宸ヤ綔鍙凤紝鏌ヨ宸ヤ綔鏄庣粏妗�
+                    List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+                    if (wrkDetls.isEmpty()) {
+                        exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 宸ヤ綔鏄庣粏妗d笉瀛樺湪锛沎workNo={0}]", wrkMast.getWrkNo());
+                    }
+                    // 閬嶅巻宸ヤ綔鏄庣粏锛屾洿鏂板簱瀛樻槑缁嗗拰鍏ュ簱閫氱煡妗�
+                    for (WrkDetl wrkDetl : wrkDetls) {
+                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getLocNo()).eq("matnr", wrkDetl.getMatnr()));
+                        if (null != locDetl) {
+                            boolean res = locDetlService.updateAnfme(wrkDetl.getAnfme(), wrkMast.getLocNo(), wrkDetl.getMatnr());
+                            if (!res) {
+                                exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 鏇存柊搴撳瓨鏄庣粏澶辫触锛沎workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                            }
+                        } else {
+                            locDetl = new LocDetl(
+                                    wrkMast.getLocNo(), // 搴撲綅鍙�
+                                    wrkDetl.getMatnr(), // 鐗╂枡鍙�
+                                    null,    // 浠撳簱鍙�
+                                    null,    // 杞偍璇锋眰缂栧彿
+                                    null,    // 琛岄」鐩�
+                                    null,    // 鐗╂枡鏍囩ID
+                                    wrkDetl.getMaktx(),    // 鐗╂枡鎻忚堪
+                                    null,    // 宸ュ巶
+                                    wrkDetl.getAnfme(),    // 鏁伴噺
+                                    wrkDetl.getAltme(),    // 鍗曚綅
+                                    wrkDetl.getZpallet(),    // 鎵樼洏鏉$爜
+                                    null,    // 鐢ㄦ埛ID
+                                    null,    // 澶囨敞
+                                    null,    // 淇敼浜哄憳
+                                    now,    // 淇敼鏃堕棿
+                                    null,    // 鍒涘缓鑰�
+                                    now    // 娣诲姞鏃堕棿
+                            );
+                            if (!locDetlService.insert(locDetl)) {
+                                exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 娣诲姞搴撳瓨鏄庣粏澶辫触锛沎workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                            }
+                        }
+                        // 鏇存柊鍏ュ簱閫氱煡妗� status ===>> Y
+                        WaitPakin setParam = new WaitPakin();
+                        setParam.setStatus("Y");
+                        boolean updateRes = waitPakinService.update(setParam
+                                , new EntityWrapper<WaitPakin>().eq("barcode", wrkDetl.getZpallet())
+                                        .eq("matnr", wrkDetl.getMatnr())
+                                        .eq("anfme", wrkDetl.getAnfme()));
+                        if (!updateRes && updateRes) {
+                            exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 鏇存柊鍏ュ簱閫氱煡妗eけ璐ワ紱[workNo={0}]", wrkMast.getWrkNo());
+                        }
+                    }
+                    // 淇敼搴撲綅鐘舵�� S ====>> F
+                    if (locMast.getLocType().equals("S")) {
+                        locMast.setLocType("F");
+                        locMast.setBarcode(wrkMast.getBarcode());
+                        locMast.setIoTime(now);
+                        locMast.setModiTime(now);
+                        if (!locMastService.updateById(locMast)) {
+                            exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                        }
+                    }
+                    break;
+                // 鎷f枡鍏ュ簱
+                case 53:
+                    // 鏍规嵁宸ヤ綔鍙凤紝鏌ヨ宸ヤ綔鏄庣粏妗�
+                    List<WrkDetl> wrkDetls53 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+                    if (wrkDetls53.isEmpty()) {
+                        exceptionHandle("鎷f枡鍏ュ簱 ===>> 宸ヤ綔鏄庣粏妗d负绌猴紱[workNo={0}]", wrkMast.getWrkNo());
+                    }
+                    for (WrkDetl wrkDetl:wrkDetls53) {
+                        // 淇敼搴撳瓨鏄庣粏鏁伴噺锛屽鏋滃伐浣滄槑缁嗘暟閲忎负0鏃讹紝鍒犻櫎搴撳瓨鏄庣粏
+                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()).eq("matnr", wrkDetl.getMatnr()));
+                        if (null != locDetl) {
+                            if (!locDetlService.updateAnfme(locDetl.getAnfme() - wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr())) {
+                                exceptionHandle("鎷f枡鍏ュ簱 ===>> 淇敼搴撳瓨鏄庣粏鏁伴噺澶辫触锛沎workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                            }
+                            // todo:luxiaotao 3)淇敼鍑哄簱閫氱煡妗� status ==> Y
+                        }
+                    }
+                    // 淇敼搴撲綅鐘舵�� Q ====>> F
+                    if (locMast.getLocType().equals("Q")) {
+                        locMast.setLocType("F");
+                        locMast.setBarcode(wrkMast.getBarcode());
+                        locMast.setIoTime(now);
+                        locMast.setModiTime(now);
+                        if (!locMastService.updateById(locMast)) {
+                            exceptionHandle("鎷f枡鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                        }
+                    }
+                    break;
+                // 骞舵澘鍏ュ簱
+                case 54:
+                    // 鏍规嵁宸ヤ綔鍙凤紝鏌ヨ宸ヤ綔鏄庣粏妗�
+                    List<WrkDetl> wrkDetls54 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+                    if (wrkDetls54.isEmpty()) {
+                        exceptionHandle("骞舵澘鍏ュ簱 ===>> 宸ヤ綔鏄庣粏妗d负绌猴紱[workNo={0}]", wrkMast.getWrkNo());
+                    }
+                    // 淇敼搴撳瓨鏄庣粏鏁伴噺锛屽鏃犲簱瀛橈紝鏇炬柊澧�
+                    for (WrkDetl wrkDetl:wrkDetls54) {
+                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()).eq("matnr", wrkDetl.getMatnr()));
+                        if (null != locDetl) {
+                            if (!locDetlService.updateAnfme(wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr())) {
+                                exceptionHandle("骞舵澘鍏ュ簱 ===>> 淇敼搴撳瓨鏄庣粏鏁伴噺澶辫触锛沎workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr());
+                            }
+                        } else {
+                            locDetl = new LocDetl(
+                                    wrkMast.getLocNo(), // 搴撲綅鍙�
+                                    wrkDetl.getMatnr(), // 鐗╂枡鍙�
+                                    null,    // 浠撳簱鍙�
+                                    null,    // 杞偍璇锋眰缂栧彿
+                                    null,    // 琛岄」鐩�
+                                    null,    // 鐗╂枡鏍囩ID
+                                    wrkDetl.getMaktx(),    // 鐗╂枡鎻忚堪
+                                    null,    // 宸ュ巶
+                                    wrkDetl.getAnfme(),    // 鏁伴噺
+                                    wrkDetl.getAltme(),    // 鍗曚綅
+                                    wrkDetl.getZpallet(),    // 鎵樼洏鏉$爜
+                                    null,    // 鐢ㄦ埛ID
+                                    null,    // 澶囨敞
+                                    null,    // 淇敼浜哄憳
+                                    now,    // 淇敼鏃堕棿
+                                    null,    // 鍒涘缓鑰�
+                                    now    // 娣诲姞鏃堕棿
+                            );
+                            if (!locDetlService.insert(locDetl)) {
+                                exceptionHandle("骞舵澘鍏ュ簱 ===>> 鏂板搴撳瓨鏄庣粏澶辫触锛沎workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr());
+                            }
+                        }
+                        // todo:luxiaotao 3)淇敼鍑哄簱閫氱煡妗� status ==> Y
+                    }
+                    // 淇敼搴撲綅鐘舵�� Q ====>> F
+                    if (locMast.getLocType().equals("Q")) {
+                        locMast.setLocType("F");
+                        locMast.setBarcode(wrkMast.getBarcode());
+                        locMast.setIoTime(now);
+                        locMast.setModiTime(now);
+                        if (!locMastService.updateById(locMast)) {
+                            exceptionHandle("骞舵澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                        }
+                    }
+                    break;
+                // 鐩樼偣鍏ュ簱
+                case 57:
+                    // 鏍规嵁宸ヤ綔鍙凤紝鏌ヨ宸ヤ綔鏄庣粏妗�
+                    List<WrkDetl> wrkDetls57 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+                    if (wrkDetls57.isEmpty()) {
+                        exceptionHandle("鐩樼偣鍏ュ簱 ===>> 宸ヤ綔鏄庣粏妗d负绌猴紱[workNo={0}]", wrkMast.getWrkNo());
+                    }
+                    // todo:luxiaotao 3)淇敼鐩樼偣閫氱煡妗� status ==> Y
+                    // 淇敼搴撲綅鐘舵�� Q ====>> F
+                    if (locMast.getLocType().equals("Q")) {
+                        locMast.setLocType("F");
+                        locMast.setBarcode(wrkMast.getBarcode());
+                        locMast.setIoTime(now);
+                        locMast.setModiTime(now);
+                        if (!locMastService.updateById(locMast)) {
+                            exceptionHandle("鐩樼偣鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                        }
+                    }
+                    break;
+                // 搴撲綅绉昏浆
+                case 11:
+                    // 榛樿鐩爣搴撲綅鏄┖鏉�
+                    String locType = "D";
+                    // 搴撲綅绉昏浆鍒ゆ柇鏄惁涓虹┖鏉跨Щ杞�
+                    if (wrkMast.getEmptyMk().equals("N")) {
+                        locType = "F";
+                        // 杞Щ搴撳瓨鏄庣粏鏁版嵁: 搴撳瓨鍙� 鐢卞伐浣滄。婧愬簱浣嶅彉涓虹洰鏍囧簱浣�
+                        if (!locDetlService.updateLocNo(wrkMast.getLocNo(), wrkMast.getSourceLocNo())) {
+                            exceptionHandle("搴撲綅绉昏浆 ===>> 杞Щ搴撳瓨鏄庣粏鏁版嵁澶辫触锛沎婧愬簱浣�={0}],[鐩爣搴撲綅={1}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo());
+                        }
+                    }
+                    // todo:luxiaotao 3)淇敼鐩樼偣閫氱煡妗� status ==> Y
+                    // 淇敼婧愬簱浣嶇姸鎬� ==> O
+                    LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo());
+                    if (null != sourceLoc) {
+                        sourceLoc.setBarcode("");
+                        sourceLoc.setLocType("O");
+                        sourceLoc.setModiTime(now);
+                        sourceLoc.setIoTime(now);
+                        if (!locMastService.updateById(sourceLoc)) {
+                            exceptionHandle("搴撲綅绉昏浆 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐ワ紱[workNo={0}],[sourceLoc={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+                        }
+                    }
+                    // 淇敼鐩爣搴撲綅鐘舵�� ==> .locType
+                    locMast.setLocType(locType);
+                    locMast.setBarcode(wrkMast.getBarcode());
+                    locMast.setIoTime(now);
+                    locMast.setModiTime(now);
+                    if (!locMastService.updateById(locMast)) {
+                        exceptionHandle("搴撲綅绉昏浆 ===>> 淇敼鐩爣搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                    }
+                    break;
+                default:
+                    break;
+            }
+            // 淇敼宸ヤ綔涓绘。鐘舵��
+            wrkMast.setWrkSts(5L);
+            wrkMast.setModiTime(now);
+            if (!wrkMastService.updateById(wrkMast)) {
+                exceptionHandle("鏇存柊鍏ュ簱瀹屾垚鐘舵�佸け璐�;[workNo={0}]", wrkMast.getWrkNo());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            return FAIL.setMsg(e.getMessage());
+        }
+        return SUCCESS;
+    }
+
+    private ReturnT<String> doOut(WrkMast wrkMast){
+        Date now = new Date();
+        LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
+        try {
+            if (null == locMast) {
+                exceptionHandle("宸ヤ綔妗workNo={0}]搴撲綅鍙烽敊璇痆locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+            }
+            switch (wrkMast.getIoType()) {
+                // 鍏ㄦ澘鍑哄簱
+                case 101:
+                    // 鏍规嵁宸ヤ綔鍙凤紝鏌ヨ宸ヤ綔鏄庣粏妗�
+                    List<WrkDetl> wrkDetls101 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+                    if (wrkDetls101.isEmpty()) {
+                        exceptionHandle("鍏ㄦ澘鍑哄簱 ===>> 宸ヤ綔鏄庣粏妗d负绌猴紱[workNo={0}]", wrkMast.getWrkNo());
+                    }
+                    for (WrkDetl wrkDetl : wrkDetls101) {
+                        // todo:luxiaotao 3)淇敼鍑哄簱閫氱煡妗� status ==> Y
+                    }
+                    // 鍒犻櫎宸ヤ綔妗f簮搴撲綅鐨勫簱瀛樻槑缁�
+                    if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()))) {
+                        exceptionHandle("鍏ㄦ澘鍑哄簱 ===>> 鍒犻櫎搴撳瓨鏄庣粏澶辫触锛沎workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+                    }
+                    // 淇敼婧愬簱浣嶇姸鎬� R ===>> O
+                    if (locMast.getLocType().equals("R")) {
+                        locMast.setLocType("O");
+                        locMast.setBarcode("");
+                        locMast.setModiTime(now);
+                        locMast.setIoTime(now);
+                        if (!locMastService.updateById(locMast)) {
+                            exceptionHandle("鍏ㄦ澘鍑哄簱 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐ワ紱[workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+                        }
+                    }
+                    break;
+                // 绌烘澘鍑哄簱
+                case 110:
+                    // 淇敼搴撲綅鐘舵�� R ===>> O
+                    if (locMast.getLocType().equals("R")) {
+                        locMast.setLocType("O");
+                        locMast.setBarcode("");
+                        locMast.setModiTime(now);
+                        locMast.setIoTime(now);
+                        if (!locMastService.updateById(locMast)) {
+                            exceptionHandle("绌烘澘鍑哄簱 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐ワ紱[workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+                        }
+                    }
+                    break;
+                default:
+                    break;
+            }
+            // 淇敼宸ヤ綔涓绘。鐘舵��
+            wrkMast.setWrkSts(15L);
+            wrkMast.setModiTime(now);
+            if (!wrkMastService.updateById(wrkMast)) {
+                exceptionHandle("鏇存柊鍑哄簱瀹屾垚鐘舵�佸け璐�;[workNo={0}]", wrkMast.getWrkNo());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            return FAIL.setMsg(e.getMessage());
+        }
+        return SUCCESS;
+    }
+
+}
diff --git a/src/main/java/com/zy/common/CodeBuilder.java b/src/main/java/com/zy/common/CodeBuilder.java
index 2119356..8277141 100644
--- a/src/main/java/com/zy/common/CodeBuilder.java
+++ b/src/main/java/com/zy/common/CodeBuilder.java
@@ -18,7 +18,7 @@
         generator.url="127.0.0.1:1433;databasename=dlasrs";
         generator.username="sa";
         generator.password="sa@123";
-        generator.table="asr_adj_detl";
+        generator.table="asr_wrk_detl_log";
         generator.packagePath="com.zy.asrs";
         generator.build();
     }
diff --git a/src/main/java/com/zy/common/config/AdminInterceptor.java b/src/main/java/com/zy/common/config/AdminInterceptor.java
index b3b9fd4..07b18d7 100644
--- a/src/main/java/com/zy/common/config/AdminInterceptor.java
+++ b/src/main/java/com/zy/common/config/AdminInterceptor.java
@@ -144,7 +144,7 @@
     /**
      * 璺ㄥ煙
      */
-    private void cors(HttpServletResponse response){
+    public static void cors(HttpServletResponse response){
         // 璺ㄥ煙璁剧疆
         response.setHeader("Access-Control-Allow-Origin", "*");
         response.setHeader("Access-Control-Allow-Credentials", "true");
diff --git a/src/main/java/com/zy/common/model/MobileLocDetlVo.java b/src/main/java/com/zy/common/model/MobileLocDetlVo.java
new file mode 100644
index 0000000..5e8eed2
--- /dev/null
+++ b/src/main/java/com/zy/common/model/MobileLocDetlVo.java
@@ -0,0 +1,47 @@
+package com.zy.common.model;
+
+/**
+ * Created by vincent on 2020/6/29
+ */
+public class MobileLocDetlVo {
+    
+    private String locNo;
+
+    private String matnr;
+
+    private String maktx;
+
+    private Double count;
+
+    public String getLocNo() {
+        return locNo;
+    }
+
+    public void setLocNo(String locNo) {
+        this.locNo = locNo;
+    }
+
+    public String getMatnr() {
+        return matnr;
+    }
+
+    public void setMatnr(String matnr) {
+        this.matnr = matnr;
+    }
+
+    public String getMaktx() {
+        return maktx;
+    }
+
+    public void setMaktx(String maktx) {
+        this.maktx = maktx;
+    }
+
+    public Double getCount() {
+        return count;
+    }
+
+    public void setCount(Double count) {
+        this.count = count;
+    }
+}
diff --git a/src/main/java/com/zy/common/model/OutLocDto.java b/src/main/java/com/zy/common/model/OutLocDto.java
index ba007e0..c990d89 100644
--- a/src/main/java/com/zy/common/model/OutLocDto.java
+++ b/src/main/java/com/zy/common/model/OutLocDto.java
@@ -1,5 +1,10 @@
 package com.zy.common.model;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.SpringUtils;
+import com.zy.asrs.entity.LocDetl;
+import com.zy.asrs.service.LocDetlService;
+
 import java.util.List;
 
 /**
@@ -34,4 +39,24 @@
     public void setLocDetlDtos(List<LocDetlDto> locDetlDtos) {
         this.locDetlDtos = locDetlDtos;
     }
+
+    public boolean isAll(){
+        // 鏌ヨ褰撳墠搴撲綅鍙锋墍鏈夌殑搴撳瓨鏄庣粏
+        LocDetlService locDetlService = SpringUtils.getBean(LocDetlService.class);
+        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", this.locNo));
+        if (locDetls == null || locDetls.isEmpty()){
+            return true;
+        }
+        int sameNumber = 0;
+        for (LocDetl locDetl : locDetls) {
+            for (LocDetlDto dto : this.locDetlDtos) {
+                if (dto.getLocDetl().getMatnr().equals(locDetl.getMatnr()) && dto.getCount().equals(locDetl.getAnfme())) {
+                    sameNumber++;
+                    break;
+                }
+            }
+        }
+        return sameNumber == locDetls.size();
+    }
+
 }
diff --git a/src/main/java/com/zy/common/utils/BarcodeUtils.java b/src/main/java/com/zy/common/utils/BarcodeUtils.java
index 707703b..6705f88 100644
--- a/src/main/java/com/zy/common/utils/BarcodeUtils.java
+++ b/src/main/java/com/zy/common/utils/BarcodeUtils.java
@@ -18,8 +18,8 @@
  */
 public class BarcodeUtils {
 
-    private static final int DEFAULT_WIDTH = 264;
-    private static final int DEFAULT_HEIGHT = 48;
+    private static final int DEFAULT_WIDTH = 110;
+    private static final int DEFAULT_HEIGHT = 40;
 
     /**
      * 鏉″舰鐮佺紪鐮�
diff --git a/src/main/java/com/zy/common/utils/QrCode.java b/src/main/java/com/zy/common/utils/QrCode.java
index 5f5f63a..ee63247 100644
--- a/src/main/java/com/zy/common/utils/QrCode.java
+++ b/src/main/java/com/zy/common/utils/QrCode.java
@@ -20,14 +20,18 @@
     private static final String CHARSET = "utf-8";
     private static final String FORMAT_NAME = "JPG";
     // 浜岀淮鐮佸昂瀵�
-    private static final int QRCODE_SIZE = 100;
+    private static final int QRCODE_SIZE = 150;
 
     public static BufferedImage createImg(String content) throws WriterException {
-        ConcurrentHashMap hints = new ConcurrentHashMap();
+        return createImg(content, QRCODE_SIZE, QRCODE_SIZE);
+    }
+
+    public static BufferedImage createImg(String content, Integer wid, Integer hei) throws WriterException {
+        ConcurrentHashMap<EncodeHintType, Object> hints = new ConcurrentHashMap<>();
         hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
         hints.put(EncodeHintType.CHARACTER_SET, CHARSET);
         hints.put(EncodeHintType.MARGIN, 1);
-        BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints);
+        BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, wid, hei, hints);
         int width = bitMatrix.getWidth();
         int height = bitMatrix.getHeight();
         BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
diff --git a/src/main/java/com/zy/common/web/AuthController.java b/src/main/java/com/zy/common/web/AuthController.java
index 1ce49d5..51e204a 100644
--- a/src/main/java/com/zy/common/web/AuthController.java
+++ b/src/main/java/com/zy/common/web/AuthController.java
@@ -115,7 +115,7 @@
     }
 
     @RequestMapping("/menu/auth")
-    @ManagerAuth(memo = "棣栭〉鑿滃崟")
+    @ManagerAuth
     public R menu(){
         // 鑾峰彇鎵�鏈変竴绾ц彍鍗�
         List<Resource> oneLevel = resourceService.selectList(new EntityWrapper<Resource>().eq("level", 1).eq("status", 1).orderBy("sort"));
diff --git a/src/main/java/com/zy/common/web/FileController.java b/src/main/java/com/zy/common/web/FileController.java
index 3074912..37a78dd 100644
--- a/src/main/java/com/zy/common/web/FileController.java
+++ b/src/main/java/com/zy/common/web/FileController.java
@@ -2,16 +2,23 @@
 
 import com.alibaba.excel.EasyExcel;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
 import com.core.common.R;
 import com.zy.asrs.entity.MatCode;
 import com.zy.asrs.service.MatCodeService;
+import com.zy.common.config.AdminInterceptor;
+import com.zy.common.utils.BarcodeUtils;
+import com.zy.common.utils.QrCode;
 import com.zy.common.utils.excel.matcode.MatCodeExcel;
 import com.zy.common.utils.excel.matcode.MatCodeExcelListener;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.imageio.ImageIO;
 import javax.servlet.http.HttpServletResponse;
+import java.awt.image.BufferedImage;
 import java.io.IOException;
 import java.net.URLEncoder;
 import java.util.ArrayList;
@@ -22,7 +29,7 @@
  * Created by vincent on 2019-11-25
  */
 @RestController
-@RequestMapping("excel/")
+@RequestMapping("file/")
 public class FileController {
 
     @Autowired
@@ -62,4 +69,29 @@
         EasyExcel.write(response.getOutputStream(), MatCodeExcel.class).sheet("妯℃澘").doWrite(excels);
     }
 
+    @RequestMapping(value = "/barcode/qrcode/auth")
+//    @ManagerAuth(memo = "鐗╂枡缂栫爜鏉″舰鐮佽幏鍙�(type:1(鏉″舰鐮�);2(浜岀淮鐮�)")
+    public R matCodeBarcode(@RequestParam(defaultValue = "1") Integer type
+                            , @RequestParam String param
+                            , @RequestParam(required = false) Integer width
+                            , @RequestParam(required = false) Integer height
+                            , HttpServletResponse response) throws Exception {
+        AdminInterceptor.cors(response);
+        if (Cools.isEmpty(param)){
+            return R.parse(BaseRes.EMPTY);
+        }
+        BufferedImage img;
+        if (type == 1) {
+            img = BarcodeUtils.encode(param, width, height);
+        } else {
+            img = QrCode.createImg(param, width, height);
+        }
+        if (!ImageIO.write(img, "jpg", response.getOutputStream())) {
+            throw new IOException("Could not write an image of format jpg");
+        }
+        response.getOutputStream().flush();
+        response.getOutputStream().close();
+        return R.ok();
+    }
+
 }
diff --git a/src/main/java/com/zy/common/web/RouterController.java b/src/main/java/com/zy/common/web/RouterController.java
index 4112db7..fb79559 100644
--- a/src/main/java/com/zy/common/web/RouterController.java
+++ b/src/main/java/com/zy/common/web/RouterController.java
@@ -36,4 +36,24 @@
         }
     }
 
+    @RequestMapping("/pda")
+    public void pda(HttpServletResponse response) {
+        try{
+            String redirect = Cools.isEmpty(applicationName)?"/views/pda/login.html":"/"+applicationName+"/views/pda/login.html";
+            response.sendRedirect(redirect);
+        } catch (Exception ex){
+            ex.printStackTrace();
+        }
+    }
+
+    @RequestMapping("/pda/ce")
+    public void pdaCe(HttpServletResponse response) {
+        try{
+            String redirect = Cools.isEmpty(applicationName)?"/views/pdaCe/login.html":"/"+applicationName+"/views/pdaCe/login.html";
+            response.sendRedirect(redirect);
+        } catch (Exception ex){
+            ex.printStackTrace();
+        }
+    }
+
 }
diff --git a/src/main/java/com/zy/system/controller/UserController.java b/src/main/java/com/zy/system/controller/UserController.java
index 57d102e..1e8547c 100644
--- a/src/main/java/com/zy/system/controller/UserController.java
+++ b/src/main/java/com/zy/system/controller/UserController.java
@@ -83,6 +83,8 @@
             return R.error();
         }
         if (null == user.getId()){
+            user.setStatus(1);
+            user.setCreateTime(new Date());
             userService.insert(user);
         } else {
             userService.updateById(user);
@@ -93,6 +95,8 @@
     @RequestMapping(value = "/user/add/auth")
     @ManagerAuth(memo = "绯荤粺鐢ㄦ埛娣诲姞")
     public R add(User user) {
+        user.setStatus(1);
+        user.setCreateTime(new Date());
         userService.insert(user);
         return R.ok();
     }
diff --git a/src/main/java/com/zy/system/entity/User.java b/src/main/java/com/zy/system/entity/User.java
index 7d1285f..4a818ef 100644
--- a/src/main/java/com/zy/system/entity/User.java
+++ b/src/main/java/com/zy/system/entity/User.java
@@ -60,7 +60,7 @@
     private Date createTime;
 
     /**
-     * 鐘舵�� 1: 鍚敤  2: 鍐荤粨  3: 鍒犻櫎  
+     * 鐘舵�� 1: 鍚敤  0: 绂佺敤
      */
     private Integer status;
 
@@ -154,10 +154,8 @@
         switch (this.status){
             case 1:
                 return "鍚敤";
-            case 2:
-                return "鍐荤粨";
-            case 3:
-                return "鍒犻櫎";
+            case 0:
+                return "绂佺敤";
             default:
                 return String.valueOf(this.status);
         }
diff --git a/src/main/resources/UpdateThread.cs b/src/main/resources/UpdateThread.cs
new file mode 100644
index 0000000..bf7d0f4
--- /dev/null
+++ b/src/main/resources/UpdateThread.cs
@@ -0,0 +1,1732 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using DevComponents.DotNetBar.Controls;
+using System.Windows.Forms;
+using System.Drawing;
+//using com.force.json;
+using System.Data;
+using System.Data.SqlClient;
+
+namespace WCS
+{
+    /// <summary>
+    /// 鍥炴姤澶勭悊绾跨▼
+    /// </summary>
+    class UpdateThread
+    {
+        #region 鐢婚潰涓婂悓姝ユ樉绀烘帶浠�
+        public ListViewEx frmdata;
+        delegate void SetTextCallback(string seq, string Errif, string arg_string);
+        #endregion
+
+        Thread trd = null;
+
+        public UpdateThread()
+        {
+            try
+            {
+                trd = new Thread(new ThreadStart(this.ThreadTask));
+                trd.IsBackground = true;
+                trd.Start();
+            }
+            catch (Exception em)
+            {
+                Common.WriteLogFile("WcsError", "UpdateThread/UpdateThread--鍥炴姤绾跨▼鍚姩鍑洪敊:" + em.Message);
+            }
+        }
+
+        #region 閫氳鍙嶉鍚屾鏄剧ず
+        /// <summary>
+        /// 鏄剧ず澶勭悊淇℃伅
+        /// </summary>
+        /// <param name="text"></param>
+        private void DisplayInfo(string seq, string Errif, string arg_string)
+        {
+            if (frmdata == null)
+            {
+                return;
+            }
+            if (frmdata.InvokeRequired)
+            {
+                try
+                {
+                    SetTextCallback d = new SetTextCallback(DisplayInfo);
+                    frmdata.Invoke(d, new object[] { seq, Errif, arg_string });
+                }
+                catch (Exception em)
+                {
+                    Common.WriteLogFile("WcsError", "UpdateThread/DisplayInfo--鍚屾鍥炴姤淇℃伅澶辫触:" + em.Message);
+                }
+            }
+            else
+            {
+                add_dw_log(seq, Errif, arg_string);
+                if (frmdata.Items.Count > 200)
+                {
+                    frmdata.Items.Clear(); ;
+                }
+            }
+
+        }
+
+        /// <summary>
+        /// 娣诲姞ListView鐣岄潰鏄剧ず
+        /// </summary>
+        /// <param name="le">listview</param>
+        /// <param name="seq">闇�瑕�</param>
+        /// <param name="Errif">寮傚父淇℃伅</param>
+        /// <param name="arg_string">鏄剧ず鍐呭</param>
+        public void add_dw_log(string seq, string Errif, string arg_string)
+        {
+            try
+            {
+                ListViewItem lvi = new ListViewItem();
+                lvi.SubItems[0].Text = "銆�" + DateTime.Now.ToString() + "銆�" + seq + arg_string;
+                if (Errif == "N")
+                {
+                    lvi.ForeColor = Color.Black;
+                }
+                else if (Errif == "E")
+                {
+                    lvi.ForeColor = Color.Red;
+                }
+                else if (Errif == "P")
+                {
+                    lvi.ForeColor = Color.Blue;
+                }
+                frmdata.Items.Add(lvi);
+                frmdata.EnsureVisible(frmdata.Items.Count - 1);
+            }
+            catch (Exception em)
+            {
+                ListViewItem lvi = new ListViewItem();
+                lvi.SubItems[0].Text = "銆�" + DateTime.Now.ToString() + "銆�" + seq + arg_string + "寮傚父锛�" + em.Message;
+                frmdata.Items.Add(lvi);
+                Common.WriteLogFile("WcsError", "UpdateThread/add_dw_log--鍥炴姤娣诲姞鐣岄潰鏄剧ず鍑洪敊:" + em.Message);
+            }
+        }
+        #endregion
+
+        #region 涓氬姟澶勭悊
+        /// <summary>
+        /// 鐢熸垚鍑哄簱宸ヤ綔妗�
+        /// </summary>
+        public void ProcOutToWorkData(string seq)
+        {
+            string ls_locno = "";
+            string ls_error_memo = "", sql = "";
+            int li_wrkno = 0, li_io_type = 0, li_stnNo = 0, li_e_stnNo = 0;
+            DateTime ldt_date = System.DateTime.Now;
+            double d_outQty = 0, d_stkQty = 0;
+            int action = 0, prnstatus = 0;
+
+            DisplayInfo(seq, "N", " --澶勭悊鍑哄簱閫氱煡妗o紝鐢熸垚鍑哄簱宸ヤ綔妗�......");
+
+            try
+            {
+                //鏌ユ壘鏈�鏃╀竴鏉″緟鍑哄簱搴撲綅
+                sql = "select top 1 vlpla from cust_wait_pakout where status<>'Y' and nltyp<>'A01' order by status,modi_time";
+                DataView dvLoc = Common.ExecAsrsSelect(sql);
+                if (dvLoc.Count <= 0)
+                {
+                    return;
+                }
+                foreach (DataRowView drow in dvLoc)
+                {
+                    ls_locno = drow[0].ToString();
+                }
+                if (ls_locno == "")
+                {
+                    return;
+                }
+
+                //鏌ヨ搴撲綅鍙锋槸鍚﹀湪搴撶姸鎬侊紝骞舵煡璇㈡潯鐮佸彿
+                sql = "select loc_no,barcode from asr_loc_mast where loc_no='" + ls_locno + "' and loc_sts='F'";
+                string barcode = "";
+                DataView dv = Common.ExecAsrsSelect(sql);
+                if (dv.Count <= 0)
+                {
+                    ls_error_memo = "   " + seq + ".1 搴撲綅" + ls_locno + "涓嶅瓨鍦ㄦ垨闈炲湪搴撶姸鎬侊紝璇锋鏌�";
+                    DisplayInfo("", "E", ls_error_memo);
+                    goto re;
+                }
+                else
+                {
+                    foreach (DataRowView drow in dv)
+                    {
+                        barcode = drow[1].ToString();
+                    }
+                }
+
+                //鏍规嵁搴撲綅鍙锋煡鎵捐搴撲綅鎵�鏈夊嚭搴撹祫鏂�
+                sql = "select lgnum,tanum,tapos,matnr,maktx,werks,vsolm,meins,bname ";
+                sql += " from cust_wait_pakout where status<>'Y' and nltyp<>'A01' and vlpla='" + ls_locno + "' order by status,modi_time";
+                dv = Common.ExecAsrsSelect(sql);
+                if (dv.Count <= 0)
+                {
+                    return;
+                }
+                li_wrkno = Common.GetWrkno(0);
+                string sqlDetl = "", sqlWaitIn = "";
+                foreach (DataRowView drow in dv)
+                {
+                    string lgnum = drow[0].ToString();
+                    string tanum = drow[1].ToString();
+                    string tapos = drow[2].ToString();
+                    string matnr = drow[3].ToString();
+                    string maktx = drow[4].ToString();
+                    string werks = drow[5].ToString();
+                    string vsolm = drow[6].ToString();
+                    string meins = drow[7].ToString();
+                    string bname = drow[8].ToString();
+                    sqlDetl += " insert into asr_wrk_detl(wrk_no,io_time,lgnum,tbnum,tbpos,matnr,maktx,werks,anfme,altme,bname,zpallet) ";
+                    sqlDetl += " values(" + li_wrkno + ",'" + ldt_date + "','" + lgnum + "'," + tanum + "," + tapos + ", ";
+                    sqlDetl += " '" + matnr + "','" + maktx + "','" + werks + "'," + vsolm + ",'" + meins + "','" + bname + "','" + barcode + "');";
+                    sqlWaitIn += " update cust_wait_pakout set status='Y' where lgnum='" + lgnum + "' and tanum=" + tanum + " and tapos=" + tapos + " and vlpla=" + ls_locno + ";";
+                    d_outQty += double.Parse(vsolm);
+                }
+                DisplayInfo("", "P", "   " + seq + ".2 姝e湪澶勭悊寰呭嚭搴撹祫鏂�!搴撲綅:" + ls_locno);
+
+                //鏌ヨ搴撲綅鍙峰搴斿簱瀛樻槑缁嗘�绘暟閲�
+                sql = "select sum(anfme) from asr_loc_detl where loc_no='" + ls_locno + "' ";
+                dv = Common.ExecAsrsSelect(sql);
+                if (dv.Count <= 0)
+                {
+                    ls_error_memo = "   " + seq + ".3 搴撲綅" + ls_locno + "娌℃湁搴撳瓨鏄庣粏锛岃妫�鏌�";
+                    DisplayInfo("", "E", ls_error_memo);
+                    goto re;
+                }
+                else
+                {
+                    foreach (DataRowView drow in dv)
+                    {
+                        d_stkQty += double.Parse(drow[0].ToString());
+                    }
+                }
+
+                int li_crnrow = int.Parse(ls_locno.Substring(0, 2));
+                int li_crnno = (li_crnrow + 1) / 2;
+                string new_loc_sts = "";
+                if (d_outQty < d_stkQty)
+                {
+                    li_io_type = 103;
+                    new_loc_sts = "P";
+                    li_e_stnNo = 4;
+                    li_stnNo = Common.getIoStaNo(li_io_type, li_crnno, li_e_stnNo);
+                    action = 2;         //鍗曠嫭鎵撳嵃
+                    //prnstatus = 0;      //榛樿绛夊緟锛屾嫞鏂欑珯鏇存柊
+                }
+                else if (d_outQty == d_stkQty)
+                {
+                    li_io_type = 101;
+                    new_loc_sts = "R";
+                    li_e_stnNo = 13;
+                    li_stnNo = Common.getIoStaNo(li_io_type, li_crnno, li_e_stnNo);
+                    action = 3;         //鏃㈡墦鍗板張纭
+                    //prnstatus = 0;      //榛樿绛夊緟锛屾嫞鏂欑珯鏇存柊
+                }
+                else
+                {
+                    ls_error_memo = "   " + seq + ".4 搴撲綅" + ls_locno + "閫氱煡鍑哄簱鏁伴噺瓒呭嚭搴撳瓨鏁伴噺锛岃妫�鏌�";
+                    DisplayInfo("", "E", ls_error_memo);
+                    goto re;
+                }
+
+                sqlWaitIn = sqlWaitIn.Replace("update cust_wait_pakout set", "update cust_wait_pakout set action=" + action + ",");
+
+                sql = sqlDetl;
+                sql += "insert into asr_wrk_mast(wrk_no,io_time,wrk_sts,io_type,crn_no,io_pri,source_loc_no,sta_no,source_sta_no,barcode) ";
+                sql += " values(" + li_wrkno + ",'" + ldt_date + "',11," + li_io_type + "," + li_crnno + ",13,'" + ls_locno + "', ";
+                sql += " " + li_e_stnNo + "," + li_stnNo + ",'" + barcode + "'); ";
+                sql += " update asr_loc_mast set loc_sts='" + new_loc_sts + "' where loc_no='" + ls_locno + "'; ";
+                sql += sqlWaitIn;
+                SqlConnection sqlconn = new SqlConnection(Common.sqlcon);
+                sqlconn.Open();
+                SqlTransaction sqltrans = sqlconn.BeginTransaction();
+                SqlCommand sqlcmd = new SqlCommand(sql, sqlconn);
+                sqlcmd.Transaction = sqltrans;
+                try
+                {
+                    sqlcmd.ExecuteNonQuery();
+                    sqltrans.Commit();
+                }
+                catch (SqlException t)
+                {
+                    sqltrans.Rollback();
+                    //sqlcommon.Close();
+                    ls_error_memo = "   " + seq + ".4 鎻掑叆宸ヤ綔涓绘。[asr_wrk_mast]閿欒 !搴撲綅:" + ls_locno + " 寮傚父:" + t.Message;
+                    DisplayInfo("", "E", ls_error_memo);
+                    goto re;
+                }
+                finally
+                {
+                    sqlcmd.Dispose();
+                    sqlconn.Dispose();
+                }
+                return;
+
+            re:
+                sql = "update cust_wait_pakout set status='X',action=" + action + ",modi_time='" + ldt_date + "' where vlpla='" + ls_locno + "'";
+                bool result = Common.ExecAsrsModify(sql);
+                if (!result)
+                {
+                    ls_error_memo = "   " + seq + ".5 鏇存柊鍑哄簱妗eけ璐�!搴撲綅锛�" + ls_locno;
+                    DisplayInfo("", "E", ls_error_memo);
+                }
+            }
+            catch (Exception em)
+            {
+                ls_error_memo = "   " + seq + ".6 澶勭悊寰呭鐞嗘。鐢熸垚鍑哄簱宸ヤ綔妗eけ璐ワ細" + em.Message;
+                DisplayInfo("", "E", ls_error_memo);
+            }
+        }
+
+        /// <summary>
+        /// 鐢熸垚搴撲綅璋冩暣宸ヤ綔妗�
+        /// </summary>
+        public void ProcLocToWorkData(string seq)
+        {
+            string ls_slocno = "", ls_dlocno = "";
+            string ls_error_memo = "", sql = "";
+            int li_wrkno = 0, li_io_type = 0, li_stnNo = 0, li_e_stnNo = 0;
+            DateTime ldt_date = System.DateTime.Now;
+            double d_outQty = 0, d_stkQty = 0;
+
+            DisplayInfo(seq, "N", " --澶勭悊鍑哄簱閫氱煡妗o紝鐢熸垚鍑哄簱宸ヤ綔妗�......");
+
+            try
+            {
+                //鏌ユ壘鏈�鏃╀竴鏉″緟鍑哄簱搴撲綅
+                sql = "select top 1 vlpla,nlpla from cust_wait_pakout where status<>'Y' and nltyp='A01' order by status,modi_time";
+                DataView dvLoc = Common.ExecAsrsSelect(sql);
+                if (dvLoc.Count <= 0)
+                {
+                    return;
+                }
+                foreach (DataRowView drow in dvLoc)
+                {
+                    ls_slocno = drow[0].ToString();
+                    ls_dlocno = drow[1].ToString();
+                }
+                if (ls_slocno == "" || ls_dlocno=="")
+                {
+                    ls_error_memo = "   " + seq + ".1 鍑哄簱閫氱煡妗f簮搴撲綅涓虹┖[cust_wait_pakout]閿欒 !搴撲綅:" + ls_slocno;
+                    DisplayInfo("", "E", ls_error_memo);
+                    goto re;
+                }
+
+                //鏌ヨ鐩爣搴撲綅鐘舵�侊紝濡傛灉涓虹┖琛ㄧず搴撲綅宸茶浆锛屽鏋滃湪搴撹〃绀烘簮搴撲綅鍑哄簱锛岀洰鏍囧簱浣嶅苟鏉匡紝濡傛灉涓嶅湪搴擄紝鍒欐姤璀﹀仠姝㈡墽琛�
+                string loc_sts = "", barcoded = "";
+                sql = "select loc_sts,barcode from asr_loc_mast where loc_no='" + ls_dlocno + "' ";
+                DataView dv = Common.ExecAsrsSelect(sql);
+                if (dv.Count <= 0)
+                {
+                    ls_error_memo = "   " + seq + ".2 鐩爣搴撲綅" + ls_dlocno + "涓嶅瓨鍦紝璇锋鏌�";
+                    DisplayInfo("", "E", ls_error_memo);
+                    goto re;
+                }
+                else
+                {
+                    foreach (DataRowView drow in dv)
+                    {
+                        loc_sts = drow[0].ToString();
+                        barcoded = drow[1].ToString();
+                    }
+                }
+
+                if (loc_sts == "O")
+                { //搴撲綅绉昏浆
+                    sql = "select lgnum,tbnum,tbpos,matnr,maktx,werks,anfme,altme,bname ";
+                    sql += " from asr_loc_detl where loc_no='" + ls_slocno + "' order by matnr,modi_time";
+                    dv = Common.ExecAsrsSelect(sql);
+                    if (dv.Count <= 0)
+                    {
+                        return;
+                    }
+                    li_wrkno = Common.GetWrkno(0);
+                    string sqlDetl = "", sqlWaitIn = "";
+                    foreach (DataRowView drow in dv)
+                    {
+                        string lgnum = drow[0].ToString();
+                        string tanum = drow[1].ToString();
+                        string tapos = drow[2].ToString();
+                        string matnr = drow[3].ToString();
+                        string maktx = drow[4].ToString();
+                        string werks = drow[5].ToString();
+                        string vsolm = drow[6].ToString();
+                        string meins = drow[7].ToString();
+                        string bname = drow[8].ToString();
+                        sqlDetl += " insert into asr_wrk_detl(wrk_no,io_time,lgnum,tbnum,tbpos,matnr,maktx,werks,anfme,altme,bname) ";
+                        sqlDetl += " values(" + li_wrkno + ",'" + ldt_date + "','" + lgnum + "'," + tanum + "," + tapos + ", ";
+                        sqlDetl += " '" + matnr + "','" + maktx + "','" + werks + "'," + vsolm + ",'" + meins + "','" + bname + "');";
+                        sqlWaitIn += " update cust_wait_pakout set status='Y' where nltyp='A01' and vlpla='" + ls_slocno + "' and nlpla='" + ls_dlocno + "';";
+                    }
+                    DisplayInfo("", "P", "   " + seq + ".3 姝e湪澶勭悊寰呭嚭搴撹祫鏂�!搴撲綅:" + ls_slocno);
+
+                    //鏌ヨ搴撲綅鍙锋槸鍚﹀湪搴撶姸鎬侊紝骞舵煡璇㈡潯鐮佸彿
+                    sql = "select loc_no,barcode from asr_loc_mast where loc_no='" + ls_slocno + "' and loc_sts='F'";
+                    string barcode = "";
+                    dv = Common.ExecAsrsSelect(sql);
+                    if (dv.Count <= 0)
+                    {
+                        ls_error_memo = "   " + seq + ".4 婧愬簱浣�" + ls_slocno + "涓嶅瓨鍦ㄦ垨闈炲湪搴撶姸鎬侊紝璇锋鏌�";
+                        DisplayInfo("", "E", ls_error_memo);
+                        goto re;
+                    }
+                    else
+                    {
+                        foreach (DataRowView drow in dv)
+                        {
+                            barcode = drow[1].ToString();
+                        }
+                    }
+                    int li_crnrow = int.Parse(ls_slocno.Substring(0, 2));
+                    int li_crnno = (li_crnrow + 1) / 2;
+                    li_io_type = 11;
+
+                    sql = sqlDetl;
+                    sql += "insert into asr_wrk_mast(wrk_no,io_time,wrk_sts,io_type,crn_no,io_pri,source_loc_no,loc_no,barcode,empty_mk) ";
+                    sql += " values(" + li_wrkno + ",'" + ldt_date + "',11," + li_io_type + "," + li_crnno + ",13,'" + ls_slocno + "', ";
+                    sql += " '" + ls_dlocno + "','" + barcode + "','N'); ";
+                    sql += " update asr_loc_mast set loc_sts='R' where loc_no='" + ls_slocno + "'; ";
+                    sql += " update asr_loc_mast set loc_sts='S' where loc_no='" + ls_dlocno + "'; ";
+                    sql += sqlWaitIn;
+                    SqlConnection sqlconn = new SqlConnection(Common.sqlcon);
+                    sqlconn.Open();
+                    SqlTransaction sqltrans = sqlconn.BeginTransaction();
+                    SqlCommand sqlcmd = new SqlCommand(sql, sqlconn);
+                    sqlcmd.Transaction = sqltrans;
+                    try
+                    {
+                        sqlcmd.ExecuteNonQuery();
+                        sqltrans.Commit();
+                    }
+                    catch (SqlException t)
+                    {
+                        sqltrans.Rollback();
+                        //sqlcommon.Close();
+                        ls_error_memo = "   " + seq + ".5 鎻掑叆宸ヤ綔涓绘。[asr_wrk_mast]閿欒 !搴撲綅:" + ls_slocno + " 寮傚父:" + t.Message;
+                        DisplayInfo("", "E", ls_error_memo);
+                        goto re;
+                    }
+                    finally
+                    {
+                        sqlcmd.Dispose();
+                        sqlconn.Dispose();
+                    }
+                }
+                else if (loc_sts == "F")
+                {//鐩爣搴撲綅骞舵澘
+                    //婧愬簱浣嶅嚭搴�
+                    string sqlDetld = "";
+                    int li_wrknod = 0;
+                    int action = 0;
+                    sql = "select lgnum,tanum,tapos,matnr,maktx,werks,vsolm,meins,bname ";
+                    sql += " from cust_wait_pakout where status<>'Y' and nltyp='A01' and vlpla='" + ls_slocno + "' and nlpla='" + ls_dlocno + "' order by status,modi_time";
+                    dv = Common.ExecAsrsSelect(sql);
+                    if (dv.Count <= 0)
+                    {
+                        return;
+                    }
+                    li_wrkno = Common.GetWrkno(0);
+                    li_wrknod = Common.GetWrkno(0);
+                    string sqlDetl = "", sqlWaitIn = "";
+                    foreach (DataRowView drow in dv)
+                    {
+                        string lgnum = drow[0].ToString();
+                        string tanum = drow[1].ToString();
+                        string tapos = drow[2].ToString();
+                        string matnr = drow[3].ToString();
+                        string maktx = drow[4].ToString();
+                        string werks = drow[5].ToString();
+                        string vsolm = drow[6].ToString();
+                        string meins = drow[7].ToString();
+                        string bname = drow[8].ToString();
+                        sqlDetl += " insert into asr_wrk_detl(wrk_no,io_time,lgnum,tbnum,tbpos,matnr,maktx,werks,anfme,altme,bname) ";
+                        sqlDetl += " values(" + li_wrkno + ",'" + ldt_date + "','" + lgnum + "'," + tanum + "," + tapos + ", ";
+                        sqlDetl += " '" + matnr + "','" + maktx + "','" + werks + "'," + vsolm + ",'" + meins + "','" + bname + "');";
+
+                        sqlDetld += " insert into asr_wrk_detl(wrk_no,io_time,lgnum,tbnum,tbpos,matnr,maktx,werks,anfme,altme,bname) ";
+                        sqlDetld += " values(" + li_wrknod + ",'" + ldt_date + "','" + lgnum + "'," + tanum + "," + tapos + ", ";
+                        sqlDetld += " '" + matnr + "','" + maktx + "','" + werks + "'," + vsolm + ",'" + meins + "','" + bname + "');";
+
+                        sqlWaitIn += " update cust_wait_pakout set status='Y' where lgnum='" + lgnum + "' and tanum=" + tanum + " and tapos=" + tapos + " and vlpla=" + ls_slocno + ";";
+                        d_outQty += double.Parse(vsolm);
+                    }
+                    DisplayInfo("", "P", "   " + seq + ".6 姝e湪澶勭悊寰呭嚭搴撹祫鏂�!搴撲綅:" + ls_slocno);
+
+                    //鏌ヨ搴撲綅鍙锋槸鍚﹀湪搴撶姸鎬侊紝骞舵煡璇㈡潯鐮佸彿
+                    sql = "select loc_no,barcode from asr_loc_mast where loc_no='" + ls_slocno + "' and loc_sts='F'";
+                    string barcode = "";
+                    dv = Common.ExecAsrsSelect(sql);
+                    if (dv.Count <= 0)
+                    {
+                        ls_error_memo = "   " + seq + ".7 婧愬簱浣�" + ls_slocno + "涓嶅瓨鍦ㄦ垨闈炲湪搴撶姸鎬侊紝璇锋鏌�";
+                        DisplayInfo("", "E", ls_error_memo);
+                        goto re;
+                    }
+                    else
+                    {
+                        foreach (DataRowView drow in dv)
+                        {
+                            barcode = drow[1].ToString();
+                        }
+                    }
+
+                    //鏌ヨ搴撲綅鍙峰搴斿簱瀛樻槑缁嗘�绘暟閲�
+                    sql = "select sum(anfme) from asr_loc_detl where loc_no='" + ls_slocno + "' ";
+                    dv = Common.ExecAsrsSelect(sql);
+                    if (dv.Count <= 0)
+                    {
+                        ls_error_memo = "   " + seq + ".8 搴撲綅" + ls_slocno + "娌℃湁搴撳瓨鏄庣粏锛岃妫�鏌�";
+                        DisplayInfo("", "E", ls_error_memo);
+                        goto re;
+                    }
+                    else
+                    {
+                        foreach (DataRowView drow in dv)
+                        {
+                            d_stkQty += double.Parse(drow[0].ToString());
+                        }
+                    }
+
+                    int li_crnrow = int.Parse(ls_slocno.Substring(0, 2));
+                    int li_crnno = (li_crnrow + 1) / 2;
+                    string new_loc_sts = "";
+                    if (d_outQty < d_stkQty)
+                    {
+                        li_io_type = 103;
+                        new_loc_sts = "P";
+                        li_e_stnNo = 4;
+                        li_stnNo = Common.getIoStaNo(li_io_type, li_crnno, li_e_stnNo);
+                        action = 2;
+                    }
+                    else if (d_outQty == d_stkQty)
+                    {
+                        li_io_type = 101;
+                        new_loc_sts = "R";
+                        li_e_stnNo = 13;
+                        li_stnNo = Common.getIoStaNo(li_io_type, li_crnno, li_e_stnNo);
+                        action = 3;
+                    }
+                    else
+                    {
+                        ls_error_memo = "   " + seq + ".9 搴撲綅" + ls_slocno + "閫氱煡鍑哄簱鏁伴噺瓒呭嚭搴撳瓨鏁伴噺锛岃妫�鏌�";
+                        DisplayInfo("", "E", ls_error_memo);
+                        goto re;
+                    }
+
+                    int li_crnrowd = int.Parse(ls_dlocno.Substring(0, 2));
+                    int li_crnnod = (li_crnrowd + 1) / 2;
+                    int li_io_typed = 104;
+                    int li_e_stnNod = 4;
+                    int li_stnNod = Common.getIoStaNo(li_io_typed, li_crnnod, li_e_stnNod);
+
+                    sqlWaitIn = sqlWaitIn.Replace("update cust_wait_pakout set", "update cust_wait_pakout set action=" + action + ",");
+
+                    sql = sqlDetl;
+                    sql += "insert into asr_wrk_mast(wrk_no,io_time,wrk_sts,io_type,crn_no,io_pri,source_loc_no,sta_no,source_sta_no,barcode) ";
+                    sql += " values(" + li_wrkno + ",'" + ldt_date + "',11," + li_io_type + "," + li_crnno + ",13,'" + ls_slocno + "', ";
+                    sql += " " + li_e_stnNo + "," + li_stnNo + ",'" + barcode + "'); ";
+                    sql += sqlDetld;
+                    sql += "insert into asr_wrk_mast(wrk_no,io_time,wrk_sts,io_type,crn_no,io_pri,source_loc_no,sta_no,source_sta_no,barcode) ";
+                    sql += " values(" + li_wrknod + ",'" + ldt_date + "',11," + li_io_typed + "," + li_crnnod + ",13,'" + ls_dlocno + "', ";
+                    sql += " " + li_e_stnNod + "," + li_stnNod + ",'" + barcoded + "'); ";
+                    sql += " update asr_loc_mast set loc_sts='" + new_loc_sts + "' where loc_no='" + ls_slocno + "'; ";
+                    sql += " update asr_loc_mast set loc_sts='P' where loc_no='" + ls_dlocno + "'; ";
+                    sql += sqlWaitIn;
+                    SqlConnection sqlconn = new SqlConnection(Common.sqlcon);
+                    sqlconn.Open();
+                    SqlTransaction sqltrans = sqlconn.BeginTransaction();
+                    SqlCommand sqlcmd = new SqlCommand(sql, sqlconn);
+                    sqlcmd.Transaction = sqltrans;
+                    try
+                    {
+                        sqlcmd.ExecuteNonQuery();
+                        sqltrans.Commit();
+                    }
+                    catch (SqlException t)
+                    {
+                        sqltrans.Rollback();
+                        //sqlcommon.Close();
+                        ls_error_memo = "   " + seq + ".10 鎻掑叆宸ヤ綔涓绘。[asr_wrk_mast]閿欒 !搴撲綅:" + ls_slocno + " 寮傚父:" + t.Message;
+                        DisplayInfo("", "E", ls_error_memo);
+                        goto re;
+                    }
+                    finally
+                    {
+                        sqlcmd.Dispose();
+                        sqlconn.Dispose();
+                    }
+                }
+                else
+                {
+                    ls_error_memo = "   " + seq + ".11 鐩爣搴撲綅" + ls_dlocno + "涓嶆槸鍦ㄥ簱鎴栫┖搴撲綅鐘舵�侊紝璇锋鏌�";
+                    DisplayInfo("", "E", ls_error_memo);
+                    goto re;
+                }
+                return;
+
+            re:
+                sql = "update cust_wait_pakout set status='X',modi_time='" + ldt_date + "' where vlpla='" + ls_slocno + "'";
+                bool result = Common.ExecAsrsModify(sql);
+                if (!result)
+                {
+                    ls_error_memo = "   " + seq + ".12 鏇存柊鍑哄簱妗eけ璐�!搴撲綅锛�" + ls_slocno;
+                    DisplayInfo("", "E", ls_error_memo);
+                }
+            }
+            catch (Exception em)
+            {
+                ls_error_memo = "   " + seq + ".13 澶勭悊寰呭鐞嗘。鐢熸垚鍑哄簱宸ヤ綔妗eけ璐ワ細" + em.Message;
+                DisplayInfo("", "E", ls_error_memo);
+            }
+        }
+
+        /// <summary>
+        /// 鐢熸垚鐩樼偣宸ヤ綔妗�
+        /// </summary>
+        public void ProcCheckToWorkData(string seq)
+        {
+            string ls_locno = "";
+            string ls_error_memo = "", sql = "";
+            int li_wrkno = 0, li_io_type = 0, li_stnNo = 0, li_e_stnNo = 0;
+            DateTime ldt_date = System.DateTime.Now;
+            int type = 1;
+
+            DisplayInfo(seq, "N", " --澶勭悊鐩樼偣閫氱煡妗o紝鐢熸垚鐩樼偣宸ヤ綔妗�......");
+
+            try
+            {
+                //鏌ユ壘鏈�鏃╀竴鏉″緟鍑哄簱搴撲綅
+                sql = "select top 1 lgpla from cust_wait_check where status<>'Y' order by status,modi_time";
+                DataView dvLoc = Common.ExecAsrsSelect(sql);
+                if (dvLoc.Count <= 0)
+                {
+                    return;
+                }
+                foreach (DataRowView drow in dvLoc)
+                {
+                    ls_locno = drow[0].ToString();
+                }
+                if (ls_locno == "")
+                {
+                    return;
+                }
+
+                //鏌ヨ搴撲綅鍙锋槸鍚﹀湪搴撶姸鎬侊紝骞舵煡璇㈡潯鐮佸彿
+                sql = "select loc_no,barcode from asr_loc_mast where loc_no='" + ls_locno + "' and loc_sts='F'";
+                string barcode = "";
+                DataView dv = Common.ExecAsrsSelect(sql);
+                if (dv.Count <= 0)
+                {
+                    ls_error_memo = "   " + seq + ".2 搴撲綅" + ls_locno + "涓嶅瓨鍦ㄦ垨闈炲湪搴撶姸鎬侊紝璇锋鏌�";
+                    DisplayInfo("", "E", ls_error_memo);
+                    goto re;
+                }
+                else
+                {
+                    foreach (DataRowView drow in dv)
+                    {
+                        barcode = drow[1].ToString();
+                    }
+                }
+
+                //鏍规嵁搴撲綅鍙锋煡鎵捐搴撲綅鎵�鏈夊嚭搴撹祫鏂�
+                sql = "select a.lgnum,a.ivnum,a.ivpos,b.matnr,b.maktx,b.altme,b.werks ";
+                sql += " from cust_wait_check a, asr_loc_detl b ";
+                sql += " where a.status<>'Y' and a.lgpla='" + ls_locno + "' and a.matnr=b.matnr and lgpla=b.loc_no and io_status='N'";
+                sql += " order by a.status,a.modi_time";
+                dv = Common.ExecAsrsSelect(sql);
+                if (dv == null || dv.Count <= 0)
+                {
+                    sql = "select b.lgnum,b.tbnum,b.tbpos,b.matnr,b.maktx,b.altme,b.werks ";
+                    sql += " from cust_wait_check a, asr_loc_detl b ";
+                    sql += " where a.status<>'Y' and a.lgpla='" + ls_locno + "' and a.lgpla=b.loc_no and io_status='N'";
+                    sql += " order by a.status,a.modi_time";
+                    dv = Common.ExecAsrsSelect(sql);
+                    if (dv == null || dv.Count <= 0)
+                    {
+                        ls_error_memo = "   " + seq + ".3 鏌ヨ搴撳瓨鏄庣粏[asr_loc_detl]娌℃湁 !搴撲綅:" + ls_locno;
+                        DisplayInfo("", "E", ls_error_memo);
+                        goto re;
+                    }
+                    type = 2;
+                    //return;
+                }
+                li_wrkno = Common.GetWrkno(0);
+                string sqlDetl = "", sqlWaitIn = "";
+                foreach (DataRowView drow in dv)
+                {
+                    string lgnum = drow[0].ToString();
+                    string tanum = drow[1].ToString();
+                    string tapos = drow[2].ToString();
+                    string matnr = drow[3].ToString();
+                    string maktx = drow[4].ToString();
+                    string altme = drow[5].ToString();
+                    string werks = drow[6].ToString();
+                    sqlDetl += " insert into asr_wrk_detl(wrk_no,io_time,lgnum,tbnum,tbpos,matnr,maktx,altme,werks,zpallet) ";
+                    sqlDetl += " values(" + li_wrkno + ",'" + ldt_date + "','" + lgnum + "'," + tanum + "," + tapos + ", ";
+                    sqlDetl += " '" + matnr + "','" + maktx + "','" + altme + "','" + werks + "','" + barcode + "');";
+                    if (type == 1)
+                    {
+                        sqlWaitIn += " update cust_wait_check set status='Y' where lgnum='" + lgnum + "' and ivnum=" + tanum + " and ivpos=" + tapos + ";";
+                    }
+                    else
+                    {
+                        sqlWaitIn += " update cust_wait_check set status='Y' where lgpla='" + ls_locno + "';";
+                    }
+                }
+                DisplayInfo("", "P", "   " + seq + ".1 姝e湪澶勭悊寰呯洏鐐硅祫鏂�!搴撲綅:" + ls_locno);
+
+                int li_crnrow = int.Parse(ls_locno.Substring(0, 2));
+                int li_crnno = (li_crnrow + 1) / 2;
+                li_io_type = 107;
+                li_e_stnNo = 4;
+                li_stnNo = Common.getIoStaNo(li_io_type, li_crnno, li_e_stnNo);
+
+                sql = sqlDetl;
+                sql += "insert into asr_wrk_mast(wrk_no,io_time,wrk_sts,io_type,crn_no,io_pri,source_loc_no,sta_no,source_sta_no,barcode) ";
+                sql += " values(" + li_wrkno + ",'" + ldt_date + "',11," + li_io_type + "," + li_crnno + ",13,'" + ls_locno + "', ";
+                sql += " " + li_e_stnNo + "," + li_stnNo + ",'" + barcode + "'); ";
+                sql += " update asr_loc_mast set loc_sts='P' where loc_no='" + ls_locno + "'; ";
+                sql += sqlWaitIn;
+                SqlConnection sqlconn = new SqlConnection(Common.sqlcon);
+                sqlconn.Open();
+                SqlTransaction sqltrans = sqlconn.BeginTransaction();
+                SqlCommand sqlcmd = new SqlCommand(sql, sqlconn);
+                sqlcmd.Transaction = sqltrans;
+                try
+                {
+                    sqlcmd.ExecuteNonQuery();
+                    sqltrans.Commit();
+                }
+                catch (SqlException t)
+                {
+                    sqltrans.Rollback();
+                    //sqlcommon.Close();
+                    ls_error_memo = "   " + seq + ".3 鎻掑叆宸ヤ綔涓绘。[asr_wrk_mast]閿欒 !搴撲綅:" + ls_locno + " 寮傚父:" + t.Message;
+                    DisplayInfo("", "E", ls_error_memo);
+                    goto re;
+                }
+                finally
+                {
+                    sqlcmd.Dispose();
+                    sqlconn.Dispose();
+                }
+                return;
+
+            re:
+                sql = "update cust_wait_check set status='X',modi_time='" + ldt_date + "' where lgpla='" + ls_locno + "'";
+                bool result = Common.ExecAsrsModify(sql);
+                if (!result)
+                {
+                    ls_error_memo = "   " + seq + ".4 鏇存柊鐩樼偣妗eけ璐�!搴撲綅锛�" + ls_locno;
+                    DisplayInfo("", "E", ls_error_memo);
+                }
+            }
+            catch (Exception em)
+            {
+                ls_error_memo = "   " + seq + ".5 澶勭悊鐩樼偣閫氱煡妗g敓鎴愮洏鐐瑰伐浣滄。澶辫触锛�" + em.Message;
+                DisplayInfo("", "E", ls_error_memo);
+            }
+        }
+
+        /// <summary>
+        /// 澶勭悊宸ヤ綔妗d腑宸ヤ綔鐘舵�佷负4鍜�14銆�6鐨勮祫鏂欙紝鏇存柊搴撳瓨妗c�佸緟澶勭悊妗�
+        /// </summary>
+        public void ProcWorkMast(string seq)
+        {
+            string ls_error_memo = "", sql = "", ls_barcode = "";
+            int li_wrk_no = 0, li_wrk_sts = 0, li_io_type = 0, li_sta_no = 0, li_source_sta_no = 0;//, li_wrk_model = 1;
+            string ls_loc_no = "", ls_source_loc_no = "";//, ls_wmsId = "", ls_boxId = "";
+            DateTime ldt_date = System.DateTime.Now, ldt_io_time;
+            string ls_sheet_no = "", ls_empty_mk = "", ls_full_mk = "", ls_online_yn = "";
+            int li_io_pri = 0, li_whs_type;
+            DisplayInfo(seq, "N", "--澶勭悊宸ヤ綔妗� (status=4,14)......");
+            try
+            {
+                try
+                {
+                    DataView dv = Common.ExecAsrsSelect("select getdate() from sys_dual");
+                    foreach (System.Data.DataRowView drow in dv)
+                    {
+                        ldt_date = Convert.ToDateTime(drow[0]);
+                    }
+                }
+                catch (SqlException)
+                {
+                    return;
+                }
+                sql = "select wrk_no,sheet_no,wrk_sts,io_type,io_pri,empty_mk," +
+                      " io_time,loc_no,sta_no,source_sta_no,source_loc_no,whs_type,online_yn,barcode" +
+                      " from dbo.asr_wrk_mast where ((wrk_sts = 4 Or wrk_sts = 14 ) and io_type <> 103 and io_type <> 104 and io_type <> 107 ) or (wrk_sts = 2 and io_type=6)" +
+                      " order by upd_mk,io_time,wrk_no";
+                DataView dv_wrkmast = Common.ExecAsrsSelect(sql);
+                if (dv_wrkmast == null || dv_wrkmast.Count < 1)
+                {
+                    DisplayInfo("", "N", "   " + seq + ".1 宸ヤ綔妗� [asr_wrk_mast] 娌℃湁璧勬枡!");
+                    return;
+                }
+                foreach (DataRowView drow_wrkmast in dv_wrkmast)
+                {
+                    li_wrk_no = Convert.ToInt32(drow_wrkmast[0]);
+                    ls_sheet_no = drow_wrkmast[1].ToString();
+                    li_wrk_sts = Convert.ToInt32(drow_wrkmast[2]);
+                    li_io_type = Convert.ToInt32(drow_wrkmast[3]);
+                    li_io_pri = Convert.ToInt32(drow_wrkmast[4]);
+                    ls_empty_mk = drow_wrkmast[5].ToString();
+                    ldt_io_time = Convert.ToDateTime(drow_wrkmast[6]);
+                    ls_loc_no = drow_wrkmast[7].ToString();
+                    li_sta_no = Convert.ToInt32(drow_wrkmast[8]);
+                    li_source_sta_no = Convert.ToInt32(drow_wrkmast[9]);
+                    ls_source_loc_no = drow_wrkmast[10].ToString();
+                    //li_whs_type = Convert.ToInt32(drow_wrkmast[11]);
+                    //ls_full_mk = drow_wrkmast[12].ToString();
+                    ls_online_yn = drow_wrkmast[12].ToString();
+                    ls_barcode = drow_wrkmast[13].ToString();
+
+                    DisplayInfo("", "P", "   " + seq + ".2 澶勭悊宸ヤ綔妗�:" + li_wrk_no.ToString());
+                    SqlConnection sqlconn = new SqlConnection(Common.sqlcon);
+                    sqlconn.Open();
+                    SqlTransaction sqltrans = sqlconn.BeginTransaction();
+                    if (li_wrk_sts == 4)
+                    {
+                        switch (li_io_type)
+                        {
+                            #region 绌烘墭鐩樺叆搴�
+                            case 10:
+                                sql = "update asr_loc_mast set loc_sts='D',io_time='" + ldt_date + "',modi_time='" + ldt_date + "'";
+                                sql += " where loc_no='" + ls_loc_no + "' and (loc_sts = 'S' Or loc_sts = 'Q')";
+                                SqlCommand cmd_10 = new SqlCommand(sql, sqlconn);
+                                cmd_10.Transaction = sqltrans;
+                                try
+                                {
+                                    cmd_10.ExecuteNonQuery();
+                                }
+                                catch (SqlException t)
+                                {
+                                    sqltrans.Rollback();
+                                    cmd_10.Dispose();
+                                    sqlconn.Dispose();
+                                    ls_error_memo = "   " + seq + ".3 鍏ュ簱锛嶆洿鏂板簱浣嶇姸鎬佸紓甯� [asr_loc_mast] !宸ヤ綔鍙�:" + li_wrk_no.ToString() + "  搴撲綅鍙�:" + ls_loc_no + " 寮傚父:" + t.Message;
+                                    DisplayInfo("", "E", ls_error_memo);
+                                    goto re;
+                                }
+                                break;
+                            #endregion
+                            #region 鍏ㄦ澘鍏ュ簱
+                            case 1:
+                                ///妫�鏌ュ簱瀛樻槑缁嗘。鏄惁宸插瓨鍦ㄦ暟鎹�
+                                int li_count1 = 0;
+                                sql = "";
+                                try
+                                {
+                                    li_count1 = Common.ExecAsrsSelect1("select count(*) from asr_loc_detl where loc_no ='" + ls_loc_no + "'");
+
+                                }
+                                catch (Exception em)
+                                {
+                                    ls_error_memo = "   " + seq + ".4 鏌ヨ搴撳瓨鏄庣粏[asr_loc_detl]鍑洪敊!宸ヤ綔鍙�:" + li_wrk_no.ToString() + "!" + em.Message;
+                                    DisplayInfo("", "E", ls_error_memo);
+                                    goto re;
+                                }
+
+                                ///鏍规嵁宸ヤ綔鍙凤紝鏌ヨ宸ヤ綔鏄庣粏妗g墿鏂欑紪鐮�
+                                string sqlDetl = "";
+                                string sqlWaitIn = "";
+                                sql = "select lgnum,tbnum,tbpos,zmatid,matnr,maktx,werks,anfme,altme,zpallet,bname from asr_wrk_detl where wrk_no=" + li_wrk_no;
+                                DataView dv_wrkdetl = Common.ExecAsrsSelect(sql);
+                                if (dv_wrkdetl == null || dv_wrkdetl.Count < 1)
+                                {
+                                    DisplayInfo("", "E", "   " + seq + ".5 宸ヤ綔鏄庣粏妗� [asr_wrk_detl] 娌℃湁璧勬枡!");
+                                    return;
+                                }
+                                foreach (DataRowView drow in dv_wrkdetl)
+                                {
+                                    string lgnum = "", tbnum = "", tbpos = "", zmatid = "", matnr = "", maktx = "", werks = "", anfme = "", altme = "", zpallet = "", bname = "";
+                                    lgnum = drow[0].ToString();
+                                    tbnum = drow[1].ToString();
+                                    tbpos = drow[2].ToString();
+                                    zmatid = drow[3].ToString();
+                                    matnr = drow[4].ToString();
+                                    maktx = drow[5].ToString();
+                                    werks = drow[6].ToString();
+                                    anfme = drow[7].ToString();
+                                    altme = drow[8].ToString();
+                                    zpallet = drow[9].ToString();
+                                    bname = drow[10].ToString();
+
+                                    string sqlLocDetl = "select anfme from asr_loc_detl where loc_no='" + ls_loc_no + "' and matnr='" + matnr + "'";
+                                    DataView dvLocDetl = Common.ExecAsrsSelect(sqlLocDetl);
+                                    if (dvLocDetl != null)
+                                    {
+                                        if (dvLocDetl.Count > 0)
+                                        {//搴撳瓨宸叉湁锛屾洿鏂版暟閲�
+                                            sqlDetl = " update asr_loc_detl set anfme=anfme+" + anfme + " where loc_no='" + ls_loc_no + "' and matnr='" + matnr + "'; ";
+                                            Common.ExecAsrsModify(sqlDetl);
+                                        }
+                                        else
+                                        {//搴撳瓨娌℃湁锛屾彃鍏�
+                                            sqlDetl = " insert into asr_loc_detl(loc_no,lgnum,tbnum,tbpos,zmatid,matnr,maktx,werks,anfme,altme,zpallet,bname) ";
+                                            sqlDetl += " values('" + ls_loc_no + "','" + lgnum + "'," + tbnum + "," + tbpos + ",'" + zmatid + "', ";
+                                            sqlDetl += " '" + matnr + "','" + maktx + "','" + werks + "'," + anfme + ",'" + altme + "','" + ls_barcode + "','" + bname + "');";
+                                            Common.ExecAsrsModify(sqlDetl);
+                                        }
+                                    }
+                                    sqlWaitIn += " update cust_wait_pakin set io_status='Y' where lgnum='" + lgnum + "' and tbnum=" + tbnum + " and tbpos=" + tbpos + " and zmatid='" + zmatid + "';";
+                                }
+
+                                ///鏇存柊搴撳瓨淇℃伅锛屾彃鍏ュ簱瀛樻槑缁嗘。锛屽苟鏇存柊搴撳瓨涓绘。
+                                sql = "";
+                                if (li_count1 > 0)
+                                {
+                                    sql += "delete from asr_loc_detl where loc_no ='" + ls_loc_no + "';";
+                                }
+                                sql += " update asr_loc_mast set loc_sts='F',io_time='" + ldt_date + "',modi_time='" + ldt_date + "',barcode='" + ls_barcode + "'";
+                                sql += " where loc_no='" + ls_loc_no + "' and loc_sts = 'S';";
+                                //sql += sqlDetl;
+                                sql += sqlWaitIn;
+
+                                SqlCommand cmd_1 = new SqlCommand(sql, sqlconn);
+                                cmd_1.Transaction = sqltrans;
+                                try
+                                {
+                                    cmd_1.ExecuteNonQuery();
+                                }
+                                catch (SqlException t)
+                                {
+                                    sqltrans.Rollback();
+                                    cmd_1.Dispose();
+                                    sqlconn.Dispose();
+                                    ls_error_memo = "   " + seq + ".6 鍏ュ簱锛嶆洿鏂板簱瀛樺紓甯� [asr_loc_mast] !宸ヤ綔鍙�:" + li_wrk_no.ToString() + "  搴撲綅鍙�:" + ls_loc_no + " !" + t.Message;
+                                    DisplayInfo("", "E", ls_error_memo);
+                                    goto re;
+                                }
+                                break;
+                            #endregion
+                            #region 鎷f枡鍐嶅叆搴�
+                            case 53:
+                                ///鏍规嵁宸ヤ綔鍙凤紝鏌ヨ宸ヤ綔鏄庣粏妗g墿鏂欑紪鐮�
+                                sqlDetl = "";
+                                sqlWaitIn = "";
+                                sql = "select lgnum,tbnum,tbpos,zmatid,matnr,maktx,werks,anfme,altme,zpallet,bname from asr_wrk_detl where wrk_no=" + li_wrk_no;
+                                DataView dv_wrkdetl53 = Common.ExecAsrsSelect(sql);
+                                if (dv_wrkdetl53 == null || dv_wrkdetl53.Count < 1)
+                                {
+                                    DisplayInfo("", "E", "   " + seq + ".6 宸ヤ綔鏄庣粏妗� [asr_wrk_detl] 娌℃湁璧勬枡!");
+                                    return;
+                                }
+                                foreach (DataRowView drow in dv_wrkdetl53)
+                                {
+                                    string lgnum = "", tbnum = "", tbpos = "", zmatid = "", matnr = "", maktx = "", werks = "", anfme = "", altme = "", zpallet = "", bname = "";
+                                    lgnum = drow[0].ToString();
+                                    tbnum = drow[1].ToString();
+                                    tbpos = drow[2].ToString();
+                                    zmatid = drow[3].ToString();
+                                    matnr = drow[4].ToString();
+                                    maktx = drow[5].ToString();
+                                    werks = drow[6].ToString();
+                                    anfme = drow[7].ToString();
+                                    altme = drow[8].ToString();
+                                    zpallet = drow[9].ToString();
+                                    bname = drow[10].ToString();
+                                    sqlDetl += " update asr_loc_detl set anfme=anfme-" + anfme + " where loc_no='" + ls_loc_no + "' and matnr='" + matnr + "'";
+                                    sqlWaitIn += " update cust_wait_pakout set io_status='Y' where lgnum='" + lgnum + "' and tanum=" + tbnum + " and tapos=" + tbpos + " and matnr=" + matnr + ";";
+                                }
+
+                                ///鏇存柊搴撳瓨淇℃伅锛屾彃鍏ュ簱瀛樻槑缁嗘。锛屽苟鏇存柊搴撳瓨涓绘。
+                                sql = " update asr_loc_mast set loc_sts='F',io_time='" + ldt_date + "',modi_time='" + ldt_date + "',barcode='" + ls_barcode + "'";
+                                sql += " where loc_no='" + ls_loc_no + "' and loc_sts = 'Q';";
+                                sql += sqlDetl;
+                                sql += sqlWaitIn;
+
+                                
+                                SqlCommand cmd_53 = new SqlCommand(sql, sqlconn);
+                                cmd_53.Transaction = sqltrans;
+                                try
+                                {
+                                    cmd_53.ExecuteNonQuery();
+                                }
+                                catch (SqlException t)
+                                {
+                                    sqltrans.Rollback();
+                                    cmd_53.Dispose();
+                                    sqlconn.Dispose();
+                                    ls_error_memo = "   " + seq + ".7 鎷f枡锛嶆洿鏂板簱瀛樺紓甯� [asr_loc_mast] !宸ヤ綔鍙�:" + li_wrk_no.ToString() + "  搴撲綅鍙�:" + ls_loc_no + " !" + t.Message;
+                                    DisplayInfo("", "E", ls_error_memo);
+                                    goto re;
+                                }
+                                break;
+                            #endregion
+                            #region 骞舵澘鍐嶅叆搴�
+                            case 54:
+                                ///鏍规嵁宸ヤ綔鍙凤紝鏌ヨ宸ヤ綔鏄庣粏妗g墿鏂欑紪鐮�
+                                sqlDetl = "";
+                                sqlWaitIn = "";
+                                sql = "select lgnum,tbnum,tbpos,zmatid,matnr,maktx,werks,anfme,altme,zpallet,bname from asr_wrk_detl where wrk_no=" + li_wrk_no;
+                                DataView dv_wrkdetl54 = Common.ExecAsrsSelect(sql);
+                                if (dv_wrkdetl54 == null || dv_wrkdetl54.Count < 1)
+                                {
+                                    DisplayInfo("", "E", "   " + seq + ".8 宸ヤ綔鏄庣粏妗� [asr_wrk_detl] 娌℃湁璧勬枡!");
+                                    return;
+                                }
+                                foreach (DataRowView drow in dv_wrkdetl54)
+                                {
+                                    string lgnum = "", tbnum = "", tbpos = "", zmatid = "", matnr = "", maktx = "", werks = "", anfme = "", altme = "", zpallet = "", bname = "";
+                                    lgnum = drow[0].ToString();
+                                    tbnum = drow[1].ToString();
+                                    tbpos = drow[2].ToString();
+                                    zmatid = drow[3].ToString();
+                                    matnr = drow[4].ToString();
+                                    maktx = drow[5].ToString();
+                                    werks = drow[6].ToString();
+                                    anfme = drow[7].ToString();
+                                    altme = drow[8].ToString();
+                                    zpallet = drow[9].ToString();
+                                    bname = drow[10].ToString();
+                                    string sql1 = "select anfme from asr_loc_detl where loc_no='" + ls_loc_no + "' and matnr='" + matnr + "'";
+                                    DataView dv_locdetl54 = Common.ExecAsrsSelect(sql1);
+                                    if (dv_locdetl54 != null && dv_locdetl54.Count > 0)
+                                    {
+                                        sqlDetl += " update asr_loc_detl set anfme=anfme+" + anfme + " where loc_no='" + ls_loc_no + "' and matnr='" + matnr + "'";
+                                        //sqlWaitIn += " update cust_wait_pakin set io_status='Y' where matnr=" + matnr + ";";
+                                    }
+                                    else
+                                    {
+                                        sqlDetl += " insert into asr_loc_detl(loc_no,lgnum,tbnum,tbpos,zmatid,matnr,maktx,werks,anfme,altme,zpallet,bname) ";
+                                        sqlDetl += " values('" + ls_loc_no + "','" + lgnum + "'," + tbnum + "," + tbpos + ",'" + zmatid + "', ";
+                                        sqlDetl += " '" + matnr + "','" + maktx + "','" + werks + "'," + anfme + ",'" + altme + "','" + ls_barcode + "','" + bname + "');";
+                                    }
+                                    sqlWaitIn += " update cust_wait_pakout set io_status='Y' where lgnum='" + lgnum + "' and tanum=" + tbnum + " and tapos=" + tbpos + ";";
+                                }
+
+                                ///鏇存柊搴撳瓨淇℃伅锛屾彃鍏ュ簱瀛樻槑缁嗘。锛屽苟鏇存柊搴撳瓨涓绘。
+                                //sql = " update asr_loc_mast set loc_sts='F',io_time='" + ldt_date + "',modi_time='" + ldt_date + "',barcode='" + ls_barcode + "'";
+                                sql = " update asr_loc_mast set loc_sts='F',io_time='" + ldt_date + "',modi_time='" + ldt_date + "' ";
+                                sql += " where loc_no='" + ls_loc_no + "' and loc_sts = 'Q';";
+                                sql += sqlDetl;
+                                sql += sqlWaitIn;
+
+                                SqlCommand cmd_54 = new SqlCommand(sql, sqlconn);
+                                cmd_54.Transaction = sqltrans;
+                                try
+                                {
+                                    cmd_54.ExecuteNonQuery();
+                                }
+                                catch (SqlException t)
+                                {
+                                    sqltrans.Rollback();
+                                    cmd_54.Dispose();
+                                    sqlconn.Dispose();
+                                    ls_error_memo = "   " + seq + ".9 骞舵澘鍐嶅叆搴擄紞鏇存柊搴撳瓨寮傚父 [asr_loc_mast] !宸ヤ綔鍙�:" + li_wrk_no.ToString() + "  搴撲綅鍙�:" + ls_loc_no + " !" + t.Message;
+                                    DisplayInfo("", "E", ls_error_memo);
+                                    goto re;
+                                }
+                                break;
+                            #endregion
+                            #region 鐩樼偣鍐嶅叆搴�
+                            case 57:
+                                ///鏍规嵁宸ヤ綔鍙凤紝鏌ヨ宸ヤ綔鏄庣粏妗g墿鏂欑紪鐮�
+                                sqlDetl = "";
+                                sqlWaitIn = "";
+                                sql = "select lgnum,tbnum,tbpos,matnr from asr_wrk_detl where wrk_no=" + li_wrk_no;
+                                DataView dv_wrkdetl57 = Common.ExecAsrsSelect(sql);
+                                if (dv_wrkdetl57 == null || dv_wrkdetl57.Count < 1)
+                                {
+                                    DisplayInfo("", "E", "   " + seq + ".10 宸ヤ綔鏄庣粏妗� [asr_wrk_detl] 娌℃湁璧勬枡!");
+                                    return;
+                                }
+                                foreach (DataRowView drow in dv_wrkdetl57)
+                                {
+                                    string lgnum = "", tbnum = "", tbpos = "", matnr = "";
+                                    lgnum = drow[0].ToString();
+                                    tbnum = drow[1].ToString();
+                                    tbpos = drow[2].ToString();
+                                    matnr = drow[3].ToString();
+                                    //sqlWaitIn += " update cust_wait_check set io_status='Y' where lgnum='" + lgnum + "' and ivnum=" + tbnum + " and ivpos=" + tbpos + ";";
+                                }
+                                sqlWaitIn += " update cust_wait_check set io_status='Y' where lgpla='" + ls_loc_no + "';";
+                                ///鏇存柊搴撳瓨淇℃伅锛屾彃鍏ュ簱瀛樻槑缁嗘。锛屽苟鏇存柊搴撳瓨涓绘。
+                                sql = " update asr_loc_mast set loc_sts='F',io_time='" + ldt_date + "',modi_time='" + ldt_date + "',barcode='" + ls_barcode + "'";
+                                sql += " where loc_no='" + ls_loc_no + "' and loc_sts = 'Q';";
+                                sql += sqlDetl;
+                                sql += sqlWaitIn;
+
+                                SqlCommand cmd_57 = new SqlCommand(sql, sqlconn);
+                                cmd_57.Transaction = sqltrans;
+                                try
+                                {
+                                    cmd_57.ExecuteNonQuery();
+                                }
+                                catch (SqlException t)
+                                {
+                                    sqltrans.Rollback();
+                                    cmd_57.Dispose();
+                                    sqlconn.Dispose();
+                                    ls_error_memo = "   " + seq + ".11 鐩樼偣鍐嶅叆搴擄紞鏇存柊搴撳瓨寮傚父 [asr_loc_mast] !宸ヤ綔鍙�:" + li_wrk_no.ToString() + "  搴撲綅鍙�:" + ls_loc_no + " !" + t.Message;
+                                    DisplayInfo("", "E", ls_error_memo);
+                                    goto re;
+                                }
+                                break;
+                            #endregion
+                            #region 搴撲綅绉昏浆
+                            case 11:
+                                sql = "";
+                                string ls_loc_sts = "";
+                                if (ls_empty_mk == "N")
+                                {
+                                    ls_loc_sts = "F";
+                                    sql += "Update dbo.asr_loc_detl set loc_no='" + ls_loc_no + "',modi_time='" + ldt_date + "' where loc_no='" + ls_source_loc_no + "';";
+                                }
+                                else
+                                {
+                                    ls_loc_sts = "D";
+                                }
+
+                                sql += " Update dbo.asr_loc_mast set loc_sts='O',barcode='',io_time='" + ldt_date + "'  where loc_no='" + ls_source_loc_no + "'; ";
+                                sql += " Update dbo.asr_loc_mast set loc_sts='" + ls_loc_sts + "',barcode='" + ls_barcode + "',io_time='" + ldt_date + "' where loc_no='" + ls_loc_no + "';";
+                                sql += " update cust_wait_pakout set io_status='Y' where vlpla='" + ls_source_loc_no + "' and nlpla='" + ls_loc_no + "'";
+                                SqlCommand cmd_11 = new SqlCommand(sql, sqlconn);
+                                cmd_11.Transaction = sqltrans;
+                                try
+                                {
+                                    cmd_11.ExecuteNonQuery();
+                                }
+                                catch (SqlException t)
+                                {
+                                    sqltrans.Rollback();
+                                    cmd_11.Dispose();
+                                    sqlconn.Dispose();
+                                    ls_error_memo = "   " + seq + ".12 搴撲綅绉昏浆锛嶆洿鏂板簱瀛樺紓甯� [asr_loc_mast] !宸ヤ綔鍙�:" + li_wrk_no.ToString() + "  搴撲綅鍙�:" + ls_loc_no + " !" + t.Message;
+                                    DisplayInfo("", "E", ls_error_memo);
+                                    goto re;
+                                }
+
+                                break;
+                            #endregion
+                        }
+
+                        sql = "update asr_wrk_mast set wrk_sts=5,modi_time='" + ldt_date + "' where wrk_no=" + li_wrk_no + "; ";
+                        SqlCommand cmd_wrk = new SqlCommand(sql, sqlconn);
+                        cmd_wrk.Transaction = sqltrans;
+                        try
+                        {
+                            cmd_wrk.ExecuteNonQuery();
+                        }
+                        catch (SqlException t)
+                        {
+                            sqltrans.Rollback();
+                            cmd_wrk.Dispose();
+                            sqlconn.Dispose();
+                            ls_error_memo = "   " + seq + ".13 鏇存柊宸ヤ綔鐘舵�佸紓甯� [asr_wrk_mast] !宸ヤ綔鍙�:" + li_wrk_no.ToString() + " 鏃堕棿:" + ldt_date.ToString() + " 寮傚父:" + t.Message;
+                            DisplayInfo("", "E", ls_error_memo);
+                            goto re;
+                        }
+                    }
+                    else if (li_wrk_sts == 14)
+                    {
+                        switch (li_io_type)
+                        {
+                            #region 鍏ㄦ澘鍑哄簱
+                            case 101:
+                                ///鏍规嵁宸ヤ綔鍙凤紝鏌ヨ宸ヤ綔鏄庣粏妗g墿鏂欑紪鐮�
+                                string sqlWaitIn = "";
+                                sql = "select lgnum,tbnum,tbpos,matnr from asr_wrk_detl where wrk_no=" + li_wrk_no;
+                                DataView dv_wrkdetl = Common.ExecAsrsSelect(sql);
+                                if (dv_wrkdetl == null || dv_wrkdetl.Count < 1)
+                                {
+                                    DisplayInfo("", "E", "   " + seq + ".14 宸ヤ綔鏄庣粏妗� [asr_wrk_detl] 娌℃湁璧勬枡!");
+                                    goto re;
+                                }
+                                foreach (DataRowView drow in dv_wrkdetl)
+                                {
+                                    string lgnum = drow[0].ToString();
+                                    string tbnum = drow[1].ToString();
+                                    string tbpos = drow[2].ToString();
+                                    string matnr = drow[3].ToString();
+                                    sqlWaitIn += " update cust_wait_pakout set io_status='Y' where lgnum='" + lgnum + "' and tanum=" + tbnum + " and tapos=" + tbpos + " and vlpla=" + ls_source_loc_no + ";";
+                                }
+
+                                sql = "delete from asr_loc_detl where loc_no ='" + ls_source_loc_no + "';";
+                                sql += " update asr_loc_mast set loc_sts='O',io_time='" + ldt_date + "',barcode=null";
+                                sql += " where loc_no='" + ls_source_loc_no + "' and loc_sts = 'R';";
+                                sql += sqlWaitIn;
+                                SqlCommand cmd_101 = new SqlCommand(sql, sqlconn);
+                                cmd_101.Transaction = sqltrans;
+                                try
+                                {
+                                    cmd_101.ExecuteNonQuery();
+                                }
+                                catch (SqlException t)
+                                {
+                                    sqltrans.Rollback();
+                                    cmd_101.Dispose();
+                                    sqlconn.Dispose();
+                                    ls_error_memo = "   " + seq + ".15 鍑哄簱锛嶆洿鏂板簱浣嶇姸鎬佸紓甯竅asr_loc_mast] !搴撲綅鍙�:" + ls_source_loc_no + " 寮傚父:" + t.Message;
+                                    DisplayInfo("", "E", ls_error_memo);
+                                    goto re;
+                                }
+                                break;
+                            #endregion
+                            #region 绌烘澘鍑哄簱
+                            case 110:
+                                sql = "update asr_loc_mast set loc_sts='O',io_time='" + ldt_date + "'";
+                                sql += " where loc_no='" + ls_source_loc_no + "' and loc_sts = 'R'";
+                                SqlCommand cmd_110 = new SqlCommand(sql, sqlconn);
+                                cmd_110.Transaction = sqltrans;
+                                try
+                                {
+                                    cmd_110.ExecuteNonQuery();
+                                }
+                                catch (SqlException t)
+                                {
+                                    sqltrans.Rollback();
+                                    cmd_110.Dispose();
+                                    sqlconn.Dispose();
+                                    ls_error_memo = "   " + seq + ".16 鍑哄簱锛嶆洿鏂板簱浣嶇姸鎬佸紓甯竅asr_loc_mast] !搴撲綅鍙�:" + ls_source_loc_no + " 寮傚父:" + t.Message;
+                                    DisplayInfo("", "E", ls_error_memo);
+                                    goto re;
+                                }
+                                break;
+                            #endregion
+                        }
+
+                        sql = "update asr_wrk_mast set wrk_sts=15,modi_time='" + ldt_date + "' where wrk_no=" + li_wrk_no + "; ";
+                        SqlCommand cmd_wrk1 = new SqlCommand(sql, sqlconn);
+                        cmd_wrk1.Transaction = sqltrans;
+                        try
+                        {
+                            cmd_wrk1.ExecuteNonQuery();
+                        }
+                        catch (SqlException t)
+                        {
+                            sqltrans.Rollback();
+                            cmd_wrk1.Dispose();
+                            sqltrans.Dispose();
+                            ls_error_memo = "   " + seq + ".17 鏇存柊宸ヤ綔鐘舵�佸紓甯� [asr_wrk_mast] !宸ヤ綔鍙�:" + li_wrk_no.ToString() + " 寮傚父:" + t.Message;
+                            DisplayInfo("", "E", ls_error_memo);
+                            goto re;
+                        }
+                    }
+                    sqltrans.Commit();
+                    sqlconn.Dispose();
+                }
+            }
+            catch (SqlException t)
+            {
+                ls_error_memo = "   " + seq + ".18 澶勭悊宸ヤ綔妗f暟鎹け璐�! 寮傚父:" + t.Message;
+                DisplayInfo("", "E", ls_error_memo);
+            }
+
+        re:
+            if (ls_error_memo != "")
+            {
+                try
+                {
+                    bool bl = Common.ExecAsrsModify("update dbo.asr_wrk_mast set upd_mk ='X',error_time='" + ldt_date + "',error_memo='" + ls_error_memo + "'  where wrk_no =" + li_wrk_no + "");
+                }
+                catch (SqlException t)
+                {
+                    ls_error_memo = "   " + seq + ".19 鏇存柊宸ヤ綔涓绘。鐘舵�� [asr_wrk_mast] 寮傚父! 宸ヤ綔鍙�:" + li_wrk_no.ToString() + " 鏃堕棿:" + ldt_date.ToString();
+                    DisplayInfo("", "E", ls_error_memo);
+                    return;
+                }
+
+            }
+        }
+
+        /// <summary>
+        /// 澶勭悊宸ヤ綔妗d腑宸ヤ綔鐘舵�佷负5鍜�15鐨勮祫鏂欙紝杞巻鍙叉。
+        /// </summary>
+        public void ProcWorkToLog(string seq)
+        {
+            string ls_error_memo = "";
+            DisplayInfo(seq, "N", "--澶勭悊宸ヤ綔妗h浆鍘嗗彶妗�......");
+            int wrkno = 0;
+            try
+            {
+                string sql = "select top 1 wrk_no from asr_wrk_mast where wrk_sts=5 ";// or wrk_sts=15 or (wrk_sts=15 and io_type=110) ";
+                sql += " or (wrk_sts=15 and ove_mk='Y' and wrk_no not in (select wrk_no from asr_bas_devp))";
+                sql += " or (wrk_sts=15 and dateadd(mi,15,crn_end_time) <= getdate() and wrk_no not in (select wrk_no from asr_bas_devp))";
+                sql += " or (wrk_sts=15 and crn_end_time is null and wrk_no not in (select wrk_no from asr_bas_devp)) ";
+                //sql += " or (wrk_sts=15 and dateadd(day,1,io_time) <= getdate() and crn_end_time is null) ";
+                //sql += " or (wrk_sts=15 and dateadd(hh,1,crn_end_time) <= getdate()) ";
+                //sql += " or (wrk_sts=15 and wrk_no not in (select wrk_no from asr_bas_devp))";
+                sql += " order by io_time,wrk_no asc";
+                DataView dv = Common.ExecAsrsSelect(sql);
+                if (dv.Count <= 0)
+                {
+                    DisplayInfo("", "N", "   " + seq + ".1 宸ヤ綔妗� [asr_wrk_mast] 娌℃湁璧勬枡澶勭悊!");
+                    return;
+                }
+                foreach (DataRowView drow in dv)
+                {
+                    wrkno = int.Parse(drow[0].ToString());
+                }
+                DisplayInfo("", "P", "   " + seq + ".2 姝e湪澶勭悊杞巻鍙叉。" + wrkno);
+
+                sql = "insert into asr_wrk_mast_log select * from asr_wrk_mast where wrk_no=" + wrkno + "; ";
+                //sql += " and wrk_no not in (select wrk_no from dbo.asr_bas_devp) ";
+                //sql += " and wrk_no not in (select wrk_no from dbo.asr_bas_crnp);";
+                sql += " delete from asr_wrk_mast where wrk_no=" + wrkno + "; ";
+                sql += " insert into asr_wrk_detl_log select * from asr_wrk_detl where wrk_no=" + wrkno + "; ";
+                sql += " delete from asr_wrk_detl where wrk_no=" + wrkno + "; ";
+                //sql += " update asr_wrk_mast set wrk_sts=16 where wrk_sts=15 and dateadd(day,1,io_time) <= getdate();";
+                //sql += " and wrk_no not in (select wrk_no from dbo.asr_bas_devp) ";
+                //sql += " and wrk_no not in (select wrk_no from dbo.asr_bas_crnp);";
+
+                SqlConnection sqlconn = new SqlConnection(Common.sqlcon);
+                sqlconn.Open();
+                SqlTransaction sqltrans = sqlconn.BeginTransaction();
+                SqlCommand sqlcmd = new SqlCommand();
+                sqlcmd.Transaction = sqltrans;
+                string[] arraySql = sql.Split(';');
+                try
+                {
+                    for (int i = 0; i < arraySql.Length; i++)
+                    {
+                        if (arraySql[i] != "")
+                        {
+                            sqlcmd.CommandText = arraySql[i];
+                            sqlcmd.Connection = sqlconn;
+                            sqlcmd.Transaction = sqltrans;
+                            int result = sqlcmd.ExecuteNonQuery();
+                        }
+                    }
+                    sqltrans.Commit();
+                }
+                catch (SqlException t)
+                {
+                    sqltrans.Rollback();
+                    ls_error_memo = "   " + seq + ".3 宸ヤ綔妗asr_wrk_mast]杞巻鍙叉。閿欒 ! 寮傚父:" + t.Message;
+                    DisplayInfo("", "E", ls_error_memo);
+                }
+                finally
+                {
+                    sqlcmd.Dispose();
+                    sqltrans.Dispose();
+                    sqlconn.Dispose();
+                }
+                return;
+            }
+            catch (Exception t)
+            {
+                ls_error_memo = "   " + seq + ".4 澶勭悊宸ヤ綔妗h浆鍘嗗彶妗eけ璐�! 寮傚父:" + t.Message;
+                DisplayInfo("", "E", ls_error_memo);
+            }
+        }
+
+        /// <summary>
+        /// 澶勭悊鍫嗗灈鏈恒�佽緭閫佹満鍛戒护锛岃浆鍘嗗彶妗�
+        /// </summary>
+        public void ProcDevCommandToLog(string seq)
+        {
+            string ls_error_memo = "";
+            DisplayInfo(seq, "N", "--澶勭悊鍫嗗灈鏈�&PLC鍛戒护杞巻鍙叉。......");
+            try
+            {
+                string sql = "insert into asr_stk_hplc ";
+                sql += " select * from asr_stk_plcm where dateadd(day,7,appe_time) <= getdate();";
+                sql += " delete from asr_stk_plcm where dateadd(day,7,appe_time) <= getdate();";
+                SqlConnection sqlconn = new SqlConnection(Common.sqlcon);
+                sqlconn.Open();
+                SqlTransaction sqltrans = sqlconn.BeginTransaction();
+                SqlCommand sqlcmd = new SqlCommand();
+                sqlcmd.Transaction = sqltrans;
+                string[] arraySql = sql.Split(';');
+                try
+                {
+                    for (int i = 0; i < arraySql.Length; i++)
+                    {
+                        if (arraySql[i] != "")
+                        {
+                            sqlcmd.CommandText = arraySql[i];
+                            sqlcmd.Connection = sqlconn;
+                            sqlcmd.Transaction = sqltrans;
+                            int result = sqlcmd.ExecuteNonQuery();
+                        }
+                    }
+                    sqltrans.Commit();
+                }
+                catch (SqlException t)
+                {
+                    sqltrans.Rollback();
+                    //sqlcommon.Close();
+                    ls_error_memo = "   " + seq + ".1 鍫嗗灈鏈�&PLC鍛戒护杞巻鍙叉。閿欒 ! 寮傚父:" + t.Message;
+                    DisplayInfo("", "E", ls_error_memo);
+                }
+                finally
+                {
+                    sqlcmd.Dispose();
+                    sqltrans.Dispose();
+                    sqlconn.Dispose();
+                }
+                return;
+            }
+            catch (Exception t)
+            {
+                ls_error_memo = "   " + seq + ".2 鍫嗗灈鏈�&PLC鍛戒护杞巻鍙叉。澶辫触! 寮傚父:" + t.Message;
+                DisplayInfo("", "E", ls_error_memo);
+            }
+        }
+
+        /// <summary>
+        /// 杞凡瀹屾垚鐗╂枡淇℃伅鍒板巻鍙叉。
+        /// </summary>
+        public void ProcMatCodeToLog(string seq)
+        {
+            string ls_error_memo = "", mat_no = "";
+            DisplayInfo(seq, "N", "--澶勭悊宸插畬鎴愮墿鏂欐暟鎹浆鍘嗗彶妗�......");
+            try
+            {
+                string condition = " and mat_no not in (select mat_no from asr_loc_detl) and mat_no not in (select mat_no from asr_wrk_detl) ";
+                //condition += " and mat_no not in (select mat_no from cust_wait_pakout) ";
+                string sql0 = " select top 1 mat_no from bas_mat_code where status>1 " + condition + " ;";
+                DataView dv = Common.ExecAsrsSelect(sql0);
+                if (dv.Count <= 0)
+                {
+                    DisplayInfo("", "N", "   " + seq + ".1 鐗╂枡妗� [bas_mat_code] 娌℃湁璧勬枡澶勭悊!");
+                    return;
+                }
+
+                foreach (DataRowView drow in dv)
+                {
+                    mat_no = drow[0].ToString();
+                }
+
+                string sql = "delete from bas_mat_code_log where mat_no='" + mat_no + "';";
+                sql += " insert into bas_mat_code_log ";
+                sql += " select * from bas_mat_code where status>1 " + condition + " ;";
+                sql += " delete from bas_mat_code where status>1 " + condition + " ;";
+                sql += " delete from bas_mat_code where status=0 and dateadd(hh,2,modi_time) <= getdate() " + condition + " ;";
+
+                SqlConnection sqlconn = new SqlConnection(Common.sqlcon);
+                sqlconn.Open();
+                SqlTransaction sqltrans = sqlconn.BeginTransaction();
+                SqlCommand sqlcmd = new SqlCommand();
+                sqlcmd.Transaction = sqltrans;
+                string[] arraySql = sql.Split(';');
+                try
+                {
+                    for (int i = 0; i < arraySql.Length; i++)
+                    {
+                        if (arraySql[i] != "")
+                        {
+                            sqlcmd.CommandText = arraySql[i];
+                            sqlcmd.Connection = sqlconn;
+                            sqlcmd.Transaction = sqltrans;
+                            int result = sqlcmd.ExecuteNonQuery();
+                        }
+                    }
+                    sqltrans.Commit();
+                }
+                catch (SqlException t)
+                {
+                    sqltrans.Rollback();
+                    //sqlcommon.Close();
+                    ls_error_memo = "   " + seq + ".1 宸插畬鎴愮墿鏂欐暟鎹浆鍘嗗彶妗i敊璇� ! 寮傚父:" + t.Message;
+                    DisplayInfo("", "E", ls_error_memo);
+                }
+                finally
+                {
+                    sqlcmd.Dispose();
+                    sqlconn.Dispose();
+                }
+                return;
+            }
+            catch (Exception t)
+            {
+                ls_error_memo = "   " + seq + ".2 宸插畬鎴愮墿鏂欐暟鎹浆鍘嗗彶妗eけ璐�! 寮傚父:" + t.Message;
+                DisplayInfo("", "E", ls_error_memo);
+            }
+        }
+
+        /// <summary>
+        /// 杞凡瀹屾垚寰呭嚭搴撴。淇℃伅鍒板巻鍙叉。
+        /// </summary>
+        public void ProcWaitOutToLog(string seq)
+        {
+            string ls_error_memo = "", sql = "";
+            DisplayInfo(seq, "N", "--澶勭悊宸插畬鎴愬叆/鍑哄簱妗f暟鎹浆鍘嗗彶妗�......");
+            try
+            {
+                string sql0 = " select lgnum,tbnum,tbpos from cust_wait_pakin where io_status='F';";
+                DataView dv = Common.ExecAsrsSelect(sql0);
+                if (dv == null || dv.Count <= 0)
+                {
+                    DisplayInfo("", "N", "   " + seq + ".1 鍏ュ簱妗� [cust_wait_pakin] 娌℃湁璧勬枡澶勭悊!");
+                }
+                else
+                {
+                    foreach (DataRowView drow in dv)
+                    {
+                        string lgnum = drow[0].ToString();
+                        string tanum = drow[1].ToString();
+                        string tapos = drow[2].ToString();
+                        sql = "insert into cust_wait_pakin_log ";
+                        sql += " select * from cust_wait_pakin where lgnum='" + lgnum + "' and tbnum=" + tanum + " and tbpos=" + tapos + "; ";
+                        sql += " delete from cust_wait_pakin where lgnum='" + lgnum + "' and tbnum=" + tanum + " and tbpos=" + tapos + "; ";
+                    }
+                }
+
+                sql0 = " select lgnum,tanum,tapos from cust_wait_pakout where io_status='F';";
+                dv = Common.ExecAsrsSelect(sql0);
+                if (dv == null || dv.Count <= 0)
+                {
+                    DisplayInfo("", "N", "   " + seq + ".2 鍑哄簱妗� [cust_wait_pakout] 娌℃湁璧勬枡澶勭悊!");
+                }
+                else
+                {
+                    foreach (DataRowView drow in dv)
+                    {
+                        string lgnum = drow[0].ToString();
+                        string tanum = drow[1].ToString();
+                        string tapos = drow[2].ToString();
+                        sql = "insert into cust_wait_pakout_log ";
+                        sql += " select * from cust_wait_pakout where lgnum='" + lgnum + "' and tanum=" + tanum + " and tapos=" + tapos + "; ";
+                        sql += " delete from cust_wait_pakout where lgnum='" + lgnum + "' and tanum=" + tanum + " and tapos=" + tapos + "; ";
+                    }
+                }
+
+                sql0 = " select lgnum,ivnum,ivpos from cust_wait_check where io_status='Y';";
+                dv = Common.ExecAsrsSelect(sql0);
+                if (dv == null || dv.Count <= 0)
+                {
+                    DisplayInfo("", "N", "   " + seq + ".3 鐩樼偣妗� [cust_wait_check] 娌℃湁璧勬枡澶勭悊!");
+                }
+                else
+                {
+                    foreach (DataRowView drow in dv)
+                    {
+                        string lgnum = drow[0].ToString();
+                        string tanum = drow[1].ToString();
+                        string tapos = drow[2].ToString();
+                        sql = "insert into cust_wait_check_log ";
+                        sql += " select * from cust_wait_check where lgnum='" + lgnum + "' and ivnum=" + tanum + " and ivpos=" + tapos + "; ";
+                        sql += " delete from cust_wait_check where lgnum='" + lgnum + "' and ivnum=" + tanum + " and ivpos=" + tapos + "; ";
+                    }
+                }
+
+                if (sql == "")
+                {
+                    return;
+                }
+                SqlConnection sqlconn1 = new SqlConnection(Common.sqlcon);
+                sqlconn1.Open();
+                SqlTransaction sqltrans1 = sqlconn1.BeginTransaction();
+                SqlCommand sqlcmd1 = new SqlCommand();
+                sqlcmd1.Transaction = sqltrans1;
+                string[] arraySql1 = sql.Split(';');
+                try
+                {
+                    for (int i = 0; i < arraySql1.Length; i++)
+                    {
+                        if (arraySql1[i] != "")
+                        {
+                            sqlcmd1.CommandText = arraySql1[i];
+                            sqlcmd1.Connection = sqlconn1;
+                            sqlcmd1.Transaction = sqltrans1;
+                            int result = sqlcmd1.ExecuteNonQuery();
+                        }
+                    }
+                    sqltrans1.Commit();
+                }
+                catch (SqlException t)
+                {
+                    sqltrans1.Rollback();
+                    //sqlcommon.Close();
+                    ls_error_memo = "   " + seq + ".1 宸插畬鎴愮墿鏂欐暟鎹浆鍘嗗彶妗i敊璇� ! 寮傚父:" + t.Message;
+                    DisplayInfo("", "E", ls_error_memo);
+                }
+                finally
+                {
+                    sqlcmd1.Dispose();
+                    sqlconn1.Dispose();
+                }
+
+                return;
+            }
+            catch (Exception t)
+            {
+                ls_error_memo = "   " + seq + ".2 宸插畬鎴愬嚭搴撴暟鎹浆鍘嗗彶妗eけ璐�! 寮傚父:" + t.Message;
+                DisplayInfo("", "E", ls_error_memo);
+            }
+        }
+
+        /// <summary>
+        /// 鍒犻櫎瓒呰繃鍗婂勾鐨勫巻鍙叉。淇℃伅
+        /// </summary>
+        public void ProcOverYearLog(string seq)
+        {
+            string ls_error_memo = "";
+            DisplayInfo(seq, "N", "--澶勭悊瓒呰繃鍗婂勾鍘嗗彶妗d俊鎭�......");
+            try
+            {
+                string sql = "delete from asr_stk_hplc where dateadd(day,180,appe_time) <= getdate(); ";
+                sql += " delete from sys_tts_mast where dateadd(day,180,modi_time) <= getdate();";
+                sql += " delete from asr_wrk_detl_log where dateadd(day,360,appe_time) <= getdate();";
+                sql += " delete from asr_wrk_mast_log where dateadd(day,360,appe_time) <= getdate();";
+                sql += " delete from cust_wait_pakout_log where dateadd(day,360,appe_time) <= getdate();";
+                sql += " delete from bas_mat_code_log where dateadd(day,360,appe_time) <= getdate();";
+                SqlConnection sqlconn = new SqlConnection(Common.sqlcon);
+                sqlconn.Open();
+                SqlTransaction sqltrans = sqlconn.BeginTransaction();
+                SqlCommand sqlcmd = new SqlCommand();
+                sqlcmd.Transaction = sqltrans;
+                string[] arraySql = sql.Split(';');
+                try
+                {
+                    for (int i = 0; i < arraySql.Length; i++)
+                    {
+                        if (arraySql[i] != "")
+                        {
+                            sqlcmd.CommandText = arraySql[i];
+                            sqlcmd.Connection = sqlconn;
+                            sqlcmd.Transaction = sqltrans;
+                            int result = sqlcmd.ExecuteNonQuery();
+                        }
+                    }
+                    sqltrans.Commit();
+                }
+                catch (SqlException t)
+                {
+                    sqltrans.Rollback();
+                    //sqlcommon.Close();
+                    ls_error_memo = "   " + seq + ".1 鍫嗗灈鏈�&PLC鍛戒护杞巻鍙叉。閿欒 ! 寮傚父:" + t.Message;
+                    DisplayInfo("", "E", ls_error_memo);
+                }
+                finally
+                {
+                    sqlcmd.Dispose();
+                    sqltrans.Dispose();
+                    sqlconn.Dispose();
+                }
+                return;
+            }
+            catch (Exception t)
+            {
+                ls_error_memo = "   " + seq + ".2 鍫嗗灈鏈�&PLC鍛戒护杞巻鍙叉。澶辫触! 寮傚父:" + t.Message;
+                DisplayInfo("", "E", ls_error_memo);
+            }
+        }
+
+        /// <summary>
+        /// 澶勭悊搴撳瓨妗d腑搴撲綅鐘舵�佷负D O浣嗘槸鏈夋槑缁嗙殑鏁版嵁锛屾竻绌烘槑缁�
+        /// </summary>
+        private void ProcErrorStockData(string seq)
+        {
+            string ls_error_memo = "";
+            string loc_no = "", mat_no = "";
+            DisplayInfo(seq, "N", "--澶勭悊搴撳瓨妗d腑寮傚父搴撳瓨淇℃伅......");
+            try
+            {
+                string sqlDetl = "delete from asr_loc_detl where anfme <= 0;";
+                Common.ExecAsrsModify(sqlDetl);
+
+                string sql = "SELECT a.loc_no,b.matnr FROM asr_loc_mast a,asr_loc_detl b where a.loc_no=b.loc_no ";
+                sql += " and (a.loc_sts='O' or a.loc_sts='D') ";
+
+                DataView dv_stkDetl = Common.ExecAsrsSelect(sql);
+                if (dv_stkDetl == null || dv_stkDetl.Count < 1)
+                {
+                    return;
+                }
+                foreach (DataRowView drow_stkDetl in dv_stkDetl)
+                {
+                    loc_no = drow_stkDetl[0].ToString();
+                    mat_no = drow_stkDetl[1].ToString();
+                    string sql0 = " delete from asr_loc_detl where loc_no='" + loc_no + "'; ";
+                    SqlConnection sqlconn = new SqlConnection(Common.sqlcon);
+                    sqlconn.Open();
+                    SqlTransaction sqltrans = sqlconn.BeginTransaction();
+                    SqlCommand sqlcmd = new SqlCommand();
+                    sqlcmd.Transaction = sqltrans;
+                    string[] arraySql = sql0.Split(';');
+                    try
+                    {
+                        for (int i = 0; i < arraySql.Length; i++)
+                        {
+                            if (arraySql[i] != "")
+                            {
+                                sqlcmd.CommandText = arraySql[i];
+                                sqlcmd.Connection = sqlconn;
+                                sqlcmd.Transaction = sqltrans;
+                                int result = sqlcmd.ExecuteNonQuery();
+                            }
+                        }
+                        sqltrans.Commit();
+                    }
+                    catch (SqlException t)
+                    {
+                        sqltrans.Rollback();
+                        //sqlcommon.Close();
+                        ls_error_memo = "   " + seq + ".1 澶勭悊搴撳瓨妗d腑寮傚父搴撳瓨淇℃伅閿欒 ! 寮傚父:" + t.Message;
+                        DisplayInfo("", "E", ls_error_memo);
+                    }
+                    finally
+                    {
+                        sqlcmd.Dispose();
+                        sqltrans.Dispose();
+                        sqlconn.Dispose();
+                    }
+                }
+                return;
+            }
+            catch (Exception t)
+            {
+                ls_error_memo = "   " + seq + ".2 澶勭悊搴撳瓨妗d腑寮傚父搴撳瓨淇℃伅澶辫触! 寮傚父:" + t.Message;
+                DisplayInfo("", "E", ls_error_memo);
+            }
+        }
+        #endregion
+
+        /// <summary>
+        /// 鍥炴姤涓荤嚎绋�
+        /// </summary>
+        private void ThreadTask()
+        {
+            DisplayInfo("", "N", "---------------绯荤粺杩愯涓�-------------");
+            while (true)
+            {
+                try
+                {
+                    //鐢熸垚鍑哄簱宸ヤ綔妗�
+                    ProcOutToWorkData("1");
+                    ProcLocToWorkData("11");
+
+                    //澶勭悊宸ヤ綔妗g姸鎬�4銆�14銆�6鐨勮祫鏂�
+                    ProcWorkMast("2"); // done
+
+                    //宸ヤ綔妗h浆鍘嗗彶妗� // done
+                    ProcWorkToLog("3");
+
+                    //鍫嗗灈鏈�&PLC鍛戒护杞巻鍙叉。
+                    ProcDevCommandToLog("4"); // done
+
+                    //杞凡瀹屾垚鐗╂枡淇℃伅鍒板巻鍙叉。
+                    //ProcMatCodeToLog("5");
+                    //杞嚭搴撳畬鎴愬緟鍑哄簱妗f暟鎹埌鍘嗗彶妗�
+                    ProcCheckToWorkData("5");
+
+                    //杞嚭搴撳畬鎴愬緟鍑哄簱妗f暟鎹埌鍘嗗彶妗�
+                    ProcWaitOutToLog("6"); // done
+
+                    //鍒犻櫎瓒呰繃鍗婂勾鍘嗗彶妗�
+                    ProcOverYearLog("7"); // done
+
+                    ProcErrorStockData("8"); // done
+
+                    Thread.Sleep(3000);
+                }
+                catch (Exception em)
+                {
+                    Common.WriteLogFile("WcsError", "UpdateThread/ThreadTask--鍥炴姤涓荤嚎绋嬪惊鐜嚭閿�:" + em.Message);
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 006891b..12eaea8 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -13,9 +13,9 @@
 #    password: xltys1995
     # sql-server
     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
-    url: jdbc:sqlserver://127.0.0.1:1433;databasename=dlasrs
+    url: jdbc:sqlserver://127.0.0.1:1433;databasename=xtyasrs
     username: sa
-    password: Qwe!@#123
+    password: sa@123
   mvc:
     static-path-pattern: /**
   redis:
diff --git a/src/main/resources/mapper/TrayCodeMapper.xml b/src/main/resources/mapper/TrayCodeMapper.xml
new file mode 100644
index 0000000..c959caa
--- /dev/null
+++ b/src/main/resources/mapper/TrayCodeMapper.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.TrayCodeMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.TrayCode">
+        <id column="id" property="id" />
+        <result column="tray_no" property="trayNo" />
+        <result column="start" property="start" />
+        <result column="finish" property="finish" />
+        <result column="memo" property="memo" />
+        <result column="modi_time" property="modiTime" />
+        <result column="modi_user" property="modiUser" />
+        <result column="appe_time" property="appeTime" />
+        <result column="appe_user" property="appeUser" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/WaitPakinLogMapper.xml b/src/main/resources/mapper/WaitPakinLogMapper.xml
new file mode 100644
index 0000000..5059430
--- /dev/null
+++ b/src/main/resources/mapper/WaitPakinLogMapper.xml
@@ -0,0 +1,23 @@
+<?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.WaitPakinLogMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WaitPakinLog">
+        <id column="id" property="id" />
+        <result column="pakin_id" property="pakinId" />
+        <result column="barcode" property="barcode" />
+        <result column="matnr" property="matnr" />
+        <result column="maktx" property="maktx" />
+        <result column="anfme" property="anfme" />
+        <result column="unit" property="unit" />
+        <result column="status" property="status" />
+        <result column="memo" property="memo" />
+        <result column="modi_time" property="modiTime" />
+        <result column="modi_user" property="modiUser" />
+        <result column="appe_time" property="appeTime" />
+        <result column="appe_user" property="appeUser" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/WaitPakinMapper.xml b/src/main/resources/mapper/WaitPakinMapper.xml
new file mode 100644
index 0000000..42be7fd
--- /dev/null
+++ b/src/main/resources/mapper/WaitPakinMapper.xml
@@ -0,0 +1,22 @@
+<?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.WaitPakinMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WaitPakin">
+        <id column="id" property="id" />
+        <result column="barcode" property="barcode" />
+        <result column="matnr" property="matnr" />
+        <result column="maktx" property="maktx" />
+        <result column="anfme" property="anfme" />
+        <result column="unit" property="unit" />
+        <result column="status" property="status" />
+        <result column="memo" property="memo" />
+        <result column="modi_time" property="modiTime" />
+        <result column="modi_user" property="modiUser" />
+        <result column="appe_time" property="appeTime" />
+        <result column="appe_user" property="appeUser" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/WrkDetlLogMapper.xml b/src/main/resources/mapper/WrkDetlLogMapper.xml
new file mode 100644
index 0000000..8736b93
--- /dev/null
+++ b/src/main/resources/mapper/WrkDetlLogMapper.xml
@@ -0,0 +1,29 @@
+<?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.WrkDetlLogMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WrkDetlLog">
+        <result column="wrk_no" property="wrkNo" />
+        <result column="io_time" property="ioTime" />
+        <result column="matnr" property="matnr" />
+        <result column="lgnum" property="lgnum" />
+        <result column="tbnum" property="tbnum" />
+        <result column="tbpos" property="tbpos" />
+        <result column="zmatid" property="zmatid" />
+        <result column="maktx" property="maktx" />
+        <result column="werks" property="werks" />
+        <result column="anfme" property="anfme" />
+        <result column="altme" property="altme" />
+        <result column="zpallet" property="zpallet" />
+        <result column="bname" property="bname" />
+        <result column="memo" property="memo" />
+        <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="nista" property="nista" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index b3905fc..ee48a59 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -62,4 +62,17 @@
 
     </resultMap>
 
+    <select id="selectToBeCompleteData" resultMap="BaseResultMap">
+        select * from asr_wrk_mast where ((wrk_sts = 4 Or wrk_sts = 14 ) and io_type != 103 and io_type != 104 and io_type != 107 ) or (wrk_sts = 2 and io_type=6) order by upd_mk,io_time,wrk_no
+    </select>
+
+    <select id="selectToBeHistoryData" resultMap="BaseResultMap">
+        select * from asr_wrk_mast
+        where wrk_sts=5
+        or (wrk_sts=15 and ove_mk='Y' and wrk_no not in (select wrk_no from asr_bas_devp))
+        or (wrk_sts=15 and dateadd(mi,15,crn_end_time) &lt;= getdate() and wrk_no not in (select wrk_no from asr_bas_devp))
+        or (wrk_sts=15 and crn_end_time is null and wrk_no not in (select wrk_no from asr_bas_devp))
+        order by io_time,wrk_no asc
+    </select>
+
 </mapper>
diff --git a/src/main/webapp/static/css/common.css b/src/main/webapp/static/css/common.css
index a430141..af20387 100644
--- a/src/main/webapp/static/css/common.css
+++ b/src/main/webapp/static/css/common.css
@@ -8,6 +8,30 @@
 body {
     background-color: #fff;
 }
+
+input::placeholder {
+    color: #b4b4b4;
+}
+input::-webkit-input-placeholder { /* WebKit browsers 閫傞厤璋锋瓕 */
+    color: #b4b4b4;
+}
+.layui-input input:-moz-placeholder { /* Mozilla Firefox 4 to 18 閫傞厤鐏嫄 */
+    color: #b4b4b4;
+}
+.layui-input input::-moz-placeholder { /* Mozilla Firefox 19+ 閫傞厤鐏嫄 */
+    color: #b4b4b4;
+}
+.layui-input input:-ms-input-placeholder { /* Internet Explorer 10+  閫傞厤ie*/
+    color: #b4b4b4;
+}
+
+/* layui浼樺寲 */
+.layui-form-label {
+    /*color: #595959;*/
+}
+.layui-input:focus {
+    border-color: #007bff !important;
+}
 /*鎼滅储鏍�*/
 .layui-form.layui-card-header {
     padding: 20px 0 5px 0;
@@ -40,7 +64,6 @@
 #data-search-btn.layui-btn-container .layui-btn{
     margin-right: 20px;
 }
-
 
 /*澶村伐鍏锋爮*/
 .layui-table-tool-temp {
@@ -153,8 +176,6 @@
     height: 200px;
 }
 
-
-
 /*
     甯冨眬
  */
@@ -168,7 +189,6 @@
 .col{
     height: inherit;
 }
-
 
 /*鏉冮檺*/
 #btn-add {
diff --git a/src/main/webapp/static/css/cool.css b/src/main/webapp/static/css/cool.css
index 93b9dc1..aac555b 100644
--- a/src/main/webapp/static/css/cool.css
+++ b/src/main/webapp/static/css/cool.css
@@ -16,14 +16,14 @@
 }
 
 .cool-auto-complete-window-input {
-
     height: 28px;
     box-sizing: border-box;
     border: 1px solid #dedede;
-
     width: 100%;
 }
-
+.cool-auto-complete-window-input:focus {
+    border-color: #007bff !important;
+}
 .cool-auto-complete-window-select {
     width: 100%;
     border: 1px solid #dedede;
diff --git a/src/main/webapp/static/css/optimize.css b/src/main/webapp/static/css/optimize.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/main/webapp/static/css/optimize.css
diff --git a/src/main/webapp/static/css/pda.css b/src/main/webapp/static/css/pda.css
new file mode 100644
index 0000000..8e5f71e
--- /dev/null
+++ b/src/main/webapp/static/css/pda.css
@@ -0,0 +1,95 @@
+* {
+    font-family: microsoft yahei,serif;
+    margin: 0;
+    padding: 0;
+    box-sizing: border-box;
+    -webkit-box-sizing: border-box;
+    -moz-box-sizing: border-box;
+    font-size: 11px;
+}
+html {
+    height: 100%;
+    background-color: #f1f1f1;
+    padding: 5px;
+}
+body {
+    height: 100%;
+    background-color: #fff;
+    border-radius: 5px;
+    box-shadow: 0 0 3px rgba(0,0,0,.3);
+    padding: 5px;
+    position: relative;
+}
+
+/* 澶撮儴 */
+header {
+    padding: 5px 0;
+}
+.layui-form-label {
+    width: initial;
+    padding: 6px 10px;
+}
+#code {
+    width: 75%;
+    height: 30px;
+    margin-right: 0;
+}
+header button {
+    height: 20px;
+    width: 70px;
+}
+
+/* layer */
+.layui-layer-title {
+    font-size: 11px;
+    height: 20px;
+    line-height: 20px;
+}
+
+/* 涓讳綋 */
+main {
+    height: 170px;
+    overflow: auto;
+}
+.layui-table, .layui-table-view {
+    margin: 0;
+}
+.layui-table-view .layui-table td, .layui-table-view .layui-table th {
+    padding: 0;
+}
+.layui-table-cell {
+    height: 22px;
+    line-height: 22px;
+    padding: 0;
+}
+.layui-table-grid-down {
+    display: none;
+}
+.layui-table-body .layui-none {
+    /*height: 144px;*/
+}
+/* 灏鹃儴 */
+footer {
+    position: absolute;
+    bottom: 5px;
+    width: 100%;
+}
+.layui-btn-container .layui-btn {
+    margin-left: 10px;
+    margin-bottom: 2px;
+}
+#tips {
+    display: inline-block;
+    width: 90px;
+    color: #666;
+    margin-left: 5px;
+    margin-bottom: 5px;
+    vertical-align: middle;
+    overflow:hidden;
+    white-space:nowrap;
+    text-overflow:ellipsis;
+}
+
+.layui-btn-primary:hover {
+    border-color: #C9C9C9
+}
\ No newline at end of file
diff --git a/src/main/webapp/static/css/print.css b/src/main/webapp/static/css/print.css
new file mode 100644
index 0000000..94ee215
--- /dev/null
+++ b/src/main/webapp/static/css/print.css
@@ -0,0 +1,7 @@
+@media print {
+    @page {
+        /*A4: 210mm 脳 297mm锛宻ize: 794px 脳 1123px锛�0杈硅窛*/
+        /*171.9mm 脳 258.9mm锛宻ize锛�649px 脳 978px锛�19.05mm杈硅窛锛坕e娴忚鍣ㄩ粯璁ゆ墦鍗拌竟璺濓級 */
+        margin: 0.3cm
+    }
+}
\ No newline at end of file
diff --git a/src/main/webapp/static/js/adjDetl/adjDetl.js b/src/main/webapp/static/js/adjDetl/adjDetl.js
index 12a2529..11b3aab 100644
--- a/src/main/webapp/static/js/adjDetl/adjDetl.js
+++ b/src/main/webapp/static/js/adjDetl/adjDetl.js
@@ -29,13 +29,13 @@
             // ,{field: 'adjCtns', align: 'center',title: '鍙樻洿绠辨暟'}
             ,{field: 'adjQty', align: 'center',title: '鍙樻洿鏁伴噺'}
             // ,{field: 'adjWt', align: 'center',title: '鍙樻洿閲嶉噺'}
-            ,{field: 'memo', align: 'center',title: '澶囨敞'}
+            ,{field: 'memo', align: 'center',title: '澶囨敞',hide:true}
             ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳'}
             ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}
             // ,{field: 'appeUser', align: 'center',title: '鍒涘缓鑰�'}
             // ,{field: 'appeTime$', align: 'center',title: '娣诲姞鏃堕棿'}
 
-            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:100}
+            // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:100}
         ]],
         request: {
             pageName: 'curr',
diff --git a/src/main/webapp/static/js/errorWrkMast/errorWrkMast.js b/src/main/webapp/static/js/errorWrkMast/errorWrkMast.js
new file mode 100644
index 0000000..7feb380
--- /dev/null
+++ b/src/main/webapp/static/js/errorWrkMast/errorWrkMast.js
@@ -0,0 +1,495 @@
+var pageCurr;
+var wrkNo;
+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: '#wrkMast',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/wrkMast/list/auth',
+        page: true,
+        where: {upd_mk : 'X'},
+        limit: 50,
+        limits: [50, 100, 200, 500],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox'}
+            ,{field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�',sort: true}
+            ,{field: 'ioTime$', align: 'center',title: '宸ヤ綔鏃堕棿',sort: true, hide:true}
+            ,{field: 'wrkSts$', align: 'center',title: '宸ヤ綔鐘舵��'}
+            ,{field: 'ioType$', align: 'center',title: '鍏ュ嚭搴撶被鍨�'}
+            ,{field: 'crnNo$', align: 'center',title: '鍫嗗灈鏈�', hide:true}
+            ,{field: 'sourceStaNo$', align: 'center',title: '婧愮珯', hide:true}
+            ,{field: 'staNo$', align: 'center',title: '鐩爣绔�', hide:true}
+            ,{field: 'sourceLocNo$', align: 'center',title: '婧愬簱浣�', hide:true}
+            ,{field: 'locNo$', align: 'center',title: '鐩爣搴撲綅', hide:true}
+            ,{field: 'barcode', align: 'center',title: '鏉$爜', hide:true}
+            ,{field: 'updMk', align: 'center',title: '寮傚父鏍囪'}
+            ,{field: 'errorTime$', align: 'center',title: '寮傚父璁板綍鏃堕棿'}
+            ,{field: 'errorMemo', align: 'center',title: '寮傚父鍐呭'}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳', hide:true}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿', hide:true}
+        ]],
+        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();
+        }
+    });
+
+    // 姣忕鍒锋柊
+    setInterval(function () {
+        $(".layui-laypage-btn")[0].click();
+    }, 1000);
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(wrkMast)', 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(wrkMast)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            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 = {
+                        'wrkMast': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/wrkMast/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)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(wrkMast)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 鏄庣粏灞曠ず todo
+            case 'detlShow':
+                wrkNo = data.wrkNo;
+                // 琛ㄦ牸涓嬫柟鏄剧ず
+                // locDetl(data.wrkNo);
+                // 寮瑰眰鏄剧ず
+                layer.open({
+                    type: 2,
+                    title: '宸ヤ綔妗f槑缁�',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: true,
+                    content: 'wrkDetl.html',
+                    success: function(layero, index){
+                    }
+                });
+                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 = {
+            wrkNo: $('#wrkNo').val(),
+            invWh: $('#invWh').val(),
+            ymd: top.strToDate($('#ymd\\$').val()),
+            mk: $('#mk').val(),
+            whsType: $('#whsType').val(),
+            wrkSts: $('#wrkSts').val(),
+            ioType: $('#ioType').val(),
+            crnNo: $('#crnNo').val(),
+            sheetNo: $('#sheetNo').val(),
+            ioPri: $('#ioPri').val(),
+            wrkDate: top.strToDate($('#wrkDate\\$').val()),
+            locNo: $('#locNo').val(),
+            staNo: $('#staNo').val(),
+            sourceStaNo: $('#sourceStaNo').val(),
+            sourceLocNo: $('#sourceLocNo').val(),
+            locSts: $('#locSts').val(),
+            picking: $('#picking').val(),
+            linkMis: $('#linkMis').val(),
+            onlineYn: $('#onlineYn').val(),
+            updMk: $('#updMk').val(),
+            exitMk: $('#exitMk').val(),
+            pltType: $('#pltType').val(),
+            emptyMk: $('#emptyMk').val(),
+            ioTime: top.strToDate($('#ioTime\\$').val()),
+            ctnType: $('#ctnType').val(),
+            packed: $('#packed').val(),
+            oveMk: $('#oveMk').val(),
+            mtnType: $('#mtnType').val(),
+            userNo: $('#userNo').val(),
+            crnStrTime: top.strToDate($('#crnStrTime\\$').val()),
+            crnEndTime: top.strToDate($('#crnEndTime\\$').val()),
+            plcStrTime: top.strToDate($('#plcStrTime\\$').val()),
+            crnPosTime: top.strToDate($('#crnPosTime\\$').val()),
+            loadTime: $('#loadTime').val(),
+            expTime: $('#expTime').val(),
+            refWrkno: $('#refWrkno').val(),
+            refIotime: top.strToDate($('#refIotime\\$').val()),
+            modiUser: $('#modiUser').val(),
+            modiTime: top.strToDate($('#modiTime\\$').val()),
+            appeUser: $('#appeUser').val(),
+            appeTime: top.strToDate($('#appeTime\\$').val()),
+            pauseMk: $('#pauseMk').val(),
+            errorTime: top.strToDate($('#errorTime\\$').val()),
+            errorMemo: $('#errorMemo').val(),
+            ctnKind: $('#ctnKind').val(),
+            manuType: $('#manuType').val(),
+            memo: $('#memo').val(),
+            scWeight: $('#scWeight').val(),
+            logMk: $('#logMk').val(),
+            logErrTime: top.strToDate($('#logErrTime\\$').val()),
+            logErrMemo: $('#logErrMemo').val(),
+            barcode: $('#barcode').val(),
+            PdcType: $('#PdcType').val(),
+            ctnNo: $('#ctnNo').val(),
+            fullPlt: $('#fullPlt').val(),
+
+        };
+        $.ajax({
+            url: baseUrl+"/wrkMast/"+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;
+        $('#detlTable').css("display", 'none');
+        tableReload(false);
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        $('#detlTable').css("display", 'none');
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    layDate.render({
+        elem: '#ymd\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#wrkDate\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#ioTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#crnStrTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#crnEndTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#plcStrTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#crnPosTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#refIotime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#modiTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#appeTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#errorTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#logErrTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '.layui-laydate-range'
+        ,type: 'datetime'
+        ,range: true
+    });
+
+    var pageCur;
+    function locDetl(param){
+        $('#detlTable').css("display", 'block');
+        // 鏁版嵁娓叉煋
+        $('#wrkNo').val(param);
+        // 鏁版嵁娓叉煋
+        tableIns1 = table.render({
+            elem: '#wrkDetlByMap',
+            headers: {token: localStorage.getItem('token')},
+            url: baseUrl+'/wrkDetl/list/auth',
+            where: {wrk_no: param},
+            page: true,
+            limit: 16,
+            limits: [16, 30, 50, 100, 200, 500],
+            even: true,
+            toolbar: '#toolbar',
+            cellMinWidth: 50,
+            cols: [[
+                {type: 'checkbox'}
+                ,{field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�'}
+                ,{field: 'ioTime$', align: 'center',title: '宸ヤ綔鏃堕棿'}
+                ,{field: 'matnr', align: 'center',title: '鐗╂枡'}
+                ,{field: 'lgnum', align: 'center',title: '浠撳簱鍙�'}
+                ,{field: 'tbnum', align: 'center',title: '杞偍璇锋眰缂栧彿'}
+                ,{field: 'tbpos', align: 'center',title: '琛岄」鐩�'}
+                ,{field: 'zmatid', align: 'center',title: '鐗╂枡鏍囩ID'}
+                ,{field: 'maktx', align: 'center',title: '鐗╂枡鎻忚堪'}
+                ,{field: 'werks', align: 'center',title: '宸ュ巶'}
+                ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
+                ,{field: 'altme', align: 'center',title: '鍗曚綅'}
+                ,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜'}
+                ,{field: 'bname', align: 'center',title: '鐢ㄦ埛ID'}
+                ,{field: 'memo', align: 'center',title: '澶囨敞'}
+
+                ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:50}
+            ]],
+            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+"/";
+                }
+                pageCur=curr;
+                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';
+                    }
+                });
+            }
+        });
+    }
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(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();
+    }
+});
diff --git a/src/main/webapp/static/js/matCode/matCode.js b/src/main/webapp/static/js/matCode/matCode.js
index afa6628..5cab270 100644
--- a/src/main/webapp/static/js/matCode/matCode.js
+++ b/src/main/webapp/static/js/matCode/matCode.js
@@ -288,26 +288,6 @@
                     }
                 });
                 break;
-            // 缂栬緫
-            case 'edit':
-                layer.open({
-                    type: 2,
-                    title: '淇敼',
-                    maxmin: true,
-                    area: [top.detailWidth, top.detailHeight],
-                    shadeClose: false,
-                    content: 'matCode_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('#matNo', 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 "btnPrint":
                 printMatCodeNos = [];
@@ -338,7 +318,7 @@
     form.on('submit(doPrint)', function (data) {
         var templateNo = data.field.selectTemplate;
         $.ajax({
-            url: baseUrl+"/macCode/print/auth",
+            url: baseUrl+"/matCode/print/auth",
             headers: {'token': localStorage.getItem('token')},
             data: {param: printMatCodeNos},
             method: 'POST',
@@ -350,16 +330,18 @@
                         var templateDom = $("#templatePreview"+templateNo);
                         var className = templateDom.attr("class");
                         if (className === 'template-barcode') {
-                            res.data[i]["barcodeUrl"]=baseUrl+"/macCode/code/auth?type=1&param="+res.data[i].barcode;
+                            res.data[i]["barcodeUrl"]=baseUrl+"/macCode/code/auth?type=1&param="+res.data[i].matNo;
                         } else {
-                            res.data[i]["barcodeUrl"]=baseUrl+"/macCode/code/auth?type=2&param="+res.data[i].barcode;
+                            res.data[i]["barcodeUrl"]=baseUrl+"/macCode/code/auth?type=2&param="+res.data[i].matNo;
                         }
                     }
                     var tpl = templateDom.html();
                     var template = Handlebars.compile(tpl);
                     var html = template(res);
                     let box = $("#box");
-                    box.html(html);box.show();box.print();box.hide();
+                    box.html(html);box.show();
+                    box.print({mediaPrint:true});
+                    box.hide();
                 } else if (res.code === 403){
                     top.location.href = baseUrl+"/";
                 }else {
diff --git a/src/main/webapp/static/js/operateLog/operateLog.js b/src/main/webapp/static/js/operateLog/operateLog.js
index d3ae857..d8c9acf 100644
--- a/src/main/webapp/static/js/operateLog/operateLog.js
+++ b/src/main/webapp/static/js/operateLog/operateLog.js
@@ -18,16 +18,16 @@
         toolbar: '#toolbar',
         cellMinWidth: 50,
         cols: [[
-            {type: 'checkbox'}
-            ,{field: 'id', title: 'ID', sort: true,align: 'center', width: 80}
-            ,{field: 'action', align: 'center',title: '璁块棶鍦板潃'}
+            // {type: 'checkbox'}
+            {field: 'id', title: 'ID', sort: true,align: 'center', width: 80}
             ,{field: 'userId$', align: 'center',title: '鐢ㄦ埛'}
+            ,{field: 'action', align: 'center',title: '鎿嶄綔鍐呭'}
             ,{field: 'ip', align: 'center',title: '瀹㈡埛绔疘P'}
             ,{field: 'request', align: 'center',title: '璇锋眰鏁版嵁'}
             ,{field: 'response', align: 'center',title: '鍝嶅簲鏁版嵁'}
             ,{field: 'createTime$', align: 'center',title: '娣诲姞鏃堕棿'}
 
-            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+            // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:100}
         ]],
         request: {
             pageName: 'curr',
@@ -316,7 +316,11 @@
         elem: '#createTime\\$',
         type: 'datetime'
     });
-
+    layDate.render({
+        elem: '.layui-laydate-range'
+        ,type: 'datetime'
+        ,range: true
+    });
 });
 
 // 鍏抽棴鍔ㄤ綔
diff --git a/src/main/webapp/static/js/pakStore/pakStore.js b/src/main/webapp/static/js/pakStore/pakStore.js
index 2e2c251..1510b4a 100644
--- a/src/main/webapp/static/js/pakStore/pakStore.js
+++ b/src/main/webapp/static/js/pakStore/pakStore.js
@@ -64,7 +64,7 @@
                     url: baseUrl+"/full/store/put/start",
                     headers: {'token': localStorage.getItem('token')},
                     data: JSON.stringify({
-                        devpNo: $('#putSiteSelect').val(),
+                        devpNo: Number($('#putSiteSelect').val()),
                         list: matCodeData
                     }),
                     contentType:'application/json;charset=UTF-8',
diff --git a/src/main/webapp/static/js/role/role.js b/src/main/webapp/static/js/role/role.js
index 3b91de1..3bdce29 100644
--- a/src/main/webapp/static/js/role/role.js
+++ b/src/main/webapp/static/js/role/role.js
@@ -40,7 +40,7 @@
             ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
             ,{field: 'code', align: 'center',title: '缂栫爜'}
             ,{field: 'name', align: 'center',title: '鍚嶇О'}
-            ,{field: 'leader$', align: 'center',title: '涓婄骇',event: 'leader', style: 'text-decoration: underline;cursor:pointer'}
+            ,{field: 'leader$', align: 'center',title: '涓婄骇'}
             // ,{field: 'level$', align: 'center',title: '瑙掕壊绛夌骇'}
 
             ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
diff --git a/src/main/webapp/static/js/role/rolePower.js b/src/main/webapp/static/js/role/rolePower.js
index 365ba26..212e2ba 100644
--- a/src/main/webapp/static/js/role/rolePower.js
+++ b/src/main/webapp/static/js/role/rolePower.js
@@ -65,6 +65,7 @@
             success: function (res) {
                 if (res.code === 200){
                     parent.layer.closeAll();
+                    parent.layer.msg(res.msg);
                 } else if (res.code === 403){
                     top.location.href = baseUrl+"/";
                 } else {
diff --git a/src/main/webapp/static/js/trayCode/trayCode.js b/src/main/webapp/static/js/trayCode/trayCode.js
new file mode 100644
index 0000000..bc70c7a
--- /dev/null
+++ b/src/main/webapp/static/js/trayCode/trayCode.js
@@ -0,0 +1,451 @@
+var pageCurr;
+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: '#trayCode',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/trayCode/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            // {type: 'checkbox'}
+//            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
+//             ,{field: 'id', align: 'center',title: '缂栧彿'}
+            {field: 'trayNo', align: 'center',title: '搴忓垪鍙�', sort: true}
+            ,{field: 'start', align: 'center',title: '璧峰', templet:function(row){
+                    var html = "<input value='start' type='checkbox' disabled='disabled' lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
+                    if(row.start === 'Y'){html += " checked ";}
+                    html += ">";
+                    return html;
+                }}
+            ,{field: 'finish', align: 'center',title: '缁堟', templet:function(row){
+                    var html = "<input value='finish' type='checkbox' disabled='disabled' lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
+                    if(row.finish === 'Y'){html += " checked ";}
+                    html += ">";
+                    return html;
+                }}
+            ,{field: 'memo', align: 'center',title: '澶囨敞', hide:true}
+            // ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}
+            // ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳',event: 'modiUser', style: 'cursor:pointer'}
+            ,{field: 'appeTime$', align: 'center',title: '娣诲姞鏃堕棿', sort: true}
+            ,{field: 'appeUser$', align: 'center',title: '娣诲姞浜哄憳'}
+
+            // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+        ]],
+        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(locMast)', 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(trayCode)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            // 鐢熸垚鎵樼洏鐮�
+            case "btnTray":
+                layer.open({
+                    type: 1,
+                    title: '鐢熸垚鎵樼洏鐮�',
+                    offset: '100px',
+                    area: ['360px'],
+                    shade: 0.1,
+                    content: $('#print-windows'),
+                    success: function(layero, index){
+                        layer.iframeAuto(index)
+                        http.post(baseUrl+"/trayCode/latest", null, function (res) {
+                            $('#startNo').val(res.data);
+                        })
+                    },
+                });
+                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 = {
+                        'trayCode': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/trayCode/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)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(trayCode)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: true,
+                    content: 'trayCode_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],
+                    content: 'trayCode_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('#id', 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;
+
+        }
+    });
+
+    // 鏁版嵁淇濆瓨鍔ㄤ綔
+    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(),
+            id: $('#id').val(),
+            trayNo: $('#trayNo').val(),
+            start: $('#start').val(),
+            finish: $('#finish').val(),
+            memo: $('#memo').val(),
+            modiTime: top.strToDate($('#modiTime\\$').val()),
+            modiUser: $('#modiUser').val(),
+            appeTime: top.strToDate($('#appeTime\\$').val()),
+            appeUser: $('#appeUser').val(),
+
+        };
+        $.ajax({
+            url: baseUrl+"/trayCode/"+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: '#modiTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#appeTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '.layui-laydate-range'
+        ,type: 'datetime'
+        ,range: true
+    });
+
+    // 寮�濮嬫墦鍗�
+    form.on('submit(print)', function (data) {
+        $.ajax({
+            url: baseUrl+"/trayCode/print/preview",
+            headers: {'token': localStorage.getItem('token')},
+            data: data.field,
+            method: 'POST',
+            async: false,
+            success: function (res) {
+                if (res.code === 200){
+                    for (let i=0;i<res.data.length;i++){
+                        if (data.field.type === '1') {
+                            res.data[i]["barcodeUrl"]=baseUrl+"/file/barcode/qrcode/auth?" +
+                                "type="+data.field.type+"&param="+res.data[i].item+"&width="+200+"&height="+90;
+                        } else {
+                            res.data[i]["barcodeUrl"]=baseUrl+"/file/barcode/qrcode/auth?" +
+                                "type="+data.field.type+"&param="+res.data[i].item+"&width="+400+"&height="+180;
+                        }
+                    }
+                    var tpl = $('#trayCodeTemplate').html();
+                    var template = Handlebars.compile(tpl);
+                    var html = template(res);
+                    let box = $("#printBox");
+                    box.html(html);
+                    box.show();
+                    box.print({
+                        mediaPrint:true,
+                        deferred: $.Deferred().done(function () {
+                            layer.confirm('[閲嶈] 鎵撳嵃鏄惁鎴愬姛锛�',  {btn: ['Yes', 'No']}, function(){
+                                $.ajax({
+                                    url: baseUrl+"/trayCode/print/auth",
+                                    headers: {'token': localStorage.getItem('token')},
+                                    data: data.field,
+                                    method: 'POST',
+                                    success: function (res) {
+                                        if (res.code === 200){
+                                            layer.closeAll();
+                                            $(".layui-laypage-btn")[0].click();
+                                            layer.msg("鎿嶄綔鎴愬姛")
+                                        } else if (res.code === 403){
+                                            top.location.href = baseUrl+"/";
+                                        } else {
+                                            layer.msg(res.msg)
+                                        }
+                                    }
+                                })
+                            });
+                        })
+                    });
+                    box.hide();
+                    layer.closeAll();
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+            }
+        })
+    });
+
+    $('#cancel').click(function () {
+        layer.closeAll();
+    })
+});
+
+
+// 鍏抽棴鍔ㄤ綔
+$(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();
+    }
+});
diff --git a/src/main/webapp/static/js/user/user.js b/src/main/webapp/static/js/user/user.js
index 0d07fcf..9fd6b4b 100644
--- a/src/main/webapp/static/js/user/user.js
+++ b/src/main/webapp/static/js/user/user.js
@@ -1,4 +1,5 @@
 var pageCurr;
+var tableData;
 layui.use(['table','laydate', 'form'], function(){
     var table = layui.table;
     var $ = layui.jquery;
@@ -23,10 +24,10 @@
             // ,{field: 'hostName', align: 'center',title: '鎺堟潈鍟嗘埛'}
             ,{field: 'mobile', align: 'center',title: '璐﹀彿'}
             ,{field: 'username', align: 'center',title: '鍚嶇О'}
-            ,{field: 'password', align: 'center',title: '瀵嗙爜'}
+            // ,{field: 'password', align: 'center',title: '瀵嗙爜'}
             ,{field: 'roleName', align: 'center',title: '瑙掕壊'}
             // ,{field: 'createTime$', align: 'center',title: '娉ㄥ唽鏃堕棿'}
-            ,{field: 'status$', align: 'center',title: '鐘舵��'}
+            ,{field: 'status$', align: 'center',title: '鐘舵��', templet: '#statusTpl', width: 120, unresize: true}
 
             ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:100}
         ]],
@@ -49,10 +50,21 @@
             if (res.code === 403) {
                 top.location.href = baseUrl+"/";
             }
+            tableData = table.cache.user;
             pageCurr=curr;
             limit();
         }
     });
+
+    // 淇敼鐘舵��
+    form.on('switch(statusSwitch)', function (obj) {
+        var index  = obj.othis.parents('tr').attr("data-index");
+        var data = tableData[index];
+        data[this.name] = obj.elem.checked?1:0;
+        http.post(baseUrl+"/user/edit/auth", {id: data.id, status: data[this.name]}, function (res) {
+            layer.msg(res.msg);
+        })
+    })
 
     // 鐩戝惉鎺掑簭浜嬩欢
     table.on('sort(user)', function (obj) {
@@ -71,6 +83,7 @@
                 if (res.code === 403) {
                     top.location.href = baseUrl+"/";
                 }
+                tableData = table.cache.user;
                 pageCurr=curr;
                 limit();
             }
@@ -86,7 +99,7 @@
                     type: 2,
                     title: '鏂板',
                     maxmin: true,
-                    area: [top.detailWidth, top.detailHeight],
+                    area: ['30%', top.detailHeight],
                     shadeClose: true,
                     content: 'user_detail.html',
                     success: function(layero, index){
@@ -94,14 +107,6 @@
                         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;
@@ -178,31 +183,13 @@
     table.on('tool(user)', 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: 'user_detail.html',
-                    success: function(layero, index){
-                        setFormVal(layer.getChildFrame('#detail', index), data);
-                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
-                        layer.getChildFrame('#data-detail-submit,#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');
-                    }
-                });
-                break;
             // 缂栬緫
             case 'edit':
                 layer.open({
                     type: 2,
                     title: '淇敼',
                     maxmin: true,
-                    area: [top.detailWidth, top.detailHeight],
+                    area: ['30%', top.detailHeight],
                     shadeClose: true,
                     content: 'user_detail.html',
                     success: function(layero, index){
@@ -212,41 +199,6 @@
                         layero.find('iframe')[0].contentWindow.layui.form.render('select');
                     }
                 });
-                break;
-            case 'Role':
-                var param = top.reObject(data).roleId;
-                if (param === undefined) {
-                    layer.msg("鏃犳暟鎹�");
-                } else {
-                    layer.open({
-                        type: 2,
-                        title: '璇︽儏',
-                        maxmin: true,
-                        area: [top.detailHeight, top.detailWidth],
-                        shadeClose: false,
-                        content: '../role/role_detail.html',
-                        success: function(layero, index){
-                            $.ajax({
-                                url: baseUrl+"/role/"+ param +"/auth",
-                                headers: {'token': localStorage.getItem('token')},
-                                method: 'GET',
-                                success: function (res) {
-                                    if (res.code === 200){
-                                        setFormVal(layer.getChildFrame('#detail', index), res.data);
-                                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
-                                        layer.getChildFrame('#data-detail-submit,#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');
-                                    } else if (res.code === 403){
-                                        parent.location.href = "/";
-                                    }else {
-                                        layer.msg(res.msg)
-                                    }
-                                }
-                            })
-                        }
-                    });
-                }
                 break;
             case 'Host':
                 var param = top.reObject(data).hostId;
@@ -369,6 +321,7 @@
             if (res.code === 403) {
                 top.location.href = baseUrl+"/";
             }
+            tableData = table.cache.user;
             pageCurr=curr;
             if (res.data.length === 0 && count !== 0) {
                 tableIns.reload({
@@ -388,24 +341,6 @@
     for (var val in data) {
         el.find(":input[id='" + val + "']").val(data[val]);
     }
-}
-
-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.9);
-    }
-    layer.style(index, {
-        height: height +'px'
-    });
 }
 
 $('body').keydown(function () {
diff --git a/src/main/webapp/static/js/waitPakin/waitPakin.js b/src/main/webapp/static/js/waitPakin/waitPakin.js
new file mode 100644
index 0000000..56bc909
--- /dev/null
+++ b/src/main/webapp/static/js/waitPakin/waitPakin.js
@@ -0,0 +1,481 @@
+var pageCurr;
+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: '#waitPakin',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/waitPakin/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            // {type: 'checkbox'}
+//            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
+//             ,{field: 'id', align: 'center',title: '缂栧彿', sort: true}
+            {field: 'barcode', align: 'center',title: '鎵樼洏鐮�'}
+            ,{field: 'matnr', align: 'center',title: '鐗╂枡缂栫爜'}
+            ,{field: 'maktx', align: 'center',title: '鐗╂枡鎻忚堪'}
+            ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
+            ,{field: 'unit', align: 'center',title: '鍗曚綅'}
+            ,{field: 'status', align: 'center',title: '鐘舵��', templet:function(row){
+                    var html = "<input value='status' type='checkbox' lay-skin='switch' lay-text='寰呭叆搴搢宸插惎鍔�' lay-filter='tableCheckbox' disabled='disabled' table-index='"+row.LAY_TABLE_INDEX+"'";
+                    if(row.status !== 'Y'){html += " checked ";}
+                    html += ">";
+                    return html;
+                }}
+            ,{field: 'memo', align: 'center',title: '澶囨敞',hide: true}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿', hide: true}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳', hide: true}
+
+            // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+        ]],
+        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(locMast)', 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(waitPakin)', 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],
+                    content: 'waitPakin_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 'deleteData':
+                var data = checkStatus.data;
+                if (data.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/waitPakin/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 = {
+                        'waitPakin': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/waitPakin/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)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(waitPakin)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: true,
+                    content: 'waitPakin_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],
+                    content: 'waitPakin_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('#id', 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 '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: true,
+                       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){
+                                       top.location.href = baseUrl+"/";
+                                   }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: true,
+                       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){
+                                       top.location.href = baseUrl+"/";
+                                   }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(),
+            id: $('#id').val(),
+            barcode: $('#barcode').val(),
+            matnr: $('#matnr').val(),
+            maktx: $('#maktx').val(),
+            anfme: $('#anfme').val(),
+            unit: $('#unit').val(),
+            status: $('#status').val(),
+            memo: $('#memo').val(),
+            modiTime: top.strToDate($('#modiTime\\$').val()),
+            modiUser: $('#modiUser').val(),
+            appeTime: top.strToDate($('#appeTime\\$').val()),
+            appeUser: $('#appeUser').val(),
+
+        };
+        $.ajax({
+            url: baseUrl+"/waitPakin/"+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: '#modiTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#appeTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '.layui-laydate-range'
+        ,type: 'datetime'
+        ,range: true
+    });
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(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();
+    }
+});
diff --git a/src/main/webapp/static/js/waitPakinLog/waitPakinLog.js b/src/main/webapp/static/js/waitPakinLog/waitPakinLog.js
new file mode 100644
index 0000000..4c5a625
--- /dev/null
+++ b/src/main/webapp/static/js/waitPakinLog/waitPakinLog.js
@@ -0,0 +1,480 @@
+var pageCurr;
+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: '#waitPakinLog',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/waitPakinLog/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox'}
+//            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
+//             ,{field: 'id', align: 'center',title: '缂栧彿'}
+            ,{field: 'pakinId', align: 'center',title: '鍏ュ簱閫氱煡鍙�'}
+            ,{field: 'barcode', align: 'center',title: '鎵樼洏鐮�'}
+            ,{field: 'matnr', align: 'center',title: '鐗╂枡缂栫爜'}
+            ,{field: 'maktx', align: 'center',title: '鐗╂枡鎻忚堪'}
+            ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
+            ,{field: 'unit', align: 'center',title: '鍗曚綅'}
+            ,{field: 'status', align: 'center',title: '鐘舵��'}
+            ,{field: 'memo', align: 'center',title: '澶囨敞',hide:true}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿',hide:true}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳',hide:true}
+            // ,{field: 'appeTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+            // ,{field: 'appeUser$', align: 'center',title: '鍒涘缓鑰�',event: 'appeUser', style: 'cursor:pointer'}
+
+            // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+        ]],
+        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(locMast)', 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(waitPakinLog)', 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],
+                    content: 'waitPakinLog_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 'deleteData':
+                var data = checkStatus.data;
+                if (data.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/waitPakinLog/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 = {
+                        'waitPakinLog': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/waitPakinLog/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)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(waitPakinLog)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: true,
+                    content: 'waitPakinLog_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],
+                    content: 'waitPakinLog_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('#id', 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 '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: true,
+                       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){
+                                       top.location.href = baseUrl+"/";
+                                   }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: true,
+                       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){
+                                       top.location.href = baseUrl+"/";
+                                   }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(),
+            id: $('#id').val(),
+            pakinId: $('#pakinId').val(),
+            barcode: $('#barcode').val(),
+            matnr: $('#matnr').val(),
+            maktx: $('#maktx').val(),
+            anfme: $('#anfme').val(),
+            unit: $('#unit').val(),
+            status: $('#status').val(),
+            memo: $('#memo').val(),
+            modiTime: top.strToDate($('#modiTime\\$').val()),
+            modiUser: $('#modiUser').val(),
+            appeTime: top.strToDate($('#appeTime\\$').val()),
+            appeUser: $('#appeUser').val(),
+
+        };
+        $.ajax({
+            url: baseUrl+"/waitPakinLog/"+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: '#modiTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#appeTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '.layui-laydate-range'
+        ,type: 'datetime'
+        ,range: true
+    });
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(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();
+    }
+});
diff --git a/src/main/webapp/static/js/wrkDetl/wrkDetl.js b/src/main/webapp/static/js/wrkDetl/wrkDetl.js
index f1cfa59..13c7f4d 100644
--- a/src/main/webapp/static/js/wrkDetl/wrkDetl.js
+++ b/src/main/webapp/static/js/wrkDetl/wrkDetl.js
@@ -25,7 +25,7 @@
             // ,{field: 'tbnum', align: 'center',title: '杞偍璇锋眰缂栧彿'}
             // ,{field: 'tbpos', align: 'center',title: '琛岄」鐩�'}
             // ,{field: 'zmatid', align: 'center',title: '鐗╂枡鏍囩ID'}
-            ,{field: 'maktx', align: 'center',title: '鐗╂枡鎻忚堪'}
+            // ,{field: 'maktx', align: 'center',title: '鐗╂枡鎻忚堪'}
             // ,{field: 'werks', align: 'center',title: '宸ュ巶'}
             ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
             ,{field: 'altme', align: 'center',title: '鍗曚綅'}
diff --git a/src/main/webapp/static/js/wrkDetlLog/wrkDetlLog.js b/src/main/webapp/static/js/wrkDetlLog/wrkDetlLog.js
new file mode 100644
index 0000000..c4497e2
--- /dev/null
+++ b/src/main/webapp/static/js/wrkDetlLog/wrkDetlLog.js
@@ -0,0 +1,496 @@
+var pageCurr;
+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: '#wrkDetlLog',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/wrkDetlLog/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox'}
+//            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
+            ,{field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�'}
+            ,{field: 'ioTime$', align: 'center',title: '宸ヤ綔鏃堕棿'}
+            ,{field: 'matnr', align: 'center',title: '鐗╂枡缂栧彿'}
+            // ,{field: 'lgnum', align: 'center',title: '浠撳簱鍙�'}
+            // ,{field: 'tbnum', align: 'center',title: '杞偍璇锋眰缂栧彿'}
+            // ,{field: 'tbpos', align: 'center',title: '琛岄」鐩�'}
+            // ,{field: 'zmatid', align: 'center',title: '鐗╂枡鏍囩ID'}
+            ,{field: 'maktx', align: 'center',title: '鐗╂枡鎻忚堪'}
+            // ,{field: 'werks', align: 'center',title: '宸ュ巶'}
+            ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
+            ,{field: 'altme', align: 'center',title: '鍗曚綅'}
+            ,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜'}
+            // ,{field: 'bname', align: 'center',title: '鐢ㄦ埛ID'}
+            ,{field: 'memo', align: 'center',title: '澶囨敞',hide: true}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳',hide: true}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿',hide: true}
+            // ,{field: 'appeUser$', align: 'center',title: '鍒涘缓鑰�',event: 'appeUser', style: 'cursor:pointer'}
+            // ,{field: 'appeTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+            // ,{field: 'nista', align: 'center',title: ''}
+
+            // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+        ]],
+        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(locMast)', 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(wrkDetlLog)', 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],
+                    content: 'wrkDetlLog_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 'deleteData':
+                var data = checkStatus.data;
+                if (data.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/wrkDetlLog/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 = {
+                        'wrkDetlLog': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/wrkDetlLog/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)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(wrkDetlLog)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: true,
+                    content: 'wrkDetlLog_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],
+                    content: 'wrkDetlLog_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('', 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 '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: true,
+                       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){
+                                       top.location.href = baseUrl+"/";
+                                   }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: true,
+                       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){
+                                       top.location.href = baseUrl+"/";
+                                   }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(),
+            wrkNo: $('#wrkNo').val(),
+            ioTime: top.strToDate($('#ioTime\\$').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()),
+            nista: $('#nista').val(),
+
+        };
+        $.ajax({
+            url: baseUrl+"/wrkDetlLog/"+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: '#ioTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#modiTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#appeTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '.layui-laydate-range'
+        ,type: 'datetime'
+        ,range: true
+    });
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(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();
+    }
+});
diff --git a/src/main/webapp/static/js/wrkMast/wrkMast.js b/src/main/webapp/static/js/wrkMast/wrkMast.js
index ae7e21b..e1b226a 100644
--- a/src/main/webapp/static/js/wrkMast/wrkMast.js
+++ b/src/main/webapp/static/js/wrkMast/wrkMast.js
@@ -309,6 +309,16 @@
                     layer.closeAll();
                 });
                 break;
+            //  鎷f枡鍏ュ簱
+            case 'pick':
+                layer.confirm('鎷f枡鍏ュ簱璇ョ瑪宸ヤ綔妗o紵', {title: '宸ヤ綔鍙凤細'+data.wrkNo, shadeClose: true}, function(){
+                    http.post(baseUrl+"/hand/control/wrkMast", {workNo: data.wrkNo, type:3}, function (res) {
+                        $(".layui-laypage-btn")[0].click();
+                        layer.msg(data.wrkNo + res.msg);
+                    })
+                    layer.closeAll();
+                });
+                break;
             // 璇︽儏
             case 'detail':
                 layer.open({
diff --git a/src/main/webapp/static/js/wrkMastLog/wrkMastLog.js b/src/main/webapp/static/js/wrkMastLog/wrkMastLog.js
index 74fe97c..80d052e 100644
--- a/src/main/webapp/static/js/wrkMastLog/wrkMastLog.js
+++ b/src/main/webapp/static/js/wrkMastLog/wrkMastLog.js
@@ -27,10 +27,10 @@
             ,{field: 'ioType$', align: 'center',title: '鍏ュ嚭搴撶被鍨�', width:160}
             ,{field: 'ioPri', align: 'center',title: '浼樺厛绾�'}
             ,{field: 'crnNo$', align: 'center',title: '鍫嗗灈鏈哄彿'}
-            ,{field: 'sourceStaNo$', align: 'center',title: '婧愮珯',event: 'sourceStaNo', style: 'cursor:pointer'}
-            ,{field: 'staNo$', align: 'center',title: '鐩爣绔�',event: 'staNo', style: 'cursor:pointer'}
-            ,{field: 'sourceLocNo$', align: 'center',title: '婧愬簱浣�',event: 'sourceLocNo', style: 'cursor:pointer'}
-            ,{field: 'locNo$', align: 'center',title: '鐩爣搴撲綅',event: 'locNo', style: 'cursor:pointer'}
+            ,{field: 'sourceStaNo$', align: 'center',title: '婧愮珯'}
+            ,{field: 'staNo$', align: 'center',title: '鐩爣绔�'}
+            ,{field: 'sourceLocNo$', align: 'center',title: '婧愬簱浣�'}
+            ,{field: 'locNo$', align: 'center',title: '鐩爣搴撲綅'}
             // ,{field: 'picking', align: 'center',title: '鎷f枡', templet:function(row){
             //         var html = "<input value='picking' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
             //         if(row.picking === 'Y'){html += " checked ";}
diff --git a/src/main/webapp/static/layui/layer_mobile/layer.js b/src/main/webapp/static/layui/layer_mobile/layer.js
new file mode 100644
index 0000000..2eb3e28
--- /dev/null
+++ b/src/main/webapp/static/layui/layer_mobile/layer.js
@@ -0,0 +1,2 @@
+/*! layer mobile-v2.0 寮瑰眰缁勪欢绉诲姩鐗� License LGPL http://layer.layui.com/mobile By 璐ゅ績 */
+;!function(a){"use strict";var b=document,c="querySelectorAll",d="getElementsByClassName",e=function(a){return b[c](a)},f={type:0,shade:!0,shadeClose:!0,fixed:!0,anim:"scale"},g={extend:function(a){var b=JSON.parse(JSON.stringify(f));for(var c in a)b[c]=a[c];return b},timer:{},end:{}};g.touch=function(a,b){a.addEventListener("click",function(a){b.call(this,a)},!1)};var h=0,i=["layui-m-layer"],j=function(a){var b=this;b.config=g.extend(a),b.view()};j.prototype.view=function(){var a=this,c=a.config,f=b.createElement("div");a.id=f.id=i[0]+h,f.setAttribute("class",i[0]+" "+i[0]+(c.type||0)),f.setAttribute("index",h);var g=function(){var a="object"==typeof c.title;return c.title?'<h3 style="'+(a?c.title[1]:"")+'">'+(a?c.title[0]:c.title)+"</h3>":""}(),j=function(){"string"==typeof c.btn&&(c.btn=[c.btn]);var a,b=(c.btn||[]).length;return 0!==b&&c.btn?(a='<span yes type="1">'+c.btn[0]+"</span>",2===b&&(a='<span no type="0">'+c.btn[1]+"</span>"+a),'<div class="layui-m-layerbtn">'+a+"</div>"):""}();if(c.fixed||(c.top=c.hasOwnProperty("top")?c.top:100,c.style=c.style||"",c.style+=" top:"+(b.body.scrollTop+c.top)+"px"),2===c.type&&(c.content='<i></i><i class="layui-m-layerload"></i><i></i><p>'+(c.content||"")+"</p>"),c.skin&&(c.anim="up"),"msg"===c.skin&&(c.shade=!1),f.innerHTML=(c.shade?"<div "+("string"==typeof c.shade?'style="'+c.shade+'"':"")+' class="layui-m-layershade"></div>':"")+'<div class="layui-m-layermain" '+(c.fixed?"":'style="position:static;"')+'><div class="layui-m-layersection"><div class="layui-m-layerchild '+(c.skin?"layui-m-layer-"+c.skin+" ":"")+(c.className?c.className:"")+" "+(c.anim?"layui-m-anim-"+c.anim:"")+'" '+(c.style?'style="'+c.style+'"':"")+">"+g+'<div class="layui-m-layercont">'+c.content+"</div>"+j+"</div></div></div>",!c.type||2===c.type){var k=b[d](i[0]+c.type),l=k.length;l>=1&&layer.close(k[0].getAttribute("index"))}document.body.appendChild(f);var m=a.elem=e("#"+a.id)[0];c.success&&c.success(m),a.index=h++,a.action(c,m)},j.prototype.action=function(a,b){var c=this;a.time&&(g.timer[c.index]=setTimeout(function(){layer.close(c.index)},1e3*a.time));var e=function(){var b=this.getAttribute("type");0==b?(a.no&&a.no(),layer.close(c.index)):a.yes?a.yes(c.index):layer.close(c.index)};if(a.btn)for(var f=b[d]("layui-m-layerbtn")[0].children,h=f.length,i=0;h>i;i++)g.touch(f[i],e);if(a.shade&&a.shadeClose){var j=b[d]("layui-m-layershade")[0];g.touch(j,function(){layer.close(c.index,a.end)})}a.end&&(g.end[c.index]=a.end)},a.layer={v:"2.0",index:h,open:function(a){var b=new j(a||{});return b.index},close:function(a){var c=e("#"+i[0]+a)[0];c&&(c.innerHTML="",b.body.removeChild(c),clearTimeout(g.timer[a]),delete g.timer[a],"function"==typeof g.end[a]&&g.end[a](),delete g.end[a])},closeAll:function(){for(var a=b[d](i[0]),c=0,e=a.length;e>c;c++)layer.close(0|a[0].getAttribute("index"))}},"function"==typeof define?define(function(){return layer}):function(){var a=document.scripts,c=a[a.length-1],d=c.src,e=d.substring(0,d.lastIndexOf("/")+1);c.getAttribute("merge")||document.head.appendChild(function(){var a=b.createElement("link");return a.href=e+"need/layer.css?2.0",a.type="text/css",a.rel="styleSheet",a.id="layermcss",a}())}()}(window);
\ No newline at end of file
diff --git a/src/main/webapp/static/layui/layer_mobile/need/layer.css b/src/main/webapp/static/layui/layer_mobile/need/layer.css
new file mode 100644
index 0000000..b9dbf20
--- /dev/null
+++ b/src/main/webapp/static/layui/layer_mobile/need/layer.css
@@ -0,0 +1 @@
+.layui-m-layer{position:relative;z-index:19891014}.layui-m-layer *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.layui-m-layermain,.layui-m-layershade{position:fixed;left:0;top:0;width:100%;height:100%}.layui-m-layershade{background-color:rgba(0,0,0,.7);pointer-events:auto}.layui-m-layermain{display:table;font-family:Helvetica,arial,sans-serif;pointer-events:none}.layui-m-layermain .layui-m-layersection{display:table-cell;vertical-align:middle;text-align:center}.layui-m-layerchild{position:relative;display:inline-block;text-align:left;background-color:#fff;font-size:14px;border-radius:5px;box-shadow:0 0 8px rgba(0,0,0,.1);pointer-events:auto;-webkit-overflow-scrolling:touch;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@-webkit-keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.layui-m-anim-scale{animation-name:layui-m-anim-scale;-webkit-animation-name:layui-m-anim-scale}@-webkit-keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.layui-m-anim-up{-webkit-animation-name:layui-m-anim-up;animation-name:layui-m-anim-up}.layui-m-layer0 .layui-m-layerchild{width:90%;max-width:640px}.layui-m-layer1 .layui-m-layerchild{border:none;border-radius:0}.layui-m-layer2 .layui-m-layerchild{width:auto;max-width:260px;min-width:40px;border:none;background:0 0;box-shadow:none;color:#fff}.layui-m-layerchild h3{padding:0 10px;height:60px;line-height:60px;font-size:16px;font-weight:400;border-radius:5px 5px 0 0;text-align:center}.layui-m-layerbtn span,.layui-m-layerchild h3{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-m-layercont{padding:50px 30px;line-height:22px;text-align:center}.layui-m-layer1 .layui-m-layercont{padding:0;text-align:left}.layui-m-layer2 .layui-m-layercont{text-align:center;padding:0;line-height:0}.layui-m-layer2 .layui-m-layercont i{width:25px;height:25px;margin-left:8px;display:inline-block;background-color:#fff;border-radius:100%;-webkit-animation:layui-m-anim-loading 1.4s infinite ease-in-out;animation:layui-m-anim-loading 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-m-layerbtn,.layui-m-layerbtn span{position:relative;text-align:center;border-radius:0 0 5px 5px}.layui-m-layer2 .layui-m-layercont p{margin-top:20px}@-webkit-keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}@keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}.layui-m-layer2 .layui-m-layercont i:first-child{margin-left:0;-webkit-animation-delay:-.32s;animation-delay:-.32s}.layui-m-layer2 .layui-m-layercont i.layui-m-layerload{-webkit-animation-delay:-.16s;animation-delay:-.16s}.layui-m-layer2 .layui-m-layercont>div{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;height:50px;line-height:50px;font-size:0;border-top:1px solid #D0D0D0;background-color:#F2F2F2}.layui-m-layerbtn span{display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;font-size:14px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40AFFE}.layui-m-layerbtn span[no]{border-right:1px solid #D0D0D0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#F6F6F6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#FD482C;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px}
\ No newline at end of file
diff --git a/src/main/webapp/views/adjDetl/adjDetl.html b/src/main/webapp/views/adjDetl/adjDetl.html
index c0659db..8ab8fa9 100644
--- a/src/main/webapp/views/adjDetl/adjDetl.html
+++ b/src/main/webapp/views/adjDetl/adjDetl.html
@@ -60,8 +60,8 @@
 </div>
 <script type="text/html" id="toolbar">
     <div class="layui-btn-container">
-        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
-        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+<!--        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>-->
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="margin-top: 10px">瀵煎嚭</button>
     </div>
 </script>
 
diff --git a/src/main/webapp/views/errorWrkMast/errorWrkMast.html b/src/main/webapp/views/errorWrkMast/errorWrkMast.html
new file mode 100644
index 0000000..2d5507b
--- /dev/null
+++ b/src/main/webapp/views/errorWrkMast/errorWrkMast.html
@@ -0,0 +1,123 @@
+<!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">
+    <style>
+        .layui-btn .layui-icon {
+            margin: 0;
+        }
+        #btn-pri-add {
+            display: none;
+        }
+        #btn-pri-red {
+            display: none;
+        }
+        .btn-complete {
+            display: none;
+        }
+        .btn-cancel {
+            display: none;
+        }
+
+        /*鏄庣粏琛�*/
+        #detlTable {
+            margin-top: 20px;
+        }
+
+        #search-box {
+            padding: 30px 30px 10px 30px;
+        }
+        #search-box .layui-inline {
+            margin-right: 5px;
+        }
+        #data-search-btn {
+            margin-top: 10px;
+        }
+        #data-search-btn.layui-btn-container .layui-btn {
+            margin-right: 20px;
+        }
+    </style>
+</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="wrk_no" placeholder="宸ヤ綔鍙�" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline cool-auto-complete">
+            <input id="wrkSts" class="layui-input" name="wrk_sts" type="text" placeholder="璇疯緭鍏�" autocomplete="off" style="display: none">
+            <input id="wrkSts$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="宸ヤ綔鐘舵��" onfocus=this.blur()>
+            <div class="cool-auto-complete-window">
+                <input class="cool-auto-complete-window-input" data-key="basWrkStatusQueryBywrkSts" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                <select class="cool-auto-complete-window-select" data-key="basWrkStatusQueryBywrkStsSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                </select>
+            </div>
+        </div>
+    </div>
+    <!-- 鏃ユ湡鑼冨洿 -->
+    <div class="layui-inline" style="width: 300px">
+        <div class="layui-input-inline">
+            <input class="layui-input layui-laydate-range" name="error_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 id="data-search-btn" class="layui-btn-container layui-form-item">
+        <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>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<div class="layui-form">
+    <table class="layui-hide" id="wrkMast" lay-filter="wrkMast"></table>
+</div>
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-normal" id="btn-pri-add" lay-event="priAdd"><i class="layui-icon">&#xe624;</i>澧炲姞浼樺厛绾�</button>
+        <button class="layui-btn layui-btn-normal" id="btn-pri-red" lay-event="priRed"><i class="layui-icon">&#xe67e;</i>闄嶄綆浼樺厛绾�</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+    </div>
+</script>
+
+<!--鏄庣粏琛�-->
+<div id="detlTable" style="display: none">
+    <div class="layui-inline"  style="width:90%;margin-top: 10px;margin-left: 20px">
+        <span style=" color: indianred">浠ヤ笅涓哄綋鍓嶅伐浣滄祦鐨勭墿鏂欐槑缁�</span>
+    </div>
+
+    <table class="layui-hide" id="wrkDetlByMap" lay-filter="wrkDetlByMap"></table>
+</div>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-sm btn-detlShow" lay-event="detlShow">鏄庣粏</a>
+    <a class="layui-btn layui-btn-danger layui-btn-sm btn-complete" lay-event="complete">瀹屾垚</a>
+    <a class="layui-btn layui-btn-primary layui-btn-sm btn-cancel" lay-event="cancel">鍙栨秷</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/errorWrkMast/errorWrkMast.js" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+</body>
+</html>
+
diff --git a/src/main/webapp/views/locMast/locMast.html b/src/main/webapp/views/locMast/locMast.html
index 85406b5..2fc2770 100644
--- a/src/main/webapp/views/locMast/locMast.html
+++ b/src/main/webapp/views/locMast/locMast.html
@@ -142,7 +142,7 @@
             </div>
         </div>
         <div id="prompt" style="text-indent: 10px;">
-            <span class="not-null">鍒濆鍖栦細娓呴櫎搴撲綅鎵�鏈夋暟鎹紝璇疯皑鎱庢搷浣滐紒</span>
+            <span class="not-null">鍒濆鍖栧簱浣嶅悗灏嗗垹闄ゅ簱瀛樻槑缁嗭紝璇疯皑鎱庢搷浣滐紒</span>
         </div>
         <!-- 鎸夐挳 -->
         <div style="text-align: center; margin-top: 20px">
diff --git a/src/main/webapp/views/locMast/locMast_detail.html b/src/main/webapp/views/locMast/locMast_detail.html
index 218edf1..bf17a98 100644
--- a/src/main/webapp/views/locMast/locMast_detail.html
+++ b/src/main/webapp/views/locMast/locMast_detail.html
@@ -29,6 +29,18 @@
                 <input id="locNo" class="layui-input" type="text" onkeyup="check(this.id, 'locMast')">
             </div>
         </div>
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label"><span class="not-null">*</span>搴撲綅鐘舵�侊細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="locType" class="layui-input" type="text" style="display: none" lay-verify="required" >
+                <input id="locType$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="basLocTypeQueryBylocType" onkeyup="autoLoad(this.getAttribute('data-key'))" >
+                    <select class="cool-auto-complete-window-select" data-key="basLocTypeQueryBylocTypeSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
         <div class="layui-inline"  style="width:80%;display: none">
             <label class="layui-form-label">搴撲綅绫诲瀷锛�</label>
             <div class="layui-input-inline cool-auto-complete">
@@ -93,18 +105,6 @@
             <label class="layui-form-label">婊°��銆�鏉匡細</label>
             <div class="layui-input-inline" style="text-align: left">
                 <input id="fullPlt" class="layui-input" type="checkBox" lay-skin="primary" lay-filter='detailCheckbox'>
-            </div>
-        </div>
-        <div class="layui-inline"  style="width:80%;">
-            <label class="layui-form-label"><span class="not-null">*</span>搴撲綅鐘舵�侊細</label>
-            <div class="layui-input-inline cool-auto-complete">
-                <input id="locType" class="layui-input" type="text" style="display: none" lay-verify="required" >
-                <input id="locType$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
-                <div class="cool-auto-complete-window">
-                    <input class="cool-auto-complete-window-input" data-key="basLocTypeQueryBylocType" onkeyup="autoLoad(this.getAttribute('data-key'))" >
-                    <select class="cool-auto-complete-window-select" data-key="basLocTypeQueryBylocTypeSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
-                    </select>
-                </div>
             </div>
         </div>
         <div class="layui-inline"  style="width:31%;display: none">
diff --git a/src/main/webapp/views/login.html b/src/main/webapp/views/login.html
index d8442c9..ae22f7c 100644
--- a/src/main/webapp/views/login.html
+++ b/src/main/webapp/views/login.html
@@ -42,6 +42,7 @@
         }
 
         #login-wrapper h2 {
+            letter-spacing: 3px;
             font-size: 26px;
             margin-bottom: 30px;
         }
@@ -71,7 +72,7 @@
             font-size: 18px;
         }
         .layui-btn-normal {
-            background-color: #0767aa;
+            background-color: #5FB878;
             font-size: 20px;
             border-radius: 4px;
             height: 52px;
@@ -108,8 +109,8 @@
     </header>
     <div class="layui-form layadmin-user-login-body">
         <div class="layui-form-item">
-            <label class="layui-icon layui-icon-cellphone layadmin-user-login-icon"></label>
-            <input id="mobile" class="layui-input" type="text" name="mobile" lay-verify="mobile" placeholder="鐢ㄦ埛鍚�">
+            <label class="layui-icon layui-icon-username layadmin-user-login-icon"></label>
+            <input id="mobile" class="layui-input" type="text" name="mobile" lay-verify="mobile" placeholder="璐﹀彿">
         </div>
         <div class="layui-form-item">
             <label class="layui-icon layui-icon-password layadmin-user-login-icon"></label>
@@ -120,10 +121,9 @@
             <input id="code" class="layui-input" type="text" name="password" lay-verify="code" placeholder="楠岃瘉鐮�">
             <img id="codeImg" title="鐪嬩笉娓咃紵鐐瑰嚮鎹竴寮犮��">
         </div>
-        <!--<div class="layui-form-item">-->
-            <!--<input id="rememberPwd" style="vertical-align: middle" type="checkbox" lay-filter="remPwd" lay-skin="switch" lay-text="寮�鍚瘄鍏抽棴" title="璁颁綇瀵嗙爜" checked="checked">-->
-            <!--<span style="vertical-align: middle;font-size: 15px">璁颁綇瀵嗙爜</span>-->
-        <!--</div>-->
+        <div class="layui-form-item" style="text-align: left;padding-left: 3px;">
+            <input id="rememberPwd" style="vertical-align: middle" type="checkbox" lay-skin='primary' lay-filter="remPwd" title="璁颁綇瀵嗙爜" checked="checked">
+        </div>
     </div>
     <div class="layui-form-item login-submit">
         <button id="login-button" class="layui-btn layui-btn-fluid layui-btn-normal" lay-submit="" lay-filter="login">鐧� 褰�</button>
@@ -134,6 +134,17 @@
 <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
 <script type="text/javascript" src="../static/js/tools/md5.js"></script>
 <script type="text/javascript">
+
+    $(function () {
+        var oldUserName = localStorage.getItem('oldUserName');
+        var oldPass = localStorage.getItem('oldPass');
+        if(oldUserName){
+            $('#mobile').val(oldUserName);
+        }
+        if(oldPass){
+            $('#password').val(oldPass);
+        }
+    })
 
     // 楠岃瘉鐮佸紑鍏�
     var codeSwitch = 'Y';
@@ -205,6 +216,14 @@
                 method: 'POST',
                 success: function (res) {
                     if (res.code === 200){
+                        // 璁颁綇瀵嗙爜
+                        if($('#rememberPwd').is(':checked')){
+                            localStorage.setItem('oldUserName',user.mobile);
+                            localStorage.setItem('oldPass',user.password);
+                        } else {
+                            localStorage.removeItem('oldUserName');
+                            localStorage.removeItem('oldPass');
+                        }
                         localStorage.setItem("token", res.data.token);
                         localStorage.setItem("username", res.data.username);
                         window.location.href = "index.html";
diff --git a/src/main/webapp/views/matCode/matCode.html b/src/main/webapp/views/matCode/matCode.html
index 7c16e1f..e648b31 100644
--- a/src/main/webapp/views/matCode/matCode.html
+++ b/src/main/webapp/views/matCode/matCode.html
@@ -9,6 +9,7 @@
     <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">
+    <link rel="stylesheet" href="../../static/css/print.css" media="all">
     <style>
         #search-box {
             padding: 30px 30px 10px 30px;
@@ -36,6 +37,7 @@
 
         /* ------------------------- 鎵撳嵃琛ㄦ牸 -----------------------  */
         .template-preview {
+            height: 200px;
             display: inline-block;
         }
         .contain {
@@ -155,54 +157,40 @@
 
                 <!-- 棰勮鍥� 1 -->
                 <div id="template-preview-1" class="template-preview" style="display: inline-block">
-                    <table class="contain" height="217" width="317" style="overflow: hidden;font-size: xx-small">
-                        <tr>
-                            <td colspan="1" align="center" scope="col">鏉$爜</td>
-                            <td class="barcode" colspan="3" align="center" scope="col">
-                                <img class="template-code template-barcode" src="" width="80%">
-                                <div style="letter-spacing: 2px;margin-top: 3px; text-align: center">
+                    <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
+                        <tr style="height: 74px">
+                            <td colspan="3" align="center" scope="col">鐗╂枡缂栫爜</td>
+                            <td class="barcode" colspan="9" align="center" scope="col">
+                                <img class="template-code template-barcode" src="" width="90%;">
+                                <div style="letter-spacing: 2px;margin-top: 1px; text-align: center;">
                                     <span>xxxxxx</span>
                                 </div>
                             </td>
                         </tr>
-                        <tr>
-                            <td align="center" width="25%">鐗╂枡缂栫爜</td>
-                            <td align="center" width="25%">xxxxxx-xx/xx</td>
-                            <td align="center" width="25%">鐗╂枡鍚嶇О</td>
-                            <td align="center" width="25%">xxxxxxx</td>
-                        </tr>
-                        <tr>
-                            <td align="center" width="25%">鐗╂枡鍗曚綅</td>
-                            <td align="center" width="25%">xxxxxxxx</td>
-                            <td align="center" width="25%">鐗╂枡瑙勬牸</td>
-                            <td align="center" width="25%">xxxxxxx</td>
+                        <tr style="height: 74px">
+                            <td align="center" colspan="3">鐗╂枡鍚嶇О</td>
+                            <td align="center" colspan="5">xxxxxx-xx/xx</td>
+                            <td align="center" colspan="2">鍗曚綅</td>
+                            <td align="center" colspan="2">xx</td>
                         </tr>
                     </table>
                 </div>
 
                 <!-- 棰勮鍥� 2 -->
                 <div id="template-preview-2" class="template-preview" style="display: none">
-                    <table class="contain" height="217" width="317" style="overflow: hidden;font-size: xx-small">
-                        <tr>
-                            <td align="center" scope="col" width="20%" colspan="1">鐗╂枡缂栫爜</td>
-                            <td align="center" scope="col" width="80%" colspan="5">xxxxxx-xx/xx</td>
+                    <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
+                        <tr style="height: 30px">
+                            <td align="center" width="20%">鐗╂枡鍚嶇О</td>
+                            <td align="center" width="80%" style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">xxxxxxx</td>
                         </tr>
-                        <tr>
-                            <td align="center" colspan="1">鐗╂枡鍚嶇О</td>
-                            <td align="center" colspan="5">xxxxxxx</td>
+                        <tr style="height: 30px">
+                            <td align="center" width="20%">鐗╂枡鍗曚綅</td>
+                            <td align="center" width="80%">xxxxxxxx</td>
                         </tr>
-                        <tr>
-                            <td align="center" colspan="1">鐗╂枡鍗曚綅</td>
-                            <td align="center" colspan="5">xxxxxxxx</td>
-                        </tr>
-                        <tr>
-                            <td align="center" colspan="1">鐗╂枡瑙勬牸</td>
-                            <td align="center" colspan="5">xxxxxxx</td>
-                        </tr>
-                        <tr>
-                            <td align="center" colspan="6" style="border: none">
+                        <tr style="height: 75px;">
+                            <td align="center" colspan="2" width="100%" style="border: none">
                                 <img class="template-code template-barcode" src="" width="80%">
-                                <div style="letter-spacing: 2px;margin-top: 3px; text-align: center">
+                                <div style="letter-spacing: 2px;margin-top: 1px; text-align: center">
                                     <span>xxxxxx</span>
                                 </div>
                             </td>
@@ -212,33 +200,23 @@
 
                 <!-- 棰勮鍥� 3 -->
                 <div id="template-preview-3" class="template-preview" style="display: none">
-                    <table class="contain" height="217" width="317" style="overflow: hidden;font-size: xx-small">
-                        <tr>
-                            <td align="center" scope="col" width="50%" colspan="3">鐗╂枡缂栫爜</td>
-                            <td align="center" scope="col" width="50%" colspan="3">xxxxxx-xx/xx</td>
-                        </tr>
-                        <tr>
-                            <td align="center" colspan="3">鐗╂枡鍚嶇О</td>
-                            <td align="center" colspan="3">xxxxxxx</td>
-                        </tr>
-                        <tr>
-                            <td align="center" width="50%" rowspan="1" colspan="3">鐗╂枡瑙勬牸</td>
-                            <td align="center" width="50%" colspan="3" rowspan="4">
-                                <img class="template-code template-qrcode" src="">
+                    <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
+                        <tr style="height: 74px">
+                            <td align="center" scope="col" colspan="1">鐗╂枡鍚嶇О</td>
+                            <td align="center" scope="col" colspan="1" style="">xxxxxx-xx/xx</td>
+                            <td align="center" scope="col" colspan="2" rowspan="2">
+                                <img class="template-code template-qrcode" src="" width="80%">
+                                <div style="letter-spacing: 1px;margin-top: 1px; text-align: center">
+                                    <span>xxxxxx</span>
+                                </div>
                             </td>
                         </tr>
-                        <tr>
-                            <td align="center" colspan="3" rowspan="1">xxxxxx</td>
-                        </tr>
-                        <tr>
-                            <td align="center" colspan="3" rowspan="1">鐗╂枡鍗曚綅</td>
-                        </tr>
-                        <tr>
-                            <td align="center" colspan="3" rowspan="1">xxxxxxxx</td>
+                        <tr style="height: 74px">
+                            <td align="center" colspan="1">鐗╂枡鍗曚綅</td>
+                            <td align="center" colspan="1" style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">xxxxxxx</td>
                         </tr>
                     </table>
                 </div>
-
             </div>
         </fieldset>
 
@@ -258,27 +236,21 @@
 <!-- 妯℃澘1 -->
 <script type="text/template" id="templatePreview1" class="template-barcode">
     {{#each data}}
-    <table class="contain" height="217" width="317" style="overflow: hidden;font-size: xx-small">
-        <tr>
-            <td align="center" colspan="1" scope="col">鏉$爜</td>
-            <td align="center" class="barcode" colspan="3" scope="col">
-                <img class="template-code" src="{{this.barcodeUrl}}" width="80%">
-                <div style="letter-spacing: 2px;margin-top: 3px; text-align: center">
-                    <span>{{this.barcode}}</span>
+    <table class="contain" width="280" style="overflow: hidden;font-size: small;table-layout: fixed;">
+        <tr style="height: 74px">
+            <td align="center" colspan="3" scope="col">鐗╂枡缂栫爜</td>
+            <td align="center" class="barcode" colspan="9" scope="col">
+                <img class="template-code" src="{{this.barcodeUrl}}" width="90%">
+                <div style="letter-spacing: 2px;margin-top: 1px; text-align: center">
+                    <span>{{this.matNo}}</span>
                 </div>
             </td>
         </tr>
-        <tr>
-            <td align="center" width="25%">鐗╂枡缂栫爜</td>
-            <td align="center" width="25%">{{this.matNo}}</td>
-            <td align="center" width="25%">鐗╂枡鍚嶇О</td>
-            <td align="center" width="25%">{{this.matName}}</td>
-        </tr>
-        <tr>
-            <td align="center" width="25%">鐗╂枡鍗曚綅</td>
-            <td align="center" width="25%">{{this.str1}}</td>
-            <td align="center" width="25%">鐗╂枡瑙勬牸</td>
-            <td align="center" width="25%">{{this.str2}}</td>
+        <tr style="height: 74px">
+            <td align="center" colspan="3">鐗╂枡鍚嶇О</td>
+            <td align="center" colspan="5" style="overflow: hidden; white-space: nowrap;text-overflow: ellipsis;">{{this.matName}}</td>
+            <td align="center" colspan="2">鍗曚綅</td>
+            <td align="center" colspan="2">{{this.str1}}</td>
         </tr>
     </table>
     {{/each}}
@@ -286,27 +258,19 @@
 <!-- 妯℃澘2 -->
 <script type="text/template" id="templatePreview2" class="template-barcode">
     {{#each data}}
-    <table class="contain" height="217" width="317" style="overflow: hidden;font-size: xx-small">
-        <tr>
-            <td align="center" scope="col" width="20%" colspan="1">鐗╂枡缂栫爜</td>
-            <td align="center" scope="col" width="80%" colspan="5">{{this.matNo}}</td>
+    <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
+        <tr style="height: 35px">
+            <td align="center" width="20%">鐗╂枡鍚嶇О</td>
+            <td align="center" width="80%" style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.matName}}</td>
         </tr>
-        <tr>
-            <td align="center" colspan="1">鐗╂枡鍚嶇О</td>
-            <td align="center" colspan="5">{{this.matName}}</td>
+        <tr style="height: 35px">
+            <td align="center" width="20%">鐗╂枡鍗曚綅</td>
+            <td align="center" width="80%">{{this.str1}}</td>
         </tr>
-        <tr>
-            <td align="center" colspan="1">鐗╂枡鍗曚綅</td>
-            <td align="center" colspan="5">{{this.str1}}</td>
-        </tr>
-        <tr>
-            <td align="center" colspan="1">鐗╂枡瑙勬牸</td>
-            <td align="center" colspan="5">{{this.str2}}</td>
-        </tr>
-        <tr>
-            <td align="center" colspan="6" style="border: none">
+        <tr style="height: 79px;">
+            <td align="center" colspan="2" width="100%" style="border: none">
                 <img class="template-code" src="{{this.barcodeUrl}}" width="80%">
-                <div style="letter-spacing: 2px;margin-top: 3px; text-align: center">
+                <div style="letter-spacing: 2px;margin-top: 1px; text-align: center">
                     <span>{{this.matNo}}</span>
                 </div>
             </td>
@@ -317,29 +281,20 @@
 <!-- 妯℃澘3 -->
 <script type="text/template" id="templatePreview3" class="template-qrcode">
     {{#each data}}
-    <table class="contain" height="217" width="317" style="overflow: hidden;font-size: xx-small">
-        <tr>
-            <td align="center" scope="col" width="50%" colspan="3">鐗╂枡缂栫爜</td>
-            <td align="center" scope="col" width="50%" colspan="3">{{this.matNo}}</td>
-        </tr>
-        <tr>
-            <td align="center" colspan="3">鐗╂枡鍚嶇О</td>
-            <td align="center" colspan="3">{{this.matName}}</td>
-        </tr>
-        <tr>
-            <td align="center" width="50%" rowspan="1" colspan="3">鐗╂枡鍗曚綅</td>
-            <td align="center" width="50%" colspan="3" rowspan="4">
-                <img class="template-code template-qrcode" src="{{this.barcodeUrl}}">
+    <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
+        <tr style="height: 74px">
+            <td align="center" scope="col" colspan="1">鐗╂枡鍚嶇О</td>
+            <td align="center" scope="col" colspan="1" style="">{{this.matName}}</td>
+            <td align="center" scope="col" colspan="2" rowspan="2">
+                <img class="template-code template-qrcode" src="{{this.barcodeUrl}}" width="80%">
+                <div style="letter-spacing: 1px;margin-top: 1px; text-align: center">
+                    <span>{{this.matNo}}</span>
+                </div>
             </td>
         </tr>
-        <tr>
-            <td align="center" colspan="3" rowspan="1">{{this.str1}}</td>
-        </tr>
-        <tr>
-            <td align="center" colspan="3" rowspan="1">鐗╂枡瑙勬牸</td>
-        </tr>
-        <tr>
-            <td align="center" colspan="3" rowspan="1">{{this.str2}}</td>
+        <tr style="height: 74px">
+            <td align="center" colspan="1">鐗╂枡鍗曚綅</td>
+            <td align="center" colspan="1" style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.str1}}</td>
         </tr>
     </table>
     {{/each}}
diff --git a/src/main/webapp/views/operateLog/operateLog.html b/src/main/webapp/views/operateLog/operateLog.html
index 8ca94d7..827ece5 100644
--- a/src/main/webapp/views/operateLog/operateLog.html
+++ b/src/main/webapp/views/operateLog/operateLog.html
@@ -30,7 +30,12 @@
             </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>
+    </div>
     <!-- 寰呮坊鍔� -->
     <div id="data-search-btn" class="layui-btn-container layui-form-item">
         <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
@@ -42,15 +47,14 @@
 <table class="layui-hide" id="operateLog" lay-filter="operateLog"></table>
 <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-delete" lay-event="deleteData">鍒犻櫎</button>
+<!--        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>-->
+<!--        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>-->
         <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>
-    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
 </script>
 
 <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
diff --git a/src/main/webapp/views/pda/comb.html b/src/main/webapp/views/pda/comb.html
new file mode 100644
index 0000000..01e0d7b
--- /dev/null
+++ b/src/main/webapp/views/pda/comb.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, target-densitydpi=high-dpi, initial-scale=1.0, user-scalable=no"/>
+    <title>缁勬墭</title>
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/pda.css" media="all">
+    <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/handlebars/handlebars-v4.5.3.js"></script>
+    <style>
+
+    </style>
+</head>
+<body>
+<!-- 澶撮儴 -->
+<header>
+    <div class="layui-input-inline">
+        <label class="layui-form-label">鏉$爜</label>
+        <input class="layui-input" type="text" id="code" placeholder="鎵爜 / 杈撳叆" autocomplete="off">
+    </div>
+    <div style="margin: 5px 5px">
+        <button type="button" class="layui-btn layui-btn-normal  layui-btn-xs" onclick="getMat()"><i class="layui-icon">+</i>鎻愬彇</button>
+    </div>
+</header>
+
+<!-- 涓讳綋 -->
+<main>
+    <table class="layui-table" id="chooseData" lay-filter="chooseData"></table>
+</main>
+<!-- 灏鹃儴 -->
+<footer>
+    <div class="layui-btn-container">
+        <button type="button" class="layui-btn layui-btn-xs layui-btn-primary" onclick="reset()">閲嶇疆</button>
+        <button type="button" class="layui-btn layui-btn-normal  layui-btn-xs" onclick="comb()" style="margin-left: 20px">缁勬墭</button>
+        <span id="tips"></span>
+    </div>
+</footer>
+</body>
+<script>
+    var tableIns;
+    layui.use(['table','laydate', 'form'], function() {
+        var table = layui.table;
+        var $ = layui.jquery;
+        var layer = layui.layer;
+        var form = layui.form;
+
+        tableIns = table.render({
+            elem: '#chooseData',
+            data: [],
+            limit: 500,
+            cellMinWidth: 50,
+            cols: [[
+                {fixed: 'left', align: 'center', field: 'count', title: '閲�', style:'color: blue', width:20},
+                {field: 'matNo', align: 'center', title: '鐗╂枡缂栫爜'},
+                {field: 'matName', align: 'center', title: '鐗╂枡鍚嶇О'}
+            ]],
+            done: function (res, curr, count) {
+            }
+        });
+
+    });
+
+    window.onload = function(){document.getElementById("code").focus();}
+
+    var matCodeLayerIdx;
+    function getMat() {
+        matCodeLayerIdx = layer.open({
+            type: 2,
+            title: '鐗╂枡',
+            shade: [0.3,'#000'],
+            area: ['90%', '90%'],
+            content: 'matQuery.html',
+            success: function(layero, index){
+                $('.layui-layer-title').css('height', '20px').css('line-height', '20px').css('font-size', '12px').css('padding-left', '10px')
+                $('.layui-layer-setwin').css("top", '2px').css('right', '3px')
+            }
+        });
+    }
+
+    // 娣诲姞琛ㄦ牸鏁版嵁
+    var matData = [];
+    function addTableData(data) {
+        if (isEmpty(data.matName)){
+            tips("鎻愬彇澶辫触");
+            return;
+        }
+        let toPush = true;
+        for (var j=0;j<matData.length;j++){
+            if (data.matNo === matData[j].matNo) {
+                matData[j].count = Number(matData[j].count) + Number(data.count);
+                toPush  = false;
+            }
+        }
+        if (toPush) {
+            matData.push(data);
+        }
+        tips("鎻愬彇鎴愬姛");
+        tableIns.reload({data: matData});
+    }
+
+    // 閲嶇疆
+    function reset() {
+        $('#code').val("");
+        matData = [];
+        tableIns.reload({data: matData});
+        tips("");
+    }
+
+    // 缁勬墭
+    function comb() {
+        let barcode = $('#code').val();
+        if (isEmpty(barcode)) {
+            tips("鎵樼洏鏉$爜涓虹┖", true);
+            document.getElementById("code").focus();
+            return;
+        }
+        if (matData.length === 0) {
+            tips("璇锋彁鍙栫墿鏂�", true);
+            return;
+        }
+        $.ajax({
+            url: baseUrl+"/mobile/comb/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: JSON.stringify({
+                barcode: barcode,
+                combMats: matData
+            }),
+            contentType:'application/json;charset=UTF-8',
+            method: 'POST',
+            async: false,
+            success: function (res) {
+                if (res.code === 200) {
+                    reset();
+                    tips("缁勬墭鎴愬姛")
+                } else if (res.code === 403) {
+                    top.location.href = baseUrl + "/pda";
+                } else {
+                    tips(res.msg, true)
+                }
+            }
+        })
+    }
+
+    /**
+     * 鎻愮ず淇℃伅
+     * @param msg 鎻愮ず鍐呭
+     * @param warn true锛氱孩鑹插瓧浣�
+     */
+    function tips(msg, warn) {
+        let tips = $('#tips');
+        tips.html(msg);
+        tips.css("color", warn?"red":'#666');
+    }
+</script>
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/pda/index.html b/src/main/webapp/views/pda/index.html
new file mode 100644
index 0000000..3876ad6
--- /dev/null
+++ b/src/main/webapp/views/pda/index.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, target-densitydpi=high-dpi, initial-scale=1.0, user-scalable=no"/>
+    <title>PDA棣栭〉</title>
+    <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+    <style>
+        * {
+            margin: 0;
+            padding: 0;
+            box-sizing: border-box;
+            -webkit-box-sizing: border-box;
+            -moz-box-sizing: border-box;
+        }
+        html {
+            height: 100%;
+            /*line-height: 1.5;*/
+        }
+        body {
+            height: 100%;
+        }
+
+        /* 瀵艰埅 */
+        .nav {
+            background-color: #fff; /*todo*/
+            color: #000;
+            list-style-type: none;
+            position: fixed;
+            width: 100%;
+            overflow: hidden;
+            box-shadow: 0 1px 2px 0 rgba(0,0,0,.1)
+        }
+        .nav li {
+            float: left;
+            border-right: 1px solid #f1f1f1; /*todo*/
+        }
+        .nav li a {
+            font-size: 14px;
+            letter-spacing: 1px;
+            display: block;
+            text-decoration: none;
+            padding: 3px 10px;
+            text-align: center;
+            /*transform:scale(1.5);*/
+            /*-webkit-transform:scale(1.5);*/
+            /*-moz-transform:scale(1.5);*/
+        }
+        .nav li a:hover {
+            color: #000;
+        }
+        .nav-unselect {
+            color: #666;
+        }
+        .nav-select {
+            background-color: #f1f1f1;  /*todo*/
+            color: #000;
+        }
+
+        /* 涓讳綋 */
+        #content {
+            padding-top: 25px;
+            width: 100%;
+            height: 100%;
+        }
+        iframe {
+            border-width: 0;
+        }
+    </style>
+</head>
+<body>
+
+<!-- 瀵艰埅鏍� -->
+<ul class="nav">
+    <li><a id="comb" onclick="nav(this.id)" class="nav-select" href="#">缁勬墭</a></li>
+    <li><a id="stockIn" onclick="nav(this.id)" class="nav-unselect" href="#">鍏ュ簱</a></li>
+    <li><a id="stockOut" onclick="nav(this.id)" class="nav-unselect" href="#">鍑哄簱</a></li>
+</ul>
+
+<!-- 涓讳綋鍐呭 -->
+<iframe id="content" src="comb.html"></iframe>
+
+</body>
+<script>
+    // 瀵艰埅鏍�
+    function nav(id) {
+        $('.nav-select').attr("class", "nav-unselect");
+        $('#'+id).attr("class", "nav-select");
+        $('#content').attr("src", id+".html");
+    }
+</script>
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/pda/locDetlIframe.html b/src/main/webapp/views/pda/locDetlIframe.html
new file mode 100644
index 0000000..62ad122
--- /dev/null
+++ b/src/main/webapp/views/pda/locDetlIframe.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, target-densitydpi=high-dpi, initial-scale=1.0, user-scalable=no"/>
+    <title>搴撳瓨鏄庣粏璇︽儏</title>
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <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/handlebars/handlebars-v4.5.3.js"></script>
+    <style>
+        .form-box {
+            padding: 15px 5px 5px 5px;
+            font-size: 12px;
+            text-align: center;
+        }
+
+        .form-item {
+            margin-bottom: 10px;
+        }
+
+        .form-box span {
+            font-size: 12px;
+            display: inline-block;
+            text-align: right;
+            width: 50px;
+        }
+        .form-box input {
+            width: 120px;
+            margin-left: 10px;
+            padding-left: 5px;
+            height: 20px;
+            border: 1px solid #777777;
+            overflow:hidden;
+            white-space:nowrap;
+            text-overflow:ellipsis;
+        }
+
+        .number-tool {
+            margin-left: 10px;
+            padding: 1px 0 1px 5px;
+            display: inline-block;
+            width: 120px;
+        }
+        .number-tool:after {
+            clear: both;
+            content: "";
+            display: table;
+        }
+        .number-tool button {
+            background-color: #fff;
+            margin-top: 2px;
+            font-size: 13px;
+            height: 18px;
+            float: left;
+            width: 20px;
+            border: 1px solid #777777;
+        }
+        .number-tool input {
+            text-align: center;
+            height: 20px;
+            float: left;
+            margin: 0 5px;
+            width: 30px;
+            padding: 0;
+        }
+
+        .form-button {
+            margin: 5px 10px 0 10px;
+            padding: 5px 15px;
+        }
+    </style>
+</head>
+<body>
+<div class="form-box">
+    <div class="form-item">
+        <span>搴撲綅鍙�</span>
+        <input id="locNo" type="text" disabled="disabled">
+    </div>
+    <div class="form-item">
+        <span>鐗╂枡缂栫爜</span>
+        <input id="matnr" type="text" disabled="disabled">
+    </div>
+    <div class="form-item">
+        <span>鐗╂枡鍚嶇О</span>
+        <input id="maktx" type="text" disabled="disabled">
+    </div>
+    <div class="form-item">
+        <span style="vertical-align: middle">鏁伴噺</span>
+        <div class="number-tool" style="vertical-align: middle">
+            <button onclick="reduce()">-</button><input id="count" type="number"><button onclick="add()">+</button>
+        </div>
+    </div>
+    <button class="form-button" id="save" onclick="save()">淇濆瓨</button>
+    <button class="form-button" id="remove" onclick="remove()">绉婚櫎</button>
+</div>
+</body>
+<script>
+    var countDom = $('#count');
+
+    function save() {
+        if (countDom.val() <= 1) {
+            alert("鏁伴噺蹇呴』澶т簬0")
+            return;
+        }
+        parent.updateTableData({
+            locNo: $('#locNo').val(),
+            matnr: $('#matnr').val(),
+            maktx: $('#maktx').val(),
+            count: countDom.val()
+        })
+        parent.layer.closeAll();
+    }
+
+    function remove() {
+        parent.removeTableData({
+            locNo: $('#locNo').val(),
+            matnr: $('#matnr').val(),
+        })
+        parent.layer.closeAll();
+    }
+
+    function add() {
+        countDom.val(Number(countDom.val()) + 1);
+    }
+    function reduce() {
+        if (countDom.val() <= 1) {
+            return;
+        }
+        countDom.val(countDom.val() - 1);
+    }
+</script>
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/pda/login.html b/src/main/webapp/views/pda/login.html
new file mode 100644
index 0000000..a7878d6
--- /dev/null
+++ b/src/main/webapp/views/pda/login.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, target-densitydpi=high-dpi, initial-scale=1.0, user-scalable=no"/>
+    <title>绯荤粺鐧诲綍</title>
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <script type="text/javascript" src="../../static/layui/layui.js"></script>
+    <script type="text/javascript" src="../../static/js/common.js"></script>
+    <style>
+        html{
+            height: 100%;
+            overflow: hidden;
+        }
+        body.login-bg {
+            color: #777;
+            height: 100%;
+            background-image: linear-gradient(to right, #ff9569 0%, #e92758 100%);
+            /*background-image: linear-gradient(-90deg, #29bdd9 0%, #276ace 100%);*/
+            /*background: -webkit-linear-gradient(red, blue); !* Safari 5.1 - 6.0 *!;*/
+            /*background-image: url("../static/image/login_bg.jpg");*/
+            /*background-repeat: no-repeat;*/
+            /*background-size: cover;*/
+            /*background-position: top center;*/
+        }
+
+        #login-wrapper {
+            box-sizing:border-box;
+            background: #fff;
+            height: 100%;
+            padding: 60px 40px;
+            text-align: center;
+            overflow: hidden;
+        }
+        #login-wrapper h1 {
+            font-weight: bolder;
+            margin-bottom: 20px;
+            letter-spacing: 5px;
+            /*transform:scale(3);*/
+            /*-webkit-transform:scale(3);*/
+            /*-moz-transform:scale(3);*/
+        }
+        .layui-form-item {
+            margin-bottom: 15px;
+            position: relative;
+        }
+        .layui-form-item .layui-input {
+            height: 30px;
+            padding-left: 20px;
+            font-size: 14px;
+            border: 1px solid #767676;
+            color: inherit;
+            border-radius: 3px;
+            transition: 0.3s;
+        }
+        .layui-input:hover, .layui-textarea:hover {
+            border-color: #0767aa !important;
+            border-width: 1.5px;
+        }
+        .login-submit {
+            margin-top: 20px;
+        }
+        #login-button {
+            background-color: #0767aa;
+            width: 50%;
+            font-size: 14px;
+            font-weight: bolder;
+            border-radius: 5px;
+            height: 40px;
+        }
+    </style>
+</head>
+<body class="login-bg">
+
+<div id="login-wrapper">
+    <header>
+        <h1>绯荤粺鐧诲綍</h1>
+    </header>
+    <div class="layui-form layadmin-user-login-body">
+        <div class="layui-form-item">
+            <input id="mobile" class="layui-input" type="text" name="mobile" lay-verify="mobile" placeholder="璐﹀彿" autocomplete="off">
+        </div>
+        <div class="layui-form-item">
+            <input id="password" class="layui-input" type="password" name="password" lay-verify="password" placeholder="瀵嗙爜" autocomplete="off">
+        </div>
+<!--        <div class="layui-form-item" style="text-align: right;padding-left: 3px;">-->
+<!--            <input id="rememberPwd" style="vertical-align: middle" type="checkbox" lay-skin='primary' lay-filter="remPwd" title="璁颁綇瀵嗙爜" checked="checked">-->
+<!--        </div>-->
+    </div>
+    <div class="layui-form-item login-submit">
+        <button id="login-button" class="layui-btn layui-btn-fluid layui-btn-normal" lay-submit="" lay-filter="login">鐧� 褰�</button>
+    </div>
+</div>
+
+</body>
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/js/tools/md5.js"></script>
+<script type="text/javascript">
+
+    layui.use(['form','layer'],function () {
+        var form = layui.form,
+            layer = layui.layer,
+            $ = layui.jquery;
+
+        form.on('submit(login)', function (data) {
+            var mobile = $("#mobile").val();
+            if (mobile === "") {
+                alert("璇疯緭鍏ユ墜鏈哄彿");
+                return;
+            }
+            var password = $("#password").val();
+            if (password === "") {
+                alert("璇疯緭鍏ュ瘑鐮�");
+                return;
+            }
+
+            var user = {
+                mobile: mobile,
+                password: hex_md5(password)
+            };
+            $.ajax({
+                url: baseUrl+"/login.action",
+                data: user,
+                method: 'POST',
+                success: function (res) {
+                    if (res.code === 200){
+                        localStorage.setItem("token", res.data.token);
+                        localStorage.setItem("username", res.data.username);
+                        window.location.href = "index.html";
+                    } else {
+                        alert(res.msg);
+                    }
+                }
+            });
+            return false;
+        });
+
+        $('body').keydown(function () {
+            if (event.keyCode === 13) {
+                $("#login-button").click();
+            }
+        });
+
+    });
+</script>
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/pda/matQuery.html b/src/main/webapp/views/pda/matQuery.html
new file mode 100644
index 0000000..942ec78
--- /dev/null
+++ b/src/main/webapp/views/pda/matQuery.html
@@ -0,0 +1,175 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, target-densitydpi=high-dpi, initial-scale=1.0, user-scalable=no"/>
+    <title>鐗╂枡鎻愬彇</title>
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <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/handlebars/handlebars-v4.5.3.js"></script>
+    <style>
+
+        .form-box {
+            padding: 15px 5px 5px 5px;
+            font-size: 12px;
+            text-align: center;
+        }
+
+        .form-item {
+            margin-bottom: 10px;
+        }
+
+        .form-box span {
+            font-size: 12px;
+            display: inline-block;
+            text-align: right;
+            width: 50px;
+        }
+        .form-box input {
+            width: 120px;
+            margin-left: 10px;
+            padding-left: 5px;
+            height: 20px;
+            border: 1px solid #777777;
+            overflow:hidden;
+            white-space:nowrap;
+            text-overflow:ellipsis;
+        }
+        #confirm {
+            margin-top: 10px;
+            padding: 5px 20px;
+        }
+
+        .number-tool {
+            margin-left: 10px;
+            padding: 1px 0 1px 5px;
+            display: inline-block;
+            width: 120px;
+        }
+        .number-tool:after {
+            clear: both;
+            content: "";
+            display: table;
+        }
+        .number-tool button {
+            background-color: #fff;
+            margin-top: 2px;
+            font-size: 13px;
+            height: 18px;
+            float: left;
+            width: 20px;
+            border: 1px solid #777777;
+        }
+        .number-tool input {
+            text-align: center;
+            height: 20px;
+            float: left;
+            margin: 0 5px;
+            width: 30px;
+            padding: 0;
+        }
+    </style>
+</head>
+<body>
+
+<div class="form-box">
+    <div class="form-item">
+        <span>鐗╂枡缂栫爜</span>
+        <input id="matNo" type="text" placeholder="鎵爜 / 杈撳叆" onkeyup="find(this)" autocomplete="off">
+    </div>
+    <div class="form-item">
+        <span>鐗╂枡鍚嶇О</span>
+        <input id="matName" type="text" disabled="disabled">
+    </div>
+    <div class="form-item">
+        <span>鐗╂枡瑙勬牸</span>
+        <input id="str2" type="text" disabled="disabled">
+    </div>
+    <div class="form-item">
+        <span>鍗曚綅</span>
+        <input id="str1" type="text" disabled="disabled">
+    </div>
+    <div class="form-item">
+        <span style="vertical-align: middle">鏁伴噺</span>
+        <div class="number-tool" style="vertical-align: middle">
+            <button onclick="reduce()">-</button><input id="count" type="number"><button onclick="add()">+</button>
+        </div>
+    </div>
+    <button id="confirm" onclick="confirm()">鎻愬彇</button>
+</div>
+
+</body>
+<script>
+    var countDom = $('#count');
+    var initMatCount = 1;
+    var pageCurr;
+
+    /**
+     * 鏍规嵁鐗╂枡缂栫爜鏌ヨ鐗╂枡璇︽儏
+     */
+    function find(el){
+        if (isEmpty(el.value)) {
+            return;
+        }
+        $.ajax({
+            url: baseUrl + "/matCode/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: {
+                id: el.value
+            },
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200) {
+                    if (res.data != null) {
+                        $('#matName').val(res.data.matName);
+                        $('#str1').val(res.data.str1);
+                        $('#str2').val(res.data.str2);
+                        countDom.focus().val(initMatCount)
+                    }
+                } else if (res.code === 403) {
+                    top.location.href = baseUrl + "/pda";
+                } else {
+                    alert(res.msg)
+                }
+            }
+        })
+    }
+
+    /**
+     * 鎻愬彇
+     */
+    function confirm(){
+        var data = {
+            matNo: $('#matNo').val(),
+            matName: $('#matName').val(),
+            count: countDom.val()
+        };
+        parent.addTableData(data);
+        parent.layer.close(parent.matCodeLayerIdx);
+    }
+
+    window.onload = function(){document.getElementById("matNo").focus();}
+    $(document).on('click','#confirm', function () {
+    })
+
+    $('body').keydown(function () {
+        if (event.keyCode === 13) {
+            $("#confirm").click();
+        }
+    });
+
+    function add() {
+        countDom.val(Number(countDom.val()) + 1);
+    }
+    function reduce() {
+        if (countDom.val() <= initMatCount) {
+            return;
+        }
+        countDom.val(countDom.val() - 1);
+    }
+
+</script>
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/pda/stockIn.html b/src/main/webapp/views/pda/stockIn.html
new file mode 100644
index 0000000..4f18010
--- /dev/null
+++ b/src/main/webapp/views/pda/stockIn.html
@@ -0,0 +1,256 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, target-densitydpi=high-dpi, initial-scale=1.0, user-scalable=no"/>
+    <title>鍏ュ簱</title>
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/pda.css" media="all">
+    <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/handlebars/handlebars-v4.5.3.js"></script>
+    <style>
+        main {
+            height: 145px;
+        }
+        .site-list {
+            padding: 2px 0;
+            height: 22px;
+            margin-bottom: 5px;
+        }
+        .site-list label {
+            padding-right: 15px;
+        }
+        .site-list label span {
+            vertical-align: middle;
+            font-size: 13px;
+        }
+
+        .cool-checkbox:checked {
+            background:#1673ff
+        }
+        .cool-checkbox {
+            width:15px;
+            height:15px;
+            background-color:#ffffff;
+            border:solid 1px #dddddd;
+            -webkit-border-radius:50%;
+            border-radius:50%;
+            font-size:15px;
+            margin:0 5px 0 0;
+            padding:0;
+            position:relative;
+            display:inline-block;
+            vertical-align:middle;
+            cursor:default;
+            -webkit-appearance:none;
+            -webkit-user-select:none;
+            user-select:none;
+            -webkit-transition:background-color ease 0.1s;
+            transition:background-color ease 0.1s;
+        }
+        .cool-checkbox:checked::after {
+            content:'';
+            top:3px;
+            left:3px;
+            position:absolute;
+            background:transparent;
+            border:#fff solid 2px;
+            border-top:none;
+            border-right:none;
+            height:3px;
+            width:6px;
+            -moz-transform:rotate(-45deg);
+            -ms-transform:rotate(-45deg);
+            -webkit-transform:rotate(-45deg);
+            transform:rotate(-45deg);
+        }
+
+    </style>
+</head>
+<body>
+<!-- 澶撮儴 -->
+<header>
+    <div class="layui-input-inline">
+        <label class="layui-form-label">鏉$爜</label>
+        <input class="layui-input" type="text" id="code" placeholder="鎵爜 / 杈撳叆" autocomplete="off">
+    </div>
+    <div style="margin: 5px 5px">
+        <button type="button" class="layui-btn layui-btn-normal  layui-btn-xs" onclick="getMat()"><i class="layui-icon">+</i>鎻愬彇</button>
+    </div>
+</header>
+
+<!-- 涓讳綋 -->
+<main>
+    <table class="layui-table" id="chooseData" lay-filter="chooseData"></table>
+</main>
+<!-- 灏鹃儴 -->
+<footer>
+    <!-- 鍏ュ簱鍙� -->
+    <div class="site-list">
+        <span style="display: inline-block; margin:0 0 0 10px; font-size: 12px">鍏ュ簱鍙o細</span>
+    </div>
+    <div class="layui-btn-container">
+        <button type="button" class="layui-btn layui-btn-xs layui-btn-primary" onclick="reset()">閲嶇疆</button>
+        <button type="button" class="layui-btn layui-btn-normal  layui-btn-xs" onclick="pakIn()" style="margin-left: 20px">鍏ュ簱</button>
+        <span id="tips"></span>
+    </div>
+</footer>
+</body>
+<script>
+    var tableIns;
+    window.onload = function(){
+        document.getElementById("code").focus();
+        getInBound();
+    }
+
+    layui.use(['table','laydate', 'form'], function() {
+        var table = layui.table;
+        var $ = layui.jquery;
+        var layer = layui.layer;
+        var form = layui.form;
+
+        tableIns = table.render({
+            elem: '#chooseData',
+            data: [],
+            limit: 500,
+            cellMinWidth: 50,
+            cols: [[
+                {fixed: 'left', align: 'center', field: 'count', title: '閲�', style:'color: blue', width:20},
+                {field: 'matNo', align: 'center', title: '鐗╂枡缂栫爜'},
+                {field: 'matName', align: 'center', title: '鐗╂枡鍚嶇О'}
+            ]],
+            done: function (res, curr, count) {
+            }
+        });
+
+    });
+
+    // 鑾峰彇鍏ュ簱鍙�
+    function getInBound(){
+        $.ajax({
+            url: baseUrl+"/available/put/site",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'POST',
+            async: false,
+            success: function (res) {
+                if (res.code === 200){
+                    var tpl = $("#inSitesTemplate").html();
+                    var template = Handlebars.compile(tpl);
+                    var html = template(res);
+                    $('.site-list').append(html);
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/pda";
+                }else {
+                    tips("鑾峰彇鍏ュ簱鍙eけ璐�", true)
+                }
+            }
+        })
+    }
+
+    // 鎻愬彇鐗╂枡
+    var matCodeLayerIdx;
+    function getMat() {
+        matCodeLayerIdx = layer.open({
+            type: 2,
+            title: '鐗╂枡',
+            shade: [0.3,'#000'],
+            area: ['90%', '90%'],
+            content: 'matQuery.html',
+            success: function(layero, index){
+                $('.layui-layer-title').css('height', '20px').css('line-height', '20px').css('font-size', '12px').css('padding-left', '10px')
+                $('.layui-layer-setwin').css("top", '2px').css('right', '3px')
+            }
+        });
+    }
+
+    // 娣诲姞琛ㄦ牸鏁版嵁
+    var matData = [];
+    function addTableData(data) {
+        if (isEmpty(data.matName)){
+            tips("鎻愬彇澶辫触");
+            return;
+        }
+        let toPush = true;
+        for (var j=0;j<matData.length;j++){
+            if (data.matNo === matData[j].matNo) {
+                matData[j].count = Number(matData[j].count) + Number(data.count);
+                toPush  = false;
+            }
+        }
+        if (toPush) {
+            matData.push(data);
+        }
+        tips("鎻愬彇鎴愬姛");
+        tableIns.reload({data: matData});
+    }
+
+    // 閲嶇疆
+    function reset() {
+        $('#code').val("");
+        matData = [];
+        tableIns.reload({data: matData});
+        $('input:radio[name="site"]').prop('checked',false);
+        tips("");
+    }
+
+    // 鍏ュ簱
+    function pakIn() {
+        let barcode = $('#code').val();
+        if (isEmpty(barcode)) {
+            tips("鎵樼洏鏉$爜涓虹┖", true);
+            document.getElementById("code").focus();
+            return;
+        }
+        if (matData.length === 0) {
+            tips("璇锋彁鍙栫墿鏂�", true);
+            return;
+        }
+        let site = $('input:radio[name="site"]:checked').next("span").html();
+        if (null === site || undefined === site) {
+            tips("璇烽�夋嫨鍏ュ簱鍙�", true);
+            return;
+        }
+        $.ajax({
+            url: baseUrl+"/full/store/put/start",
+            headers: {'token': localStorage.getItem('token')},
+            data: JSON.stringify({
+                barcode: barcode,
+                devpNo: site,
+                list: matData
+            }),
+            contentType:'application/json;charset=UTF-8',
+            method: 'POST',
+            async: false,
+            success: function (res) {
+                if (res.code === 200) {
+                    reset();
+                    tips("鍚姩鍏ュ簱鎴愬姛")
+                } else if (res.code === 403) {
+                    top.location.href = baseUrl + "/pda";
+                } else {
+                    tips(res.msg, true)
+                }
+            }
+        })
+    }
+
+    /**
+     * 鎻愮ず淇℃伅
+     * @param msg 鎻愮ず鍐呭
+     * @param warn true锛氱孩鑹插瓧浣�
+     */
+    function tips(msg, warn) {
+        let tips = $('#tips');
+        tips.html(msg);
+        tips.css("color", warn?"red":'#666');
+    }
+</script>
+<script type="text/template" id="inSitesTemplate">
+    {{#each data}}
+    <label><input class="cool-checkbox" type="radio" name="site"><span>{{this}}</span></label>
+    {{/each}}
+</script>
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/pda/stockOut.html b/src/main/webapp/views/pda/stockOut.html
new file mode 100644
index 0000000..2b96608
--- /dev/null
+++ b/src/main/webapp/views/pda/stockOut.html
@@ -0,0 +1,408 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, target-densitydpi=high-dpi, initial-scale=1.0, user-scalable=no"/>
+    <title>鍑哄簱</title>
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <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/handlebars/handlebars-v4.5.3.js"></script>
+    <style>
+        * {
+            font-family: microsoft yahei,serif;
+            margin: 0;
+            padding: 0;
+            box-sizing: border-box;
+            -webkit-box-sizing: border-box;
+            -moz-box-sizing: border-box;
+            font-size: 11px;
+        }
+        html {
+            height: 100%;
+            background-color: #f1f1f1;
+            padding: 5px;
+        }
+        body {
+            height: 100%;
+            background-color: #fff;
+            border-radius: 5px;
+            box-shadow: 0 0 3px rgba(0,0,0,.3);
+            padding: 2px 5px;
+            position: relative;
+        }
+        /* 澶撮儴 */
+        header {
+            padding: 5px 0;
+        }
+        .layui-input-inline {
+            margin-bottom: 5px;
+        }
+        .layui-form-label {
+            width: initial;
+            padding: 2px 10px;
+        }
+        .layui-input {
+            width: 75%;
+            height: 25px;
+            margin-right: 0;
+        }
+        /* layer */
+        .layui-layer-title {
+            font-size: 11px;
+            height: 20px;
+            line-height: 20px;
+        }
+        /* 涓讳綋 */
+        main {
+            height: 150px;
+            overflow: auto;
+        }
+        .layui-table, .layui-table-view {
+            margin: 0;
+        }
+        .layui-table-view .layui-table td, .layui-table-view .layui-table th {
+            padding: 0;
+        }
+        .layui-table-cell {
+            height: 22px;
+            line-height: 22px;
+            padding: 0;
+        }
+        .layui-table-grid-down {
+            display: none;
+        }
+        .layui-form-checkbox[lay-skin=primary] {
+            height: 15px;
+            width: 15px;
+        }
+        .layui-table-view .layui-form-checkbox[lay-skin=primary] i {
+            height: 15px;
+            width: 15px;
+        }
+        /* 灏鹃儴 */
+        footer {
+            position: absolute;
+            bottom: 5px;
+            width: 100%;
+        }
+
+        .site-list {
+            padding: 2px 0;
+            height: 22px;
+            margin-bottom: 5px;
+        }
+        .site-list label {
+            padding-right: 15px;
+        }
+        .site-list label span {
+            vertical-align: middle;
+            font-size: 13px;
+        }
+
+        .cool-checkbox:checked {
+            background:#1673ff
+        }
+        .cool-checkbox {
+            width:15px;
+            height:15px;
+            background-color:#ffffff;
+            border:solid 1px #dddddd;
+            -webkit-border-radius:50%;
+            border-radius:50%;
+            font-size:15px;
+            margin:0 5px 0 0;
+            padding:0;
+            position:relative;
+            display:inline-block;
+            vertical-align:middle;
+            cursor:default;
+            -webkit-appearance:none;
+            -webkit-user-select:none;
+            user-select:none;
+            -webkit-transition:background-color ease 0.1s;
+            transition:background-color ease 0.1s;
+        }
+        .cool-checkbox:checked::after {
+            content:'';
+            top:3px;
+            left:3px;
+            position:absolute;
+            background:transparent;
+            border:#fff solid 2px;
+            border-top:none;
+            border-right:none;
+            height:3px;
+            width:6px;
+            -moz-transform:rotate(-45deg);
+            -ms-transform:rotate(-45deg);
+            -webkit-transform:rotate(-45deg);
+            transform:rotate(-45deg);
+        }
+
+        .layui-btn-container .layui-btn {
+            margin-left: 10px;
+            margin-bottom: 2px;
+        }
+        #tips {
+            display: inline-block;
+            width: 90px;
+            color: #666;
+            margin-left: 5px;
+            margin-bottom: 5px;
+            vertical-align: middle;
+            overflow:hidden;
+            white-space:nowrap;
+            text-overflow:ellipsis;
+        }
+
+        .layui-btn-primary:hover {
+            border-color: #C9C9C9
+        }
+    </style>
+</head>
+<body>
+<!-- 澶撮儴 -->
+<header>
+    <div class="layui-input-inline">
+        <label class="layui-form-label">搴撲綅</label>
+        <input class="layui-input" type="text" id="locNo" onkeyup="findByLocNo(this)" autocomplete="off">
+    </div>
+    <div class="layui-input-inline">
+        <label class="layui-form-label">鐗╂枡</label>
+        <input class="layui-input" type="text" id="matNo" onkeyup="findByMatNo(this)" autocomplete="off">
+    </div>
+</header>
+<!-- 涓讳綋 -->
+<main>
+    <table class="layui-table" id="dataByLoc" lay-filter="dataByLoc"></table>
+</main>
+<!-- 灏鹃儴 -->
+<footer>
+    <!-- 鍑哄簱鍙� -->
+    <div class="site-list">
+        <span style="display: inline-block; padding:0 0 0 10px; font-size: 12px;">鍑哄簱鍙o細</span>
+    </div>
+    <div class="layui-btn-container">
+        <button type="button" class="layui-btn layui-btn-xs layui-btn-primary" onclick="reset()">閲嶇疆</button>
+        <button type="button" class="layui-btn layui-btn-normal  layui-btn-xs" onclick="pakOut()" style="margin-left: 20px">鍑哄簱</button>
+        <span id="tips"></span>
+    </div>
+</footer>
+</body>
+<script>
+
+    window.onload = function(){
+        document.getElementById("locNo").focus();
+        getOutBound();
+    }
+
+    /**
+     * 鏍规嵁搴撲綅鍙锋煡鎵惧簱瀛樻槑缁�
+     */
+    function findByLocNo(el){
+        if (isEmpty(el.value)) {
+            return;
+        }
+        $("#matNo").val("");
+        find(el.value, null);
+    }
+
+    /**
+     * 鏍规嵁鐗╂枡鍙锋煡鎵惧簱瀛樻槑缁�
+     */
+    function findByMatNo(el){
+        if (isEmpty(el.value)) {
+            return;
+        }
+        $("#locNo").val("");
+        find(null, el.value);
+    }
+    function find(locNo, matNo) {
+        $.ajax({
+            url: baseUrl + "/mobile/locDetl",
+            headers: {'token': localStorage.getItem('token')},
+            data: {
+                locNo: locNo,
+                matNo: matNo
+            },
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200) {
+                    if (res.data != null) {
+                        locDetlData = res.data;
+                        tableIns.reload({data: locDetlData});
+                    }
+                } else if (res.code === 403) {
+                    top.location.href = baseUrl + "/pda";
+                } else {
+                    locDetlData = [];
+                    tableIns.reload({data: locDetlData});
+                }
+            }
+        })
+    }
+
+    // 琛ㄦ牸
+    var locDetlData = [];
+    var tableIns;
+    layui.use(['table','laydate', 'form'], function() {
+        var table = layui.table;
+        var $ = layui.jquery;
+        var layer = layui.layer;
+        var form = layui.form;
+
+        tableIns = table.render({
+            id: 'tableIdx',
+            elem: '#dataByLoc',
+            data: [],
+            limit: 500,
+            cellMinWidth: 50,
+            cols: [[
+                {type: 'checkbox', fixed: 'left', width:30},
+                {field: 'count', align: 'center', title: '閲�', event: 'detail', style:'color: blue', width:30},
+                {field: 'matnr', align: 'center', title: '缂栫爜', event: 'detail'},
+                {field: 'maktx', align: 'center', title: '鍚嶇О', event: 'detail'},
+                {field: 'locNo', align: 'center', title: '搴撲綅', event: 'detail'}
+            ]],
+            done: function (res, curr, count) {
+            }
+        });
+
+        // 鐩戝惉琛屽伐鍏蜂簨浠�
+        table.on('tool(dataByLoc)', function(obj) {
+            var data = obj.data;
+            switch (obj.event) {
+                // 璇︽儏
+                case 'detail':
+                    layer.open({
+                        type: 2,
+                        title: '搴撳瓨鏄庣粏',
+                        shade: [0.3,'#000'],
+                        area: ['90%', '77%'],
+                        content: 'locDetlIframe.html',
+                        success: function(layero, index){
+                            // 璁剧疆寮圭獥鏍峰紡
+                            $('.layui-layer-title').css('height', '20px').css('line-height', '20px').css('font-size', '12px').css('padding-left', '10px')
+                            $('.layui-layer-setwin').css("top", '2px').css('right', '3px');
+                            // 娉ㄥ叆鍊�
+                            let el = layer.getChildFrame('.form-box', index);
+                            for (var val in data) {
+                                var find = el.find(":input[id='" + val + "']");
+                                find.val(data[val]);
+                            }
+                        }
+                    });
+                    break;
+            }
+        })
+    });
+
+    // 鑾峰彇鍑哄簱鍙�
+    function getOutBound(){
+        $.ajax({
+            url: baseUrl+"/available/take/site",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'POST',
+            async: false,
+            success: function (res) {
+                if (res.code === 200){
+                    var tpl = $("#outSitesTemplate").html();
+                    var template = Handlebars.compile(tpl);
+                    var html = template(res);
+                    $('.site-list').append(html);
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/pda";
+                }else {
+                    tips("鑾峰彇鍑哄簱鍙eけ璐�", true)
+                }
+            }
+        })
+    }
+
+    // 鍑哄簱
+    function pakOut() {
+        var tableData = layui.table.checkStatus('tableIdx').data;
+        if (tableData.length === 0) {
+            tips("璇烽�夋嫨鐗╂枡", true);
+            document.getElementById("locNo").focus();
+            return;
+        }
+        let site = $('input:radio[name="site"]:checked').next("span").html();
+        if (null === site || undefined === site) {
+            tips("璇烽�夋嫨鍑哄簱鍙�", true);
+            return;
+        }
+        $.ajax({
+            url: baseUrl+"/plate/out/start",
+            headers: {'token': localStorage.getItem('token')},
+            data: JSON.stringify({
+                outSite: site,
+                locDetls: tableData
+            }),
+            contentType:'application/json;charset=UTF-8',
+            method: 'POST',
+            async: false,
+            success: function (res) {
+                if (res.code === 200) {
+                    reset();
+                    tips("鍚姩鍑哄簱鎴愬姛")
+                } else if (res.code === 403) {
+                    top.location.href = baseUrl + "/pda";
+                } else {
+                    tips(res.msg, true)
+                }
+            }
+        })
+    }
+
+    // 淇敼琛ㄦ牸鏁版嵁
+    function updateTableData(data) {
+        for (var i=0;i<locDetlData.length;i++) {
+            if (data.matnr === locDetlData[i].matnr && data.locNo === locDetlData[i].locNo) {
+                locDetlData[i].count = data.count;
+                break
+            }
+        }
+        tableIns.reload({data: locDetlData});
+    }
+
+    // 鍒犻櫎琛ㄦ牸琛�
+    function removeTableData(data) {
+        for (var i = locDetlData.length - 1; i >= 0; i--) {
+            if (locDetlData[i].locNo === data.locNo && locDetlData[i].matnr === data.matnr) {
+                locDetlData.splice(i, 1);
+            }
+        }
+        tableIns.reload({data: locDetlData});
+    }
+
+    // 閲嶇疆
+    function reset() {
+        $("#matNo").val("");
+        $("#locNo").val("");
+        locDetlData = [];
+        tableIns.reload({data: locDetlData});
+        $('input:radio[name="site"]').prop('checked',false);
+        tips("");
+    }
+
+    /**
+     * 鎻愮ず淇℃伅
+     * @param msg 鎻愮ず鍐呭
+     * @param warn true锛氱孩鑹插瓧浣�
+     */
+    function tips(msg, warn) {
+        let tips = $('#tips');
+        tips.html(msg);
+        tips.css("color", warn?"red":'#666');
+    }
+</script>
+<script type="text/template" id="outSitesTemplate">
+    {{#each data}}
+    <label><input class="cool-checkbox" type="radio" name="site"><span>{{this}}</span></label>
+    {{/each}}
+</script>
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/pdaCe/index.html b/src/main/webapp/views/pdaCe/index.html
new file mode 100644
index 0000000..ae2e4cb
--- /dev/null
+++ b/src/main/webapp/views/pdaCe/index.html
@@ -0,0 +1,495 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, target-densitydpi=high-dpi, initial-scale=1.0, user-scalable=no"/>
+    <title>娴欐睙涓壃鍌ㄥ瓨璁惧鏈夐檺鍏徃</title>
+    <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+    <style>
+        * {
+            font-size: 12px;
+        }
+        html {
+            background-color: #fff;
+        }
+
+        .mat-msg {
+            overflow-y: scroll;
+            margin-top: 10px;
+            height: 115px;
+            background-color: #fff;
+            border-radius: 5px;
+            border: 1px solid #c2c2c2;
+        }
+        #mat-msg-table {
+            font-size: 12px;
+            border-collapse: collapse;
+            margin: 0 auto;
+            text-align: center;
+        }
+        #tthead {
+            padding-top: 4px;
+            background-color: #ececec;
+            height: 18px;
+        }
+        #tthead span {
+            border-right: 1px solid #b3b3b3;
+            float: left;
+            width: 24%;
+        }
+        #ttbody {
+            padding-top: 4px;
+        }
+        #ttbody div {
+            content: "";
+            clear: both;
+            display: table;
+        }
+        #ttbody span {
+            border-right: 1px solid #b3b3b3;
+            float: left;
+            width: 22%;
+            overflow:hidden;
+            white-space:nowrap;
+            text-overflow:ellipsis;
+        }
+
+        #btn-con {
+            padding-left: 10px;
+            position: absolute;
+            bottom: 10px;
+            width: 100%;
+        }
+        #btn-con button {
+            display: inline-block;
+            vertical-align: middle;
+        }
+        #tips {
+            font-size: 12px;
+            margin-top: 2px;
+            margin-left: 10px;
+            display: inline-block;
+            vertical-align: middle;
+            width: 90px;
+            overflow:hidden;
+            white-space:nowrap;
+            text-overflow:ellipsis;
+        }
+
+        /* 璇︽儏 */
+        .form-box {
+            margin-top: 10px;
+            padding: 15px 0 10px 0;
+            text-align: center;
+            border: 1px solid #BBBBBB;
+        }
+
+        .form-item {
+            margin-bottom: 5px;
+        }
+        .form-box span {
+        }
+        .form-box input {
+            overflow:hidden;
+            white-space:nowrap;
+            text-overflow:ellipsis;
+        }
+        .form-count button {
+            width: 25px;
+            height: 20px;
+        }
+        .form-count input {
+            margin: 0 7px;
+            width: 40px;
+        }
+        .form-btn-con {
+            margin-top: 10px;
+        }
+        .form-btn-con button {
+            padding: 4px 0;
+            height: 25px;
+            margin: 0 15px;
+        }
+    </style>
+</head>
+<body>
+<button onclick="help()" style="padding: 0 3px; position: absolute; top: 0%; right: 0%">?</button>
+<div>
+    <span>鏉$爜</span>
+    <input type="text" id="code">
+</div>
+<div>
+    <span>鐗╂枡</span>
+    <input type="text" id="matNo" onkeyup="find(this)" autocomplete="off">
+    <button onclick="find()">鏌ヨ</button>
+</div>
+
+<div class="mat-msg" id="mat-msg-id">
+    <div id="mat-msg-table">
+        <div id="tthead">
+            <span>缂栫爜</span>
+            <span>鍚嶇О</span>
+            <span>鍗曚綅</span>
+            <span>鏁伴噺</span>
+        </div>
+        <div id="ttbody">
+        </div>
+    </div>
+</div>
+
+<div id="btn-con">
+    <button style="margin-right: 20px" onclick="reset()">閲嶇疆</button>
+    <button id="comb" onclick="comb()">缁勬墭</button>
+    <span id="tips"></span>
+</div>
+
+<!-- 璇︽儏 -->
+<div class="form-box" id="mat-detail">
+    <div class="form-item form-count">
+        <span style="margin-right: 10px">鏁伴噺</span>
+        <button onclick="reduce()">-</button><input id="count" type="number" style="text-align: center"><button onclick="add()">+</button>
+    </div>
+    <div class="form-item">
+        <span>鍚嶇О</span>
+        <input id="matName" type="text" disabled="disabled" style="background-color: #ececec;color: #000">
+    </div>
+    <div class="form-item">
+        <span>鍗曚綅</span>
+        <input id="str1" type="text" disabled="disabled" style="background-color: #ececec;color: #000; text-align: center;">
+    </div>
+    <div class="form-item form-btn-con">
+        <button id="confirm" onclick="confirm()">鎻愬彇</button>
+        <button id="cancel" onclick="cancel()" style="background-color: #fff">鍙栨秷</button>
+    </div>
+</div>
+
+
+</body>
+<script>
+
+    var matMsgTableBlankRows = 0;   // 绌虹櫧琛屾暟
+    var matData = []; // 琛ㄦ牸鏁版嵁
+    var code = document.getElementById("code")
+    var matNo = document.getElementById("matNo")
+    var matMsg = document.getElementById("mat-msg-id");
+    var matMsgTable = document.getElementById("mat-msg-table");
+    var tthead = document.getElementById("tthead");
+    var ttbody = document.getElementById("ttbody");
+    var btnCon = document.getElementById("btn-con");
+    var tipDom = document.getElementById("tips");
+    var combBtn = document.getElementById("comb");
+
+    var matDetail = document.getElementById("mat-detail");
+    var matName = document.getElementById("matName");
+    var str1 = document.getElementById("str1");
+    var count = document.getElementById("count");
+    var confirmBtn = document.getElementById("confirm");
+
+    matDetail.style.display = 'none';
+    var initMatCount = 1;
+    window.onload = function(){matMsg.focus();}
+
+    // 鏌ヨ鐗╂祦
+    function find(el) {
+        httpRequest({
+            httpUrl: baseUrl + "/matCode/auth",
+            type: 'post',
+            headers: [{token: getCookie('token')}],
+            data: {
+                id: matNo.value
+            },
+        }, function (res) {
+            if (res.code === 200) {
+                if (res.data != null) {
+                    // 鏍峰紡
+                    matMsg.style.display = 'none';
+                    btnCon.style.display = 'none';
+                    matDetail.style.display = 'block';
+                    // 濉厖鏁版嵁
+                    matName.value = res.data.matName;
+                    str1.value = res.data.str1;
+
+                    // count.focus();
+                    count.value = initMatCount;
+                    confirmBtn.focus();
+                } else {
+                    matMsg.style.display = 'block';
+                    btnCon.style.display = 'block';
+                    matDetail.style.display = 'none';
+                }
+            } else if (res.code === 403) {
+                window.location.href = baseUrl + "/pda/ce";
+            } else {
+                tips(res.msg, true)
+            }
+        })
+    }
+
+    // 缁勬墭
+    function comb() {
+        var barcode = code.value;
+        if (isEmpty(barcode)) {
+            tips("璇疯緭鍏ユ墭鐩樻潯鐮�", true);
+            // document.getElementById("code").focus();
+            return;
+        }
+        if (barcode.length !== 8) {
+            tips("鏉$爜蹇呴』涓�8浣�", true);
+            // document.getElementById("code").focus();
+            return;
+        }
+        if (matData.length === 0) {
+            tips("璇锋彁鍙栫墿鏂�", true);
+            return;
+        }
+        httpRequest({
+            httpUrl: baseUrl+"/mobile/comb/auth",
+            type: 'post',
+            headers: [
+                {token: getCookie('token')}
+                ,{'Content-type':'application/json;charset=UTF-8',}
+                ],
+            data: JSON.stringify({
+                barcode: barcode,
+                combMats: matData
+            }) ,
+        }, function (res) {
+            if (res.code === 200) {
+                reset();
+                tips("缁勬墭鎴愬姛")
+            } else if (res.code === 403) {
+                window.location.href = baseUrl + "/pda/ce";
+            } else {
+                tips(res.msg, true)
+            }
+        })
+    }
+
+    // initCrnMsgTable();
+    function initCrnMsgTable(row) {
+        var line;
+        if (row === undefined){
+            var one = 15;
+            var total = matMsg.offsetHeight;
+            var count = total / one;
+            count = parseInt(count) - 1;
+            matMsgTableBlankRows = count;
+            line = count;
+        } else {
+            line = row;
+        }
+        var html = "";
+        for (var i = 0; i < line; i ++){
+            html += " <div>\n" +
+                "       <span></span>\n" +
+                "       <span></span>\n" +
+                "       <span></span>\n" +
+                "       <span></span>\n" +
+                "     </div>\n";
+        }
+        ttbody.innerHTML = html;
+    }
+
+    // 娣诲姞琛ㄦ牸鏁版嵁
+    function addTableData(data) {
+        if (isEmpty(data.matName)){
+            tips("鎻愬彇澶辫触");
+            return;
+        }
+        var toPush = true;
+        for (var j=0;j<matData.length;j++){
+            if (data.matNo === matData[j].matNo) {
+                matData[j].count = Number(matData[j].count) + Number(data.count);
+                toPush  = false;
+            }
+        }
+        if (toPush) {
+            matData.push(data);
+        }
+        var html = "";
+        for (var i=0;i<matData.length;i++) {
+            html += " <div class='table-data'>\n" +
+                "       <span>" + matData[i].matNo + "</span>\n" +
+                "       <span>" + matData[i].matName + "</span>\n" +
+                "       <span>" + matData[i].str1 + "</span>\n" +
+                "       <span>" + matData[i].count + "</span>\n" +
+                "     </div>\n";
+        }
+
+        ttbody.innerHTML = html;
+    }
+
+    // 閲嶇疆
+    function reset() {
+        code.value = "";
+        matNo.value = "";
+        cancel();
+        while(ttbody.hasChildNodes()) {
+            ttbody.removeChild(ttbody.firstChild);
+
+        }
+    }
+
+    /**
+     * 鎻愮ず淇℃伅
+     * @param msg 鎻愮ず鍐呭
+     * @param warn true锛氱孩鑹插瓧浣�
+     */
+    function tips(msg, warn) {
+        tipDom.innerText = msg;
+        if (warn) {
+            tipDom.style.color = "red";
+        } else {
+            tipDom.style.color = "#000";
+        }
+    }
+
+    /**
+     * 璇︽儏
+     */
+    // 鎻愬彇
+    function confirm() {
+        addTableData({
+            matNo: matNo.value,
+            matName: matName.value,
+            str1: str1.value,
+            count: count.value
+        })
+        cancel();
+        tips("鎻愬彇鎴愬姛");
+    }
+    // 鍙栨秷
+    function cancel() {
+        matNo.value = "";
+        matName.value = "";
+        str1.value = "";
+        count.value = initMatCount;
+        matMsg.style.display = 'block';
+        btnCon.style.display = 'block';
+        matDetail.style.display = 'none';
+        tips("");
+    }
+
+    function add() {
+        count.value = Number(count.value) + 1;
+    }
+    function reduce() {
+        if (count.value <= initMatCount) {
+            return;
+        }
+        count.value = count.value - 1;
+    }
+
+    //鑾峰彇 cookie
+    function getCookie(objName){//鑾峰彇鎸囧畾鍚嶇О鐨刢ookie鐨勫��
+        //澶氫釜cookie 淇濆瓨鐨勬椂鍊欐槸浠� ;绌烘牸  鍒嗗紑鐨�
+        var arrStr = document.cookie.split("; ");
+        for (var i = 0; i < arrStr.length; i++) {
+            var temp = arrStr[i].split("=");
+            if (temp[0] === objName){
+                return decodeURIComponent(temp[1]);
+            }else{
+                return "";
+            }
+
+        }
+    }
+
+    function httpRequest(paramObj,fun,errFun) {
+        var xmlhttp = null;
+        /*鍒涘缓XMLHttpRequest瀵硅薄锛�
+         *鑰佺増鏈殑 Internet Explorer锛圛E5 鍜� IE6锛変娇鐢� ActiveX 瀵硅薄锛歯ew ActiveXObject("Microsoft.XMLHTTP")
+         * */
+        if(window.XMLHttpRequest) {
+            xmlhttp = new XMLHttpRequest();
+        }else if(window.ActiveXObject) {
+            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
+        }
+        /*鍒ゆ柇鏄惁鏀寔璇锋眰*/
+        if(xmlhttp == null) {
+            alert('浣犵殑娴忚鍣ㄤ笉鏀寔XMLHttp');
+            return;
+        }
+        /*璇锋眰鏂瑰紡锛屽苟涓旇浆鎹负澶у啓*/
+        var httpType = (paramObj.type || 'GET').toUpperCase();
+        /*鏁版嵁绫诲瀷*/
+        var dataType = paramObj.dataType || 'json';
+        /*璇锋眰鎺ュ彛*/
+        var httpUrl = paramObj.httpUrl || '';
+        /*鏄惁寮傛璇锋眰*/
+        var async = paramObj.async || true;
+        /*璇锋眰澶村弬鏁�*/
+        var headerData = paramObj.headers || [];
+        /*璇锋眰鍙傛暟--post璇锋眰鍙傛暟鏍煎紡涓猴細foo=bar&lorem=ipsum*/
+        var paramData = paramObj.data || [];
+        var requestData = '';
+        for(var name in paramData) {
+            requestData += name + '='+ paramData[name] + '&';
+        }
+        requestData = requestData === '' ? '' : requestData.substring(0,requestData.length - 1);
+        /*璇锋眰鎺ユ敹*/
+        xmlhttp.onreadystatechange = function() {
+            if(xmlhttp.readyState === 4 && xmlhttp.status === 200) {
+                /*鎴愬姛鍥炶皟鍑芥暟*/
+                fun(JSON.parse(xmlhttp.responseText));
+            }else{
+                /*澶辫触鍥炶皟鍑芥暟*/
+                errFun;
+            }
+        }
+
+        /*鎺ュ彛杩炴帴锛屽厛鍒ゆ柇杩炴帴绫诲瀷鏄痯ost杩樻槸get*/
+        if(httpType === 'GET') {
+            xmlhttp.open("GET",httpUrl,async);
+            xmlhttp.send(null);
+        }else if(httpType === 'POST'){
+            xmlhttp.open("POST",httpUrl,async);
+            //鍙戦�佸悎閫傜殑璇锋眰澶翠俊鎭�
+            var defaultContentType = true;
+            for (var i=0;i<headerData.length;i++) {
+                for(var key in headerData[i]) {
+                    if (key === "Content-type") {
+                        defaultContentType = false;
+                    }
+                    xmlhttp.setRequestHeader(key, headerData[i][key]);
+                }
+            }
+            if (defaultContentType) {
+                xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+            }
+            xmlhttp.send(defaultContentType?requestData:paramData);
+        }
+    }
+
+    document.onkeyup = function (e) {
+        if (window.event)//濡傛灉window.event瀵硅薄瀛樺湪锛屽氨浠ユ浜嬩欢瀵硅薄涓哄噯
+            e = window.event;
+        var key = e.charCode || e.keyCode;
+        if (key === 112) {
+            code.focus();
+        } else if (key === 113) {
+            matNo.focus();
+        } else if (key === 114) {
+            combBtn.focus();
+        } else if (key === 13) {
+            confirmBtn.focus();
+        }
+    }
+
+    document.onkeydown = function (e) {
+        if (window.event)//濡傛灉window.event瀵硅薄瀛樺湪锛屽氨浠ユ浜嬩欢瀵硅薄涓哄噯
+            e = window.event;
+        var key = e.charCode || e.keyCode;
+        if (key === 114) {
+            comb()
+        }
+    }
+
+    function help() {
+        window.alert("鈶� 鎸塅1杈撳叆鏉$爜\n" +
+            "鈶� 鎸塅2杈撳叆鐗╂枡鍙凤紝鎸塃NTER鏌ヨ锛岄�夋嫨鏁伴噺鍚庢彁鍙朶n" +
+            "鈶� 鎸塅3寮�濮嬬粍鎵榎n" +
+            "鍏跺畠锛氭寜F5鍒锋柊椤甸潰");
+    }
+</script>
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/pdaCe/login.html b/src/main/webapp/views/pdaCe/login.html
new file mode 100644
index 0000000..3dd8476
--- /dev/null
+++ b/src/main/webapp/views/pdaCe/login.html
@@ -0,0 +1,152 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, target-densitydpi=high-dpi, initial-scale=1.0, user-scalable=no"/>
+    <title>娴欐睙涓壃鍌ㄥ瓨璁惧鏈夐檺鍏徃</title>
+    <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+    <style>
+        html {
+            background-color: #fff;
+        }
+        body {
+            text-align: center;
+            padding: 10px 30px;
+        }
+        .login-form {
+            text-align: left;
+        }
+
+        .login-form input {
+            display: block;
+        }
+        .login-form button {
+            display: block;
+        }
+    </style>
+</head>
+<body>
+    <h2>绯荤粺鐧诲綍</h2>
+    <div class="login-form">
+        <div>
+            <span>璐﹀彿</span>
+            <input type="text" id="mobile" value="super">
+        </div>
+        <div style="margin-top: 5px">
+            <span>瀵嗙爜</span>
+            <input type="password" id="password" value="xltys1995">
+        </div>
+        <div style="margin-top: 8px;height: 20px;">
+            <button id="login" onclick="login()" style="padding: 5px 3px 0 3px">鐧诲綍</button>
+        </div>
+
+    </div>
+</body>
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/js/tools/md5.js"></script>
+<script type="text/javascript">
+    document.onkeyup = function (e) {
+        if (window.event)//濡傛灉window.event瀵硅薄瀛樺湪锛屽氨浠ユ浜嬩欢瀵硅薄涓哄噯
+            e = window.event;
+        var code = e.charCode || e.keyCode;
+        if (code === 13) {
+            login()
+        }
+    }
+    document.onkeydown = function (e) {
+        if (window.event)//濡傛灉window.event瀵硅薄瀛樺湪锛屽氨浠ユ浜嬩欢瀵硅薄涓哄噯
+            e = window.event;
+        var code = e.charCode || e.keyCode;
+        if (code === 13) {
+            document.getElementById("login");
+        }
+    }
+    function login(){
+        httpRequest({
+            httpUrl: baseUrl+"/login.action",
+            type: 'post',
+            data: {
+                mobile: document.getElementById('mobile').value,
+                password: hex_md5(document.getElementById('password').value)
+            }
+        }, function (res) {
+            if (res.code === 200) {
+                // localStorage.setItem("token", res.data.token);
+                // localStorage.setItem("username", res.data.username);
+                setCookie("token", res.data.token);
+                window.location.href = "index.html";
+            } else {
+                alert(res.msg);
+            }
+
+        })
+    }
+
+    // 璁剧疆cookie
+    function setCookie(objName, objValue){//娣诲姞cookie
+        var str = objName + "=" + encodeURIComponent(objValue);
+        // if (objHours > 0) {//涓�0鏃朵笉璁惧畾杩囨湡鏃堕棿锛屾祻瑙堝櫒鍏抽棴鏃禼ookie鑷姩娑堝け
+        //     var date = new Date();
+        //     var ms = objHours * 3600 * 1000;
+        //     date.setTime(date.getTime() + ms);
+        //     str += "; expires=" + date.toUTCString();
+        // }
+        str += "; path=/";
+        document.cookie = str;
+    }
+
+    function httpRequest(paramObj,fun,errFun) {
+        var xmlhttp = null;
+        /*鍒涘缓XMLHttpRequest瀵硅薄锛�
+         *鑰佺増鏈殑 Internet Explorer锛圛E5 鍜� IE6锛変娇鐢� ActiveX 瀵硅薄锛歯ew ActiveXObject("Microsoft.XMLHTTP")
+         * */
+        if(window.XMLHttpRequest) {
+            xmlhttp = new XMLHttpRequest();
+        }else if(window.ActiveXObject) {
+            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
+        }
+        /*鍒ゆ柇鏄惁鏀寔璇锋眰*/
+        if(xmlhttp == null) {
+            alert('浣犵殑娴忚鍣ㄤ笉鏀寔XMLHttp');
+            return;
+        }
+        /*璇锋眰鏂瑰紡锛屽苟涓旇浆鎹负澶у啓*/
+        var httpType = (paramObj.type || 'GET').toUpperCase();
+        /*鏁版嵁绫诲瀷*/
+        var dataType = paramObj.dataType || 'json';
+        /*璇锋眰鎺ュ彛*/
+        var httpUrl = paramObj.httpUrl || '';
+        /*鏄惁寮傛璇锋眰*/
+        var async = paramObj.async || true;
+        /*璇锋眰鍙傛暟--post璇锋眰鍙傛暟鏍煎紡涓猴細foo=bar&lorem=ipsum*/
+        var paramData = paramObj.data || [];
+        var requestData = '';
+        for(var name in paramData) {
+            requestData += name + '='+ paramData[name] + '&';
+        }
+        requestData = requestData === '' ? '' : requestData.substring(0,requestData.length - 1);
+
+        /*璇锋眰鎺ユ敹*/
+        xmlhttp.onreadystatechange = function() {
+            if(xmlhttp.readyState === 4 && xmlhttp.status === 200) {
+                /*鎴愬姛鍥炶皟鍑芥暟*/
+                fun(JSON.parse(xmlhttp.responseText));
+            }else{
+                /*澶辫触鍥炶皟鍑芥暟*/
+                errFun;
+            }
+        }
+
+        /*鎺ュ彛杩炴帴锛屽厛鍒ゆ柇杩炴帴绫诲瀷鏄痯ost杩樻槸get*/
+        if(httpType === 'GET') {
+            xmlhttp.open("GET",httpUrl,async);
+            xmlhttp.send(null);
+        }else if(httpType === 'POST'){
+            xmlhttp.open("POST",httpUrl,async);
+            //鍙戦�佸悎閫傜殑璇锋眰澶翠俊鎭�
+            xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+            xmlhttp.send(requestData);
+        }
+    }
+</script>
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/stkPlcm/stkPlcm.html b/src/main/webapp/views/stkPlcm/stkPlcm.html
index f0ea9de..0e62fed 100644
--- a/src/main/webapp/views/stkPlcm/stkPlcm.html
+++ b/src/main/webapp/views/stkPlcm/stkPlcm.html
@@ -66,9 +66,8 @@
 </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" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
-        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+<!--        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>-->
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="margin-top: 10px">瀵煎嚭</button>
     </div>
 </script>
 
diff --git a/src/main/webapp/views/trayCode/trayCode.html b/src/main/webapp/views/trayCode/trayCode.html
new file mode 100644
index 0000000..e619fa8
--- /dev/null
+++ b/src/main/webapp/views/trayCode/trayCode.html
@@ -0,0 +1,147 @@
+<!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">
+    <link rel="stylesheet" href="../../static/css/print.css" media="all">
+    <link rel="stylesheet" href="../../static/css/optimize.css" media="all">
+    <style>
+        .btn-tray {
+            display: none;
+        }
+
+        #print-windows .layui-form {
+            padding: 25px 30px 0 0;
+        }
+        #print-windows .layui-form-label {
+            padding: 8px 15px;
+            box-sizing: content-box;
+            -webkit-box-sizing: content-box;
+        }
+        #print-windows .layui-form-required:before {
+            content: "*";
+            display: inline-block;
+            font-family: SimSun,serif;
+            margin-right: 4px;
+            font-size: 14px;
+            line-height: 1;
+            color: #ed4014;
+        }
+        #print-windows .layui-input {
+            height: 36px;
+            border-radius: 4px;
+        }
+        #print-windows .cool-button-contain {
+            text-align: right;
+            margin: 20px 0;
+        }
+        #print-windows .layui-form-radio>i:hover, .layui-form-radioed>i {
+            color: #007bff;
+        }
+        #print-windows .layui-btn {
+            height: 36px;
+            line-height: 36px;
+            border-radius: 4px;
+            box-shadow: 0 1px 0 rgba(0,0,0,.03);
+        }
+        #print-windows .layui-btn-primary:hover {
+            border-color: #777777;
+        }
+    </style>
+</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="tray_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="appe_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+        </div>
+    </div>
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item">
+        <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>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<div class="layui-form">
+    <table class="layui-hide" id="trayCode" lay-filter="trayCode"></table>
+</div>
+
+<div id="printBox" style="display: block; height: 150px; width: 300px;padding-left: 0px"></div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-normal" id="btn-tray" lay-event="btnTray"><i class="layui-icon layui-icon-print" style="font-size: 15px"></i>鐢熸垚鎵樼洏鐮�</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>
+    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</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/jquery/jQuery.print.js"></script>
+<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></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/trayCode/trayCode.js" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+<div id="print-windows" style="display: none">
+    <div class="layui-form">
+        <div class="layui-form-item">
+            <label class="layui-form-label layui-form-required">璧峰搴忓垪:</label>
+            <div class="layui-input-block">
+                <input id="startNo" name="startNo" placeholder="璇疯緭鍏ヨ捣濮嬪簭鍒楀彿" class="layui-input" lay-verify="required|number" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label class="layui-form-label layui-form-required">鏁伴噺:</label>
+            <div class="layui-input-block">
+                <input id="count" name="count" type="number" placeholder="璇疯緭鍏ユ暟閲�" class="layui-input" lay-verify="required|number" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label class="layui-form-label layui-form-required">鐮佺被鍨�:</label>
+            <div class="layui-input-block">
+                <input type="radio" name="type" value="1" title="鏉″舰鐮�" checked="">
+                <input type="radio" name="type" value="2" title="浜岀淮鐮�">
+            </div>
+        </div>
+        <div class="layui-form-item cool-button-contain">
+            <button class="layui-btn layui-btn-normal" id="print" lay-filter="print" lay-submit="">鎵撳嵃</button>
+            <button class="layui-btn layui-btn-primary" id="cancel">鍙栨秷</button>
+        </div>
+    </div>
+</div>
+
+</body>
+<script type="text/template" id="trayCodeTemplate">
+    {{#each data}}
+    <img class="template-code" src="{{this.barcodeUrl}}" width="100%">
+    <div style="letter-spacing: 2px;margin-top: 1px; text-align: center">
+        <span>{{this.item}}</span>
+    </div>
+    {{/each}}
+</script>
+</html>
+
diff --git a/src/main/webapp/views/trayCode/trayCode_detail.html b/src/main/webapp/views/trayCode/trayCode_detail.html
new file mode 100644
index 0000000..dd7fd27
--- /dev/null
+++ b/src/main/webapp/views/trayCode/trayCode_detail.html
@@ -0,0 +1,114 @@
+<!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="data-detail" class="layer_self_wrap">
+    <form id="detail" class="layui-form">
+    <!--
+        <div class="layui-inline"  style="display: none">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="id" class="layui-input" type="text" placeholder="缂栧彿">
+            </div>
+        </div>
+    -->
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="id" class="layui-input" type="text" onkeyup="check(this.id, 'trayCode')" lay-verify="number" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>搴� 鍒� 鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="trayNo" class="layui-input" type="text" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">璧枫��銆�濮嬶細</label>
+            <div class="layui-input-inline">
+                <input id="start" class="layui-input" type="checkBox" lay-skin="primary" lay-filter='detailCheckbox'>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">缁堛��銆�姝細</label>
+            <div class="layui-input-inline">
+                <input id="finish" class="layui-input" type="checkBox" lay-skin="primary" lay-filter='detailCheckbox'>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">澶囥��銆�娉細</label>
+            <div class="layui-input-inline">
+                <input id="memo" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">淇敼鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="modiTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;display: none">
+            <label class="layui-form-label">淇敼浜哄憳锛�</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="modiUser" class="layui-input" type="text" lay-verify="number"  style="display: none">
+                <input id="modiUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQueryBymodiUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQueryBymodiUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">娣诲姞鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="appeTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">娣诲姞浜哄憳锛�</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="appeUser" class="layui-input" type="text" lay-verify="number"  style="display: none">
+                <input id="appeUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQueryByappeUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQueryByappeUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+
+
+        <hr class="layui-bg-gray">
+
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">淇濆瓨</div>
+            <div id="data-detail-submit-edit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇敼</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+
+        <div id="prompt">
+            娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span>
+        </div>
+    </form>
+</div>
+</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>
+<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/trayCode/trayCode.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/user/user.html b/src/main/webapp/views/user/user.html
index b5603f8..5c4c396 100644
--- a/src/main/webapp/views/user/user.html
+++ b/src/main/webapp/views/user/user.html
@@ -58,6 +58,10 @@
     <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
 </script>
 
+<script type="text/html" id="statusTpl">
+    <input type="checkbox" name="status" value="{{d.status}}" lay-skin="switch" lay-text="姝e父|绂佺敤" lay-filter="statusSwitch" {{ d.status === 1 ? 'checked' : '' }}>
+</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>
diff --git a/src/main/webapp/views/user/user_detail.html b/src/main/webapp/views/user/user_detail.html
index b84be1b..f161bb0 100644
--- a/src/main/webapp/views/user/user_detail.html
+++ b/src/main/webapp/views/user/user_detail.html
@@ -14,7 +14,7 @@
 
 <!-- 璇︽儏 -->
 <div id="data-detail" class="layer_self_wrap">
-    <form id="detail" class="layui-form">
+    <form id="detail" class="layui-form" style="text-align: center">
         <div class="layui-inline"  style="display: none">
             <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
             <div class="layui-input-inline">
@@ -33,25 +33,25 @@
 <!--                </div>-->
 <!--            </div>-->
 <!--        </div>-->
-        <div class="layui-inline"  style="width:31%;">
+        <div class="layui-inline"  style="width:80%;">
             <label class="layui-form-label"><span class="not-null">*</span>甯愩��銆�鍙凤細</label>
             <div class="layui-input-inline">
-                <input id="mobile" class="layui-input" type="text" placeholder="璐﹀彿" lay-verify="required" >
+                <input id="mobile" class="layui-input" type="text" placeholder="璐﹀彿" lay-verify="required" autocomplete="off">
             </div>
         </div>
-        <div class="layui-inline"  style="width:31%;">
+        <div class="layui-inline"  style="width:80%;">
             <label class="layui-form-label"><span class="not-null">*</span>鍚嶃��銆�绉帮細</label>
             <div class="layui-input-inline">
-                <input id="username" class="layui-input" type="text" placeholder="鍚嶇О" lay-verify="required" >
+                <input id="username" class="layui-input" type="text" placeholder="鍚嶇О" lay-verify="required"  autocomplete="off">
             </div>
         </div>
-        <div class="layui-inline"  style="width:31%;">
+        <div class="layui-inline"  style="width:80%;">
             <label class="layui-form-label">瀵嗐��銆�鐮侊細</label>
             <div class="layui-input-inline">
-                <input id="password" class="layui-input" type="text" placeholder="瀵嗙爜">
+                <input id="password" class="layui-input" type="text" placeholder="瀵嗙爜" autocomplete="off">
             </div>
         </div>
-        <div class="layui-inline"  style="width:31%;">
+        <div class="layui-inline"  style="width:80%;">
             <label class="layui-form-label"><span class="not-null">*</span>瑙掋��銆�鑹诧細</label>
             <div class="layui-input-inline cool-auto-complete">
                 <input id="roleId" class="layui-input" type="text" placeholder="瑙掕壊" lay-verify="required"  style="display: none">
@@ -63,17 +63,6 @@
                 </div>
             </div>
         </div>
-        <div class="layui-inline"  style="width:31%;">
-            <label class="layui-form-label"><span class="not-null">*</span>鐘躲��銆�鎬侊細</label>
-            <div class="layui-input-inline">
-                <select id="status" lay-verify="required">
-                    <option value="" style="display: none"></option>
-                    <option value="1">鍚敤</option>
-                    <option value="3">鍒犻櫎</option>
-                </select>
-            </div>
-        </div>
-
 
         <hr class="layui-bg-gray">
 
diff --git a/src/main/webapp/views/waitPakin/waitPakin.html b/src/main/webapp/views/waitPakin/waitPakin.html
new file mode 100644
index 0000000..2629772
--- /dev/null
+++ b/src/main/webapp/views/waitPakin/waitPakin.html
@@ -0,0 +1,67 @@
+<!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="barcode" placeholder="鎵樼洏鐮�" 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" style="width: 300px">
+        <div class="layui-input-inline">
+            <input class="layui-input layui-laydate-range" name="modi_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+        </div>
+    </div>
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item">
+        <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>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<div class="layui-form">
+    <table class="layui-hide" id="waitPakin" lay-filter="waitPakin"></table>
+</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" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <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>
+    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</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/waitPakin/waitPakin.js" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+</body>
+</html>
+
diff --git a/src/main/webapp/views/waitPakin/waitPakin_detail.html b/src/main/webapp/views/waitPakin/waitPakin_detail.html
new file mode 100644
index 0000000..f237c44
--- /dev/null
+++ b/src/main/webapp/views/waitPakin/waitPakin_detail.html
@@ -0,0 +1,132 @@
+<!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="data-detail" class="layer_self_wrap">
+    <form id="detail" class="layui-form">
+    <!--
+        <div class="layui-inline"  style="display: none">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="id" class="layui-input" type="text" placeholder="缂栧彿">
+            </div>
+        </div>
+    -->
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="id" class="layui-input" type="text" onkeyup="check(this.id, 'waitPakin')" lay-verify="number" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鎵� 鐩� 鐮侊細</label>
+            <div class="layui-input-inline">
+                <input id="barcode" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鐗╂枡缂栫爜锛�</label>
+            <div class="layui-input-inline">
+                <input id="matnr" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鐗╂枡鎻忚堪锛�</label>
+            <div class="layui-input-inline">
+                <input id="maktx" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鏁般��銆�閲忥細</label>
+            <div class="layui-input-inline">
+                <input id="anfme" class="layui-input" type="text" lay-verify="number" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鍗曘��銆�浣嶏細</label>
+            <div class="layui-input-inline">
+                <input id="unit" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鐘躲��銆�鎬侊細</label>
+            <div class="layui-input-inline">
+                <input id="status" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">澶囥��銆�娉細</label>
+            <div class="layui-input-inline">
+                <input id="memo" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">淇敼鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="modiTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">淇敼浜哄憳锛�</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="modiUser" class="layui-input" type="text" lay-verify="number"  style="display: none">
+                <input id="modiUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQueryBymodiUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQueryBymodiUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">娣诲姞鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="appeTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鍒� 寤� 鑰咃細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="appeUser" class="layui-input" type="text" lay-verify="number"  style="display: none">
+                <input id="appeUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQueryByappeUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQueryByappeUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+
+
+        <hr class="layui-bg-gray">
+
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">淇濆瓨</div>
+            <div id="data-detail-submit-edit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇敼</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+
+        <div id="prompt">
+            娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span>
+        </div>
+    </form>
+</div>
+</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>
+<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/waitPakin/waitPakin.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/waitPakinLog/waitPakinLog.html b/src/main/webapp/views/waitPakinLog/waitPakinLog.html
new file mode 100644
index 0000000..72b13f8
--- /dev/null
+++ b/src/main/webapp/views/waitPakinLog/waitPakinLog.html
@@ -0,0 +1,58 @@
+<!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="pakin_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="modi_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+        </div>
+    </div>
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item">
+        <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>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<div class="layui-form">
+    <table class="layui-hide" id="waitPakinLog" lay-filter="waitPakinLog"></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">
+</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/waitPakinLog/waitPakinLog.js" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+</body>
+</html>
+
diff --git a/src/main/webapp/views/waitPakinLog/waitPakinLog_detail.html b/src/main/webapp/views/waitPakinLog/waitPakinLog_detail.html
new file mode 100644
index 0000000..6a22c57
--- /dev/null
+++ b/src/main/webapp/views/waitPakinLog/waitPakinLog_detail.html
@@ -0,0 +1,138 @@
+<!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="data-detail" class="layer_self_wrap">
+    <form id="detail" class="layui-form">
+    <!--
+        <div class="layui-inline"  style="display: none">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="id" class="layui-input" type="text" placeholder="缂栧彿">
+            </div>
+        </div>
+    -->
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="id" class="layui-input" type="text" onkeyup="check(this.id, 'waitPakinLog')" lay-verify="number" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鍏ュ簱閫氱煡鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="pakinId" class="layui-input" type="text" lay-verify="number" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鎵� 鐩� 鐮侊細</label>
+            <div class="layui-input-inline">
+                <input id="barcode" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鐗╂枡缂栫爜锛�</label>
+            <div class="layui-input-inline">
+                <input id="matnr" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鐗╂枡鎻忚堪锛�</label>
+            <div class="layui-input-inline">
+                <input id="maktx" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鏁般��銆�閲忥細</label>
+            <div class="layui-input-inline">
+                <input id="anfme" class="layui-input" type="text" lay-verify="number" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鍗曘��銆�浣嶏細</label>
+            <div class="layui-input-inline">
+                <input id="unit" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鐘躲��銆�鎬侊細</label>
+            <div class="layui-input-inline">
+                <input id="status" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">澶囥��銆�娉細</label>
+            <div class="layui-input-inline">
+                <input id="memo" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">淇敼鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="modiTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">淇敼浜哄憳锛�</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="modiUser" class="layui-input" type="text" lay-verify="number"  style="display: none">
+                <input id="modiUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQueryBymodiUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQueryBymodiUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">娣诲姞鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="appeTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鍒� 寤� 鑰咃細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="appeUser" class="layui-input" type="text" lay-verify="number"  style="display: none">
+                <input id="appeUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQueryByappeUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQueryByappeUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+
+
+        <hr class="layui-bg-gray">
+
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">淇濆瓨</div>
+            <div id="data-detail-submit-edit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇敼</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+
+        <div id="prompt">
+            娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span>
+        </div>
+    </form>
+</div>
+</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>
+<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/waitPakinLog/waitPakinLog.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/wrkDetlLog/wrkDetlLog.html b/src/main/webapp/views/wrkDetlLog/wrkDetlLog.html
new file mode 100644
index 0000000..af3dd38
--- /dev/null
+++ b/src/main/webapp/views/wrkDetlLog/wrkDetlLog.html
@@ -0,0 +1,59 @@
+<!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="wrk_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="modi_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+        </div>
+    </div>
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item">
+        <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>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<div class="layui-form">
+    <table class="layui-hide" id="wrkDetlLog" lay-filter="wrkDetlLog"></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>
+    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</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/wrkDetlLog/wrkDetlLog.js" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+</body>
+</html>
+
diff --git a/src/main/webapp/views/wrkDetlLog/wrkDetlLog_detail.html b/src/main/webapp/views/wrkDetlLog/wrkDetlLog_detail.html
new file mode 100644
index 0000000..72bf6f1
--- /dev/null
+++ b/src/main/webapp/views/wrkDetlLog/wrkDetlLog_detail.html
@@ -0,0 +1,174 @@
+<!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="data-detail" class="layer_self_wrap">
+    <form id="detail" class="layui-form">
+    <!--
+        <div class="layui-inline"  style="display: none">
+            <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="id" class="layui-input" type="text" placeholder="缂栧彿">
+            </div>
+        </div>
+    -->
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>宸� 浣� 鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="wrkNo" class="layui-input" type="text" lay-verify="required|number" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">宸ヤ綔鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="ioTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>鐗╂枡缂栧彿锛�</label>
+            <div class="layui-input-inline">
+                <input id="matnr" class="layui-input" type="text" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>浠� 搴� 鍙凤細</label>
+            <div class="layui-input-inline">
+                <input id="lgnum" class="layui-input" type="text" lay-verify="required" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label" style="font-size: x-small"><span class="not-null">*</span>杞偍璇锋眰缂栧彿锛�</label>
+            <div class="layui-input-inline">
+                <input id="tbnum" class="layui-input" type="text" lay-verify="required|number" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label"><span class="not-null">*</span>琛� 椤� 鐩細</label>
+            <div class="layui-input-inline">
+                <input id="tbpos" class="layui-input" type="text" lay-verify="required|number" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label" style="font-size: x-small">鐗╂枡鏍囩ID锛�</label>
+            <div class="layui-input-inline">
+                <input id="zmatid" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鐗╂枡鎻忚堪锛�</label>
+            <div class="layui-input-inline">
+                <input id="maktx" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">宸ャ��銆�鍘傦細</label>
+            <div class="layui-input-inline">
+                <input id="werks" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鏁般��銆�閲忥細</label>
+            <div class="layui-input-inline">
+                <input id="anfme" class="layui-input" type="text" lay-verify="number" >
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鍗曘��銆�浣嶏細</label>
+            <div class="layui-input-inline">
+                <input id="altme" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鎵樼洏鏉$爜锛�</label>
+            <div class="layui-input-inline">
+                <input id="zpallet" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鐢ㄦ埛ID锛�</label>
+            <div class="layui-input-inline">
+                <input id="bname" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">澶囥��銆�娉細</label>
+            <div class="layui-input-inline">
+                <input id="memo" class="layui-input" type="text">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">淇敼浜哄憳锛�</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="modiUser" class="layui-input" type="text" lay-verify="number"  style="display: none">
+                <input id="modiUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQueryBymodiUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQueryBymodiUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">淇敼鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="modiTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">鍒� 寤� 鑰咃細</label>
+            <div class="layui-input-inline cool-auto-complete">
+                <input id="appeUser" class="layui-input" type="text" lay-verify="number"  style="display: none">
+                <input id="appeUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()>
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="userQueryByappeUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="userQueryByappeUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">娣诲姞鏃堕棿锛�</label>
+            <div class="layui-input-inline">
+                <input id="appeTime$" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
+        <div class="layui-inline"  style="width:31%;">
+            <label class="layui-form-label">锛�</label>
+            <div class="layui-input-inline">
+                <input id="nista" class="layui-input" type="text" lay-verify="number" >
+            </div>
+        </div>
+
+
+        <hr class="layui-bg-gray">
+
+        <div id="data-detail-btn" class="layui-btn-container layui-form-item">
+            <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">淇濆瓨</div>
+            <div id="data-detail-submit-edit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇敼</div>
+            <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
+        </div>
+
+        <div id="prompt">
+            娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span>
+        </div>
+    </form>
+</div>
+</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>
+<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/wrkDetlLog/wrkDetlLog.js" charset="utf-8"></script>
+</html>
+
diff --git a/src/main/webapp/views/wrkMast/wrkMast.html b/src/main/webapp/views/wrkMast/wrkMast.html
index b3c110c..cc13271 100644
--- a/src/main/webapp/views/wrkMast/wrkMast.html
+++ b/src/main/webapp/views/wrkMast/wrkMast.html
@@ -25,6 +25,9 @@
         .btn-cancel {
             display: none;
         }
+        .btn-pick {
+            display: none;
+        }
 
         /*鏄庣粏琛�*/
         #detlTable {
@@ -49,21 +52,9 @@
 
 <!-- 鎼滅储鏍� -->
 <div id="search-box" class="layui-form layui-card-header">
-    <!--<div class="layui-inline">-->
-        <!--<label class="layui-form-label">宸� 浣� 鍙凤細</label>-->
-        <!--<div class="layui-input-inline">-->
-            <!--<input class="layui-input" type="text" name="wrk_no" placeholder="璇疯緭鍏�" autocomplete="off">-->
-        <!--</div>-->
-    <!--</div>-->
     <div class="layui-inline">
-        <div class="layui-input-inline cool-auto-complete">
-            <input id="wrkNo" name="wrk_no" class="layui-input" type="text" placeholder="宸ヤ綔鍙�" autocomplete="off" style="display: none">
-            <input id="wrkNo$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="宸ヤ綔鍙�" onfocus=this.blur()>
-            <div class="cool-auto-complete-window">
-                <input class="cool-auto-complete-window-input" data-key="wrkMastQueryBywrkSts" onkeyup="autoLoad(this.getAttribute('data-key'))">
-                <select class="cool-auto-complete-window-select" data-key="wrkMastQueryBywrkStsSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
-                </select>
-            </div>
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="wrk_no" placeholder="宸ヤ綔鍙�" autocomplete="off">
         </div>
     </div>
     <div class="layui-inline">
@@ -106,8 +97,8 @@
 </div>
 <script type="text/html" id="toolbar">
     <div class="layui-btn-container">
-        <button class="layui-btn layui-btn-normal layui-btn-sm" id="btn-pri-add" lay-event="priAdd"><i class="layui-icon">&#xe624;</i>澧炲姞浼樺厛绾�</button>
-        <button class="layui-btn layui-btn-normal layui-btn-sm" id="btn-pri-red" lay-event="priRed"><i class="layui-icon">&#xe67e;</i>闄嶄綆浼樺厛绾�</button>
+        <button class="layui-btn layui-btn-normal" id="btn-pri-add" lay-event="priAdd"><i class="layui-icon">&#xe624;</i>澧炲姞浼樺厛绾�</button>
+        <button class="layui-btn layui-btn-normal" id="btn-pri-red" lay-event="priRed"><i class="layui-icon">&#xe67e;</i>闄嶄綆浼樺厛绾�</button>
         <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
     </div>
 </script>
@@ -125,6 +116,7 @@
     <a class="layui-btn layui-btn-xs btn-detlShow" lay-event="detlShow">鏄庣粏</a>
     <a class="layui-btn layui-btn-danger layui-btn-xs btn-complete" lay-event="complete">瀹屾垚</a>
     <a class="layui-btn layui-btn-primary layui-btn-xs btn-cancel" lay-event="cancel">鍙栨秷</a>
+    <a class="layui-btn layui-btn-warm layui-btn-xs btn-pick" lay-event="pick">鎷�</a>
 </script>
 
 <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
diff --git a/src/main/webapp/views/wrkMastLog/wrkMastLog.html b/src/main/webapp/views/wrkMastLog/wrkMastLog.html
index 2fef901..e569302 100644
--- a/src/main/webapp/views/wrkMastLog/wrkMastLog.html
+++ b/src/main/webapp/views/wrkMastLog/wrkMastLog.html
@@ -14,14 +14,8 @@
 <!-- 鎼滅储鏍� -->
 <div id="search-box" class="layui-form layui-card-header">
     <div class="layui-inline">
-        <div class="layui-input-inline cool-auto-complete">
-            <input id="wrkNo" name="wrk_no" class="layui-input" type="text" placeholder="璇疯緭鍏�" autocomplete="off" style="display: none">
-            <input id="wrkNo$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="宸ヤ綔鍙�" onfocus=this.blur()>
-            <div class="cool-auto-complete-window">
-                <input class="cool-auto-complete-window-input" data-key="wrkMastQueryBywrkSts" onkeyup="autoLoad(this.getAttribute('data-key'))">
-                <select class="cool-auto-complete-window-select" data-key="wrkMastQueryBywrkStsSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
-                </select>
-            </div>
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="wrk_no" placeholder="宸ヤ綔鍙�" autocomplete="off">
         </div>
     </div>
     <div class="layui-inline">

--
Gitblit v1.9.1