From ee332179e2e6f6aaa8c420b2f8fc8f44e6e971cc Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期五, 26 五月 2023 13:14:41 +0800
Subject: [PATCH] #订单历史档完成

---
 src/main/resources/mapper/OrderMapper.xml                           |    8 
 src/main/java/com/zy/asrs/service/OrderService.java                 |    2 
 src/main/java/com/zy/asrs/mapper/OrderDetlLogMapper.java            |   16 
 src/main/java/com/zy/asrs/service/impl/OrderDetlLogServiceImpl.java |   18 
 src/main/webapp/static/js/orderDetl/outLog.js                       |  416 ++++
 src/main/java/com/zy/asrs/controller/OrderCheckController.java      |  383 ++++
 src/main/java/com/zy/asrs/controller/OrderDetlLogController.java    |  140 +
 src/main/java/com/zy/asrs/service/impl/LocCheckServiceImpl.java     |   20 
 src/main/resources/mapper/OrderCheckMapper.xml                      |   82 
 src/main/webapp/static/js/orderCheck/orderCheck.js                  |  596 ++++++
 src/main/java/com/zy/asrs/controller/OrderLogController.java        |  350 +++
 src/main/java/com/zy/asrs/entity/LocCheck.java                      |   33 
 src/main/java/com/zy/asrs/service/OrderDetlLogService.java          |    9 
 src/main/webapp/static/js/locCheck/locCheck.js                      |    2 
 src/main/java/com/zy/asrs/entity/OrderCheck.java                    |  443 ++++
 src/main/java/com/zy/asrs/entity/OrderLog.java                      |  441 ++++
 src/main/java/com/zy/asrs/entity/param/CheckDTO.java                |   22 
 src/main/java/com/zy/asrs/service/LocCheckService.java              |   11 
 src/main/java/com/zy/asrs/controller/OrderController.java           |    6 
 src/main/java/com/zy/asrs/service/OrderLogService.java              |   15 
 src/main/java/com/zy/asrs/task/handler/OrderLogHandler.java         |   59 
 src/main/java/com/zy/asrs/service/OrderCheckService.java            |   32 
 src/main/java/com/zy/asrs/service/impl/OrderCheckServiceImpl.java   |  183 +
 src/main/java/com/zy/asrs/mapper/OrderLogMapper.java                |   15 
 src/main/java/com/zy/asrs/task/OrderLogScheduler.java               |   39 
 src/main/webapp/views/locCheck/locCheck.html                        |    4 
 src/main/java/com/zy/asrs/mapper/LocCheckMapper.java                |   14 
 src/main/webapp/views/orderCheck/orderCheck.html                    |  347 +++
 src/main/java/com/zy/asrs/service/impl/OrderLogServiceImpl.java     |   31 
 src/main/java/com/zy/asrs/entity/param/OrderCheckParam.java         |   25 
 src/main/webapp/static/js/orderLog/orderLog.js                      |  550 +++++
 src/main/java/com/zy/common/CodeBuilder.java                        |    2 
 src/main/java/com/zy/asrs/entity/ManLocDetl.java                    |   30 
 src/main/java/com/zy/asrs/mapper/OrderCheckMapper.java              |   29 
 src/main/webapp/views/orderLog/outLog.html                          |  342 +++
 src/main/webapp/views/orderLog/orderLog.html                        |  281 ++
 src/main/java/orderLog.sql                                          |   18 
 src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java        |    6 
 src/main/java/com/zy/asrs/controller/LocCheckController.java        |   48 
 src/main/java/com/zy/asrs/mapper/OrderMapper.java                   |    2 
 src/main/resources/mapper/LocCheckMapper.xml                        |   65 
 src/main/java/com/zy/asrs/entity/OrderDetlLog.java                  |  447 ++++
 src/main/resources/mapper/OrderLogMapper.xml                        |   45 
 43 files changed, 5,569 insertions(+), 58 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/LocCheckController.java b/src/main/java/com/zy/asrs/controller/LocCheckController.java
index 8549423..ea85ae8 100644
--- a/src/main/java/com/zy/asrs/controller/LocCheckController.java
+++ b/src/main/java/com/zy/asrs/controller/LocCheckController.java
@@ -7,22 +7,29 @@
 import com.baomidou.mybatisplus.plugins.Page;
 import com.core.common.DateUtils;
 import com.zy.asrs.entity.LocCheck;
+import com.zy.asrs.entity.ManLocDetl;
 import com.zy.asrs.service.LocCheckService;
 import com.core.annotations.ManagerAuth;
 import com.core.common.BaseRes;
 import com.core.common.Cools;
 import com.core.common.R;
+import com.zy.asrs.service.ManLocDetlService;
 import com.zy.common.web.BaseController;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.*;
 
+import java.util.*;
+@Slf4j
 @RestController
 public class LocCheckController extends BaseController {
 
     @Autowired
     private LocCheckService locCheckService;
+
+    @Autowired
+    private ManLocDetlService manLocDetlService;
 
     @RequestMapping(value = "/locCheck/{id}/auth")
     @ManagerAuth
@@ -121,9 +128,42 @@
     }
 
     @RequestMapping("/locCheck/create/auth")
-    public R autoCreate(String prec){
-        locCheckService.autoCreatePick(prec);
-        return R.ok("鍒涘缓鎷h揣鍗曟垚鍔�");
+    @ManagerAuth
+    public R autoCreate(@RequestParam(value = "prec") String prec){
+        int precInt = Integer.parseInt(prec);
+        EntityWrapper<ManLocDetl> manLocDetlEntityWrapper = new EntityWrapper<>();
+        int count = manLocDetlService.selectCount(manLocDetlEntityWrapper);
+        List<ManLocDetl> countLocDetl;
+        switch (precInt){
+            case 100:
+                break;
+            case 80:
+                count = (int)(count * 0.8); break;
+            case 60:
+                count = (int)(count * 0.6); break;
+            case 40:
+                count = (int)(count * 0.4); break;
+            case 10:
+                count = (int)(count * 0.1); break;
+            default:
+                return R.ok("鏁伴噺");
+        }
+        countLocDetl = locCheckService.getCountLocDetl(count);
+        locCheckService.deleteAll();
+        for (ManLocDetl manLocDetl :countLocDetl){
+            LocCheck locCheck = new LocCheck();
+            locCheck.setLocNo(manLocDetl.getLocNo());
+            locCheck.setType(1);
+            locCheck.setMatnr(manLocDetl.getMatnr());
+            locCheck.setAnfme(manLocDetl.getAnfme());
+            if (!locCheckService.insert(locCheck)){
+                return R.error("鎻掑叆澶辫触");
+            }
+        }
+
+
+        return R.ok("鎻掑叆鎴愬姛");
+
     }
 
 }
