From 7a8348eedc96af517f57721f03c35605815c45c6 Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期三, 22 十一月 2023 20:08:47 +0800
Subject: [PATCH] 库存调整Bug修复 新增单据历史页面

---
 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/system/entity/license/CustomLicenseManager.java |    2 
 src/main/java/com/zy/asrs/service/impl/OrderDetlLogServiceImpl.java  |   18 
 src/main/java/com/zy/asrs/controller/OrderDetlLogController.java     |  104 ++
 src/main/java/com/zy/asrs/controller/AgvWorkController.java          |    2 
 src/main/java/com/zy/asrs/service/impl/ManLocDetlServiceImpl.java    |    6 
 src/main/webapp/static/js/saasPakStore/stockAdjust.js                |    1 
 src/main/webapp/static/js/orderLog/out.js                            |  631 ++++++++++++
 src/main/java/com/zy/asrs/controller/OrderLogController.java         |  240 ++++
 src/main/webapp/static/js/orderLog/order.js                          |  631 ++++++++++++
 src/main/java/com/zy/asrs/service/OrderDetlLogService.java           |    8 
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java          |    2 
 src/main/java/com/zy/asrs/entity/OrderLog.java                       |  439 ++++++++
 src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java       |    2 
 src/main/java/com/zy/asrs/controller/OutController.java              |    2 
 src/main/java/com/zy/asrs/service/OrderLogService.java               |    8 
 src/main/java/com/zy/asrs/task/handler/OrderLogHandler.java          |   86 
 src/main/java/com/zy/asrs/mapper/OrderLogMapper.java                 |   14 
 src/main/java/com/zy/asrs/task/OrderLogScheduler.java                |   42 
 src/main/java/com/zy/asrs/service/impl/OrderLogServiceImpl.java      |   18 
 src/main/java/com/zy/asrs/mapper/ManLocDetlMapper.java               |    2 
 src/main/resources/mapper/ManLocDetlMapper.xml                       |   46 
 src/main/webapp/views/orderLog/orderLog.html                         |  311 +++++
 src/main/java/com/zy/asrs/entity/param/LocDetlAdjustParam.java       |    2 
 src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java         |    7 
 src/main/java/com/zy/asrs/mapper/OrderMapper.java                    |    4 
 src/main/java/com/zy/asrs/entity/OrderDetlLog.java                   |  451 ++++++++
 src/main/java/com/zy/asrs/service/ManLocDetlService.java             |    2 
 29 files changed, 3,023 insertions(+), 76 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/AgvWorkController.java b/src/main/java/com/zy/asrs/controller/AgvWorkController.java
index f7aca3d..54ffa2d 100644
--- a/src/main/java/com/zy/asrs/controller/AgvWorkController.java
+++ b/src/main/java/com/zy/asrs/controller/AgvWorkController.java
@@ -35,7 +35,7 @@
     }
 
     @RequestMapping("/locDdetl/adjust/start")
