From 418a73bcee019e078307a1c2c255235de33d20ca Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期四, 25 十二月 2025 16:29:38 +0800
Subject: [PATCH] #agv任务

---
 src/main/java/com/zy/asrs/controller/LocCacheDetlController.java    |  125 +++
 src/main/java/com/zy/asrs/service/impl/TaskDetlLogServiceImpl.java  |    2 
 src/main/java/com/zy/common/web/WcsController.java                  |  105 ++
 src/main/java/locCacheDetl.sql                                      |   18 
 src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java         |   57 -
 src/main/java/com/zy/asrs/task/handler/AgvHandler.java              |    8 
 src/main/java/com/zy/asrs/service/impl/TaskLogServiceImpl.java      |   26 
 src/main/java/com/zy/asrs/mapper/LocCacheDetlMapper.java            |   12 
 src/main/webapp/static/js/task/task.js                              |   40 
 src/main/java/com/zy/common/web/param/GenerateAgvTaskParam.java     |    9 
 src/main/resources/application-dev.yml                              |    3 
 src/main/java/com/zy/asrs/service/impl/LocCacheDetlServiceImpl.java |   12 
 src/main/java/com/zy/asrs/entity/TaskLog.java                       |   67 -
 src/main/java/com/zy/asrs/enums/TaskIOType.java                     |   51 +
 src/main/java/com/zy/asrs/entity/LocCacheDetl.java                  |  327 ++++++++
 src/main/resources/mapper/LocCacheDetlMapper.xml                    |   61 +
 src/main/java/com/zy/asrs/controller/LocDetlController.java         |    7 
 src/main/java/com/zy/asrs/entity/TaskDetlLog.java                   |    7 
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java         |   53 -
 src/main/webapp/views/locCache/locCache.html                        |  436 +++++-----
 src/main/java/com/zy/asrs/entity/TaskDetl.java                      |    6 
 src/main/webapp/views/locCache/locDetail.html                       |   24 
 src/main/java/com/zy/common/CodeBuilder.java                        |    6 
 src/main/java/com/zy/asrs/entity/LocCache.java                      |    3 
 src/main/java/com/zy/asrs/entity/LocDetl.java                       |    5 
 src/main/java/com/zy/asrs/service/impl/LocCacheServiceImpl.java     |    2 
 src/main/webapp/static/js/locCacheDetl/locCacheDetl.js              |  305 ++++++++
 src/main/java/com/zy/asrs/service/LocCacheDetlService.java          |    8 
 src/main/java/com/zy/asrs/enums/LocAreaType.java                    |   29 
 src/main/webapp/views/locCacheDetl/locCacheDetl.html                |  386 ++++++++++
 30 files changed, 1,778 insertions(+), 422 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/LocCacheDetlController.java b/src/main/java/com/zy/asrs/controller/LocCacheDetlController.java