diff --git a/src/main/java/com/zy/asrs/controller/OrderCheckController.java b/src/main/java/com/zy/asrs/controller/OrderCheckController.java
new file mode 100644
index 0000000..7609be4
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/OrderCheckController.java
@@ -0,0 +1,383 @@
+package com.zy.asrs.controller;
+
+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.*;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.param.CheckDTO;
+import com.zy.asrs.entity.param.MatnrDto;
+import com.zy.asrs.entity.param.OrderCheckParam;
+import com.zy.asrs.entity.param.OrderDomainParam;
+import com.zy.asrs.service.*;
+import com.zy.common.CodeRes;
+import com.zy.common.config.AdminInterceptor;
+import com.zy.common.model.DetlDto;
+import com.zy.common.utils.BarcodeUtils;
+import com.zy.common.utils.QrCode;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletResponse;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.util.*;
+
+@RestController
+public class OrderCheckController extends BaseController {
+
+    @Autowired
+    private OrderService orderService;
+    @Autowired
+    private OrderDetlService orderDetlService;
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
+    @Autowired
+    private DocTypeService docTypeService;
+    @Autowired
+    private WrkDetlService wrkDetlService;
+    @Autowired
+    private WaitPakinService waitPakinService;
+    @Autowired
+    private OrderLogService orderLogService;
+
+    @Autowired
+    private OrderCheckService orderCheckService;
+
+    @Autowired
+    private LocCheckService locCheckService;
+
+    @Autowired
+    private ManLocDetlService manLocDetlService;
+
+    @RequestMapping(value = "/orderCheck/nav/list/auth")
+    @ManagerAuth
+    public R navList(@RequestParam(required = false) String orderNo){
+        EntityWrapper<Order> wrapper = new EntityWrapper<>();
+        if (!Cools.isEmpty(orderNo)) {
+            wrapper.like("order_no", orderNo);
+        }
+        wrapper.le("settle", 2).eq("status", 1);
+        wrapper.orderBy("create_time", false);
+        List<Order> orders = orderService.selectList(wrapper);
+        // 淇濈暀鍑哄簱鍗�
+        if (!Cools.isEmpty(orders)) {
+            Iterator<Order> iterator = orders.iterator();
+            while (iterator.hasNext()) {
+                Order order = iterator.next();
+                if (order.getDocType() != null) {
+                    DocType docType = docTypeService.selectById(order.getDocType());
+                    if (docType != null) {
+                        if (docType.getPakout() == 0) {
+                            iterator.remove();
+                        }
+                    }
+                }
+            }
+        }
+        return R.ok().add(orders);
+    }
+
+    @RequestMapping(value = "/orderCheck/head/page/auth")
+    @ManagerAuth
+    public R head(@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<OrderCheck> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else {
+            wrapper.orderBy("settle").orderBy("create_time", false);
+        }
+
+        return R.ok(orderCheckService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    @RequestMapping(value = "/orderCheck/detl/all/auth")
+    @ManagerAuth
+    public R head(@RequestParam String orderNo){
+        List<LocCheck> orderNo1 = locCheckService.selectList(new EntityWrapper<LocCheck>().eq("order_no", orderNo));
+        return R.ok().add(orderNo1);
+    }
+
+    @RequestMapping(value = "/orderCheck/form/add/auth")
+    @ManagerAuth(memo = "鎵嬪姩娣诲姞璁㈠崟")
+    @Transactional
+    public R formAdd(@RequestBody OrderCheckParam param){
+
+        OrderCheck orderCheck1 = orderCheckService.selectByNo(param.getOrderNo());
+        OrderLog orderLog = orderLogService.selectByNo(param.getOrderNo());
+        if (orderCheck1 != null) {
+            return R.error("鐩樼偣鍗曞崟鎹紪鍙峰凡瀛樺湪");
+        }
+        if (orderLog != null) {
+            return R.error("鐩樼偣鍗曞崟鎹紪鍙峰湪鍘嗗彶妗d腑宸插瓨鍦�");
+        }
+        Date now = new Date();
+        OrderCheck orderCheck = new OrderCheck();
+        orderCheck.setOrderNo(param.getOrderNo());
+        orderCheck.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
+        orderCheck.setOrderTime(DateUtils.convert(now));
+        orderCheck.setStatus(1);
+        orderCheck.setSettle(1L);
+        orderCheck.setDocType(23L);
+        orderCheck.setCreateTime(now);
+        orderCheck.setUpdateTime(now);
+        if (!orderCheckService.insert(orderCheck)) {
+            throw new CoolException("淇濆瓨鐩樼偣鍗曚富妗eけ璐�");
+        }
+        for (ManLocDetl manLocDetl : param.getOrderDetlList()){
+            LocCheck locCheck = new LocCheck();
+            locCheck.setLocNo(manLocDetl.getLocNo());
+            locCheck.setMaktx(manLocDetl.getMaktx());
+            locCheck.setType(1);
+            locCheck.setMatnr(manLocDetl.getMatnr());
+            locCheck.setAnfme(manLocDetl.getAnfme());
+            locCheck.setRealAnfme(0.0);
+            locCheck.setDiffAnfme(0.0);
+            locCheck.setCreateTime(now);
+            locCheck.setUpdateTime(now);
+            locCheck.setOrderNo(param.getOrderNo());
+            if (!locCheckService.insert(locCheck)){
+                return R.error("鎻掑叆澶辫触");
+            }
+        }
+        return R.ok("鐩樼偣鍗曟坊鍔犳垚鍔�");
+    }
+
+    @RequestMapping(value = "/orderCheck/form/modify/auth")
+    @ManagerAuth(memo = "鎵嬪姩淇敼璁㈠崟")
+    @Transactional
+    public R formModify(@RequestBody OrderCheckParam param){
+        OrderCheck orderCheck = orderCheckService.selectByNo(param.getOrderNo());
+        if (orderCheck == null || orderCheck.getStatus() == 0) {
+            return R.error("鐩樼偣鍗曚笉瀛樺湪");
+        }
+        Date now = new Date();
+        Long userId = getUserId();
+        // 淇敼涓绘。
+        orderCheck.setUpdateBy(userId);
+        orderCheck.setUpdateTime(now);
+        if (!orderCheckService.updateById(orderCheck)) {
+            throw new CoolException("淇敼鐩樼偣鍗曠被鍨嬪け璐�");
+        }
+
+        // 淇敼鏄庣粏妗�
+//        List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId());
+        // 1.娓呯┖鏄庣粏妗�
+        if (!locCheckService.delete(new EntityWrapper<LocCheck>().eq("order_no",orderCheck.getOrderNo())) ) {
+            throw new CoolException("娓呯┖鐩樼偣鍗曟槑缁嗗け璐�");
+        }
+        for (ManLocDetl manLocDetl : param.getOrderDetlList()){
+            LocCheck locCheck = new LocCheck();
+            locCheck.setLocNo(manLocDetl.getLocNo());
+            locCheck.setMaktx(manLocDetl.getMaktx());
+            locCheck.setType(1);
+            locCheck.setMatnr(manLocDetl.getMatnr());
+            locCheck.setAnfme(manLocDetl.getAnfme());
+            locCheck.setRealAnfme(0.0);
+            locCheck.setDiffAnfme(0.0);
+            locCheck.setCreateTime(now);
+            locCheck.setUpdateTime(now);
+            locCheck.setOrderNo(param.getOrderNo());
+            if (!locCheckService.insert(locCheck)){
+                return R.error("鎻掑叆澶辫触");
+            }
+        }
+        return R.ok("鐩樼偣鍗曚慨鏀规垚鍔�");
+    }
+
+
+    // ------------------------------------------------------------------------------------------------
+
+    @RequestMapping(value = "/orderCheck/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(orderService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/orderCheck/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<LocCheck> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        Object orderNo = param.get("order_no");
+        wrapper.eq("order_no",orderNo);
+        Page<LocCheck> manLocDetlPage = locCheckService.selectPage(new Page<>(curr, limit), wrapper);
+
+        return R.ok(manLocDetlPage);
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/orderCheck/update/auth")
+    @ManagerAuth
+    public R update(Order order){
+        if (Cools.isEmpty(order) || null == order.getId()){
+            return R.error();
+        }
+
+        //璁㈠崟瀹岀粨鍓嶏紝鍒ゆ柇鏄惁瀛樺湪浣滀笟涓暟鎹紝瀛樺湪鍒欎笉鑳藉畬缁�
+        if(order.getSettle() == 4){
+            int wrkCount = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("order_no",order.getOrderNo()));
+            int pakinCount = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("order_no",order.getOrderNo()));
+            if (wrkCount > 0 || pakinCount > 0) {
+                throw new CoolException("瀛樺湪浣滀笟涓暟鎹紝涓嶈兘瀹岀粨銆傝妫�鏌ュ叆搴撻�氱煡妗e拰宸ヤ綔妗�");
+            }
+        }
+
+        order.setUpdateBy(getUserId());
+        order.setUpdateTime(new Date());
+        if (!orderService.updateById(order)) {
+            throw new CoolException("淇敼鐩樼偣鍗曞け璐�");
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/orderCheck/delete/auth")
+    @ManagerAuth(memo = "鎵嬪姩鍒犻櫎璁㈠崟")
+    @Transactional
+    public R delete(@RequestParam String orderNo){
+        orderCheckService.remove(orderNo);
+//        Order order = orderService.selectById(orderId);
+//        if (order != null) {
+//            order.setStatus(0);
+//        }
+//        if (!orderService.updateById(order)) {
+//            throw new CoolException("鍒犻櫎璁㈠崟澶辫触");
+//        }
+//        orderDetlService.modifyStatus(orderId, 0);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/orderCheck/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<Order> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("order"));
+        convert(map, wrapper);
+        List<Order> list = orderService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/orderCheckQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<Order> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<Order> page = orderService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (Order order : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", order.getId());
+            map.put("value", order.getOrderNo());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/orderCheck/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<Order> wrapper = new EntityWrapper<Order>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != orderService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(Order.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping("/orderCheck/in")
+    public R in(@RequestBody JSONObject param){
+        System.out.println("111 = " + 111);
+        return R.ok();
+    }
+
+    @RequestMapping("/orderCheck/create/auth")
+    @ManagerAuth
+    public R autoCreate(@RequestBody CheckDTO checkDTO){
+        Double prec = Double.valueOf(checkDTO.getPrec());
+        List<CheckDTO.data> data = checkDTO.getData();
+        EntityWrapper<ManLocDetl> manLocDetlEntityWrapper = new EntityWrapper<>();
+        int count = manLocDetlService.selectCount(manLocDetlEntityWrapper);
+        List<ManLocDetl> countLocDetl = new ArrayList<>();
+        double precDpuble = prec / 100;
+        count = (int)(count * precDpuble);
+        if (checkDTO.getData() == null){
+            countLocDetl = locCheckService.getCountLocDetl(count);
+        }else {
+            for (CheckDTO.data a :data){
+                String matnr = a.getValue();
+                EntityWrapper<ManLocDetl> manLocDetlEntityWrapper2 = new EntityWrapper<>();
+                manLocDetlEntityWrapper2.eq("matnr",matnr);
+                int countfor = manLocDetlService.selectCount(manLocDetlEntityWrapper2);
+                countfor = (countfor * precDpuble)>1? Math.round((float)(countfor * precDpuble)) : 1 ;
+                for (ManLocDetl manLocDetl: locCheckService.getMatnrCountLocDetl(countfor,a.getValue())){
+                    countLocDetl.add(manLocDetl);
+                }
+            }
+        }
+
+        return R.ok().add(countLocDetl);
+    }
+
+    @RequestMapping(value = "/orderCheck/print/auth")
+    @ManagerAuth(memo = "璁㈠崟缂栫爜鎵撳嵃")
+    public R manPakOutPrint(@RequestParam(value = "param[]") String[] param) {
+        if(Cools.isEmpty(param)) {
+            return R.parse(CodeRes.EMPTY);
+        }
+        List<LocCheck> res = new ArrayList<>();
+        for (String orderNo : param){
+            res = locCheckService.selectList(new EntityWrapper<LocCheck>().eq("order_no", orderNo));
+        }
+        return R.ok().add(res);
+    }
+    @RequestMapping(value = "/orderCheck/code/auth")
+//    @ManagerAuth(memo = "鐗╂枡缂栫爜鏉″舰鐮佽幏鍙�(type:1(鏉″舰鐮�);2(浜岀淮鐮�)")
+    public R manPakOutCodeBarcode(@RequestParam(defaultValue = "2") Integer type
+            , @RequestParam String param
+            , 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);
+        } else {
+            img = QrCode.createImg(param);
+        }
+        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();
+    }
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/asrs/controller/OrderController.java b/src/main/java/com/zy/asrs/controller/OrderController.java
index 788843b..244d8de 100644
--- a/src/main/java/com/zy/asrs/controller/OrderController.java
+++ b/src/main/java/com/zy/asrs/controller/OrderController.java
@@ -36,6 +36,8 @@
     private WaitPakinService waitPakinService;
     @Autowired
     private LocOwnerService locOwnerService;
+    @Autowired
+    private OrderLogService orderLogService;
 
     @RequestMapping(value = "/order/nav/list/auth")
     @ManagerAuth
@@ -105,9 +107,13 @@
             param.setOrderNo(prefix + snowflakeIdWorker.nextId());
         }
         Order order = orderService.selectByNo(param.getOrderNo());
+        OrderLog orderLog = orderLogService.selectByNo(param.getOrderNo());
         if (order != null) {
             return R.error("鍗曟嵁缂栧彿宸插瓨鍦�");
         }
+        if (orderLog != null) {
+            return R.error("鍗曟嵁缂栧彿鍦ㄥ巻鍙叉。涓凡瀛樺湪");
+        }
         Date now = new Date();
         order = new Order(
                 String.valueOf(snowflakeIdWorker.nextId()),    // 缂栧彿[闈炵┖]
diff --git a/src/main/java/com/zy/asrs/controller/OrderDetlLogController.java b/src/main/java/com/zy/asrs/controller/OrderDetlLogController.java
new file mode 100644
index 0000000..467e395
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/OrderDetlLogController.java
@@ -0,0 +1,140 @@
+package com.zy.asrs.controller;
+
+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.OrderDetl;
+import com.zy.asrs.entity.OrderDetlLog;
+import com.zy.asrs.service.OrderDetlLogService;
+import com.zy.asrs.service.OrderDetlService;
+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 OrderDetlLogController extends BaseController {
+
+    @Autowired
+    private OrderDetlService orderDetlService;
+    @Autowired
+    private OrderDetlLogService orderDetlLogService;
+
+    @RequestMapping(value = "/orderDetlLog/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(orderDetlService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/orderDetlLog/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<OrderDetlLog> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else {
+            wrapper.orderBy("create_time", false);
+        }
+        wrapper.eq("status", 1);
+        return R.ok(orderDetlLogService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    @RequestMapping(value = "/orderDetlLog/pakout/list/auth")
+    @ManagerAuth
+    public R pakoutList(@RequestParam(defaultValue = "1")Integer curr,
+                        @RequestParam(defaultValue = "10")Integer limit,
+                        @RequestParam Map<String, Object> param){
+        return R.ok(orderDetlService.getPakoutPage(toPage(curr, limit, param, OrderDetl.class)));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/orderDetlLog/add/auth")
+    @ManagerAuth
+    public R add(OrderDetl orderDetl) {
+        orderDetlService.insert(orderDetl);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/orderDetlLog/update/auth")
+    @ManagerAuth
+    public R update(OrderDetl orderDetl){
+        if (Cools.isEmpty(orderDetl) || null==orderDetl.getId()){
+            return R.error();
+        }
+        orderDetlService.updateById(orderDetl);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/orderDetlLog/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+        for (Long id : ids){
+            orderDetlService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/orderDetlLog/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<OrderDetl> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("orderDetl"));
+        convert(map, wrapper);
+        List<OrderDetl> list = orderDetlService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/orderDetlLogQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<OrderDetl> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<OrderDetl> page = orderDetlService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (OrderDetl orderDetl : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", orderDetl.getId());
+            map.put("value", orderDetl.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/orderDetlLog/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<OrderDetl> wrapper = new EntityWrapper<OrderDetl>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != orderDetlService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(OrderDetl.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/OrderLogController.java b/src/main/java/com/zy/asrs/controller/OrderLogController.java
new file mode 100644
index 0000000..746b2c6
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/OrderLogController.java
@@ -0,0 +1,350 @@
+package com.zy.asrs.controller;
+
+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.*;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.param.OrderDomainParam;
+import com.zy.asrs.service.*;
+import com.zy.common.model.DetlDto;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class OrderLogController extends BaseController {
+
+    @Autowired
+    private OrderService orderService;
+    @Autowired
+    private OrderDetlService orderDetlService;
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
+    @Autowired
+    private DocTypeService docTypeService;
+    @Autowired
+    private WrkDetlService wrkDetlService;
+    @Autowired
+    private WaitPakinService waitPakinService;
+    @Autowired
+    private OrderLogService orderLogService;
+    @Autowired
+    private OrderDetlLogService orderDetlLogService;
+
+    @RequestMapping(value = "/orderLog/nav/list/auth")
+    @ManagerAuth
+    public R navList(@RequestParam(required = false) String orderNo){
+        EntityWrapper<Order> wrapper = new EntityWrapper<>();
+        if (!Cools.isEmpty(orderNo)) {
+            wrapper.like("order_no", orderNo);
+        }
+        wrapper.le("settle", 2).eq("status", 1);
+        wrapper.orderBy("create_time", false);
+        List<Order> orders = orderService.selectList(wrapper);
+        // 淇濈暀鍑哄簱鍗�
+        if (!Cools.isEmpty(orders)) {
+            Iterator<Order> iterator = orders.iterator();
+            while (iterator.hasNext()) {
+                Order order = iterator.next();
+                if (order.getDocType() != null) {
+                    DocType docType = docTypeService.selectById(order.getDocType());
+                    if (docType != null) {
+                        if (docType.getPakout() == 0) {
+                            iterator.remove();
+                        }
+                    }
+                }
+            }
+        }
+        return R.ok().add(orders);
+    }
+
+    @RequestMapping(value = "/orderLog/head/page/auth")
+    @ManagerAuth
+    public R head(@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<OrderLog> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else {
+            wrapper.orderBy("settle").orderBy("create_time", false);
+        }
+        wrapper.eq("status", 1);
+        return R.ok(orderLogService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    @RequestMapping(value = "/orderLog/detl/all/auth")
+    @ManagerAuth
+    public R head(@RequestParam Long orderId){
+        return R.ok().add(orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_id", orderId)));
+    }
+
+    @RequestMapping(value = "/orderLog/form/add/auth")
+    @ManagerAuth(memo = "鎵嬪姩娣诲姞璁㈠崟")
+    @Transactional
+    public R formAdd(@RequestBody OrderDomainParam param){
+        if(Cools.isEmpty(param.getOrderNo())){
+            String prefix = "";
+            DocType docType = docTypeService.selectById(param.getDocType());
+            if(!Cools.isEmpty(docType)){
+                prefix = docType.getPakin() == 1 ? "RK" : "CK";
+            }
+            param.setOrderNo(prefix + snowflakeIdWorker.nextId());
+        }
+        Order order = orderService.selectByNo(param.getOrderNo());
+        if (order != null) {
+            return R.error("鍗曟嵁缂栧彿宸插瓨鍦�");
+        }
+        Date now = new Date();
+        order = new Order(
+                String.valueOf(snowflakeIdWorker.nextId()),    // 缂栧彿[闈炵┖]
+                param.getOrderNo(),    // 璁㈠崟缂栧彿
+                DateUtils.convert(now),    // 鍗曟嵁鏃ユ湡
+                param.getDocType(),    // 鍗曟嵁绫诲瀷
+                null,    // 椤圭洰缂栧彿
+                null,    //
+                null,    // 璋冩嫧椤圭洰缂栧彿
+                null,    // 鍒濆绁ㄦ嵁鍙�
+                null,    // 绁ㄦ嵁鍙�
+                null,    // 瀹㈡埛缂栧彿
+                null,    // 瀹㈡埛
+                null,    // 鑱旂郴鏂瑰紡
+                null,    // 鎿嶄綔浜哄憳
+                null,    // 鍚堣閲戦
+                null,    // 浼樻儬鐜�
+                null,    // 浼樻儬閲戦
+                null,    // 閿�鍞垨閲囪喘璐圭敤鍚堣
+                null,    // 瀹炰粯閲戦
+                null,    // 浠樻绫诲瀷
+                null,    // 涓氬姟鍛�
+                null,    // 缁撶畻澶╂暟
+                null,    // 閭垂鏀粯绫诲瀷
+                null,    // 閭垂
+                null,    // 浠樻鏃堕棿
+                null,    // 鍙戣揣鏃堕棿
+                null,    // 鐗╂祦鍚嶇О
+                null,    // 鐗╂祦鍗曞彿
+                1L,    // 璁㈠崟鐘舵��
+                1,    // 鐘舵��
+                getUserId(),    // 娣诲姞浜哄憳
+                now,    // 娣诲姞鏃堕棿
+                getUserId(),    // 淇敼浜哄憳
+                now,    // 淇敼鏃堕棿
+                null    // 澶囨敞
+        );
+        if (!orderService.insert(order)) {
+            throw new CoolException("淇濆瓨璁㈠崟涓绘。澶辫触");
+        }
+        List<DetlDto> list = new ArrayList<>();
+        for (OrderDetl orderDetl : param.getOrderDetlList()) {
+            if (orderDetl.getBatch() == null) {
+                orderDetl.setBatch("");
+            }
+            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch());
+            if (DetlDto.has(list, dto)) {
+                OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch());
+                item.setAnfme(item.getAnfme() + orderDetl.getAnfme());
+                if (!orderDetlService.updateById(item)) {
+                    throw new CoolException("淇濆瓨璁㈠崟鏄庣粏妗eけ璐�");
+                }
+            } else {
+                list.add(dto);
+                orderDetl.setOrderId(order.getId());
+                orderDetl.setOrderNo(order.getOrderNo());
+                orderDetl.setCreateBy(getUserId());
+                orderDetl.setCreateTime(now);
+                orderDetl.setUpdateBy(getUserId());
+                orderDetl.setUpdateTime(now);
+                orderDetl.setStatus(1);
+                orderDetl.setQty(0.0D);
+                if (!orderDetlService.insert(orderDetl)) {
+                    throw new CoolException("淇濆瓨璁㈠崟鏄庣粏妗eけ璐�");
+                }
+            }
+        }
+        return R.ok("璁㈠崟娣诲姞鎴愬姛");
+    }
+
+    @RequestMapping(value = "/orderLog/form/modify/auth")
+    @ManagerAuth(memo = "鎵嬪姩淇敼璁㈠崟")
+    @Transactional
+    public R formModify(@RequestBody OrderDomainParam param){
+        Order order = orderService.selectById(param.getOrderId());
+        if (order == null || order.getStatus() == 0) {
+            return R.error("璁㈠崟涓嶅瓨鍦�");
+        }
+        Date now = new Date();
+        Long userId = getUserId();
+        // 淇敼涓绘。
+        if (!param.getDocType().equals(order.getDocType())) {
+            order.setDocType(param.getDocType());
+            order.setUpdateBy(userId);
+            order.setUpdateTime(now);
+            if (!orderService.updateById(order)) {
+                throw new CoolException("淇敼璁㈠崟绫诲瀷澶辫触");
+            }
+        }
+        // 淇敼鏄庣粏妗�
+//        List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId());
+        // 1.娓呯┖鏄庣粏妗�
+        if (!orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id", order.getId()))) {
+            throw new CoolException("娓呯┖璁㈠崟鏄庣粏澶辫触");
+        }
+        // 2.閲嶇粍鏁版嵁
+        List<DetlDto> list = new ArrayList<>();
+        for (OrderDetl orderDetl : param.getOrderDetlList()) {
+            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch());
+            if (DetlDto.has(list, dto)) {
+                OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch());
+                item.setAnfme(item.getAnfme() + orderDetl.getAnfme());
+                if (!orderDetlService.updateById(item)) {
+                    throw new CoolException("淇濆瓨璁㈠崟鏄庣粏妗eけ璐�");
+                }
+            } else {
+                list.add(dto);
+                orderDetl.setOrderId(order.getId());
+                orderDetl.setOrderNo(order.getOrderNo());
+                orderDetl.setCreateBy(getUserId());
+                orderDetl.setCreateTime(now);
+                orderDetl.setUpdateBy(getUserId());
+                orderDetl.setUpdateTime(now);
+                orderDetl.setStatus(1);
+                orderDetl.setQty(0.0D);
+                if (!orderDetlService.insert(orderDetl)) {
+                    throw new CoolException("淇濆瓨璁㈠崟鏄庣粏妗eけ璐�");
+                }
+            }
+        }
+        return R.ok("璁㈠崟淇敼鎴愬姛");
+    }
+
+
+    // ------------------------------------------------------------------------------------------------
+
+    @RequestMapping(value = "/orderLog/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(orderService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/orderLog/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<Order> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(orderService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/orderLog/update/auth")
+    @ManagerAuth
+    public R update(Order order){
+        if (Cools.isEmpty(order) || null == order.getId()){
+            return R.error();
+        }
+
+        //璁㈠崟瀹岀粨鍓嶏紝鍒ゆ柇鏄惁瀛樺湪浣滀笟涓暟鎹紝瀛樺湪鍒欎笉鑳藉畬缁�
+        if(order.getSettle() == 4){
+            int wrkCount = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("order_no",order.getOrderNo()));
+            int pakinCount = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("order_no",order.getOrderNo()));
+            if (wrkCount > 0 || pakinCount > 0) {
+                throw new CoolException("瀛樺湪浣滀笟涓暟鎹紝涓嶈兘瀹岀粨銆傝妫�鏌ュ叆搴撻�氱煡妗e拰宸ヤ綔妗�");
+            }
+        }
+
+        order.setUpdateBy(getUserId());
+        order.setUpdateTime(new Date());
+        if (!orderService.updateById(order)) {
+            throw new CoolException("淇敼璁㈠崟澶辫触");
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/orderLog/delete/auth")
+    @ManagerAuth(memo = "鎵嬪姩鍒犻櫎璁㈠崟")
+    @Transactional
+    public R delete(@RequestParam Long orderId){
+        orderService.remove(orderId);
+//        Order order = orderService.selectById(orderId);
+//        if (order != null) {
+//            order.setStatus(0);
+//        }
+//        if (!orderService.updateById(order)) {
+//            throw new CoolException("鍒犻櫎璁㈠崟澶辫触");
+//        }
+//        orderDetlService.modifyStatus(orderId, 0);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/orderLog/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<Order> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("order"));
+        convert(map, wrapper);
+        List<Order> list = orderService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/orderLogQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<Order> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<Order> page = orderService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (Order order : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", order.getId());
+            map.put("value", order.getOrderNo());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/orderLog/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<Order> wrapper = new EntityWrapper<Order>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != orderService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(Order.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping("/orderLog/in")
+    public R in(@RequestBody JSONObject param){
+        System.out.println("111 = " + 111);
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/LocCheck.java b/src/main/java/com/zy/asrs/entity/LocCheck.java
index aa7ba3e..a5d60fd 100644
--- a/src/main/java/com/zy/asrs/entity/LocCheck.java
+++ b/src/main/java/com/zy/asrs/entity/LocCheck.java
@@ -47,11 +47,17 @@
     private String matnr;
 
     /**
+     * 鐗╂枡鍙�
+     */
+    @ApiModelProperty(value= "鐗╂枡鍚�")
+    private String maktx;
+
+    /**
      * 鐩樼偣鍓嶆暟閲�
      */
     @ApiModelProperty(value= "鐩樼偣鍓嶆暟閲�")
-    @TableField("origin_anfme")
-    private Double originAnfme;
+    @TableField("anfme")
+    private Double anfme;
 
     /**
      * 鐪熷疄鏁伴噺
@@ -96,20 +102,17 @@
     @ApiModelProperty(value= "澶囨敞")
     private String memo;
 
-    public LocCheck() {}
+    @ApiModelProperty(value= "宸紓閲�")
+    @TableField("diff_anfme")
+    private Double diffAnfme;
 
-    public LocCheck(Integer type,String locNo,String matnr,Double originAnfme,Double realAnfme,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
-        this.type = type;
-        this.locNo = locNo;
-        this.matnr = matnr;
-        this.originAnfme = originAnfme;
-        this.realAnfme = realAnfme;
-        this.createBy = createBy;
-        this.createTime = createTime;
-        this.updateBy = updateBy;
-        this.updateTime = updateTime;
-        this.memo = memo;
-    }
+    @ApiModelProperty(value= "鍗曟嵁鍙�")
+    @TableField("order_no")
+    private String orderNo;
+
+
+
+
 
 //    LocCheck locCheck = new LocCheck(
 //            null,    // 鐘舵��
diff --git a/src/main/java/com/zy/asrs/entity/ManLocDetl.java b/src/main/java/com/zy/asrs/entity/ManLocDetl.java
index f738f2f..1f9b417 100644
--- a/src/main/java/com/zy/asrs/entity/ManLocDetl.java
+++ b/src/main/java/com/zy/asrs/entity/ManLocDetl.java
@@ -37,7 +37,6 @@
      * 璐т綅缂栧彿
      */
     @ApiModelProperty(value= "璐т綅缂栧彿")
-    @TableId(value = "loc_no", type = IdType.INPUT)
     @TableField("loc_no")
     private String locNo;
 
@@ -223,36 +222,7 @@
     @TableField("uuid")
     private String uuid;
 
-    public ManLocDetl() {}
 
-    public ManLocDetl(Long hostId, String locNo,Long nodeId,String zpallet,Double anfme,String matnr,String maktx,String name,String specs,String model,String batch,String unit,String barcode,Long docId,String docNum,String custName,Integer itemNum,Integer count,Double weight,Integer status,Long createBy,Date createTime,Long updateBy,Date modiTime,String memo,int owner ,int payment,String uuid) {
-        this.hostId = hostId;
-        this.nodeId = nodeId;
-        this.zpallet = zpallet;
-        this.anfme = anfme;
-        this.maktx = maktx;
-        this.name = name;
-        this.specs = specs;
-        this.model = model;
-        this.batch = batch;
-        this.unit = unit;
-        this.barcode = barcode;
-        this.docId = docId;
-        this.docNum = docNum;
-        this.custName = custName;
-        this.itemNum = itemNum;
-        this.count = count;
-        this.weight = weight;
-        this.status = status;
-        this.createBy = createBy;
-        this.createTime = createTime;
-        this.updateBy = updateBy;
-        this.modiTime = modiTime;
-        this.memo = memo;
-        this.owner = owner;
-        this.payment = payment;
-        this.uuid = uuid;
-    }
 
 //    LocDetl locDetl = new LocDetl(
 //            null,    // 璐т綅缂栧彿[闈炵┖]
diff --git a/src/main/java/com/zy/asrs/entity/OrderCheck.java b/src/main/java/com/zy/asrs/entity/OrderCheck.java
new file mode 100644
index 0000000..3e4d74a
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/OrderCheck.java
@@ -0,0 +1,443 @@
+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.asrs.entity.DocType;
+import com.zy.asrs.entity.OrderSettle;
+import com.zy.asrs.service.DocTypeService;
+import com.zy.asrs.service.OrderSettleService;
+import com.zy.system.entity.User;
+import com.zy.system.service.UserService;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@Data
+@TableName("man_order_check")
+public class OrderCheck implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 缂栧彿
+     */
+    @ApiModelProperty(value= "缂栧彿")
+    private String uuid;
+
+    /**
+     * 璁㈠崟缂栧彿
+     */
+    @ApiModelProperty(value= "璁㈠崟缂栧彿")
+    @TableField("order_no")
+    private String orderNo;
+
+    /**
+     * 鍗曟嵁鏃ユ湡
+     */
+    @ApiModelProperty(value= "鍗曟嵁鏃ユ湡")
+    @TableField("order_time")
+    private String orderTime;
+
+    /**
+     * 鍗曟嵁绫诲瀷
+     */
+    @ApiModelProperty(value= "鍗曟嵁绫诲瀷")
+    @TableField("doc_type")
+    private Long docType;
+
+    /**
+     * 椤圭洰缂栧彿
+     */
+    @ApiModelProperty(value= "椤圭洰缂栧彿")
+    @TableField("item_id")
+    private Long itemId;
+
+    @ApiModelProperty(value= "")
+    @TableField("item_name")
+    private String itemName;
+
+    /**
+     * 璋冩嫧椤圭洰缂栧彿
+     */
+    @ApiModelProperty(value= "璋冩嫧椤圭洰缂栧彿")
+    @TableField("allot_item_id")
+    private Long allotItemId;
+
+    /**
+     * 鍒濆绁ㄦ嵁鍙�
+     */
+    @ApiModelProperty(value= "鍒濆绁ㄦ嵁鍙�")
+    @TableField("def_number")
+    private String defNumber;
+
+    /**
+     * 绁ㄦ嵁鍙�
+     */
+    @ApiModelProperty(value= "绁ㄦ嵁鍙�")
+    private String number;
+
+    /**
+     * 瀹㈡埛缂栧彿
+     */
+    @ApiModelProperty(value= "瀹㈡埛缂栧彿")
+    private Long cstmr;
+
+    /**
+     * 瀹㈡埛
+     */
+    @ApiModelProperty(value= "瀹㈡埛")
+    @TableField("cstmr_name")
+    private String cstmrName;
+
+    /**
+     * 鑱旂郴鏂瑰紡
+     */
+    @ApiModelProperty(value= "鑱旂郴鏂瑰紡")
+    private String tel;
+
+    /**
+     * 鎿嶄綔浜哄憳
+     */
+    @ApiModelProperty(value= "鎿嶄綔浜哄憳")
+    @TableField("oper_memb")
+    private String operMemb;
+
+    /**
+     * 鍚堣閲戦
+     */
+    @ApiModelProperty(value= "鍚堣閲戦")
+    @TableField("total_fee")
+    private Double totalFee;
+
+    /**
+     * 浼樻儬鐜�
+     */
+    @ApiModelProperty(value= "浼樻儬鐜�")
+    private Double discount;
+
+    /**
+     * 浼樻儬閲戦
+     */
+    @ApiModelProperty(value= "浼樻儬閲戦")
+    @TableField("discount_fee")
+    private Double discountFee;
+
+    /**
+     * 閿�鍞垨閲囪喘璐圭敤鍚堣
+     */
+    @ApiModelProperty(value= "閿�鍞垨閲囪喘璐圭敤鍚堣")
+    @TableField("other_fee")
+    private Double otherFee;
+
+    /**
+     * 瀹炰粯閲戦
+     */
+    @ApiModelProperty(value= "瀹炰粯閲戦")
+    @TableField("act_fee")
+    private Double actFee;
+
+    /**
+     * 浠樻绫诲瀷 1: 鐜伴噾  2: 璁拌处
+     */
+    @ApiModelProperty(value= "浠樻绫诲瀷 1: 鐜伴噾  2: 璁拌处  ")
+    @TableField("pay_type")
+    private Integer payType;
+
+    /**
+     * 涓氬姟鍛�
+     */
+    @ApiModelProperty(value= "涓氬姟鍛�")
+    private String salesman;
+
+    /**
+     * 缁撶畻澶╂暟
+     */
+    @ApiModelProperty(value= "缁撶畻澶╂暟")
+    @TableField("account_day")
+    private Integer accountDay;
+
+    /**
+     * 閭垂鏀粯绫诲瀷 1: 鍦ㄧ嚎鏀粯  2: 璐у埌浠樻
+     */
+    @ApiModelProperty(value= "閭垂鏀粯绫诲瀷 1: 鍦ㄧ嚎鏀粯  2: 璐у埌浠樻  ")
+    @TableField("post_fee_type")
+    private Integer postFeeType;
+
+    /**
+     * 閭垂
+     */
+    @ApiModelProperty(value= "閭垂")
+    @TableField("post_fee")
+    private Double postFee;
+
+    /**
+     * 浠樻鏃堕棿
+     */
+    @ApiModelProperty(value= "浠樻鏃堕棿")
+    @TableField("pay_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date payTime;
+
+    /**
+     * 鍙戣揣鏃堕棿
+     */
+    @ApiModelProperty(value= "鍙戣揣鏃堕棿")
+    @TableField("send_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date sendTime;
+
+    /**
+     * 鐗╂祦鍚嶇О
+     */
+    @ApiModelProperty(value= "鐗╂祦鍚嶇О")
+    @TableField("ship_name")
+    private String shipName;
+
+    /**
+     * 鐗╂祦鍗曞彿
+     */
+    @ApiModelProperty(value= "鐗╂祦鍗曞彿")
+    @TableField("ship_code")
+    private String shipCode;
+
+    /**
+     * 璁㈠崟鐘舵��
+     */
+    @ApiModelProperty(value= "璁㈠崟鐘舵��")
+    private Long settle;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 绂佺敤
+     */
+    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 绂佺敤  ")
+    private Integer status;
+
+    /**
+     * 娣诲姞浜哄憳
+     */
+    @ApiModelProperty(value= "娣诲姞浜哄憳")
+    @TableField("create_by")
+    private Long createBy;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("update_by")
+    private Long updateBy;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("update_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    public OrderCheck() {}
+
+    public OrderCheck(String uuid, String orderNo, String orderTime, Long docType, Long itemId, String itemName, Long allotItemId, String defNumber, String number, Long cstmr, String cstmrName, String tel, String operMemb, Double totalFee, Double discount, Double discountFee, Double otherFee, Double actFee, Integer payType, String salesman, Integer accountDay, Integer postFeeType, Double postFee, Date payTime, Date sendTime, String shipName, String shipCode, Long settle, Integer status, Long createBy, Date createTime, Long updateBy, Date updateTime, String memo) {
+        this.uuid = uuid;
+        this.orderNo = orderNo;
+        this.orderTime = orderTime;
+        this.docType = docType;
+        this.itemId = itemId;
+        this.itemName = itemName;
+        this.allotItemId = allotItemId;
+        this.defNumber = defNumber;
+        this.number = number;
+        this.cstmr = cstmr;
+        this.cstmrName = cstmrName;
+        this.tel = tel;
+        this.operMemb = operMemb;
+        this.totalFee = totalFee;
+        this.discount = discount;
+        this.discountFee = discountFee;
+        this.otherFee = otherFee;
+        this.actFee = actFee;
+        this.payType = payType;
+        this.salesman = salesman;
+        this.accountDay = accountDay;
+        this.postFeeType = postFeeType;
+        this.postFee = postFee;
+        this.payTime = payTime;
+        this.sendTime = sendTime;
+        this.shipName = shipName;
+        this.shipCode = shipCode;
+        this.settle = settle;
+        this.status = status;
+        this.createBy = createBy;
+        this.createTime = createTime;
+        this.updateBy = updateBy;
+        this.updateTime = updateTime;
+        this.memo = memo;
+    }
+
+//    Order order = new Order(
+//            null,    // 缂栧彿[闈炵┖]
+//            null,    // 璁㈠崟缂栧彿
+//            null,    // 鍗曟嵁鏃ユ湡
+//            null,    // 鍗曟嵁绫诲瀷
+//            null,    // 椤圭洰缂栧彿
+//            null,    //
+//            null,    // 璋冩嫧椤圭洰缂栧彿
+//            null,    // 鍒濆绁ㄦ嵁鍙�
+//            null,    // 绁ㄦ嵁鍙�
+//            null,    // 瀹㈡埛缂栧彿
+//            null,    // 瀹㈡埛
+//            null,    // 鑱旂郴鏂瑰紡
+//            null,    // 鎿嶄綔浜哄憳
+//            null,    // 鍚堣閲戦
+//            null,    // 浼樻儬鐜�
+//            null,    // 浼樻儬閲戦
+//            null,    // 閿�鍞垨閲囪喘璐圭敤鍚堣
+//            null,    // 瀹炰粯閲戦
+//            null,    // 浠樻绫诲瀷
+//            null,    // 涓氬姟鍛�
+//            null,    // 缁撶畻澶╂暟
+//            null,    // 閭垂鏀粯绫诲瀷
+//            null,    // 閭垂
+//            null,    // 浠樻鏃堕棿
+//            null,    // 鍙戣揣鏃堕棿
+//            null,    // 鐗╂祦鍚嶇О
+//            null,    // 鐗╂祦鍗曞彿
+//            null,    // 璁㈠崟鐘舵��
+//            null,    // 鐘舵��
+//            null,    // 娣诲姞浜哄憳
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 淇敼浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null    // 澶囨敞
+//    );
+
+    public String getDocType$(){
+        DocTypeService service = SpringUtils.getBean(DocTypeService.class);
+        DocType docType = service.selectById(this.docType);
+        if (!Cools.isEmpty(docType)){
+            return String.valueOf(docType.getDocName());
+        }
+        return null;
+    }
+
+    public String getPayType$(){
+        if (null == this.payType){ return null; }
+        switch (this.payType){
+            case 1:
+                return "鐜伴噾";
+            case 2:
+                return "璁拌处";
+            default:
+                return String.valueOf(this.payType);
+        }
+    }
+
+    public String getPostFeeType$(){
+        if (null == this.postFeeType){ return null; }
+        switch (this.postFeeType){
+            case 1:
+                return "鍦ㄧ嚎鏀粯";
+            case 2:
+                return "璐у埌浠樻";
+            default:
+                return String.valueOf(this.postFeeType);
+        }
+    }
+
+    public String getPayTime$(){
+        if (Cools.isEmpty(this.payTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.payTime);
+    }
+
+    public String getSendTime$(){
+        if (Cools.isEmpty(this.sendTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.sendTime);
+    }
+
+    public String getSettle$(){
+        OrderSettleService service = SpringUtils.getBean(OrderSettleService.class);
+        OrderSettle orderSettle = service.selectById(this.settle);
+        if (!Cools.isEmpty(orderSettle)){
+            return String.valueOf(orderSettle.getSettleName());
+        }
+        return null;
+    }
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "绂佺敤";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getCreateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.createBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getUpdateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.updateBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/OrderDetlLog.java b/src/main/java/com/zy/asrs/entity/OrderDetlLog.java
new file mode 100644
index 0000000..9fd0859
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/OrderDetlLog.java
@@ -0,0 +1,447 @@
+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.asrs.service.LocOwnerService;
+import com.zy.asrs.service.OrderService;
+import com.zy.common.utils.Synchro;
+import com.zy.system.entity.User;
+import com.zy.system.service.UserService;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@Data
+@TableName("man_order_detl_log")
+public class OrderDetlLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 璁㈠崟鍐呯爜
+     */
+    @ApiModelProperty(value= "璁㈠崟鍐呯爜")
+    @TableField("order_id")
+    private Long orderId;
+
+    /**
+     * 鍗曟嵁缂栧彿
+     */
+    @ApiModelProperty(value= "鍗曟嵁缂栧彿")
+    @TableField("order_no")
+    private String orderNo;
+
+
+    /**
+     * 鏁伴噺
+     */
+    @ApiModelProperty(value= "鏁伴噺")
+    private Double anfme;
+
+    /**
+     * 浣滀笟鏁伴噺
+     *
+     *  鍏ュ簱 : 缁勬墭瀹屾垚锛岀粍鎵樻。銆佸伐浣滄。銆佸叆搴撳畬鎴愭暟閲�
+     *  鍑哄簱 : 宸ヤ綔妗c�佸嚭搴撳畬鎴愭暟閲�
+     */
+    @ApiModelProperty(value= "浣滀笟鏁伴噺")
+    @TableField("work_qty")
+    private Double workQty;
+
+    /**
+     * 瀹屾垚鏁伴噺
+     *
+     *  鍏ュ簱 : qty 馃憜
+     *  鍑哄簱 : qty 馃憜
+     */
+    @ApiModelProperty(value= "瀹屾垚鏁伴噺")
+    private Double qty;
+
+    /**
+     * 鍟嗗搧缂栫爜
+     */
+    @ApiModelProperty(value= "鍟嗗搧缂栫爜")
+    private String matnr;
+
+    /**
+     * 鍟嗗搧鍚嶇О
+     */
+    @ApiModelProperty(value= "鍟嗗搧鍚嶇О")
+    private String maktx;
+
+    /**
+     * 鎵瑰彿
+     */
+    @ApiModelProperty(value= "鎵瑰彿")
+    private String batch;
+
+    /**
+     * 瑙勬牸
+     */
+    @ApiModelProperty(value= "瑙勬牸")
+    private String specs;
+
+    /**
+     * 鍨嬪彿
+     */
+    @ApiModelProperty(value= "鍨嬪彿")
+    private String model;
+
+    /**
+     * 棰滆壊
+     */
+    @ApiModelProperty(value= "棰滆壊")
+    private String color;
+
+    /**
+     * 鍝佺墝
+     */
+    @ApiModelProperty(value= "鍝佺墝")
+    private String brand;
+
+    /**
+     * 鍗曚綅
+     */
+    @ApiModelProperty(value= "鍗曚綅")
+    private String unit;
+
+    /**
+     * 鍗曚环
+     */
+    @ApiModelProperty(value= "鍗曚环")
+    private Double price;
+
+    /**
+     * sku
+     */
+    @ApiModelProperty(value= "sku")
+    private String sku;
+
+    /**
+     * 鍗曚綅閲�
+     */
+    @ApiModelProperty(value= "鍗曚綅閲�")
+    private Double units;
+
+    /**
+     * 鏉$爜
+     */
+    @ApiModelProperty(value= "鏉$爜")
+    private String barcode;
+
+    /**
+     * 浜у湴
+     */
+    @ApiModelProperty(value= "浜у湴")
+    private String origin;
+
+    /**
+     * 鍘傚
+     */
+    @ApiModelProperty(value= "鍘傚")
+    private String manu;
+
+    /**
+     * 鐢熶骇鏃ユ湡
+     */
+    @ApiModelProperty(value= "鐢熶骇鏃ユ湡")
+    @TableField("manu_date")
+    private String manuDate;
+
+    /**
+     * 鍝侀」鏁�
+     */
+    @ApiModelProperty(value= "鍝侀」鏁�")
+    @TableField("item_num")
+    private String itemNum;
+
+    /**
+     * 瀹夊叏搴撳瓨閲�
+     */
+    @ApiModelProperty(value= "瀹夊叏搴撳瓨閲�")
+    @TableField("safe_qty")
+    private Double safeQty;
+
+    /**
+     * 閲嶉噺
+     */
+    @ApiModelProperty(value= "閲嶉噺")
+    private Double weight;
+
+    /**
+     * 闀垮害
+     */
+    @ApiModelProperty(value= "闀垮害")
+    private Double length;
+
+    /**
+     * 浣撶Н
+     */
+    @ApiModelProperty(value= "浣撶Н")
+    private Double volume;
+
+    /**
+     * 涓夋柟缂栫爜
+     */
+    @ApiModelProperty(value= "涓夋柟缂栫爜")
+    @TableField("three_code")
+    private String threeCode;
+
+    /**
+     * 渚涘簲鍟�
+     */
+    @ApiModelProperty(value= "渚涘簲鍟�")
+    private String supp;
+
+    /**
+     * 渚涘簲鍟嗙紪鐮�
+     */
+    @ApiModelProperty(value= "渚涘簲鍟嗙紪鐮�")
+    @TableField("supp_code")
+    private String suppCode;
+
+    /**
+     * 鏄惁鎵规 1: 鏄�  0: 鍚�
+     */
+    @ApiModelProperty(value= "鏄惁鎵规 1: 鏄�  0: 鍚�  ")
+    @TableField("be_batch")
+    private Integer beBatch;
+
+    /**
+     * 淇濊川鏈�
+     */
+    @ApiModelProperty(value= "淇濊川鏈�")
+    @TableField("dead_time")
+    private String deadTime;
+
+    /**
+     * 棰勮澶╂暟
+     */
+    @ApiModelProperty(value= "棰勮澶╂暟")
+    @TableField("dead_warn")
+    private Integer deadWarn;
+
+    /**
+     * 鍒惰喘 1: 鍒堕��  2: 閲囪喘  3: 澶栧崗
+     */
+    @ApiModelProperty(value= "鍒惰喘 1: 鍒堕��  2: 閲囪喘  3: 澶栧崗  ")
+    private Integer source;
+
+    /**
+     * 瑕佹眰妫�楠� 1: 鏄�  0: 鍚�
+     */
+    @ApiModelProperty(value= "瑕佹眰妫�楠� 1: 鏄�  0: 鍚�  ")
+    private Integer inspect;
+
+    /**
+     * 鍗遍櫓鍝� 1: 鏄�  0: 鍚�
+     */
+    @ApiModelProperty(value= "鍗遍櫓鍝� 1: 鏄�  0: 鍚�  ")
+    private Integer danger;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 绂佺敤
+     */
+    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 绂佺敤  ")
+    private Integer status;
+
+    /**
+     * 娣诲姞浜哄憳
+     */
+    @ApiModelProperty(value= "娣诲姞浜哄憳")
+    @TableField("create_by")
+    private Long createBy;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("update_by")
+    private Long updateBy;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("update_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    @ApiModelProperty(value= "鎷ユ湁鑰� 1: 鏉板厠   ")
+    private Integer owner;
+
+    /**
+     * 璐х墿褰㈡��:0锛氫唬閲囥��1锛氫粨鍌�
+     */
+    @ApiModelProperty(value= "璐х墿褰㈡��:0锛氫唬閲囥��1锛氫粨鍌�")
+    private Integer payment;
+
+
+    public String getOwner$(){
+        LocOwnerService service = SpringUtils.getBean(LocOwnerService.class);
+        LocOwner locOwner = service.selectById(this.owner);
+        if (!Cools.isEmpty(locOwner)){
+            return String.valueOf(locOwner.getOwner());
+        }
+        return null;
+    }
+
+    public String getPayment$(){
+        if (null == this.payment){ return null; }
+        switch (this.payment){
+            case 1:
+                return "浠撳偍";
+            case 0:
+                return "浠i噰";
+            default:
+                return String.valueOf(this.payment);
+        }
+    }
+
+
+
+    public String getOrderId$(){
+        OrderService service = SpringUtils.getBean(OrderService.class);
+        Order order = service.selectById(this.orderId);
+        if (!Cools.isEmpty(order)){
+            return String.valueOf(order.getId());
+        }
+        return null;
+    }
+
+    public String getBeBatch$(){
+        if (null == this.beBatch){ return null; }
+        switch (this.beBatch){
+            case 1:
+                return "鏄�";
+            case 0:
+                return "鍚�";
+            default:
+                return String.valueOf(this.beBatch);
+        }
+    }
+
+    public String getSource$(){
+        if (null == this.source){ return null; }
+        switch (this.source){
+            case 1:
+                return "鍒堕��";
+            case 2:
+                return "閲囪喘";
+            case 3:
+                return "澶栧崗";
+            default:
+                return String.valueOf(this.source);
+        }
+    }
+
+    public String getInspect$(){
+        if (null == this.inspect){ return null; }
+        switch (this.inspect){
+            case 1:
+                return "鏄�";
+            case 0:
+                return "鍚�";
+            default:
+                return String.valueOf(this.inspect);
+        }
+    }
+
+    public String getDanger$(){
+        if (null == this.danger){ return null; }
+        switch (this.danger){
+            case 1:
+                return "鏄�";
+            case 0:
+                return "鍚�";
+            default:
+                return String.valueOf(this.danger);
+        }
+    }
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "绂佺敤";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getCreateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.createBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getUpdateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.updateBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+    public Double getEnableQty() {
+
+        if (null != this.anfme && this.qty != null) {
+            return this.anfme - this.qty;
+        }
+        return null;
+    }
+
+    public void sync(Object source) {
+        Synchro.Copy(source, this);
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/asrs/entity/OrderLog.java b/src/main/java/com/zy/asrs/entity/OrderLog.java
new file mode 100644
index 0000000..f61de1a
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/OrderLog.java
@@ -0,0 +1,441 @@
+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.asrs.service.DocTypeService;
+import com.zy.asrs.service.OrderSettleService;
+import com.zy.system.entity.User;
+import com.zy.system.service.UserService;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@Data
+@TableName("man_order_log")
+public class OrderLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 缂栧彿
+     */
+    @ApiModelProperty(value= "缂栧彿")
+    private String uuid;
+
+    /**
+     * 璁㈠崟缂栧彿
+     */
+    @ApiModelProperty(value= "璁㈠崟缂栧彿")
+    @TableField("order_no")
+    private String orderNo;
+
+    /**
+     * 鍗曟嵁鏃ユ湡
+     */
+    @ApiModelProperty(value= "鍗曟嵁鏃ユ湡")
+    @TableField("order_time")
+    private String orderTime;
+
+    /**
+     * 鍗曟嵁绫诲瀷
+     */
+    @ApiModelProperty(value= "鍗曟嵁绫诲瀷")
+    @TableField("doc_type")
+    private Long docType;
+
+    /**
+     * 椤圭洰缂栧彿
+     */
+    @ApiModelProperty(value= "椤圭洰缂栧彿")
+    @TableField("item_id")
+    private Long itemId;
+
+    @ApiModelProperty(value= "")
+    @TableField("item_name")
+    private String itemName;
+
+    /**
+     * 璋冩嫧椤圭洰缂栧彿
+     */
+    @ApiModelProperty(value= "璋冩嫧椤圭洰缂栧彿")
+    @TableField("allot_item_id")
+    private Long allotItemId;
+
+    /**
+     * 鍒濆绁ㄦ嵁鍙�
+     */
+    @ApiModelProperty(value= "鍒濆绁ㄦ嵁鍙�")
+    @TableField("def_number")
+    private String defNumber;
+
+    /**
+     * 绁ㄦ嵁鍙�
+     */
+    @ApiModelProperty(value= "绁ㄦ嵁鍙�")
+    private String number;
+
+    /**
+     * 瀹㈡埛缂栧彿
+     */
+    @ApiModelProperty(value= "瀹㈡埛缂栧彿")
+    private Long cstmr;
+
+    /**
+     * 瀹㈡埛
+     */
+    @ApiModelProperty(value= "瀹㈡埛")
+    @TableField("cstmr_name")
+    private String cstmrName;
+
+    /**
+     * 鑱旂郴鏂瑰紡
+     */
+    @ApiModelProperty(value= "鑱旂郴鏂瑰紡")
+    private String tel;
+
+    /**
+     * 鎿嶄綔浜哄憳
+     */
+    @ApiModelProperty(value= "鎿嶄綔浜哄憳")
+    @TableField("oper_memb")
+    private String operMemb;
+
+    /**
+     * 鍚堣閲戦
+     */
+    @ApiModelProperty(value= "鍚堣閲戦")
+    @TableField("total_fee")
+    private Double totalFee;
+
+    /**
+     * 浼樻儬鐜�
+     */
+    @ApiModelProperty(value= "浼樻儬鐜�")
+    private Double discount;
+
+    /**
+     * 浼樻儬閲戦
+     */
+    @ApiModelProperty(value= "浼樻儬閲戦")
+    @TableField("discount_fee")
+    private Double discountFee;
+
+    /**
+     * 閿�鍞垨閲囪喘璐圭敤鍚堣
+     */
+    @ApiModelProperty(value= "閿�鍞垨閲囪喘璐圭敤鍚堣")
+    @TableField("other_fee")
+    private Double otherFee;
+
+    /**
+     * 瀹炰粯閲戦
+     */
+    @ApiModelProperty(value= "瀹炰粯閲戦")
+    @TableField("act_fee")
+    private Double actFee;
+
+    /**
+     * 浠樻绫诲瀷 1: 鐜伴噾  2: 璁拌处
+     */
+    @ApiModelProperty(value= "浠樻绫诲瀷 1: 鐜伴噾  2: 璁拌处  ")
+    @TableField("pay_type")
+    private Integer payType;
+
+    /**
+     * 涓氬姟鍛�
+     */
+    @ApiModelProperty(value= "涓氬姟鍛�")
+    private String salesman;
+
+    /**
+     * 缁撶畻澶╂暟
+     */
+    @ApiModelProperty(value= "缁撶畻澶╂暟")
+    @TableField("account_day")
+    private Integer accountDay;
+
+    /**
+     * 閭垂鏀粯绫诲瀷 1: 鍦ㄧ嚎鏀粯  2: 璐у埌浠樻
+     */
+    @ApiModelProperty(value= "閭垂鏀粯绫诲瀷 1: 鍦ㄧ嚎鏀粯  2: 璐у埌浠樻  ")
+    @TableField("post_fee_type")
+    private Integer postFeeType;
+
+    /**
+     * 閭垂
+     */
+    @ApiModelProperty(value= "閭垂")
+    @TableField("post_fee")
+    private Double postFee;
+
+    /**
+     * 浠樻鏃堕棿
+     */
+    @ApiModelProperty(value= "浠樻鏃堕棿")
+    @TableField("pay_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date payTime;
+
+    /**
+     * 鍙戣揣鏃堕棿
+     */
+    @ApiModelProperty(value= "鍙戣揣鏃堕棿")
+    @TableField("send_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date sendTime;
+
+    /**
+     * 鐗╂祦鍚嶇О
+     */
+    @ApiModelProperty(value= "鐗╂祦鍚嶇О")
+    @TableField("ship_name")
+    private String shipName;
+
+    /**
+     * 鐗╂祦鍗曞彿
+     */
+    @ApiModelProperty(value= "鐗╂祦鍗曞彿")
+    @TableField("ship_code")
+    private String shipCode;
+
+    /**
+     * 璁㈠崟鐘舵��
+     */
+    @ApiModelProperty(value= "璁㈠崟鐘舵��")
+    private Long settle;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 绂佺敤
+     */
+    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 绂佺敤  ")
+    private Integer status;
+
+    /**
+     * 娣诲姞浜哄憳
+     */
+    @ApiModelProperty(value= "娣诲姞浜哄憳")
+    @TableField("create_by")
+    private Long createBy;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("update_by")
+    private Long updateBy;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("update_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    public OrderLog() {}
+
+    public OrderLog(String uuid, String orderNo, String orderTime, Long docType, Long itemId, String itemName, Long allotItemId, String defNumber, String number, Long cstmr, String cstmrName, String tel, String operMemb, Double totalFee, Double discount, Double discountFee, Double otherFee, Double actFee, Integer payType, String salesman, Integer accountDay, Integer postFeeType, Double postFee, Date payTime, Date sendTime, String shipName, String shipCode, Long settle, Integer status, Long createBy, Date createTime, Long updateBy, Date updateTime, String memo) {
+        this.uuid = uuid;
+        this.orderNo = orderNo;
+        this.orderTime = orderTime;
+        this.docType = docType;
+        this.itemId = itemId;
+        this.itemName = itemName;
+        this.allotItemId = allotItemId;
+        this.defNumber = defNumber;
+        this.number = number;
+        this.cstmr = cstmr;
+        this.cstmrName = cstmrName;
+        this.tel = tel;
+        this.operMemb = operMemb;
+        this.totalFee = totalFee;
+        this.discount = discount;
+        this.discountFee = discountFee;
+        this.otherFee = otherFee;
+        this.actFee = actFee;
+        this.payType = payType;
+        this.salesman = salesman;
+        this.accountDay = accountDay;
+        this.postFeeType = postFeeType;
+        this.postFee = postFee;
+        this.payTime = payTime;
+        this.sendTime = sendTime;
+        this.shipName = shipName;
+        this.shipCode = shipCode;
+        this.settle = settle;
+        this.status = status;
+        this.createBy = createBy;
+        this.createTime = createTime;
+        this.updateBy = updateBy;
+        this.updateTime = updateTime;
+        this.memo = memo;
+    }
+
+//    Order order = new Order(
+//            null,    // 缂栧彿[闈炵┖]
+//            null,    // 璁㈠崟缂栧彿
+//            null,    // 鍗曟嵁鏃ユ湡
+//            null,    // 鍗曟嵁绫诲瀷
+//            null,    // 椤圭洰缂栧彿
+//            null,    //
+//            null,    // 璋冩嫧椤圭洰缂栧彿
+//            null,    // 鍒濆绁ㄦ嵁鍙�
+//            null,    // 绁ㄦ嵁鍙�
+//            null,    // 瀹㈡埛缂栧彿
+//            null,    // 瀹㈡埛
+//            null,    // 鑱旂郴鏂瑰紡
+//            null,    // 鎿嶄綔浜哄憳
+//            null,    // 鍚堣閲戦
+//            null,    // 浼樻儬鐜�
+//            null,    // 浼樻儬閲戦
+//            null,    // 閿�鍞垨閲囪喘璐圭敤鍚堣
+//            null,    // 瀹炰粯閲戦
+//            null,    // 浠樻绫诲瀷
+//            null,    // 涓氬姟鍛�
+//            null,    // 缁撶畻澶╂暟
+//            null,    // 閭垂鏀粯绫诲瀷
+//            null,    // 閭垂
+//            null,    // 浠樻鏃堕棿
+//            null,    // 鍙戣揣鏃堕棿
+//            null,    // 鐗╂祦鍚嶇О
+//            null,    // 鐗╂祦鍗曞彿
+//            null,    // 璁㈠崟鐘舵��
+//            null,    // 鐘舵��
+//            null,    // 娣诲姞浜哄憳
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 淇敼浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null    // 澶囨敞
+//    );
+
+    public String getDocType$(){
+        DocTypeService service = SpringUtils.getBean(DocTypeService.class);
+        DocType docType = service.selectById(this.docType);
+        if (!Cools.isEmpty(docType)){
+            return String.valueOf(docType.getDocName());
+        }
+        return null;
+    }
+
+    public String getPayType$(){
+        if (null == this.payType){ return null; }
+        switch (this.payType){
+            case 1:
+                return "鐜伴噾";
+            case 2:
+                return "璁拌处";
+            default:
+                return String.valueOf(this.payType);
+        }
+    }
+
+    public String getPostFeeType$(){
+        if (null == this.postFeeType){ return null; }
+        switch (this.postFeeType){
+            case 1:
+                return "鍦ㄧ嚎鏀粯";
+            case 2:
+                return "璐у埌浠樻";
+            default:
+                return String.valueOf(this.postFeeType);
+        }
+    }
+
+    public String getPayTime$(){
+        if (Cools.isEmpty(this.payTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.payTime);
+    }
+
+    public String getSendTime$(){
+        if (Cools.isEmpty(this.sendTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.sendTime);
+    }
+
+    public String getSettle$(){
+        OrderSettleService service = SpringUtils.getBean(OrderSettleService.class);
+        OrderSettle orderSettle = service.selectById(this.settle);
+        if (!Cools.isEmpty(orderSettle)){
+            return String.valueOf(orderSettle.getSettleName());
+        }
+        return null;
+    }
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "绂佺敤";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getCreateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.createBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getUpdateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.updateBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/param/CheckDTO.java b/src/main/java/com/zy/asrs/entity/param/CheckDTO.java
new file mode 100644
index 0000000..f7c2c6d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/CheckDTO.java
@@ -0,0 +1,22 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CheckDTO {
+
+    private String prec;
+
+    private List<data> data;
+    @Data
+    public static class data{
+        private String name;
+        private String value;
+        private String children;
+    }
+
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/asrs/entity/param/OrderCheckParam.java b/src/main/java/com/zy/asrs/entity/param/OrderCheckParam.java
new file mode 100644
index 0000000..865a518
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/OrderCheckParam.java
@@ -0,0 +1,25 @@
+package com.zy.asrs.entity.param;
+
+import com.zy.asrs.entity.ManLocDetl;
+import com.zy.asrs.entity.OrderDetl;
+import lombok.Data;
+
+import java.util.List;
+@Data
+public class OrderCheckParam {
+
+
+    private Long orderId;
+
+    private Long docType;
+
+    private String checkType;
+
+    private String orderNo;
+
+    private List<ManLocDetl> orderDetlList;
+
+
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/asrs/mapper/LocCheckMapper.java b/src/main/java/com/zy/asrs/mapper/LocCheckMapper.java
index 226f138..25b45de 100644
--- a/src/main/java/com/zy/asrs/mapper/LocCheckMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocCheckMapper.java
@@ -2,11 +2,25 @@
 
 import com.zy.asrs.entity.LocCheck;
 import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.ManLocDetl;
+import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
+
+import java.util.List;
 
 @Mapper
 @Repository
 public interface LocCheckMapper extends BaseMapper<LocCheck> {
 
+    List<ManLocDetl> getAutoLocDetl();
+
+    List<ManLocDetl> getCountLocDetl(@Param("count") int count);
+
+    List<ManLocDetl> getMatnrCountLocDetl(@Param("count") int count,@Param("matnr") String matnr);
+
+    @Delete("DELETE FROM man_loc_check")
+    boolean deleteAll();
+
 }
diff --git a/src/main/java/com/zy/asrs/mapper/OrderCheckMapper.java b/src/main/java/com/zy/asrs/mapper/OrderCheckMapper.java
new file mode 100644
index 0000000..fe89f87
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/OrderCheckMapper.java
@@ -0,0 +1,29 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.Order;
+import com.zy.asrs.entity.OrderCheck;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface OrderCheckMapper extends BaseMapper<OrderCheck> {
+
+    int updateSettle(@Param("orderId")Long orderId, @Param("settle")Long settle, @Param("userId")Long userId);
+
+    List<OrderCheck> selectComplete();
+
+    int addToLogTable(OrderCheck orderCheck);
+
+    Integer checkDetlWorkQtyLess0(@Param("orderNo") String orderNo);
+
+    void updateSettleTo1(@Param("orderNo")String orderNo);
+
+
+
+    List<OrderCheck> selectToBeHistoryOrder(@Param("settle")int settle);
+}
diff --git a/src/main/java/com/zy/asrs/mapper/OrderDetlLogMapper.java b/src/main/java/com/zy/asrs/mapper/OrderDetlLogMapper.java
new file mode 100644
index 0000000..ffdccc9
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/OrderDetlLogMapper.java
@@ -0,0 +1,16 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.AdjDetl;
+import com.zy.asrs.entity.OrderDetlLog;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface OrderDetlLogMapper extends BaseMapper<OrderDetlLog> {
+
+    @Insert("insert into man_order_detl_log select * from man_order_detl where order_no=#{orderNo}")
+    int save(String orderNo);
+}
diff --git a/src/main/java/com/zy/asrs/mapper/OrderLogMapper.java b/src/main/java/com/zy/asrs/mapper/OrderLogMapper.java
new file mode 100644
index 0000000..14bf1f5
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/OrderLogMapper.java
@@ -0,0 +1,15 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.OrderLog;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface OrderLogMapper extends BaseMapper<OrderLog> {
+
+    @Insert("insert into man_order_log select * from man_order where order_no=#{orderNo}")
+    int save(String orderNo);
+}
diff --git a/src/main/java/com/zy/asrs/mapper/OrderMapper.java b/src/main/java/com/zy/asrs/mapper/OrderMapper.java
index b60f463..af74849 100644
--- a/src/main/java/com/zy/asrs/mapper/OrderMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/OrderMapper.java
@@ -24,4 +24,6 @@
 
     List<Order> selectInOrOutOrders(@Param("flag") Integer flag);
 
+    List<Order> selectToBeHistoryOrder(@Param("settle")int settle);
+
 }
diff --git a/src/main/java/com/zy/asrs/service/LocCheckService.java b/src/main/java/com/zy/asrs/service/LocCheckService.java
index db3fe91..661a6f1 100644
--- a/src/main/java/com/zy/asrs/service/LocCheckService.java
+++ b/src/main/java/com/zy/asrs/service/LocCheckService.java
@@ -2,8 +2,17 @@
 
 import com.zy.asrs.entity.LocCheck;
 import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.ManLocDetl;
+
+import java.util.List;
 
 public interface LocCheckService extends IService<LocCheck> {
 
-    void autoCreatePick(String prec);
+    List<ManLocDetl> autoCreatePick();
+
+    List<ManLocDetl> getCountLocDetl(int count);
+
+    List<ManLocDetl> getMatnrCountLocDetl(int count,String matnr);
+
+    boolean deleteAll();
 }
diff --git a/src/main/java/com/zy/asrs/service/OrderCheckService.java b/src/main/java/com/zy/asrs/service/OrderCheckService.java
new file mode 100644
index 0000000..6e83923
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/OrderCheckService.java
@@ -0,0 +1,32 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.*;
+
+import java.util.List;
+
+public interface OrderCheckService extends IService<OrderCheck> {
+
+    OrderCheck selectByNo(String orderNo);
+
+    List<OrderDetl> selectWorkingDetls(Long orderId);
+
+    boolean updateSettle(Long orderId, Long settle, Long userId);
+
+    void checkComplete(String orderNo);
+
+    boolean saveHandlerOrder(Boolean pakin, WrkMast wrkMast, List<WrkDetl> wrkDetls);
+
+
+
+    List<OrderCheck> selectComplete();
+
+    boolean addToLogTable(OrderCheck order);
+
+    void BackToInit(String orderNo);
+
+
+    List<OrderCheck> selectToBeHistoryOrder(boolean isERP);
+
+    void remove(String orderNo);
+}
diff --git a/src/main/java/com/zy/asrs/service/OrderDetlLogService.java b/src/main/java/com/zy/asrs/service/OrderDetlLogService.java
new file mode 100644
index 0000000..de73523
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/OrderDetlLogService.java
@@ -0,0 +1,9 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.OrderDetlLog;
+
+public interface OrderDetlLogService extends IService<OrderDetlLog> {
+
+    boolean save(String orderNo);
+}
diff --git a/src/main/java/com/zy/asrs/service/OrderLogService.java b/src/main/java/com/zy/asrs/service/OrderLogService.java
new file mode 100644
index 0000000..099d25b
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/OrderLogService.java
@@ -0,0 +1,15 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+
+
+import com.zy.asrs.entity.OrderLog;
+
+public interface OrderLogService extends IService<OrderLog> {
+
+    boolean save(String orderNo);
+
+
+    OrderLog selectByNo(String orderNo);
+}
+
diff --git a/src/main/java/com/zy/asrs/service/OrderService.java b/src/main/java/com/zy/asrs/service/OrderService.java
index 4d3da31..50afa6b 100644
--- a/src/main/java/com/zy/asrs/service/OrderService.java
+++ b/src/main/java/com/zy/asrs/service/OrderService.java
@@ -31,4 +31,6 @@
     List<Order> selectInOrOutOrders(boolean inOrders);
 
     void checkSettleUpdate(Long orderId);
+
+    List<Order> selectToBeHistoryOrder(boolean isERP);
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/LocCheckServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocCheckServiceImpl.java
index d1e91e5..869719e 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocCheckServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocCheckServiceImpl.java
@@ -11,14 +11,28 @@
 
 import java.util.List;
 
-@Service("locCheckService")
+@Service("LocCheckService")
 public class LocCheckServiceImpl extends ServiceImpl<LocCheckMapper, LocCheck> implements LocCheckService {
     @Autowired
     private ManLocDetlService manLocDetlService;
 
     @Override
-    public void autoCreatePick(String prec) {
-        List<ManLocDetl> manLocDetls = manLocDetlService.selectList(null);
+    public List<ManLocDetl> autoCreatePick() {
+        return  this.baseMapper.getAutoLocDetl();
+    }
 
+    @Override
+    public List<ManLocDetl> getCountLocDetl(int count) {
+        return this.baseMapper.getCountLocDetl(count);
+    }
+
+    @Override
+    public List<ManLocDetl> getMatnrCountLocDetl(int count, String matnr) {
+        return this.baseMapper.getMatnrCountLocDetl(count,matnr);
+    }
+
+    @Override
+    public boolean deleteAll() {
+        return this.baseMapper.deleteAll();
     }
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/OrderCheckServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OrderCheckServiceImpl.java
new file mode 100644
index 0000000..6ab4f2a
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/OrderCheckServiceImpl.java
@@ -0,0 +1,183 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.SnowflakeIdWorker;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.param.OpenOrderPakinParam;
+import com.zy.asrs.entity.param.OpenOrderPakoutParam;
+import com.zy.asrs.mapper.OrderCheckMapper;
+import com.zy.asrs.mapper.OrderDetlMapper;
+import com.zy.asrs.mapper.OrderMapper;
+import com.zy.asrs.service.*;
+import com.zy.common.model.DetlDto;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@Service("orderCheckService")
+public class OrderCheckServiceImpl extends ServiceImpl<OrderCheckMapper, OrderCheck> implements OrderCheckService {
+
+    @Autowired
+    private OrderDetlMapper orderDetlMapper;
+    @Autowired
+    private OpenService openService;
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
+    @Autowired
+    private OrderDetlService orderDetlService;
+    @Autowired
+    private DocTypeService docTypeService;
+    @Autowired
+    private WrkDetlService wrkDetlService;
+
+    @Autowired
+    private LocCheckService locCheckService;
+
+    @Override
+    public OrderCheck selectByNo(String orderNo) {
+        List<OrderCheck> orderList = this.selectList(new EntityWrapper<OrderCheck>().eq("order_no", orderNo));
+        if (Cools.isEmpty(orderList)) {
+            return null;
+        }
+        return orderList.get(0);
+    }
+
+    @Override
+    public List<OrderDetl> selectWorkingDetls(Long orderId) {
+        return orderDetlMapper.selectWorkingDetls(orderId);
+    }
+
+    @Override
+    public boolean updateSettle(Long orderId, Long settle, Long userId) {
+        return this.baseMapper.updateSettle(orderId, settle, userId) > 0;
+    }
+
+    @Override
+    public void checkComplete(String orderNo) {
+        OrderCheck order = this.selectByNo(orderNo);
+        if (Cools.isEmpty(order) || order.getSettle() >= 4L) {
+            return;
+        }
+        List<OrderDetl> orderDetls = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().eq("order_id", order.getId()));
+        boolean complete = true;
+        for (OrderDetl orderDetl : orderDetls) {
+            if (orderDetl.getAnfme() > orderDetl.getQty()) {
+                complete = false;
+                break;
+            }
+        }
+        if (complete) {
+            for (OrderDetl orderDetl : orderDetls) {
+                //鐢熸垚鍗曟嵁鍜屽叆搴撻�氱煡妗f椂锛岀粰batch涓虹┖鐨勬槑缁嗚祴浜嗕竴涓� =""锛� 鐜板湪鏀逛负null锛屽洖浼犵敤
+                if (orderDetl.getBatch().equals("")){
+                    orderDetl.setBatch(null);
+                    orderDetlService.updateById(orderDetl);
+                }
+            }
+            if (!this.updateSettle(order.getId(), 4L, null)) {
+                throw new CoolException("淇敼璁㈠崟銆恛rderNo = " + order.getOrderNo() + "銆戠姸鎬佷负宸插畬鎴愬け璐�");
+            }
+        }
+
+    }
+
+    @Override
+    public boolean saveHandlerOrder(Boolean pakin, WrkMast wrkMast, List<WrkDetl> wrkDetls) {
+        try {
+            List<DetlDto> detlDtos = new ArrayList<>();
+            wrkDetls.forEach(wrkDetl -> {
+                detlDtos.add(new DetlDto(wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme()));
+            });
+            String orderNo = "HAND" + snowflakeIdWorker.nextId();
+            if (pakin) {
+                // 鐢熸垚鍏ュ簱鍗曟嵁
+                OpenOrderPakinParam openParam = new OpenOrderPakinParam();
+                openParam.setOrderNo(orderNo);
+                openParam.setOrderTime(DateUtils.convert(wrkMast.getModiTime()));
+                openParam.setOrderType("鎵嬪姩鍏ュ簱鍗�");
+                openParam.setOrderDetails(detlDtos);
+                openService.pakinOrderCreate(openParam);
+            } else {
+                // 鐢熸垚鍑哄簱鍗曟嵁
+                OpenOrderPakoutParam openParam = new OpenOrderPakoutParam();
+                openParam.setOrderNo(orderNo);
+                openParam.setOrderTime(DateUtils.convert(wrkMast.getModiTime()));
+                openParam.setOrderType("鎵嬪姩鍑哄簱鍗�");
+                openParam.setOrderDetails(detlDtos);
+                openService.pakoutOrderCreate(openParam);
+            }
+
+            OrderCheck order = this.selectByNo(orderNo);
+            if (null == order) {
+                throw new CoolException("鐢熸垚鍗曟嵁澶辫触");
+            }
+            if (!this.updateSettle(order.getId(), 4L, null)) {
+                throw new CoolException("淇敼鍗曟嵁鐘舵�佸け璐�");
+            }
+            for (DetlDto detlDto : detlDtos) {
+                // 淇敼璁㈠崟鏄庣粏鏁伴噺
+                if (!orderDetlService.increase(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
+                    throw new CoolException("淇敼鍗曟嵁鏄庣粏鏁伴噺澶辫触");
+                }
+                // 淇敼璁㈠崟浣滀笟鏁伴噺
+                if (!orderDetlService.increaseWorkQty(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
+                    throw new CoolException("淇敼鍗曟嵁浣滀笟鏁伴噺澶辫触");
+                }
+            }
+        } catch (Exception e) {
+            log.error("saveHandlerOrder===>>", e);
+            return false;
+        }
+        return true;
+    }
+
+
+
+    @Override
+    public List<OrderCheck> selectComplete() {
+        return this.baseMapper.selectComplete();
+    }
+
+    @Override
+    public boolean addToLogTable(OrderCheck order) {
+        return this.baseMapper.addToLogTable(order) > 0;
+    }
+
+    /**
+     *
+     * @param orderNo
+     *
+     */
+    @Override
+    public void BackToInit(String orderNo) {
+        Integer count = this.baseMapper.checkDetlWorkQtyLess0(orderNo);
+        //濡傛灉鎵�鏈夋槑缁嗙殑宸ヤ綔鏁伴噺鍜屽畬鎴愰噺閮藉皬浜庣瓑浜�0锛� 閭d箞灏嗕富妗f洿鏂颁负鈥滃緟澶勭悊鈥濈姸鎬�
+        if (count == 0 ){
+            this.baseMapper.updateSettleTo1(orderNo);
+        }
+    }
+
+    @Override
+    public List<OrderCheck> selectToBeHistoryOrder(boolean isERP) {
+        int settle = isERP ? 6 : 4;
+        return this.baseMapper.selectToBeHistoryOrder(settle);
+    }
+
+    @Override
+    public void remove(String orderNo) {
+        if (!this.delete(new EntityWrapper<OrderCheck>().eq("order_no",orderNo))) {
+            throw new CoolException("鍒犻櫎鍗曟嵁澶辫触");
+        }
+        locCheckService.delete(new EntityWrapper<LocCheck>().eq("order_no", orderNo));
+    }
+
+}
+
diff --git a/src/main/java/com/zy/asrs/service/impl/OrderDetlLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OrderDetlLogServiceImpl.java
new file mode 100644
index 0000000..e06809e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/OrderDetlLogServiceImpl.java
@@ -0,0 +1,18 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.entity.OrderDetlLog;
+import com.zy.asrs.mapper.OrderDetlLogMapper;
+import com.zy.asrs.service.OrderDetlLogService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service("OrderDetlLogService")
+public class OrderDetlLogServiceImpl extends ServiceImpl<OrderDetlLogMapper, OrderDetlLog> implements OrderDetlLogService {
+
+    @Override
+    public boolean save(String orderNo) {
+        return this.baseMapper.save(orderNo)>0;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/OrderLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OrderLogServiceImpl.java
new file mode 100644
index 0000000..ac82f09
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/OrderLogServiceImpl.java
@@ -0,0 +1,31 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.core.common.Cools;
+import com.zy.asrs.entity.OrderLog;
+import com.zy.asrs.mapper.OrderLogMapper;
+import com.zy.asrs.service.OrderLogService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Slf4j
+@Service("OrderLogService")
+public class OrderLogServiceImpl extends ServiceImpl<OrderLogMapper, OrderLog> implements OrderLogService {
+
+    @Override
+    public boolean save(String orderNo) {
+        return this.baseMapper.save(orderNo) >0;
+    }
+
+    @Override
+    public OrderLog selectByNo(String orderNo) {
+        List<OrderLog> orderList = this.selectList(new EntityWrapper<OrderLog>().eq("order_no", orderNo));
+        if (Cools.isEmpty(orderList)) {
+            return null;
+        }
+        return orderList.get(0);
+    }
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
index 1e9f89b..2872ba5 100644
--- a/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -202,4 +202,10 @@
         updateSettle(orderId,settle,1L);
     }
 
+    @Override
+    public List<Order> selectToBeHistoryOrder(boolean isERP) {
+        int settle = isERP ? 6 : 4;
+        return this.baseMapper.selectToBeHistoryOrder(settle);
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/task/OrderLogScheduler.java b/src/main/java/com/zy/asrs/task/OrderLogScheduler.java
new file mode 100644
index 0000000..163cf74
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/OrderLogScheduler.java
@@ -0,0 +1,39 @@
+package com.zy.asrs.task;
+
+import com.zy.asrs.entity.Order;
+import com.zy.asrs.service.OrderService;
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.task.handler.OrderLogHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Slf4j
+@Component
+public class OrderLogScheduler {
+    @Autowired
+    private OrderLogHandler orderLogHandler;
+    @Autowired
+    private OrderService orderService;
+
+    @Value("${erp.enable}")
+    private boolean isERP;
+
+    @Scheduled(cron = "0/10 * * * * ? ")
+    private void execute(){
+        List<Order> orders = orderService.selectToBeHistoryOrder(isERP);
+        if (orders.isEmpty()) {
+            return;
+        }
+        for (Order order : orders) {
+            ReturnT<String> result = orderLogHandler.start(order);
+            if (!result.isSuccess()) {
+                log.error("鍗曟嵁妗orderNo={}]鍘嗗彶妗e鐞嗗け璐�", order.getOrderNo());
+            }
+        }
+    }
+}
diff --git a/src/main/java/com/zy/asrs/task/handler/OrderLogHandler.java b/src/main/java/com/zy/asrs/task/handler/OrderLogHandler.java
new file mode 100644
index 0000000..e2c318d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/handler/OrderLogHandler.java
@@ -0,0 +1,59 @@
+package com.zy.asrs.task.handler;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.Order;
+import com.zy.asrs.entity.OrderDetl;
+import com.zy.asrs.service.OrderDetlLogService;
+import com.zy.asrs.service.OrderDetlService;
+import com.zy.asrs.service.OrderLogService;
+import com.zy.asrs.service.OrderService;
+import com.zy.asrs.task.AbstractHandler;
+import com.zy.asrs.task.core.ReturnT;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+@Slf4j
+@Service
+public class OrderLogHandler extends AbstractHandler<String> {
+    @Autowired
+    private OrderService orderService;
+    @Autowired
+    private OrderDetlService orderDetlService;
+    @Autowired
+    private OrderLogService orderLogService;
+    @Autowired
+    private OrderDetlLogService orderDetlLogService;
+
+    @Transactional
+    public ReturnT<String> start(Order order) {
+        try {
+            // 淇濆瓨鍗曟嵁涓绘。鍘嗗彶妗�
+            if (!orderLogService.save(order.getOrderNo())) {
+                exceptionHandle("淇濆瓨鍗曟嵁鍘嗗彶妗orderNo={0}]澶辫触", order.getOrderNo());
+            }
+            // 鍒犻櫎鍗曟嵁涓绘。
+            if (!orderService.deleteById(order)) {
+                exceptionHandle("鍒犻櫎鍗曟嵁涓绘。[orderNo={0}]澶辫触", order.getOrderNo());
+            }
+            // 淇濆瓨鍗曟嵁鏄庣粏妗e巻鍙叉。
+            if (!orderDetlLogService.save(order.getOrderNo())) {
+                exceptionHandle("淇濆瓨鍗曟嵁鏄庣粏鍘嗗彶妗orderNo={0}]澶辫触", order.getOrderNo());
+            }
+            // 鍒犻櫎宸ヤ綔鏄庣粏妗�
+            if (!orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_no", order.getOrderNo()))) {
+                exceptionHandle("鍒犻櫎鍗曟嵁鏄庣粏妗orderNo={0}]澶辫触", order.getOrderNo());
+            }
+
+        } catch (Exception e) {
+            log.error("fail", 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 2c23f94..3c19af8 100644
--- a/src/main/java/com/zy/common/CodeBuilder.java
+++ b/src/main/java/com/zy/common/CodeBuilder.java
@@ -20,7 +20,7 @@
         generator.url="192.168.4.15:1433;databasename=stasrs";
         generator.username="sa";
         generator.password="sa@123";
-        generator.table="bas_loc_owner";
+        generator.table="man_order_log";
         generator.packagePath="com.zy.asrs";
         generator.build();
     }
diff --git a/src/main/java/orderLog.sql b/src/main/java/orderLog.sql
new file mode 100644
index 0000000..1eb94b5
--- /dev/null
+++ b/src/main/java/orderLog.sql
@@ -0,0 +1,18 @@
+-- save orderLog record
+-- mysql
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'orderLog/orderLog.html', 'orderLog绠$悊', null , '2', null , '1');
+
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'orderLog#view', '鏌ヨ', '', '3', '0', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'orderLog#btn-add', '鏂板', '', '3', '1', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'orderLog#btn-edit', '缂栬緫', '', '3', '2', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'orderLog#btn-delete', '鍒犻櫎', '', '3', '3', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'orderLog#btn-export', '瀵煎嚭', '', '3', '4', '1');
+
+-- sqlserver
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderLog/orderLog.html', N'orderLog绠$悊', null, '2', null, '1');
+
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderLog#view', N'鏌ヨ', '', '3', '0', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderLog#btn-add', N'鏂板', '', '3', '1', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderLog#btn-edit', N'缂栬緫', '', '3', '2', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderLog#btn-delete', N'鍒犻櫎', '', '3', '3', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderLog#btn-export', N'瀵煎嚭', '', '3', '4', '1');
diff --git a/src/main/resources/mapper/LocCheckMapper.xml b/src/main/resources/mapper/LocCheckMapper.xml
index 7837e9a..5066d4c 100644
--- a/src/main/resources/mapper/LocCheckMapper.xml
+++ b/src/main/resources/mapper/LocCheckMapper.xml
@@ -8,7 +8,7 @@
         <result column="type" property="type" />
         <result column="loc_no" property="locNo" />
         <result column="matnr" property="matnr" />
-        <result column="origin_anfme" property="originAnfme" />
+        <result column="anfme" property="anfme" />
         <result column="real_anfme" property="realAnfme" />
         <result column="create_by" property="createBy" />
         <result column="create_time" property="createTime" />
@@ -17,5 +17,68 @@
         <result column="memo" property="memo" />
 
     </resultMap>
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap2" type="com.zy.asrs.entity.ManLocDetl">
+        <result column="host_id" property="hostId" />
+        <result column="loc_no" property="locNo" />
+        <result column="node_id" property="nodeId" />
+        <result column="zpallet" property="zpallet" />
+        <result column="anfme" property="anfme" />
+        <result column="matnr" property="matnr" />
+        <result column="maktx" property="maktx" />
+        <result column="name" property="name" />
+        <result column="specs" property="specs" />
+        <result column="model" property="model" />
+        <result column="batch" property="batch" />
+        <result column="unit" property="unit" />
+        <result column="barcode" property="barcode" />
+        <result column="doc_id" property="docId" />
+        <result column="doc_num" property="docNum" />
+        <result column="cust_name" property="custName" />
+        <result column="item_num" property="itemNum" />
+        <result column="count" property="count" />
+        <result column="price" property="price" />
+        <result column="weight" property="weight" />
+        <result column="status" property="status" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="modi_time" property="modiTime" />
+        <result column="memo" property="memo" />
+        <result column="uuid" property="uuid" />
 
+
+    </resultMap>
+
+
+    <select id="getAutoLocDetl" resultMap="BaseResultMap2">
+        SELECT
+            *
+        FROM
+            man_loc_detl
+        WHERE
+            1 = 1
+        ORDER BY NEWID()
+
+    </select>
+    <select id="getCountLocDetl" resultMap="BaseResultMap2">
+        SELECT TOP ${count}
+            *
+        FROM
+            man_loc_detl
+        WHERE
+            1 = 1
+        ORDER BY NEWID()
+
+    </select>
+    <select id="getMatnrCountLocDetl" resultMap="BaseResultMap2">
+        SELECT TOP ${count}
+            *
+        FROM
+            man_loc_detl
+        WHERE
+            1 = 1
+          and matnr = #{matnr}
+        ORDER BY NEWID()
+    </select>
 </mapper>
diff --git a/src/main/resources/mapper/OrderCheckMapper.xml b/src/main/resources/mapper/OrderCheckMapper.xml
new file mode 100644
index 0000000..4c00411
--- /dev/null
+++ b/src/main/resources/mapper/OrderCheckMapper.xml
@@ -0,0 +1,82 @@
+<?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.OrderCheckMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.Order">
+        <id column="id" property="id" />
+        <result column="uuid" property="uuid" />
+        <result column="order_no" property="orderNo" />
+        <result column="order_time" property="orderTime" />
+        <result column="doc_type" property="docType" />
+        <result column="item_id" property="itemId" />
+        <result column="item_name" property="itemName" />
+        <result column="allot_item_id" property="allotItemId" />
+        <result column="def_number" property="defNumber" />
+        <result column="number" property="number" />
+        <result column="cstmr" property="cstmr" />
+        <result column="cstmr_name" property="cstmrName" />
+        <result column="tel" property="tel" />
+        <result column="oper_memb" property="operMemb" />
+        <result column="total_fee" property="totalFee" />
+        <result column="discount" property="discount" />
+        <result column="discount_fee" property="discountFee" />
+        <result column="other_fee" property="otherFee" />
+        <result column="act_fee" property="actFee" />
+        <result column="pay_type" property="payType" />
+        <result column="salesman" property="salesman" />
+        <result column="account_day" property="accountDay" />
+        <result column="post_fee_type" property="postFeeType" />
+        <result column="post_fee" property="postFee" />
+        <result column="pay_time" property="payTime" />
+        <result column="send_time" property="sendTime" />
+        <result column="ship_name" property="shipName" />
+        <result column="ship_code" property="shipCode" />
+        <result column="settle" property="settle" />
+        <result column="status" property="status" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="memo" property="memo" />
+
+    </resultMap>
+
+    <update id="updateSettle">
+        update man_order
+        set settle = #{settle}
+        ,update_time = getdate()
+        <if test="userId != null">
+            ,update_by = #{userId}
+        </if>
+        where 1=1
+        and id = #{orderId}
+    </update>
+    <update id="updateSettleTo1">
+        UPDATE man_order set settle = 1 WHERE order_no = #{orderNo}
+    </update>
+    <select id="checkDetlWorkQtyLess0" resultType="integer">
+        select count(*) FROM man_order_detl WHERE order_no = #{orderNo} and (work_qty > 0 or qty > 0)
+    </select>
+
+    <select id="selectComplete" resultMap="BaseResultMap">
+        select top 5 *
+        from man_order
+        where 1=1
+        and settle = 4
+        and status = 1
+        order by create_time asc
+    </select>
+    <select id="selectToBeHistoryOrder" resultMap="BaseResultMap">
+        select *
+        from man_order
+        where 1=1
+        and settle = #{settle}
+        order by create_time asc
+    </select>
+
+    <insert id="addToLogTable">
+        INSERT INTO man_order_log SELECT * FROM man_order WHERE id = #{id}
+    </insert>
+
+</mapper>
diff --git a/src/main/resources/mapper/OrderLogMapper.xml b/src/main/resources/mapper/OrderLogMapper.xml
new file mode 100644
index 0000000..18b9859
--- /dev/null
+++ b/src/main/resources/mapper/OrderLogMapper.xml
@@ -0,0 +1,45 @@
+<?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.OrderLogMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.OrderLog">
+        <result column="id" property="id" />
+        <result column="uuid" property="uuid" />
+        <result column="order_no" property="orderNo" />
+        <result column="order_time" property="orderTime" />
+        <result column="doc_type" property="docType" />
+        <result column="item_id" property="itemId" />
+        <result column="item_name" property="itemName" />
+        <result column="allot_item_id" property="allotItemId" />
+        <result column="def_number" property="defNumber" />
+        <result column="number" property="number" />
+        <result column="cstmr" property="cstmr" />
+        <result column="cstmr_name" property="cstmrName" />
+        <result column="tel" property="tel" />
+        <result column="oper_memb" property="operMemb" />
+        <result column="total_fee" property="totalFee" />
+        <result column="discount" property="discount" />
+        <result column="discount_fee" property="discountFee" />
+        <result column="other_fee" property="otherFee" />
+        <result column="act_fee" property="actFee" />
+        <result column="pay_type" property="payType" />
+        <result column="salesman" property="salesman" />
+        <result column="account_day" property="accountDay" />
+        <result column="post_fee_type" property="postFeeType" />
+        <result column="post_fee" property="postFee" />
+        <result column="pay_time" property="payTime" />
+        <result column="send_time" property="sendTime" />
+        <result column="ship_name" property="shipName" />
+        <result column="ship_code" property="shipCode" />
+        <result column="settle" property="settle" />
+        <result column="status" property="status" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="memo" property="memo" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/OrderMapper.xml b/src/main/resources/mapper/OrderMapper.xml
index fe8c4d6..469f28f 100644
--- a/src/main/resources/mapper/OrderMapper.xml
+++ b/src/main/resources/mapper/OrderMapper.xml
@@ -71,6 +71,14 @@
         SELECT * FROM man_order o left join man_doc_type d on o.doc_type = d.doc_id WHERE d.pakin = #{flag} and o.settle in (1,2)
     </select>
 
+    <select id="selectToBeHistoryOrder" resultMap="BaseResultMap">
+        select *
+        from man_order
+        where 1=1
+          and settle = #{settle}
+        order by create_time asc
+    </select>
+
     <insert id="addToLogTable">
         INSERT INTO man_order_log SELECT * FROM man_order WHERE id = #{id}
     </insert>
diff --git a/src/main/webapp/static/js/locCheck/locCheck.js b/src/main/webapp/static/js/locCheck/locCheck.js
index 26a8ec1..523fc6f 100644
--- a/src/main/webapp/static/js/locCheck/locCheck.js
+++ b/src/main/webapp/static/js/locCheck/locCheck.js
@@ -224,7 +224,7 @@
                     $.ajax({
                         url: baseUrl + "/locCheck/create/auth",
                         headers: {'token': localStorage.getItem('token')},
-                        data: {'prec': prec},
+                        data: {prec: prec},
                         method: 'POST',
                         success: function (res) {
                             console.log(res);
diff --git a/src/main/webapp/static/js/orderCheck/orderCheck.js b/src/main/webapp/static/js/orderCheck/orderCheck.js
new file mode 100644
index 0000000..e78f013
--- /dev/null
+++ b/src/main/webapp/static/js/orderCheck/orderCheck.js
@@ -0,0 +1,596 @@
+var insTbCount = 0;
+var printMatCodeNos = [];
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['layer', 'form', 'table', 'util', 'admin', 'xmSelect', 'laydate'], function () {
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var form = layui.form;
+    var table = layui.table;
+    var util = layui.util;
+    var admin = layui.admin;
+    var xmSelect = layui.xmSelect;
+    var layDate = layui.laydate;
+
+    // 娓叉煋鎼滅储妯℃澘
+    $.ajax({
+        url: baseUrl+"/docType/list/auth",
+        headers: {'token': localStorage.getItem('token')},
+        data: {
+            limit: 9999
+        },
+        method: 'POST',
+        success: function (res) {
+            if (res.code === 200){
+                let template = Handlebars.compile($('#docTypeTpl').html());
+                $('#docType-query').html(template(res.data));
+                layui.form.render('select');
+            } else if (res.code === 403){
+                top.location.href = baseUrl+"/";
+            } else {
+                layer.msg(res.msg, {icon: 2})
+            }
+
+        }
+    })
+
+    // 娓叉煋琛ㄦ牸
+    var insTb = table.render({
+        elem: '#order',
+        url: baseUrl+'/orderCheck/head/page/auth',
+        headers: {token: localStorage.getItem('token')},
+        page: true,
+        cellMinWidth: 100,
+        cols: [[
+            {type: 'numbers'},
+            // {field: 'orderNo', title: '鍗曟嵁缂栧彿', templet: '#orderNoTpl'},
+            {field: 'orderNo', title: '鍗曟嵁缂栧彿',  minWidth: 160},
+            {field: 'docType$', align: 'center', title: '绫诲瀷',  minWidth: 160},
+            {align: 'center', title: '鏄庣粏', toolbar: '#tbLook', minWidth: 160},
+            {field: 'createTime$', title: '鍒涘缓鏃堕棿', minWidth: 200},
+            {field: 'settle$', align: 'center', title: '鐘舵��', templet: '#settleTpl',  minWidth: 160},
+            {field: 'memo', align: 'center',title: '澶囨敞', hide: true},
+            {align: 'center', title: '鎿嶄綔', toolbar: '#operate'}
+
+        ]],
+        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) {
+            limit();
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            insTbCount = count;
+        }
+    });
+
+    // 鎼滅储
+    form.on('submit(tbSearch)', function (data) {
+        insTb.reload({where: data.field, page: {curr: 1}});
+    });
+
+    // 娣诲姞
+    $("#orderAddBtn").click(function () {
+        showEditModel();
+    });
+
+    // 宸ュ叿鏉$偣鍑讳簨浠�
+    table.on('tool(order)', function (obj) {
+        var data = obj.data;
+        var layEvent = obj.event;
+        if (layEvent === 'edit') {
+            showEditModel(data);
+        } else if (layEvent === 'del') {
+            doDel(data.orderNo);
+        } else if (layEvent === 'complete') {
+            doModify(data.id, data.orderNo, 4);
+        } else if (layEvent === 'btnPrint') {
+            btnPrint(data.id, data.orderNo, 4);
+        } else if (layEvent === 'manPrint') {
+            addPakOut(data.orderNo);
+        }else if (layEvent === 'examine'){
+            examine(data);
+        }else if (layEvent === 'look') {
+            var $a = $(obj.tr).find('a[lay-event="look"]');
+            var offset = $a.offset();
+            var top = offset.top;
+            var left = offset.left;
+
+            layer.open({
+                type: 1,
+                title: false,
+                area: '900px',
+                offset: [top + 'px', (left - 530 + $a.outerWidth()) + 'px'],
+                shade: .01,
+                shadeClose: true,
+                fixed: false,
+                content: '<table id="lookSSXMTable" lay-filter="lookSSXMTable"></table>',
+                success: function (layero) {
+                    table.render({
+                        elem: '#lookSSXMTable',
+                        headers: {token: localStorage.getItem('token')},
+                        url: baseUrl+'/orderCheck/list/auth',
+                        where: {
+                            order_id: data.id,
+                            order_no: data.orderNo
+                        },
+                        page: true,
+                        cellMinWidth: 100,
+                        cols: [[   //宸ュ叿鏉℃槑缁�
+                            {type: 'numbers'},
+                            {field: 'matnr', title: '鍟嗗搧缂栫爜', width: 160},
+                            {field: 'maktx', title: '鍟嗗搧鍚嶇О', width: 160},
+                            {field: 'locNo', title: '搴撲綅鍙�'},
+                            {field: 'anfme', title: '鏁伴噺'},
+                            {field: 'realAnfme', title: '鐪熷疄鏁伴噺'},
+                            {field: 'diffAnfme', title: '宸紓鏁伴噺', style: 'font-weight: bold'},
+                            {field: 'type$', title: '鐘舵��'},
+                            {align: 'center', title: '鎿嶄綔', toolbar: '#formSSXMTableBar3', minWidth: 80, width: 80, fixed: 'right'}
+                        ]],
+                        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 () {
+                            $(layero).find('.layui-table-view').css('margin', '0');
+                        },
+                        size: ''
+                    });
+
+                }
+
+
+            });
+        }else if (layEvent === 'wrkTrace'){
+            showWrkTrace(data.id);
+        }
+    });
+
+    function showWrkTrace(orderId) {
+        console.log(orderId);
+    }
+
+    // 鏄剧ず琛ㄥ崟寮圭獥
+    function showEditModel(expTpe) {
+        admin.open({
+            type: 1,
+            title: (expTpe ? '淇敼' : '娣诲姞') + '鐩樼偣鍗�',
+            content: $('#editDialog').html(),
+            area: '1300px',
+            success: function (layero, dIndex) {
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                var isExpAdd = !expTpe;
+                // 鍥炴樉鏁版嵁
+                form.val('editForm', expTpe);
+                if (expTpe) {
+                    $('#orderNo').attr("disabled", "disabled");
+                }
+                // 琛ㄥ崟鎻愪氦浜嬩欢
+                form.on('submit(orderEditSubmit)', function (data) {
+                    // 缁勮鏁版嵁
+                    if (xxDataList.length <= 0) {
+                        layer.tips('璇锋坊鍔犲崟鎹槑缁�', '#matAddBtnComment', {tips: [1, '#ff4c4c']});
+                        return false;
+                    }
+                    let nList = admin.util.deepClone(xxDataList);
+                    // for (let xi = 0; xi < nList.length; xi++) {
+                    //     if (nList[xi].anfme <= 0){
+                    //         layer.msg('鏄庣粏淇敼鏁伴噺涓嶅悎娉�', {icon: 2});
+                    //         return false;
+                    //     }
+                    //     if (nList[xi].anfme < nList[xi].workQty){
+                    //         layer.msg('鏁伴噺涓嶈兘灏忎簬宸蹭綔涓氭暟閲�', {icon: 2});
+                    //         return false;
+                    //     }
+                    // }
+                    layer.load(2);
+                    console.log(data);
+                    $.ajax({
+                        url: baseUrl+"/orderCheck/form/" + (isExpAdd?"add":"modify") + "/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify({
+                            orderId: Number(data.field.id),
+                            docType: Number(data.field.docType),
+                            orderNo: data.field.orderNo,
+                            orderDetlList: nList
+                        }),
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll('loading');
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                $(".layui-laypage-btn")[0].click();
+                                layer.msg(res.msg, {icon: 1});
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                // 鏄庣粏琛ㄦ牸
+                var xxDataList = [];
+                var tbOptions = {
+                    elem: '#formSSXMTable',
+                    headers: {token: localStorage.getItem('token')},
+                    data: xxDataList,
+                    page: true,
+                    height: '350px;',
+                    cellMinWidth: 100,
+                    cols: [[
+                        {type: 'numbers'},
+                        {field: 'matnr', title: '鍟嗗搧缂栫爜', width: 160},
+                        {field: 'maktx', title: '鍟嗗搧鍚嶇О', width: 160},
+                        {field: 'locNo', title: '搴撲綅鍙�'},
+                        {field: 'anfme', title: '搴撳瓨鏁伴噺'},
+                        {field: 'realAnfme', title: '鐪熷疄鏁伴噺'},
+                        {field: 'diffAnfme', title: '宸紓鏁伴噺', style: 'font-weight: bold'},
+                        {field: 'type$', title: '鐘舵��'},
+                        {align: 'center', title: '鎿嶄綔', toolbar: '#formSSXMTableBarr', minWidth: 80, width: 80, fixed: 'right'}
+                    ]],
+                    done: function (res) {
+                        $(layero).find('.layui-table-view').css('margin', '0');
+                    },
+                    size: ''
+                };
+
+
+                if (!isExpAdd) {
+
+                    $.ajax({
+                        url: baseUrl+"/orderCheck/detl/all/auth?orderNo=" + expTpe.orderNo,
+                        headers: {'token': localStorage.getItem('token')},
+                        method: 'GET',
+                        async: false,
+                        success: function (res) {
+                            if (res.code === 200){
+                                console.log(res.data);
+                                xxDataList = res.data;
+                                tbOptions.data = xxDataList;
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    })
+                }
+                var insTbSSXM = table.render(tbOptions);
+
+                // 宸ュ叿鏉$偣鍑讳簨浠�
+                table.on('tool(formSSXMTable)', function (obj) {
+                    var data = obj.data;
+                    var layEvent = obj.event;
+                    if (layEvent === 'edit') {
+                        showEditModel2(data);
+                    } else if (layEvent === 'del') {
+                        if(data.workQty > 0){
+                            layer.msg("宸插瓨鍦ㄤ綔涓氭暟閲忥紝涓嶈兘鍒犻櫎", {icon: 2});
+                            return;
+                        }
+                        layer.confirm('纭畾瑕佸垹闄ゅ悧锛�', {
+                            shade: .1,
+                            skin: 'layui-layer-admin'
+                        }, function (i) {
+                            layer.close(i);
+                            for (var j = 0; j < xxDataList.length; j++) {
+                                if (xxDataList[j].matnr === data.matnr && xxDataList[j].batch === data.batch) {
+                                    xxDataList.splice(j, 1);
+                                    break;
+                                }
+                            }
+                            insTbSSXM.reload({data: xxDataList, page: {curr: 1}});
+                        });
+                    }
+                });
+                // 鏄庣粏鏁版嵁淇敼
+                table.on('edit(formSSXMTable)', function (obj) {
+                    let index = obj.tr.attr("data-index");
+                    let data = xxDataList[index];
+                    if (obj.field === 'anfme'){
+                        let vle = Number(obj.value);
+                        if (isNaN(vle)) {
+                            layer.msg("璇疯緭鍏ユ暟瀛�", {icon: 2});
+                            return false;
+                        } else {
+                            if (vle <= 0) {
+                                layer.msg("鏁伴噺蹇呴』澶т簬闆�", {icon: 2});
+                                // data[obj.field] = 0;
+                                // insTbSSXM.reload({data: xxDataList});
+                                return false;
+                            }
+                            if(obj.value < data.workQty){
+                                layer.msg("杈撳叆鏁伴噺涓嶈兘灏忎簬浣滀笟涓暟閲�", {icon: 2});
+                                // data[obj.field] = 0;
+                                // insTbSSXM.reload({data: xxDataList});
+                                return false;
+                            }
+                        }
+                    }
+                    data[obj.field] = obj.value;
+                    insTbSSXM.reload({data: xxDataList});
+                });
+
+                $('#matAddBtnComment').click(function () {
+                    showEditModel2();
+                });
+
+                // 鏄剧ず娣诲姞鏄庣粏琛ㄥ崟寮圭獥
+                function showEditModel2(exp) {
+                    var checkType = $("#checkType option:selected").val();
+                    var tp = '';
+                    if (checkType == 'loc'){
+                        tp = 2;
+                    }
+                    if (checkType == 'matnr'){
+                        tp = 3;
+                    }
+                    admin.open({
+                        type: 1,
+                        offset: '150px',
+                        area: '680px',
+                        title: (exp ? '淇敼' : '娣诲姞') + '鏄庣粏',
+                        content: $('#matEditDialog'+tp).html(),
+                        success: function (layero, dIndex) {
+                            // 鍥炴樉鏁版嵁
+                            form.val('matEditForm', exp);
+                            // 琛ㄥ崟鎻愪氦浜嬩欢
+                            form.on('submit(matEditSubmit)', function (data) {
+                                var prec = $("#selectPerc option:selected").val();
+                                var selectList;
+                                if (tp == 3){
+                                    prec = $("#selectPerc3 option:selected").val();
+                                    selectList = matXmSelect.getValue();
+                                    console.log(selectList);
+                                    for (let i = 0; i<selectList.length; i++) {
+                                        selectList[i].children="";
+                                    }
+                                }
+                                var json = {
+                                    prec:prec,
+                                    data:{
+                                    }
+                                }
+
+                                json.data = selectList;
+                                console.log(json);
+                                $.ajax({
+                                    url: baseUrl+"/orderCheck/create/auth",
+                                    headers: {'token': localStorage.getItem('token')},
+                                    contentType:'application/json;charset=UTF-8',
+                                    data: JSON.stringify(json),
+                                    method: 'POST',
+                                    async: false,
+                                    success: function (res) {
+                                        if (res.code === 200){
+                                            for (var i =0;i<res.data.length;i++){
+                                                xxDataList.push(res.data[i]);
+                                                console.log(xxDataList);
+                                                insTbSSXM.reload({data: xxDataList, page: {curr: 1}});
+                                            }
+
+                                        } else if (res.code === 403){
+                                            top.location.href = baseUrl+"/";
+                                        }else {
+                                            layer.msg(res.msg, {icon: 2})
+                                        }
+                                    }
+                                })
+                                layer.close(dIndex);
+                                return false;
+                            });
+                            // 娓叉煋鐗╂枡閫夋嫨
+                            var matXmSelect = xmSelect.render({
+                                el: '#mat3',
+                                style: {
+                                    width: '340px',
+                                },
+                                autoRow: true,
+                                toolbar: { show: true },
+                                filterable: true,
+                                remoteSearch: true,
+                                remoteMethod: function(val, cb, show){
+                                    $.ajax({
+                                        url: baseUrl+"/mat/all/get/kv",
+                                        headers: {'token': localStorage.getItem('token')},
+                                        data: {
+                                            condition: val
+                                        },
+                                        method: 'POST',
+                                        success: function (res) {
+                                            if (res.code === 200){
+                                                cb(res.data)
+                                            } else {
+                                                cb([]);
+                                                layer.msg(res.msg, {icon: 2});
+                                            }
+                                        }
+                                    });
+                                }
+                            })
+                            // 寮圭獥涓嶅嚭鐜版粴鍔ㄦ潯
+                            $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                            layui.form.render('select');
+                        }
+                    });
+                }
+
+            }
+        });
+    }
+
+    // 鍒犻櫎鍗曟嵁
+    function doDel(orderNo) {
+        layer.confirm('纭畾瑕佸垹闄ゅ悧锛�', {
+            shade: .1,
+            skin: 'layui-layer-admin'
+        }, function (i) {
+            layer.close(i);
+            layer.load(2);
+            $.ajax({
+                url: baseUrl+"/orderCheck/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {
+                    orderNo: orderNo
+                },
+                method: 'POST',
+                success: function (res) {
+                    layer.closeAll('loading');
+                    if (res.code === 200){
+                        if (insTbCount === 0) {
+                            insTb.reload({page: {curr: 1}});
+                        } else {
+                            $(".layui-laypage-btn")[0].click();
+                        }
+                        layer.msg(res.msg, {icon: 1});
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    }else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 淇敼璁㈠崟鐘舵��
+    function doModify(orderId, orderNo, settle) {
+        layer.confirm('纭畾瑕佹墜鍔ㄥ畬缁撳悧锛�', {
+            shade: .1,
+            skin: 'layui-layer-admin'
+        }, function (i) {
+            layer.close(i);
+            layer.load(2);
+            console.log(orderId);
+            console.log(settle);
+            $.ajax({
+                url: baseUrl+"/order/update/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {
+                    id: orderId,
+                    orderNo: orderNo,
+                    settle: settle
+                },
+                method: 'POST',
+                success: function (res) {
+                    layer.closeAll('loading');
+                    if (res.code === 200){
+                        if (insTbCount === 0) {
+                            insTb.reload({page: {curr: 1}});
+                        } else {
+                            $(".layui-laypage-btn")[0].click();
+                        }
+                        layer.msg(res.msg, {icon: 1});
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    }else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    layDate.render({
+        elem: '.layui-laydate-range'
+        ,type: 'datetime'
+        ,range: true
+    });
+    // 鐢熸垚鎷h揣鍗�
+    function addPakOut(expTpe) {
+        $.ajax({
+            url: baseUrl+"/ManPakOut/add/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: JSON.stringify({
+                docType: Number(20),
+                orderNo: expTpe,
+            }),
+            contentType:'application/json;charset=UTF-8',
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    layer.msg("鐢熸垚鎷h揣鍗曪細ok");
+                } else if (res.code === 403){
+                    layer.msg("鐢熸垚鎷h揣鍗曞け璐ワ細403");
+                }else {
+                    layer.msg("鐢熸垚鎷h揣鍗曞け璐ワ細鏈煡寮傚父");
+                }
+
+            }
+        })
+    }
+    // 鎵撳嵃
+    function btnPrint(orderId, orderNo, settle) {
+        console.log(orderId);
+        console.log(orderNo);
+        console.log(settle);
+        printMatCodeNos.push(orderNo)
+        var templateNo = 3;
+        $.ajax({
+            url: baseUrl+"/orderCheck/print/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: {param: printMatCodeNos},
+            method: 'POST',
+            async: false,
+            success: function (res) {
+                if (res.code === 200){
+                    layer.closeAll();
+                    console.log(res);
+                    for (let i=0;i<res.data.length;i++){
+                        var templateDom = $("#templatePreview"+templateNo);
+                        var className = templateDom.attr("class");
+                        if (className === 'template-barcode') {
+                            res.data[i]["barcodeUrl"]=baseUrl+"/orderCheck/code/auth?type=1&param="+res.data[i].orderNo+
+                                ";"+res.data[i].matnr+";"+res.data[i].batch;
+                        } else {
+                            res.data[i]["barcodeUrl"]=baseUrl+"/orderCheck/code/auth?type=2&param="+res.data[i].orderNo+
+                                ";"+res.data[i].matnr+";"+res.data[i].batch;
+                        }
+                    }
+                    var tpl = templateDom.html();
+                    var template = Handlebars.compile(tpl);
+                    var html = template(res);
+                    var box = $("#box");
+                    box.html(html);box.show();
+                    box.print({mediaPrint:true});
+                    box.hide();
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+            }
+        })
+    }
+
+
+
+
+});
diff --git a/src/main/webapp/static/js/orderDetl/outLog.js b/src/main/webapp/static/js/orderDetl/outLog.js
new file mode 100644
index 0000000..4b82aaa
--- /dev/null
+++ b/src/main/webapp/static/js/orderDetl/outLog.js
@@ -0,0 +1,416 @@
+var pageCurr;
+var insTb2;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).extend({
+    notice: 'notice/notice',
+}).use(['table','laydate', 'form', 'util', 'admin', 'notice', 'treeTable', 'xmSelect', 'tableMerge', 'tableX' , 'laytpl'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+    var util = layui.util;
+    var notice = layui.notice;
+    var treeTable = layui.treeTable;
+    var xmSelect = layui.xmSelect;
+    var tableMerge = layui.tableMerge;
+    var tableX = layui.tableX;
+    var laytpl = layui.laytpl;
+
+    insTb2 = table.render({
+        elem: '#orderDetlTable',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/orderDetl/pakout/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#orderDetToolbar',
+        height: 'full-120',
+        where: {order_id: 9999999999},
+        cols: [[
+            {type: 'checkbox'}
+            ,{type: 'numbers', title: '#'}
+            ,{field: 'orderNo', align: 'center',title: '鍗曟嵁缂栧彿', templet: '#orderNoTpl', width: 160}
+            ,{field: 'matnr', align: 'center',title: '鍟嗗搧缂栫爜', width: 160}
+            ,{field: 'maktx', align: 'center',title: '鍟嗗搧鍚嶇О', width: 200}
+            ,{field: 'batch', align: 'center',title: '搴忓垪鐮�'}
+            ,{field: 'specs', align: 'center',title: '瑙勬牸'}
+            ,{field: 'anfme', align: 'center',title: '鎬绘暟閲�', style: 'font-weight: bold'}
+            ,{field: 'workQty', align: 'center',title: '浣滀笟鏁伴噺', style: 'font-weight: bold'}
+            ,{field: 'qty', align: 'center',title: '瀹屾垚鏁伴噺'}
+            // ,{field: 'name', align: 'center',title: '鍚嶇О'}
+            // ,{field: 'model', align: 'center',title: '鍨嬪彿'}
+            ,{field: 'unit', align: 'center',title: '鍗曚綅', hide: true}
+            ,{field: 'barcode', align: 'center',title: '鍟嗗搧鏉$爜', hide: true}
+            // ,{field: 'supplier', align: 'center',title: '渚涘簲鍟�'}
+            // ,{field: 'unitPrice', align: 'center',title: '鍗曚环'}
+            // ,{field: 'itemNum', align: 'center',title: '鍝侀」鏁�'}
+            // ,{field: 'count', align: 'center',title: '鏁伴噺'}
+            // ,{field: 'weight', align: 'center',title: '閲嶉噺'}
+            // ,{field: 'status$', align: 'center',title: '鐘舵��'}
+            // ,{field: 'createBy$', align: 'center',title: '娣诲姞浜哄憳'}
+            // ,{field: 'createTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+            // ,{field: 'updateBy$', align: 'center',title: '淇敼浜哄憳'}
+            // ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿'}
+            // ,{field: 'memo', align: 'center',title: '澶囨敞'}
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width: 160}
+        ]],
+        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();
+        }
+    });
+
+    /* 琛ㄦ牸2鎼滅储 */
+    form.on('submit(sensorTbSearch)', function (data) {
+        insTb2.reload({where: data.field, page: {curr: 1}});
+        return false;
+    });
+
+    /* 琛ㄦ牸2澶村伐鍏锋爮鐐瑰嚮浜嬩欢 */
+    table.on('toolbar(orderDetlTable)', function (obj) {
+
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        if (obj.event === 'pakoutPreview') { // 娣诲姞
+            if (checkStatus.length === 0) {
+                layer.msg('璇烽�夋嫨鑷冲皯涓�鏉″嚭搴撴槑缁�', {icon: 2});
+                return;
+            }
+            pakoutPreview(checkStatus.map(function (d) {
+                return d.id;
+            }));
+        } else if (obj.event === 'del') { // 鍒犻櫎
+            var checkRows = table.checkStatus('sensorTable');
+            if (checkRows.data.length === 0) {
+                layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                return;
+            }
+            var ids = checkRows.data.map(function (d) {
+                return d.id;
+            });
+            doDelSensor({ids: ids});
+        }
+    });
+
+    /* 琛ㄦ牸2宸ュ叿鏉$偣鍑讳簨浠� */
+    table.on('tool(orderDetlTable)', function (obj) {
+        console.log(obj);
+        var data = obj.data;
+        switch (obj.event) {
+            // 鍑哄簱
+            case 'pakoutPreview':
+                pakoutPreview([data.id])
+                break;
+        }
+    });
+
+    function pakoutPreview(ids) {
+        let loadIndex = layer.load(2);
+        $.ajax({
+            url: baseUrl + "/out/pakout/preview/auth",
+            headers: {'token': localStorage.getItem('token')},
+            contentType: 'application/json;charset=UTF-8',
+            data: JSON.stringify(ids),
+            method: 'POST',
+            success: function (res) {
+                layer.close(loadIndex);
+                var tableCache;
+                if (res.code === 200){
+                    layer.open({
+                        type: 1
+                        ,title: false
+                        ,closeBtn: false
+                        ,offset: '50px'
+                        ,area: ['1200px', '700px']
+                        ,shade: 0.5
+                        ,shadeClose: false
+                        ,btn: ['绔嬪嵆鍑哄簱&鐢熸垚鎷h揣鍗�', '绋嶅悗澶勭悊']
+                        ,btnAlign: 'c'
+                        ,moveType: 1 //鎷栨嫿妯″紡锛�0鎴栬��1
+                        ,content: $('#pakoutPreviewBox').html()
+                        ,success: function(layero, index){
+                            console.log(res.data);
+                            stoPreTabIdx = table.render({
+                                elem: '#stoPreTab',
+                                data: res.data,
+                                height: 520,
+                                page: false,
+                                limit: Number.MAX_VALUE,
+                                cellMinWidth: 100,
+                                cols: [[
+                                    // {type: 'checkbox', merge: ['orderNo']},
+                                    {field: 'orderNo', title: '鍗曟嵁缂栧彿', merge: true, align: 'center'},
+                                    {field: 'title', title: '鍟嗗搧', merge: true, align: 'center', width: 350},
+                                    {field: 'batch', title: '搴忓垪鐮�', align: 'center'},
+                                    {field: 'manu', title: '浠撳簱', align: 'center'},
+                                    // { title: '鍓╀綑闇�姹傞噺', align: 'center' , width: 120, toolbar: '#checkNeedQty'},
+                                    // {field: 'anfme', title: '瀹為檯鏁伴噺', align: 'center', width: 90, style: 'font-weight: bold'},
+                                    { title: '鍑哄簱鏁伴噺', align: 'center',field: 'anfme', width: 90, style: 'font-weight: bold; color: red'},
+                                    {field: 'locNo', title: '璐т綅', align: 'center', width: 100, templet: '#locNoTpl'},
+                                    {field: 'staNos', align: 'center', title: '鍑哄簱绔�', merge: ['locNo'], templet: '#tbBasicTbStaNos'},
+                                    // {type: 'checkbox', merge: ['locNo']},
+                                ]],
+                                done: function (res) {
+                                    tableMerge.render(this);
+                                    $('.layui-table-body.layui-table-main').css("overflow", "auto");
+                                    tableCache = tableData = table.cache.stoPreTab;
+                                }
+                            });
+                            // 淇敼鍑哄簱绔�
+                            form.on('select(tbBasicTbStaNos)', function (obj) {
+                                let index  = obj.othis.parents('tr').attr("data-index");
+                                let data = tableCache[index];
+                                for (let i = 0; i<tableCache.length; i++) {
+                                    if (tableCache[i].locNo === data.locNo) {
+                                        tableCache[i]['staNo'] = Number(obj.elem.value);
+                                    }
+                                }
+                                obj.othis.children().find("input").css("color", "blue");
+                                return false;
+                            });
+                            // // 鎵归噺淇敼鍑哄簱绔�
+                            // form.on('submit(batchModifySta)', function () {
+                            //     let stoPreTabData = layui.table.checkStatus('stoPreTab').data;
+                            //     if (stoPreTabData.length < 1) {
+                            //         layer.msg("璇疯嚦灏戦�夋嫨涓�鏉′互涓婂悎骞舵暟鎹�", {icon: 7});
+                            //         return false;
+                            //     }
+                            //     modifySta(stoPreTabData);
+                            // });
+                            // // 鎵归噺淇敼鍑哄簱绔� - 绔欑偣閫夋嫨
+                            // function modifySta(stoPreTabData) {
+                            //     // 鍑哄簱绔欏彇浜ら泦
+                            //     let staBatchSelectVal = [];
+                            //     for(let i = 0; i<stoPreTabData.length; i++) {
+                            //         let staNos = stoPreTabData[i].staNos;
+                            //         if (staNos !== null) {
+                            //             if (staBatchSelectVal.length === 0) {
+                            //                 staBatchSelectVal = staNos;
+                            //             } else {
+                            //                 staBatchSelectVal = staBatchSelectVal.filter(val =>
+                            //                     {
+                            //                         return new Set(staNos).has(val)
+                            //                     }
+                            //                 )
+                            //             }
+                            //         }
+                            //     }
+                            //     if (staBatchSelectVal.length === 0) {
+                            //         layer.msg("鍑哄簱绔欐病鏈変氦闆嗭紝鏃犳硶鎵归噺淇敼", {icon: 2});
+                            //         return;
+                            //     }
+                            //     admin.open({
+                            //         type: 1,
+                            //         area: '300px',
+                            //         offset: 'auto',
+                            //         title: '璇烽�夋嫨绔欑偣',
+                            //         content: $('#staBatchSelectDialog').html(),
+                            //         success: function (layero, ddIndex) {
+                            //             // 娓叉煋涓嬫媺妗�
+                            //             let template = Handlebars.compile($('#batchStaSelectTpl').html());
+                            //             $('#batchSelectStaBox').html(template({list: staBatchSelectVal}));
+                            //             // 纭
+                            //             form.on('submit(staBatchSelectConfirm)', function (obj) {
+                            //                 let loadIdx = layer.load(2);
+                            //                 let batchSta = Number(obj.field.batchSta);
+                            //                 let arr = [];
+                            //                 for (let j = 0; j<stoPreTabData.length; j++) {
+                            //                     for (let i = 0; i<tableCache.length; i++) {
+                            //                         if (tableCache[i].orderNo === stoPreTabData[j].orderNo
+                            //                             && tableCache[i].matnr === stoPreTabData[j].matnr
+                            //                             && tableCache[i].locNo === stoPreTabData[j].locNo) {
+                            //                             tableCache[i]['staNo'] = batchSta;
+                            //                             arr.push(i);
+                            //                         }
+                            //                     }
+                            //                 }
+                            //                 stoPreTabIdx.reload({data: tableCache});
+                            //                 arr.forEach(item => {
+                            //                     $('div[lay-id=stoPreTab] tr[data-index="' + item + '"] .order-sta-select').val(batchSta);
+                            //                 });
+                            //                 layui.form.render('select');
+                            //                 arr.forEach(item => {
+                            //                     $('div[lay-id=stoPreTab] tr[data-index="' + item + '"] .layui-select-title').find("input").css("color", "blue");
+                            //                 });
+                            //                 layer.close(loadIdx); layer.close(ddIndex);
+                            //                 return false;
+                            //             });
+                            //             // 寮圭獥涓嶅嚭鐜版粴鍔ㄦ潯
+                            //             $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                            //             layui.form.render('select');
+                            //         },
+                            //     })
+                            // }
+
+                        }
+                        ,yes: function(index, layero){
+                            //鎸夐挳銆愮珛鍗冲嚭搴�&鐢熸垚鎷h揣鍗曘�戠殑鍥炶皟
+                            pakout(tableCache, index);
+                            //鎸夐挳銆愮敓鎴愭嫞璐у崟銆戠殑鍥炶皟
+                            pakout2(tableCache, index);
+                        }
+                        ,btn2: function(index, layero){
+                            //鎸夐挳銆愮◢鍚庡鐞嗐�戠殑鍥炶皟
+                            layer.close(index)
+                            //return false 寮�鍚浠g爜鍙姝㈢偣鍑昏鎸夐挳鍏抽棴
+                        }
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                } else {
+                    layer.msg(res.msg, {icon: 2})
+                }
+            }
+        })
+    }
+
+    function pakout(tableCache, layerIndex) {
+        // let loadIndex = layer.load(2);
+        notice.msg('姝e湪鐢熸垚鍑哄簱浠诲姟......', {icon: 4});
+        $.ajax({
+            url: baseUrl + "/out/pakout/auth",
+            headers: {'token': localStorage.getItem('token')},
+            contentType: 'application/json;charset=UTF-8',
+            data: JSON.stringify(tableCache),
+            method: 'POST',
+            success: function (res) {
+                notice.destroy();
+                if (res.code === 200) {
+                    layer.close(layerIndex);
+                    layer.msg(res.msg, {icon: 1});
+                    insTb.reload({where: null});
+                    insTb2.reload({where: null, page: {curr: 1}});
+                } else if (res.code === 403) {
+                    top.location.href = baseUrl + "/";
+                } else {
+                    layer.msg(res.msg, {icon: 2})
+                }
+            }
+        });
+    }
+
+    function pakout2(tableCache, layerIndex) {
+        // let loadIndex = layer.load(2);
+        notice.msg('姝e湪鐢熸垚鎷h揣鍗�......', {icon: 4});
+        $.ajax({
+            url: baseUrl + "/out/pakout2/auth",
+            headers: {'token': localStorage.getItem('token')},
+            contentType: 'application/json;charset=UTF-8',
+            data: JSON.stringify(tableCache),
+            method: 'POST',
+            success: function (res) {
+                notice.destroy();
+                if (res.code === 200) {
+                    layer.close(layerIndex);
+                    layer.msg(res.msg, {icon: 1});
+                    insTb.reload({where: null});
+                    insTb2.reload({where: null, page: {curr: 1}});
+                } else if (res.code === 403) {
+                    top.location.href = baseUrl + "/";
+                } else {
+                    layer.msg(res.msg, {icon: 2})
+                }
+            }
+        });
+    }
+
+
+
+    /* 鍒犻櫎璁㈠崟 */
+    function doDelSensor(obj) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/sensor/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: obj.ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        $(".layui-laypage-btn")[0].click();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    }else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+
+        });
+    }
+
+    // 淇敼鐘舵��
+    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+"/sensor/edit/auth", {id: data.id, status: data[this.name]}, function (res) {
+            layer.msg(res.msg, {icon: 1});
+        })
+    })
+
+    window.pakoutPreview = pakoutPreview;
+
+});
+
+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
+        }
+    });
+}
+
+/**
+ * 涓�閿嚭搴�
+ */
+function autoOut(orderId) {
+    let loadIndex = layer.msg('璇锋眰涓�...', {icon: 16, shade: 0.01, time: false});
+    $.ajax({
+        url: baseUrl + "/out/pakout/orderDetlIds/auth",
+        headers: {'token': localStorage.getItem('token')},
+        data: { orderId : orderId },
+        method: 'POST',
+        success: function (res) {
+            layer.close(loadIndex);
+            if (res.code === 200){
+                pakoutPreview(res.data);
+            } else if (res.code === 403){
+                top.location.href = baseUrl+"/";
+            } else {
+                layer.msg(res.msg, {icon: 2});
+            }
+        }
+    })
+}
diff --git a/src/main/webapp/static/js/orderLog/orderLog.js b/src/main/webapp/static/js/orderLog/orderLog.js
new file mode 100644
index 0000000..42cb8ad
--- /dev/null
+++ b/src/main/webapp/static/js/orderLog/orderLog.js
@@ -0,0 +1,550 @@
+var insTbCount = 0;
+var printMatCodeNos = [];
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['layer', 'form', 'table', 'util', 'admin', 'xmSelect', 'laydate'], function () {
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var form = layui.form;
+    var table = layui.table;
+    var util = layui.util;
+    var admin = layui.admin;
+    var xmSelect = layui.xmSelect;
+    var layDate = layui.laydate;
+
+    // 娓叉煋鎼滅储妯℃澘
+    $.ajax({
+        url: baseUrl+"/docType/list/auth",
+        headers: {'token': localStorage.getItem('token')},
+        data: {
+            limit: 9999
+        },
+        method: 'POST',
+        success: function (res) {
+            if (res.code === 200){
+                let template = Handlebars.compile($('#docTypeTpl').html());
+                $('#docType-query').html(template(res.data));
+                layui.form.render('select');
+            } else if (res.code === 403){
+                top.location.href = baseUrl+"/";
+            } else {
+                layer.msg(res.msg, {icon: 2})
+            }
+        }
+    })
+
+    // 娓叉煋琛ㄦ牸
+    var insTb = table.render({
+        elem: '#order',
+        url: baseUrl+'/orderLog/head/page/auth',
+        headers: {token: localStorage.getItem('token')},
+        page: true,
+        cellMinWidth: 100,
+        cols: [[
+            {type: 'numbers'},
+            // {field: 'orderNo', title: '鍗曟嵁缂栧彿', templet: '#orderNoTpl'},
+            {field: 'orderNo', title: '鍗曟嵁缂栧彿',  minWidth: 160},
+            {field: 'docType$', align: 'center', title: '绫诲瀷',  minWidth: 160},
+            {align: 'center', title: '鏄庣粏', toolbar: '#tbLook', minWidth: 160},
+            {field: 'createTime$', title: '鍒涘缓鏃堕棿', minWidth: 200},
+            {field: 'settle$', align: 'center', title: '鐘舵��', templet: '#settleTpl',  minWidth: 160},
+            {field: 'memo', 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) {
+            limit();
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            insTbCount = count;
+        }
+    });
+
+    // 鎼滅储
+    form.on('submit(tbSearch)', function (data) {
+        insTb.reload({where: data.field, page: {curr: 1}});
+    });
+
+    // 娣诲姞
+    $("#orderAddBtn").click(function () {
+        showEditModel();
+    });
+
+    // 宸ュ叿鏉$偣鍑讳簨浠�
+    table.on('tool(order)', function (obj) {
+        var data = obj.data;
+        var layEvent = obj.event;
+        if (layEvent === 'edit') {
+            showEditModel(data);
+        } else if (layEvent === 'del') {
+            doDel(data.id);
+        } else if (layEvent === 'complete') {
+            doModify(data.id, data.orderNo, 4);
+        } else if (layEvent === 'btnPrint') {
+            btnPrint(data.id, data.orderNo, 4);
+        } else if (layEvent === 'manPrint') {
+            addPakOut(data.orderNo);
+        } else if (layEvent === 'look') {
+            var $a = $(obj.tr).find('a[lay-event="look"]');
+            var offset = $a.offset();
+            var top = offset.top;
+            var left = offset.left;
+            layer.open({
+                type: 1,
+                title: false,
+                area: '900px',
+                offset: [top + 'px', (left - 530 + $a.outerWidth()) + 'px'],
+                shade: .01,
+                shadeClose: true,
+                fixed: false,
+                content: '<table id="lookSSXMTable" lay-filter="lookSSXMTable"></table>',
+                success: function (layero) {
+                    table.render({
+                        elem: '#lookSSXMTable',
+                        headers: {token: localStorage.getItem('token')},
+                        url: baseUrl+'/orderDetlLog/list/auth',
+                        where: {
+                            order_id: data.id
+                        },
+                        page: true,
+                        cellMinWidth: 100,
+                        cols: [[
+                            {type: 'numbers'},
+                            {field: 'matnr', title: '鍟嗗搧缂栫爜', width: 160},
+                            {field: 'maktx', title: '鍟嗗搧鍚嶇О', width: 160},
+                            {field: 'anfme', title: '鏁伴噺'},
+                            {field: 'workQty', title: '浣滀笟鏁伴噺'},
+                            {field: 'qty', title: '瀹屾垚鏁伴噺', style: 'font-weight: bold'},
+                            {field: 'owner$', title: '瑙勬牸'},
+                            {field: 'payment$', title: '瑙勬牸'}
+                        ]],
+                        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 () {
+                            $(layero).find('.layui-table-view').css('margin', '0');
+                        },
+                        size: ''
+                    });
+                }
+            });
+        }else if (layEvent === 'wrkTrace'){
+            showWrkTrace(data.id);
+        }
+    });
+
+    function showWrkTrace(orderId) {
+        console.log(orderId);
+    }
+
+    // 鏄剧ず琛ㄥ崟寮圭獥
+    function showEditModel(expTpe) {
+        admin.open({
+            type: 1,
+            title: (expTpe ? '淇敼' : '娣诲姞') + '鍗曟嵁',
+            content: $('#editDialog').html(),
+            area: '1300px',
+            success: function (layero, dIndex) {
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                var isExpAdd = !expTpe;
+                // 鍥炴樉鏁版嵁
+                form.val('editForm', expTpe);
+                if (expTpe) {
+                    $('#orderNo').attr("disabled", "disabled");
+                }
+                // 琛ㄥ崟鎻愪氦浜嬩欢
+                form.on('submit(orderEditSubmit)', function (data) {
+                    // 缁勮鏁版嵁
+                    if (xxDataList.length <= 0) {
+                        layer.tips('璇锋坊鍔犲崟鎹槑缁�', '#matAddBtnComment', {tips: [1, '#ff4c4c']});
+                        return false;
+                    }
+                    let nList = admin.util.deepClone(xxDataList);
+                    for (let xi = 0; xi < nList.length; xi++) {
+                        if (nList[xi].anfme <= 0){
+                            layer.msg('鏄庣粏淇敼鏁伴噺涓嶅悎娉�', {icon: 2});
+                            return false;
+                        }
+                        if (nList[xi].anfme < nList[xi].workQty){
+                            layer.msg('鏁伴噺涓嶈兘灏忎簬宸蹭綔涓氭暟閲�', {icon: 2});
+                            return false;
+                        }
+                    }
+                    layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/order/form/" + (isExpAdd?"add":"modify") + "/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify({
+                            orderId: Number(data.field.id),
+                            docType: Number(data.field.docType),
+                            orderNo: data.field.orderNo,
+                            orderDetlList: nList
+                        }),
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll('loading');
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                $(".layui-laypage-btn")[0].click();
+                                layer.msg(res.msg, {icon: 1});
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                // 鏄庣粏琛ㄦ牸
+                var xxDataList = [];
+                var tbOptions = {
+                    elem: '#formSSXMTable',
+                    headers: {token: localStorage.getItem('token')},
+                    data: xxDataList,
+                    page: true,
+                    height: '350px;',
+                    cellMinWidth: 100,
+                    cols: [[
+                        {type: 'numbers', title: '#'},
+                        {field: 'matnr', title: '鍟嗗搧缂栫爜', width: 160},
+                        {field: 'maktx', title: '鍟嗗搧鍚嶇О', width: 200},
+                        {field: 'batch', title: '鎵瑰彿', edit: true},
+                        {field: 'specs', title: '瑙勬牸'},
+                        {field: 'anfme', title: '鏁伴噺(淇敼)', style: 'color: blue;font-weight: bold', edit: true, minWidth: 110, width: 110},
+                        // {field: 'workQty', title: '浣滀笟鏁伴噺',  minWidth: 100, width: 100},
+                        // {field: 'unit', title: '鍗曚綅', width: 80},
+                        {field: 'memo', title: '澶囨敞' , edit: true},
+                        {align: 'center', title: '鎿嶄綔', toolbar: '#formSSXMTableBar', minWidth: 80, width: 80, fixed: 'right'}
+                    ]],
+                    done: function (res) {
+                        $(layero).find('.layui-table-view').css('margin', '0');
+                    },
+                    size: ''
+                };
+                if (!isExpAdd) {
+                    $.ajax({
+                        url: baseUrl+"/order/detl/all/auth?orderId=" + expTpe.id,
+                        headers: {'token': localStorage.getItem('token')},
+                        method: 'GET',
+                        async: false,
+                        success: function (res) {
+                            if (res.code === 200){
+                                xxDataList = res.data;
+                                tbOptions.data = xxDataList;
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    })
+                }
+                var insTbSSXM = table.render(tbOptions);
+                // 宸ュ叿鏉$偣鍑讳簨浠�
+                table.on('tool(formSSXMTable)', function (obj) {
+                    var data = obj.data;
+                    var layEvent = obj.event;
+                    if (layEvent === 'edit') {
+                        showEditModel2(data);
+                    } else if (layEvent === 'del') {
+                        if(data.workQty > 0){
+                            layer.msg("宸插瓨鍦ㄤ綔涓氭暟閲忥紝涓嶈兘鍒犻櫎", {icon: 2});
+                            return;
+                        }
+                        layer.confirm('纭畾瑕佸垹闄ゅ悧锛�', {
+                            shade: .1,
+                            skin: 'layui-layer-admin'
+                        }, function (i) {
+                            layer.close(i);
+                            for (var j = 0; j < xxDataList.length; j++) {
+                                if (xxDataList[j].matnr === data.matnr && xxDataList[j].batch === data.batch) {
+                                    xxDataList.splice(j, 1);
+                                    break;
+                                }
+                            }
+                            insTbSSXM.reload({data: xxDataList, page: {curr: 1}});
+                        });
+                    }
+                });
+                // 鏄庣粏鏁版嵁淇敼
+                table.on('edit(formSSXMTable)', function (obj) {
+                    let index = obj.tr.attr("data-index");
+                    let data = xxDataList[index];
+                    if (obj.field === 'anfme'){
+                        let vle = Number(obj.value);
+                        if (isNaN(vle)) {
+                            layer.msg("璇疯緭鍏ユ暟瀛�", {icon: 2});
+                            return false;
+                        } else {
+                            if (vle <= 0) {
+                                layer.msg("鏁伴噺蹇呴』澶т簬闆�", {icon: 2});
+                                // data[obj.field] = 0;
+                                // insTbSSXM.reload({data: xxDataList});
+                                return false;
+                            }
+                            if(obj.value < data.workQty){
+                                layer.msg("杈撳叆鏁伴噺涓嶈兘灏忎簬浣滀笟涓暟閲�", {icon: 2});
+                                // data[obj.field] = 0;
+                                // insTbSSXM.reload({data: xxDataList});
+                                return false;
+                            }
+                        }
+                    }
+                    data[obj.field] = obj.value;
+                    insTbSSXM.reload({data: xxDataList});
+                });
+
+                $('#matAddBtnComment').click(function () {
+                    showEditModel2();
+                });
+
+                // 鏄剧ず娣诲姞鏄庣粏琛ㄥ崟寮圭獥
+                function showEditModel2(exp) {
+                    admin.open({
+                        type: 1,
+                        offset: '150px',
+                        area: '680px',
+                        title: (exp ? '淇敼' : '娣诲姞') + '鏄庣粏',
+                        content: $('#matEditDialog').html(),
+                        success: function (layero, dIndex) {
+                            // 鍥炴樉鏁版嵁
+                            form.val('matEditForm', exp);
+                            // 琛ㄥ崟鎻愪氦浜嬩欢
+                            form.on('submit(matEditSubmit)', function (data) {
+                                let selectList = matXmSelect.getValue();
+                                for (let i = 0; i<selectList.length; i++) {
+                                    let item = selectList[i];
+                                    // 鏌ヨ鐗╂枡璇︽儏
+                                    $.ajax({
+                                        url: baseUrl+"/mat/covert/"+item.value+"/auth",
+                                        headers: {'token': localStorage.getItem('token')},
+                                        method: 'GET',
+                                        async: false,
+                                        success: function (res) {
+                                            if (res.code === 200){
+                                                xxDataList.push(res.data);
+                                                insTbSSXM.reload({data: xxDataList, page: {curr: 1}});
+                                            } else if (res.code === 403){
+                                                top.location.href = baseUrl+"/";
+                                            }else {
+                                                layer.msg(res.msg, {icon: 2})
+                                            }
+                                        }
+                                    })
+                                }
+                                layer.close(dIndex);
+                                return false;
+                            });
+                            // 娓叉煋鐗╂枡閫夋嫨
+                            var matXmSelect = xmSelect.render({
+                                el: '#mat',
+                                style: {
+                                    width: '340px',
+                                },
+                                autoRow: true,
+                                toolbar: { show: true },
+                                filterable: true,
+                                remoteSearch: true,
+                                remoteMethod: function(val, cb, show){
+                                    $.ajax({
+                                        url: baseUrl+"/mat/all/get/kv",
+                                        headers: {'token': localStorage.getItem('token')},
+                                        data: {
+                                            condition: val
+                                        },
+                                        method: 'POST',
+                                        success: function (res) {
+                                            if (res.code === 200){
+                                                cb(res.data)
+                                            } else {
+                                                cb([]);
+                                                layer.msg(res.msg, {icon: 2});
+                                            }
+                                        }
+                                    });
+                                }
+                            })
+                            // 寮圭獥涓嶅嚭鐜版粴鍔ㄦ潯
+                            $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                            layui.form.render('select');
+                        }
+                    });
+                }
+
+            }
+        });
+    }
+
+    // 鍒犻櫎鍗曟嵁
+    function doDel(orderId) {
+        layer.confirm('纭畾瑕佸垹闄ゅ悧锛�', {
+            shade: .1,
+            skin: 'layui-layer-admin'
+        }, function (i) {
+            layer.close(i);
+            layer.load(2);
+            $.ajax({
+                url: baseUrl+"/order/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {
+                    orderId: orderId
+                },
+                method: 'POST',
+                success: function (res) {
+                    layer.closeAll('loading');
+                    if (res.code === 200){
+                        if (insTbCount === 0) {
+                            insTb.reload({page: {curr: 1}});
+                        } else {
+                            $(".layui-laypage-btn")[0].click();
+                        }
+                        layer.msg(res.msg, {icon: 1});
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    }else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 淇敼璁㈠崟鐘舵��
+    function doModify(orderId, orderNo, settle) {
+        layer.confirm('纭畾瑕佹墜鍔ㄥ畬缁撳悧锛�', {
+            shade: .1,
+            skin: 'layui-layer-admin'
+        }, function (i) {
+            layer.close(i);
+            layer.load(2);
+            console.log(orderId);
+            console.log(settle);
+            $.ajax({
+                url: baseUrl+"/order/update/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {
+                    id: orderId,
+                    orderNo: orderNo,
+                    settle: settle
+                },
+                method: 'POST',
+                success: function (res) {
+                    layer.closeAll('loading');
+                    if (res.code === 200){
+                        if (insTbCount === 0) {
+                            insTb.reload({page: {curr: 1}});
+                        } else {
+                            $(".layui-laypage-btn")[0].click();
+                        }
+                        layer.msg(res.msg, {icon: 1});
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    }else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    layDate.render({
+        elem: '.layui-laydate-range'
+        ,type: 'datetime'
+        ,range: true
+    });
+    // 鐢熸垚鎷h揣鍗�
+    function addPakOut(expTpe) {
+        $.ajax({
+            url: baseUrl+"/ManPakOut/add/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: JSON.stringify({
+                docType: Number(20),
+                orderNo: expTpe,
+            }),
+            contentType:'application/json;charset=UTF-8',
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    layer.msg("鐢熸垚鎷h揣鍗曪細ok");
+                } else if (res.code === 403){
+                    layer.msg("鐢熸垚鎷h揣鍗曞け璐ワ細403");
+                }else {
+                    layer.msg("鐢熸垚鎷h揣鍗曞け璐ワ細鏈煡寮傚父");
+                }
+
+            }
+        })
+    }
+    // 鎵撳嵃
+    function btnPrint(orderId, orderNo, settle) {
+        console.log(orderId);
+        console.log(orderNo);
+        console.log(settle);
+        printMatCodeNos.push(orderNo)
+        var templateNo = 3;
+        $.ajax({
+            url: baseUrl+"/order/print/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: {param: printMatCodeNos},
+            method: 'POST',
+            async: false,
+            success: function (res) {
+                if (res.code === 200){
+                    layer.closeAll();
+                    console.log(res);
+                    for (let i=0;i<res.data.length;i++){
+                        var templateDom = $("#templatePreview"+templateNo);
+                        var className = templateDom.attr("class");
+                        if (className === 'template-barcode') {
+                            res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=1&param="+res.data[i].orderNo+
+                                ";"+res.data[i].matnr+";"+res.data[i].batch;
+                        } else {
+                            res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=2&param="+res.data[i].orderNo+
+                                ";"+res.data[i].matnr+";"+res.data[i].batch;
+                        }
+                    }
+                    var tpl = templateDom.html();
+                    var template = Handlebars.compile(tpl);
+                    var html = template(res);
+                    var box = $("#box");
+                    box.html(html);box.show();
+                    box.print({mediaPrint:true});
+                    box.hide();
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+            }
+        })
+    }
+});
diff --git a/src/main/webapp/views/locCheck/locCheck.html b/src/main/webapp/views/locCheck/locCheck.html
index 0d2507d..1d9753a 100644
--- a/src/main/webapp/views/locCheck/locCheck.html
+++ b/src/main/webapp/views/locCheck/locCheck.html
@@ -142,7 +142,7 @@
 </script>
 <script type="text/html" id="nodeSelect">
     <form id=detailSelect lay-filter="detailSelect" class="layui-form">
-        <div class="layui-form-item">
+        <div class="layui-form-item" style="height: 300px;">
             <label class="layui-form-label">閫夋嫨鐩樼偣鐜�:</label>
             <div class="layui-input-block">
                 <select id="selectPerc" name="selectPerc" lay-filter="selectPerc">
@@ -155,7 +155,7 @@
             </div>
         </div>
         <div class="layui-form-item text-right">
-            <button class="layui-btn" lay-filter="pakin" lay-submit="">鐢熸垚鐩樼偣</button>
+            <button class="layui-btn" lay-filter="pakin" lay-submit>鐢熸垚鐩樼偣</button>
             <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
         </div>
     </form>
diff --git a/src/main/webapp/views/orderCheck/orderCheck.html b/src/main/webapp/views/orderCheck/orderCheck.html
new file mode 100644
index 0000000..1a30105
--- /dev/null
+++ b/src/main/webapp/views/orderCheck/orderCheck.html
@@ -0,0 +1,347 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="utf-8">
+  <title></title>
+  <meta name="renderer" content="webkit">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+  <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+  <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
+  <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+  <!--    <link rel="stylesheet" href="../../static/css/common.css" media="all">-->
+  <!--[if lt IE 9]>
+  <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+  <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+  <![endif]-->
+  <style>
+    .btn-add {
+      display: none;
+    }
+    .btn-edit {
+      display: none;
+    }
+    .btn-complete {
+      display: none;
+    }
+    .btn-delete {
+      display: none;
+    }
+    .contain td {
+      border: 1px solid #000;
+      /*font-family: 榛戜綋;*/
+      /*font-weight: bold;*/
+      /*color: #000000;*/
+    }
+    .wrk-trace {
+      color: green;
+      cursor: pointer;
+      margin-left: 6px;
+      font-size: 18px;
+    }
+  </style>
+</head>
+<body>
+
+<!-- 姝f枃寮�濮� -->
+<div class="layui-fluid">
+  <div class="layui-card">
+    <div class="layui-card-body">
+      <!-- 琛ㄦ牸椤堕儴宸ュ叿鏍� -->
+      <div class="layui-form toolbar">
+        <div class="layui-form-item">
+          <div class="layui-inline">
+            <div class="layui-input-inline mr0">
+              <input name="order_no" class="layui-input" type="text" placeholder="杈撳叆鍗曟嵁缂栧彿"/>
+            </div>
+          </div>
+          <div class="layui-inline" style="width: 300px">
+            <div class="layui-input-inline">
+              <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+            </div>
+          </div>
+          <div class="layui-inline">
+            <div class="layui-input-inline">
+              <select name="doc_type" id="docType-query">
+              </select>
+            </div>
+          </div>
+          <div class="layui-inline">
+            <div class="layui-input-inline">
+              <select name="settle">
+                <option value="">閫夋嫨鐘舵��</option>
+                <option value="1">寰呭鐞�</option>
+                <option value="2">浣滀笟涓�</option>
+                <option value="4">宸插畬鎴�</option>
+                <option value="6">涓婃姤瀹屾垚</option>
+              </select>
+            </div>
+          </div>
+          <div class="layui-inline">
+            <button class="layui-btn icon-btn" lay-filter="tbSearch" lay-submit>
+              <i class="layui-icon">&#xe615;</i>鎼滅储
+            </button>
+            <button id="orderAddBtn" class="layui-btn icon-btn btn-add"><i class="layui-icon">&#xe654;</i>娣诲姞
+            </button>
+          </div>
+        </div>
+      </div>
+      <table id="order" lay-filter="order"></table>
+    </div>
+  </div>
+
+</div>
+<!-- 琛ㄦ牸鎿嶄綔鍒� -->
+<script type="text/html" id="operate">
+  <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="btnPrint">鎵撳嵃</a>
+  {{# if (d.settle == 0 || d.settle == 1) { }}
+  <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+  <a class="layui-btn layui-btn-danger layui-btn-xs btn-delete" lay-event="del">鍒犻櫎</a>
+  {{# } }}
+  <!--    {{# if ((d.settle == 0 || d.settle == 1) && (d.docType == 21 || d.docType == 11 || d.docType == 12)) { }}-->
+  <!--    <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="manPrint">鐢熸垚鎷h揣鍗�</a>-->
+  <!--    {{# } }}-->
+  {{# if (d.settle == 2) { }}
+  <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="complete">瀹岀粨</a>
+  {{# } }}
+
+</script>
+<!-- 琛ㄦ牸鎿嶄綔鍒� -->
+<script type="text/html" id="tbLook">
+  <span class="layui-text">
+        <a href="javascript:;" lay-event="look">
+            <i class="layui-icon" style="font-size: 12px;">&#xe61a;</i> 鏌ョ湅鍗曟嵁鏄庣粏
+        </a>
+    </span>
+</script>
+
+<script type="text/html" id="orderNoTpl">
+  {{d.orderNo}}
+  {{# if(d.settle > 1 && d.settle !== 3){ }}
+
+  {{# } }}
+  <i class="layui-icon layui-icon-about wrk-trace" lay-tips="鏌ョ湅浜岀淮鐮�" lay-direction="2" lay-offset="-10px,0px" lay-event="wrkTrace"></i>
+</script>
+
+<!--<script type="text/html" id="settleTpl">-->
+<!--    <span name="settle" class="layui-badge layui-badge-gray">{{d.settle$}}</span>-->
+<!--</script>-->
+<script type="text/html" id="settleTpl">
+  <span name="settle"
+        {{# if( d.settle === 1){ }}
+        class="layui-badge layui-badge-red"
+        {{# }else if(d.settle === 2){ }}
+        class="layui-badge layui-badge-green"
+        {{# }else if(d.settle === 3){ }}
+        class="layui-badge layui-badge-gray"
+        {{# }else if(d.settle === 4){ }}
+        class="layui-badge layui-badge-blue"
+        {{# }else if(d.settle === 5){ }}
+        class="layui-badge layui-badge-gray"
+        {{# }else if(d.settle === 6){ }}
+        class="layui-badge layui-badge-gray"
+        {{# } }}
+  >{{d.settle$}}</span>
+</script>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+  <form id="editForm" lay-filter="editForm" class="layui-form model-form">
+    <input name="id" type="hidden"/>
+    <div class="layui-form-item">
+      <label class="layui-form-label">鐩樼偣绫诲瀷锛�</label>
+      <div class="layui-input-block" >
+        <select id="checkType" name="checkType" lay-filter="checkType">
+          <option value="all" selected="">鍏ㄩ儴鐗╂枡</option>
+          <option value="matnr">鐗╂枡鍙�</option>
+        </select>
+      </div>
+    </div>
+
+    <div class="layui-form-item">
+      <label class="layui-form-label">鐩樼偣鍗曠紪鍙凤細</label>
+      <div class="layui-input-block">
+        <input id="orderNo" name="orderNo" placeholder="杈撳叆鍗曟嵁缂栧彿" type="text" class="layui-input" maxlength="20" lay-verType="tips" />
+        <!--                lay-verify="required"-->
+      </div>
+    </div>
+    <div class="layui-form-item" style="position: relative;">
+      <label class="layui-form-label">鍗曟嵁鏄庣粏锛�</label>
+      <div class="layui-input-block">
+        <table id="formSSXMTable" lay-filter="formSSXMTable"></table>
+
+      </div>
+      <button class="layui-btn layui-btn-sm icon-btn" id="matAddBtnComment"
+              style="position: absolute; left: 20px;top: 60px;padding: 0 5px;" type="button">
+        <i class="layui-icon">&#xe654;</i>娣诲姞鏄庣粏
+      </button>
+    </div>
+    <div class="layui-form-item text-right">
+      <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+      <button class="layui-btn" lay-filter="orderEditSubmit" lay-submit>淇濆瓨</button>
+    </div>
+  </form>
+</script>
+
+<!-- 琛ㄦ牸鎿嶄綔鍒� -->
+<script type="text/html" id="formSSXMTableBar">
+  {{# if (d.settle == 0 || d.settle == 1) { }}
+  <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+  <a class="layui-btn layui-btn-danger layui-btn-xs btn-delete" lay-event="del">鍒犻櫎</a>
+  {{# } }}
+  {{# if ((d.settle == 0 || d.settle == 1) && (d.docType == 21 || d.docType == 11 || d.docType == 12)) { }}
+  <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="manPrint">鐢熸垚鎷h揣鍗�</a>
+  {{# } }}
+  {{# if (d.settle == 2) { }}
+  <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="complete">瀹岀粨</a>
+  {{# } }}
+  <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="btnPrint">鎵撳嵃</a>
+</script>
+<!-- 琛ㄦ牸鎿嶄綔鍒� -->
+<script type="text/html" id="formSSXMTableBarr">
+  <!--    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">淇敼</a>-->
+  <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">鍒犻櫎</a>
+</script>
+<script type="text/html" id="formSSXMTableBar3">
+  <!--    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">淇敼</a>-->
+  <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="examine">瀹℃牳</a>
+</script>
+<!-- 琛ㄥ崟寮圭獥1 -->
+<script type="text/html" id="matEditDialog">
+  <form id="matEditForm" lay-filter="matEditForm" class="layui-form model-form">
+    <input name="experimentId" type="hidden"/>
+    <div class="layui-form-item" style="float: left">
+
+      <label class="layui-form-label"style="margin-top: 15px;">鐩樼偣鐜囷細</label>
+      <div class="layui-input-block" style="margin-top: 15px;">
+        <select id="selectPerc" name="selectPerc" lay-filter="selectPerc">
+          <option value="100" selected="">100%</option>
+          <option value="80">80%</option>
+          <option value="60">60%</option>
+          <option value="40">40%</option>
+          <option value="10">10%</option>
+        </select>
+      </div>
+    </div>
+    <div class="layui-form-item text-right" style="margin-left: 35px">
+      <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+      <button class="layui-btn" lay-filter="matEditSubmit" lay-submit>淇濆瓨</button>
+    </div>
+  </form>
+</script>
+
+
+<!-- 琛ㄥ崟寮圭獥3 -->
+<script type="text/html" id="matEditDialog3">
+  <form id="matEditForm3" lay-filter="matEditForm3" class="layui-form model-form">
+    <input name="experimentId" type="hidden"/>
+    <div class="layui-form-item" style="float: left">
+      <label class="layui-form-label">鐗╂枡 - 澶氶��</label>
+      <div class="layui-input-block">
+        <div id="mat3" name="mat">
+        </div>
+      </div>
+      <label class="layui-form-label"style="margin-top: 15px;">鐩樼偣鐜囷細</label>
+      <div class="layui-input-block" style="margin-top: 15px;">
+        <select id="selectPerc3" name="selectPerc3" lay-filter="selectPerc3">
+          <option value="100" selected="">100%</option>
+          <option value="80">80%</option>
+          <option value="60">60%</option>
+          <option value="40">40%</option>
+          <option value="10">10%</option>
+        </select>
+      </div>
+    </div>
+    <div class="layui-form-item text-right" style="margin-left: 35px">
+      <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+      <button class="layui-btn" lay-filter="matEditSubmit" lay-submit>淇濆瓨</button>
+    </div>
+  </form>
+</script>
+
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
+<script type="text/javascript" src="../../static/js/jquery/jQuery.print.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/orderCheck/orderCheck.js" charset="utf-8"></script>
+
+<script type="text/template" id="docTypeTpl">
+  <option value="">閫夋嫨绫诲瀷</option>
+  {{#each records}}
+  <option value="{{docId}}">{{docName}}</option>
+  {{/each}}
+</script>
+<!-- 鎵撳嵃鎿嶄綔寮圭獥 -->
+<div id="printDataDiv" style="display: none;padding: 20px">
+  <div class="layui-form" style="text-align: center">
+    <hr>
+    <!--鍗曢�夋-->
+    <div class="layui-form-item" style="display: inline-block; margin-bottom: 10px">
+      <input type="radio" name="selectTemplate" value="3" title="妯℃澘涓�" lay-filter="selectTemplateRadio" checked="">
+    </div>
+    <fieldset class="layui-elem-field site-demo-button" style="margin-top: 30px;text-align: left;">
+      <legend>鎵撳嵃棰勮</legend>
+      <div id="template-container" style="margin: 20px;text-align: center">
+        <!-- 棰勮鍥� 3 -->
+        <div id="template-preview-3" class="template-preview" style="display: inline-block">
+          <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
+          </table>
+        </div>
+      </div>
+    </fieldset>
+  </div>
+</div>
+<div id="box" style="display: block"></div>
+
+<!-- 鍒濆鍖栨墦鍗版ā鏉跨殑鏉″舰鐮� -->
+<script type="text/javascript">
+  // $('.template-barcode').attr("src", baseUrl+"/mac/code/auth?type=1&param=123");
+  $('.template-qrcode').attr("src", baseUrl+"/mac/code/auth?type=2&param=123");
+</script>
+<!-- 妯℃澘寮曟搸 -->
+<!-- 妯℃澘3 -->
+<script type="text/template" id="templatePreview3" class="template-qrcode">
+  {{#each data}}
+  <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
+    <thead></thead>
+    <tbody style="font-weight: bold">
+    <tr style="height: 30px;">
+      <td align="center" scope="col" colspan="1">鏂欏彿</td>
+      <td align="lift" colspan="4" style="padding-left: 8px;overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.matnr}}</td>
+      <td align="center" scope="col" colspan="3" rowspan="3">
+        <img class="template-code template-qrcode" src="{{this.barcodeUrl}}" width="80%">
+      </td>
+    </tr>
+    <tr style="height: 30px">
+      <td align="center" scope="col" colspan="1">鍟嗗搧</td>
+      <!--            overflow:hidden; 婧㈠嚭闅愯棌 white-space:nowrap; text-overflow:ellipsis;-->
+      <!--             word-break : break-all;  瓒呭嚭鑷姩鎹㈣-->
+      <td align="lift" colspan="4" style="padding-left: 8px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.maktx}}</td>
+    </tr>
+    <tr style="height: 30px">
+      <td align="center" scope="col" colspan="1">鎵瑰彿</td>
+      <td align="lift" colspan="4" style="padding-left: 8px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.batch}}</td>
+    </tr>
+    <tr style="height: 30px">
+      <td align="center" scope="col" colspan="1">瑙勬牸</td>
+      <td align="lift" colspan="3" style="padding-left: 8px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.specs}}</td>
+      <td align="center" scope="col" colspan="1">鏁伴噺</td>
+      <td align="lift" colspan="3" style="padding-left: 8px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.anfme}}</td>
+    </tr>
+    <tr style="height: 30px">
+      <td align="center" scope="col" colspan="1">鏃ユ湡</td>
+      <td align="lift" colspan="7  " style="padding-left: 8px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.createTime$}}</td>
+    </tr>
+    </tbody>
+  </table>
+  <div style="height: 20px">
+
+  </div>
+  {{/each}}
+</script>
+</body>
+
+</html>
+
diff --git a/src/main/webapp/views/orderLog/orderLog.html b/src/main/webapp/views/orderLog/orderLog.html
new file mode 100644
index 0000000..094f35b
--- /dev/null
+++ b/src/main/webapp/views/orderLog/orderLog.html
@@ -0,0 +1,281 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+    <!--    <link rel="stylesheet" href="../../static/css/common.css" media="all">-->
+    <!--[if lt IE 9]>
+    <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+    <![endif]-->
+    <style>
+        .btn-add {
+            display: none;
+        }
+        .btn-edit {
+            display: none;
+        }
+        .btn-complete {
+            display: none;
+        }
+        .btn-delete {
+            display: none;
+        }
+        .contain td {
+            border: 1px solid #000;
+            /*font-family: 榛戜綋;*/
+            /*font-weight: bold;*/
+            /*color: #000000;*/
+        }
+        .wrk-trace {
+            color: green;
+            cursor: pointer;
+            margin-left: 6px;
+            font-size: 18px;
+        }
+    </style>
+</head>
+<body>
+
+<!-- 姝f枃寮�濮� -->
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <!-- 琛ㄦ牸椤堕儴宸ュ叿鏍� -->
+            <div class="layui-form toolbar">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline mr0">
+                            <input name="order_no" class="layui-input" type="text" placeholder="杈撳叆鍗曟嵁缂栧彿"/>
+                        </div>
+                    </div>
+                    <div class="layui-inline" style="width: 300px">
+                        <div class="layui-input-inline">
+                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <select name="doc_type" id="docType-query">
+                            </select>
+                        </div>
+                    </div>
+
+                    <div class="layui-inline">
+                        <button class="layui-btn icon-btn" lay-filter="tbSearch" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+
+                    </div>
+                </div>
+            </div>
+            <table id="order" lay-filter="order"></table>
+        </div>
+    </div>
+
+</div>
+<!-- 琛ㄦ牸鎿嶄綔鍒� -->
+<script type="text/html" id="operate">
+    {{# if (d.settle == 0 || d.settle == 1) { }}
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-delete" lay-event="del">鍒犻櫎</a>
+    {{# } }}
+    {{# if ((d.settle == 0 || d.settle == 1) && (d.docType == 21 || d.docType == 11 || d.docType == 12)) { }}
+    <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="manPrint">鐢熸垚鎷h揣鍗�</a>
+    {{# } }}
+    {{# if (d.settle == 2) { }}
+    <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="complete">瀹岀粨</a>
+    {{# } }}
+    <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="btnPrint">鎵撳嵃</a>
+</script>
+<!-- 琛ㄦ牸鎿嶄綔鍒� -->
+<script type="text/html" id="tbLook">
+    <span class="layui-text">
+        <a href="javascript:;" lay-event="look">
+            <i class="layui-icon" style="font-size: 12px;">&#xe61a;</i> 鏌ョ湅鍗曟嵁鏄庣粏
+        </a>
+    </span>
+</script>
+
+<script type="text/html" id="orderNoTpl">
+    {{d.orderNo}}
+    {{# if(d.settle > 1 && d.settle !== 3){ }}
+
+    {{# } }}
+    <i class="layui-icon layui-icon-about wrk-trace" lay-tips="鏌ョ湅浜岀淮鐮�" lay-direction="2" lay-offset="-10px,0px" lay-event="wrkTrace"></i>
+</script>
+
+<!--<script type="text/html" id="settleTpl">-->
+<!--    <span name="settle" class="layui-badge layui-badge-gray">{{d.settle$}}</span>-->
+<!--</script>-->
+<script type="text/html" id="settleTpl">
+    <span name="settle"
+          {{# if( d.settle === 1){ }}
+          class="layui-badge layui-badge-red"
+          {{# }else if(d.settle === 2){ }}
+          class="layui-badge layui-badge-green"
+          {{# }else if(d.settle === 3){ }}
+          class="layui-badge layui-badge-gray"
+          {{# }else if(d.settle === 4){ }}
+          class="layui-badge layui-badge-blue"
+          {{# }else if(d.settle === 5){ }}
+          class="layui-badge layui-badge-gray"
+          {{# }else if(d.settle === 6){ }}
+          class="layui-badge layui-badge-gray"
+          {{# } }}
+    >{{d.settle$}}</span>
+</script>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="editForm" lay-filter="editForm" class="layui-form model-form">
+        <input name="id" type="hidden"/>
+        <div class="layui-form-item">
+            <label class="layui-form-label">鍗曟嵁绫诲瀷锛�</label>
+            <div class="layui-input-block cool-auto-complete">
+                <input class="layui-input" name="docType" placeholder="璇疯緭鍏ュ崟鎹被鍨�" style="display: none">
+                <input id="docType$" name="docType$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ュ崟鎹被鍨�" onfocus=this.blur() lay-verType="tips" lay-verify="required">
+                <div class="cool-auto-complete-window">
+                    <input class="cool-auto-complete-window-input" data-key="docTypeQueryBydocType" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="docTypeQueryBydocTypeSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label class="layui-form-label">鍗曟嵁缂栧彿锛�</label>
+            <div class="layui-input-block">
+                <input id="orderNo" name="orderNo" placeholder="杈撳叆鍗曟嵁缂栧彿" type="text" class="layui-input" maxlength="20" lay-verType="tips" />
+                <!--                lay-verify="required"-->
+            </div>
+        </div>
+        <div class="layui-form-item" style="position: relative;">
+            <label class="layui-form-label">鍗曟嵁鏄庣粏锛�</label>
+            <div class="layui-input-block">
+                <table id="formSSXMTable" lay-filter="formSSXMTable"></table>
+            </div>
+            <button class="layui-btn layui-btn-sm icon-btn" id="matAddBtnComment"
+                    style="position: absolute; left: 20px;top: 60px;padding: 0 5px;" type="button">
+                <i class="layui-icon">&#xe654;</i>娣诲姞鏄庣粏
+            </button>
+        </div>
+        <div class="layui-form-item text-right">
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+            <button class="layui-btn" lay-filter="orderEditSubmit" lay-submit>淇濆瓨</button>
+        </div>
+    </form>
+</script>
+<!-- 琛ㄦ牸鎿嶄綔鍒� -->
+<script type="text/html" id="formSSXMTableBar">
+    <!--    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">淇敼</a>-->
+    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">鍒犻櫎</a>
+</script>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="matEditDialog">
+    <form id="matEditForm" lay-filter="matEditForm" class="layui-form model-form">
+        <input name="experimentId" type="hidden"/>
+        <div class="layui-form-item" style="float: left">
+            <label class="layui-form-label">鐗╂枡 - 澶氶��</label>
+            <div class="layui-input-block">
+                <div id="mat" name="mat">
+                </div>
+            </div>
+        </div>
+        <div class="layui-form-item text-right" style="display: inline-block; margin-left: 35px">
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+            <button class="layui-btn" lay-filter="matEditSubmit" lay-submit>淇濆瓨</button>
+        </div>
+    </form>
+</script>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
+<script type="text/javascript" src="../../static/js/jquery/jQuery.print.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/orderLog/orderLog.js" charset="utf-8"></script>
+
+<script type="text/template" id="docTypeTpl">
+    <option value="">閫夋嫨绫诲瀷</option>
+    {{#each records}}
+    <option value="{{docId}}">{{docName}}</option>
+    {{/each}}
+</script>
+<!-- 鎵撳嵃鎿嶄綔寮圭獥 -->
+<div id="printDataDiv" style="display: none;padding: 20px">
+    <div class="layui-form" style="text-align: center">
+        <hr>
+        <!--鍗曢�夋-->
+        <div class="layui-form-item" style="display: inline-block; margin-bottom: 10px">
+            <input type="radio" name="selectTemplate" value="3" title="妯℃澘涓�" lay-filter="selectTemplateRadio" checked="">
+        </div>
+        <fieldset class="layui-elem-field site-demo-button" style="margin-top: 30px;text-align: left;">
+            <legend>鎵撳嵃棰勮</legend>
+            <div id="template-container" style="margin: 20px;text-align: center">
+                <!-- 棰勮鍥� 3 -->
+                <div id="template-preview-3" class="template-preview" style="display: inline-block">
+                    <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
+                    </table>
+                </div>
+            </div>
+        </fieldset>
+    </div>
+</div>
+<div id="box" style="display: block"></div>
+
+<!-- 鍒濆鍖栨墦鍗版ā鏉跨殑鏉″舰鐮� -->
+<script type="text/javascript">
+    // $('.template-barcode').attr("src", baseUrl+"/mac/code/auth?type=1&param=123");
+    $('.template-qrcode').attr("src", baseUrl+"/mac/code/auth?type=2&param=123");
+</script>
+<!-- 妯℃澘寮曟搸 -->
+<!-- 妯℃澘3 -->
+<script type="text/template" id="templatePreview3" class="template-qrcode">
+    {{#each data}}
+    <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
+        <thead></thead>
+        <tbody style="font-weight: bold">
+        <tr style="height: 30px;">
+            <td align="center" scope="col" colspan="1">鏂欏彿</td>
+            <td align="lift" colspan="4" style="padding-left: 8px;overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.matnr}}</td>
+            <td align="center" scope="col" colspan="3" rowspan="3">
+                <img class="template-code template-qrcode" src="{{this.barcodeUrl}}" width="80%">
+            </td>
+        </tr>
+        <tr style="height: 30px">
+            <td align="center" scope="col" colspan="1">鍟嗗搧</td>
+            <!--            overflow:hidden; 婧㈠嚭闅愯棌 white-space:nowrap; text-overflow:ellipsis;-->
+            <!--             word-break : break-all;  瓒呭嚭鑷姩鎹㈣-->
+            <td align="lift" colspan="4" style="padding-left: 8px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.maktx}}</td>
+        </tr>
+        <tr style="height: 30px">
+            <td align="center" scope="col" colspan="1">鎵瑰彿</td>
+            <td align="lift" colspan="4" style="padding-left: 8px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.batch}}</td>
+        </tr>
+        <tr style="height: 30px">
+            <td align="center" scope="col" colspan="1">瑙勬牸</td>
+            <td align="lift" colspan="3" style="padding-left: 8px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.specs}}</td>
+            <td align="center" scope="col" colspan="1">鏁伴噺</td>
+            <td align="lift" colspan="3" style="padding-left: 8px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.anfme}}</td>
+        </tr>
+        <tr style="height: 30px">
+            <td align="center" scope="col" colspan="1">鏃ユ湡</td>
+            <td align="lift" colspan="7  " style="padding-left: 8px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">{{this.createTime$}}</td>
+        </tr>
+        </tbody>
+    </table>
+    <div style="height: 20px">
+
+    </div>
+    {{/each}}
+</script>
+</body>
+
+</html>
+
diff --git a/src/main/webapp/views/orderLog/outLog.html b/src/main/webapp/views/orderLog/outLog.html
new file mode 100644
index 0000000..66e5387
--- /dev/null
+++ b/src/main/webapp/views/orderLog/outLog.html
@@ -0,0 +1,342 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="utf-8">
+  <title></title>
+  <meta name="renderer" content="webkit">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+  <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+  <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
+  <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+  <link rel="stylesheet" href="../../static/css/originTable.css" media="all">
+  <style>
+    body {
+      color: #595959;
+      background-color: #f5f7f9;
+    }
+
+    .admin-form {
+      padding: 25px 30px 0 0 !important;
+      margin: 0 !important;
+    }
+
+    .layui-table-view .layui-table-cell .layui-select-title .layui-input {
+      height: 28px;
+      line-height: 28px;
+    }
+
+    .layui-table-view [lay-size="lg"] .layui-table-cell .layui-select-title .layui-input {
+      height: 40px;
+      line-height: 40px;
+    }
+
+    .layui-table-view [lay-size="lg"] .layui-table-cell .layui-select-title .layui-input {
+      height: 40px;
+      line-height: 40px;
+    }
+
+    .layui-table-view [lay-size="sm"] .layui-table-cell .layui-select-title .layui-input {
+      height: 20px;
+      line-height: 20px;
+    }
+
+    .layui-table-view [lay-size="sm"] .layui-table-cell .layui-btn-xs {
+      height: 18px;
+      line-height: 18px;
+    }
+
+    /* 鏉冮檺鎺у埗 */
+    #btn-pakoutPreview {
+      display: none;
+    }
+    /*#btn-delete {*/
+    /*    display: none;*/
+    /*}*/
+    /*.btn-edit {*/
+    /*    display: none;*/
+    /*}*/
+    /*.btn-more {*/
+    /*    display: none;*/
+    /*}*/
+  </style>
+</head>
+<body>
+<!-- 姝f枃寮�濮� -->
+<div class="layui-fluid" style="padding-bottom: 0;">
+  <div class="layui-row layui-col-space15">
+    <!-- 宸� -->
+    <div class="layui-col-md3" id="left-table">
+      <div class="layui-card">
+        <div class="layui-card-body" style="padding: 10px;">
+          <form class="layui-form toolbar">
+            <div class="layui-form-item">
+              <div class="layui-inline" style="max-width: 300px;">
+                <input name="orderNo" class="layui-input" placeholder="杈撳叆鍗曟嵁缂栧彿" autocomplete="off"/>
+              </div>
+              <div class="layui-inline">
+                <button class="layui-btn icon-btn" lay-filter="originTableSearch" lay-submit>
+                  <i class="layui-icon">&#xe615;</i>鎼滅储
+                </button>
+                <button class="layui-btn icon-btn" lay-filter="originTbReset" lay-submit>
+                  <i class="layui-icon">&#xe666;</i>閲嶇疆
+                </button>
+              </div>
+            </div>
+          </form>
+          <table id="originTable" lay-filter="originTable"></table>
+        </div>
+      </div>
+    </div>
+    <!-- 鍙� -->
+    <div class="layui-col-md9">
+      <div class="layui-card">
+        <div class="layui-card-body" style="padding: 10px;">
+          <form class="layui-form toolbar">
+            <div class="layui-form-item">
+              <div class="layui-inline">
+                <label class="layui-form-label">鍟嗗搧缂栫爜:</label>
+                <div class="layui-input-inline">
+                  <input name="matnr" class="layui-input" placeholder="鍟嗗搧缂栫爜"/>
+                </div>
+              </div>
+              <div class="layui-inline">
+                <label class="layui-form-label">鍟嗗搧鍚嶇О:</label>
+                <div class="layui-input-inline">
+                  <input name="maktx" class="layui-input" placeholder="鍟嗗搧鍚嶇О"/>
+                </div>
+              </div>
+              <div class="layui-inline">
+                <label class="layui-form-label">搴忓垪鐮�:</label>
+                <div class="layui-input-inline">
+                  <input name="batch" class="layui-input" placeholder="搴忓垪鐮�"/>
+                </div>
+              </div>
+              <!--                            <div class="layui-inline">-->
+              <!--                                <label class="layui-form-label">鐘舵��:</label>-->
+              <!--                                <div class="layui-input-inline">-->
+              <!--                                    <select name="isOnline">-->
+              <!--                                        <option value="1">鍏呯數涓�</option>-->
+              <!--                                        <option value="1">鍏呯數涓�</option>-->
+              <!--                                        <option value="0">涓嶅湪鍏呯數</option>-->
+              <!--                                    </select>-->
+              <!--                                </div>-->
+              <!--                            </div>-->
+              <div class="layui-inline">&emsp;
+                <button class="layui-btn icon-btn" lay-filter="sensorTbSearch" lay-submit>
+                  <i class="layui-icon">&#xe615;</i>鎼滅储
+                </button>
+              </div>
+            </div>
+          </form>
+          <table id="orderDetlTable" lay-filter="orderDetlTable"></table>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+
+<!-- 澶村伐鍏锋爮 -->
+<script type="text/html" id="orderDetToolbar">
+
+  <!--    <div class="layui-btn-container">-->
+  <!--        <div class="layui-col-md3">-->
+  <!--            <select id="staNoSelect" lay-verify="required">-->
+  <!--                <option value="">璇烽�夋嫨绔欑偣</option>-->
+  <!--            </select>-->
+  <!--        </div>-->
+  <!--    </div>-->
+  <button class="layui-btn layui-btn-sm layui-btn-danger btn-pakoutPreview" id="btn-pakoutPreview" lay-event="pakoutPreview">鎵归噺鍑哄簱</button>
+
+</script>
+
+<!-- 琛屽伐鍏锋爮 -->
+<script type="text/html" id="operate">
+  {{#if (d.anfme > d.workQty){ }}
+  <a class="layui-btn layui-btn-xs layui-btn-danger btn-pakoutPreview" lay-event="pakoutPreview"><i class="layui-icon layui-icon-prev-circle"></i>鍑哄簱</a>
+  {{# } }}
+</script>
+
+<!-- 鍑哄簱棰勮 -->
+<script type="text/html" id="pakoutPreviewBox" style="display: none">
+  <div style="padding: 25px; line-height: 22px; background-color: #393D49; color: #fff; font-weight: 300;">
+    <span style="font-size: large; font-weight: bold">鍑哄簱棰勮</span>
+  </div>
+  <div class="layui-card">
+    <div class="layui-card-body" style="padding: 10px">
+      <table id="stoPreTab" lay-filter="stoPreTab"></table>
+    </div>
+    <!--        <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm" lay-filter="batchModifySta" lay-submit style="display: block;float: right;margin-right: 1rem">-->
+    <!--            鎵归噺淇敼-->
+    <!--        </button>-->
+  </div>
+</script>
+
+<script type="text/html" id="tbBasicTbStaNos">
+  <div class="ew-select-fixed">
+    {{#if (d.manu == '绔嬪簱') {}}
+    <select class="order-sta-select" lay-filter="tbBasicTbStaNos">
+      {{#if (d.staNos!=null) {}}
+      {{# for(let i=0; i<d.staNos.length; i++) { }}
+      <option value="{{d.staNos[i]}}">{{d.staNos[i]}}</option>
+      {{# } }}
+      {{# } }}
+    </select>
+    {{# } }}
+  </div>
+</script>
+
+<script type="text/html" id="staBatchSelectDialog">
+  <form class="layui-form" style="padding: 25px 50px 30px 50px;text-align: center">
+    <select id="batchSelectStaBox" name="batchSta" lay-vertype="tips" lay-verify="required" required="">
+    </select>
+    <button style="margin-top: 30px" class="layui-btn" lay-filter="staBatchSelectConfirm" lay-submit="">纭畾</button>
+  </form>
+</script>
+
+<script type="text/html" id="locNoTpl">
+  <span name="locNo"
+        {{# if( d.lack === false){ }}
+        class="layui-badge layui-badge-green" >{{d.locNo}}</span>
+  {{# } else { }}
+  class="layui-badge layui-badge-red" >搴撳瓨涓嶈冻</span>
+  {{# } }}
+</script>
+
+<!-- 琛屾牱寮� -->
+<script type="text/html" id="orderNoTpl">
+  <span name="orderNo" class="layui-badge layui-badge-gray">{{d.orderNo}}</span>
+</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/html" id="editDialog">
+  <form id="detail" lay-filter="detail" class="layui-form admin-form">
+    <input name="id" type="hidden">
+    <input name="status" type="hidden">
+    <div class="layui-row">
+
+      <div class="layui-col-md4">
+        <div class="layui-form-item">
+          <label class="layui-form-label layui-form-required">璁惧缂栧彿</label>
+          <div class="layui-input-block">
+            <input name="uuid" placeholder="璇疯緭鍏ヨ澶囩紪鍙�" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
+          </div>
+        </div>
+      </div>
+      <div class="layui-col-md4">
+        <div class="layui-form-item">
+          <label class="layui-form-label">璁惧绫诲瀷锛�</label>
+          <div class="layui-input-block">
+            <div id="modelSel" class="ew-xmselect-tree"></div>
+          </div>
+        </div>
+      </div>
+      <div class="layui-col-md4">
+        <div class="layui-form-item">
+          <label class="layui-form-label layui-form-required">鎵�灞為」鐩�: </label>
+          <div class="layui-input-block cool-auto-complete">
+            <input name="hostId" class="layui-input" style="display: none">
+            <input id="hostId$" name="hostId$" 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="hostQueryByhostId" onkeyup="autoLoad(this.getAttribute('data-key'))">
+              <select class="cool-auto-complete-window-select" data-key="hostQueryByhostIdSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+              </select>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="layui-col-md12">
+        <div class="layui-form-item">
+          <label class="layui-form-label">璇︾粏鍦板潃</label>
+          <div class="layui-input-block">
+            <input name="addr" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�" class="layui-input">
+          </div>
+        </div>
+      </div>
+      <hr class="layui-bg-gray">
+      <div class="layui-col-md12" style="text-align: center">
+        <iframe id="mapIframe" src="map.html" scrolling="no" frameborder="0"
+                style="display: inline-block; width: 90%;height: 400px;margin: auto">
+        </iframe>
+      </div>
+
+    </div>
+    <hr class="layui-bg-gray">
+    <div class="layui-form-item text-right">
+      <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+      <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+    </div>
+  </form>
+</script>
+
+<!--鏍规嵁闇�姹傚嚭搴撻噺鍜屽疄闄呭嚭搴撻噺鍋氬姣旓紝灞曠ず涓嶅悓棰滆壊-->
+<script type="text/html" id="checkAnfme">
+  {{#  if(d.needQty < d.anfme){ }}
+  <span style="color: red; font-weight: bold;" >{{d.anfme}}</span>
+  {{#  } }}
+  {{#  if(d.needQty == d.anfme){ }}
+  <span style="font-weight: bold;" >{{d.anfme}}</span>
+  {{#  } }}
+
+  {{#  if(d.needQty > d.anfme){ }}
+  <span style="color: red;font-weight: bold;" >{{d.anfme}}</span>
+  {{#  } }}
+</script>
+
+<script type="text/html" id="checkNeedQty">
+  {{#  if(d.needQty < d.anfme){ }}
+  <span style="color: red; font-weight: bold;" >{{d.needQty}}</span>
+  {{#  } }}
+  {{#  if(d.needQty == d.anfme){ }}
+  <span style="font-weight: bold;" >{{d.needQty}}</span>
+  {{#  } }}
+  {{#  if(d.needQty > d.anfme){ }}
+  <span style="color: red;font-weight: bold;" >{{d.needQty}}</span>
+  {{#  } }}
+</script>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.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/tools/md5.js"></script>
+<script type="text/javascript" src="../../static/js/orderTable.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/order/out.js" charset="utf-8"></script>
+<!--<script type="text/template" id="takeSiteSelectTemplate">-->
+<!--    {{#each data}}-->
+<!--    <option value="{{siteId}}">{{desc}}</option>-->
+<!--    {{/each}}-->
+<!--</script>-->
+<!-- 椤圭洰缂栬緫绐楀彛 -->
+<script type="text/html" id="hostEditDialog">
+  <form id="hostEditForm" lay-filter="hostEditForm" class="layui-form model-form">
+    <input name="id" type="hidden"/>
+    <div class="layui-form-item">
+      <label class="layui-form-label layui-form-required">椤圭洰鍚嶇О:</label>
+      <div class="layui-input-block">
+        <input name="name" placeholder="璇疯緭鍏ョ被鍨嬪悕绉�" class="layui-input"
+               lay-verType="tips" lay-verify="required" required/>
+      </div>
+    </div>
+    <div class="layui-form-item text-right">
+      <button class="layui-btn" lay-filter="hostEditSubmit" lay-submit>淇濆瓨</button>
+      <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+    </div>
+  </form>
+</script>
+
+</body>
+
+<script type="text/template" id="batchStaSelectTpl">
+  <option value="">閫夋嫨鍑哄簱绔�</option>
+  {{#each list}}
+  <option value="{{this}}">{{this}}</option>
+  {{/each}}
+</script>
+
+</html>
+

--
Gitblit v1.9.1