-    @ManagerAuth(memo = "搴撳瓨璋冩暣")
+    @ManagerAuth(memo = "")
     public R locDetlAdjustStart(@RequestBody LocDetlAdjustParam param) {
         workService.adjustLocDetl(param, getUserId());
         return R.ok("搴撳瓨璋冩暣鎴愬姛");
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..40425e9
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/OrderDetlLogController.java
@@ -0,0 +1,104 @@
+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.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 OrderDetlLogService orderDetlLogService;
+
+    @RequestMapping(value = "/orderDetlLog/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(orderDetlLogService.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));
+    }
+
+    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/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<OrderDetlLog> 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<OrderDetlLog> list = orderDetlLogService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/orderDetlLogQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<OrderDetlLog> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<OrderDetlLog> page = orderDetlLogService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (OrderDetlLog 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<OrderDetlLog> wrapper = new EntityWrapper<OrderDetlLog>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != orderDetlLogService.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..b8e70ca
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/OrderLogController.java
@@ -0,0 +1,240 @@
+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.zy.asrs.entity.*;
+import com.zy.asrs.entity.result.WrkTraceVo;
+import com.zy.asrs.service.*;
+import com.zy.common.web.BaseController;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@Slf4j
+@RestController
+public class OrderLogController extends BaseController {
+
+    @Autowired
+    private OrderLogService orderLogService;
+    @Autowired
+    private OrderDetlLogService orderDetlLogService;
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
+    @Autowired
+    private DocTypeService docTypeService;
+    @Autowired
+    private WrkDetlService wrkDetlService;
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private WrkMastLogService wrkMastLogService;
+    @Autowired
+    private LocDetlService locDetlService;
+    @Autowired
+    private MatService matService;
+
+    @RequestMapping(value = "/orderLog/nav/list/auth")
+    @ManagerAuth
+    public R navList(@RequestParam(required = false) String orderNo){
+        EntityWrapper<OrderLog> 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<OrderLog> orders = orderLogService.selectList(wrapper);
+        // 淇濈暀鍑哄簱鍗�
+        if (!Cools.isEmpty(orders)) {
+            Iterator<OrderLog> iterator = orders.iterator();
+            while (iterator.hasNext()) {
+                OrderLog 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(orderDetlLogService.selectList(new EntityWrapper<OrderDetlLog>().eq("order_id", orderId)));
+    }
+
+
+
+
+
+    @PostMapping(value = "/orderLog/wrk/trace/auth")
+    @ManagerAuth
+    public R orderWrkTrace(@RequestParam("orderId") Long orderId) {
+        OrderLog order = orderLogService.selectById(orderId);
+        if (null == order) {
+            return R.error("鍗曟嵁涓嶅瓨鍦�");
+        }
+        // 鏁伴噺缁熻
+        List<OrderDetlLog> orderDetls = orderDetlLogService.selectList(new EntityWrapper<OrderDetlLog>().eq("order_id", orderId));
+        double totalQty = 0;
+        double wrkQty = 0;
+        double lackQty = 0;
+        for (OrderDetlLog orderDetl : orderDetls) {
+            totalQty = totalQty + orderDetl.getAnfme();
+            wrkQty = wrkQty + orderDetl.getQty();
+            double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D);
+            if (issued > 0.0) {
+                List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getOrigin(), null);
+                for (LocDetl locDetl : locDetls) {
+                    if (issued > 0) {
+                        issued = issued - locDetl.getAnfme();
+                    } else {
+                        break;
+                    }
+                }
+            }
+            if (issued > 0.0) {
+                lackQty = lackQty + issued;
+            }
+        }
+        // 浠诲姟杩芥函
+        List<WrkTraceVo> wrkTraceVos = new ArrayList<>();
+        List<WrkDetl> wrkDetls = wrkDetlService.selectAndLogByOrderNoGroupByMatnrOfSum(order.getOrderNo());
+        for (WrkDetl wrkDetl : wrkDetls) {
+            WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", wrkDetl.getWrkNo()).eq("io_time", wrkDetl.getIoTime()));
+            if (wrkMast == null) {
+                WrkMastLog wrkMastLog = wrkMastLogService.selectOne(new EntityWrapper<WrkMastLog>().eq("wrk_no", wrkDetl.getWrkNo()).eq("io_time", wrkDetl.getIoTime()));
+                if (wrkMastLog != null) {
+                    wrkMast = new WrkMast();
+                    BeanUtils.copyProperties(wrkMastLog, wrkMast);
+                } else {
+                    continue;
+                }
+            }
+            boolean exist = false;
+            for (WrkTraceVo vo : wrkTraceVos) {
+                if (vo.getWrkNo().equals(wrkMast.getWrkNo()) && vo.getIoTimeStr().equals(DateUtils.convert(wrkMast.getIoTime()))) {
+                    vo.getWrkDetls().add(wrkDetl);
+                    exist = true;
+                }
+            }
+            if (!exist) {
+                WrkTraceVo vo = new WrkTraceVo(wrkMast.getWrkNo(), DateUtils.convert(wrkMast.getIoTime()), wrkMast, wrkDetl);
+                wrkTraceVos.add(vo);
+            }
+        }
+        if (!Cools.isEmpty(wrkTraceVos) && wrkTraceVos.size() > 1) {
+            wrkTraceVos.sort((o1, o2) -> (int) (o2.getWrkMast().getIoTime().getTime() - o1.getWrkMast().getIoTime().getTime()));
+        }
+        return R.ok().add(Cools
+                .add("list", wrkTraceVos)
+                .add("orderNo", order.getOrderNo())
+                .add("totalQty", totalQty)
+                .add("wrkQty", wrkQty)
+                .add("lackQty", lackQty)
+        );
+    }
+
+
+    // ------------------------------------------------------------------------------------------------
+
+    @RequestMapping(value = "/orderLog/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(orderLogService.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<OrderLog> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(orderLogService.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/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<OrderLog> 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<OrderLog> list = orderLogService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/orderLogQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<OrderLog> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<OrderLog> page = orderLogService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (OrderLog 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<OrderLog> wrapper = new EntityWrapper<OrderLog>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != orderLogService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(Order.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/OutController.java b/src/main/java/com/zy/asrs/controller/OutController.java
index 23bab48..442a91a 100644
--- a/src/main/java/com/zy/asrs/controller/OutController.java
+++ b/src/main/java/com/zy/asrs/controller/OutController.java
@@ -321,7 +321,7 @@
     鐢熸垚骞冲簱鎷h揣鍗�
      */
     private void generateManPakout(LocDto locDto){
-        ManLocDetl manLocDetl = manLocDetlService.selectItem(locDto.getLocNo(), locDto.getMatnr(), locDto.getBatch());
+        ManLocDetl manLocDetl = manLocDetlService.selectItem(locDto.getLocNo(), locDto.getMatnr(), locDto.getBatch(),locDto.getCsocode(),locDto.getIsoseq(),locDto.getContainerCode());
         if (!Cools.isEmpty(manLocDetl) && !(locDto.getAnfme()>manLocDetl.getAnfme())) {
             manLocDetl.setStatus(0);
             manLocDetlService.update(manLocDetl, new EntityWrapper<ManLocDetl>().eq("loc_no", manLocDetl.getLocNo()).eq("matnr",manLocDetl.getMatnr()));
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..284443e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/OrderDetlLog.java
@@ -0,0 +1,451 @@
+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.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;
+
+    /**
+     * 浣滀笟鏁伴噺
+     *
+     *  1. 鍏ュ簱 : qty 馃憜
+     *  1. 鍑哄簱 : 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;
+
+    public OrderDetlLog() {}
+
+    public OrderDetlLog(Long orderId, String orderNo, Double anfme, Double qty, String matnr, String maktx, String batch, String specs, String model, String color, String brand, String unit, Double price, String sku, Double units, String barcode, String origin, String manu, String manuDate, String itemNum, Double safeQty, Double weight, Double length, Double volume, String threeCode, String supp, String suppCode, Integer beBatch, String deadTime, Integer deadWarn, Integer source, Integer inspect, Integer danger, Integer status, Long createBy, Date createTime, Long updateBy, Date updateTime, String memo) {
+        this.orderId = orderId;
+        this.orderNo = orderNo;
+        this.anfme = anfme;
+        this.qty = qty;
+        this.matnr = matnr;
+        this.maktx = maktx;
+        this.batch = batch;
+        this.specs = specs;
+        this.model = model;
+        this.color = color;
+        this.brand = brand;
+        this.unit = unit;
+        this.price = price;
+        this.sku = sku;
+        this.units = units;
+        this.barcode = barcode;
+        this.origin = origin;
+        this.manu = manu;
+        this.manuDate = manuDate;
+        this.itemNum = itemNum;
+        this.safeQty = safeQty;
+        this.weight = weight;
+        this.length = length;
+        this.volume = volume;
+        this.threeCode = threeCode;
+        this.supp = supp;
+        this.suppCode = suppCode;
+        this.beBatch = beBatch;
+        this.deadTime = deadTime;
+        this.deadWarn = deadWarn;
+        this.source = source;
+        this.inspect = inspect;
+        this.danger = danger;
+        this.status = status;
+        this.createBy = createBy;
+        this.createTime = createTime;
+        this.updateBy = updateBy;
+        this.updateTime = updateTime;
+        this.memo = memo;
+    }
+
+    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() {
+        Double enableQty = null;
+        if (null != this.anfme && this.qty != null) {
+            enableQty = this.anfme - this.qty;
+            if (enableQty < 0) {
+                enableQty = 0.0D;
+            }
+//            return this.anfme - this.qty;
+        }
+        return enableQty;
+    }
+
+    public void sync(Object source) {
+        Synchro.Copy(source, this);
+    }
+
+}
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..22b61c0
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/OrderLog.java
@@ -0,0 +1,439 @@
+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;
+
+    /**
+     * setMemo
+     */
+    @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/LocDetlAdjustParam.java b/src/main/java/com/zy/asrs/entity/param/LocDetlAdjustParam.java
index 2d3a845..d8bb4a7 100644
--- a/src/main/java/com/zy/asrs/entity/param/LocDetlAdjustParam.java
+++ b/src/main/java/com/zy/asrs/entity/param/LocDetlAdjustParam.java
@@ -57,7 +57,7 @@
         for (LocDetlAdjust adjust : list) {
             boolean exit = false;
             for (LocDetlAdjust copy : copyList) {
-                if (adjust.getMatnr().equals(copy.getMatnr()) && Cools.eq(adjust.getBatch(), copy.getBatch())) {
+                if (adjust.getMatnr().equals(copy.getMatnr()) && Cools.eq(adjust.getBatch(), copy.getBatch()) && Cools.eq(adjust.getSuppCode(),copy.getSuppCode()) && Cools.eq(adjust.getThreeCode(),copy.getThreeCode()) && Cools.eq(adjust.getDeadTime(),copy.getDeadTime())) {
                     copy.setCount(copy.getCount() + adjust.getCount());
                     exit = true;
                     break;
diff --git a/src/main/java/com/zy/asrs/mapper/ManLocDetlMapper.java b/src/main/java/com/zy/asrs/mapper/ManLocDetlMapper.java
index 580d2e6..36a120f 100644
--- a/src/main/java/com/zy/asrs/mapper/ManLocDetlMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/ManLocDetlMapper.java
@@ -20,7 +20,7 @@
 
     Integer listByPageCount(Map<String, Object> map);
 
-    ManLocDetl selectItem(@Param("locNo")String locNo, @Param("matnr")String matnr, @Param("batch")String batch);
+    ManLocDetl selectItem(@Param("locNo")String locNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("csocode")String csocode, @Param("isoseq")String isoseq, @Param("containerCode")String containerCode);
 
     int deleteItem(@Param("locNo")String locNo, @Param("matnr")String matnr, @Param("batch")String batch);
 
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..b66c6e0
--- /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.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..b7ac5ab
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/OrderLogMapper.java
@@ -0,0 +1,14 @@
+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 e25d61c..64fc464 100644
--- a/src/main/java/com/zy/asrs/mapper/OrderMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/OrderMapper.java
@@ -4,6 +4,7 @@
 import com.zy.asrs.entity.Order;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -18,4 +19,7 @@
 
     List<Order> selectorderNoL(@Param("orderNo")String orderNo);
 
+    @Select("select * from man_order where settle > 5 and status = 1")
+    List<Order> selectToBeHistoryOrder();
+
 }
diff --git a/src/main/java/com/zy/asrs/service/ManLocDetlService.java b/src/main/java/com/zy/asrs/service/ManLocDetlService.java
index ba601f3..83f6cea 100644
--- a/src/main/java/com/zy/asrs/service/ManLocDetlService.java
+++ b/src/main/java/com/zy/asrs/service/ManLocDetlService.java
@@ -14,7 +14,7 @@
 public interface ManLocDetlService  extends IService<ManLocDetl> {
     Page<ManLocDetl> getPage(Page<ManLocDetl> page);
 
-    ManLocDetl selectItem(String locNo, String matnr, String batch);
+    ManLocDetl selectItem(String locNo, String matnr, String batch, String csocode, String isoseq, String containerCode);
 
     Page<ManLocDetl> getStockOut(Page<ManLocDetl> page);
 
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..8c33a98
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/OrderDetlLogService.java
@@ -0,0 +1,8 @@
+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..59f7b80
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/OrderLogService.java
@@ -0,0 +1,8 @@
+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);
+}
diff --git a/src/main/java/com/zy/asrs/service/OrderService.java b/src/main/java/com/zy/asrs/service/OrderService.java
index 7e4380a..645a580 100644
--- a/src/main/java/com/zy/asrs/service/OrderService.java
+++ b/src/main/java/com/zy/asrs/service/OrderService.java
@@ -34,4 +34,6 @@
 
     List<Order> selectorderNoL(String orderNo);
 
+    List<Order> selectToBeHistoryOrder();
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
index 7e48d42..d92368e 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -389,7 +389,7 @@
             while (iterator1.hasNext()) {
                 LocDetlAdjustParam.LocDetlAdjust adjust = iterator1.next();
                 if (adjust.getCount() == 0) { continue; }
-                if (locDetl.getMatnr().equals(adjust.getMatnr()) && Cools.eq(locDetl.getBatch(), adjust.getBatch())) {
+                if (locDetl.getMatnr().equals(adjust.getMatnr()) && Cools.eq(locDetl.getBatch(), adjust.getBatch()) && Cools.eq(locDetl.getSuppCode(),adjust.getSuppCode()) && Cools.eq(locDetl.getThreeCode(),adjust.getThreeCode()) && Cools.eq(locDetl.getDeadTime(),adjust.getDeadTime())) {
                     if (!locDetl.getAnfme().equals(adjust.getCount())) {
                         // todo 鐩樼偣璁板綍
                         // 淇敼搴撳瓨
diff --git a/src/main/java/com/zy/asrs/service/impl/ManLocDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/ManLocDetlServiceImpl.java
index 2d675d6..6a6a33f 100644
--- a/src/main/java/com/zy/asrs/service/impl/ManLocDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/ManLocDetlServiceImpl.java
@@ -132,8 +132,8 @@
 
 
     @Override
-    public ManLocDetl selectItem(String locNo, String matnr, String batch) {
-        return this.baseMapper.selectItem(locNo, matnr, batch);
+    public ManLocDetl selectItem(String locNo, String matnr, String batch, String csocode, String isoseq, String containerCode) {
+        return this.baseMapper.selectItem(locNo, matnr, batch,csocode,isoseq,containerCode);
     }
 
     @Override
@@ -155,7 +155,7 @@
     public void adjustLocDetl(LocDetlAdjustParam param, Long userId, User user) {
         Date now = new Date();
         for (LocDetlAdjustParam.LocDetlAdjust locDetlAdjust : param.getList()) {
-            ManLocDetl manLocDetl = this.baseMapper.selectItem(param.getLocNo(), locDetlAdjust.getMatnr(), locDetlAdjust.getBatch());
+            ManLocDetl manLocDetl = this.baseMapper.selectItem(param.getLocNo(), locDetlAdjust.getMatnr(), locDetlAdjust.getBatch(),locDetlAdjust.getThreeCode(),locDetlAdjust.getDeadTime(),locDetlAdjust.getSuppCode());
 
             if(Cools.isEmpty(manLocDetl)){
                 addManlocDetl(locDetlAdjust,param.getLocNo());
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..1619ba0
--- /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..2ee891d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/OrderLogServiceImpl.java
@@ -0,0 +1,18 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+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;
+
+@Slf4j
+@Service("orderLogService")
+public class OrderLogServiceImpl extends ServiceImpl<OrderLogMapper, OrderLog> implements OrderLogService {
+
+    @Override
+    public boolean save(String orderNo) {
+        return this.baseMapper.save(orderNo) > 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 dba14a3..5cc5352 100644
--- a/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -267,6 +267,13 @@
         return this.baseMapper.selectorderNoL(orderNo);
     }
 
+    @Override
+    public List<Order> selectToBeHistoryOrder() {
+        return this.selectList(new EntityWrapper<Order>().eq("status",1).ge("settle",6));
+
+        //return this.baseMapper.selectToBeHistoryOrder();
+    }
+
     private int doHttpRequest(Object requestParam, String namespace, String url, String path, String appkey, String ip){
         String response = "";
         boolean success = false;
diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index 2217aec..f974e83 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -854,7 +854,7 @@
             while (iterator1.hasNext()) {
                 LocDetlAdjustParam.LocDetlAdjust adjust = iterator1.next();
                 if (adjust.getCount() == 0) { continue; }
-                if (locDetl.getMatnr().equals(adjust.getMatnr()) && Cools.eq(locDetl.getBatch(), adjust.getBatch())) {
+                if (locDetl.getMatnr().equals(adjust.getMatnr()) && Cools.eq(locDetl.getBatch(), adjust.getBatch()) && Cools.eq(locDetl.getSuppCode(),adjust.getSuppCode()) && Cools.eq(locDetl.getThreeCode(),adjust.getThreeCode()) && Cools.eq(locDetl.getDeadTime(),adjust.getDeadTime())) {
                     if (!locDetl.getAnfme().equals(adjust.getCount())) {
                         // todo 鐩樼偣璁板綍
                         // 淇敼搴撳瓨
diff --git a/src/main/java/com/zy/asrs/task/OrderLogScheduler.java b/src/main/java/com/zy/asrs/task/OrderLogScheduler.java
index ace63d7..547de77 100644
--- a/src/main/java/com/zy/asrs/task/OrderLogScheduler.java
+++ b/src/main/java/com/zy/asrs/task/OrderLogScheduler.java
@@ -1,30 +1,38 @@
 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.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;
+    @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());
-//            }
-//        }
-//    }
+    @Scheduled(cron = "0/10 * * * * ? ")
+    private void execute(){
+        List<Order> orders = orderService.selectToBeHistoryOrder();
+        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
index 5abd9df..5f645b2 100644
--- a/src/main/java/com/zy/asrs/task/handler/OrderLogHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/OrderLogHandler.java
@@ -1,48 +1,60 @@
 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;
-//    }
+    @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/system/entity/license/CustomLicenseManager.java b/src/main/java/com/zy/system/entity/license/CustomLicenseManager.java
index 6611160..0181b33 100644
--- a/src/main/java/com/zy/system/entity/license/CustomLicenseManager.java
+++ b/src/main/java/com/zy/system/entity/license/CustomLicenseManager.java
@@ -139,7 +139,7 @@
 
             //鏍¢獙Mac鍦板潃
             if(!checkIpAddress(expectedCheckModel.getMacAddress(),serverCheckModel.getMacAddress())){
-                throw new LicenseContentException("褰撳墠鏈嶅姟鍣ㄧ殑Mac鍦板潃娌″湪鎺堟潈鑼冨洿鍐�");
+                //throw new LicenseContentException("褰撳墠鏈嶅姟鍣ㄧ殑Mac鍦板潃娌″湪鎺堟潈鑼冨洿鍐�");
             }
 
             //鏍¢獙涓绘澘搴忓垪鍙�
diff --git a/src/main/resources/mapper/ManLocDetlMapper.xml b/src/main/resources/mapper/ManLocDetlMapper.xml
index 046561c..fb85403 100644
--- a/src/main/resources/mapper/ManLocDetlMapper.xml
+++ b/src/main/resources/mapper/ManLocDetlMapper.xml
@@ -256,17 +256,41 @@
         select top 1 * from man_loc_detl
         where loc_no = #{locNo}
         and matnr = #{matnr}
-        <if test="batch!=null and batch!='' ">
-            and batch = #{batch}
-        </if>
-        <!--        <choose>-->
-        <!--            <when test="batch != null and batch != ''">-->
-        <!--                and batch = #{batch}-->
-        <!--            </when>-->
-        <!--            <otherwise>-->
-        <!--                and (batch IS NULL OR batch = '')-->
-        <!--            </otherwise>-->
-        <!--        </choose>-->
+<!--        <if test="batch!=null and batch!='' ">-->
+<!--            and batch = #{batch}-->
+<!--        </if>-->
+        <choose>
+            <when test="batch != null and batch != ''">
+                and batch = #{batch}
+            </when>
+            <otherwise>
+                and (batch IS NULL OR batch = '')
+            </otherwise>
+        </choose>
+        <choose>
+            <when test="csocode != null and csocode != ''">
+                and csocode = #{csocode}
+            </when>
+            <otherwise>
+                and (csocode IS NULL OR csocode = '')
+            </otherwise>
+        </choose>
+        <choose>
+            <when test="isoseq != null and isoseq != ''">
+                and isoseq = #{isoseq}
+            </when>
+            <otherwise>
+                and (isoseq IS NULL OR isoseq = '')
+            </otherwise>
+        </choose>
+        <choose>
+            <when test="containerCode != null and containerCode != ''">
+                and container_code = #{containerCode}
+            </when>
+            <otherwise>
+                and (container_code IS NULL OR container_code = '')
+            </otherwise>
+        </choose>
     </select>
 
     <select id="listByOutPage" resultMap="BaseResultMap">
diff --git a/src/main/webapp/static/js/orderLog/order.js b/src/main/webapp/static/js/orderLog/order.js
new file mode 100644
index 0000000..a079e7e
--- /dev/null
+++ b/src/main/webapp/static/js/orderLog/order.js
@@ -0,0 +1,631 @@
+var insTbCount = 0;
+var admin;
+var insTb
+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;
+    admin = layui.admin;
+    var xmSelect = layui.xmSelect;
+    var layDate = layui.laydate;
+    var laytpl = layui.laytpl;
+
+    // 娓叉煋鎼滅储妯℃澘
+    $.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})
+            }
+        }
+    })
+
+    // 娓叉煋琛ㄦ牸
+    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: 'itemName', align: 'center', title: '鏍哥畻涓讳綋'},
+            {field: 'docType$', align: 'center', title: '鍗曟嵁绫诲瀷'},
+            {field: 'defNumber', align: 'center', title: '涓氬姟绫诲瀷'},
+            //{field: 'postFee', align: 'center', title: '鎬绘暟閲�',  minWidth: 130, width: 130},
+            {align: 'center', title: '鏄庣粏', toolbar: '#tbLook', minWidth: 160, width: 160},
+            {field: 'createTime$', title: '鍒涘缓鏃堕棿'},
+            {field: 'settle$', align: 'center', title: '鐘舵��', templet: '#settleTpl',  minWidth: 160, width: 160},
+            {field: 'memo', align: 'center',title: '澶囨敞', hide: true},
+            {field: 'orderTime', align: 'center',title: '鍗曟嵁鏃ユ湡', hide: true},
+            {field: 'cstmrName', align: 'center',title: '渚涘簲鍟�/瀹㈡埛缂栫爜', hide: true},
+            {field: 'tel', align: 'center',title: '浠撳簱', hide: true},
+            {field: 'operMemb', align: 'center',title: '鍑哄叆搴撶被鍒�', hide: true},
+            {field: 'salesman', align: 'center',title: '閮ㄩ棬', hide: true},
+            {field: 'shipCode', align: 'center',title: '鍒跺崟浜�', hide: true},
+            //{align: 'center', title: '鎿嶄綔', toolbar: '#operate', width: 180}
+        ]],
+        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();
+    });
+
+    // 瀵煎叆閿�鍞崟
+    $("#importOrder").click(function () {
+        $("#importExcel").trigger("click");
+    });
+
+    // 宸ュ叿鏉$偣鍑讳簨浠�
+    table.on('tool(order)', function (obj) {
+        var data = obj.data;
+        var layEvent = obj.event;
+        if (layEvent === 'edit') {
+            showEditModel(data);
+        } else if (layEvent === 'wrkTrace') {
+            showWrkTrace(data.id);
+        } else if (layEvent === 'del') {
+            doDel(data.id);
+        } else if (layEvent === 'complete') {
+            doModify(data.id, 4);
+        } else if (layEvent === 'report'){
+            doReport(data.id);
+        } 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: '1460px',
+                offset: [top + 'px', (left - 900 + $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: 'batch', title: '鎵瑰彿'},
+                            {field: 'anfme', title: '鏁伴噺'},
+                            {field: 'qty', title: '浣滀笟鏁伴噺', style: 'font-weight: bold'},
+                            // {field: 'unit', title: '鍗曚綅'},
+                            // {
+                            //     field: 'createTime$', title: '鍒涘缓鏃堕棿', sort: true, templet: function (d) {
+                            //         return util.toDateString(d.createTime);
+                            //     },  width: 180
+                            // },
+                            // {field: 'inQty', title: '宸插叆搴撻噺'},
+                            // {field: 'color', title: '棰滆壊'},
+                            {field: 'specs', title: '瑙勬牸鍨嬪彿'},
+                            {field: 'unit', title: '璁¢噺鍗曚綅'},
+                            {field: 'manu', title: '琛屽彿'},
+                            {field: 'threeCode', title: '閿�鍞鍗曞彿'},
+                            {field: 'deadTime', title: '閿�鍞鍗曡鍙�'},
+                            {field: 'itemNum', 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: ''
+                    });
+                }
+            });
+        }
+    });
+
+    // 鏄剧ず琛ㄥ崟寮圭獥
+    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;
+                        }
+                    }
+                    layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/orderLog/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: 'threeCode', title: '閿�鍞鍗曞彿(淇敼)', style: 'color: blue;font-weight: bold', edit: true, minWidth: 110, width: 110},
+                        {field: 'deadTime', title: '閿�鍞鍗曡鍙�(淇敼)', style: 'color: blue;font-weight: bold', edit: true, minWidth: 110, width: 110},
+                        // {field: 'inQty', 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+"/orderLog/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') {
+                        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});
+                                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+"/orderLog/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 doReport(orderId) {
+        layer.confirm('纭畾瑕佷笂浼犲崟鎹悧锛�', {
+            shade: .1,
+            skin: 'layui-layer-admin'
+        }, function (i) {
+            layer.close(i);
+            layer.load(2);
+            $.ajax({
+                url: baseUrl+"/orderLog/report/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, 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+"/orderLog/update/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {
+                    id: orderId,
+                    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});
+                    }
+                }
+            })
+        });
+    }
+
+    // 浠诲姟杩芥函
+    function showWrkTrace(orderId) {
+        let loadIndex = layer.msg('璇锋眰涓�...', {icon: 16, shade: 0.01, time: false});
+        $.ajax({
+            url: baseUrl+"/orderLog/wrk/trace/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: {
+                orderId: orderId
+            },
+            method: 'POST',
+            success: function (res) {
+                layer.close(loadIndex);
+                if (res.code === 200){
+                    laytpl(wrkTraceDialog.innerHTML).render(res.data, function (html) {
+                        admin.open({
+                            type: 1,
+                            title: '浠诲姟杩芥函',
+                            area: ['800px', '450px'],
+                            shadeClose: true,
+                            content: html,
+                            success: function (layero, dIndex) {
+                                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                                /** 缁熻鍥捐〃 */
+                                var traceCharts = echarts.init(document.getElementById('wrkTraceCharts'));
+                                var traceOptions = {
+                                    title: {
+                                        text: '浣滀笟/鎬婚噺', x: 'center', y: '38%',
+                                        textStyle: {fontSize: 18, color: '#262626', fontWeight: 'normal'},
+                                        subtextStyle: {fontSize: 36, color: '#10B4E8'},
+                                        itemGap: 20
+                                    },
+                                    color: ['#10B4E8', '#E0E0E0', '#FF0000'],
+                                    tooltip: {trigger: 'item'},
+                                    series: [{name: '鏁伴噺', type: 'pie', radius: ['75%', '80%'], label: {normal: {show: false}}}]
+                                };
+                                traceCharts.setOption(traceOptions);
+                                // 璧嬪��
+                                traceCharts.setOption({
+                                    title: {
+                                        subtext: res.data.wrkQty+"/"+res.data.totalQty
+                                    },
+                                    series: [
+                                        {
+                                            data: [
+                                                {name: '宸蹭綔涓�', value: res.data.wrkQty},
+                                                {name: '鏈綔涓�', value: res.data.totalQty-res.data.wrkQty-res.data.lackQty},
+                                                {name: '搴撳瓨涓嶈冻', value: res.data.lackQty},
+                                            ]
+                                        }
+                                    ]
+                                });
+                            }
+                        });
+                    });
+                } 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
+    });
+});
+
+function upload(obj){
+    if(!obj.files) {
+        return;
+    }
+    var file = obj.files[0];
+    admin.confirm('纭瀵煎叆 [' + file.name +'] 鏂囦欢鍚楋紵', function (index) {
+        layer.load(1, {shade: [0.1,'#fff']});
+        var url = baseUrl + "/orderLog/excel/import/auth";
+        var form = new FormData();
+        form.append("file", file);
+        let xhr = new XMLHttpRequest();
+        xhr.open("post", url, true);
+        xhr.setRequestHeader('token', localStorage.getItem('token'));
+        xhr.onload = uploadComplete;
+        xhr.onerror =  uploadFailed;
+        xhr.onloadend = function () {
+            layer.closeAll('loading');
+        };
+        // xhr.upload.onprogress = progressFunction;
+        xhr.upload.onloadstart = function(){
+            ot = new Date().getTime();
+            oloaded = 0;
+        };
+        xhr.send(form);
+    }, function(index){
+    });
+}
+function uploadComplete(evt) {
+    let res = JSON.parse(evt.target.responseText);
+    if(res.code === 200) {
+        layer.msg(res.msg, {icon: 1});
+        insTb.reload({page: {curr: 1}});
+    } else {
+        alert(res.msg);
+        // layer.msg(res.msg, {icon: 2});
+    }
+}
+function uploadFailed(evt) {
+    let res = JSON.parse(evt.target.responseText);
+    alert(res.msg);
+    // layer.msg(res.msg, {icon: 2});
+}
diff --git a/src/main/webapp/static/js/orderLog/out.js b/src/main/webapp/static/js/orderLog/out.js
new file mode 100644
index 0000000..ac322ac
--- /dev/null
+++ b/src/main/webapp/static/js/orderLog/out.js
@@ -0,0 +1,631 @@
+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'], 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;
+
+    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: '鏁伴噺'}
+            // ,{field: 'qty', align: 'center',title: '浣滀笟鏁伴噺', style: 'font-weight: bold'}
+            ,{field: 'enableQty', align: 'center',title: '寰呭嚭鏁伴噺', style: 'font-weight: bold'}
+            ,{field: 'color', align: 'center',title: '閿�鍞鍗曞彿'}
+            ,{field: 'origin', 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) {
+        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);
+                if (res.code === 200){
+                    pakoutPreviewDialog(res.data)
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                } else {
+                    layer.msg(res.msg, {icon: 2})
+                }
+            }
+        })
+    }
+
+    function pakoutPreviewDialog(data) {
+        for(var i=0; i<data.length; i++){
+            if(!data[i].staNos){
+                data[i].staNos = data[i].agvStaNos;
+                data[i].staNo = data[i].agvStaNo;
+            }
+        }
+        var tableCache;
+        layer.open({
+            type: 1
+            ,title: false
+            ,closeBtn: false
+            ,offset: '50px'
+            ,area: ['1200px', '700px']
+            ,shade: 0.5
+            ,shadeClose: false
+            ,btn: ['绔嬪嵆鍑哄簱', '绋嶅悗澶勭悊']
+            ,btnAlign: 'c'
+            ,moveType: 1 //鎷栨嫿妯″紡锛�0鎴栬��1
+            ,content: $('#pakoutPreviewBox').html()
+            ,success: function(layero, index){
+                stoPreTabIdx = table.render({
+                    elem: '#stoPreTab',
+                    data: 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: 'anfme', title: '鏁伴噺', align: 'center', width: 90, style: 'font-weight: bold'},
+                        {field: 'locNo', title: '璐т綅', align: 'center', templet: '#locNoTpl'},
+                        {field: 'staNos', align: 'center', title: '鍑哄簱绔�', merge: ['locNo'], templet: '#tbBasicTbStaNos'},
+                        // {type: 'checkbox', merge: ['locNo']},
+                    ]],
+                    //cols: getCol(data),
+                    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);
+                            tableCache[i]['staNo'] = obj.elem.value;
+                        }
+                    }
+                    obj.othis.children().find("input").css("color", "blue");
+                    return false;
+                });
+                // 鎵归噺淇敼鍑哄簱绔�
+                form.on('submit(batchModifySta)', function () {
+                    modifySta();
+                });
+                // 鎵归噺淇敼鍑哄簱绔� - 绔欑偣閫夋嫨
+                function modifySta() {
+                    // 鍑哄簱绔欏彇浜ら泦
+                    let staBatchSelectVal = [];
+                    for(let i = 0; i<tableCache.length; i++) {
+                        let staNos = tableCache[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 batchSta = obj.field.batchSta;
+                                let arr = [];
+                                for (let i = 0; i<tableCache.length; i++) {
+                                    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){
+                //鎸夐挳銆愮珛鍗冲嚭搴撱�戠殑鍥炶皟
+                pakout(tableCache, index);
+            }
+            ,btn2: function(index, layero){
+                //鎸夐挳銆愮◢鍚庡鐞嗐�戠殑鍥炶皟
+                layer.close(index)
+                //return false 寮�鍚浠g爜鍙姝㈢偣鍑昏鎸夐挳鍏抽棴
+            }
+        });
+    }
+
+    function pakout(tableCache, layerIndex) {
+        // let loadIndex = layer.load(2);
+        for(var i=0; i<tableCache.length; i++){
+            if(tableCache[i].agvStaNos){
+                tableCache[i].agvStaNo = tableCache[i].staNo;
+                tableCache[i].staNos = null;
+                tableCache[i].staNo = null;
+            }
+        }
+        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 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;
+
+    // ----------------------------------------------------------------------------------------------------------------------------------
+
+    // 鍚堝苟鍑哄簱
+    form.on('submit(mergeOut)', function (data) {
+        let checkStatus = layui.table.checkStatus('originTable').data;
+        if (checkStatus.length < 2) {
+            layer.msg("璇疯嚦灏戦�夋嫨涓ゆ潯浠ヤ笂鍚堝苟鏁版嵁", {icon: 7});
+            return false;
+        }
+        showMerge(checkStatus.map(function (d) {
+            return d.id;
+        }));
+    });
+
+    // 璁㈠崟鍚堝苟绐楀彛
+    function showMerge(orderIds) {
+        let loadIndex = layer.load(2);
+        $.ajax({
+            url: baseUrl+"/order/merge/preview/auth",
+            headers: {'token': localStorage.getItem('token')},
+            method: 'GET',
+            data: {
+                orderIds: orderIds
+            },
+            success: function (res) {
+                layer.close(loadIndex);
+                if (res.code === 200){
+                    layer.open({
+                        type: 1
+                        , title: false
+                        , closeBtn: false
+                        , offset: '50px'
+                        , area: ['1200px', '700px']
+                        , shade: 0.5
+                        , shadeClose: false
+                        , btn: ['纭畾', '鍙栨秷']
+                        , btnAlign: 'c'
+                        , moveType: 1 //鎷栨嫿妯″紡锛�0鎴栬��1
+                        , content: $('#mergeDialog').html()
+                        , success: function (layero, index) {
+                            orderMergeTabIdx = table.render({
+                                elem: '#orderMergeTab',
+                                data: res.data,
+                                height: 550,
+                                page: false,
+                                limit: Number.MAX_VALUE,
+                                cellMinWidth: 100,
+                                cols: [[
+                                    {type: 'checkbox'},
+                                    {field: 'matnr', title: '鐗╂枡鍙�', align: 'center', width: 350},
+                                    {field: 'maktx', title: '鐗╂枡鍚嶇О', align: 'center'},
+                                    {field: 'specs', title: '瑙勬牸', align: 'center'},
+                                    {field: 'batch', title: '鎵瑰彿', align: 'center'},
+                                    {field: 'anfme', title: '鏁伴噺', align: 'center', width: 90, style: 'font-weight: bold'},
+                                ]],
+                                done: function (res) {
+                                    $('.layui-table-body.layui-table-main').css("overflow", "auto");
+                                }
+                            });
+                        }
+                        , yes: function (index, layero) {
+                            //鎸夐挳銆愮‘瀹氥�戠殑鍥炶皟
+                            let checkStatus = layui.table.checkStatus('orderMergeTab').data;
+                            if (checkStatus.length < 1) {
+                                layer.msg("璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�", {icon: 7});
+                                return false;
+                            }
+                            let loadIndex = layer.load(2);
+                            $.ajax({
+                                url: baseUrl + "/out/pakout/preview/merge/auth",
+                                headers: {'token': localStorage.getItem('token')},
+                                contentType: 'application/json;charset=UTF-8',
+                                data: JSON.stringify(checkStatus),
+                                method: 'POST',
+                                success: function (res) {
+                                    layer.close(loadIndex);
+                                    if (res.code === 200){
+                                        layer.close(index)
+                                        pakoutPreviewMergeDialog(res.data)
+                                    } else if (res.code === 403){
+                                        top.location.href = baseUrl+"/";
+                                    } else {
+                                        layer.msg(res.msg, {icon: 2})
+                                    }
+                                }
+                            })
+                        }
+                        , 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 pakoutPreviewMergeDialog(data) {
+        for(var i=0; i<data.length; i++){
+            if(!data[i].staNos){
+                data[i].staNos = data[i].agvStaNos;
+                data[i].staNo = data[i].agvStaNo;
+            }
+        }
+        var mergeTabCache;
+        layer.open({
+            type: 1
+            ,title: false
+            ,closeBtn: false
+            ,offset: '50px'
+            ,area: ['1200px', '700px']
+            ,shade: 0.5
+            ,shadeClose: false
+            ,btn: ['绔嬪嵆鍑哄簱', '绋嶅悗澶勭悊']
+            ,btnAlign: 'c'
+            ,moveType: 1 //鎷栨嫿妯″紡锛�0鎴栬��1
+            ,content: $('#pakoutPreviewMergeBox').html()
+            ,success: function(layero, index){
+                stoPreTabMergeIdx = table.render({
+                    elem: '#stoPreTabMerge',
+                    data: data,
+                    height: 520,
+                    page: false,
+                    limit: Number.MAX_VALUE,
+                    cellMinWidth: 100,
+                    cols: [[
+                        // {type: 'checkbox', merge: ['orderNo']},
+                        {field: 'title', title: '鍟嗗搧', merge: true, align: 'center', width: 350},
+                        {field: 'specs', title: '瑙勬牸', align: 'center'},
+                        {field: 'batch', title: '搴忓垪鐮�', align: 'center'},
+                        {field: 'anfme', title: '鏁伴噺', align: 'center', width: 90, style: 'font-weight: bold'},
+                        {field: 'locNo', title: '璐т綅', align: 'center', 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");
+                        mergeTabCache = table.cache.stoPreTabMerge;
+                    }
+                });
+                // 淇敼鍑哄簱绔�
+                form.on('select(tbBasicTbStaNos)', function (obj) {
+                    let index  = obj.othis.parents('tr').attr("data-index");
+                    let data = mergeTabCache[index];
+                    for (let i = 0; i<mergeTabCache.length; i++) {
+                        if (mergeTabCache[i].locNo === data.locNo) {
+                            //mergeTabCache[i]['staNo'] = Number(obj.elem.value);
+                            mergeTabCache[i]['staNo'] = obj.elem.value;
+                        }
+                    }
+                    obj.othis.children().find("input").css("color", "blue");
+                    return false;
+                });
+                // 鎵归噺淇敼鍑哄簱绔�
+                form.on('submit(batchModifySta)', function () {
+                    modifySta();
+                });
+                // 鎵归噺淇敼鍑哄簱绔� - 绔欑偣閫夋嫨
+                function modifySta() {
+                    // 鍑哄簱绔欏彇浜ら泦
+                    let staBatchSelectVal = [];
+                    for(let i = 0; i<mergeTabCache.length; i++) {
+                        let staNos = mergeTabCache[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 batchSta = obj.field.batchSta;
+                                let arr = [];
+                                for (let i = 0; i<mergeTabCache.length; i++) {
+                                    mergeTabCache[i]['staNo'] = batchSta;
+                                    arr.push(i);
+                                }
+                                console.log(mergeTabCache)
+                                stoPreTabMergeIdx.reload({data: mergeTabCache});
+                                arr.forEach(item => {
+                                    $('div[lay-id=stoPreTabMerge] tr[data-index="' + item + '"] .order-sta-select').val(batchSta);
+                                });
+                                layui.form.render('select');
+                                arr.forEach(item => {
+                                    $('div[lay-id=stoPreTabMerge] 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){
+                //鎸夐挳銆愮珛鍗冲嚭搴撱�戠殑鍥炶皟
+                pakout(mergeTabCache, index);
+            }
+            ,btn2: function(index, layero){
+                //鎸夐挳銆愮◢鍚庡鐞嗐�戠殑鍥炶皟
+                layer.close(index)
+                //return false 寮�鍚浠g爜鍙姝㈢偣鍑昏鎸夐挳鍏抽棴
+            }
+        });
+    }
+
+
+});
+
+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/saasPakStore/stockAdjust.js b/src/main/webapp/static/js/saasPakStore/stockAdjust.js
index 25ca32b..e7e872b 100644
--- a/src/main/webapp/static/js/saasPakStore/stockAdjust.js
+++ b/src/main/webapp/static/js/saasPakStore/stockAdjust.js
@@ -17,6 +17,7 @@
     arrRemove(detlCols, "field", "batch");
     arrRemove(detlCols, "field", "threeCode");
     arrRemove(detlCols, "field", "deadTime");
+    arrRemove(detlCols, "field", "suppCode");
     cols.push.apply(cols, detlCols);
     cols.push({fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:80})
     return cols;
diff --git a/src/main/webapp/views/orderLog/orderLog.html b/src/main/webapp/views/orderLog/orderLog.html
new file mode 100644
index 0000000..5a3ca3b
--- /dev/null
+++ b/src/main/webapp/views/orderLog/orderLog.html
@@ -0,0 +1,311 @@
+<!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>
+        .wrk-trace {
+            color: green;
+            cursor: pointer;
+            margin-left: 6px;
+            font-size: 18px;
+        }
+
+        .layui-timeline:first-child .layui-timeline-item {
+            margin-top: 30px;
+        }
+
+        .btn-add {
+            display: none;
+        }
+        .btn-edit {
+            display: none;
+        }
+        .btn-complete {
+            display: none;
+        }
+        .btn-delete {
+            display: none;
+        }
+    </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>
+                        <button id="importOrder" class="layui-btn icon-btn btn-add">
+                            <i class="layui-icon layui-icon-upload"></i>&nbsp;瀵煎叆閿�鍞崟
+                        </button>
+                        <input style="display:none" id="importExcel" type="file" onchange="upload(this)" >
+                    </div>
+                </div>
+            </div>
+            <table id="order" lay-filter="order"></table>
+        </div>
+    </div>
+    <div class="layui-card">
+        <div class="layui-card-body">
+            鍏ュ簱閫氱煡鍗曪細鐢盓RP鎻愪緵鍗曟嵁缂栧彿銆佺被鍨嬨�佸崟鎹椂闂村強鐗╂枡鏄庣粏锛岀敓鎴愬叆搴撲綔涓氬崟锛屼负缁存姢绯荤粺楂樺彲鐢紝鐢ㄦ埛鍙嚜琛屾坊鍔犲叆搴撻�氱煡鍗曟暟鎹紝瀹屾垚鐙珛鐨勫叆搴撲綔涓氥��
+            <span class="text-danger">鎵嬪姩娣诲姞鏃讹紝璇锋鏌ュ崟鎹紪鍙锋槸鍚﹀湪ERP绯荤粺涓凡瀛樺湪锛岄伩鍏嶅彂鐢熸暟鎹敊璇棶棰樸��</span>
+        </div>
+    </div>
+</div>
+<!-- 琛ㄦ牸鎿嶄綔鍒� -->
+<script type="text/html" id="operate">
+    {{# if (d.settle == 1 || d.settle == 2) { }}
+        <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</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-danger layui-btn-xs btn-delete" lay-event="del">鍒犻櫎</a>
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-report" lay-event="report">涓婃姤</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"
+          {{# 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 id="wrkTraceDialog" type="text/html" style="position: relative">
+    <div style="position: absolute; top: 0; left: 0;">
+        <div class="layui-card" style="overflow: hidden;">
+            <div class="layui-card-header" style="text-align: center;width: 80%;font-weight: inherit;font-size: 18px">{{ d.orderNo }}</div>
+            <div class="layui-card-body">
+                <div id="wrkTraceCharts" style="height: 300px;width: 400px;transform: translateX(-10%);"></div>
+            </div>
+        </div>
+    </div>
+    <div class="layui-row" >
+        <div class="layui-col-md5">
+            <h1 style="opacity: 0;">Hello World</h1>
+        </div>
+        <div  class="layui-col-md7" style="">
+            {{#  if(d.list.length > 0){ }}
+            <ul class="layui-timeline" style="height: 400px; overflow: scroll;">
+                {{#  layui.each(d.list, function(index, item){ }}
+                <li class="layui-timeline-item">
+                    <i class="layui-icon layui-timeline-axis">&#xe63f;</i>
+                    <div class="layui-timeline-content layui-text">
+                        <div class="layui-timeline-title">
+                            <h3 class="inline-block">
+                                {{ item.wrkNo }}&nbsp;
+
+                                {{#  if(item.wrkMast.ioType < 100){ }}
+                                <span class="layui-badge layui-bg-blue" style="line-height: 20px;">
+                                 {{ item.wrkMast.ioType$ }}&nbsp;
+                                </span>
+                                {{#  } }}
+
+                                {{#  if(item.wrkMast.ioType > 100){ }}
+                                <span class="layui-badge layui-bg-orange" style="line-height: 20px;">
+                                  {{ item.wrkMast.ioType$ }}&nbsp;
+                                </span>
+                                {{#  } }}
+
+
+                                {{#  if(item.wrkMast.wrkSts < 14){ }}
+                                <span class="layui-badge layui-bg-red" style="line-height: 20px;">
+                                    {{ item.wrkMast.wrkSts$ }}&nbsp;
+                                </span>
+                                {{#  } }}
+
+                                {{#  if(item.wrkMast.wrkSts >= 14){ }}
+                                <span class="layui-badge layui-bg-green" style="line-height: 20px;">
+                                    {{ item.wrkMast.wrkSts$ }}&nbsp;
+                                </span>
+                                {{#  } }}
+
+                            </h3>&emsp;
+                            {{ item.wrkMast.ioTime$ }}
+                        </div>
+
+                        <table class="layui-table" lay-skin="nob" style="width: 80%">
+                            <thead>
+                            <tr style="background: none">
+                                <td>No.</td>
+                                <td>鐗╂枡鍙�</td>
+                                <td>鏁伴噺</td>
+                            </tr>
+                            </thead>
+                            <tbody>
+                            {{#  layui.each(item.wrkDetls, function(idx, wrkDetl){ }}
+                            <tr>
+                                <td><span class="layui-badge layui-bg-cyan">{{ idx+1 }}</span></td>
+                                <td>{{ wrkDetl.matnr }}</td>
+                                <td style="font-weight: bold">{{ wrkDetl.anfme }}</td>
+                            </tr>
+                            {{#  }); }}
+                            </tbody>
+                        </table>
+
+                        <hr class="layui-border-cyan" style="width: 90%; opacity: .6;">
+                    </div>
+                </li>
+                {{#  }); }}
+            </ul>
+            {{#  } else { }}
+            <div style="height: 350px;display: flex;justify-content: center;align-items: center;">
+                <h2 style="font-weight: bold;letter-spacing: 2px">鏆傛棤浠诲姟</h2>
+            </div>
+            {{#  } }}
+        </div>
+    </div>
+</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/echarts/echarts.min.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/order.js" charset="utf-8"></script>
+
+<script type="text/template" id="docTypeTpl">
+    <option value="">閫夋嫨绫诲瀷</option>
+    {{#each records}}
+    <option value="{{docId}}">{{docName}}</option>
+    {{/each}}
+</script>
+</body>
+
+</html>
+

--
Gitblit v1.9.1