new file mode 100644
index 0000000..d216576
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/LocCacheDetlController.java
@@ -0,0 +1,125 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.common.DateUtils;
+import com.zy.asrs.entity.LocCacheDetl;
+import com.zy.asrs.service.LocCacheDetlService;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class LocCacheDetlController extends BaseController {
+
+    @Autowired
+    private LocCacheDetlService locCacheDetlService;
+
+    @RequestMapping(value = "/locCacheDetl/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(locCacheDetlService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/locCacheDetl/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<LocCacheDetl> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        allLike(LocCacheDetl.class, param.keySet(), wrapper, condition);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(locCacheDetlService.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 = "/locCacheDetl/add/auth")
+    @ManagerAuth
+    public R add(LocCacheDetl locCacheDetl) {
+        locCacheDetlService.insert(locCacheDetl);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/locCacheDetl/update/auth")
+	@ManagerAuth
+    public R update(LocCacheDetl locCacheDetl){
+        if (Cools.isEmpty(locCacheDetl) || null==locCacheDetl.getId()){
+            return R.error();
+        }
+        locCacheDetlService.updateById(locCacheDetl);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/locCacheDetl/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+            locCacheDetlService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/locCacheDetl/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<LocCacheDetl> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("locCacheDetl"));
+        convert(map, wrapper);
+        List<LocCacheDetl> list = locCacheDetlService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/locCacheDetlQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<LocCacheDetl> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<LocCacheDetl> page = locCacheDetlService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (LocCacheDetl locCacheDetl : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", locCacheDetl.getId());
+            map.put("value", locCacheDetl.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/locCacheDetl/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<LocCacheDetl> wrapper = new EntityWrapper<LocCacheDetl>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != locCacheDetlService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(LocCacheDetl.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/LocDetlController.java b/src/main/java/com/zy/asrs/controller/LocDetlController.java
index 01bd62d..a9b7f97 100644
--- a/src/main/java/com/zy/asrs/controller/LocDetlController.java
+++ b/src/main/java/com/zy/asrs/controller/LocDetlController.java
@@ -24,6 +24,7 @@
 import com.zy.asrs.service.LocOwnerService;
 import com.zy.asrs.service.MatService;
 import com.zy.common.web.BaseController;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -417,7 +418,8 @@
         for (LocDetl locDetl : stockStatis.getRecords()) {
             Mat mat = matService.selectByMatnr(locDetl.getMatnr());
             if (mat != null) {
-                locDetl.sync(mat);
+                BeanUtils.copyProperties(mat, locDetl);
+//                locDetl.sync(mat);
             }
         }
         return R.ok().add(stockStatis);
@@ -433,7 +435,8 @@
         for (LocDetl locDetl : excel) {
             Mat mat = matService.selectByMatnr(locDetl.getMatnr());
             if (mat != null) {
-                locDetl.sync(mat);
+                BeanUtils.copyProperties(mat, locDetl);
+//                locDetl.sync(mat);
             }
         }
         response.setContentType("application/vnd.ms-excel");
diff --git a/src/main/java/com/zy/asrs/entity/LocCache.java b/src/main/java/com/zy/asrs/entity/LocCache.java
index 6d944f5..ddcdd6c 100644
--- a/src/main/java/com/zy/asrs/entity/LocCache.java
+++ b/src/main/java/com/zy/asrs/entity/LocCache.java
@@ -3,6 +3,7 @@
 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.enums.LocStsType;
@@ -25,7 +26,7 @@
 
 
     @ApiModelProperty("涓婚敭ID")
-    @TableId
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     /**
diff --git a/src/main/java/com/zy/asrs/entity/LocCacheDetl.java b/src/main/java/com/zy/asrs/entity/LocCacheDetl.java
new file mode 100644
index 0000000..d1b8f97
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/LocCacheDetl.java
@@ -0,0 +1,327 @@
+package com.zy.asrs.entity;
+
+import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.baomidou.mybatisplus.annotations.TableField;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("asr_loc_cache_detl")
+@Accessors(chain = true)
+public class LocCacheDetl implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value= "")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value= "")
+    @TableField("loc_id")
+    private Long locId;
+
+    @ApiModelProperty(value= "")
+    @TableField("loc_no")
+    private String locNo;
+
+    @ApiModelProperty(value= "")
+    @TableField("area_id")
+    private Long areaId;
+
+    @ApiModelProperty(value= "")
+    @TableField("area_name")
+    private String areaName;
+
+    @ApiModelProperty(value= "")
+    private String zpallet;
+
+    @ApiModelProperty(value= "")
+    private Double anfme;
+
+    @ApiModelProperty(value= "")
+    private String matnr;
+
+    @ApiModelProperty(value= "")
+    private String maktx;
+
+    @ApiModelProperty(value= "")
+    private String batch;
+
+    @ApiModelProperty(value= "")
+    @TableField("order_no")
+    private String orderNo;
+
+    @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;
+
+    @ApiModelProperty(value= "")
+    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= "")
+    private Double weight;
+
+    @ApiModelProperty(value= "")
+    @TableField("item_num")
+    private String itemNum;
+
+    @ApiModelProperty(value= "")
+    @TableField("safe_qty")
+    private Double safeQty;
+
+    @ApiModelProperty(value= "")
+    @TableField("man_length")
+    private Double manLength;
+
+    @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;
+
+    @ApiModelProperty(value= "")
+    @TableField("be_batch")
+    private Integer beBatch;
+
+    @ApiModelProperty(value= "")
+    @TableField("dead_time")
+    private String deadTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("dead_warn")
+    private Integer deadWarn;
+
+    @ApiModelProperty(value= "")
+    private Integer source;
+
+    @ApiModelProperty(value= "")
+    private Integer inspect;
+
+    @ApiModelProperty(value= "")
+    private Integer danger;
+
+    @ApiModelProperty(value= "")
+    @TableField("modi_user")
+    private Long modiUser;
+
+    @ApiModelProperty(value= "")
+    @TableField("modi_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date modiTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("appe_user")
+    private Long appeUser;
+
+    @ApiModelProperty(value= "")
+    @TableField("appe_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date appeTime;
+
+    @ApiModelProperty(value= "")
+    private String memo;
+
+    @ApiModelProperty(value= "")
+    @TableField("store_date")
+    private Double storeDate;
+
+    @ApiModelProperty(value= "")
+    private Integer owner;
+
+    @ApiModelProperty(value= "")
+    private Integer frozen;
+
+    @ApiModelProperty(value= "")
+    private String standby1;
+
+    @ApiModelProperty(value= "")
+    private String standby2;
+
+    @ApiModelProperty(value= "")
+    private String standby3;
+
+    @ApiModelProperty(value= "")
+    @TableField("box_type1")
+    private String boxType1;
+
+    @ApiModelProperty(value= "")
+    @TableField("box_type2")
+    private String boxType2;
+
+    @ApiModelProperty(value= "")
+    @TableField("box_type3")
+    private String boxType3;
+
+    public LocCacheDetl() {}
+
+    public LocCacheDetl(Long locId,String locNo,Long areaId,String areaName,String zpallet,Double anfme,String matnr,String maktx,String batch,String orderNo,String specs,String model,String color,String brand,String unit,Double price,String sku,Double units,String barcode,String origin,String manu,String manuDate,Double weight,String itemNum,Double safeQty,Double manLength,Double volume,String threeCode,String supp,String suppCode,Integer beBatch,String deadTime,Integer deadWarn,Integer source,Integer inspect,Integer danger,Long modiUser,Date modiTime,Long appeUser,Date appeTime,String memo,Double storeDate,Integer owner,Integer frozen,String standby1,String standby2,String standby3,String boxType1,String boxType2,String boxType3) {
+        this.locId = locId;
+        this.locNo = locNo;
+        this.areaId = areaId;
+        this.areaName = areaName;
+        this.zpallet = zpallet;
+        this.anfme = anfme;
+        this.matnr = matnr;
+        this.maktx = maktx;
+        this.batch = batch;
+        this.orderNo = orderNo;
+        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.weight = weight;
+        this.itemNum = itemNum;
+        this.safeQty = safeQty;
+        this.manLength = manLength;
+        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.modiUser = modiUser;
+        this.modiTime = modiTime;
+        this.appeUser = appeUser;
+        this.appeTime = appeTime;
+        this.memo = memo;
+        this.storeDate = storeDate;
+        this.owner = owner;
+        this.frozen = frozen;
+        this.standby1 = standby1;
+        this.standby2 = standby2;
+        this.standby3 = standby3;
+        this.boxType1 = boxType1;
+        this.boxType2 = boxType2;
+        this.boxType3 = boxType3;
+    }
+
+//    LocCacheDetl locCacheDetl = new LocCacheDetl(
+//            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,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null    // 
+//    );
+
+    public String getModiTime$(){
+        if (Cools.isEmpty(this.modiTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
+    }
+
+    public String getAppeTime$(){
+        if (Cools.isEmpty(this.appeTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/LocDetl.java b/src/main/java/com/zy/asrs/entity/LocDetl.java
index 9d064bd..8a69749 100644
--- a/src/main/java/com/zy/asrs/entity/LocDetl.java
+++ b/src/main/java/com/zy/asrs/entity/LocDetl.java
@@ -32,7 +32,10 @@
 
     private static final long serialVersionUID = 1L;
 
-    @TableId(value = "loc_id", type = IdType.AUTO)
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+
     @TableField("loc_id")
     private Long locId;
 
diff --git a/src/main/java/com/zy/asrs/entity/TaskDetl.java b/src/main/java/com/zy/asrs/entity/TaskDetl.java
index 4377775..da2b225 100644
--- a/src/main/java/com/zy/asrs/entity/TaskDetl.java
+++ b/src/main/java/com/zy/asrs/entity/TaskDetl.java
@@ -1,7 +1,9 @@
 package com.zy.asrs.entity;
 
 import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
 import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
 import com.core.common.Cools;
 import com.core.common.SpringUtils;
 import com.zy.system.entity.User;
@@ -22,8 +24,12 @@
 
     private static final long serialVersionUID = 1L;
 
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
+    @TableField("task_id")
+    private Long taskId;
+
     /**
      * 宸ヤ綔鍙�
      */
diff --git a/src/main/java/com/zy/asrs/entity/TaskDetlLog.java b/src/main/java/com/zy/asrs/entity/TaskDetlLog.java
index e943741..4ffc93f 100644
--- a/src/main/java/com/zy/asrs/entity/TaskDetlLog.java
+++ b/src/main/java/com/zy/asrs/entity/TaskDetlLog.java
@@ -1,7 +1,9 @@
 package com.zy.asrs.entity;
 
 import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
 import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
 import com.core.common.Cools;
 import com.core.common.SpringUtils;
 import com.zy.system.entity.User;
@@ -20,10 +22,11 @@
 
     private static final long serialVersionUID = 1L;
 
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
-    @TableField("log_id")
-    private Long logId;
+    @TableField("task_id")
+    private Long taskID;
 
     /**
      * 宸ヤ綔鍙�
diff --git a/src/main/java/com/zy/asrs/entity/TaskLog.java b/src/main/java/com/zy/asrs/entity/TaskLog.java
index 519e8aa..2f69175 100644
--- a/src/main/java/com/zy/asrs/entity/TaskLog.java
+++ b/src/main/java/com/zy/asrs/entity/TaskLog.java
@@ -32,10 +32,6 @@
     private Integer wrkNo;
 
     @ApiModelProperty(value = "")
-    @TableField("log_id")
-    private Long logId;
-
-    @ApiModelProperty(value = "")
     @TableField("inv_wh")
     private String invWh;
 
@@ -336,68 +332,7 @@
     public TaskLog() {
     }
 
-    public TaskLog(Long id, Integer wrkNo, Long logId, String invWh, Date ymd, String mk, Integer whsType, Integer wrkSts, Integer ioType, Integer crnNo, String sheetNo, Double ioPri, Date wrkDate, String locNo, Integer staNo, Integer sourceStaNo, String sourceLocNo, String locSts, String picking, String linkMis, String onlineYn, String updMk, String exitMk, Integer pltType, String emptyMk, Date ioTime, Integer ctnType, String packed, String oveMk, Double mtnType, String userNo, Date crnStrTime, Date crnEndTime, Date plcStrTime, Date crnPosTime, Double loadTime, Double expTime, Double refWrkno, Date refIotime, Long modiUser, Date modiTime, Long appeUser, Date appeTime, String pauseMk, Date errorTime, String errorMemo, Integer ctnKind, String manuType, String memoM, Double scWeight, String logMk, Date logErrTime, String logErrMemo, String barcode, String PdcType, String ctnNo, String fullPlt, String preHave, String takeNone, Long lineNumber) {
-        this.id = id;
-        this.wrkNo = wrkNo;
-        this.logId = logId;
-        this.invWh = invWh;
-        this.ymd = ymd;
-        this.mk = mk;
-        this.whsType = whsType;
-        this.wrkSts = Long.valueOf(wrkSts);
-        this.ioType = ioType;
-        this.crnNo = crnNo;
-        this.sheetNo = sheetNo;
-        this.ioPri = ioPri;
-        this.wrkDate = wrkDate;
-        this.locNo = locNo;
-        this.staNo = String.valueOf(staNo);
-        this.sourceStaNo = String.valueOf(sourceStaNo);
-        this.sourceLocNo = sourceLocNo;
-        this.locSts = locSts;
-        this.picking = picking;
-        this.linkMis = linkMis;
-        this.onlineYn = onlineYn;
-        this.updMk = updMk;
-        this.exitMk = exitMk;
-        this.pltType = pltType;
-        this.emptyMk = emptyMk;
-        this.ioTime = ioTime;
-        this.ctnType = ctnType;
-        this.packed = packed;
-        this.oveMk = oveMk;
-        this.mtnType = mtnType;
-        this.userNo = userNo;
-        this.crnStrTime = crnStrTime;
-        this.crnEndTime = crnEndTime;
-        this.plcStrTime = plcStrTime;
-        this.crnPosTime = crnPosTime;
-        this.loadTime = loadTime;
-        this.expTime = expTime;
-        this.refWrkno = refWrkno;
-        this.refIotime = refIotime;
-        this.modiUser = modiUser;
-        this.modiTime = modiTime;
-        this.appeUser = appeUser;
-        this.appeTime = appeTime;
-        this.pauseMk = pauseMk;
-        this.errorTime = errorTime;
-        this.errorMemo = errorMemo;
-        this.ctnKind = ctnKind;
-        this.manuType = manuType;
-        this.memoM = memoM;
-        this.scWeight = scWeight;
-        this.logMk = logMk;
-        this.logErrTime = logErrTime;
-        this.logErrMemo = logErrMemo;
-        this.barcode = barcode;
-        this.PdcType = PdcType;
-        this.ctnNo = ctnNo;
-        this.fullPlt = fullPlt;
-        this.preHave = preHave;
-        this.takeNone = takeNone;
-        this.lineNumber = lineNumber;
-    }
+
 
 //    TaskLog taskLog = new TaskLog(
 //            null,    // 
diff --git a/src/main/java/com/zy/asrs/enums/LocAreaType.java b/src/main/java/com/zy/asrs/enums/LocAreaType.java
new file mode 100644
index 0000000..4ce1e72
--- /dev/null
+++ b/src/main/java/com/zy/asrs/enums/LocAreaType.java
@@ -0,0 +1,29 @@
+package com.zy.asrs.enums;
+
+/**
+ * 搴撳尯绫诲瀷
+ * @author Ryan
+ * @date 2025/12/3 9:59
+ * @return null
+ */
+public enum LocAreaType {
+
+
+    //鍫嗗灈鏈�
+    LOC_AREA_TYPE_YL("1", "浣欐枡鏆傚瓨鍖�"),
+
+    LOC_AREA_TYPE_CK("2", "鍑哄簱鏆傚瓨鍖�"),
+
+
+    ;
+
+    public Long type;
+
+    public String desc;
+
+    LocAreaType(String type, String desc) {
+        this.type = Long.valueOf(type);
+        this.desc = desc;
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/enums/TaskIOType.java b/src/main/java/com/zy/asrs/enums/TaskIOType.java
new file mode 100644
index 0000000..23ae4cd
--- /dev/null
+++ b/src/main/java/com/zy/asrs/enums/TaskIOType.java
@@ -0,0 +1,51 @@
+package com.zy.asrs.enums;
+
+/**
+ * 浠诲姟鍑哄叆搴撶被鍨�
+ * @author Ryan
+ * @date 2025/12/6 14:55
+ * @param null
+ * @return null
+ */
+public enum TaskIOType {
+
+    //鏂欑
+    ALL_IN("1", "1.鍏ュ簱"),
+    //鎵樼洏
+    STATION_STATION("3", "3.绔欏埌绔�"),
+
+    DEVICE_OUT("6", "6.璁惧涓婇��鍑�"),
+
+    PICKING_MEGER("8", "8.鎷f枡閫斾腑骞舵澘"),
+
+    EMPTY_IN("10", "10.绌烘澘鍏ュ簱"),
+
+    MOVE("11", "11.搴撴牸绉昏浇"),
+
+    PICK_IN("53", "53.鎷f枡鍏ュ簱"),
+
+    MERGE_IN("54", "54.骞舵澘鍏ュ簱"),
+
+    CHECK_IN("57", "57.鐩樼偣鍏ュ簱"),
+
+    ALL_OUT("101", "101.鍑哄簱"),
+
+    PICK_OUT("103", "103.鎷f枡鍑哄簱"),
+
+    MERGE_OUT("104", "104.骞舵澘鍑哄簱"),
+
+    CHECK_OUT("107", "107.鐩樼偣鍑哄簱"),
+
+    EMPTY_OUT("110", "110.绌烘澘鍑哄簱"),
+
+    ;
+
+    public Integer type;
+
+    public String desc;
+
+    TaskIOType(String type, String desc) {
+        this.type = Integer.valueOf(type);
+        this.desc = desc;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/mapper/LocCacheDetlMapper.java b/src/main/java/com/zy/asrs/mapper/LocCacheDetlMapper.java
new file mode 100644
index 0000000..c4e5550
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/LocCacheDetlMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.LocCacheDetl;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface LocCacheDetlMapper extends BaseMapper<LocCacheDetl> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/LocCacheDetlService.java b/src/main/java/com/zy/asrs/service/LocCacheDetlService.java
new file mode 100644
index 0000000..96d55c6
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/LocCacheDetlService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.LocCacheDetl;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface LocCacheDetlService extends IService<LocCacheDetl> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/LocCacheDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocCacheDetlServiceImpl.java
new file mode 100644
index 0000000..f8c926c
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/LocCacheDetlServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.LocCacheDetlMapper;
+import com.zy.asrs.entity.LocCacheDetl;
+import com.zy.asrs.service.LocCacheDetlService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("locCacheDetlService")
+public class LocCacheDetlServiceImpl extends ServiceImpl<LocCacheDetlMapper, LocCacheDetl> implements LocCacheDetlService {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/LocCacheServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocCacheServiceImpl.java
index 7b43fde..f82741d 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocCacheServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocCacheServiceImpl.java
@@ -45,7 +45,7 @@
                 for (int b = param.getStartBay(); b <= param.getEndBay(); b++) {
                     for (int l = param.getStartLev(); l <= param.getEndLev(); l++) {
                         // 鑾峰彇搴撲綅鍙�
-                        String locNo = String.format("CA") + String.format("%02d", r) + String.format("%03d", b) + String.format("%02d", l);
+                        String locNo = areas.getAreaNo() + String.format("%02d", r) + String.format("%03d", b) + String.format("%02d", l);
                         Date now = new Date();
                         LocCache locMast = new LocCache();
                         locMast.setLocNo(locNo);
diff --git a/src/main/java/com/zy/asrs/service/impl/TaskDetlLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TaskDetlLogServiceImpl.java
index e585aa6..7faf8e7 100644
--- a/src/main/java/com/zy/asrs/service/impl/TaskDetlLogServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/TaskDetlLogServiceImpl.java
@@ -34,7 +34,7 @@
             TaskDetlLog detlLog = new TaskDetlLog();
             BeanUtils.copyProperties(detl, detlLog);
             detlLog.setId(null);
-            detlLog.setLogId(detl.getId());
+            detlLog.setTaskID(detl.getId());
             if (!this.insert(detlLog)) {
                 throw new CoolException("宸ヤ綔妗f槑缁嗗巻鍙蹭繚瀛樺け璐ワ紒锛�");
             }
diff --git a/src/main/java/com/zy/asrs/service/impl/TaskLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TaskLogServiceImpl.java
index d762b67..b746198 100644
--- a/src/main/java/com/zy/asrs/service/impl/TaskLogServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/TaskLogServiceImpl.java
@@ -4,8 +4,12 @@
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.Task;
+import com.zy.asrs.entity.TaskDetl;
+import com.zy.asrs.entity.TaskDetlLog;
 import com.zy.asrs.entity.TaskLog;
 import com.zy.asrs.mapper.TaskLogMapper;
+import com.zy.asrs.service.TaskDetlLogService;
+import com.zy.asrs.service.TaskDetlService;
 import com.zy.asrs.service.TaskLogService;
 import com.zy.asrs.service.TaskService;
 import org.springframework.beans.BeanUtils;
@@ -13,6 +17,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
 import java.util.Objects;
 
 @Service("taskLogService")
@@ -20,6 +25,10 @@
 
     @Autowired
     private TaskService taskService;
+    @Autowired
+    private TaskDetlService taskDetlService;
+    @Autowired
+    private TaskDetlLogService taskDetlLogService;
 
     /**
      * @author Ryan
@@ -36,12 +45,25 @@
         }
         TaskLog taskLog = new TaskLog();
         BeanUtils.copyProperties(task, taskLog);
-        taskLog.setLogId(task.getId());
 
         if (!this.insert(taskLog)) {
             throw new CoolException("浠诲姟鏃ュ織淇濆瓨澶辫触锛侊紒");
         }
 
-        return false;
+        List<TaskDetl> detls = taskDetlService.selectList(new EntityWrapper<TaskDetl>().eq("wrk_no", wrkNo));
+        if (Objects.isNull(detls) || detls.isEmpty()) {
+            throw new CoolException("鏁版嵁閿欒锛氫换鍔′笉瀛樺湪锛侊紒");
+        }
+        detls.forEach(detl -> {
+            TaskDetlLog detlLog = new TaskDetlLog();
+            BeanUtils.copyProperties(detl, detlLog);
+            detlLog.setId(null);
+            detlLog.setTaskID(taskLog.getId());
+            if (!taskDetlLogService.insert(detlLog)) {
+                throw new CoolException("宸ヤ綔妗f槑缁嗗巻鍙蹭繚瀛樺け璐ワ紒锛�");
+            }
+        });
+
+        return true;
     }
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
index 18c2ae7..2e3f2f7 100644
--- a/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
@@ -14,6 +14,7 @@
 
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 
 @Service("taskService")
@@ -139,7 +140,7 @@
         String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣�
         String locSts = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬�
         // 鍏ュ簱鍙栨秷锛堜慨鏀圭洰鏍囧簱浣嶏級
-        if (wrkMast.getWrkSts() < 4) {
+        if (wrkMast.getIoType() < 100) {
             locNo = wrkMast.getLocNo();
             locSts = "O";
 
@@ -156,7 +157,7 @@
                 locCacheService.updateById(locMast);
             }
             // 鍑哄簱鍙栨秷锛堜慨鏀规簮搴撲綅锛�
-        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14) {
+        } else {
             locNo = wrkMast.getSourceLocNo();
             // 鍑哄簱 ===>> F.鍦ㄥ簱
             if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
@@ -177,8 +178,6 @@
                 locMast.setModiUser(userId);
                 locCacheService.updateById(locMast);
             }
-        } else {
-            throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曞彇娑�");
         }
 
         //鍙栨秷鍏ュ簱宸ヤ綔妗f椂锛屾煡璇㈢粍鎵樿〃锛屽鏋滄湁灏嗙姸鎬佹敼涓哄緟澶勭悊
@@ -197,53 +196,7 @@
             }
         }
 
-        //鍙栨秷鍑哄簱宸ヤ綔妗f椂锛屾煡璇㈠崟鎹鐞嗚〃锛屽洖婊氫綔涓氫腑鏁伴噺
-        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103) {
-            List<TaskDetl> wrkDetls = taskDetlService.selectList(new EntityWrapper<TaskDetl>().eq("wrk_no", wrkMast.getWrkNo()));
-            for (TaskDetl wrkDetl : wrkDetls) {
-                if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
-                    if (!orderDetlPakoutService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(),
-                            wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
-                            wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) {
-                        throw new CoolException("璁㈠崟鏁版嵁鍥炴粴澶辫触");
-                    }
 
-                    //淇敼璁㈠崟涓昏〃鐘舵��,娌℃湁浣滀笟鏁伴噺鏃舵墠鍙互淇敼
-                    boolean flag = true;
-//                    List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no",wrkDetl.getOrderNo()));
-                    OrderPakout order = orderPakoutService.selectByNo(wrkDetl.getOrderNo());
-                    List<OrderDetlPakout> orderDetls = orderDetlPakoutService.selectByOrderId(order.getId());
-                    for (OrderDetlPakout orderDetl : orderDetls) {
-                        if (orderDetl.getWorkQty() > 0) {
-                            flag = false;
-                        }
-                    }
-                    if (flag) {
-                        if (!Cools.isEmpty(order) && order.getSettle() == 2) {
-                            order.setSettle(1L);
-                            order.setUpdateBy(userId);
-                            order.setUpdateTime(now);
-                        }
-                        if (!orderPakoutService.update(order, new EntityWrapper<OrderPakout>().eq("order_no", wrkDetl.getOrderNo()))) {
-                            throw new CoolException("淇敼璁㈠崟鐘舵�佸け璐�");
-                        }
-                    }
-                }
-            }
-
-        }
-
-//        // 璁㈠崟鍏宠仈
-//        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
-//        for (WrkDetl wrkDetl : wrkDetls) {
-//            if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
-//                if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
-//                    throw new CoolException("璁㈠崟鏁版嵁鍥炴粴澶辫触");
-//                }
-//                // 鐢熸垚鏂扮殑鍑哄簱浣滀笟
-////                        stockOutRe(wrkMast, wrkDetls);
-//            }
-//        }
 
         // 鍙栨秷鎿嶄綔浜哄憳璁板綍
         wrkMast.setManuType("鎵嬪姩鍙栨秷");
@@ -260,10 +213,6 @@
         boolean wrkMastRes = taskService.deleteById(wrkMast);
 
         if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) {
-            // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
-            if (!taskDetlLogService.save(wrkMast.getWrkNo())) {
-//                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo());
-            }
             // 鍒犻櫎宸ヤ綔妗f槑缁�
             boolean wrkDetlRes = taskDetlService.delete(new EntityWrapper<TaskDetl>().eq("wrk_no", workNo));
         }
diff --git a/src/main/java/com/zy/asrs/task/handler/AgvHandler.java b/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
index e935e0c..b82a456 100644
--- a/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
@@ -16,6 +16,7 @@
 import com.zy.common.utils.HttpHandler;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -52,11 +53,18 @@
     @Resource
     private BasStationMapper basStationMapper;
 
+    @Value("${Agv.sendTask}")
+    private boolean agvSendTask;
+
     /**
      * 鍛煎彨agv鎼繍
      */
     public void callAgv(List<Task> taskList) {
 
+        if (!agvSendTask) {
+            return;
+        }
+
         for (Task task : taskList) {
             // 鍛煎彨agv
             String response = "";
diff --git a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
index d1336b3..5fccc17 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -57,6 +57,9 @@
     @Autowired
     private BasStationServiceImpl basStationService;
 
+    @Autowired
+    private LocCacheDetlService locCacheDetlService;
+
     public ReturnT<String> start(WrkMast wrkMast) {
         // 4.鍏ュ簱瀹屾垚
         if (wrkMast.getWrkSts() == 4) {
@@ -125,7 +128,8 @@
                             }
                         } else {
                             locDetl = new LocDetl();
-                            locDetl.sync(wrkDetl);
+                            BeanUtils.copyProperties(wrkDetl, locDetl);
+//                            locDetl.sync(wrkDetl);
                             locDetl.setLocNo(wrkMast.getLocNo()); // 搴撲綅鍙�
                             locDetl.setAnfme(wrkDetl.getAnfme()); // 鏁伴噺
                             locDetl.setZpallet(wrkDetl.getZpallet()); // 鎵樼洏鏉$爜
@@ -196,7 +200,8 @@
                             }
                         } else {
                             locDetl = new LocDetl();
-                            locDetl.sync(wrkDetl);
+                            BeanUtils.copyProperties(wrkDetl, locDetl);
+//                            locDetl.sync(wrkDetl);
                             locDetl.setLocNo(wrkMast.getLocNo()); // 搴撲綅鍙�
                             locDetl.setAnfme(wrkDetl.getAnfme()); // 鏁伴噺
                             locDetl.setZpallet(wrkDetl.getZpallet()); // 鎵樼洏鏉$爜
@@ -302,7 +307,8 @@
                             }
                         } else {
                             locDetl = new LocDetl();
-                            locDetl.sync(wrkDetl);
+                            BeanUtils.copyProperties(wrkDetl, locDetl);
+//                            locDetl.sync(wrkDetl);
                             locDetl.setLocNo(wrkMast.getLocNo()); // 搴撲綅鍙�
                             locDetl.setAnfme(wrkDetl.getAnfme()); // 鏁伴噺
                             locDetl.setZpallet(wrkDetl.getZpallet()); // 鎵樼洏鏉$爜
@@ -607,26 +613,6 @@
                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                 return FAIL.setMsg("鍏ㄦ澘鍑哄簱 ===>> 宸ヤ綔鏄庣粏妗d负绌�; [workNo=" + task.getWrkNo() + "],[locNo=" + task.getSourceLocNo() + "]");
             }
-            for (TaskDetl wrkDetl : wrkDetls101) {
-                // 鏇存柊璁㈠崟瀹屾垚鏁伴噺
-                OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
-                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
-                if (orderDetlPakout == null) {
-                    orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
-                            wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
-                }
-                try {
-                    if (!Cools.isEmpty(orderDetlPakout)) {
-                        if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
-                                orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
-                                wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) {
-                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-                            return FAIL.setMsg("鍏ㄦ澘鍑哄簱 ===>> 鏇存柊璁㈠崟瀹屾垚鏁伴噺澶辫触; [workNo=" + task.getWrkNo() + "],[locNo=" + task.getSourceLocNo() + "]");
-                        }
-                    }
-                } catch (Exception ignore) {
-                }
-            }
             // 鍒犻櫎宸ヤ綔妗f簮搴撲綅鐨勫簱瀛樻槑缁�
             if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", task.getSourceLocNo()))) {
                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -644,16 +630,6 @@
                 }
             } else {
                 throw new CoolException("褰撳墠搴撲綅鐘舵��" + locMast.getLocSts() + ", 鏃犳硶鎵ц鍑哄簱鎿嶄綔锛侊紒");
-            }
-
-            BasStation devNo = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", task.getStaNo()));
-            if (Objects.isNull(devNo)) {
-                throw new CoolException("绔欑偣锛�" + task.getSourceStaNo() + ", 涓嶅瓨鍦紒锛�");
-            }
-            devNo.setLocSts(LocStsType.LOC_STS_TYPE_F.type);
-            devNo.setModiTime(new Date());
-            if (!basStationService.updateById(devNo)) {
-                throw new CoolException("绔欑偣淇℃伅淇敼澶辫触锛侊紒");
             }
             task.setWrkSts(15L);
             if (!taskService.updateById(task)) {
@@ -680,9 +656,10 @@
             throw new CoolException("鏁版嵁閿欒锛氱粍鎵樻暟鎹笉瀛樺湪锛侊紒");
         }
         apallet.forEach(pakin -> {
-            LocDetl detl = new LocDetl();
+            LocCacheDetl detl = new LocCacheDetl();
             BeanUtils.copyProperties(pakin, detl);
             detl.setBarcode(pakin.getBarcode())
+                    .setLocId(locCache.getId())
                     .setAnfme(pakin.getAnfme())
                     .setBrand(pakin.getBrand())
                     .setAppeTime(new Date())
@@ -693,7 +670,7 @@
                     .setAreaName(locCache.getAreaName())
                     .setUnit(pakin.getUnit())
                     .setBatch(pakin.getBatch());
-            if (!locDetlService.insert(detl)) {
+            if (!locCacheDetlService.insert(detl)) {
                 throw new CoolException("搴撲綅鏄庣粏淇濆瓨澶辫触锛侊紒");
             }
         });
@@ -710,12 +687,6 @@
         wrkMast.setModiTime(new Date());
         if (!taskService.updateById(wrkMast)) {
             throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
-        }
-
-        Set<Long> list = apallet.stream().map(WaitPakin::getOrderId).collect(Collectors.toSet());
-        List<OrderPakin> pakins = orderPakinService.selectList(new EntityWrapper<OrderPakin>().in("id", list));
-        if (Objects.isNull(pakins) || pakins.isEmpty()) {
-            throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
         }
 
         return SUCCESS;
diff --git a/src/main/java/com/zy/common/CodeBuilder.java b/src/main/java/com/zy/common/CodeBuilder.java
index 93c55e3..6e17a92 100644
--- a/src/main/java/com/zy/common/CodeBuilder.java
+++ b/src/main/java/com/zy/common/CodeBuilder.java
@@ -20,10 +20,10 @@
         generator.url = "192.168.4.15:1433;databasename=yhfzasrs";
         generator.username = "sa";
         generator.password = "sa@123";
-        generator.table = "man_inventory_reserve_log";
+        generator.table = "asr_loc_cache_detl";
         generator.packagePath = "com.zy.asrs";
-        generator.html = false;
-        generator.js = false;
+//        generator.html = false;
+//        generator.js = false;
         generator.build();
     }
 
diff --git a/src/main/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java
index 233250e..fb72cd5 100644
--- a/src/main/java/com/zy/common/web/WcsController.java
+++ b/src/main/java/com/zy/common/web/WcsController.java
@@ -8,20 +8,29 @@
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.param.EmptyPlateOutParam;
 import com.zy.asrs.entity.result.FindLocNoAttributeVo;
+import com.zy.asrs.enums.LocAreaType;
+import com.zy.asrs.enums.LocStsType;
+import com.zy.asrs.enums.TaskIOType;
 import com.zy.asrs.service.*;
 import com.zy.common.CodeRes;
 import com.zy.common.model.LocTypeDto;
 import com.zy.common.model.StartupDto;
+import com.zy.common.model.enums.WorkNoType;
 import com.zy.common.service.CommonService;
+import com.zy.common.web.param.GenerateAgvTaskParam;
 import com.zy.common.web.param.SearchLocParam;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
+
+import static com.zy.asrs.enums.TaskIOType.EMPTY_IN;
 
 /**
  * Created by vincent on 2020/10/30
@@ -49,6 +58,102 @@
     private RowLastnoService rowLastnoService;
     @Autowired
     private WorkService workService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private TaskDetlService taskDetlService;
+    @Autowired
+    private BasAreasService basAreasService;
+    @Autowired
+    private LocCacheService locCacheService;
+
+    @PostMapping("/generate/AgvTask/v1")
+    @ResponseBody
+    @Transactional(rollbackFor = Exception.class)
+    public synchronized R generateAgvTask(@RequestBody GenerateAgvTaskParam param) {
+        if (Cools.isEmpty(param.getStaNo(),param.getWrkNo())){
+            return R.error("绔欑偣缂栧彿鍜屽伐浣滃彿涓嶈兘涓虹┖");
+        }
+        Task searchTask = taskService.selectOne(new EntityWrapper<Task>()
+                .eq("source_sta_no", param.getStaNo())
+        );
+        if (!Cools.isEmpty(searchTask)){
+            return R.error("浠诲姟宸插瓨鍦�");
+        }
+        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+                .eq("wrk_no", param.getWrkNo())
+                .eq("sta_no", param.getStaNo())
+        );
+        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>()
+                .eq("wrk_no", param.getWrkNo())
+        );
+        if (Cools.isEmpty(wrkMast) || Cools.isEmpty(wrkDetls)){
+            return R.error("宸ヤ綔鍏宠仈浠诲姟鎴栨槑缁嗕笉瀛樺湪");
+        }
+
+        BasAreas basAreas = basAreasService
+                .selectOne(new EntityWrapper<BasAreas>().eq("whs_type_id", LocAreaType.LOC_AREA_TYPE_CK.type));
+        LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>()
+                .eq("area_id", basAreas.getId())
+                .eq("frozen", 0)
+                .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)
+                // .eq("loc_no", params.getTarSite())
+                .orderAsc(Arrays.asList("loc_no"))
+                .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
+
+        // 鑾峰彇宸ヤ綔鍙�
+        int workNo = commonService.getWorkNo(WorkNoType.PICK.type);
+        // 淇濆瓨宸ヤ綔妗�
+        Task task = new Task();
+        Date now = new Date();
+        task.setWrkNo(workNo)
+                .setIoTime(now)
+                .setWrkSts(7L) // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+                .setIoType(1) // 鍏ュ嚭搴撶姸鎬侊細 1.鍏ュ簱
+                .setTaskType("agv")
+                .setIoPri(10D)
+                .setLocNo(locCache.getLocNo()) // 鐩爣搴撲綅
+                .setFullPlt(wrkMast.getIoType().equals(TaskIOType.EMPTY_IN.type) ? "N" : "Y")// 婊℃澘锛歒
+                .setPicking("N") // 鎷f枡
+                .setExitMk("N")// 閫�鍑�
+                .setSourceStaNo(param.getStaNo().toString())
+                .setEmptyMk(wrkMast.getIoType().equals(TaskIOType.EMPTY_IN.type) ? "Y" : "N")// 绌烘澘
+                .setBarcode(wrkMast.getBarcode())// 鎵樼洏鐮�
+                .setLinkMis("N")
+                .setAppeTime(now)
+                .setModiTime(now);
+        if (!taskService.insert(task)) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+        wrkDetls.forEach(wrkDetl -> {
+            TaskDetl taskDetl = new TaskDetl();
+            BeanUtils.copyProperties(wrkDetl, taskDetl);
+            taskDetl.setTaskId(task.getId());
+            taskDetl.setWrkNo(task.getWrkNo());
+            taskDetl.setAppeTime(now);
+            taskDetl.setModiTime(now);
+
+            if (!taskDetlService.insert(taskDetl)) {
+                throw new CoolException("淇濆瓨AGV宸ヤ綔妗f槑缁嗗け璐�");
+            }
+        });
+
+
+        // 淇敼鐩爣搴撲綅鐘舵��
+        if (locCache.getLocSts().equals(LocStsType.LOC_STS_TYPE_O.type)) {
+            locCache.setLocSts(LocStsType.LOC_STS_TYPE_S.type); // S.鍏ュ簱棰勭害
+            locCache.setModiTime(new Date());
+
+            if (!locCacheService.updateById(locCache)) {
+                throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+            }
+        } else {
+            throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細" + locCache.getLocSts$());
+        }
+
+
+        return R.ok();
+    }
 
     @PostMapping("/pakin/loc/v1")
     @ResponseBody
diff --git a/src/main/java/com/zy/common/web/param/GenerateAgvTaskParam.java b/src/main/java/com/zy/common/web/param/GenerateAgvTaskParam.java
new file mode 100644
index 0000000..46a8220
--- /dev/null
+++ b/src/main/java/com/zy/common/web/param/GenerateAgvTaskParam.java
@@ -0,0 +1,9 @@
+package com.zy.common.web.param;
+
+import lombok.Data;
+
+@Data
+public class GenerateAgvTaskParam {
+    private Integer staNo;
+    private Integer wrkNo;
+}
diff --git a/src/main/java/locCacheDetl.sql b/src/main/java/locCacheDetl.sql
new file mode 100644
index 0000000..4ebb7ea
--- /dev/null
+++ b/src/main/java/locCacheDetl.sql
@@ -0,0 +1,18 @@
+-- save locCacheDetl record
+-- mysql
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'locCacheDetl/locCacheDetl.html', 'locCacheDetl绠$悊', null , '2', null , '1');
+
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'locCacheDetl#view', '鏌ヨ', '', '3', '0', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'locCacheDetl#btn-add', '鏂板', '', '3', '1', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'locCacheDetl#btn-edit', '缂栬緫', '', '3', '2', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'locCacheDetl#btn-delete', '鍒犻櫎', '', '3', '3', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'locCacheDetl#btn-export', '瀵煎嚭', '', '3', '4', '1');
+
+-- sqlserver
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'locCacheDetl/locCacheDetl.html', N'locCacheDetl绠$悊', null, '2', null, '1');
+
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'locCacheDetl#view', N'鏌ヨ', '', '3', '0', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'locCacheDetl#btn-add', N'鏂板', '', '3', '1', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'locCacheDetl#btn-edit', N'缂栬緫', '', '3', '2', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'locCacheDetl#btn-delete', N'鍒犻櫎', '', '3', '3', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'locCacheDetl#btn-export', N'瀵煎嚭', '', '3', '4', '1');
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index b42861a..8ddbe2f 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -66,5 +66,8 @@
   # 鍙虫繁搴撲綅鎺掑彿
   doubleLocsRight: 4,8,12,16,20,24,28,32
 
+Agv:
+  sendTask: false
+
 
 
diff --git a/src/main/resources/mapper/LocCacheDetlMapper.xml b/src/main/resources/mapper/LocCacheDetlMapper.xml
new file mode 100644
index 0000000..8118fc1
--- /dev/null
+++ b/src/main/resources/mapper/LocCacheDetlMapper.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.LocCacheDetlMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.LocCacheDetl">
+        <id column="id" property="id" />
+        <result column="loc_id" property="locId" />
+        <result column="loc_no" property="locNo" />
+        <result column="area_id" property="areaId" />
+        <result column="area_name" property="areaName" />
+        <result column="zpallet" property="zpallet" />
+        <result column="anfme" property="anfme" />
+        <result column="matnr" property="matnr" />
+        <result column="maktx" property="maktx" />
+        <result column="batch" property="batch" />
+        <result column="order_no" property="orderNo" />
+        <result column="specs" property="specs" />
+        <result column="model" property="model" />
+        <result column="color" property="color" />
+        <result column="brand" property="brand" />
+        <result column="unit" property="unit" />
+        <result column="price" property="price" />
+        <result column="sku" property="sku" />
+        <result column="units" property="units" />
+        <result column="barcode" property="barcode" />
+        <result column="origin" property="origin" />
+        <result column="manu" property="manu" />
+        <result column="manu_date" property="manuDate" />
+        <result column="weight" property="weight" />
+        <result column="item_num" property="itemNum" />
+        <result column="safe_qty" property="safeQty" />
+        <result column="man_length" property="manLength" />
+        <result column="volume" property="volume" />
+        <result column="three_code" property="threeCode" />
+        <result column="supp" property="supp" />
+        <result column="supp_code" property="suppCode" />
+        <result column="be_batch" property="beBatch" />
+        <result column="dead_time" property="deadTime" />
+        <result column="dead_warn" property="deadWarn" />
+        <result column="source" property="source" />
+        <result column="inspect" property="inspect" />
+        <result column="danger" property="danger" />
+        <result column="modi_user" property="modiUser" />
+        <result column="modi_time" property="modiTime" />
+        <result column="appe_user" property="appeUser" />
+        <result column="appe_time" property="appeTime" />
+        <result column="memo" property="memo" />
+        <result column="store_date" property="storeDate" />
+        <result column="owner" property="owner" />
+        <result column="frozen" property="frozen" />
+        <result column="standby1" property="standby1" />
+        <result column="standby2" property="standby2" />
+        <result column="standby3" property="standby3" />
+        <result column="box_type1" property="boxType1" />
+        <result column="box_type2" property="boxType2" />
+        <result column="box_type3" property="boxType3" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/webapp/static/js/locCacheDetl/locCacheDetl.js b/src/main/webapp/static/js/locCacheDetl/locCacheDetl.js
new file mode 100644
index 0000000..59dae32
--- /dev/null
+++ b/src/main/webapp/static/js/locCacheDetl/locCacheDetl.js
@@ -0,0 +1,305 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#locCacheDetl',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/locCacheDetl/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            {type: 'checkbox'}
+            ,{field: 'id', align: 'center',title: ''}
+            ,{field: 'locId', align: 'center',title: ''}
+            ,{field: 'locNo', align: 'center',title: ''}
+            ,{field: 'areaId', align: 'center',title: ''}
+            ,{field: 'areaName', align: 'center',title: ''}
+            ,{field: 'zpallet', align: 'center',title: ''}
+            ,{field: 'anfme', align: 'center',title: ''}
+            ,{field: 'matnr', align: 'center',title: ''}
+            ,{field: 'maktx', align: 'center',title: ''}
+            ,{field: 'batch', align: 'center',title: ''}
+            ,{field: 'orderNo', align: 'center',title: ''}
+            ,{field: 'specs', align: 'center',title: ''}
+            ,{field: 'model', align: 'center',title: ''}
+            ,{field: 'color', align: 'center',title: ''}
+            ,{field: 'brand', align: 'center',title: ''}
+            ,{field: 'unit', align: 'center',title: ''}
+            ,{field: 'price', align: 'center',title: ''}
+            ,{field: 'sku', align: 'center',title: ''}
+            ,{field: 'units', align: 'center',title: ''}
+            ,{field: 'barcode', align: 'center',title: ''}
+            ,{field: 'origin', align: 'center',title: ''}
+            ,{field: 'manu', align: 'center',title: ''}
+            ,{field: 'manuDate', align: 'center',title: ''}
+            ,{field: 'weight', align: 'center',title: ''}
+            ,{field: 'itemNum', align: 'center',title: ''}
+            ,{field: 'safeQty', align: 'center',title: ''}
+            ,{field: 'manLength', align: 'center',title: ''}
+            ,{field: 'volume', align: 'center',title: ''}
+            ,{field: 'threeCode', align: 'center',title: ''}
+            ,{field: 'supp', align: 'center',title: ''}
+            ,{field: 'suppCode', align: 'center',title: ''}
+            ,{field: 'beBatch', align: 'center',title: ''}
+            ,{field: 'deadTime', align: 'center',title: ''}
+            ,{field: 'deadWarn', align: 'center',title: ''}
+            ,{field: 'source', align: 'center',title: ''}
+            ,{field: 'inspect', align: 'center',title: ''}
+            ,{field: 'danger', align: 'center',title: ''}
+            ,{field: 'modiUser', align: 'center',title: ''}
+            ,{field: 'modiTime$', align: 'center',title: ''}
+            ,{field: 'appeUser', align: 'center',title: ''}
+            ,{field: 'appeTime$', align: 'center',title: ''}
+            ,{field: 'memo', align: 'center',title: ''}
+            ,{field: 'storeDate', align: 'center',title: ''}
+            ,{field: 'owner', align: 'center',title: ''}
+            ,{field: 'frozen', align: 'center',title: ''}
+            ,{field: 'standby1', align: 'center',title: ''}
+            ,{field: 'standby2', align: 'center',title: ''}
+            ,{field: 'standby3', align: 'center',title: ''}
+            ,{field: 'boxType1', align: 'center',title: ''}
+            ,{field: 'boxType2', align: 'center',title: ''}
+            ,{field: 'boxType3', align: 'center',title: ''}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        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();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(locCacheDetl)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(locCacheDetl)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.id;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'locCacheDetl': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/locCacheDetl/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(locCacheDetl)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.id]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/locCacheDetl/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/locCacheDetl/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+            layDate.render({
+                elem: '#modiTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['modiTime\\$']:null
+            });
+            layDate.render({
+                elem: '#appeTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['appeTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/static/js/task/task.js b/src/main/webapp/static/js/task/task.js
index 909d323..96f034e 100644
--- a/src/main/webapp/static/js/task/task.js
+++ b/src/main/webapp/static/js/task/task.js
@@ -22,26 +22,22 @@
         height: 'full-120',
         cols: [[
             {type: 'checkbox'}
-            , {field: 'id', align: 'center', title: 'id'}
-            , {field: 'wrkNo', align: 'center', title: '浠诲姟鍙�'}
-            , {field: 'ioType$', align: 'center', title: '鍏ュ嚭搴撶被鍨�',}
-            , {field: 'wrkSts$', align: 'center', title: '宸ヤ綔鐘舵��'}
-            , {field: 'ioPri', align: 'center', title: '浼樺厛绾�',hide: true}
-            , {field: 'sourceStaNo', align: 'center', title: '婧愮珯'}
-            , {field: 'staNo', align: 'center', title: '鐩爣绔�'}
-            , {field: 'invWh', align: 'center', title: 'agv'}
-            , {field: 'barcode', align: 'center', title: '鏉$爜'}
-            , {field: 'appeUser$', align: 'center', title: '鍒涘缓浜�'}
-            , {field: 'appeTime$', align: 'center', title: '鍒涘缓鏃堕棿',width: 170}
+            , {field: 'wrkNo', align: 'center', title: '宸ヤ綔鍙�', sort: true, width: 105}
+            , {field: 'ioTime$', align: 'center', title: '宸ヤ綔鏃堕棿', width: 160}
+            , {field: 'wrkSts$', align: 'center', title: '宸ヤ綔鐘舵��', width: 150}
+            , {field: 'ioType$', align: 'center', title: '鍏ュ嚭搴撶被鍨�', width: 150}
+            , {field: 'ioPri', align: 'center', title: '浼樺厛绾�', width: 80}
+            , {field: 'taskType$', align: 'center', title: '浠诲姟绫诲瀷', width: 120}
+            , {field: 'crnNo$', align: 'center', title: '鍫嗗灈鏈�', hide: true}
+            , {field: 'sourceStaNo$', align: 'center', title: '婧愮珯', width: 120}
+            , {field: 'sourceLocNo', align: 'center', title: '婧愬簱浣�', width: 120}
+            , {field: 'staNo$', align: 'center', title: '鐩爣绔�', width: 120}
+            , {field: 'locNo', align: 'center', title: '鐩爣搴撲綅', width: 120}
+            , {field: 'barcode', align: 'center', title: '鏉$爜', width: 110}
+            , {field: 'preHave', align: 'center', title: '鍏堝叆鍝�', hide: true}
+            , {field: 'takeNone', align: 'center', title: '绌烘搷浣�', hide: true}
             , {field: 'modiUser$', align: 'center', title: '淇敼浜哄憳', hide: true}
-            , {field: 'modiTime$', align: 'center', title: '淇敼鏃堕棿', hide: true,width: 170}
-
-            // , {field: 'taskType$', align: 'center', title: '浠诲姟绫诲瀷'}
-            // , {field: 'crnNo$', align: 'center', title: '鍫嗗灈鏈�', hide: true}
-            // , {field: 'sourceLocNo', align: 'center', title: '婧愬簱浣�', width: 120}
-            // , {field: 'locNo', align: 'center', title: '鐩爣搴撲綅', width: 120}
-            // , {field: 'preHave', align: 'center', title: '鍏堝叆鍝�', hide: true}
-            // , {field: 'takeNone', align: 'center', title: '绌烘搷浣�', hide: true}
+            , {field: 'modiTime$', align: 'center', title: '淇敼鏃堕棿', hide: true, width: 160}
             , {fixed: 'right', title: '鎿嶄綔', align: 'center', toolbar: '#operate', width: 200}
         ]],
         request: {
@@ -175,7 +171,7 @@
                         title: '宸ヤ綔鍙凤細' + data.wrkNo,
                         shadeClose: true
                     }, function () {
-                        http.post(baseUrl + "/hand/control/wrkMast", {workNo: data.wrkNo, type: 2}, function (res) {
+                        http.post(baseUrl + "/task/control", {workNo: data.wrkNo, type: 2}, function (res) {
                             $(".layui-laypage-btn")[0].click();
                             layer.msg(data.wrkNo + res.msg);
                         })
@@ -186,7 +182,7 @@
                         title: '宸ヤ綔鍙凤細' + data.wrkNo,
                         shadeClose: true
                     }, function () {
-                        http.post(baseUrl + "/hand/control/wrkMast", {workNo: data.wrkNo, type: 2}, function (res) {
+                        http.post(baseUrl + "/task/control", {workNo: data.wrkNo, type: 2}, function (res) {
                             $(".layui-laypage-btn")[0].click();
                             layer.msg(data.wrkNo + res.msg);
                         })
@@ -197,7 +193,7 @@
             //  鎷f枡鍏ュ簱
             case 'pick':
                 layer.confirm('鎷f枡鍏ュ簱璇ョ瑪宸ヤ綔妗o紵', {title: '宸ヤ綔鍙凤細' + data.wrkNo, shadeClose: true}, function () {
-                    http.post(baseUrl + "/hand/control/wrkMast", {workNo: data.wrkNo, type: 3}, function (res) {
+                    http.post(baseUrl + "/task/control", {workNo: data.wrkNo, type: 3}, function (res) {
                         $(".layui-laypage-btn")[0].click();
                         layer.msg(data.wrkNo + res.msg);
                     })
diff --git a/src/main/webapp/views/locCache/locCache.html b/src/main/webapp/views/locCache/locCache.html
index ec258aa..356469c 100644
--- a/src/main/webapp/views/locCache/locCache.html
+++ b/src/main/webapp/views/locCache/locCache.html
@@ -1,5 +1,6 @@
 <!DOCTYPE html>
 <html lang="en">
+
 <head>
     <meta charset="utf-8">
     <title></title>
@@ -10,46 +11,48 @@
     <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
     <link rel="stylesheet" href="../../static/css/cool.css" media="all">
 </head>
+
 <body>
 
-<div class="layui-fluid">
-    <div class="layui-card">
-        <div class="layui-card-body">
-            <div class="layui-form toolbar" id="search-box">
-                <div class="layui-form-item">
-                    <div class="layui-inline">
-                        <div class="layui-input-inline">
-                            <input class="layui-input" type="text" name="loc_no" placeholder="缂栧彿" autocomplete="off">
+    <div class="layui-fluid">
+        <div class="layui-card">
+            <div class="layui-card-body">
+                <div class="layui-form toolbar" id="search-box">
+                    <div class="layui-form-item">
+                        <div class="layui-inline">
+                            <div class="layui-input-inline">
+                                <input class="layui-input" type="text" name="loc_no" placeholder="缂栧彿"
+                                    autocomplete="off">
+                            </div>
                         </div>
-                    </div>
-                    <div class="layui-inline" style="width: 300px">
-                        <div class="layui-input-inline">
-                            <input class="layui-input layui-laydate-range" name="create_time" type="text"
-                                   placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                        <div 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>
-                    <div class="layui-inline">
-                        <div class="layui-input-inline">
-                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�"
-                                   autocomplete="off">
+                        <div class="layui-inline">
+                            <div class="layui-input-inline">
+                                <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�"
+                                    autocomplete="off">
+                            </div>
                         </div>
-                    </div>
-                    <div class="layui-inline">&emsp;
-                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
-                            <i class="layui-icon">&#xe615;</i>鎼滅储
-                        </button>
-                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
-                            <i class="layui-icon">&#xe666;</i>閲嶇疆
-                        </button>
+                        <div class="layui-inline">&emsp;
+                            <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                                <i class="layui-icon">&#xe615;</i>鎼滅储
+                            </button>
+                            <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                                <i class="layui-icon">&#xe666;</i>閲嶇疆
+                            </button>
+                        </div>
                     </div>
                 </div>
+                <table class="layui-hide" id="locCache" lay-filter="locCache"></table>
             </div>
-            <table class="layui-hide" id="locCache" lay-filter="locCache"></table>
         </div>
     </div>
-</div>
 
-<script type="text/html" id="toolbar">
+    <script type="text/html" id="toolbar">
     <div class="layui-btn-container">
         <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
         <button class="layui-btn layui-btn-sm" id="btn-print-batch" lay-event="batchModifties">鎵归噺淇敼</button>
@@ -59,214 +62,217 @@
 </script>
 
 
-<div id="batchModify" style="margin: 20px 0 10px 30px; display: none">
-    <div class="layui-form layui-form-pane">
-        <div class="layui-form-item">
-            <div class="layui-inline">
-                <label class="layui-form-label"><span class="not-null">*</span>搴撳尯鍚嶇О锛�</label>
-                <div class="layui-input-inline cool-auto-complete">
-                    <input id="identifying" name="identifying" class="layui-input" type="text" style="display: none">
-                    <input id="identifying$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)"
-                           type="text" onfocus=this.blur()>
-                    <div class="cool-auto-complete-window">
-                        <input class="cool-auto-complete-window-input" data-key="basAreasQueryBywhsType"
-                               onkeyup="autoLoad(this.getAttribute('data-key'))">
-                        <select class="cool-auto-complete-window-select" data-key="basAreasQueryBywhsTypeSelect"
+    <div id="batchModify" style="margin: 20px 0 10px 30px; display: none">
+        <div class="layui-form layui-form-pane">
+            <div class="layui-form-item">
+                <div class="layui-inline">
+                    <label class="layui-form-label"><span class="not-null">*</span>搴撳尯鍚嶇О锛�</label>
+                    <div class="layui-input-inline cool-auto-complete">
+                        <input id="identifying" name="identifying" class="layui-input" type="text"
+                            style="display: none">
+                        <input id="identifying$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)"
+                            type="text" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="basAreasQueryBywhsType"
+                                onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="basAreasQueryBywhsTypeSelect"
                                 onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
-                        </select>
+                            </select>
+                        </div>
                     </div>
                 </div>
             </div>
-        </div>
-        <!-- 搴撲綅绫诲瀷 -->
-        <div class="layui-form-item">
-            <label class="layui-form-label">楂樹綆绫诲瀷</label>
-            <div class="layui-input-inline">
-                <select name="locType1">
-                    <option style="display: none"></option>
-                    <option value="0">鏈煡</option>
-                    <option value="1">浣庡簱浣�</option>
-                    <option value="2">楂樺簱浣�</option>
-                </select>
-            </div>
-        </div>
-        <div class="layui-form-item">
-            <label class="layui-form-label">瀹界獎绫诲瀷</label>
-            <div class="layui-input-inline">
-                <select name="locType2">
-                    <option style="display: none"></option>
-                    <option value="0">鏈煡</option>
-                    <option value="1">绐勫簱浣�</option>
-                    <option value="2">瀹藉簱浣�</option>
-                </select>
-            </div>
-        </div>
-        <div class="layui-form-item">
-            <label class="layui-form-label">杞婚噸绫诲瀷</label>
-            <div class="layui-input-inline">
-                <select name="locType3">
-                    <option style="display: none"></option>
-                    <option value="0">鏈煡</option>
-                    <option value="1">杞诲簱浣�</option>
-                    <option value="2">閲嶅簱浣�</option>
-                </select>
-            </div>
-        </div>
-        <div style="text-align: center; margin-top: 20px">
-            <button class="layui-btn layui-btn-normal" id="initDo" lay-submit lay-filter="initDo">
-                纭畾
-            </button>
-        </div>
-    </div>
-</div>
-
-
-<!-- 閲嶇疆搴撲綅寮圭獥 -->
-<div id="resetLocDiv" style="margin: 20px 0 10px 30px; display: none">
-    <div class="layui-form layui-form-pane">
-        <div class="layui-form-item">
-            <div class="layui-inline">
-                <label class="layui-form-label">鍒犻櫎搴撲綅</label>
-                <div class="layui-input-inline" style="width: 100px;">
-                    <input type="checkbox" name="enable" lay-skin="switch" value="1" lay-text="鍒犻櫎|淇濈暀">
-                </div>
-            </div>
-        </div>
-        <div class="layui-form-item">
-            <div class="layui-inline">
-                <label class="layui-form-label"><span class="not-null">*</span>搴撳尯鍚嶇О锛�</label>
-                <div class="layui-input-inline cool-auto-complete">
-                    <input id="identifying" name="identifying" class="layui-input" type="text" style="display: none">
-                    <input id="identifying$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)"
-                           type="text" onfocus=this.blur()>
-                    <div class="cool-auto-complete-window">
-                        <input class="cool-auto-complete-window-input" data-key="basAreasQueryBywhsType"
-                               onkeyup="autoLoad(this.getAttribute('data-key'))">
-                        <select class="cool-auto-complete-window-select" data-key="basAreasQueryBywhsTypeSelect"
-                                onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
-                        </select>
-                    </div>
-                </div>
-            </div>
-        </div>
-        <!-- 鎺� -->
-        <div class="layui-form-item">
-            <div class="layui-inline">
-                <label class="layui-form-label">璧锋鎺�</label>
-                <div class="layui-input-inline" style="width: 100px;">
-                    <input type="text" name="startRow" autocomplete="off" class="layui-input"
-                           lay-verify="required|number">
-                </div>
-                <div class="layui-form-mid">-</div>
-                <div class="layui-input-inline" style="width: 100px;">
-                    <input type="text" name="endRow" autocomplete="off" class="layui-input"
-                           lay-verify="required|number">
-                </div>
-            </div>
-        </div>
-        <!-- 鍒� -->
-        <div class="layui-form-item">
-            <div class="layui-inline">
-                <label class="layui-form-label">璧锋鍒�</label>
-                <div class="layui-input-inline" style="width: 100px;">
-                    <input type="text" name="startBay" autocomplete="off" class="layui-input"
-                           lay-verify="required|number">
-                </div>
-                <div class="layui-form-mid">-</div>
-                <div class="layui-input-inline" style="width: 100px;">
-                    <input type="text" name="endBay" autocomplete="off" class="layui-input"
-                           lay-verify="required|number">
-                </div>
-            </div>
-        </div>
-        <!-- 灞� -->
-        <div class="layui-form-item">
-            <div class="layui-inline">
-                <label class="layui-form-label">璧锋灞�</label>
-                <div class="layui-input-inline" style="width: 100px;">
-                    <input type="text" name="startLev" autocomplete="off" class="layui-input"
-                           lay-verify="required|number">
-                </div>
-                <div class="layui-form-mid">-</div>
-                <div class="layui-input-inline" style="width: 100px;">
-                    <input type="text" name="endLev" autocomplete="off" class="layui-input"
-                           lay-verify="required|number">
-                </div>
-            </div>
-        </div>
-        <div class="layui-form-item">
-            <label class="layui-form-label">鍫嗗灈鏈烘暟閲�</label>
-            <div class="layui-input-inline">
-                <input type="text" name="crnAmount" lay-verify="required|number" autocomplete="off" class="layui-input">
-            </div>
-        </div>
-        <div class="layui-form-item">
-            <div class="layui-inline">
-                <label class="layui-form-label">璧峰鍫嗗灈鏈�</label>
+            <!-- 搴撲綅绫诲瀷 -->
+            <div class="layui-form-item">
+                <label class="layui-form-label">楂樹綆绫诲瀷</label>
                 <div class="layui-input-inline">
-                    <input type="text" name="staCrn" autocomplete="off" class="layui-input" lay-verify="number">
+                    <select name="locType1">
+                        <option style="display: none"></option>
+                        <option value="0">鏈煡</option>
+                        <option value="1">浣庡簱浣�</option>
+                        <option value="2">楂樺簱浣�</option>
+                    </select>
                 </div>
             </div>
-        </div>
-        <!-- 搴撲綅绫诲瀷 -->
-        <div class="layui-form-item">
-            <label class="layui-form-label">楂樹綆绫诲瀷</label>
-            <div class="layui-input-inline">
-                <select name="locType1">
-                    <option style="display: none"></option>
-                    <option value="0">鏈煡</option>
-                    <option value="1">浣庡簱浣�</option>
-                    <option value="2">楂樺簱浣�</option>
-                </select>
+            <div class="layui-form-item">
+                <label class="layui-form-label">瀹界獎绫诲瀷</label>
+                <div class="layui-input-inline">
+                    <select name="locType2">
+                        <option style="display: none"></option>
+                        <option value="0">鏈煡</option>
+                        <option value="1">绐勫簱浣�</option>
+                        <option value="2">瀹藉簱浣�</option>
+                    </select>
+                </div>
             </div>
-        </div>
-        <div class="layui-form-item">
-            <label class="layui-form-label">瀹界獎绫诲瀷</label>
-            <div class="layui-input-inline">
-                <select name="locType2">
-                    <option style="display: none"></option>
-                    <option value="0">鏈煡</option>
-                    <option value="1">绐勫簱浣�</option>
-                    <option value="2">瀹藉簱浣�</option>
-                </select>
+            <div class="layui-form-item">
+                <label class="layui-form-label">杞婚噸绫诲瀷</label>
+                <div class="layui-input-inline">
+                    <select name="locType3">
+                        <option style="display: none"></option>
+                        <option value="0">鏈煡</option>
+                        <option value="1">杞诲簱浣�</option>
+                        <option value="2">閲嶅簱浣�</option>
+                    </select>
+                </div>
             </div>
-        </div>
-        <div class="layui-form-item">
-            <label class="layui-form-label">杞婚噸绫诲瀷</label>
-            <div class="layui-input-inline">
-                <select name="locType3">
-                    <option style="display: none"></option>
-                    <option value="0">鏈煡</option>
-                    <option value="1">杞诲簱浣�</option>
-                    <option value="2">閲嶅簱浣�</option>
-                </select>
+            <div style="text-align: center; margin-top: 20px">
+                <button class="layui-btn layui-btn-normal" id="initDo" lay-submit lay-filter="initDo">
+                    纭畾
+                </button>
             </div>
-        </div>
-        <div style="text-align: center; margin-top: 20px">
-            <button class="layui-btn layui-btn-radius layui-btn-normal" id="initDo" lay-submit lay-filter="initDo">
-                纭畾
-            </button>
         </div>
     </div>
-</div>
 
-<script type="text/html" id="toolbar">
+
+    <!-- 閲嶇疆搴撲綅寮圭獥 -->
+    <div id="resetLocDiv" style="margin: 20px 0 10px 30px; display: none">
+        <div class="layui-form layui-form-pane">
+            <div class="layui-form-item">
+                <div class="layui-inline">
+                    <label class="layui-form-label">鍒犻櫎搴撲綅</label>
+                    <div class="layui-input-inline" style="width: 100px;">
+                        <input type="checkbox" name="enable" lay-skin="switch" value="1" lay-text="鍒犻櫎|淇濈暀">
+                    </div>
+                </div>
+            </div>
+            <div class="layui-form-item">
+                <div class="layui-inline">
+                    <label class="layui-form-label"><span class="not-null">*</span>搴撳尯鍚嶇О锛�</label>
+                    <div class="layui-input-inline cool-auto-complete">
+                        <input id="initIdentifying" name="identifying" class="layui-input" type="text"
+                            style="display: none">
+                        <input id="initIdentifying$" class="layui-input cool-auto-complete-div"
+                            onclick="autoShow(this.id)" type="text" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="basAreasQueryBywhsType2"
+                                onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="basAreasQueryBywhsType2Select"
+                                onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <!-- 鎺� -->
+            <div class="layui-form-item">
+                <div class="layui-inline">
+                    <label class="layui-form-label">璧锋鎺�</label>
+                    <div class="layui-input-inline" style="width: 100px;">
+                        <input type="text" name="startRow" autocomplete="off" class="layui-input"
+                            lay-verify="required|number">
+                    </div>
+                    <div class="layui-form-mid">-</div>
+                    <div class="layui-input-inline" style="width: 100px;">
+                        <input type="text" name="endRow" autocomplete="off" class="layui-input"
+                            lay-verify="required|number">
+                    </div>
+                </div>
+            </div>
+            <!-- 鍒� -->
+            <div class="layui-form-item">
+                <div class="layui-inline">
+                    <label class="layui-form-label">璧锋鍒�</label>
+                    <div class="layui-input-inline" style="width: 100px;">
+                        <input type="text" name="startBay" autocomplete="off" class="layui-input"
+                            lay-verify="required|number">
+                    </div>
+                    <div class="layui-form-mid">-</div>
+                    <div class="layui-input-inline" style="width: 100px;">
+                        <input type="text" name="endBay" autocomplete="off" class="layui-input"
+                            lay-verify="required|number">
+                    </div>
+                </div>
+            </div>
+            <!-- 灞� -->
+            <div class="layui-form-item">
+                <div class="layui-inline">
+                    <label class="layui-form-label">璧锋灞�</label>
+                    <div class="layui-input-inline" style="width: 100px;">
+                        <input type="text" name="startLev" autocomplete="off" class="layui-input"
+                            lay-verify="required|number">
+                    </div>
+                    <div class="layui-form-mid">-</div>
+                    <div class="layui-input-inline" style="width: 100px;">
+                        <input type="text" name="endLev" autocomplete="off" class="layui-input"
+                            lay-verify="required|number">
+                    </div>
+                </div>
+            </div>
+            <div class="layui-form-item">
+                <label class="layui-form-label">鍫嗗灈鏈烘暟閲�</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="crnAmount" lay-verify="required|number" autocomplete="off"
+                        class="layui-input">
+                </div>
+            </div>
+            <div class="layui-form-item">
+                <div class="layui-inline">
+                    <label class="layui-form-label">璧峰鍫嗗灈鏈�</label>
+                    <div class="layui-input-inline">
+                        <input type="text" name="staCrn" autocomplete="off" class="layui-input" lay-verify="number">
+                    </div>
+                </div>
+            </div>
+            <!-- 搴撲綅绫诲瀷 -->
+            <div class="layui-form-item">
+                <label class="layui-form-label">楂樹綆绫诲瀷</label>
+                <div class="layui-input-inline">
+                    <select name="locType1">
+                        <option style="display: none"></option>
+                        <option value="0">鏈煡</option>
+                        <option value="1">浣庡簱浣�</option>
+                        <option value="2">楂樺簱浣�</option>
+                    </select>
+                </div>
+            </div>
+            <div class="layui-form-item">
+                <label class="layui-form-label">瀹界獎绫诲瀷</label>
+                <div class="layui-input-inline">
+                    <select name="locType2">
+                        <option style="display: none"></option>
+                        <option value="0">鏈煡</option>
+                        <option value="1">绐勫簱浣�</option>
+                        <option value="2">瀹藉簱浣�</option>
+                    </select>
+                </div>
+            </div>
+            <div class="layui-form-item">
+                <label class="layui-form-label">杞婚噸绫诲瀷</label>
+                <div class="layui-input-inline">
+                    <select name="locType3">
+                        <option style="display: none"></option>
+                        <option value="0">鏈煡</option>
+                        <option value="1">杞诲簱浣�</option>
+                        <option value="2">閲嶅簱浣�</option>
+                    </select>
+                </div>
+            </div>
+            <div style="text-align: center; margin-top: 20px">
+                <button class="layui-btn layui-btn-radius layui-btn-normal" id="initDo" lay-submit lay-filter="initDo">
+                    纭畾
+                </button>
+            </div>
+        </div>
+    </div>
+
+    <script type="text/html" id="toolbar">
     <div class="layui-btn-container">
         <!--        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>-->
     </div>
 </script>
 
-<script type="text/html" id="operate">
+    <script type="text/html" id="operate">
     <a class="layui-btn layui-btn-xs btn-detlShow" lay-event="showDetl">鏄庣粏</a>
 <!--    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>-->
     <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
 </script>
 
-<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
-<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
-<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
-<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
-<script type="text/javascript" src="../../static/js/locCache/locCache.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+    <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../../static/js/locCache/locCache.js" charset="utf-8"></script>
 </body>
-</html>
 
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/locCache/locDetail.html b/src/main/webapp/views/locCache/locDetail.html
index 48b34c0..712130e 100644
--- a/src/main/webapp/views/locCache/locDetail.html
+++ b/src/main/webapp/views/locCache/locDetail.html
@@ -1,5 +1,6 @@
 <!DOCTYPE html>
 <html lang="en">
+
 <head>
     <meta charset="utf-8">
     <title></title>
@@ -12,14 +13,15 @@
     <style>
     </style>
 </head>
+
 <body>
-<div class="layui-inline" style="width:31%;margin-top: 20px">
-    <label class="layui-form-label">搴� 浣� 鍙凤細</label>
-    <div class="layui-input-inline">
-        <input id="locNo" class="layui-input" type="text" disabled="disabled">
+    <div class="layui-inline" style="width:31%;margin-top: 20px">
+        <label class="layui-form-label">搴� 浣� 鍙凤細</label>
+        <div class="layui-input-inline">
+            <input id="locNo" class="layui-input" type="text" disabled="disabled">
+        </div>
     </div>
-</div>
-<table class="layui-hide" id="locCacheDetls" lay-filter="locCacheDetls"></table>
+    <table class="layui-hide" id="locCacheDetls" lay-filter="locCacheDetls"></table>
 </body>
 <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
 <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
@@ -31,7 +33,7 @@
 
     function getCol() {
         var cols = [
-            {field: 'locNo', align: 'center', title: '搴撲綅鍙�'}
+            { field: 'locNo', align: 'center', title: '搴撲綅鍙�' }
         ];
         cols.push.apply(cols, cacheCols);
         return cols;
@@ -46,9 +48,9 @@
         // 鏁版嵁娓叉煋
         tableIns1 = table.render({
             elem: '#locCacheDetls',
-            headers: {token: localStorage.getItem('token')},
-            url: baseUrl + '/locDetl/list/auth',
-            where: {loc_no: parent.locNo},
+            headers: { token: localStorage.getItem('token') },
+            url: baseUrl + '/locCacheDetl/list/auth',
+            where: { loc_no: parent.locNo },
             page: true,
             limit: 16,
             limits: [16, 30, 50, 100, 200, 500],
@@ -88,5 +90,5 @@
         });
     });
 </script>
-</html>
 
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/locCacheDetl/locCacheDetl.html b/src/main/webapp/views/locCacheDetl/locCacheDetl.html
new file mode 100644
index 0000000..2307637
--- /dev/null
+++ b/src/main/webapp/views/locCacheDetl/locCacheDetl.html
@@ -0,0 +1,386 @@
+<!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">
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <div class="layui-form toolbar" id="search-box">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+                        </div>
+                    </div>
+                     <div class="layui-inline" style="width: 300px">
+                        <div class="layui-input-inline">
+                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                            <i class="layui-icon">&#xe666;</i>閲嶇疆
+                        </button>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="locCacheDetl" lay-filter="locCacheDetl"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/locCacheDetl/locCacheDetl.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form model-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="locId" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="locNo" placeholder="璇疯緭鍏�" lay-vertype="tips" lay-verify="required">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="areaId" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="areaName" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="zpallet" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="anfme" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="matnr" placeholder="璇疯緭鍏�" lay-vertype="tips" lay-verify="required">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="maktx" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="batch" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="orderNo" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="specs" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="model" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="color" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="brand" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="unit" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="price" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="sku" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="units" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="barcode" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="origin" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="manu" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="manuDate" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="weight" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="itemNum" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="safeQty" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="manLength" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="volume" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="threeCode" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="supp" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="suppCode" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="beBatch" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="deadTime" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="deadWarn" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="source" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="inspect" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="danger" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="modiUser" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="modiTime" id="modiTime$" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="appeUser" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="appeTime" id="appeTime$" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="memo" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="storeDate" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="owner" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="frozen" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="standby1" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="standby2" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="standby3" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="boxType1" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="boxType2" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="boxType3" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+
+             </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+</html>
+

--
Gitblit v1.9.1