From f1223c78a7b93d89017c26770390ef446cc57ac6 Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期五, 14 七月 2023 08:06:28 +0800
Subject: [PATCH] 完善AGV相关功能

---
 src/main/java/com/zy/asrs/service/impl/AgvLocRuleServiceImpl.java   |   12 
 src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java   |   75 
 src/main/java/com/zy/asrs/controller/AgvBasDevpController.java      |  114 +
 src/main/java/com/zy/asrs/mapper/AgvWrkLastnoMapper.java            |   12 
 src/main/java/com/zy/asrs/mapper/AgvWrkDetlMapper.java              |   32 
 src/main/java/com/zy/asrs/service/impl/AgvWrkLastnoServiceImpl.java |   12 
 src/main/webapp/views/agvLocRule/locRule.html                       |  208 ++
 src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java      | 1212 ----------
 src/main/webapp/views/agvWrkMast/wrkMast.html                       |    5 
 src/main/webapp/static/js/agvLocMast/locMast.js                     |   48 
 src/main/webapp/static/js/common.js                                 |   16 
 src/main/webapp/static/js/agvLocRule/locRule.js                     |  277 ++
 src/main/java/com/zy/asrs/entity/AgvWrkLastno.java                  |  215 ++
 src/main/java/com/zy/asrs/service/AgvLocRuleService.java            |    8 
 src/main/webapp/views/agvBasDevp/basDevpWaitPakinDetail.html        |  101 
 src/main/java/com/zy/common/service/AgvCommonService.java           |  157 +
 src/main/java/com/zy/asrs/controller/AgvMobileController.java       |   42 
 src/main/webapp/views/agvWrkMast/wrkMast_detail.html                |    2 
 src/main/java/com/zy/asrs/mapper/AgvLocRuleMapper.java              |   20 
 src/main/java/com/zy/asrs/service/AgvBasDevpService.java            |    6 
 src/main/java/com/zy/asrs/entity/param/AgvTaskkDescribeParam.java   |   21 
 src/main/java/com/zy/asrs/controller/AgvLocRuleController.java      |  172 +
 src/main/java/com/zy/asrs/entity/param/AgvTaskParam.java            |   13 
 src/main/java/com/zy/asrs/entity/AgvWrkDetl.java                    |  365 +++
 src/main/webapp/views/mat/mat.html                                  |   23 
 src/main/java/com/zy/asrs/controller/AgvWorkController.java         |   19 
 src/main/java/com/zy/asrs/controller/AgvWrkDetlController.java      |  128 +
 pom.xml                                                             |    2 
 src/main/java/com/zy/asrs/service/impl/AgvWrkDetlServiceImpl.java   |   95 
 src/main/resources/mapper/AgvLocMastMapper.xml                      |  208 ++
 src/main/webapp/static/js/agvBasDevp/basDevp.js                     |  131 +
 src/main/java/com/zy/asrs/service/AgvWorkService.java               |   80 
 src/main/webapp/static/js/agvWaitPakin/waitPakin.js                 |    2 
 src/main/webapp/views/agvBasDevp/basDevp_detail.html                |    2 
 src/main/java/com/zy/asrs/mapper/AgvLocMastMapper.java              |   26 
 src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java    |   35 
 src/main/java/com/zy/asrs/controller/AgvWrkMastController.java      |  159 +
 src/main/java/com/zy/asrs/service/AgvWrkDetlService.java            |   28 
 src/main/webapp/views/agvWrkDetl/wrkDetl.html                       |    4 
 src/main/webapp/static/js/agvWrkMast/wrkMast.js                     |  741 +++++++
 src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java              |    7 
 src/main/java/com/zy/asrs/service/AgvMobileService.java             |    7 
 src/main/java/com/zy/asrs/entity/param/AgvTaskCreateParam.java      |   30 
 src/main/java/com/zy/asrs/service/AgvLocMastService.java            |   20 
 src/main/java/com/zy/asrs/service/AgvWrkLastnoService.java          |    8 
 src/main/webapp/static/js/agvWrkDetl/wrkDetl.js                     |  486 ++++
 /dev/null                                                           |   11 
 src/main/java/com/zy/asrs/controller/AgvLocMastController.java      |   33 
 src/main/java/com/zy/asrs/entity/AgvLocRule.java                    |  283 ++
 src/main/webapp/views/agvBasDevp/basDevp.html                       |   15 
 src/main/java/com/zy/asrs/entity/AgvWrkMast.java                    |  410 +++
 src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java   |   91 
 src/main/webapp/views/agvWrkMast/wrkDetl.html                       |    4 
 src/main/resources/application.yml                                  |    2 
 src/main/webapp/static/js/agvStoMan/stoQue.js                       |    4 
 55 files changed, 4,892 insertions(+), 1,347 deletions(-)

diff --git a/pom.xml b/pom.xml
index a393cee..171c0f9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -106,7 +106,7 @@
     </dependencies>
 
     <build>
-        <finalName>xzjlwms</finalName>
+        <finalName>tzskwms</finalName>
         <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
diff --git a/src/main/java/com/zy/asrs/controller/AgvBasDevpController.java b/src/main/java/com/zy/asrs/controller/AgvBasDevpController.java
index e0ccebf..c2f2115 100644
--- a/src/main/java/com/zy/asrs/controller/AgvBasDevpController.java
+++ b/src/main/java/com/zy/asrs/controller/AgvBasDevpController.java
@@ -1,29 +1,33 @@
 package com.zy.asrs.controller;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
 import com.core.common.Cools;
 import com.core.common.DateUtils;
 import com.core.common.R;
 import com.zy.asrs.entity.AgvBasDevp;
+import com.zy.asrs.entity.BasDevp;
+import com.zy.asrs.entity.param.LocMastInitParam;
 import com.zy.asrs.service.AgvBasDevpService;
 import com.zy.common.web.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
-import java.util.Date;
-import java.util.Map;
+import java.util.*;
 
 @RestController
+@RequestMapping("/agv")
 public class AgvBasDevpController extends BaseController {
 
     @Autowired
     AgvBasDevpService agvBasDevpService;
 
-    @RequestMapping(value = "/agvBasDevp/list/auth")
+    @RequestMapping(value = "/basDevp/list/auth")
     @ManagerAuth
     public R list(@RequestParam(defaultValue = "1")Integer curr,
                   @RequestParam(defaultValue = "10")Integer limit,
@@ -37,7 +41,7 @@
         return R.ok(agvBasDevpService.selectPage(new Page<>(curr, limit), wrapper));
     }
 
-    @RequestMapping(value = "/agvBasDevp/add/auth")
+    @RequestMapping(value = "/basDevp/add/auth")
     @ManagerAuth(memo = "绔欑偣娣诲姞")
     public R add(AgvBasDevp agvBasDevp) {
         agvBasDevp.setModiUser(getUserId());
@@ -46,6 +50,101 @@
         agvBasDevp.setAppeTime(new Date());
         agvBasDevp.setLocSts("O");
         agvBasDevpService.insert(agvBasDevp);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basDevp/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<AgvBasDevp> wrapper = new EntityWrapper<AgvBasDevp>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != agvBasDevpService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(BasDevp.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basDevp/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") Long id) {
+        return R.ok(agvBasDevpService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/basDevp/update/auth")
+    @ManagerAuth(memo = "绔欑偣淇敼")
+    public R update(AgvBasDevp basDevp){
+        if (Cools.isEmpty(basDevp) || null==basDevp.getDevNo()){
+            return R.error();
+        }
+        basDevp.setModiUser(getUserId());
+        basDevp.setModiTime(new Date());
+        agvBasDevpService.updateById(basDevp);
+        return R.ok("淇敼瀹屾垚");
+    }
+
+    @RequestMapping(value = "/basDevp/delete/auth")
+    @ManagerAuth(memo = "绔欑偣鍒犻櫎")
+    public R delete(@RequestParam String param){
+        List<AgvBasDevp> list = JSONArray.parseArray(param, AgvBasDevp.class);
+        if (Cools.isEmpty(list)){
+            return R.error();
+        }
+        for (AgvBasDevp entity : list){
+            agvBasDevpService.delete(new EntityWrapper<>(entity));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basDevp/unbind/auth")
+    @ManagerAuth(memo = "绔欑偣瑙g粦")
+    public R unbind(@RequestParam String param){
+        AgvBasDevp agvBasDevp = JSONArray.parseObject(param,AgvBasDevp.class);
+
+        //鑻ュ綋鍓嶇珯鐐硅揣浣嶇姸鎬佷笉涓篎.鍦ㄥ簱鐘舵�侊紝鍒欒繑鍥為敊璇�
+        if(!agvBasDevp.getLocSts().equals("F")){
+            return R.error("褰撳墠绔欑偣璐т綅鐘舵�佷笉涓哄湪搴擄紝鏃犳硶瑙i櫎缁戝畾");
+        }
+        agvBasDevp.setLocSts("O");
+        agvBasDevp.setBarcode("");
+        agvBasDevpService.update(agvBasDevp,new EntityWrapper<AgvBasDevp>().eq("dev_no",agvBasDevp.getDevNo()));
+
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basDevp/export/auth")
+    @ManagerAuth(memo = "绔欑偣瀵煎嚭")
+    public R export(@RequestBody JSONObject param){
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        EntityWrapper<AgvBasDevp> wrapper = new EntityWrapper<>();
+        Map<String, Object> map = excludeTrash(param.getJSONObject("basDevp"));
+        convert(map, wrapper);
+        List<AgvBasDevp> list = agvBasDevpService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/basDevpQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<AgvBasDevp> wrapper = new EntityWrapper<>();
+        wrapper.like("dev_no", condition);
+        Page<AgvBasDevp> page = agvBasDevpService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (AgvBasDevp basDevp : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", basDevp.getDevNo());
+            map.put("value", basDevp.getDevNo());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/basDevp/init/auth")
+    @ManagerAuth(memo = "鍒濆鍖栫珯鐐�")
+    public R init(LocMastInitParam param) {
+        //娓呯┖鍘熸湁搴撲綅
+        agvBasDevpService.clearBasDevp();
+        //鍒濆鍖�1妤�3妤肩珯鐐�
+        agvBasDevpService.initBasDevp();
+
         return R.ok();
     }
 
@@ -61,4 +160,5 @@
             }
         }
     }
+
 }
diff --git a/src/main/java/com/zy/asrs/controller/AgvLocMastController.java b/src/main/java/com/zy/asrs/controller/AgvLocMastController.java
index 2d4f07c..e287d77 100644
--- a/src/main/java/com/zy/asrs/controller/AgvLocMastController.java
+++ b/src/main/java/com/zy/asrs/controller/AgvLocMastController.java
@@ -10,10 +10,10 @@
 import com.core.common.Cools;
 import com.core.common.DateUtils;
 import com.core.common.R;
-import com.core.exception.CoolException;
-import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.AgvLocMast;
+import com.zy.asrs.entity.LocMast;
 import com.zy.asrs.entity.param.LocMastInitParam;
-import com.zy.asrs.service.AgvLockMastService;
+import com.zy.asrs.service.AgvLocMastService;
 import com.zy.common.web.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
@@ -27,12 +27,13 @@
 import java.util.Map;
 
 @RestController
+@RequestMapping("/agv")
 public class AgvLocMastController extends BaseController {
 
     @Autowired
-    private AgvLockMastService agvLockMastService;
+    private AgvLocMastService agvLockMastService;
 
-    @RequestMapping(value = "/agvLocMast/list/auth")
+    @RequestMapping(value = "/locMast/list/auth")
     @ManagerAuth
     public R list(@RequestParam(defaultValue = "1")Integer curr,
                   @RequestParam(defaultValue = "10")Integer limit,
@@ -46,7 +47,7 @@
         return R.ok(agvLockMastService.selectPage(new Page<>(curr, limit), wrapper.eq("status",0)));
     }
 
-    @RequestMapping(value = "/avgLocMast/add/auth")
+    @RequestMapping(value = "/locMast/add/auth")
     @ManagerAuth(memo = "搴撲綅娣诲姞")
     public R add(AgvLocMast agvLocMast) {
         agvLocMast.setModiUser(getUserId());
@@ -57,7 +58,7 @@
         return R.ok();
     }
 
-    @RequestMapping(value = "/agvLocMast/update/auth")
+    @RequestMapping(value = "/locMast/update/auth")
     @ManagerAuth(memo = "搴撲綅淇敼")
     @Transactional
     public R update(LocMast locMast){
@@ -65,7 +66,7 @@
         return R.ok();
     }
 
-    @RequestMapping(value = "/agvLocMast/delete/auth")
+    @RequestMapping(value = "/locMast/delete/auth")
     @ManagerAuth(memo = "搴撲綅鍒犻櫎")
     public R delete(@RequestParam String param){
         List<AgvLocMast> list = JSONArray.parseArray(param, AgvLocMast.class);
@@ -78,7 +79,7 @@
         return R.ok();
     }
 
-    @RequestMapping(value = "/agvLocMast/export/auth")
+    @RequestMapping(value = "/locMast/export/auth")
     @ManagerAuth(memo = "搴撲綅瀵煎嚭")
     public R export(@RequestBody JSONObject param){
         List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
@@ -89,7 +90,7 @@
         return R.ok(exportSupport(list, fields));
     }
 
-    @RequestMapping(value = "/agvLocMast/check/column/auth")
+    @RequestMapping(value = "/locMast/check/column/auth")
     @ManagerAuth
     public R query(@RequestBody JSONObject param) {
         Wrapper<AgvLocMast> wrapper = new EntityWrapper<AgvLocMast>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
@@ -99,13 +100,17 @@
         return R.ok();
     }
 
-    @RequestMapping(value = "/AgvLocMast/init/auth")
+    @RequestMapping(value = "/locMast/init/auth")
     @ManagerAuth(memo = "鍒濆鍖栧簱浣�")
-//    @Transactional
     public R init(LocMastInitParam param) {
-        //to do
+        //娓呯┖鍘熸湁搴撲綅
+        agvLockMastService.clearLoc();
+        //鍒濆鍖栦竴妤肩珯鐐�
+        agvLockMastService.initLocFloor1();
+        //鍒濆鍖栦笁妤肩珯鐐�
+        agvLockMastService.initLocFloor3();
 
-        return null;
+        return R.ok();
     }
 
     private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
diff --git a/src/main/java/com/zy/asrs/controller/AgvLocRuleController.java b/src/main/java/com/zy/asrs/controller/AgvLocRuleController.java
new file mode 100644
index 0000000..683c1ee
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/AgvLocRuleController.java
@@ -0,0 +1,172 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.AgvLocRule;
+import com.zy.asrs.entity.LocRule;
+import com.zy.asrs.service.AgvLocMastService;
+import com.zy.asrs.service.AgvLocRuleService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+@RequestMapping("/agv")
+public class AgvLocRuleController extends BaseController {
+
+    @Autowired
+    private AgvLocRuleService locRuleService;
+    @Autowired
+    private AgvLocMastService locMastService;
+
+    @RequestMapping(value = "/locRule/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(locRuleService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/locRule/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<AgvLocRule> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        allLike(AgvLocRule.class, param.keySet(), wrapper, condition);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(locRuleService.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 = "/locRule/add/auth")
+    @ManagerAuth
+    public R add(AgvLocRule locRule) {
+        if ((locRule.getRowEnd() < locRule.getRowBeg()) || locRule.getRowBeg() <= 0 || locRule.getRowEnd() <= 0) {
+            return R.error("鎺掑尯闂撮敊璇�");
+        }
+        if ((locRule.getBayEnd() < locRule.getBayBeg()) || locRule.getBayBeg() <= 0 || locRule.getBayEnd() <= 0) {
+            return R.error("鍒楀尯闂撮敊璇�");
+        }
+        if ((locRule.getLevEnd() < locRule.getLevBeg()) || locRule.getLevBeg() <= 0 || locRule.getLevEnd() <= 0) {
+            return R.error("灞傚尯闂撮敊璇�");
+        }
+        Date now = new Date();
+        locRule.setStatus(1);
+        locRule.setCreateBy(getUserId());
+        locRule.setCreateTime(now);
+        locRule.setUpdateBy(getUserId());
+        locRule.setUpdateTime(now);
+        Integer locType2 = 1;//鍗曞搧鍖哄煙
+//        if (locRule.getMixed() == 1) {
+//            //娣疯浇
+//            locRule.setMatnr("00000000");
+//            locType2 = 2;//娣锋斁鍖哄煙
+//        }
+        locRuleService.insert(locRule);
+        locMastService.updateLocType2ByRBL(locType2, locRule);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/locRule/update/auth")
+	@ManagerAuth
+    public R update(AgvLocRule locRule){
+        if (Cools.isEmpty(locRule) || null==locRule.getId()){
+            return R.error();
+        }
+        if ((locRule.getRowEnd() < locRule.getRowBeg()) || locRule.getRowBeg() <= 0 || locRule.getRowEnd() <= 0) {
+            return R.error("鎺掑尯闂撮敊璇�");
+        }
+        if ((locRule.getBayEnd() < locRule.getBayBeg()) || locRule.getBayBeg() <= 0 || locRule.getBayEnd() <= 0) {
+            return R.error("鍒楀尯闂撮敊璇�");
+        }
+        if ((locRule.getLevEnd() < locRule.getLevBeg()) || locRule.getLevBeg() <= 0 || locRule.getLevEnd() <= 0) {
+            return R.error("灞傚尯闂撮敊璇�");
+        }
+        locRule.setUpdateBy(getUserId());
+        locRule.setUpdateTime(new Date());
+        locRuleService.updateById(locRule);
+        Integer locType2 = 1;//鍗曞搧鍖哄煙
+//        if (locRule.getMixed() == 0) {
+//            //locRuleService.updateKeepGoByMatnr(locRule.getMatnr(), locRule.getKeepGo());
+//        }else {//娣疯浇
+//            //locRuleService.updateKeepGoByMixed(locRule.getKeepGo());
+//            locType2 = 2;//娣锋斁鍖哄煙
+//        }
+        locMastService.updateLocType2ByRBL(locType2, locRule);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/locRule/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+             AgvLocRule locRule = locRuleService.selectById(id);
+             locMastService.updateLocType2ByRBL(1, locRule);
+             locRuleService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/locRule/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<AgvLocRule> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("locRule"));
+        convert(map, wrapper);
+        List<AgvLocRule> list = locRuleService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/locRuleQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<AgvLocRule> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<AgvLocRule> page = locRuleService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (AgvLocRule locRule : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", locRule.getId());
+            map.put("value", locRule.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/locRule/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<AgvLocRule> wrapper = new EntityWrapper<AgvLocRule>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != locRuleService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(LocRule.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/AgvMobileController.java b/src/main/java/com/zy/asrs/controller/AgvMobileController.java
index 27d587c..2ee810a 100644
--- a/src/main/java/com/zy/asrs/controller/AgvMobileController.java
+++ b/src/main/java/com/zy/asrs/controller/AgvMobileController.java
@@ -1,13 +1,22 @@
 package com.zy.asrs.controller;
 
 import com.core.common.R;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.AgvBasDevp;
 import com.zy.asrs.entity.param.CombParam;
+import com.zy.asrs.service.AgvBasDevpService;
 import com.zy.asrs.service.AgvMobileService;
+import com.zy.asrs.service.AgvWorkService;
 import com.zy.common.web.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 绉诲姩绔帴鍙f帶鍒跺櫒
@@ -19,11 +28,16 @@
 
     @Autowired
     private AgvMobileService agvMobileService;
+    @Autowired
+    private AgvBasDevpService agvBasDevpService;
+    @Autowired
+    private AgvWorkService workService;
+
 
     @PostMapping("/comb/auth")
     public R comb(@RequestBody CombParam combParam){
-        agvMobileService.comb(combParam, 1l);
-        return R.ok("缁勬墭鎴愬姛");
+        String message = agvMobileService.comb(combParam, 1l);
+        return R.ok(message);
     }
 
     @PostMapping("/combBinging/auth")
@@ -34,9 +48,31 @@
         return R.ok("鎵樼洏缁戝畾绔欑偣鎴愬姛");
     }
 
+    @PostMapping("/getBasDevp/auth")
+    public R getBasDevpByFloor(@RequestBody Map<String,Object> map){
+        String floor = map.get("floor").toString();
+        if("1".equals(floor) || "3".equals(floor)){
+            return R.ok(agvMobileService.getAgvBasDevpByFloor(Integer.parseInt(floor)));
+        }
+        return R.error("鍙傛暟閿欒");
+    }
 
+    @PostMapping("/pakin/auth")
+    public R pakin(@RequestBody Map<String,Object> map){
+        List<String> devNos = (List<String>) map.get("devNo");
 
+        List<AgvBasDevp> agvBasDevpList = devNos.stream().map(devNo -> {
+            AgvBasDevp agvBasDevp = agvBasDevpService.selectById(devNo);
+            if (!"F".equals(agvBasDevp.getLocSts())) {
+                throw new CoolException("褰撳墠绔欑偣璐т綅鐘舵�佷笉涓篎.鍦ㄥ簱锛岃閲嶆柊閫夋嫨");
+            }
+            return agvBasDevp;
+        }).collect(Collectors.toList());
 
+        workService.createWaitPainWrkMastStart(agvBasDevpList, getUserId());
+        
+        return R.ok("鐢熸垚宸ヤ綔妗f垚鍔�");
+    }
 
 
 }
diff --git a/src/main/java/com/zy/asrs/controller/AgvWorkController.java b/src/main/java/com/zy/asrs/controller/AgvWorkController.java
index a648f60..e176b34 100644
--- a/src/main/java/com/zy/asrs/controller/AgvWorkController.java
+++ b/src/main/java/com/zy/asrs/controller/AgvWorkController.java
@@ -1,22 +1,21 @@
 package com.zy.asrs.controller;
 
+import com.alibaba.fastjson.JSONArray;
 import com.core.annotations.ManagerAuth;
 import com.core.common.R;
-import com.zy.asrs.entity.AgvWaitPakin;
-import com.zy.asrs.entity.WaitPakin;
-import com.zy.asrs.entity.param.FullStoreParam;
+import com.zy.asrs.entity.AgvBasDevp;
 import com.zy.asrs.service.AgvWorkService;
 import com.zy.common.model.StartupDto;
 import com.zy.common.web.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
 
 @RestController
-@RequestMapping("agvWork")
+@RequestMapping("agv")
 public class AgvWorkController extends BaseController {
 
     @Autowired
@@ -24,9 +23,13 @@
 
     @RequestMapping("/create/waitPain/wrkMast/start")
     @ManagerAuth(memo = "鐢熸垚浠诲姟")
-    public R createWaitPainWrkMastStart(@RequestBody List<AgvWaitPakin> list) {
-        //StartupDto startupDto = workService.createWaitPainWrkMastStart(list, getUserId());
+    public R createWaitPainWrkMastStart(@RequestParam String param) {
+
+        List<AgvBasDevp> agvBasDevpList = JSONArray.parseArray(param, AgvBasDevp.class);
+
+        StartupDto startupDto = workService.createWaitPainWrkMastStart(agvBasDevpList, getUserId());
         //return R.ok("浠诲姟鍙凤細" + startupDto.getWorkNo() + ";鐩爣搴撲綅锛�" + startupDto.getLocNo());
-        return null;
+        return R.ok("鐢熸垚鍏ュ簱宸ヤ綔妗f垚鍔�");
+
     }
 }
diff --git a/src/main/java/com/zy/asrs/controller/AgvWrkDetlController.java b/src/main/java/com/zy/asrs/controller/AgvWrkDetlController.java
new file mode 100644
index 0000000..e9e4e7e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/AgvWrkDetlController.java
@@ -0,0 +1,128 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.AgvWrkDetl;
+import com.zy.asrs.entity.WrkDetl;
+import com.zy.asrs.service.AgvWrkDetlService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/agv")
+public class AgvWrkDetlController extends BaseController {
+
+    @Autowired
+    private AgvWrkDetlService wrkDetlService;
+
+    @RequestMapping(value = "/wrkDetl/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(wrkDetlService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/wrkDetl/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){
+        excludeTrash(param);
+        EntityWrapper<AgvWrkDetl> wrapper = new EntityWrapper<>();
+        convert(param, wrapper);
+        allLike(AgvWrkDetl.class, param.keySet(), wrapper, condition);
+        if (!Cools.isEmpty(orderByField)){
+            wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
+        } else {
+            wrapper.orderBy("appe_time", false);
+        }
+        return R.ok(wrkDetlService.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 = "/wrkDetl/add/auth")
+    @ManagerAuth(memo = "宸ヤ綔妗f槑缁嗘坊鍔�")
+    public R add(AgvWrkDetl wrkDetl) {
+        wrkDetlService.insert(wrkDetl);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/wrkDetl/delete/auth")
+    @ManagerAuth(memo = "宸ヤ綔妗f槑缁嗗垹闄�")
+    public R delete(@RequestParam String param){
+        List<AgvWrkDetl> list = JSONArray.parseArray(param, AgvWrkDetl.class);
+        if (Cools.isEmpty(list)){
+            return R.error();
+        }
+        for (AgvWrkDetl entity : list){
+            wrkDetlService.delete(new EntityWrapper<>(entity));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/wrkDetl/export/auth")
+    @ManagerAuth(memo = "宸ヤ綔妗f槑缁嗗鍑�")
+    public R export(@RequestBody JSONObject param){
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        EntityWrapper<AgvWrkDetl> wrapper = new EntityWrapper<>();
+        Map<String, Object> map = excludeTrash(param.getJSONObject("wrkDetl"));
+        convert(map, wrapper);
+        List<AgvWrkDetl> list = wrkDetlService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/wrkDetlQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<AgvWrkDetl> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<AgvWrkDetl> page = wrkDetlService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (AgvWrkDetl wrkDetl : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", wrkDetl.getWrkNo());
+            map.put("value", wrkDetl.getWrkNo());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/wrkDetl/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<AgvWrkDetl> wrapper = new EntityWrapper<AgvWrkDetl>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != wrkDetlService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(WrkDetl.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/AgvWrkMastController.java b/src/main/java/com/zy/asrs/controller/AgvWrkMastController.java
index 2746f4e..fd5a1cd 100644
--- a/src/main/java/com/zy/asrs/controller/AgvWrkMastController.java
+++ b/src/main/java/com/zy/asrs/controller/AgvWrkMastController.java
@@ -1,23 +1,38 @@
 package com.zy.asrs.controller;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
 import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
 import com.core.common.R;
+import com.zy.asrs.entity.AgvWrkMast;
+import com.zy.asrs.entity.param.AgvTaskCreateParam;
 import com.zy.asrs.service.AgvWrkMastService;
 import com.zy.common.web.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
-import java.util.Map;
+import java.util.*;
 
 @RestController
+@RequestMapping("/agv")
 public class AgvWrkMastController extends BaseController {
 
     @Autowired
     AgvWrkMastService agvWrkMastService;
 
-    @RequestMapping("/agvWrkMast/list/auth")
+    @RequestMapping(value = "/wrkMast/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(agvWrkMastService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/wrkMast/list/auth")
     @ManagerAuth
     public R list(@RequestParam(defaultValue = "1")Integer curr,
                   @RequestParam(defaultValue = "10")Integer limit,
@@ -25,10 +40,140 @@
                   @RequestParam(required = false)String orderByType,
                   @RequestParam(required = false)String condition,
                   @RequestParam Map<String, Object> param){
-
         excludeTrash(param);
+        EntityWrapper<AgvWrkMast> wrapper = new EntityWrapper<>();
+        convert(param, wrapper);
+        allLike(AgvWrkMast.class, param.keySet(), wrapper, condition);
+        if (!Cools.isEmpty(orderByField)){
+            if (orderByField.endsWith("$")){
+                orderByField = orderByField.substring(0, orderByField.length()-1);
+            }
+            wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
+        }else {
+            wrapper.orderBy("io_time", false);
+        }
+        return R.ok(agvWrkMastService.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.eq(entry.getKey(), val);
+            }
+        }
+    }
 
-        return null;
+    @RequestMapping(value = "/wrkMast/add/auth")
+    @ManagerAuth(memo = "宸ヤ綔妗f坊鍔�")
+    public R add(AgvWrkMast wrkMast) {
+        wrkMast.setModiUser(getUserId());
+        wrkMast.setModiTime(new Date());
+        wrkMast.setAppeUser(getUserId());
+        wrkMast.setAppeTime(new Date());
+        agvWrkMastService.insert(wrkMast);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/wrkMast/delete/auth")
+    @ManagerAuth(memo = "宸ヤ綔妗e垹闄�")
+    public R delete(@RequestParam String param){
+        List<AgvWrkMast> list = JSONArray.parseArray(param, AgvWrkMast.class);
+        if (Cools.isEmpty(list)){
+            return R.error();
+        }
+        for (AgvWrkMast entity : list){
+            agvWrkMastService.delete(new EntityWrapper<>(entity));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/wrkMast/export/auth")
+    @ManagerAuth(memo = "宸ヤ綔妗e鍑�")
+    public R export(@RequestBody JSONObject param){
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        EntityWrapper<AgvWrkMast> wrapper = new EntityWrapper<>();
+        Map<String, Object> map = excludeTrash(param.getJSONObject("wrkMast"));
+        convert(map, wrapper);
+        List<AgvWrkMast> list = agvWrkMastService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/wrkMastQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<AgvWrkMast> wrapper = new EntityWrapper<>();
+        wrapper.like("wrk_no", condition);
+        Page<AgvWrkMast> page = agvWrkMastService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (AgvWrkMast wrkMast : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", wrkMast.getWrkNo());
+            map.put("value", wrkMast.getWrkNo());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/wrkMast/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<AgvWrkMast> wrapper = new EntityWrapper<AgvWrkMast>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != agvWrkMastService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(AgvWrkMast.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/wrkMast/add/pri/auth")
+    @ManagerAuth(memo = "宸ヤ綔妗e鍔犱紭鍏堢骇")
+    public R addPri(@RequestBody List<AgvWrkMast> list) {
+        if (list.isEmpty()) {
+            return R.error("璇疯嚦灏戦�夋嫨涓�琛屾暟鎹�");
+        }
+        for (AgvWrkMast entity : list){
+            entity.setIoPri(entity.getIoPri() + 1);
+        }
+        agvWrkMastService.updateBatchById(list);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/wrkMast/red/pri/auth")
+    @ManagerAuth(memo = "宸ヤ綔妗i檷浣庝紭鍏堢骇")
+    public R redPri(@RequestBody List<AgvWrkMast> list) {
+        if (list.isEmpty()) {
+            return R.error("璇疯嚦灏戦�夋嫨涓�琛屾暟鎹�");
+        }
+        for (AgvWrkMast entity : list){
+            entity.setIoPri(entity.getIoPri() - 1);
+        }
+        agvWrkMastService.updateBatchById(list);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/wrkMast/startWrk/auth")
+    @ManagerAuth(memo = "宸ヤ綔妗e紑濮嬩换鍔�")
+    public R startWrk(@RequestParam String param){
+        List<AgvWrkMast> agvWrkMastList = JSONArray.parseArray(param, AgvWrkMast.class);
+        if (Cools.isEmpty(agvWrkMastList)){
+            return R.error();
+        }
+
+        AgvTaskCreateParam agvTaskCreateParam = new AgvTaskCreateParam();
+
+//        agvWrkMastList.stream().map(agvWrkMast -> {
+//            AgvTaskParam agvTaskParam = new AgvTaskParam();
+//            AgvTaskkDescribeParam agvTaskkDescribeParam = new AgvTaskkDescribeParam();
+//            agvTaskParam.setTaskCode(agvWrkMast.getWrkNo().toString());
+//            agvTaskParam.setTaskPriority(agvWrkMast.getIoPri().intValue());
+//            agvTaskParam.setTaskkDescribe(agvTaskkDescribeParam);
+//            agvTaskkDescribeParam.setFromLocationCode(agvWrkMast.);
+//        }).collect(Collectors.toList());
+
+        return R.ok();
     }
 }
diff --git a/src/main/java/com/zy/asrs/entity/AgvLocRule.java b/src/main/java/com/zy/asrs/entity/AgvLocRule.java
new file mode 100644
index 0000000..c334271
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/AgvLocRule.java
@@ -0,0 +1,283 @@
+package com.zy.asrs.entity;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.core.common.Cools;
+import com.core.common.SpringUtils;
+import com.zy.system.entity.User;
+import com.zy.system.service.UserService;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@Data
+@TableName("agv_loc_rule")
+public class AgvLocRule implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鍟嗗搧缂栧彿
+     */
+    @ApiModelProperty(value= "鍟嗗搧缂栧彿")
+    private String matnr;
+
+    /**
+     * 瑙勬牸
+     */
+    @ApiModelProperty(value= "瑙勬牸")
+    private String specs;
+
+    /**
+     * 鍨嬪彿
+     */
+    @ApiModelProperty(value= "鍨嬪彿")
+    private String model;
+
+    /**
+     * 瀹㈡埛
+     */
+    @ApiModelProperty(value= "瀹㈡埛")
+    private String cstmr;
+
+    /**
+     * 鎵瑰彿
+     */
+    @ApiModelProperty(value= "鎵瑰彿")
+    private String batch;
+
+    /**
+     * 鍏朵粬
+     */
+    @ApiModelProperty(value= "鍏朵粬")
+    private String other;
+
+    /**
+     * 寮�濮嬫帓
+     */
+    @ApiModelProperty(value= "寮�濮嬫帓")
+    @TableField("row_beg")
+    private Integer rowBeg;
+
+    /**
+     * 缁撴潫鎺�
+     */
+    @ApiModelProperty(value= "缁撴潫鎺�")
+    @TableField("row_end")
+    private Integer rowEnd;
+
+    /**
+     * 寮�濮嬪垪
+     */
+    @ApiModelProperty(value= "寮�濮嬪垪")
+    @TableField("bay_beg")
+    private Integer bayBeg;
+
+    /**
+     * 缁撴潫鍒�
+     */
+    @ApiModelProperty(value= "缁撴潫鍒�")
+    @TableField("bay_end")
+    private Integer bayEnd;
+
+    /**
+     * 寮�濮嬪眰
+     */
+    @ApiModelProperty(value= "寮�濮嬪眰")
+    @TableField("lev_beg")
+    private Integer levBeg;
+
+    /**
+     * 缁撴潫灞�
+     */
+    @ApiModelProperty(value= "缁撴潫灞�")
+    @TableField("lev_end")
+    private Integer levEnd;
+
+    /**
+     * 缁撴潫灞�
+     */
+    @ApiModelProperty(value= "妤煎眰")
+    @TableField("floor")
+    private Integer floor;
+
+    /**
+     * 涓婇檺
+     */
+    @ApiModelProperty(value= "涓婇檺")
+    private Integer limit;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 绂佺敤
+     */
+    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 绂佺敤  ")
+    private Integer status;
+
+    /**
+     * 娣诲姞浜哄憳
+     */
+    @ApiModelProperty(value= "娣诲姞浜哄憳")
+    @TableField("create_by")
+    private Long createBy;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("update_by")
+    private Long updateBy;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("update_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    /**
+     * 鏄惁鏀寔娣疯浇{0:涓嶆敮鎸�,1:鏀寔}
+     */
+    @ApiModelProperty(value= "鏄惁鏀寔娣疯浇")
+    private Integer mixed;
+
+    /**
+     * 鏀寔娣疯浇鎯呭喌涓�,娌℃壘鍒板簱浣嶆槸鍚︾户缁鎵緖0:鍚�,1:鏄瘆
+     */
+    @ApiModelProperty(value= "鏄惁缁х画瀵绘壘")
+    @TableField("keep_go")
+    private Integer keepGo;
+
+    public AgvLocRule() {}
+
+    public AgvLocRule(String matnr, String specs, String model, String cstmr, String batch, String other, Integer rowBeg, Integer rowEnd, Integer bayBeg, Integer bayEnd, Integer levBeg, Integer levEnd, Integer limit, Integer status, Long createBy, Date createTime, Long updateBy, Date updateTime, String memo, Integer mixed) {
+        this.matnr = matnr;
+        this.specs = specs;
+        this.model = model;
+        this.cstmr = cstmr;
+        this.batch = batch;
+        this.other = other;
+        this.rowBeg = rowBeg;
+        this.rowEnd = rowEnd;
+        this.bayBeg = bayBeg;
+        this.bayEnd = bayEnd;
+        this.levBeg = levBeg;
+        this.levEnd = levEnd;
+        this.limit = limit;
+        this.status = status;
+        this.createBy = createBy;
+        this.createTime = createTime;
+        this.updateBy = updateBy;
+        this.updateTime = updateTime;
+        this.memo = memo;
+        this.mixed = mixed;
+    }
+
+//    LocRule locRule = new LocRule(
+//            null,    // 鍟嗗搧缂栧彿
+//            null,    // 瑙勬牸
+//            null,    // 鍨嬪彿
+//            null,    // 瀹㈡埛
+//            null,    // 鎵瑰彿
+//            null,    // 鍏朵粬
+//            null,    // 寮�濮嬫帓
+//            null,    // 缁撴潫鎺�
+//            null,    // 寮�濮嬪垪
+//            null,    // 缁撴潫鍒�
+//            null,    // 寮�濮嬪眰
+//            null,    // 缁撴潫灞�
+//            null,    // 涓婇檺
+//            null,    // 鐘舵��
+//            null,    // 娣诲姞浜哄憳
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 淇敼浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null    // 澶囨敞
+//    );
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "绂佺敤";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getCreateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.createBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getUpdateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.updateBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+    public String getMixed$() {
+        if (this.mixed == null) {
+            return "";
+        }
+        return this.mixed == 1 ? "鏄�" : "鍚�";
+    }
+
+    public String getKeepGo$() {
+        if (this.keepGo == null) {
+            return "";
+        }
+        return this.keepGo == 1 ? "鏄�" : "鍚�";
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/AgvWrkDetl.java b/src/main/java/com/zy/asrs/entity/AgvWrkDetl.java
new file mode 100644
index 0000000..7f89042
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/AgvWrkDetl.java
@@ -0,0 +1,365 @@
+package com.zy.asrs.entity;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.core.common.Cools;
+import com.core.common.SpringUtils;
+import com.zy.common.utils.Synchro;
+import com.zy.system.entity.User;
+import com.zy.system.service.UserService;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@Data
+@TableName("agv_wrk_detl")
+public class AgvWrkDetl implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 宸ヤ綔鍙�
+     */
+    @ApiModelProperty(value= "宸ヤ綔鍙�")
+    @TableField("wrk_no")
+    private Integer wrkNo;
+
+    /**
+     * 宸ヤ綔鏃堕棿
+     */
+    @ApiModelProperty(value= "宸ヤ綔鏃堕棿")
+    @TableField("io_time")
+    private Date ioTime;
+
+    /**
+     * 鏁伴噺
+     */
+    @ApiModelProperty(value= "鏁伴噺")
+    private Double anfme;
+
+    /**
+     * 鎵樼洏鏉$爜
+     */
+    @ApiModelProperty(value= "鎵樼洏鏉$爜")
+    private String zpallet;
+
+    /**
+     * 鐗╂枡
+     */
+    @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;
+
+    /**
+     * sku
+     */
+    @ApiModelProperty(value= "sku")
+    private String sku;
+
+    /**
+     * 鍖呮暟
+     */
+    @ApiModelProperty(value= "鍖呮暟")
+    private Double units;
+
+    /**
+     * 鏉$爜
+     */
+    @ApiModelProperty(value= "鏉$爜")
+    private String barcode;
+
+    /**
+     * 鐗╂枡鐘舵��
+     */
+    @ApiModelProperty(value= "鐗╂枡鐘舵��")
+    private String origin;
+
+    /**
+     * 鍘傚
+     */
+    @ApiModelProperty(value= "鍘傚")
+    private String manu;
+
+    /**
+     * 鍗曟嵁鏃堕棿
+     */
+    @ApiModelProperty(value= "鍗曟嵁鏃堕棿")
+    @TableField("manu_date")
+    private String manuDate;
+
+    /**
+     * 鍝侀」鏁�
+     */
+    @ApiModelProperty(value= "鍝侀」鏁�")
+    @TableField("item_num")
+    private String itemNum;
+
+    /**
+     * 瀹夊叏搴撳瓨閲�
+     */
+    @ApiModelProperty(value= "瀹夊叏搴撳瓨閲�")
+    @TableField("safe_qty")
+    private Double safeQty;
+
+    /**
+     * 閲嶉噺
+     */
+    @ApiModelProperty(value= "閲嶉噺")
+    private Double weight;
+
+    /**
+     * 闀垮害
+     */
+    @ApiModelProperty(value= "闀垮害")
+    private Double length;
+
+    /**
+     * 浣撶Н
+     */
+    @ApiModelProperty(value= "浣撶Н")
+    private Double volume;
+
+    /**
+     * 涓夋柟缂栫爜
+     */
+    @ApiModelProperty(value= "涓夋柟缂栫爜")
+    @TableField("three_code")
+    private String threeCode;
+
+    /**
+     * 渚涘簲鍟�
+     */
+    @ApiModelProperty(value= "渚涘簲鍟�")
+    private String supp;
+
+    /**
+     * 渚涘簲鍟嗙紪鐮�
+     */
+    @ApiModelProperty(value= "渚涘簲鍟嗙紪鐮�")
+    @TableField("supp_code")
+    private String suppCode;
+
+    /**
+     * 鏄惁鎵规 1: 鏄�  0: 鍚�
+     */
+    @ApiModelProperty(value= "鏄惁鎵规 1: 鏄�  0: 鍚�  ")
+    @TableField("be_batch")
+    private Integer beBatch;
+
+    /**
+     * 淇濊川鏈�
+     */
+    @ApiModelProperty(value= "淇濊川鏈�")
+    @TableField("dead_time")
+    private String deadTime;
+
+    /**
+     * 棰勮澶╂暟
+     */
+    @ApiModelProperty(value= "棰勮澶╂暟")
+    @TableField("dead_warn")
+    private Integer deadWarn;
+
+    /**
+     * 鍒惰喘 1: 鍒堕��  2: 閲囪喘  3: 澶栧崗
+     */
+    @ApiModelProperty(value= "鍒惰喘 1: 鍒堕��  2: 閲囪喘  3: 澶栧崗  ")
+    private Integer source;
+
+    /**
+     * 瑕佹眰妫�楠� 1: 鏄�  0: 鍚�
+     */
+    @ApiModelProperty(value= "瑕佹眰妫�楠� 1: 鏄�  0: 鍚�  ")
+    private Integer inspect;
+
+    /**
+     * 鍗遍櫓鍝� 1: 鏄�  0: 鍚�
+     */
+    @ApiModelProperty(value= "鍗遍櫓鍝� 1: 鏄�  0: 鍚�  ")
+    private Integer danger;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("modi_user")
+    private Long modiUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("modi_time")
+    private Date modiTime;
+
+    /**
+     * 鍒涘缓鑰�
+     */
+    @ApiModelProperty(value= "鍒涘缓鑰�")
+    @TableField("appe_user")
+    private Long appeUser;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("appe_time")
+    private Date appeTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    public String getIoTime$(){
+        if (Cools.isEmpty(this.ioTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ioTime);
+    }
+
+    public String getBeBatch$(){
+        if (null == this.beBatch){ return null; }
+        switch (this.beBatch){
+            case 1:
+                return "鏄�";
+            case 0:
+                return "鍚�";
+            default:
+                return String.valueOf(this.beBatch);
+        }
+    }
+
+    public String getSource$(){
+        if (null == this.source){ return null; }
+        switch (this.source){
+            case 1:
+                return "鍒堕��";
+            case 2:
+                return "閲囪喘";
+            case 3:
+                return "澶栧崗";
+            default:
+                return String.valueOf(this.source);
+        }
+    }
+
+    public String getInspect$(){
+        if (null == this.inspect){ return null; }
+        switch (this.inspect){
+            case 1:
+                return "鏄�";
+            case 0:
+                return "鍚�";
+            default:
+                return String.valueOf(this.inspect);
+        }
+    }
+
+    public String getDanger$(){
+        if (null == this.danger){ return null; }
+        switch (this.danger){
+            case 1:
+                return "鏄�";
+            case 0:
+                return "鍚�";
+            default:
+                return String.valueOf(this.danger);
+        }
+    }
+
+    public String getModiUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.modiUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public String getModiTime$(){
+        if (Cools.isEmpty(this.modiTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
+    }
+
+    public String getAppeUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.appeUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public String getAppeTime$(){
+        if (Cools.isEmpty(this.appeTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
+    }
+
+    public void sync(Object source) {
+        Synchro.Copy(source, this);
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/AgvWrkLastno.java b/src/main/java/com/zy/asrs/entity/AgvWrkLastno.java
new file mode 100644
index 0000000..6b30d6c
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/AgvWrkLastno.java
@@ -0,0 +1,215 @@
+package com.zy.asrs.entity;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.core.common.Cools;
+import com.core.common.SpringUtils;
+import com.zy.system.entity.User;
+import com.zy.system.service.UserService;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@TableName("agv_wrk_lastno")
+public class AgvWrkLastno implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 绫诲瀷
+     */
+    @ApiModelProperty(value= "绫诲瀷")
+    @TableId(value = "wrk_mk", type = IdType.INPUT)
+    @TableField("wrk_mk")
+    private Integer wrkMk;
+
+    /**
+     * 褰撳墠ID
+     */
+    @ApiModelProperty(value= "褰撳墠ID")
+    @TableField("wrk_no")
+    private Integer wrkNo;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("modi_user")
+    private Long modiUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("modi_time")
+    private Date modiTime;
+
+    /**
+     * 鍒涘缓鑰�
+     */
+    @ApiModelProperty(value= "鍒涘缓鑰�")
+    @TableField("appe_user")
+    private Long appeUser;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("appe_time")
+    private Date appeTime;
+
+    /**
+     * 璧峰ID
+     */
+    @ApiModelProperty(value= "璧峰ID")
+    @TableField("s_no")
+    private Integer sNo;
+
+    /**
+     * 缁堟ID
+     */
+    @ApiModelProperty(value= "缁堟ID")
+    @TableField("e_no")
+    private Integer eNo;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    @TableField("memo_m")
+    private String memoM;
+
+    public AgvWrkLastno() {}
+
+    public AgvWrkLastno(Integer wrkNo, Long modiUser, Date modiTime, Long appeUser, Date appeTime, Integer sNo, Integer eNo, String memoM) {
+        this.wrkNo = wrkNo;
+        this.modiUser = modiUser;
+        this.modiTime = modiTime;
+        this.appeUser = appeUser;
+        this.appeTime = appeTime;
+        this.sNo = sNo;
+        this.eNo = eNo;
+        this.memoM = memoM;
+    }
+
+//    WrkLastno wrkLastno = new WrkLastno(
+//            null,    // 褰撳墠ID[闈炵┖]
+//            null,    // 淇敼浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null,    // 鍒涘缓鑰�
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 璧峰ID[闈炵┖]
+//            null,    // 缁堟ID[闈炵┖]
+//            null    // 澶囨敞
+//    );
+
+    public Integer getWrkMk() {
+        return wrkMk;
+    }
+
+    public void setWrkMk(Integer wrkMk) {
+        this.wrkMk = wrkMk;
+    }
+
+    public Integer getWrkNo() {
+        return wrkNo;
+    }
+
+    public void setWrkNo(Integer wrkNo) {
+        this.wrkNo = wrkNo;
+    }
+
+    public Long getModiUser() {
+        return modiUser;
+    }
+
+    public String getModiUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.modiUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public void setModiUser(Long modiUser) {
+        this.modiUser = modiUser;
+    }
+
+    public Date getModiTime() {
+        return modiTime;
+    }
+
+    public String getModiTime$(){
+        if (Cools.isEmpty(this.modiTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
+    }
+
+    public void setModiTime(Date modiTime) {
+        this.modiTime = modiTime;
+    }
+
+    public Long getAppeUser() {
+        return appeUser;
+    }
+
+    public String getAppeUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.appeUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public void setAppeUser(Long appeUser) {
+        this.appeUser = appeUser;
+    }
+
+    public Date getAppeTime() {
+        return appeTime;
+    }
+
+    public String getAppeTime$(){
+        if (Cools.isEmpty(this.appeTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
+    }
+
+    public void setAppeTime(Date appeTime) {
+        this.appeTime = appeTime;
+    }
+
+    public Integer getSNo() {
+        return sNo;
+    }
+
+    public void setSNo(Integer sNo) {
+        this.sNo = sNo;
+    }
+
+    public Integer getENo() {
+        return eNo;
+    }
+
+    public void setENo(Integer eNo) {
+        this.eNo = eNo;
+    }
+
+    public String getMemoM() {
+        return memoM;
+    }
+
+    public void setMemoM(String memoM) {
+        this.memoM = memoM;
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/AgvWrkMast.java b/src/main/java/com/zy/asrs/entity/AgvWrkMast.java
index 3cdd5bb..5eed5f4 100644
--- a/src/main/java/com/zy/asrs/entity/AgvWrkMast.java
+++ b/src/main/java/com/zy/asrs/entity/AgvWrkMast.java
@@ -4,15 +4,22 @@
 import com.baomidou.mybatisplus.annotations.TableId;
 import com.baomidou.mybatisplus.annotations.TableName;
 import com.baomidou.mybatisplus.enums.IdType;
+import com.core.common.Cools;
+import com.core.common.SpringUtils;
+import com.zy.asrs.service.*;
+import com.zy.system.entity.User;
+import com.zy.system.service.UserService;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.text.SimpleDateFormat;
 import java.util.Date;
 
 @Data
 @TableName("agv_wrk_mast")
 public class AgvWrkMast implements Serializable {
+
     private static final long serialVersionUID = 1L;
 
     /**
@@ -22,6 +29,20 @@
     @TableId(value = "wrk_no", type = IdType.INPUT)
     @TableField("wrk_no")
     private Integer wrkNo;
+
+    @ApiModelProperty(value= "")
+    @TableField("inv_wh")
+    private String invWh;
+
+    @ApiModelProperty(value= "")
+    private Date ymd;
+
+    @ApiModelProperty(value= "")
+    private String mk;
+
+    @ApiModelProperty(value= "")
+    @TableField("whs_type")
+    private Integer whsType;
 
     /**
      * 宸ヤ綔鐘舵��
@@ -38,15 +59,37 @@
     private Integer ioType;
 
     /**
+     * 鍫嗗灈鏈�
+     */
+    @ApiModelProperty(value= "鍫嗗灈鏈�")
+    @TableField("crn_no")
+    private Integer crnNo;
+
+    /**
+     * 绌挎杞�
+     */
+    @ApiModelProperty(value= "绌挎杞�")
+    @TableField("ste_no")
+    private Integer steNo;
+
+    /**
+     * 杈圭紭搴撲綅
+     */
+    @ApiModelProperty(value= "杈圭紭搴撲綅")
+    @TableField("out_most")
+    private Integer outMost;
+
+    @ApiModelProperty(value= "")
+    @TableField("sheet_no")
+    private String sheetNo;
+
+    /**
      * 浼樺厛绾�
      */
     @ApiModelProperty(value= "浼樺厛绾�")
     @TableField("io_pri")
     private Double ioPri;
 
-    /**
-     * 锛�
-     */
     @ApiModelProperty(value= "")
     @TableField("wrk_date")
     private Date wrkDate;
@@ -79,6 +122,46 @@
     @TableField("source_loc_no")
     private String sourceLocNo;
 
+    @ApiModelProperty(value= "")
+    @TableField("loc_sts")
+    private String locSts;
+
+    /**
+     * 鎷f枡
+     */
+    @ApiModelProperty(value= "鎷f枡")
+    private String picking;
+
+    @ApiModelProperty(value= "")
+    @TableField("link_mis")
+    private String linkMis;
+
+    @ApiModelProperty(value= "")
+    @TableField("online_yn")
+    private String onlineYn;
+
+    @ApiModelProperty(value= "")
+    @TableField("upd_mk")
+    private String updMk;
+
+    /**
+     * 閫�鍑�
+     */
+    @ApiModelProperty(value= "閫�鍑�")
+    @TableField("exit_mk")
+    private String exitMk;
+
+    @ApiModelProperty(value= "")
+    @TableField("plt_type")
+    private Integer pltType;
+
+    /**
+     * 绌烘澘
+     */
+    @ApiModelProperty(value= "绌烘澘")
+    @TableField("empty_mk")
+    private String emptyMk;
+
     /**
      * 宸ヤ綔鏃堕棿
      */
@@ -86,15 +169,336 @@
     @TableField("io_time")
     private Date ioTime;
 
+    @ApiModelProperty(value= "")
+    @TableField("ctn_type")
+    private Integer ctnType;
+
+    @ApiModelProperty(value= "")
+    private String packed;
+
+    @ApiModelProperty(value= "")
+    @TableField("ove_mk")
+    private String oveMk;
+
+    @ApiModelProperty(value= "")
+    @TableField("mtn_type")
+    private Double mtnType;
+
+    @ApiModelProperty(value= "")
+    @TableField("user_no")
+    private String userNo;
+
+    /**
+     * 鍫嗗灈鏈哄惎鍔ㄦ椂闂�
+     */
+    @ApiModelProperty(value= "鍫嗗灈鏈哄惎鍔ㄦ椂闂�")
+    @TableField("crn_str_time")
+    private Date crnStrTime;
+
+    /**
+     * 鍫嗗灈鏈哄仠姝㈡椂闂�
+     */
+    @ApiModelProperty(value= "鍫嗗灈鏈哄仠姝㈡椂闂�")
+    @TableField("crn_end_time")
+    private Date crnEndTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("plc_str_time")
+    private Date plcStrTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("crn_pos_time")
+    private Date crnPosTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("load_time")
+    private Double loadTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("exp_time")
+    private Double expTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("ref_wrkno")
+    private Double refWrkno;
+
+    /**
+     * 鎷f枡鏃堕棿
+     */
+    @ApiModelProperty(value= "鎷f枡鏃堕棿")
+    @TableField("ref_iotime")
+    private Date refIotime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("modi_user")
+    private Long modiUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("modi_time")
+    private Date modiTime;
+
+    /**
+     * 鍒涘缓鑰�
+     */
+    @ApiModelProperty(value= "鍒涘缓鑰�")
+    @TableField("appe_user")
+    private Long appeUser;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("appe_time")
+    private Date appeTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("pause_mk")
+    private String pauseMk;
+
+    @ApiModelProperty(value= "")
+    @TableField("error_time")
+    private Date errorTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("error_memo")
+    private String errorMemo;
+
+    @ApiModelProperty(value= "")
+    @TableField("ctn_kind")
+    private Integer ctnKind;
+
+    @ApiModelProperty(value= "")
+    @TableField("manu_type")
+    private String manuType;
+
     /**
      * 澶囨敞
      */
     @ApiModelProperty(value= "澶囨敞")
     private String memo;
 
+    @ApiModelProperty(value= "")
+    @TableField("sc_weight")
+    private Double scWeight;
+
+    @ApiModelProperty(value= "")
+    @TableField("log_mk")
+    private String logMk;
+
+    @ApiModelProperty(value= "")
+    @TableField("log_err_time")
+    private Date logErrTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("log_err_memo")
+    private String logErrMemo;
+
     /**
      * 鏉$爜
      */
     @ApiModelProperty(value= "鏉$爜")
     private String barcode;
+
+    // Y:閿�鍞鍗曞嚭搴撲换鍔�
+    @ApiModelProperty(value= "")
+    @TableField("Pdc_type")
+    private String PdcType;
+
+    @ApiModelProperty(value= "")
+    @TableField("ctn_no")
+    private String ctnNo;
+
+    /**
+     * 婊℃澘
+     */
+    @ApiModelProperty(value= "婊℃澘")
+    @TableField("full_plt")
+    private String fullPlt;
+
+    /**
+     * 鍏堝叆鍝� / 鍙岄噸鍏ュ簱
+     */
+    @ApiModelProperty(value= "鍏堝叆鍝�")
+    @TableField("pre_have")
+    private String preHave;
+
+    /**
+     * 绌烘搷浣� / 鍙栬揣鏃犵
+     */
+    @ApiModelProperty(value= "绌烘搷浣�")
+    @TableField("take_none")
+    private String takeNone;
+
+    public AgvWrkMast() {}
+
+    public String getYmd$(){
+        if (Cools.isEmpty(this.ymd)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ymd);
+    }
+
+    public String getWrkSts$(){
+        BasWrkStatusService service = SpringUtils.getBean(BasWrkStatusService.class);
+        BasWrkStatus basWrkStatus = service.selectById(this.wrkSts);
+        if (!Cools.isEmpty(basWrkStatus)){
+            return String.valueOf(basWrkStatus.getWrkDesc());
+        }
+        return null;
+    }
+
+    public String getIoType$(){
+        BasWrkIotypeService service = SpringUtils.getBean(BasWrkIotypeService.class);
+        BasWrkIotype basWrkIotype = service.selectById(this.ioType);
+        if (!Cools.isEmpty(basWrkIotype)){
+            return String.valueOf(basWrkIotype.getIoDesc());
+        }
+        return null;
+    }
+
+    public String getCrnNo$(){
+        BasCrnpService service = SpringUtils.getBean(BasCrnpService.class);
+        BasCrnp basCrnp = service.selectById(this.crnNo);
+        if (!Cools.isEmpty(basCrnp)){
+            return String.valueOf(basCrnp.getCrnNo());
+        }
+        return null;
+    }
+
+    public String getWrkDate$(){
+        if (Cools.isEmpty(this.wrkDate)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.wrkDate);
+    }
+
+    public String getLocNo$(){
+        LocMastService service = SpringUtils.getBean(LocMastService.class);
+        LocMast locMast = service.selectById(this.locNo);
+        if (!Cools.isEmpty(locMast)){
+            return String.valueOf(locMast.getLocNo());
+        }
+        return null;
+    }
+
+    public String getStaNo$(){
+        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
+        BasDevp basDevp = service.selectById(this.staNo);
+        if (!Cools.isEmpty(basDevp)){
+            return String.valueOf(basDevp.getDevNo());
+        }
+        return null;
+    }
+
+    public String getSourceStaNo$(){
+        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
+        BasDevp basDevp = service.selectById(this.sourceStaNo);
+        if (!Cools.isEmpty(basDevp)){
+            return String.valueOf(basDevp.getDevNo());
+        }
+        return null;
+    }
+
+    public String getSourceLocNo$(){
+        LocMastService service = SpringUtils.getBean(LocMastService.class);
+        LocMast locMast = service.selectById(this.sourceLocNo);
+        if (!Cools.isEmpty(locMast)){
+            return String.valueOf(locMast.getLocNo());
+        }
+        return null;
+    }
+
+    public String getIoTime$(){
+        if (Cools.isEmpty(this.ioTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ioTime);
+    }
+
+    public String getCrnStrTime$(){
+        if (Cools.isEmpty(this.crnStrTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnStrTime);
+    }
+
+    public String getCrnEndTime$(){
+        if (Cools.isEmpty(this.crnEndTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnEndTime);
+    }
+
+    public String getPlcStrTime$(){
+        if (Cools.isEmpty(this.plcStrTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.plcStrTime);
+    }
+
+    public String getCrnPosTime$(){
+        if (Cools.isEmpty(this.crnPosTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnPosTime);
+    }
+
+    public String getRefIotime$(){
+        if (Cools.isEmpty(this.refIotime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.refIotime);
+    }
+
+    public String getModiUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.modiUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public String getModiTime$(){
+        if (Cools.isEmpty(this.modiTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
+    }
+
+    public String getAppeUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.appeUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getUsername());
+        }
+        return null;
+    }
+
+    public String getAppeTime$(){
+        if (Cools.isEmpty(this.appeTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
+    }
+
+    public String getErrorTime$(){
+        if (Cools.isEmpty(this.errorTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.errorTime);
+    }
+
+    public String getLogErrTime$(){
+        if (Cools.isEmpty(this.logErrTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.logErrTime);
+    }
 }
diff --git a/src/main/java/com/zy/asrs/entity/param/AgvTaskCreateParam.java b/src/main/java/com/zy/asrs/entity/param/AgvTaskCreateParam.java
new file mode 100644
index 0000000..3591466
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/AgvTaskCreateParam.java
@@ -0,0 +1,30 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 瀵规帴ESS 浠诲姟涓嬪彂鍙傛暟
+ */
+@Data
+public class AgvTaskCreateParam implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    //浠诲姟绫诲瀷  putaway锛氫笂鏋�; carry锛氭惉杩愶紝缁熸寚鍑哄簱銆佺Щ搴撱�佺偣鍒扮偣鎼繍绛�; scan锛氭壂鎻忕洏鐐�; weight锛氱О閲嶇洏鐐�; rfid锛歳fid鐩樼偣
+    private String taskType;
+
+    //浠诲姟缁�
+    private String taskGroupCode;
+
+    //浠诲姟缁勪紭鍏堢骇
+    private int groupPriority;
+
+    //浠诲姟鍒楄〃
+    private List<AgvTaskParam> tasks;
+}
+
+
+
diff --git a/src/main/java/com/zy/asrs/entity/param/AgvTaskParam.java b/src/main/java/com/zy/asrs/entity/param/AgvTaskParam.java
new file mode 100644
index 0000000..06d8f9c
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/AgvTaskParam.java
@@ -0,0 +1,13 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+
+@Data
+public class AgvTaskParam {
+    //涓氬姟浠诲姟鍙�
+    private String taskCode;
+    //浠诲姟浼樺厛绾�
+    private int taskPriority;
+    //浠诲姟鎻忚堪
+    private AgvTaskkDescribeParam taskkDescribe;
+}
diff --git a/src/main/java/com/zy/asrs/entity/param/AgvTaskkDescribeParam.java b/src/main/java/com/zy/asrs/entity/param/AgvTaskkDescribeParam.java
new file mode 100644
index 0000000..4407fba
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/AgvTaskkDescribeParam.java
@@ -0,0 +1,21 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+
+@Data
+public class AgvTaskkDescribeParam {
+    //瀹瑰櫒缂栫爜
+    private String containerCode;
+    //瀹瑰櫒鍨嬪彿
+    private String containerType;
+    //宸ヤ綔浣嶆爣绛�
+    private String storageTag;
+    //璧峰宸ヤ綔浣�
+    private String fromLocationCode;
+    //鐩爣宸ヤ綔浣嶇紪鐮�
+    private String toLocationCode;
+    //鐩爣宸ヤ綔绔欑紪鐮�
+    private String toStationCode;
+    //瑕佽繘琛岀洏搴撶殑鐩爣宸ヤ綔浣�
+    private String locationCode;
+}
diff --git a/src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java b/src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java
index 336a9e6..3609fa9 100644
--- a/src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java
@@ -2,15 +2,14 @@
 
 import com.baomidou.mybatisplus.mapper.BaseMapper;
 import com.zy.asrs.entity.AgvBasDevp;
-import com.zy.asrs.entity.BasDevp;
+import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
-
-import java.util.List;
 
 @Mapper
 @Repository
 public interface AgvBasDevpMapper extends BaseMapper<AgvBasDevp> {
 
+    @Delete("delete from agv_bas_devp")
+    public void deleteAll();
 }
diff --git a/src/main/java/com/zy/asrs/mapper/AgvLocMastMapper.java b/src/main/java/com/zy/asrs/mapper/AgvLocMastMapper.java
new file mode 100644
index 0000000..e2afaa9
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/AgvLocMastMapper.java
@@ -0,0 +1,26 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.AgvLocMast;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Update;
+
+import java.util.List;
+
+@Mapper
+public interface AgvLocMastMapper extends BaseMapper<AgvLocMast>{
+
+    @Delete("delete from agv_loc_mast")
+    public void deleteAll();
+
+    @Update("update agv_loc_mast set loc_type2 = ${locType2}" +
+            "where (row1 >= ${startRow} and row1 <= ${endRow})" +
+            "and (bay1 >= ${startBay} and bay1 <= ${endBay})" +
+            "and (lev1 >= ${startLev} and lev1 <= ${endLev})" +
+            "and floor = ${floor}")
+    public void updateLocType2(@Param("locType2") int locType2, @Param("startRow")int startRow, @Param("endRow")int endRow, @Param("startBay")int startBay, @Param("endBay")int endBay, @Param("startLev")int startLev, @Param("endLev")int endLev, @Param("floor")int floor);
+
+    List<AgvLocMast> queryFreeLocMast2(Short locType1, Integer rowBeg, Integer rowEnd, Integer bayBeg, Integer bayEnd, Integer levBeg, Integer levEnd);
+}
diff --git a/src/main/java/com/zy/asrs/mapper/AgvLocRuleMapper.java b/src/main/java/com/zy/asrs/mapper/AgvLocRuleMapper.java
new file mode 100644
index 0000000..2540a4e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/AgvLocRuleMapper.java
@@ -0,0 +1,20 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.AgvLocRule;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface AgvLocRuleMapper extends BaseMapper<AgvLocRule> {
+
+    List<AgvLocRule> selectByMatnr(String matnr);
+
+    List<AgvLocRule> selectByMixed(Integer mixed);
+
+    int updateKeepGoByMatnr(String matnr, Integer keepGo);
+
+    int updateKeepGoByMixed(Integer keepGo);
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/AgvLockMastMapper.java b/src/main/java/com/zy/asrs/mapper/AgvLockMastMapper.java
deleted file mode 100644
index 7174ffe..0000000
--- a/src/main/java/com/zy/asrs/mapper/AgvLockMastMapper.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.zy.asrs.mapper;
-
-import com.baomidou.mybatisplus.mapper.BaseMapper;
-import com.zy.asrs.entity.AgvLocMast;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface AgvLockMastMapper extends BaseMapper<AgvLocMast>{
-}
diff --git a/src/main/java/com/zy/asrs/mapper/AgvWrkDetlMapper.java b/src/main/java/com/zy/asrs/mapper/AgvWrkDetlMapper.java
new file mode 100644
index 0000000..0715ccf
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/AgvWrkDetlMapper.java
@@ -0,0 +1,32 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.AgvWrkDetl;
+import com.zy.asrs.entity.WrkDetl;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface AgvWrkDetlMapper extends BaseMapper<AgvWrkDetl> {
+
+    List<WrkDetl> selectByWrkNo(Integer wrkNo);
+
+    int deleteItem(@Param("wrkNo")Integer wrkNo, @Param("matnr")String matnr, @Param("batch")String batch);
+
+    int updateAnfme(@Param("anfme")Double anfme, @Param("wrkNo")Integer wrkNo, @Param("matnr")String matnr, @Param("batch")String batch);
+
+    List<WrkDetl> selectAndLogByOrderNo(String orderNo);
+
+    List<WrkDetl> selectAndLogByOrderNoGroupByMatnrOfSum(String orderNo);
+
+    int updateInspect( @Param("wrkNo")Integer wrkNo, @Param("matnr")String matnr, @Param("batch")String batch);
+
+    List<WrkDetl> selectPakoutQuery(@Param("staNo")Integer staNo, @Param("matnr")String matnr);
+
+    int updateOrderNo(@Param("orderNo")String orderNo, @Param("wrkNo")Integer wrkNo, @Param("matnr")String matnr, @Param("batch")String batch);
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/AgvWrkLastnoMapper.java b/src/main/java/com/zy/asrs/mapper/AgvWrkLastnoMapper.java
new file mode 100644
index 0000000..a7ff766
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/AgvWrkLastnoMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.AgvWrkLastno;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface AgvWrkLastnoMapper extends BaseMapper<AgvWrkLastno> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/AgvBasDevpService.java b/src/main/java/com/zy/asrs/service/AgvBasDevpService.java
index 24803eb..ff7c1bc 100644
--- a/src/main/java/com/zy/asrs/service/AgvBasDevpService.java
+++ b/src/main/java/com/zy/asrs/service/AgvBasDevpService.java
@@ -2,10 +2,10 @@
 
 import com.baomidou.mybatisplus.service.IService;
 import com.zy.asrs.entity.AgvBasDevp;
-import com.zy.asrs.entity.BasDevp;
-
-import java.util.List;
 
 public interface AgvBasDevpService extends IService<AgvBasDevp> {
 
+    public void clearBasDevp();
+
+    public void initBasDevp();
 }
diff --git a/src/main/java/com/zy/asrs/service/AgvLocMastService.java b/src/main/java/com/zy/asrs/service/AgvLocMastService.java
new file mode 100644
index 0000000..b9a4c9a
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/AgvLocMastService.java
@@ -0,0 +1,20 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.AgvLocMast;
+import com.zy.asrs.entity.AgvLocRule;
+
+import java.util.List;
+
+public interface AgvLocMastService extends IService<AgvLocMast> {
+
+    public void clearLoc();
+
+    public void initLocFloor1();
+
+    public void initLocFloor3();
+
+    List<AgvLocMast> queryFreeLocMast2(Short locType1, Integer rowBeg, Integer rowEnd, Integer bayBeg, Integer bayEnd, Integer levBeg, Integer levEnd);
+
+    void updateLocType2ByRBL(Integer locType2, AgvLocRule locRule);
+}
diff --git a/src/main/java/com/zy/asrs/service/AgvLocRuleService.java b/src/main/java/com/zy/asrs/service/AgvLocRuleService.java
new file mode 100644
index 0000000..c3f9389
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/AgvLocRuleService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.AgvLocRule;
+
+public interface AgvLocRuleService extends IService<AgvLocRule> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/AgvLockMastService.java b/src/main/java/com/zy/asrs/service/AgvLockMastService.java
deleted file mode 100644
index bc70d55..0000000
--- a/src/main/java/com/zy/asrs/service/AgvLockMastService.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.zy.asrs.service;
-
-import com.baomidou.mybatisplus.service.IService;
-import com.zy.asrs.entity.AgvLocMast;
-
-public interface AgvLockMastService extends IService<AgvLocMast> {
-}
diff --git a/src/main/java/com/zy/asrs/service/AgvMobileService.java b/src/main/java/com/zy/asrs/service/AgvMobileService.java
index a53480b..0fc7615 100644
--- a/src/main/java/com/zy/asrs/service/AgvMobileService.java
+++ b/src/main/java/com/zy/asrs/service/AgvMobileService.java
@@ -1,14 +1,17 @@
 package com.zy.asrs.service;
 
+import com.zy.asrs.entity.AgvBasDevp;
 import com.zy.asrs.entity.param.CombParam;
 import com.zy.asrs.entity.param.MobileAdjustParam;
+
+import java.util.List;
 
 public interface AgvMobileService {
 
     /**
      * 缁勬墭
      */
-    void comb(CombParam param, Long userId);
+    String comb(CombParam param, Long userId);
 
     /**
      * 鐩樼偣
@@ -18,4 +21,6 @@
     void packComb(CombParam param, Long userId);
 
     void combBinding(String barcode, String stationCode);
+
+    List<AgvBasDevp> getAgvBasDevpByFloor(int floor);
 }
diff --git a/src/main/java/com/zy/asrs/service/AgvWorkService.java b/src/main/java/com/zy/asrs/service/AgvWorkService.java
index aa6197f..d8b1ccf 100644
--- a/src/main/java/com/zy/asrs/service/AgvWorkService.java
+++ b/src/main/java/com/zy/asrs/service/AgvWorkService.java
@@ -1,93 +1,17 @@
 package com.zy.asrs.service;
 
-import com.zy.asrs.entity.AgvWaitPakin;
-import com.zy.asrs.entity.BasDevp;
-import com.zy.asrs.entity.WaitPakin;
-import com.zy.asrs.entity.param.EmptyPlateOutParam;
-import com.zy.asrs.entity.param.FullStoreParam;
-import com.zy.asrs.entity.param.LocDetlAdjustParam;
-import com.zy.asrs.entity.param.StockOutParam;
-import com.zy.common.model.LocDetlDto;
+import com.zy.asrs.entity.AgvBasDevp;
 import com.zy.common.model.StartupDto;
-import com.zy.common.model.TaskDto;
-import com.zy.common.model.enums.IoWorkType;
 
 import java.util.List;
 
 public interface AgvWorkService {
 
     /**
-     * 鍏ㄦ澘鍏ュ簱
-     * @return 搴撲綅鍙�
-     */
-    String startupFullPutStore(FullStoreParam param, Long userId);
-
-    /**
-     * 鍑哄簱浣滀笟
-     */
-    void startupFullTakeStore(StockOutParam param, Long userId);
-
-    /**
-     * 鍑哄簱浣滀笟
-     */
-    void stockOut(BasDevp staNo, List<LocDetlDto> locDetls, IoWorkType ioWorkType, Long userId);
-
-    void stockOut(BasDevp staNo, TaskDto taskDto, Long userId);
-
-    /**
-     * 绌烘澘鍏ュ簱
-     * @return 搴撲綅鍙�
-     */
-    String emptyPlateIn(Integer sourceStaNo, Long userId);
-
-    /**
-     * 绌烘澘鍑哄簱
-     */
-    void emptyPlateOut(EmptyPlateOutParam param, Long userId);
-
-    /**
-     * 鐩樼偣鍑哄簱
-     */
-    void locCheckOut(StockOutParam param, Long userId);
-
-    /**
-     * 搴撲綅绉昏浆
-     */
-    void locMove(String sourceLocNo, String locNo, Long userId);
-
-    /**
-     * 鎵嬪姩瀹屾垚宸ヤ綔妗�
-     */
-    void completeWrkMast(String workNo, Long userId);
-
-    /**
-     * 搴撳瓨鏄庣粏璋冩暣
-     */
-    void adjustLocDetl(LocDetlAdjustParam param, Long userId);
-
-    /**
-     * 鎵嬪姩鍙栨秷宸ヤ綔妗�
-     */
-    void cancelWrkMast(String workNo, Long userId);
-
-    /**
-     * 鎵嬪姩鎷f枡鍏ュ簱宸ヤ綔妗�
-     */
-    void pickWrkMast(String workNo, Long userId);
-
-    /**
      * 閫氱煡妗f墜鍔ㄧ敓鎴愪换鍔�
      */
-    StartupDto createWaitPainWrkMastStart(List<AgvWaitPakin> list, Long userId);
+    StartupDto createWaitPainWrkMastStart(List<AgvBasDevp> agvBasDevpList, Long userId);
 
-    /**
-     * 閫氱煡妗f墜鍔ㄧ敓鎴愪换鍔�
-     */
-    String dealPreHaveStart(Integer wrkNo, Long userId);
 
-    /**
-     * 绌挎搴撶Щ杞�
-     */
-    void shuttleTransfer(List<String> locNos);
 
 }
diff --git a/src/main/java/com/zy/asrs/service/AgvWrkDetlService.java b/src/main/java/com/zy/asrs/service/AgvWrkDetlService.java
new file mode 100644
index 0000000..78747a6
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/AgvWrkDetlService.java
@@ -0,0 +1,28 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.AgvWrkDetl;
+import com.zy.asrs.entity.WrkDetl;
+import com.zy.common.model.DetlDto;
+
+import java.util.List;
+
+public interface AgvWrkDetlService extends IService<AgvWrkDetl> {
+
+    void createWorkDetail(Integer workNo, List<DetlDto> detlDtos, String barcode, Long userId);
+
+    List<WrkDetl> selectByWrkNo(Integer wrkNo);
+
+    boolean updateAnfme(Double anfme, Integer wrkNo, String matnr, String batch);
+
+    List<WrkDetl> selectAndLogByOrderNo(String orderNo);
+
+    List<WrkDetl> selectAndLogByOrderNoGroupByMatnrOfSum(String orderNo);
+
+    boolean updateInspect(Integer wrkNo, String matnr, String batch);
+
+    List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr);
+
+    boolean updateOrderNo(String orderNo, Integer wrkNo, String matnr, String batch);
+
+}
diff --git a/src/main/java/com/zy/asrs/service/AgvWrkLastnoService.java b/src/main/java/com/zy/asrs/service/AgvWrkLastnoService.java
new file mode 100644
index 0000000..760216d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/AgvWrkLastnoService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.AgvWrkLastno;
+
+public interface AgvWrkLastnoService extends IService<AgvWrkLastno> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java
index 89e92c9..c6f57ec 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java
@@ -4,8 +4,83 @@
 import com.zy.asrs.entity.AgvBasDevp;
 import com.zy.asrs.mapper.AgvBasDevpMapper;
 import com.zy.asrs.service.AgvBasDevpService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 @Service
+@Transactional
 public class AgvBasDevpServiceImpl extends ServiceImpl<AgvBasDevpMapper, AgvBasDevp> implements AgvBasDevpService {
+
+    @Autowired
+    AgvBasDevpMapper agvBasDevpMapper;
+
+    public void clearBasDevp(){
+        agvBasDevpMapper.deleteAll();
+    }
+
+    public void initBasDevp(){
+
+        //鍒濆鍖�1妤肩紦瀛樿揣鏋剁珯鐐� 2鎺�5鍒�3灞�
+        this.insertBatch(getCacheBasDevpList(1,2,1,5,1,3,1));
+        //鍒濆鍖�3妤肩紦瀛樿揣鏋剁珯鐐� 3鎺�5鍒�3灞�
+        this.insertBatch(getCacheBasDevpList(5,7,1,5,1,3,3));
+        //鍒濆鍖�3妤艰緭閫佺嚎宸ヤ綔绔欑偣 4涓珯鐐�
+        this.insertBatch(getLineBasDevpList());
+
+    }
+
+    private List<AgvBasDevp> getLineBasDevpList(){
+        List<AgvBasDevp> agvBasDevpList = new ArrayList<>();
+        Date now = new Date();
+        for(int row=1; row<=4; row++){
+            agvBasDevpList.add(getAgvBasDevp(row,1,1,3,"N",now));
+        }
+        return agvBasDevpList;
+    }
+
+    //鏍规嵁鎺掑垪灞傝幏鍙朅GV缂撳瓨璐ф灦绔欑偣鍒楄〃
+    private List<AgvBasDevp> getCacheBasDevpList(int rowIndex, int rowMax, int bayIndex, int bayMax, int levIndex, int levMax, int floor){
+        List<AgvBasDevp> agvBasDevpList = new ArrayList<>();
+        Date now = new Date();
+        for(int row=rowIndex; row<=rowMax; row++){
+            for(int bay=bayIndex; bay<=bayMax; bay++){
+                for(int lev=levIndex; lev<=levMax; lev++){
+//                    AgvBasDevp agvBasDevp = new AgvBasDevp();
+//                    String devNo = "CS-" + floor + "0" + row + "-00" + bay + "-0" + lev + "@" + floor;
+//                    String stationCode = "CS-" + floor + "0" + row;
+//                    agvBasDevp.setDevNo(devNo);
+//                    agvBasDevp.setStationCode(stationCode);
+//                    agvBasDevp.setLocSts("O");
+//                    agvBasDevp.setCacheShelves("Y");
+//                    agvBasDevp.setFloor(floor);
+//                    agvBasDevp.setModiTime(now);
+//                    agvBasDevp.setAppeTime(now);
+                    agvBasDevpList.add(getAgvBasDevp(row,bay,lev,floor,"Y",now));
+
+                }
+            }
+        }
+
+        return agvBasDevpList;
+    }
+
+    private AgvBasDevp getAgvBasDevp(int row, int bay, int lev, int floor, String cacheShelves, Date now){
+        AgvBasDevp agvBasDevp = new AgvBasDevp();
+        String devNo = "CS-" + floor + "0" + row + "-00" + bay + "-0" + lev + "@" + floor;
+        String stationCode = "CS-" + floor + "0" + row;
+        agvBasDevp.setDevNo(devNo);
+        agvBasDevp.setStationCode(stationCode);
+        agvBasDevp.setLocSts("O");
+        agvBasDevp.setCacheShelves(cacheShelves);
+        agvBasDevp.setFloor(floor);
+        agvBasDevp.setModiTime(now);
+        agvBasDevp.setAppeTime(now);
+        return agvBasDevp;
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java
new file mode 100644
index 0000000..0303c56
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java
@@ -0,0 +1,91 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.entity.AgvLocMast;
+import com.zy.asrs.entity.AgvLocRule;
+import com.zy.asrs.mapper.AgvLocMastMapper;
+import com.zy.asrs.service.AgvLocMastService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Service
+@Transactional
+public class AgvLocMastServiceImpl extends ServiceImpl<AgvLocMastMapper, AgvLocMast> implements AgvLocMastService {
+
+    @Autowired
+    AgvLocMastMapper agvLockMastMapper;
+
+    public void clearLoc(){
+        agvLockMastMapper.deleteAll();
+    }
+
+    public void initLocFloor1() {
+        //1妤� 13鎺� 86鍒� 12灞�
+        List<AgvLocMast> agvLocMastList = getLocMastList(1,13,1,86,1,12,1);
+        this.insertBatch(agvLocMastList);
+    }
+
+
+    public void initLocFloor3() {
+        //3妤� 1-33鎺� 1-14鍒� 8灞�
+        this.insertBatch(getLocMastList(1, 33, 1, 14, 1, 8, 3));
+
+        //3妤� 1-27鎺� 15-34鍒� 8灞�
+        this.insertBatch(getLocMastList(1, 27, 15, 34, 1, 8, 3));
+
+        //3妤� 1-25鎺� 35-46鍒� 8灞�
+        this.insertBatch(getLocMastList(1, 25, 35, 46, 1, 8, 3));
+
+        //3妤� 3-25鎺� 47-60鍒� 8灞�
+        this.insertBatch(getLocMastList(3, 25, 47, 60, 1, 8, 3));
+
+        //3妤� 4-25鎺� 61-70鍒� 8灞�
+        this.insertBatch(getLocMastList(4, 25, 61, 70, 1, 8, 3));
+
+    }
+
+    //鏍规嵁鎺掑垪灞傝幏鍙朅GV搴撲綅鍒楄〃
+    private List<AgvLocMast> getLocMastList(int rowIndex, int rowMax, int bayIndex, int bayMax, int levIndex, int levMax, int floor){
+        List<AgvLocMast> agvLocMastList = new ArrayList<>();
+        Date now = new Date();
+        for(int row=rowIndex; row<=rowMax; row++) {
+            for (int bay = bayIndex; bay <= bayMax; bay++) {
+                for (int lev = levIndex; lev <= levMax; lev++) {
+                    AgvLocMast loc = new AgvLocMast();
+                    String locRow = row < 10 ? "-00" + row : "-0" + row;
+                    String locBay = bay < 10 ? "-00" + bay : "-0" + bay;
+                    String locLev = lev < 10 ? "-0" + lev : "-" + lev;
+                    String locNo = "SK" + locRow + locBay + locLev + "@" + floor;
+                    loc.setLocNo(locNo);
+                    loc.setLocSts("O");
+                    loc.setRow1(row);
+                    loc.setBay1(bay);
+                    loc.setLev1(lev);
+                    loc.setFloor(floor);
+                    loc.setModiTime(now);
+                    loc.setFirstTime(now);
+                    loc.setAppeTime(now);
+                    agvLocMastList.add(loc);
+                }
+            }
+        }
+
+        return  agvLocMastList;
+    }
+
+    @Override
+    public List<AgvLocMast> queryFreeLocMast2(Short locType1, Integer rowBeg, Integer rowEnd, Integer bayBeg, Integer bayEnd, Integer levBeg, Integer levEnd) {
+        return this.baseMapper.queryFreeLocMast2(locType1, rowBeg, rowEnd, bayBeg, bayEnd, levBeg, levEnd);
+    }
+
+    @Override
+    public void updateLocType2ByRBL(Integer locType2, AgvLocRule locRule) {
+        this.baseMapper.updateLocType2(locType2,locRule.getRowBeg(),locRule.getRowEnd(),locRule.getBayBeg(),locRule.getBayEnd(),locRule.getLevBeg(),locRule.getLevEnd(),locRule.getFloor());
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvLocRuleServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvLocRuleServiceImpl.java
new file mode 100644
index 0000000..332b6b0
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/AgvLocRuleServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.entity.AgvLocRule;
+import com.zy.asrs.mapper.AgvLocRuleMapper;
+import com.zy.asrs.service.AgvLocRuleService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AgvLocRuleServiceImpl extends ServiceImpl<AgvLocRuleMapper, AgvLocRule> implements AgvLocRuleService {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvLockMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvLockMastServiceImpl.java
deleted file mode 100644
index 23655df..0000000
--- a/src/main/java/com/zy/asrs/service/impl/AgvLockMastServiceImpl.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.zy.asrs.service.impl;
-
-import com.baomidou.mybatisplus.service.impl.ServiceImpl;
-import com.zy.asrs.entity.AgvLocMast;
-import com.zy.asrs.mapper.AgvLockMastMapper;
-import com.zy.asrs.service.AgvLockMastService;
-import org.springframework.stereotype.Service;
-
-@Service
-public class AgvLockMastServiceImpl extends ServiceImpl<AgvLockMastMapper, AgvLocMast> implements AgvLockMastService {
-}
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java
index 8dd6f85..0a5fcc4 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java
@@ -1,34 +1,22 @@
 package com.zy.asrs.service.impl;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.BaseRes;
 import com.core.common.Cools;
-import com.core.common.DateUtils;
-import com.core.common.SnowflakeIdWorker;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.param.CombParam;
 import com.zy.asrs.entity.param.MobileAdjustParam;
-import com.zy.asrs.entity.param.OpenOrderPakinParam;
 import com.zy.asrs.service.*;
-import com.zy.asrs.task.core.ReturnT;
-import com.zy.asrs.task.handler.WorkLogHandler;
-import com.zy.asrs.utils.MatUtils;
-import com.zy.common.constant.MesConstant;
-import com.zy.common.entity.Parameter;
 import com.zy.common.model.DetlDto;
-import com.zy.common.model.MesCombParam;
-import com.zy.common.utils.HttpHandler;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
 
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -53,7 +41,7 @@
 
     @Override
     @Transactional
-    public void comb(CombParam param, Long userId) {
+    public String comb(CombParam param, Long userId) {
         if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
             throw new CoolException(BaseRes.PARAM);
         }
@@ -99,6 +87,7 @@
                 }
             });
         }else {
+            //鍏宠仈缁勬墭
             Order order = orderService.selectByNo(param.getOrderNo());
             if (order.getSettle() > 2) {
                 throw new CoolException("鍗曟嵁缂栧彿宸茶繃鏈�");
@@ -150,7 +139,12 @@
             orderService.updateSettle(order.getId(), 2L, userId);
         }
 
-        //鍏宠仈缁勬墭
+        if(StringUtils.isEmpty(param.getLocno())){
+            return "缁勬墭鎴愬姛";
+        }else {
+            combBinding(param.getBarcode(),param.getLocno());
+            return "缁勬墭鎴愬姛锛岀粦瀹氱珯鐐规垚鍔�";
+        }
 
     }
 
@@ -171,8 +165,11 @@
         EntityWrapper<AgvBasDevp> wrapper = new EntityWrapper<>();
         wrapper.eq("dev_no",stationCode);
         AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(wrapper);
+        if(agvBasDevp == null){
+            throw new CoolException(stationCode + "绔欑偣淇℃伅閿欒");
+        }
         if(!"O".equals(agvBasDevp.getLocSts())){
-            throw new CoolException(barcode + "璇ョ珯鐐归潪绌�");
+            throw new CoolException(stationCode + "璇ョ珯鐐硅揣浣嶇姸鎬侀潪绌�");
         }
 
         agvBasDevp.setBarcode(barcode);
@@ -180,4 +177,10 @@
         agvBasDevpService.update(agvBasDevp,wrapper);
     }
 
+    public List<AgvBasDevp> getAgvBasDevpByFloor(int floor) {
+        EntityWrapper<AgvBasDevp> wrapper = new EntityWrapper<>();
+        wrapper.eq("floor",floor).eq("cache_shelves","Y");
+        return agvBasDevpService.selectList(wrapper);
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
index 7f9947a..82751d4 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -1,130 +1,99 @@
 package com.zy.asrs.service.impl;
 
-import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.baomidou.mybatisplus.mapper.Wrapper;
-import com.core.common.BaseRes;
 import com.core.common.Cools;
-import com.core.common.DateUtils;
-import com.core.common.SnowflakeIdWorker;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
-import com.zy.asrs.entity.param.EmptyPlateOutParam;
-import com.zy.asrs.entity.param.FullStoreParam;
-import com.zy.asrs.entity.param.LocDetlAdjustParam;
-import com.zy.asrs.entity.param.StockOutParam;
 import com.zy.asrs.service.*;
-import com.zy.asrs.utils.Utils;
-import com.zy.common.model.*;
-import com.zy.common.model.enums.IoWorkType;
-import com.zy.common.model.enums.WorkNoType;
-import com.zy.common.properties.SlaveProperties;
-import com.zy.common.service.CommonService;
-import com.zy.common.web.BaseController;
-import com.zy.common.web.WcsController;
+import com.zy.common.model.DetlDto;
+import com.zy.common.model.StartupDto;
+import com.zy.common.service.AgvCommonService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
 
 /**
  * Created by vincent on 2020/6/11
  */
 @Slf4j
 @Service
+@Transactional
 public class AgvWorkServiceImpl implements AgvWorkService {
 
     // 宸ヤ綔鍙风敓鎴愯鍒欓粯璁ょ被鍨�
     private static final int DEFAULT_WORK_NO_TYPE = 0;
     // 搴撲綅鎺掑彿鍒嗛厤榛樿绫诲埆
     private static final int DEFAULT_ROW_NO_TYPE = 1;
-
     @Autowired
-    private MatService matService;
+    private AgvWaitPakinService agvWaitPakinService;
     @Autowired
-    private WrkMastService wrkMastService;
+    private AgvBasDevpService agvBasDevpService;
     @Autowired
-    private WrkDetlService wrkDetlService;
+    private AgvLocMastService agvLockMastService;
     @Autowired
-    private BasDevpService basDevpService;
+    private AgvCommonService agvCommonService;
     @Autowired
-    private CommonService commonService;
+    private AgvWrkMastService agvWrkMastService;
     @Autowired
-    private LocMastService locMastService;
-    @Autowired
-    private StaDescService staDescService;
-    @Autowired
-    private LocDetlService locDetlService;
-    @Autowired
-    private AdjDetlService adjDetlService;
-    @Autowired
-    private WrkMastLogService wrkMastLogService;
-    @Autowired
-    private WrkDetlLogService wrkDetlLogService;
-    @Autowired
-    private SnowflakeIdWorker snowflakeIdWorker;
-    @Autowired
-    private OrderService orderService;
-    @Autowired
-    private OrderDetlService orderDetlService;
-    @Autowired
-    private WcsController wcsController;
-    @Autowired
-    private RowLastnoService rowLastnoService;
-    @Autowired
-    private SlaveProperties slaveProperties;
+    private AgvWrkDetlService agvWrkDetlService;
 
     @Override
-    @Transactional
-    public String startupFullPutStore(FullStoreParam param, Long userId) {
-        // 鍙傛暟闈炵┖鍒ゆ柇
-        if (Cools.isEmpty(param.getDevpNo(), param.getList())) {
-            throw new CoolException(BaseRes.PARAM);
-        }
+    public StartupDto createWaitPainWrkMastStart(List<AgvBasDevp> agvBasDevpList, Long userId) {
+
         Date now = new Date();
-        // 婧愮珯鐐圭姸鎬佹娴�
-        BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getDevpNo(), true);
-        // 妫�绱㈠簱浣�
-        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
-        List<String> matnrs = param.getList().stream().map(FullStoreParam.MatCodeStore::getMatnr).distinct().collect(Collectors.toList());
-        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), matnrs, locTypeDto, 0);
-        // 鐢熸垚宸ヤ綔鍙�
-        int workNo = dto.getWorkNo();
-        // 鐢熸垚宸ヤ綔妗�
-        WrkMast wrkMast = new WrkMast();
-        wrkMast.setWrkNo(workNo);
-        wrkMast.setIoTime(new Date());
-        wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
-        wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
-        Double ioPri = wrkMastService.getIoPri(1, dto.getLocNo());
-        wrkMast.setIoPri(ioPri); // 浼樺厛绾э細13
-        wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), true)?1:0);;
-        wrkMast.setCrnNo(dto.getCrnNo());
-        wrkMast.setSourceStaNo(dto.getSourceStaNo());
-        wrkMast.setStaNo(dto.getStaNo());
-        wrkMast.setLocNo(dto.getLocNo());
-        wrkMast.setBarcode(param.getBarcode()); // 鎵樼洏鐮�
-        wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
-        wrkMast.setPicking("N"); // 鎷f枡
-        wrkMast.setExitMk("N"); // 閫�鍑�
-        wrkMast.setEmptyMk("N"); // 绌烘澘
-        wrkMast.setLinkMis("N");
-        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷
-        wrkMast.setAppeUser(userId);
-        wrkMast.setAppeTime(now);
-        wrkMast.setModiUser(userId);
-        wrkMast.setModiTime(now);
-        if (!wrkMastService.insert(wrkMast)) {
-            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
-        }
-        // 鐢熸垚宸ヤ綔妗f槑缁�
+
+        agvBasDevpList.forEach(agvBasDevp -> {
+            if(Cools.isEmpty(agvBasDevp.getBarcode())){
+                throw new CoolException("閫変腑鐨勭珯鐐逛腑鍚湁浣嶇粦瀹氭墭鐩樼殑绔欑偣锛岃閲嶆柊閫夋嫨");
+            }
+
+            if(!"F".equals(agvBasDevp.getLocSts())){
+                throw new CoolException("閫変腑鐨勭珯鐐逛腑鍚湁璐т綅鐘舵�佷笉涓篎.鍦ㄥ簱鐨勭珯鐐癸紝璇烽噸鏂伴�夋嫨");
+            }
+
+            List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectList(new EntityWrapper<AgvWaitPakin>().eq("zpallet", agvBasDevp.getBarcode()));
+
+            //妫�绱㈠簱浣嶏紝閫夋嫨鍚堥�傜殑搴撲綅
+            AgvLocMast agvLocMast = agvCommonService.getLocNo(agvWaitPakinList, agvBasDevp.getFloor());
+            //鐢熸垚宸ヤ綔妗�
+            AgvWrkMast wrkMast = createWrkMast(agvBasDevp, agvLocMast, now, userId);
+            //鐢熸垚宸ヤ綔妗f槑缁�
+            createWrkDetl(agvWaitPakinList,wrkMast,userId);
+            //鏇存柊婧愮珯鐐逛俊鎭�
+            updateAgvBasDevp(agvBasDevp);
+            //鏇存柊鐩爣搴撲綅鐘舵��
+            updateAgvLocMast(agvLocMast);
+        });
+
+        return null;
+    }
+
+    /*
+    鏇存柊鐩爣搴撲綅淇℃伅
+     */
+    private void updateAgvLocMast(AgvLocMast locMast){
+        locMast.setLocSts("S");
+        agvLockMastService.updateById(locMast);
+    }
+
+    /*
+    鏇存柊婧愮珯鐐逛俊鎭�
+     */
+    private void updateAgvBasDevp(AgvBasDevp agvBasDevp){
+        agvBasDevp.setLocSts("R");
+        agvBasDevpService.updateById(agvBasDevp);
+    }
+
+    /*
+    鐢熸垚宸ヤ綔妗f槑缁�
+     */
+    private void createWrkDetl(List<AgvWaitPakin> agvWaitPakinList, AgvWrkMast wrkMast, Long userId){
         List<DetlDto> detlDtos = new ArrayList<>();
-        param.getList().forEach(elem -> {
-            DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
+        agvWaitPakinList.forEach(agvWaitPakin -> {
+            DetlDto detlDto = new DetlDto(agvWaitPakin.getMatnr(), agvWaitPakin.getBatch(), agvWaitPakin.getAnfme());
             if (DetlDto.has(detlDtos, detlDto)) {
                 DetlDto detlDto1 = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
                 assert detlDto1 != null;
@@ -133,1057 +102,46 @@
                 detlDtos.add(detlDto);
             }
         });
-        wrkDetlService.createWorkDetail(workNo, detlDtos, param.getBarcode(), userId);
-        // 鏇存柊婧愮珯鐐逛俊鎭�
-        sourceStaNo.setWrkNo(workNo);
-        sourceStaNo.setModiUser(userId);
-        sourceStaNo.setModiTime(now);
-        if (!basDevpService.updateById(sourceStaNo)){
-            throw new CoolException("鏇存柊婧愮珯澶辫触");
-        }
-        // 鏇存柊鐩爣搴撲綅鐘舵��
-        LocMast locMast = locMastService.selectById(dto.getLocNo());
-        if (locMast.getLocSts().equals("O")){
-            locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
-            locMast.setModiUser(userId);
-            locMast.setModiTime(now);
-            if (!locMastService.updateById(locMast)){
-                throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
-            }
-        } else {
-            throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤");
-        }
-        return dto.getLocNo();
+        agvWrkDetlService.createWorkDetail(wrkMast.getWrkNo(), detlDtos, wrkMast.getBarcode(), userId);
+
     }
 
-    @Override
-    @Transactional
-    public void startupFullTakeStore(StockOutParam param, Long userId) {
-        ArrayList<String> locNos = new ArrayList<>();
-        for (StockOutParam.LocDetl locDetl:param.getLocDetls()){
-            if (!locNos.contains(locDetl.getLocNo())){
-                locNos.add(locDetl.getLocNo());
-            }
-        }
-        //妫�娴嬫槸鍚︿负娴呭簱浣�
-        boolean sign=false;
-        String th = "";
-        for (String locNo:locNos){
-            if (sign){
-                break;
-            }
-
-            //妫�娴嬪嚭搴撶殑璐х墿涓槸鍚︽湁鐘舵�佷负绂佹鐨勮揣鐗┿��
-            for (LocDetl locDetl : locDetlService.selectByLocNo(locNo)) {
-                if (locDetl.getStockFreeze() == 0) {
-                    th="搴撲綅鍙凤細"+locNo+" 鏈夌姝㈠嚭搴撶殑璐х墿锛�";
-                    throw new CoolException("鍑哄簱澶辫触锛�"+th);
-                }
-
-                Mat mat = matService.selectByMatnr(locDetl.getMatnr());
-                if (mat == null) {
-                    continue;
-                }
-                if (mat.getStatus() == 0) {
-                    th="搴撲綅鍙凤細"+locNo+" 鏈夌姝㈠嚭搴撶殑璐х墿锛�";
-                    throw new CoolException("鍑哄簱澶辫触锛�"+th);
-                }
-            }
-
-            List<String> groupInsideLoc = Utils.getGroupInsideLoc(locNo);
-            if (!Cools.isEmpty(groupInsideLoc)) {
-                for (String insideLoc : groupInsideLoc) {
-                    if (locNos.contains(insideLoc)){
-                        continue;
-                    }
-                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", insideLoc));
-                    if (locMast != null) {
-                        if (!locMast.getLocSts().equals("O") && !locMast.getLocSts().equals("R")){
-                            sign=true;
-                            th="搴撲綅鍙凤細"+locNo+" 娴呭簱浣嶆湁闈炵┖搴撲綅锛�";
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-        if (sign){
-            throw new CoolException("鍑哄簱澶辫触锛�"+th);
-        }
-        // 鐩爣绔欑偣鐘舵�佹娴�
-        BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite());
-        // 鑾峰彇搴撲綅鏄庣粏
-        List<LocDetlDto> locDetlDtos = new ArrayList<>();
-        for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
-            if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
-                LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch());
-                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
-            }
-        }
-        if (!locDetlDtos.isEmpty()) {
-            // 鍚姩鍑哄簱寮�濮� 101.鍑哄簱
-            stockOut(staNo, locDetlDtos, null, userId);
-        } else {
-            throw new CoolException("搴撳瓨涓嶅瓨鍦�");
-        }
-    }
-    /**
-     * 閫氳繃搴撲綅鍙疯幏鍙� 鎺�
+    /*
+    鐢熸垚宸ヤ綔妗�
      */
-    public static int getRow(String locNo) {
-        if (!Cools.isEmpty(locNo)) {
-            return Integer.parseInt(locNo.substring(0, 2));
-        }
-        throw new RuntimeException("搴撲綅瑙f瀽寮傚父");
-    }
-    /**
-     * 閫氳繃搴撲綅鍙疯幏鍙� 鍒�
-     */
-    public static int getBay(String locNo) {
-        if (!Cools.isEmpty(locNo)) {
-            return Integer.parseInt(locNo.substring(2, 5));
-        }
-        throw new RuntimeException("搴撲綅瑙f瀽寮傚父");
-    }
-    /**
-     * 閫氳繃搴撲綅鍙疯幏鍙� 灞�
-     */
-    public static int getLev(String locNo) {
-        if (!Cools.isEmpty(locNo)) {
-            return Integer.parseInt(locNo.substring(5, 7));
-        }
-        throw new RuntimeException("搴撲綅瑙f瀽寮傚父");
-    }
-
-    @Override
-    @Transactional
-    public void stockOut(BasDevp staNo, List<LocDetlDto> locDetlDtos, IoWorkType ioWorkType, Long userId) {
-        Date now = new Date();
-        // 鍚堝苟鍚岀被椤�
-        Set<String> locNos = new HashSet<>();
-        List<OutLocDto> dtos = new ArrayList<>();
-        for (LocDetlDto locDetlDto : locDetlDtos) {
-            String locNo = locDetlDto.getLocDetl().getLocNo();
-            if (locNos.contains(locNo)) {
-                for (OutLocDto dto : dtos) {
-                    if (dto.getLocNo().equals(locNo)) {
-                        dto.getLocDetlDtos().add(locDetlDto);
-                        break;
-                    }
-                }
-            } else {
-                locNos.add(locNo);
-                dtos.add(new OutLocDto(locNo, locDetlDto));
-            }
-        }
-        Integer ioType = null;
-        List<String> excludeLocNos = dtos.stream().map(OutLocDto::getLocNo).distinct().collect(Collectors.toList());
-        // 鐢熸垚宸ヤ綔妗�
-        for (OutLocDto dto : dtos) {
-            // 濡傛灉涓烘繁搴撲綅锛屼笖瀵瑰簲娴呭簱浣嶄负X.绂佺敤锛屽垯鐣ヨ繃姝ゅ簱浣�
-            if (Utils.isDeepLoc(slaveProperties, dto.getLocNo())) {
-                String shallowLoc = Utils.getShallowLoc(slaveProperties, dto.getLocNo());
-                if (locMastService.selectById(shallowLoc).getLocSts().equals("X")) {
-                    continue;
-                }
-            }
-
-            // 鍒ゆ柇鍏ュ嚭搴撶被鍨嬶細101.鍏ㄦ澘鍑哄簱 or 103.鎷f枡鍑哄簱
-            if (ioWorkType == null) {
-                ioType = dto.isAll() ? 101 : 103;
-            } else if (ioWorkType.equals(IoWorkType.CHECK_OUT)) {
-                ioType = 107;
-            }
-            assert ioType != null;
-            // 鑾峰彇搴撲綅
-            LocMast locMast = locMastService.selectById(dto.getLocNo());
-            // 鑾峰彇璺緞
-            Boolean outMost = locMastService.isOutMost(dto.getLocNo(), false);
-            Integer outCrnNo = locMastService.getOutCrnNo(locMast);
-            StaDesc staDesc = staDescService.queryCrnStn(ioType, outCrnNo, staNo.getDevNo());
-            // 鐢熸垚宸ヤ綔鍙�
-            int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
-            // 鐢熸垚宸ヤ綔妗�
-            WrkMast wrkMast = new WrkMast();
-            wrkMast.setWrkNo(workNo);
-            wrkMast.setIoTime(now);
-            wrkMast.setWrkSts(21L); // 宸ヤ綔鐘舵�侊細21.鐢熸垚鍑哄簱浠诲姟
-            wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
-            Double ioPri = wrkMastService.getIoPri(ioType, dto.getLocNo());
-            wrkMast.setIoPri(ioPri); // 浼樺厛绾э細13
-            wrkMast.setOutMost(outMost?1:0);;
-            wrkMast.setCrnNo(outMost?outCrnNo:locMast.getCrnNo());
-            wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 婧愮珯
-            wrkMast.setStaNo(staDesc.getStnNo()); // 鐩爣绔�
-            wrkMast.setSourceLocNo(dto.getLocNo()); // 婧愬簱浣�
-            wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
-            wrkMast.setPicking("N"); // 鎷f枡
-            wrkMast.setExitMk("N"); // 閫�鍑�
-            wrkMast.setEmptyMk("N"); // 绌烘澘
-            wrkMast.setLinkMis("N");
-            wrkMast.setBarcode(locMast.getBarcode());
-            wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁
-            wrkMast.setAppeTime(now);
-            wrkMast.setModiUser(userId);
-            wrkMast.setModiTime(now);
-            if (!wrkMastService.insert(wrkMast)) {
-                throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細"+dto.getLocNo());
-            }
-            // 鐢熸垚宸ヤ綔妗f槑缁�
-            for (LocDetlDto detlDto : dto.getLocDetlDtos()) {
-                if (detlDto.getCount()==null || detlDto.getCount() <= 0.0D) {continue;}
-                WrkDetl wrkDetl = new WrkDetl();
-                wrkDetl.sync(detlDto.getLocDetl());
-                wrkDetl.setOrderNo(""); // 鎵嬪姩鍑哄簱涓嶉渶瑕佸甫鍑哄簱瀛樹腑鐨勫崟鎹紪鍙�
-                wrkDetl.setWrkNo(workNo);
-                wrkDetl.setIoTime(now);
-                Double anfme = ioType==101?detlDto.getLocDetl().getAnfme():detlDto.getCount();
-                wrkDetl.setAnfme(anfme); // 鏁伴噺
-                wrkDetl.setAppeTime(now);
-                wrkDetl.setAppeUser(userId);
-                wrkDetl.setModiTime(now);
-                wrkDetl.setModiUser(userId);
-                if (!wrkDetlService.insert(wrkDetl)) {
-                    throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
-                }
-            }
-            // 淇敼搴撲綅鐘舵��:   F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓�
-            locMast = locMastService.selectById(dto.getLocNo());
-            if (locMast.getLocSts().equals("F")) {
-                locMast.setLocSts(ioType==101?"R":"P");
-                locMast.setModiUser(userId);
-                locMast.setModiTime(now);
-                if (!locMastService.updateById(locMast)) {
-                    throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細"+dto.getLocNo());
-                }
-            } else {
-                throw new CoolException(dto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
-            }
-            locMastService.breakUp(dto.getLocNo(), excludeLocNos);
-        }
-    }
-
-    @Override
-    @Transactional
-    public void stockOut(BasDevp staNo, TaskDto taskDto, Long userId) {
-        Date now = new Date();
-        List<LocDto> locDtos = taskDto.getLocDtos();
-        for (LocDto locDto : locDtos) {
-            if (!taskDto.getLocNo().equals(locDto.getLocNo()) && !taskDto.getStaNo().equals(locDto.getStaNo())) {
-                throw new CoolException("璁㈠崟鍑哄簱寮傚父锛岃鑱旂郴绠$悊鍛�");
-            }
-        }
-        // 鑾峰彇搴撲綅
-        LocMast locMast = locMastService.selectById(taskDto.getLocNo());
-        // 鑾峰彇璺緞
-        int ioType = taskDto.isAll() ? 101 : 103;
-        Boolean outMost = locMastService.isOutMost(taskDto.getLocNo(), false);
-        Integer outCrnNo = locMastService.getOutCrnNo(locMast);
-        StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, outCrnNo, staNo.getDevNo());
-        // 鐢熸垚宸ヤ綔鍙�
-        int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
-        // 鐢熸垚宸ヤ綔妗�
-        WrkMast wrkMast = new WrkMast();
+    private AgvWrkMast createWrkMast(AgvBasDevp agvBasDevp,AgvLocMast agvLocMast, Date now, Long userId){
+        AgvWrkMast wrkMast = new AgvWrkMast();
+        //鐢熸垚宸ヤ綔鍙�
+        int workNo = agvCommonService.getWorkNo(0);
         wrkMast.setWrkNo(workNo);
-        wrkMast.setIoTime(now);
-        wrkMast.setWrkSts(21L); // 宸ヤ綔鐘舵�侊細21.鐢熸垚鍑哄簱浠诲姟
-        wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
-        Double ioPri = wrkMastService.getIoPri(ioType, taskDto.getLocNo());
-        wrkMast.setIoPri(ioPri); // 浼樺厛绾э細13
-        wrkMast.setOutMost(outMost?1:0);;
-        wrkMast.setCrnNo(outMost?outCrnNo:locMast.getCrnNo());
-        wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 婧愮珯
-        wrkMast.setStaNo(staDesc.getStnNo()); // 鐩爣绔�
-        wrkMast.setSourceLocNo(taskDto.getLocNo()); // 婧愬簱浣�
+        wrkMast.setIoTime(new Date());
+        wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
+        wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+        //鐢熸垚浼樺厛绾�
+        wrkMast.setIoPri(300.0);
+        wrkMast.setSourceLocNo(agvBasDevp.getDevNo());
+        wrkMast.setLocNo(agvLocMast.getLocNo());
+        wrkMast.setBarcode(agvBasDevp.getBarcode());
         wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
         wrkMast.setPicking("N"); // 鎷f枡
         wrkMast.setExitMk("N"); // 閫�鍑�
         wrkMast.setEmptyMk("N"); // 绌烘澘
         wrkMast.setLinkMis("N");
-        wrkMast.setBarcode(locMast.getBarcode());
-        wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁
-        wrkMast.setAppeTime(now);
-        wrkMast.setModiUser(userId);
-        wrkMast.setModiTime(now);
-        if (!wrkMastService.insert(wrkMast)) {
-            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細"+taskDto.getLocNo());
-        }
-        // 鐢熸垚宸ヤ綔妗f槑缁�
-        for (LocDto locDto : taskDto.getLocDtos()) {
-            if (locDto.getAnfme()==null || locDto.getAnfme() <= 0.0D) { continue; }
-            LocDetl locDetl = locDetlService.selectItem(locDto.getLocNo(), locDto.getMatnr(), locDto.getBatch());
-            if (locDetl == null || locDetl.getAnfme() < locDto.getAnfme()) {
-                throw new CoolException(locDto.getLocNo() + "搴撲綅涓�" + locDto.getMatnr() + "鍟嗗搧搴撳瓨涓嶈冻锛�");
-            }
-            Mat mat = matService.selectByMatnr(locDto.getMatnr());
-            assert mat != null;
-            WrkDetl wrkDetl = new WrkDetl();
-            wrkDetl.sync(mat);
-            wrkDetl.setZpallet(wrkMast.getBarcode());
-            wrkDetl.setIoTime(now);
-            wrkDetl.setWrkNo(workNo);
-            wrkDetl.setBatch(locDto.getBatch());
-            wrkDetl.setOrderNo(locDto.getOrderNo());
-            wrkDetl.setAnfme(locDto.getAnfme()); // 鏁伴噺
-            wrkDetl.setAppeTime(now);
-            wrkDetl.setAppeUser(userId);
-            wrkDetl.setModiTime(now);
-            wrkDetl.setModiUser(userId);
-            if (!wrkDetlService.insert(wrkDetl)) {
-                throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
-            }
-            // 淇敼璁㈠崟鏄庣粏
-            if (!BaseController.isJSON(locDto.getOrderNo())) {
-                OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
-                if (orderDetl == null) {
-                    orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
-                }
-                if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) {
-                    throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触");
-                }
-                orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
-            } else {
-                // 璁㈠崟鍚堝苟鍑哄簱
-                List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
-                for (OrderDto orderDto : orderDtoList) {
-                    OrderDetl orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
-                    if (orderDetl == null) {
-                        orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), null);
-                    }
-                    if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDto.getAnfme())) {
-                        throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触");
-                    }
-                    orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
-                }
-            }
-        }
-        // 淇敼搴撲綅鐘舵��:   F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓�
-        locMast = locMastService.selectById(taskDto.getLocNo());
-        if (locMast.getLocSts().equals("F")) {
-            locMast.setLocSts(ioType==101?"R":"P");
-            locMast.setModiUser(userId);
-            locMast.setModiTime(now);
-            if (!locMastService.updateById(locMast)) {
-                throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細"+taskDto.getLocNo());
-            }
-        } else {
-            throw new CoolException(taskDto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
-        }
-    }
-
-    @Override
-    @Transactional
-    public String emptyPlateIn(Integer devpNo, Long userId) {
-        // 婧愮珯鐐圭姸鎬佹娴�
-        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
-        // 妫�绱㈠簱浣�
-        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
-        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null, locTypeDto, 0);
-        int workNo = dto.getWorkNo();
-        // 鐢熸垚宸ヤ綔妗�
-        WrkMast wrkMast = new WrkMast();
-        wrkMast.setWrkNo(workNo);
-        wrkMast.setIoTime(new Date());
-        wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
-        wrkMast.setIoType(10); // 鍏ュ嚭搴撶姸鎬侊細10.绌烘澘鍏ュ簱
-        Double ioPri = wrkMastService.getIoPri(10, dto.getLocNo());
-        wrkMast.setIoPri(ioPri); // 浼樺厛绾э細10
-        wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), true)?1:0);;
-        wrkMast.setCrnNo(dto.getCrnNo());
-        wrkMast.setSourceStaNo(dto.getSourceStaNo());
-        wrkMast.setStaNo(dto.getStaNo());
-        wrkMast.setLocNo(dto.getLocNo());
-        wrkMast.setFullPlt("N"); // 婊℃澘
-        wrkMast.setPicking("N"); // 鎷f枡
-        wrkMast.setExitMk("N"); // 閫�鍑�
-        wrkMast.setEmptyMk("Y"); // 绌烘澘
-        wrkMast.setLinkMis("N");
-        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷
-        // 鎿嶄綔浜哄憳鏁版嵁
-        wrkMast.setAppeUser(userId);
-        wrkMast.setAppeTime(new Date());
-        wrkMast.setModiUser(userId);
-        wrkMast.setModiTime(new Date());
-        boolean res = wrkMastService.insert(wrkMast);
-        if (!res) {
-            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
-        }
-        // 鏇存柊婧愮珯鐐逛俊鎭�
-        sourceStaNo.setWrkNo(workNo);
-        sourceStaNo.setModiUser(userId);
-        sourceStaNo.setModiTime(new Date());
-        if (!basDevpService.updateById(sourceStaNo)){
-            throw new CoolException("鏇存柊婧愮珯澶辫触");
-        }
-        // 鏇存柊鐩爣搴撲綅鐘舵��
-        LocMast locMast = locMastService.selectById(dto.getLocNo());
-        if (locMast.getLocSts().equals("O")){
-            locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
-            locMast.setModiUser(userId);
-            locMast.setModiTime(new Date());
-            if (!locMastService.updateById(locMast)){
-                throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
-            }
-        } else {
-            throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤");
-        }
-        return dto.getLocNo();
-    }
-
-    @Override
-    @Transactional
-    public void emptyPlateOut(EmptyPlateOutParam param, Long userId) {
-        List<String> locNos = param.getLocNos();
-        //妫�娴嬫槸鍚︿负娴呭簱浣�
-        boolean sign=false;
-        String th = "";
-        for (String locNo:locNos){
-            if (sign){
-                break;
-            }
-            List<String> groupInsideLoc = Utils.getGroupInsideLoc(locNo);
-            if (!Cools.isEmpty(groupInsideLoc)) {
-                for (String insideLoc : groupInsideLoc) {
-                    if (locNos.contains(insideLoc)){
-                        continue;
-                    }
-                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", insideLoc));
-                    if (locMast != null) {
-                        if (!locMast.getLocSts().equals("O") && !locMast.getLocSts().equals("R")){
-                            sign=true;
-                            th="搴撲綅鍙凤細"+locNo+" 娴呭簱浣嶆湁闈炵┖搴撲綅锛�";
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-        if (sign){
-            throw new CoolException("鍑哄簱澶辫触锛�"+th);
-        }
-        if (Cools.isEmpty(param.getOutSite())) {
-            throw new CoolException("绔欑偣涓嶅瓨鍦�");
-        }
-        for (String locNo : param.getLocNos()) {
-            // 濡傛灉涓烘繁搴撲綅锛屼笖瀵瑰簲娴呭簱浣嶄负X.绂佺敤锛屽垯鐣ヨ繃姝ゅ簱浣�
-            if (Utils.isDeepLoc(slaveProperties, locNo)) {
-                String shallowLoc = Utils.getShallowLoc(slaveProperties, locNo);
-                if (locMastService.selectById(shallowLoc).getLocSts().equals("X")) {
-                    continue;
-                }
-            }
-            // 鑾峰彇宸ヤ綔鍙�
-            int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
-            // 鑾峰彇搴撲綅
-            LocMast locMast = locMastService.selectById(locNo);
-            if (Cools.isEmpty(locMast)) {
-                throw new CoolException(locNo+"搴撲綅涓嶅瓨鍦�");
-            }
-            Boolean outMost = locMastService.isOutMost(locNo, false);
-            Integer outCrnNo = locMastService.getOutCrnNo(locMast);
-            // 鑾峰彇婧愮珯
-            Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
-                    .eq("type_no", 110)
-                    .eq("stn_no", param.getOutSite())
-                    .eq("crn_no", outCrnNo);
-            StaDesc staDesc = staDescService.selectOne(wrapper);
-            if (Cools.isEmpty(staDesc)) {
-                throw new CoolException("闈炴硶璺緞锛�");
-            }
-            Integer sourceStaNo = staDesc.getCrnStn();
-            if (Cools.isEmpty(sourceStaNo)) {
-                throw new CoolException("妫�绱㈡簮绔欏け璐�");
-            }
-            // 淇濆瓨宸ヤ綔妗�
-            WrkMast wrkMast = new WrkMast();
-            wrkMast.setWrkNo(workNo);
-            wrkMast.setIoTime(new Date());
-            wrkMast.setWrkSts(21L); // 宸ヤ綔鐘舵�侊細21.鐢熸垚鍑哄簱浠诲姟
-            wrkMast.setIoType(110); // 鍏ュ嚭搴撶姸鎬侊細 110.绌烘澘鍑哄簱
-            Double ioPri = wrkMastService.getIoPri(110, locNo);
-            wrkMast.setIoPri(ioPri);
-            wrkMast.setSourceStaNo(sourceStaNo); // 婧愮珯
-            wrkMast.setStaNo(param.getOutSite()); // 鐩爣绔�
-            wrkMast.setOutMost(outMost?1:0);;
-            wrkMast.setCrnNo(outMost?outCrnNo:locMast.getCrnNo());
-            wrkMast.setSourceLocNo(locNo); // 婧愬簱浣�
-            wrkMast.setFullPlt("N"); // 婊℃澘锛歒
-            wrkMast.setPicking("N"); // 鎷f枡
-            wrkMast.setExitMk("N"); // 閫�鍑�
-            wrkMast.setEmptyMk("Y"); // 绌烘澘
-            wrkMast.setLinkMis("N");
-            wrkMast.setAppeUser(userId);
-            wrkMast.setAppeTime(new Date());
-            wrkMast.setModiUser(userId);
-            wrkMast.setModiTime(new Date());
-            boolean res = wrkMastService.insert(wrkMast);
-            if (!res) {
-                throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
-            }
-            // 鏇存柊搴撲綅鐘舵�� D.绌烘澘 -> R.鍑哄簱棰勭害
-            if (locMast.getLocSts().equals("D")){
-                locMast.setLocSts("R");
-                locMast.setModiUser(userId);
-                locMast.setModiTime(new Date());
-                if (!locMastService.updateById(locMast)) {
-                    throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�");
-                }
-            }
-        }
-    }
-
-    @Override
-    @Transactional
-    public void locCheckOut(StockOutParam param, Long userId) {
-        // 鐩爣绔欑偣鐘舵�佹娴�
-        BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite());
-        // 鑾峰彇搴撲綅鏄庣粏
-        List<LocDetlDto> locDetlDtos = new ArrayList<>();
-        for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
-            if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
-                LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch());
-                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
-            }
-        }
-        if (!locDetlDtos.isEmpty()) {
-            // 鍚姩鍑哄簱寮�濮� 107.鐩樼偣鍑哄簱
-            stockOut(staNo, locDetlDtos, IoWorkType.CHECK_OUT, userId);
-        } else {
-            throw new CoolException("搴撲綅鐗╂枡涓嶅瓨鍦�");
-        }
-    }
-
-    @Override
-    @Transactional
-    public void locMove(String sourceLocNo, String locNo, Long userId) {
-        LocMast sourceLoc = locMastService.selectById(sourceLocNo);
-        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLocNo));
-        if (Cools.isEmpty(sourceLoc)){
-            throw new CoolException("鏈壘鍒板簱浣�");
-        }
-        LocMast loc = locMastService.selectById(locNo);
-        if (Cools.isEmpty(loc)){
-            throw new CoolException("鏈壘鍒板簱浣�");
-        }
-        if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) {
-//            throw new CoolException("绉昏浆搴撲綅灞炰簬涓嶅悓鍫嗗灈鏈�");   todo:luxiaotao
-        }
-        Date now = new Date();
-        // 鑾峰彇宸ヤ綔鍙�
-        int workNo = commonService.getWorkNo(WorkNoType.PICK.type);
-        // 淇濆瓨宸ヤ綔妗�
-        WrkMast wrkMast = new WrkMast();
-        wrkMast.setWrkNo(workNo);
-        wrkMast.setIoTime(now);
-        wrkMast.setWrkSts(21L); // 宸ヤ綔鐘舵�侊細21.鐢熸垚鍑哄簱浠诲姟
-        wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
-        wrkMast.setIoPri(10D);
-        wrkMast.setOutMost(locMastService.isOutMost(locNo, false)?1:0);;
-        wrkMast.setCrnNo(sourceLoc.getCrnNo());
-        wrkMast.setSourceLocNo(sourceLocNo); // 婧愬簱浣�
-        wrkMast.setLocNo(locNo); // 鐩爣搴撲綅
-        wrkMast.setFullPlt(Cools.isEmpty(locDetls)?"N":"Y"); // 婊℃澘锛歒
-        wrkMast.setPicking("N"); // 鎷f枡
-        wrkMast.setExitMk("N"); // 閫�鍑�
-        wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D")?"Y":"N"); // 绌烘澘
-        wrkMast.setBarcode(sourceLoc.getBarcode()); // 鎵樼洏鐮�
-        wrkMast.setLinkMis("N");
         wrkMast.setAppeUser(userId);
         wrkMast.setAppeTime(now);
         wrkMast.setModiUser(userId);
         wrkMast.setModiTime(now);
-        boolean res = wrkMastService.insert(wrkMast);
-        if (!res) {
+        if (!agvWrkMastService.insert(wrkMast)) {
             throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
         }
-        // 宸ヤ綔妗f槑缁嗕繚瀛�
-        for (LocDetl locDetl : locDetls) {
-            WrkDetl wrkDetl = new WrkDetl();
-            wrkDetl.sync(locDetl);
-            wrkDetl.setWrkNo(workNo);
-            wrkDetl.setIoTime(now);
-            wrkDetl.setAnfme(locDetl.getAnfme());
-            wrkDetl.setAppeTime(now);
-            wrkDetl.setAppeUser(userId);
-            wrkDetl.setModiTime(now);
-            wrkDetl.setModiUser(userId);
-            if (!wrkDetlService.insert(wrkDetl)) {
-                throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
-            }
-        }
-        // 淇敼婧愬簱浣嶇姸鎬�
-        if (sourceLoc.getLocSts().equals("D") || sourceLoc.getLocSts().equals("F")) {
-            sourceLoc.setLocSts("R"); // R.鍑哄簱棰勭害
-            sourceLoc.setModiUser(userId);
-            sourceLoc.setModiTime(now);
-            if (!locMastService.updateById(sourceLoc)){
-                throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
-            }
-        } else {
-            throw new CoolException(sourceLoc.getLocNo() + "婧愬簱浣嶅嚭搴撳け璐ワ紝鐘舵�侊細"+sourceLoc.getLocSts$());
-        }
-        // 淇敼鐩爣搴撲綅鐘舵��
-        if (loc.getLocSts().equals("O")) {
-            loc.setLocSts("S"); // S.鍏ュ簱棰勭害
-            loc.setModiTime(now);
-            loc.setModiUser(userId);
-            if (!locMastService.updateById(loc)) {
-                throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
-            }
-        } else {
-            throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細"+loc.getLocSts$());
-        }
+        return wrkMast;
+
     }
 
-    @Override
-    @Transactional
-    public void completeWrkMast(String workNo, Long userId) {
-        WrkMast wrkMast = wrkMastService.selectById(workNo);
-        if (Cools.isEmpty(wrkMast)){
-            throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪");
-        }
-        if (wrkMast.getWrkSts() == 9 || wrkMast.getWrkSts() == 17) {
-            throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚");
-        }
-        // 鍏ュ簱 + 搴撲綅杞Щ
-        if (wrkMast.getWrkSts() < 9 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType()==11)) {
-            wrkMast.setWrkSts(9L);
-            // 鍑哄簱
-        } else if (wrkMast.getWrkSts() > 10) {
-            wrkMast.setWrkSts(17L);
-        }
-        Date now = new Date();
-        wrkMast.setCrnStrTime(DateUtils.calculate(now, 1L, TimeUnit.SECONDS, true));
-        wrkMast.setCrnEndTime(now);
-        wrkMast.setModiTime(now);
-        wrkMast.setModiUser(userId);
-        // 瀹屾垚鎿嶄綔浜哄憳璁板綍
-        wrkMast.setManuType("鎵嬪姩瀹屾垚");
-        if (!wrkMastService.updateById(wrkMast)) {
-            throw new CoolException("淇敼宸ヤ綔妗eけ璐�");
-        }
+    public static void main(String[] args) {
+        Set<AgvBasDevp> set = new HashSet<>();
+        set.add(null);
+        set.add(null);
+        System.out.println(set.size());
     }
-
-    @Override
-    @Transactional
-    public void adjustLocDetl(LocDetlAdjustParam param, Long userId) {
-        param.integrate();
-        LocMast locMast = locMastService.selectById(param.getLocNo());
-        if (Cools.isEmpty(locMast)) {
-            throw new CoolException("搴撲綅涓嶅瓨鍦�");
-        }
-        if (!(locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D") || locMast.getLocSts().equals("O"))) {
-            throw new CoolException("褰撳墠搴撲綅涓嶅彲璋冩暣锛佸簱浣嶇姸鎬侊細" + locMast.getLocSts$());
-        }
-
-        Date now = new Date();
-        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", param.getLocNo()));
-
-        List<LocDetlAdjustParam.LocDetlAdjust> list = param.getList();
-
-        // 淇敼鏁伴噺
-        Iterator<LocDetl> iterator = locDetls.iterator();
-        while (iterator.hasNext()) {
-            LocDetl locDetl = iterator.next();
-
-            Iterator<LocDetlAdjustParam.LocDetlAdjust> iterator1 = list.iterator();
-            while (iterator1.hasNext()) {
-                LocDetlAdjustParam.LocDetlAdjust adjust = iterator1.next();
-                if (adjust.getCount() == 0) { continue; }
-                if (locDetl.getMatnr().equals(adjust.getMatnr()) && Cools.eq(locDetl.getBatch(), adjust.getBatch())) {
-                    if (!locDetl.getAnfme().equals(adjust.getCount())) {
-                        // todo 鐩樼偣璁板綍
-                        // 淇敼搴撳瓨
-                        if (!locDetlService.updateAnfme(adjust.getCount(), locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch())) {
-                            throw new CoolException(locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "搴忓垪鐮佷慨鏀规暟閲忓け璐�");
-                        }
-                        // 淇濆瓨璋冩暣璁板綍
-                        AdjDetl adjDetl = new AdjDetl();
-                        adjDetl.setLocNo(locDetl.getLocNo());
-                        adjDetl.setMatnr(locDetl.getMatnr());
-                        adjDetl.setBatch(locDetl.getBatch());
-                        adjDetl.setOriQty(locDetl.getAnfme());
-                        adjDetl.setAdjQty(adjust.getCount());
-                        adjDetl.setModiTime(now);
-                        adjDetl.setModiUser(userId);
-                        adjDetl.setAppeTime(now);
-                        adjDetl.setAppeUser(userId);
-                        adjDetlService.save(adjDetl, userId);
-                    }
-                    iterator.remove();
-                    iterator1.remove();
-                }
-            }
-        }
-
-        // 鍒犻櫎搴撳瓨
-        for (LocDetl locDetl : locDetls) {
-            // todo 鐩樼偣璁板綍
-            if (!locDetlService.updateAnfme(-1.0D, locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch())) {
-                throw new CoolException("鍒犻櫎" + locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "搴忓垪鐮佸簱瀛樻槑缁嗗け璐�");
-            }
-            // 淇濆瓨璋冩暣璁板綍
-            AdjDetl adjDetl = new AdjDetl();
-            adjDetl.setLocNo(locDetl.getLocNo());
-            adjDetl.setMatnr(locDetl.getMatnr());
-            adjDetl.setBatch(locDetl.getBatch());
-            adjDetl.setOriQty(locDetl.getAnfme());
-            adjDetl.setAdjQty(0.0D);
-            adjDetl.setModiTime(now);
-            adjDetl.setModiUser(userId);
-            adjDetl.setAppeTime(now);
-            adjDetl.setAppeUser(userId);
-            adjDetlService.save(adjDetl, userId);
-        }
-
-        // 娣诲姞搴撳瓨
-        for (LocDetlAdjustParam.LocDetlAdjust adjust : list) {
-            if (adjust.getCount() == 0.0D) { continue; }
-            Mat mat = matService.selectByMatnr(adjust.getMatnr());
-            LocDetl locDetl = new LocDetl();
-            locDetl.sync(mat);
-            locDetl.setBatch(adjust.getBatch());
-            locDetl.setLocNo(locMast.getLocNo());
-            locDetl.setAnfme(adjust.getCount()); // 鏁伴噺
-            locDetl.setModiUser(userId); // 鎿嶄綔浜哄憳淇℃伅
-            locDetl.setModiTime(now);
-            locDetl.setAppeUser(userId);
-            locDetl.setAppeTime(now);
-            if (!locDetlService.insert(locDetl)) {
-                throw new CoolException("娣诲姞" + locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "搴忓垪鐮佸簱瀛樻槑缁嗗け璐�");
-            }
-            // 淇濆瓨璋冩暣璁板綍
-            AdjDetl adjDetl = new AdjDetl();
-            adjDetl.setLocNo(locMast.getLocNo());
-            adjDetl.setMatnr(adjust.getMatnr());
-            adjDetl.setBatch(adjust.getBatch());
-            adjDetl.setOriQty(0.0D);
-            adjDetl.setAdjQty(adjust.getCount());
-            adjDetl.setModiTime(now);
-            adjDetl.setModiUser(userId);
-            adjDetl.setAppeTime(now);
-            adjDetl.setAppeUser(userId);
-            adjDetlService.save(adjDetl, userId);
-        }
-        // 淇敼搴撲綅鐘舵��
-        int count = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
-        if (locMast.getLocSts().equals("F")) {
-            if (count == 0) {
-                locMast.setLocSts("D");
-            }
-        }
-        if (locMast.getLocSts().equals("D") || locMast.getLocSts().equals("O")) {
-            if (count > 0) {
-                locMast.setLocSts("F");
-            }
-        }
-        locMast.setModiUser(userId);
-        locMast.setModiTime(new Date());
-        if (!locMastService.updateById(locMast)) {
-            throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�");
-        }
-    }
-
-
-    @Override
-    @Transactional
-    public void cancelWrkMast(String workNo, Long userId) {
-        WrkMast wrkMast = wrkMastService.selectById(workNo);
-        if (Cools.isEmpty(wrkMast)){
-            throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪");
-        }
-        String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣�
-        String locSts = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬�
-        // 鍏ュ簱鍙栨秷锛堜慨鏀圭洰鏍囧簱浣嶏級
-        if (wrkMast.getWrkSts() < 9) {
-            locNo = wrkMast.getLocNo();
-            locSts = "O";
-
-            // 搴撲綅杞Щ
-            if (wrkMast.getIoType() == 11) {
-                // 搴撲綅杞Щ锛氭簮搴撲綅
-                LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
-                if (Cools.isEmpty(locMast)) {
-                    throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛屾簮搴撲綅涓嶅瓨鍦�:"+ wrkMast.getSourceLocNo());
-                }
-                locMast.setLocSts("F");
-                locMast.setModiTime(new Date());
-                locMast.setModiUser(userId);
-                locMastService.updateById(locMast);
-            }
-        // 鍑哄簱鍙栨秷锛堜慨鏀规簮搴撲綅锛�
-        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 19) {
-            locNo = wrkMast.getSourceLocNo();
-            // 鍑哄簱 ===>> F.鍦ㄥ簱
-            if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
-                locSts = "F";
-            // 绌烘澘鍑哄簱 ===>> D.绌烘《/绌烘爤鏉�
-            } else if (wrkMast.getIoType() == 110) {
-                locSts = "D";
-            // 搴撲綅杞Щ ===>> D.绌烘《/绌烘爤鏉�
-            } else if (wrkMast.getIoType() == 11) {
-                locSts = wrkMast.getFullPlt().equalsIgnoreCase("N")?"D":"F";
-                // 搴撲綅杞Щ锛氱洰鏍囧簱浣�
-                LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
-                if (Cools.isEmpty(locMast)) {
-                    throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛岀洰鏍囧簱浣嶄笉瀛樺湪:"+ wrkMast.getSourceLocNo());
-                }
-                locMast.setLocSts("O");
-                locMast.setModiTime(new Date());
-                locMast.setModiUser(userId);
-                locMastService.updateById(locMast);
-            }
-        } else {
-            throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曞彇娑�");
-        }
-        // 璁㈠崟鍏宠仈
-        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
-        for (WrkDetl wrkDetl : wrkDetls) {
-            if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
-                if (!BaseController.isJSON(wrkDetl.getOrderNo())) {
-                    if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
-                        throw new CoolException("璁㈠崟鏁版嵁鍥炴粴澶辫触");
-                    }
-                } else {
-                    // 璁㈠崟鍚堝苟鍑哄簱
-                    List<OrderDto> orderDtoList = JSON.parseArray(wrkDetl.getOrderNo(), OrderDto.class);
-                    for (OrderDto orderDto : orderDtoList) {
-                        if (!orderDetlService.decrease(orderDto.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), orderDto.getAnfme())) {
-                            throw new CoolException("璁㈠崟鏁版嵁鍥炴粴澶辫触");
-                        }
-                    }
-                }
-            }
-        }
-        // 鍙栨秷鎿嶄綔浜哄憳璁板綍
-        wrkMast.setManuType("鎵嬪姩鍙栨秷");
-        wrkMast.setModiUser(userId);
-        wrkMast.setModiTime(new Date());
-        if (!wrkMastService.updateById(wrkMast)) {
-            throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐�");
-        }
-        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-        if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
-            throw new CoolException("淇濆瓨宸ヤ綔鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo());
-        }
-        // 鍒犻櫎宸ヤ綔涓绘。
-        boolean wrkMastRes = wrkMastService.deleteById(wrkMast);
-
-        if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) {
-            // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
-            if (!wrkDetlLogService.save(wrkMast.getWrkNo())) {
-//                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo());
-            }
-            // 鍒犻櫎宸ヤ綔妗f槑缁�
-            boolean wrkDetlRes = wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no", workNo));
-        }
-
-        // 淇敼搴撲綅鐘舵��
-        LocMast locMast = locMastService.selectById(locNo);
-        if (Cools.isEmpty(locMast)) {
-            throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐ワ紝搴撲綅涓嶅瓨鍦�:"+ locNo);
-        }
-        locMast.setLocSts(locSts);
-        locMast.setModiTime(new Date());
-        locMast.setModiUser(userId);
-        boolean locMastRes = locMastService.updateById(locMast);
-        if (!wrkMastRes || !locMastRes) {
-            throw new CoolException("淇濆瓨鏁版嵁澶辫触");
-        }
-    }
-
-    @Override
-    @Transactional
-    public void pickWrkMast(String workNo, Long userId) {
-        WrkMast wrkMast = wrkMastService.selectById(workNo);
-        if (Cools.isEmpty(wrkMast)){
-            throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪");
-        }
-        // 鍏ュ嚭搴撶被鍨嬪垽鏂�
-        if (wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) {
-            throw new CoolException("褰撳墠鍏ュ嚭搴撶被鍨嬫棤娉曡繘琛屾搷浣�");
-        }
-        // 宸ヤ綔鐘舵�佸垽鏂�
-        if (wrkMast.getWrkSts() < 11 || wrkMast.getWrkSts() == 15) {
-            throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曡繘琛屾搷浣�");
-        }
-        // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
-//        if (!wrkDetlLogService.save(wrkMast.getWrkNo())) {
-//            throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。澶辫触");
-//        }
-        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-        if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
-            throw new CoolException("淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
-        }
-        // 鑾峰彇鐩爣绔�
-        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
-                .eq("type_no", wrkMast.getIoType() - 50)
-                .eq("stn_no", wrkMast.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
-                .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
-        StaDesc staDesc = staDescService.selectOne(wrapper);
-        if (Cools.isEmpty(staDesc)) {
-            throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
-        }
-        // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
-        Integer staNo = staDesc.getCrnStn();
-        // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
-        wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
-        wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
-        wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
-        wrkMast.setStaNo(staNo); // 鐩爣绔�
-        wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
-        wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
-        wrkMast.setModiTime(new Date());
-        wrkMast.setModiUser(userId);
-        if (!wrkMastService.updateById(wrkMast)) {
-            throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
-        }
-        // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
-        LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
-        locMast.setLocSts("Q");
-        locMast.setModiTime(new Date());
-        locMast.setModiUser(userId);
-        if (!locMastService.updateById(locMast)) {
-            throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
-        }
-    }
-
-    @Override
-    public StartupDto createWaitPainWrkMastStart(List<AgvWaitPakin> list, Long userId) {
-        return null;
-    }
-
-    @Override
-    @Transactional
-    public String dealPreHaveStart(Integer wrkNo, Long userId) {
-        if (true) {
-            throw new CoolException("鍔熻兘鍋滅敤");
-        }
-        return "";
-    }
-
-    @Override
-    @Transactional
-    public void shuttleTransfer(List<String> locNos) {
-        if (Cools.isEmpty(locNos)) {
-            return;
-        }
-        if (true && !Cools.isEmpty(locNos)) {
-            throw new CoolException("鏆備笉鏀寔绉诲簱浠诲姟");    // todo:luxiaotao 绉诲簱寮�鍏�
-        }
-        LocMast one = locMastService.selectById(locNos.get(0));
-        List<Integer> rows = Utils.getGroupLoc(Integer.parseInt(locNos.get(0).substring(0, 2)));
-        List<LocMast> locMasts = locMastService.queryFreeLocMast(rows, rows.size(), one.getLocType1());
-        if (Cools.isEmpty(locMasts)) {
-            throw new CoolException("搴撲綅绉昏浆澶辫触锛屽凡鏃犵┖搴撲綅");
-        }
-        // 鍏ュ簱鎺掑簭 娣卞簱浣� ==> 娴呭簱浣�
-        switch (locMasts.get(0).getRow1()) {
-            case 4:
-            case 5:
-            case 6:
-            case 7:
-            case 12:
-            case 13:
-            case 14:
-            case 19:
-            case 20:
-            case 21:
-                Collections.reverse(locMasts);
-                break;
-            default:
-                break;
-        }
-        if (locNos.size() > locMasts.size()) {
-            throw new CoolException("鏈嶅姟鍣ㄩ敊璇�");
-        }
-        Date now = new Date();
-        // 鐢熸垚绉诲簱宸ヤ綔妗�
-        Iterator<LocMast> iterator = locMasts.iterator();
-        for (String sourceLocNo : locNos) {
-
-            while (iterator.hasNext()) {
-                LocMast sourceLoc = locMastService.selectById(sourceLocNo);
-                List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLocNo));
-                if (Cools.isEmpty(sourceLoc)){
-                    throw new CoolException("鏈壘鍒板簱浣�");
-                }
-                LocMast loc = iterator.next();
-                if (Cools.isEmpty(loc)){
-                    throw new CoolException("鏈壘鍒板簱浣�");
-                }
-                if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) {
-//                    throw new CoolException("绉昏浆搴撲綅灞炰簬涓嶅悓鍫嗗灈鏈�");   todo:luxiaotao
-                }
-                // 鑾峰彇宸ヤ綔鍙�
-                int workNo = commonService.getWorkNo(WorkNoType.PICK.type);
-                // 淇濆瓨宸ヤ綔妗�
-                WrkMast wrkMast = new WrkMast();
-                wrkMast.setWrkNo(workNo);
-                wrkMast.setIoTime(now);
-                wrkMast.setWrkSts(21L); // 宸ヤ綔鐘舵�侊細21.鐢熸垚鍑哄簱浠诲姟
-                wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
-                wrkMast.setIoPri(15D);
-                wrkMast.setOutMost(locMastService.isOutMost(loc.getLocNo(), false)?1:0);;
-                wrkMast.setCrnNo(sourceLoc.getCrnNo());
-                wrkMast.setSourceLocNo(sourceLocNo); // 婧愬簱浣�
-                wrkMast.setLocNo(loc.getLocNo()); // 鐩爣搴撲綅
-                wrkMast.setFullPlt(Cools.isEmpty(locDetls)?"N":"Y"); // 婊℃澘锛歒
-                wrkMast.setPicking("N"); // 鎷f枡
-                wrkMast.setExitMk("N"); // 閫�鍑�
-                wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D")?"Y":"N"); // 绌烘澘
-                wrkMast.setBarcode(sourceLoc.getBarcode()); // 鎵樼洏鐮�
-                wrkMast.setLinkMis("N");
-                wrkMast.setAppeUser(9527L);
-                wrkMast.setAppeTime(now);
-                wrkMast.setModiUser(9527L);
-                wrkMast.setModiTime(now);
-                boolean res = wrkMastService.insert(wrkMast);
-                if (!res) {
-                    throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
-                }
-                // 宸ヤ綔妗f槑缁嗕繚瀛�
-                for (LocDetl locDetl : locDetls) {
-                    WrkDetl wrkDetl = new WrkDetl();
-                    wrkDetl.sync(locDetl);
-                    wrkDetl.setWrkNo(workNo);
-                    wrkDetl.setIoTime(now);
-                    wrkDetl.setAnfme(locDetl.getAnfme());
-                    wrkDetl.setAppeTime(now);
-                    wrkDetl.setAppeUser(9527L);
-                    wrkDetl.setModiTime(now);
-                    wrkDetl.setModiUser(9527L);
-                    if (!wrkDetlService.insert(wrkDetl)) {
-                        throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
-                    }
-                }
-                // 淇敼婧愬簱浣嶇姸鎬�
-                if (sourceLoc.getLocSts().equals("D") || sourceLoc.getLocSts().equals("F")) {
-                    sourceLoc.setLocSts("R"); // R.鍑哄簱棰勭害
-                    sourceLoc.setModiUser(9527L);
-                    sourceLoc.setModiTime(now);
-                    if (!locMastService.updateById(sourceLoc)){
-                        throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
-                    }
-                } else {
-                    throw new CoolException(sourceLoc.getLocNo() + "婧愬簱浣嶅嚭搴撳け璐ワ紝鐘舵�侊細"+sourceLoc.getLocSts$());
-                }
-                // 淇敼鐩爣搴撲綅鐘舵��
-                if (loc.getLocSts().equals("O")) {
-                    loc.setLocSts("S"); // S.鍏ュ簱棰勭害
-                    loc.setModiTime(now);
-                    loc.setModiUser(9527L);
-                    if (!locMastService.updateById(loc)) {
-                        throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
-                    }
-                } else {
-                    throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細"+loc.getLocSts$());
-                }
-
-                iterator.remove();
-                break;
-            }
-        }
-    }
-
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWrkDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWrkDetlServiceImpl.java
new file mode 100644
index 0000000..3e8fd7e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWrkDetlServiceImpl.java
@@ -0,0 +1,95 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.core.common.Cools;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.AgvWrkDetl;
+import com.zy.asrs.entity.Mat;
+import com.zy.asrs.entity.WrkDetl;
+import com.zy.asrs.mapper.AgvWrkDetlMapper;
+import com.zy.asrs.service.AgvWrkDetlService;
+import com.zy.asrs.service.MatService;
+import com.zy.common.model.DetlDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class AgvWrkDetlServiceImpl extends ServiceImpl<AgvWrkDetlMapper, AgvWrkDetl> implements AgvWrkDetlService {
+
+    @Autowired
+    private MatService matService;
+
+    @Override
+    @Transactional
+    public void createWorkDetail(Integer workNo, List<DetlDto> detlDtos, String barcode, Long userId) {
+        if (detlDtos.isEmpty()){
+            return;
+        }
+        Date now = new Date();
+        for (DetlDto dto : detlDtos) {
+            Mat mat = matService.selectByMatnr(dto.getMatnr());
+            if (Cools.isEmpty(mat)){
+                throw new CoolException(dto.getMatnr() + "鍟嗗搧缁存姢澶辫触");
+            }
+            // 淇濇寔宸ヤ綔妗f槑缁�
+            AgvWrkDetl wrkDetl = new AgvWrkDetl();
+            wrkDetl.sync(mat);
+            wrkDetl.setWrkNo(workNo);
+            wrkDetl.setIoTime(now);
+            wrkDetl.setBatch(dto.getBatch());
+            wrkDetl.setAnfme(dto.getAnfme()); // 鏁伴噺
+            wrkDetl.setZpallet(barcode); // 鎵樼洏鏉$爜
+            wrkDetl.setAppeUser(userId);
+            wrkDetl.setAppeTime(now);
+            wrkDetl.setModiUser(userId);
+            wrkDetl.setModiTime(now);
+            if (!this.insert(wrkDetl)) {
+                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+            }
+        }
+    }
+
+    @Override
+    public List<WrkDetl> selectByWrkNo(Integer wrkNo) {
+        return this.baseMapper.selectByWrkNo(wrkNo);
+    }
+
+    @Override
+    public boolean updateAnfme(Double anfme, Integer wrkNo, String matnr, String batch) {
+        if (anfme <= 0) {
+            return this.baseMapper.deleteItem(wrkNo, matnr, batch) > 0;
+        } else {
+            return baseMapper.updateAnfme(anfme, wrkNo, matnr, batch) > 0;
+        }
+    }
+
+    @Override
+    public List<WrkDetl> selectAndLogByOrderNo(String orderNo) {
+        return this.baseMapper.selectAndLogByOrderNo(orderNo);
+    }
+
+    @Override
+    public List<WrkDetl> selectAndLogByOrderNoGroupByMatnrOfSum(String orderNo) {
+        return this.baseMapper.selectAndLogByOrderNoGroupByMatnrOfSum(orderNo);
+    }
+
+    @Override
+    public boolean updateInspect(Integer wrkNo, String matnr, String batch) {
+        return this.baseMapper.updateInspect(wrkNo, matnr, batch) > 0;
+    }
+
+    @Override
+    public List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr) {
+        return this.baseMapper.selectPakoutQuery(staNo, matnr);
+    }
+
+    @Override
+    public boolean updateOrderNo(String orderNo, Integer wrkNo, String matnr, String batch) {
+        return baseMapper.updateOrderNo(orderNo, wrkNo, matnr, batch) > 0;
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWrkLastnoServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWrkLastnoServiceImpl.java
new file mode 100644
index 0000000..eecc8ac
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWrkLastnoServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.entity.AgvWrkLastno;
+import com.zy.asrs.mapper.AgvWrkLastnoMapper;
+import com.zy.asrs.service.AgvWrkLastnoService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AgvWrkLastnoServiceImpl extends ServiceImpl<AgvWrkLastnoMapper, AgvWrkLastno> implements AgvWrkLastnoService {
+
+}
diff --git a/src/main/java/com/zy/common/service/AgvCommonService.java b/src/main/java/com/zy/common/service/AgvCommonService.java
new file mode 100644
index 0000000..9049ce8
--- /dev/null
+++ b/src/main/java/com/zy/common/service/AgvCommonService.java
@@ -0,0 +1,157 @@
+package com.zy.common.service;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.service.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 璐ф灦鏍稿績鍔熻兘
+ * Created by vincent on 2020/6/11
+ */
+@Slf4j
+@Service
+public class AgvCommonService {
+
+    @Autowired
+    private AgvWrkMastService agvWrkMastService;
+    @Autowired
+    private AgvWrkLastnoService agvWrkLastnoService;
+    @Autowired
+    private AgvLocRuleService agvLocRuleService;
+    @Autowired
+    private AgvLocMastService agvLocMastService;
+
+    public int getWorkNo(Integer wrkMk) {
+        AgvWrkLastno wrkLastno = agvWrkLastnoService.selectById(wrkMk);
+        if (Cools.isEmpty(wrkLastno)) {
+            throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
+        }
+        int workNo = 0;
+        // 鍏ュ嚭搴撶被鍨�
+        workNo = wrkLastno.getWrkNo();
+        int sNo = wrkLastno.getSNo();
+        int eNo = wrkLastno.getENo();
+
+        workNo = workNo>=eNo ? sNo : workNo+1;
+
+        while (true) {
+            AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo);
+            if (null != wrkMast) {
+                workNo = workNo>=eNo ? sNo : workNo+1;
+            } else {
+                break;
+            }
+        }
+        if (workNo > 0){
+            wrkLastno.setWrkNo(workNo);
+            agvWrkLastnoService.updateById(wrkLastno);
+        }
+        if (workNo == 0) {
+            throw new CoolException("鐢熸垚宸ヤ綔鍙峰け璐ワ紝璇疯仈绯荤鐞嗗憳");
+        } else {
+            if (agvWrkMastService.selectById(workNo)!=null) {
+                throw new CoolException("鐢熸垚宸ヤ綔鍙�" + workNo + "鍦ㄥ伐浣滄。涓凡瀛樺湪");
+            }
+        }
+        return workNo;
+    }
+
+    /**
+     * 妫�绱㈠簱浣嶅彿
+     * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿
+     */
+    public AgvLocMast getLocNo(List<AgvWaitPakin> agvWaitPakinList, int floor) {
+        // 鐩爣搴撲綅
+        AgvLocMast locMast = null;
+
+        //搴撲綅瑙勫垯
+        locMast = getLocByLocRule(agvWaitPakinList.get(0),floor);
+        if(!Cools.isEmpty(locMast)){
+            return locMast;
+        }
+
+        // 闈犺繎鎽嗘斁瑙勫垯 --- 鐩稿悓璁㈠崟鍙�, 鍚屽ぉ鍚岃鏍肩墿鏂�
+        locMast = getLocByProximityRule();
+        if (locMast != null) {
+            //鎵惧埌搴撲綅锛岃繑鍥瀌to
+            //return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
+        }
+//
+//        // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭
+//        locMast = getLocNoStep4(staDescId, locTypeDto);
+//        if (locMast != null) {
+//            //鎵惧埌搴撲綅锛岃繑鍥瀌to
+//            return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
+//        }
+//
+//        // 濡傛灉娌℃湁鐩歌繎鐗╂枡锛屽垯鎸夎鍒欒疆璇㈣揣鏋�
+        // 寮�濮嬫煡鎵惧簱浣� ==============================>>
+        locMast = getLocNoRule(floor);
+        if (locMast != null) {
+            return locMast;
+        }
+
+        //鎵句笉鍒板簱浣嶏紝鎶涘嚭寮傚父
+        throw new CoolException("璇ユゼ灞傛病鏈夌┖搴撲綅");
+    }
+
+    /*
+    搴撲綅瑙勫垯鏌ユ壘
+     */
+    private AgvLocMast getLocByLocRule(AgvWaitPakin agvWaitPakin, int floor) {
+        List<AgvLocRule> agvLocRules = null;
+        agvLocRules = agvLocRuleService.selectList(new EntityWrapper<AgvLocRule>()
+                .eq("matnr", agvWaitPakin.getMatnr())
+                .eq("batch", agvWaitPakin.getModel())
+                .eq("floor", floor));
+        if(Cools.isEmpty(agvLocRules)){
+            agvLocRules = agvLocRuleService.selectList(new EntityWrapper<AgvLocRule>()
+                    .eq("matnr", agvWaitPakin.getMatnr())
+                    .eq("floor", floor));
+        }
+        if(Cools.isEmpty(agvLocRules)){
+            return null;
+        }
+
+        for (AgvLocRule agvLocRule : agvLocRules) {
+            EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
+            wrapper.between("row1",agvLocRule.getRowBeg(),agvLocRule.getRowEnd())
+                    .between("bay1",agvLocRule.getBayBeg(),agvLocRule.getBayEnd())
+                    .between("lev1",agvLocRule.getLevBeg(),agvLocRule.getLevEnd())
+                    .eq("floor",floor)
+                    .eq("loc_sts","O");
+            AgvLocMast agvLocMast = agvLocMastService.selectOne(wrapper);
+            if(!Cools.isEmpty(agvLocMast)){
+                return agvLocMast;
+            }
+        }
+
+        return null;
+    }
+
+    /*
+    闈犺繎鎽嗘斁瑙勫垯
+     */
+
+    private AgvLocMast getLocByProximityRule(){
+        //to do
+        return null;
+    }
+
+    //闅忔満鍙栦竴涓揣浣�
+    private AgvLocMast getLocNoRule(int floor){
+        return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>()
+                .eq("floor",floor)
+                .eq("loc_sts","O")
+                .eq(false,"loc_type2",1));
+    }
+
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index f096d9e..ca7f762 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -10,7 +10,7 @@
     enabled: false
   datasource:
     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
-    url: jdbc:sqlserver://192.168.4.13:1433;databasename=tzskasrs
+    url: jdbc:sqlserver://192.168.4.15:1433;databasename=tzskasrs
     username: sa
     password: sa@123
   mvc:
diff --git a/src/main/resources/mapper/AgvLocMastMapper.xml b/src/main/resources/mapper/AgvLocMastMapper.xml
new file mode 100644
index 0000000..e14eb02
--- /dev/null
+++ b/src/main/resources/mapper/AgvLocMastMapper.xml
@@ -0,0 +1,208 @@
+<?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.AgvLocMastMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.AgvLocMast">
+        <id column="loc_no" property="locNo" />
+        <result column="whs_type" property="whsType" />
+        <result column="plt_type" property="pltType" />
+        <result column="ctn_type" property="ctnType" />
+        <result column="loc_sts" property="locSts" />
+        <result column="sheet_no" property="sheetNo" />
+        <result column="crn_no" property="crnNo" />
+        <result column="row1" property="row1" />
+        <result column="bay1" property="bay1" />
+        <result column="lev1" property="lev1" />
+        <result column="floor" property="floor" />
+        <result column="full_plt" property="fullPlt" />
+        <result column="loc_type" property="locType" />
+        <result column="loc_type1" property="locType1" />
+        <result column="loc_type2" property="locType2" />
+        <result column="loc_type3" property="locType3" />
+        <result column="out_enable" property="outEnable" />
+        <result column="io_time" property="ioTime" />
+        <result column="first_time" property="firstTime" />
+        <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="error_time" property="errorTime" />
+        <result column="error_memo" property="errorMemo" />
+        <result column="ctn_kind" property="ctnKind" />
+        <result column="sc_weight" property="scWeight" />
+        <result column="inv_wh" property="invWh" />
+        <result column="mk" property="mk" />
+        <result column="barcode" property="barcode" />
+        <result column="Pdc_type" property="PdcType" />
+        <result column="ctn_no" property="ctnNo" />
+        <result column="qr_code_value" property="qrCodeValue" />
+        <result column="status" property="status" />
+
+    </resultMap>
+
+    <select id="queryFreeLocMast" resultMap="BaseResultMap">
+        select
+        *
+        from asr_loc_mast
+        where 1=1
+        and row1 in
+        <foreach item="item" collection="rows" index="index"  separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        and ctn_no =
+        (
+            select
+            top 1
+            ctn_no
+            from (
+                select
+                ctn_no,
+                count(1) as count
+                from asr_loc_mast
+                where 1=1
+                and row1 in
+                <foreach item="item" collection="rows" index="index"  separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+                and loc_no not in ('0100101', '0200101', '0300101', '0400101')
+                and loc_sts = 'O'
+                group by ctn_no
+            ) a
+            where count = #{rowsLen}
+            order by right(ctn_no, 2) + 0 asc, left(ctn_no, 3) + 0 asc
+        )
+    </select>
+    <select id="queryFreeLocMast" resultMap="BaseResultMap">
+        select
+        *
+        from asr_loc_mast
+        where 1=1
+        and row1 in
+        <foreach item="item" collection="rows" index="index"  separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        and ctn_no =
+        (
+        select
+        top 1
+        ctn_no
+        from (
+        select
+        ctn_no,
+        count(1) as count
+        from asr_loc_mast
+        where 1=1
+        and row1 in
+        <foreach item="item" collection="rows" index="index"  separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        and loc_no not in ('0100101', '0200101', '0300101', '0400101')
+        and (bay1 = 3 or bay1 = 11 or (bay1 = 7 and row1 = 10))
+        and loc_sts = 'O'
+        group by ctn_no
+        ) a
+        where count = #{rowsLen}
+        order by right(ctn_no, 2) + 0 asc, left(ctn_no, 3) + 0 asc
+        )
+    </select>
+
+    <select id="queryFreeLocMast0" resultMap="BaseResultMap">
+        select top 1 *
+        from asr_loc_mast
+        where row1=#{row}
+        and loc_sts='O'
+        order by loc_sts desc ,lev1 asc,bay1 asc
+    </select>
+
+    <select id="selectAvailableNearLocDesc" resultMap="BaseResultMap">
+        SELECT TOP 1 * FROM asr_loc_mast WHERE loc_sts IN ('O')
+        <foreach collection="groupLoc" item="loc" index="index" open="AND loc_no IN (" close=")" separator=",">
+            #{loc}
+        </foreach>
+        ORDER BY
+        row1 DESC
+    </select>
+    <select id="selectAvailableNearLocAsc" resultMap="BaseResultMap">
+        SELECT TOP 1 * FROM asr_loc_mast WHERE loc_sts IN ('O') AND loc_no IN
+        <foreach collection="groupOuterLoc" item="loc" index="index" open="(" close=")" separator=",">
+            #{loc}
+        </foreach>
+        ORDER BY
+        row1 ASC
+    </select>
+
+    <select id="selectAllPeakLoc" resultMap="BaseResultMap">
+        SELECT a.*
+        from(
+            SELECT * FROM asr_loc_mast WHERE loc_sts = 'O' AND row1 = 1
+            UNION ALL
+            SELECT * FROM asr_loc_mast WHERE loc_sts = 'O' AND row1 = 8 and bay1 > 7
+            UNION ALL
+            SELECT * FROM asr_loc_mast WHERE loc_sts = 'O' AND row1 = 12
+            UNION ALL
+            SELECT * FROM asr_loc_mast WHERE loc_sts = 'O' AND row1 = 23
+            UNION ALL
+            SELECT * FROM asr_loc_mast WHERE loc_sts = 'O' AND row1 = 18 AND (bay1 = 1 or bay1 = 3 )
+        ) a ORDER BY a.lev1,a.bay1 ASC
+    </select>
+
+    <select id="selectAllLocNotEmpty" resultMap="BaseResultMap">
+        SELECT * FROM asr_loc_mast WHERE loc_sts != 'O' AND loc_no in
+        <foreach collection="groupLoc" item="loc" index="index" open="(" close=")" separator=",">
+            #{loc}
+        </foreach>
+    </select>
+
+    <select id="selectLocByLev" resultMap="BaseResultMap">
+        SELECT * FROM asr_loc_mast WHERE lev1 = #{lev}
+    </select>
+
+    <select id="queryFreeLocMast2" resultMap="BaseResultMap">
+        select *
+        from agv_loc_mast
+        where 1=1
+        and loc_sts='O'
+        <if test="locType1 != null">
+            and loc_type1 = #{locType1}
+        </if>
+        <if test="rowBeg != null">
+            and row1 >= #{rowBeg}
+        </if>
+        <if test="rowEnd != null">
+            and row1 &lt;= #{rowEnd}
+        </if>
+        <if test="bayBeg != null">
+            and bay1 >= #{bayBeg}
+        </if>
+        <if test="bayEnd != null">
+            and bay1 &lt;= #{bayEnd}
+        </if>
+        <if test="levBeg != null">
+            and lev1 >= #{levBeg}
+        </if>
+        <if test="levEnd != null">
+            and lev1 &lt;= #{levEnd}
+        </if>
+        and loc_no not in ('0100101')
+        order by loc_sts desc ,lev1 asc,bay1 asc
+    </select>
+
+    <select id="selectEmptyByLocNos" resultMap="BaseResultMap">
+        SELECT * FROM asr_loc_mast
+        WHERE loc_sts IN ('O')
+        AND loc_no IN
+        <foreach collection="locNos" item="loc" index="index" open="(" close=")" separator=",">
+            #{loc}
+        </foreach>
+        ORDER BY
+        row1 ASC
+    </select>
+
+    <select id="updateLocType2ByRBL" resultMap="BaseResultMap">
+        update asr_loc_mast set loc_type2 = #{locType2}
+        where (row1 &gt;= #{startRow} and row1 &lt;= #{endRow})
+        and (bay1 &gt;= #{startBay} and bay1 &lt;= #{endBay})
+        and (lev1 &gt;= #{startLev} and lev1 &lt;= #{endLev})
+    </select>
+</mapper>
diff --git a/src/main/webapp/static/js/agvBasDevp/basDevp.js b/src/main/webapp/static/js/agvBasDevp/basDevp.js
index f1d5413..8bbafbf 100644
--- a/src/main/webapp/static/js/agvBasDevp/basDevp.js
+++ b/src/main/webapp/static/js/agvBasDevp/basDevp.js
@@ -10,7 +10,7 @@
     tableIns = table.render({
         elem: '#agvBasDevp',
         headers: {token: localStorage.getItem('token')},
-        url: baseUrl+'/agvBasDevp/list/auth',
+        url: baseUrl+'/agv/basDevp/list/auth',
         page: true,
         limit: 16,
         limits: [16, 30, 50, 100, 200, 500],
@@ -21,7 +21,7 @@
             {type: 'checkbox', fixed: 'left'}
 //            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
             ,{field: 'stationCode', align: 'center',sort:true,title: '宸ヤ綔绔欑紪鍙�'}
-            ,{field: 'devNo', align: 'center',sort:true,title: '宸ヤ綔浣嶇紪鍙�'}
+            ,{field: 'devNo', align: 'center',sort:true,title: '宸ヤ綔浣嶇紪鍙�',width:150}
             // ,{field: 'decDesc', align: 'center',title: '璁惧鎻忚堪'}
             // ,{field: 'devMk', align: 'center',title: '澶囨敞'}
             ,{field: 'inEnable', align: 'center',title: '鍙叆', templet:function(row){
@@ -81,7 +81,7 @@
             ,{field: 'floor', align: 'center',title: '妤�'}
             //,{field: 'locType1$', align: 'center',title: '楂樹綆'}
             ,{field: 'barcode', align: 'center',title: '鏉″舰鐮�'}
-            ,{field: 'inQty', align: 'center',title: '鍏ュ簱鏆傚瓨'}
+            // ,{field: 'inQty', align: 'center',title: '鍏ュ簱鏆傚瓨'}
             // ,{field: 'row1', align: 'center',title: ''}
             // ,{field: 'ioTime$', align: 'center',title: ''}
             // ,{field: 'area', align: 'center',title: ''}
@@ -97,7 +97,7 @@
             //,{field: 'grossWt', align: 'center',title: '閲嶉噺'}
             // ,{field: 'cartPos', align: 'center',title: ''}
 
-            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:200}
         ]],
         request: {
             pageName: 'curr',
@@ -139,7 +139,7 @@
             return;
         }
         $.ajax({
-            url: baseUrl+"/basDevp/update/auth",
+            url: baseUrl+"/agv/basDevp/update/auth",
             headers: {'token': localStorage.getItem('token')},
             data: top.reObject({
                 devNo: obj.data.devNo,
@@ -217,7 +217,7 @@
                 } else {
                     layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
                         $.ajax({
-                            url: baseUrl+"/basDevp/delete/auth",
+                            url: baseUrl+"/agv/basDevp/delete/auth",
                             headers: {'token': localStorage.getItem('token')},
                             data: {param: JSON.stringify(data)},
                             method: 'POST',
@@ -235,6 +235,61 @@
                         })
                     });
                 }
+                break;
+            case "createWrk":
+                var data = checkStatus.data;
+                if (data.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍏ュ簱'+(data.length===1?'姝�':data.length)+'涓珯鐐硅揣鐗╁悧锛�', function(){
+                        $.ajax({
+                            url: baseUrl+"/agv/create/waitPain/wrkMast/start",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {param: JSON.stringify(data)},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    })
+                }
+
+                break;
+            case "init":
+                layer.prompt({title: '璇疯緭鍏ュ彛浠わ紝骞堕噸缃簱浣�', formType: 1,   shadeClose: true}, function(pass, idx){
+                    http.get(baseUrl+"/locMast/init/pwd", {pwd: pass}, function (res) {
+                        if (res.data) {
+                            $.ajax({
+                                url: baseUrl+"/agv/basDevp/init/auth",
+                                headers: {'token': localStorage.getItem('token')},
+                                data: {param: JSON.stringify(data)},
+                                method: 'POST',
+                                traditional:true,
+                                success: function (res) {
+                                    if (res.code === 200){
+                                        layer.closeAll();
+                                        tableReload(false);
+                                    } else if (res.code === 403){
+                                        top.location.href = baseUrl+"/";
+                                    } else {
+                                        layer.msg(res.msg)
+                                    }
+                                }
+                            })
+                        } else {
+                            layer.msg("鍙d护閿欒");
+                        }
+                        layer.close(idx);
+                    })
+                });
                 break;
             case 'exportData':
                 layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
@@ -255,7 +310,7 @@
                         'fields': fields
                     };
                     $.ajax({
-                        url: baseUrl+"/basDevp/export/auth",
+                        url: baseUrl+"/agv/basDevp/export/auth",
                         headers: {'token': localStorage.getItem('token')},
                         data: JSON.stringify(param),
                         dataType:'json',
@@ -319,6 +374,43 @@
                         layero.find('iframe')[0].contentWindow.layui.form.render('select');
                         layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
                     }
+                });
+                break;
+            case 'detl':
+                // locDetl(data.locNo);
+                if (data.locSts.trim() === ''
+                    || data.locSts.trim() === 'S'
+                    || data.locSts.trim() === 'D'
+                    || data.locSts.trim() === 'O')  {
+                    layer.msg("姝ょ珯鐐圭殑鐘舵�佷笉瀛樺湪鐗╂枡");
+                    return;
+                }
+                locDetlToLayer(data.barcode);
+                break;
+            case 'unbind':
+                // locDetl(data.locNo);
+                if (data.barcode === null || data.barcode.trim() === '')  {
+                    layer.msg("姝ょ珯鐐规殏鏈粦瀹氫换浣曟潯鐮�");
+                    return;
+                }
+                layer.confirm('纭畾瑙g粦'+(data.devNo)+'绔欑偣鐨勬墭鐩樼爜锛�', function(){
+                    $.ajax({
+                        url: baseUrl+"/agv/basDevp/unbind/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: {param: JSON.stringify(data)},
+                        method: 'POST',
+                        traditional:true,
+                        success: function (res) {
+                            if (res.code === 200){
+                                layer.closeAll();
+                                tableReload(false);
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    })
                 });
                 break;
             case 'modiUser':
@@ -458,7 +550,7 @@
         };
         console.log(data);
         $.ajax({
-            url: baseUrl+"/agvBasDevp/"+name+"/auth",
+            url: baseUrl+"/agv/basDevp/"+name+"/auth",
             headers: {'token': localStorage.getItem('token')},
             data: top.reObject(data),
             method: 'POST',
@@ -479,15 +571,20 @@
         })
     }
 
-    // 澶嶉�夋浜嬩欢
-    form.on('checkbox(detailCheckbox)', function (data) {
-        var el = data.elem;
-        if (el.checked) {
-            $(el).val('Y');
-        } else {
-            $(el).val('N');
-        }
-    });
+    // iframe鐗╂枡璇︽儏
+    function locDetlToLayer(val) {
+        barcode = val;
+        layer.open({
+            type: 2,
+            title: '绔欑偣鏄庣粏',
+            maxmin: true,
+            area: [top.detailWidth, top.detailHeight],
+            shadeClose: true,
+            content: '../agvBasDevp/basDevpWaitPakinDetail.html',
+            success: function(layero, index){
+            }
+        });
+    }
 
     // 鎼滅储鏍忔悳绱簨浠�
     form.on('submit(search)', function (data) {
diff --git a/src/main/webapp/static/js/agvLocMast/locMast.js b/src/main/webapp/static/js/agvLocMast/locMast.js
index 9cd58de..fc9c00b 100644
--- a/src/main/webapp/static/js/agvLocMast/locMast.js
+++ b/src/main/webapp/static/js/agvLocMast/locMast.js
@@ -10,7 +10,7 @@
     tableIns = table.render({
         elem: '#agvLocMast',
         headers: {token: localStorage.getItem('token')},
-        url: baseUrl+'/agvLocMast/list/auth',
+        url: baseUrl+'/agv/locMast/list/auth',
         page: true,
         limit: 16,
         limits: [16, 30, 50, 100, 200, 500],
@@ -151,7 +151,7 @@
                 } else {
                     layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
                         $.ajax({
-                            url: baseUrl+"/agvLocMast/delete/auth",
+                            url: baseUrl+"/agv/locMast/delete/auth",
                             headers: {'token': localStorage.getItem('token')},
                             data: {param: JSON.stringify(data)},
                             method: 'POST',
@@ -189,7 +189,7 @@
                         'fields': fields
                     };
                     $.ajax({
-                        url: baseUrl+"/agvLocMast/export/auth",
+                        url: baseUrl+"/agv/locMast/export/auth",
                         headers: {'token': localStorage.getItem('token')},
                         data: JSON.stringify(param),
                         dataType:'json',
@@ -212,17 +212,35 @@
                 layer.prompt({title: '璇疯緭鍏ュ彛浠わ紝骞堕噸缃簱浣�', formType: 1,   shadeClose: true}, function(pass, idx){
                     http.get(baseUrl+"/locMast/init/pwd", {pwd: pass}, function (res) {
                         if (res.data) {
-                            layer.open({
-                                type: 1,
-                                title: '鍒濆鍖栧簱浣�',
-                                area: ["400px"],
-                                maxmin: true,
-                                shadeClose: true,
-                                content: $("#resetLocDiv"),
-                                success: function (layero, index) {
-
+                            // layer.open({
+                            //     type: 1,
+                            //     title: '鍒濆鍖栧簱浣�',
+                            //     area: ["400px"],
+                            //     maxmin: true,
+                            //     shadeClose: true,
+                            //     content: $("#resetLocDiv"),
+                            //     success: function (layero, index) {
+                            //
+                            //     }
+                            // })
+                            $.ajax({
+                                url: baseUrl+"/agv/locMast/init/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)
+                                    }
                                 }
-                            })
+                            });
                         } else {
                             layer.msg("鍙d护閿欒");
                         }
@@ -393,7 +411,7 @@
     // 鍒濆鍖栦繚瀛�
     form.on('submit(initDo)', function (data) {
         $.ajax({
-            url: baseUrl+"/locMast/init/auth",
+            url: baseUrl+"/agv/locMast/init/auth",
             headers: {'token': localStorage.getItem('token')},
             data: data.field,
             method: 'POST',
@@ -464,7 +482,7 @@
 
         };
         $.ajax({
-            url: baseUrl+"/avgLocMast/"+name+"/auth",
+            url: baseUrl+"/agv/locMast/"+name+"/auth",
             headers: {'token': localStorage.getItem('token')},
             data: top.reObject(data),
             method: 'POST',
diff --git a/src/main/webapp/static/js/agvLocRule/locRule.js b/src/main/webapp/static/js/agvLocRule/locRule.js
new file mode 100644
index 0000000..25d6898
--- /dev/null
+++ b/src/main/webapp/static/js/agvLocRule/locRule.js
@@ -0,0 +1,277 @@
+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: '#locRule',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/agv/locRule/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: 'ID'}
+            ,{field: 'matnr', align: 'center',title: '鍟嗗搧缂栧彿'}
+            ,{field: 'specs', align: 'center',title: '瑙勬牸', hide: true}
+            ,{field: 'model', align: 'center',title: '鍨嬪彿', hide: true}
+            ,{field: 'cstmr', align: 'center',title: '瀹㈡埛', hide: true}
+            ,{field: 'batch', align: 'center',title: '鎵瑰彿'}
+            ,{field: 'other', align: 'center',title: '鍏朵粬', hide: true}
+            ,{field: 'rowBeg', align: 'center',title: '寮�濮嬫帓'}
+            ,{field: 'rowEnd', align: 'center',title: '缁撴潫鎺�'}
+            ,{field: 'bayBeg', align: 'center',title: '寮�濮嬪垪'}
+            ,{field: 'bayEnd', align: 'center',title: '缁撴潫鍒�'}
+            ,{field: 'levBeg', align: 'center',title: '寮�濮嬪眰'}
+            ,{field: 'levEnd', align: 'center',title: '缁撴潫灞�'}
+            ,{field: 'limit', align: 'center',title: '涓婇檺', hide: true}
+            ,{field: 'status$', align: 'center',title: '鐘舵��', hide: true}
+            ,{field: 'createBy$', align: 'center',title: '娣诲姞浜哄憳', hide: true}
+            ,{field: 'createTime$', align: 'center',title: '娣诲姞鏃堕棿', hide: true}
+            ,{field: 'updateBy$', align: 'center',title: '淇敼浜哄憳', hide: true}
+            ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿', hide: true}
+            ,{field: 'memo', align: 'center',title: '澶囨敞', hide: true}
+            ,{field: 'floor', align: 'center',title: '妤煎眰'}
+            //,{field: 'mixed$', align: 'center',title: '娣疯浇'}
+            // ,{field: 'keepGo$', 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(locRule)', 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(locRule)', 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 = {
+                        'locRule': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/agv/locRule/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(locRule)', 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: '1000px',
+            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+"/agv/locRule/"+(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+"/agv/locRule/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: '#createTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['createTime\\$']:null
+            });
+            layDate.render({
+                elem: '#updateTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['updateTime\\$']: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/agvStoMan/stoQue.js b/src/main/webapp/static/js/agvStoMan/stoQue.js
index 25dd1e5..aa285c38 100644
--- a/src/main/webapp/static/js/agvStoMan/stoQue.js
+++ b/src/main/webapp/static/js/agvStoMan/stoQue.js
@@ -17,7 +17,7 @@
     tableIns = table.render({
         elem: '#agvStoQue',
         headers: {token: localStorage.getItem('token')},
-        url: baseUrl+'/agvLocMast/list/auth',
+        url: baseUrl+'/agv/locMast/list/auth',
         page: true,
         limit: 20,
         limits: [20, 30, 50, 100, 200, 500],
@@ -193,7 +193,7 @@
         tableIns1 = table.render({
             elem: '#locDetlByMap',
             headers: {token: localStorage.getItem('token')},
-            url: baseUrl+'/agvLocDetl/list/auth',
+            url: baseUrl+'/agv/locDetl/list/auth',
             page: true,
             limit: 5,
             skin: 'line',
diff --git a/src/main/webapp/static/js/agvWaitPakin/waitPakin.js b/src/main/webapp/static/js/agvWaitPakin/waitPakin.js
index 2d55dbc..d5646ab 100644
--- a/src/main/webapp/static/js/agvWaitPakin/waitPakin.js
+++ b/src/main/webapp/static/js/agvWaitPakin/waitPakin.js
@@ -107,7 +107,7 @@
                 } else {
                     layer.confirm('纭畾鐢熸垚宸ヤ綔妗d换鍔″悧', function(){
                         $.ajax({
-                            url: baseUrl+"/create/waitPain/wrkMast/start",
+                            url: baseUrl+"/agv/create/waitPain/wrkMast/start",
                             headers: {'token': localStorage.getItem('token')},
                             data: JSON.stringify(checkStatus.data),
                             contentType:'application/json;charset=UTF-8',
diff --git a/src/main/webapp/static/js/agvWrkDetl/wrkDetl.js b/src/main/webapp/static/js/agvWrkDetl/wrkDetl.js
new file mode 100644
index 0000000..f26ec85
--- /dev/null
+++ b/src/main/webapp/static/js/agvWrkDetl/wrkDetl.js
@@ -0,0 +1,486 @@
+var pageCurr;
+function getCol() {
+    var cols = [
+        {field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�'}
+        ,{field: 'ioTime$', align: 'center',title: '宸ヤ綔鏃堕棿', width: 160}
+    ];
+    cols.push.apply(cols, detlCols);
+    cols.push({field: 'modiUser$', align: 'center',title: '淇敼浜哄憳', hide:true}
+        ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿', hide:true})
+    return cols;
+}
+
+layui.use(['table','laydate', 'form'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#agvWrkDetl',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/agv/wrkDetl/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [getCol()],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+            form.on('checkbox(tableCheckbox)', function (data) {
+                var _index = $(data.elem).attr('table-index')||0;
+                if(data.elem.checked){
+                    res.data[_index][data.value] = 'Y';
+                }else{
+                    res.data[_index][data.value] = 'N';
+                }
+            });
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(locMast)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {
+                curr: 1
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(wrkDetl)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            case 'addData':
+                layer.open({
+                    type: 2,
+                    title: '鏂板',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'wrkDetl_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-edit', index).hide();
+                    	clearFormVal(layer.getChildFrame('#detail', index));
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                    }
+                });
+                break;
+            case 'refreshData':
+                tableIns.reload({
+                    page: {
+                        curr: pageCurr
+                    }
+                });
+                limit();
+                break;
+            case 'deleteData':
+                var data = checkStatus.data;
+                if (data.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/agv/wrkDetl/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {param: JSON.stringify(data)},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'wrkDetl': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/agv/wrkDetl/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(wrkDetl)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: true,
+                    content: 'wrkDetl_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, true);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                        layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                    }
+                });
+                break;
+            // 缂栬緫
+            case 'edit':
+                layer.open({
+                    type: 2,
+                    title: '淇敼',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'wrkDetl_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-save', index).hide();
+                        setFormVal(layer.getChildFrame('#detail', index), data, false);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
+                        top.convertDisabled(layer.getChildFrame('', index), true);
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                    }
+                });
+                break;
+            case 'modiUser':
+                var param = top.reObject(data).modiUser;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '淇敼浜哄憳璇︽儏',
+                       maxmin: true,
+                       area: [top.detailWidth, top.detailHeight],
+                       shadeClose: false,
+                       content: '../user/user_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/user/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+            case 'appeUser':
+                var param = top.reObject(data).appeUser;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '鍒涘缓鑰呰鎯�',
+                       maxmin: true,
+                       area: [top.detailWidth, top.detailHeight],
+                       shadeClose: false,
+                       content: '../user/user_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/user/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+
+        }
+    });
+
+    // 鏁版嵁淇濆瓨鍔ㄤ綔
+    form.on('submit(save)', function () {
+        if (banMsg != null){
+            layer.msg(banMsg);
+            return;
+        }
+        method("add");
+    });
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(edit)', function () {
+        method("update")
+    });
+
+    function method(name){
+        var index = layer.load(1, {
+            shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙
+        });
+        var data = {
+//            id: $('#id').val(),
+            wrkNo: $('#wrkNo').val(),
+            ioTime: top.strToDate($('#ioTime\\$').val()),
+            matnr: $('#matnr').val(),
+            lgnum: $('#lgnum').val(),
+            tbnum: $('#tbnum').val(),
+            tbpos: $('#tbpos').val(),
+            zmatid: $('#zmatid').val(),
+            maktx: $('#maktx').val(),
+            werks: $('#werks').val(),
+            anfme: $('#anfme').val(),
+            altme: $('#altme').val(),
+            zpallet: $('#zpallet').val(),
+            bname: $('#bname').val(),
+            memo: $('#memo').val(),
+            modiUser: $('#modiUser').val(),
+            modiTime: top.strToDate($('#modiTime\\$').val()),
+            appeUser: $('#appeUser').val(),
+            appeTime: top.strToDate($('#appeTime\\$').val()),
+            nista: $('#nista').val(),
+
+        };
+        $.ajax({
+            url: baseUrl+"/agv/wrkDetl/"+name+"/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: top.reObject(data),
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    parent.$(".layui-laypage-btn")[0].click();
+                    $("#data-detail :input").each(function () {
+                        $(this).val("");
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+                layer.close(index);
+            }
+        })
+    }
+
+    // 澶嶉�夋浜嬩欢
+    form.on('checkbox(detailCheckbox)', function (data) {
+        var el = data.elem;
+        if (el.checked) {
+            $(el).val('Y');
+        } else {
+            $(el).val('N');
+        }
+    });
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    layDate.render({
+        elem: '#ioTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#modiTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#appeTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '.layui-laydate-range'
+        ,type: 'datetime'
+        ,range: true
+    });
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function setFormVal(el, data, showImg) {
+    for (var val in data) {
+        var find = el.find(":input[id='" + val + "']");
+        if (find[0]!=null){
+            if (find[0].type === 'checkbox'){
+                if (data[val]==='Y'){
+                    find.attr("checked","checked");
+                    find.val('Y');
+                } else {
+                    find.remove("checked");
+                    find.val('N');
+                }
+                continue;
+            }
+        }
+        find.val(data[val]);
+        if (showImg){
+            var next = find.next();
+            if (next.get(0)){
+                if (next.get(0).localName === "img") {
+                    find.hide();
+                    next.attr("src", data[val]);
+                    next.show();
+                }
+            }
+        }
+    }
+}
+
+function detailScreen(index) {
+    var detail = layer.getChildFrame('#data-detail', index);
+    var height = detail.height()+60;
+    if (height > ($(window).height()*0.9)) {
+        height = ($(window).height()*0.8);
+    }
+    layer.style(index, {
+//        top: (($(window).height()-height)/3)+"px",
+        height: height+'px'
+    });
+}
+
+$('body').keydown(function () {
+    if (event.keyCode === 13) {
+        $("#search").click();
+    }
+});
diff --git a/src/main/webapp/static/js/agvWrkMast/wrkMast.js b/src/main/webapp/static/js/agvWrkMast/wrkMast.js
new file mode 100644
index 0000000..4fe5e9b
--- /dev/null
+++ b/src/main/webapp/static/js/agvWrkMast/wrkMast.js
@@ -0,0 +1,741 @@
+var pageCurr;
+var wrkNo;
+layui.use(['table','laydate', 'form'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#agvWrkMast',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/agv/wrkMast/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox'}
+            ,{field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�',sort: true, width: 85}
+            ,{field: 'ioTime$', align: 'center',title: '宸ヤ綔鏃堕棿',sort: true, width: 160}
+            ,{field: 'wrkSts$', align: 'center',title: '宸ヤ綔鐘舵��'}
+            ,{field: 'ioType$', align: 'center',title: '鍏ュ嚭搴撶被鍨�'}
+            ,{field: 'ioPri', align: 'center',title: '浼樺厛绾�'}
+            //,{field: 'sourceStaNo$', align: 'center',title: '婧愮珯'}
+            //,{field: 'staNo$', align: 'center',title: '鐩爣绔�'}
+            ,{field: 'sourceLocNo', align: 'center',title: '婧愬簱浣�'}
+            ,{field: 'locNo', align: 'center',title: '鐩爣搴撲綅'}
+            //,{field: 'steNo', align: 'center',title: '灏忚溅', width: 70}
+            ,{field: 'barcode', align: 'center',title: '鏉$爜', hide: false}
+            ,{field: 'preHave', align: 'center',title: '鍏堝叆鍝�', hide: true}
+            ,{field: 'takeNone', align: 'center',title: '绌烘搷浣�', hide: true}
+            // ,{field: 'picking', align: 'center',title: '鎷f枡', templet:function(row){
+            //         var html = "<input value='picking' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
+            //         if(row.picking === 'Y'){html += " checked ";}
+            //         html += ">";
+            //         return html;
+            //     }}
+            // ,{field: 'exitMk', align: 'center',title: '閫�鍑�', templet:function(row){
+            //         var html = "<input value='exitMk' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
+            //         if(row.exitMk === 'Y'){html += " checked ";}
+            //         html += ">";
+            //         return html;
+            //     }}
+            // ,{field: 'emptyMk', align: 'center',title: '绌烘澘', templet:function(row){
+            //         var html = "<input value='emptyMk' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
+            //         if(row.emptyMk === 'Y'){html += " checked ";}
+            //         html += ">";
+            //         return html;
+            //     }}
+            //
+            // ,{field: 'crnStrTime$', align: 'center',title: '鍫嗗灈鏈哄惎鍔ㄦ椂闂�'}
+            // ,{field: 'crnEndTime$', align: 'center',title: '鍫嗗灈鏈哄仠姝㈡椂闂�'}
+            // ,{field: 'refIotime$', align: 'center',title: '鎷f枡鏃堕棿'}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳', hide:true}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿', hide:true, width: 160}
+            // ,{field: 'memo', align: 'center',title: '澶囨敞'}
+            //
+            // ,{field: 'fullPlt', align: 'center',title: '婊℃澘', templet:function(row){
+            //         var html = "<input value='fullPlt' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
+            //         if(row.fullPlt === 'Y'){html += " checked ";}
+            //         html += ">";
+            //         return html;
+            //     }}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:290}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+            form.on('checkbox(tableCheckbox)', function (data) {
+                var _index = $(data.elem).attr('table-index')||0;
+                if(data.elem.checked){
+                    res.data[_index][data.value] = 'Y';
+                }else{
+                    res.data[_index][data.value] = 'N';
+                }
+            });
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(wrkMast)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {
+                curr: 1
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(wrkMast)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            // 澧炲姞浼樺厛绾�
+            case 'priAdd':
+                var list=[];
+                checkStatus.data.map(function (track) {
+                    list.push({
+
+                        wrkNo: track.wrkNo,
+                        ioTime: track.ioTime,
+                        ioPri: track.ioPri
+                    });
+                });
+                $.ajax({
+                    url: baseUrl+"/agv/wrkMast/add/pri/auth",
+                    headers: {'token': localStorage.getItem('token')},
+                    contentType:'application/json;charset=UTF-8',
+                    data: JSON.stringify(list),
+                    method: 'POST',
+                    traditional:true,
+                    success: function (res) {
+                        layer.closeAll();
+                        if (res.code === 200){
+                            $(".layui-laypage-btn")[0].click();
+                            layer.msg(res.msg);
+                        } else if (res.code === 403){
+                            top.location.href = baseUrl+"/";
+                        } else {
+                            layer.msg(res.msg)
+                        }
+                    }
+                })
+                break;
+            // 闄嶄綆浼樺厛绾�
+            case 'priRed':
+                var list=[];
+                checkStatus.data.map(function (track) {
+                    list.push({
+                        wrkNo: track.wrkNo,
+                        ioTime: track.ioTime,
+                        ioPri: track.ioPri
+                    });
+                });
+                $.ajax({
+                    url: baseUrl+"/agv/wrkMast/red/pri/auth",
+                    headers: {'token': localStorage.getItem('token')},
+                    contentType:'application/json;charset=UTF-8',
+                    data: JSON.stringify(list),
+                    method: 'POST',
+                    traditional:true,
+                    success: function (res) {
+                        layer.closeAll();
+                        if (res.code === 200){
+                            $(".layui-laypage-btn")[0].click();
+                            layer.msg(res.msg);
+                        } else if (res.code === 403){
+                            top.location.href = baseUrl+"/";
+                        } else {
+                            layer.msg(res.msg)
+                        }
+                    }
+                })
+                break;
+            case 'startWrk':
+                var data = checkStatus.data;
+                if (data.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/agv/wrkMast/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {param: JSON.stringify(data)},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'addData':
+                layer.open({
+                    type: 2,
+                    title: '鏂板',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'wrkMast_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-edit', index).hide();
+                        clearFormVal(layer.getChildFrame('#detail', index));
+                        layer.getChildFrame('##dealDownLine', index).hide();layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                    }
+                });
+                break;
+            case 'deleteData':
+                var data = checkStatus.data;
+                if (data.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/agv/wrkMast/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {param: JSON.stringify(data)},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'wrkMast': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/agv/wrkMast/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(wrkMast)', function(obj){
+        let data = obj.data;
+        switch (obj.event) {
+            // 鏄庣粏灞曠ず
+            case 'detlShow':
+                wrkNo = data.wrkNo;
+                // 琛ㄦ牸涓嬫柟鏄剧ず
+                // locDetl(data.wrkNo);
+                // 寮瑰眰鏄剧ず
+                layer.open({
+                    type: 2,
+                    title: '宸ヤ綔妗f槑缁�',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: true,
+                    content: 'wrkDetl.html',
+                    success: function(layero, index){
+                    }
+                });
+                break;
+            // 瀹屾垚
+            case 'complete':
+                layer.confirm('纭瀹屾垚璇ョ瑪宸ヤ綔妗o紵', {title: '宸ヤ綔鍙凤細'+data.wrkNo, shadeClose: true}, function(){
+                    http.post(baseUrl+"/hand/control/wrkMast", {workNo: data.wrkNo, type:1}, function (res) {
+                        $(".layui-laypage-btn")[0].click();
+                        layer.msg(data.wrkNo + res.msg);
+                    })
+                    layer.closeAll();
+
+                });
+                break;
+            // 鍙栨秷
+            case 'cancel':
+                if (data.pdcType === "Y") {
+                    layer.confirm('褰撳墠浠诲姟鍏宠仈ERP閿�鍞崟锛屽彇娑堝皢閲嶆柊鐢熸垚鍑哄簱浣滀笟锛屾槸鍚︾户缁紵', {title: '宸ヤ綔鍙凤細'+data.wrkNo, shadeClose: true}, function(){
+                        http.post(baseUrl+"/hand/control/wrkMast", {workNo: data.wrkNo, type:2}, function (res) {
+                            $(".layui-laypage-btn")[0].click();
+                            layer.msg(data.wrkNo + res.msg);
+                        })
+                        layer.closeAll();
+                    });
+                } else {
+                    layer.confirm('纭鍙栨秷璇ョ瑪宸ヤ綔妗o紵', {title: '宸ヤ綔鍙凤細'+data.wrkNo, shadeClose: true}, function(){
+                        http.post(baseUrl+"/hand/control/wrkMast", {workNo: data.wrkNo, type:2}, function (res) {
+                            $(".layui-laypage-btn")[0].click();
+                            layer.msg(data.wrkNo + res.msg);
+                        })
+                        layer.closeAll();
+                    });
+                }
+                break;
+            //  鎷f枡鍏ュ簱
+            case 'pick':
+                layer.confirm('鎷f枡鍏ュ簱璇ョ瑪宸ヤ綔妗o紵', {title: '宸ヤ綔鍙凤細'+data.wrkNo, shadeClose: true}, function(){
+                    http.post(baseUrl+"/hand/control/wrkMast", {workNo: data.wrkNo, type:3}, function (res) {
+                        $(".layui-laypage-btn")[0].click();
+                        layer.msg(data.wrkNo + res.msg);
+                    })
+                    layer.closeAll();
+                });
+                break;
+            //  鍏堝叆鍝�
+            case 'preHave':
+                layer.confirm('浠诲姟鍙戠敓鍏堝叆鍝佸紓甯搞�傚闇�閲嶆柊鍏ュ簱锛岃纭繚璐х墿宸叉斁鑷冲爢鍨涙満鍑哄簱绔欙紒', {title: '宸ヤ綔鍙凤細'+data.wrkNo, shadeClose: true}, function(){
+                    http.post(baseUrl+"/deal/preHave/start", {wrkNo: data.wrkNo}, function (res) {
+                        $(".layui-laypage-btn")[0].click();
+                        layer.msg(data.wrkNo + res.msg, {icon: 1});
+                    })
+                    layer.closeAll();
+                });
+                break;
+            //  绌烘搷浣�
+            case 'takeNone':
+                layer.confirm('浠诲姟鍙戦�佺┖鎿嶄綔寮傚父锛佹槸鍚︺�傘�傘�傘�傘�傘�傘�傘�傦紵', {title: '宸ヤ綔鍙凤細'+data.wrkNo, shadeClose: true}, function(){
+                });
+                break;
+            //  寮冭溅
+            case 'removeSte':
+                layer.confirm('娓呴櫎灏忚溅銆�' + data.steNo + '銆�', {title: '宸ヤ綔鍙凤細'+data.wrkNo, shadeClose: true}, function(){
+                    http.post(baseUrl+"/deal/steNo/empty", {wrkNo: data.wrkNo}, function (res) {
+                        $(".layui-laypage-btn")[0].click();
+                        layer.msg(data.wrkNo + res.msg, {icon: 1});
+                    })
+                    layer.closeAll();
+                });
+                break;
+            case 'priWrkMast':
+                layer.open({
+                    type: 2,
+                    title: '缁存姢宸ヤ綔妗�',
+                    maxmin: true,
+                    area: ['500px', top.detailHeight],
+                    shadeClose: false,
+                    content: 'wrkMast_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-save', index).hide();
+                        setFormVal(layer.getChildFrame('#detail', index), data, false);
+                        top.convertDisabled(layer.getChildFrame('#locNo', index), true);
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                    }
+                });
+                break;
+        }
+    });
+
+    // 鏁版嵁淇濆瓨鍔ㄤ綔
+    form.on('submit(save)', function () {
+        if (banMsg != null){
+            layer.msg(banMsg);
+            return;
+        }
+        method("add");
+    });
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(edit)', function () {
+        method("update")
+    });
+
+    function method(name){
+        var index = layer.load(1, {
+            shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙
+        });
+        var data = {
+            wrkNo: $('#wrkNo').val(),
+            invWh: $('#invWh').val(),
+            ymd: top.strToDate($('#ymd\\$').val()),
+            mk: $('#mk').val(),
+            whsType: $('#whsType').val(),
+            wrkSts: $('#wrkSts').val(),
+            ioType: $('#ioType').val(),
+            crnNo: $('#crnNo').val(),
+            sheetNo: $('#sheetNo').val(),
+            ioPri: $('#ioPri').val(),
+            wrkDate: top.strToDate($('#wrkDate\\$').val()),
+            locNo: $('#locNo').val(),
+            staNo: $('#staNo').val(),
+            sourceStaNo: $('#sourceStaNo').val(),
+            sourceLocNo: $('#sourceLocNo').val(),
+            locSts: $('#locSts').val(),
+            picking: $('#picking').val(),
+            linkMis: $('#linkMis').val(),
+            onlineYn: $('#onlineYn').val(),
+            updMk: $('#updMk').val(),
+            exitMk: $('#exitMk').val(),
+            pltType: $('#pltType').val(),
+            emptyMk: $('#emptyMk').val(),
+            ioTime: top.strToDate($('#ioTime\\$').val()),
+            ctnType: $('#ctnType').val(),
+            packed: $('#packed').val(),
+            oveMk: $('#oveMk').val(),
+            mtnType: $('#mtnType').val(),
+            userNo: $('#userNo').val(),
+            crnStrTime: top.strToDate($('#crnStrTime\\$').val()),
+            crnEndTime: top.strToDate($('#crnEndTime\\$').val()),
+            plcStrTime: top.strToDate($('#plcStrTime\\$').val()),
+            crnPosTime: top.strToDate($('#crnPosTime\\$').val()),
+            loadTime: $('#loadTime').val(),
+            expTime: $('#expTime').val(),
+            refWrkno: $('#refWrkno').val(),
+            refIotime: top.strToDate($('#refIotime\\$').val()),
+            modiUser: $('#modiUser').val(),
+            modiTime: top.strToDate($('#modiTime\\$').val()),
+            appeUser: $('#appeUser').val(),
+            appeTime: top.strToDate($('#appeTime\\$').val()),
+            pauseMk: $('#pauseMk').val(),
+            errorTime: top.strToDate($('#errorTime\\$').val()),
+            errorMemo: $('#errorMemo').val(),
+            ctnKind: $('#ctnKind').val(),
+            manuType: $('#manuType').val(),
+            memo: $('#memo').val(),
+            scWeight: $('#scWeight').val(),
+            logMk: $('#logMk').val(),
+            logErrTime: top.strToDate($('#logErrTime\\$').val()),
+            logErrMemo: $('#logErrMemo').val(),
+            barcode: $('#barcode').val(),
+            PdcType: $('#PdcType').val(),
+            ctnNo: $('#ctnNo').val(),
+            fullPlt: $('#fullPlt').val(),
+
+        };
+        $.ajax({
+            url: baseUrl+"/agv/wrkMast/"+name+"/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: top.reObject(data),
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    parent.$(".layui-laypage-btn")[0].click();
+                    $("#data-detail :input").each(function () {
+                        $(this).val("");
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+                layer.close(index);
+            }
+        })
+    }
+
+    // 澶嶉�夋浜嬩欢
+    form.on('checkbox(detailCheckbox)', function (data) {
+        var el = data.elem;
+        if (el.checked) {
+            $(el).val('Y');
+        } else {
+            $(el).val('N');
+        }
+    });
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        $('#detlTable').css("display", 'none');
+        tableReload(false);
+    });
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        $('#detlTable').css("display", 'none');
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    layDate.render({
+        elem: '#ymd\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#wrkDate\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#ioTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#crnStrTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#crnEndTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#plcStrTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#crnPosTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#refIotime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#modiTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#appeTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#errorTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#logErrTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '.layui-laydate-range'
+        ,type: 'datetime'
+        ,range: true
+    });
+
+    var pageCur;
+    function locDetl(param){
+        $('#detlTable').css("display", 'block');
+        // 鏁版嵁娓叉煋
+        $('#wrkNo').val(param);
+        // 鏁版嵁娓叉煋
+        tableIns1 = table.render({
+            elem: '#wrkDetlByMap',
+            headers: {token: localStorage.getItem('token')},
+            url: baseUrl+'/agv/wrkDetl/list/auth',
+            where: {wrk_no: param},
+            page: true,
+            limit: 16,
+            limits: [16, 30, 50, 100, 200, 500],
+            even: true,
+            toolbar: '#toolbar',
+            cellMinWidth: 50,
+            cols: [[
+                {type: 'checkbox'}
+                ,{field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�'}
+                ,{field: 'ioTime$', align: 'center',title: '宸ヤ綔鏃堕棿'}
+                ,{field: 'matnr', align: 'center',title: '鐗╂枡'}
+                ,{field: 'lgnum', align: 'center',title: '浠撳簱鍙�'}
+                ,{field: 'tbnum', align: 'center',title: '杞偍璇锋眰缂栧彿'}
+                ,{field: 'tbpos', align: 'center',title: '琛岄」鐩�'}
+                ,{field: 'zmatid', align: 'center',title: '鐗╂枡鏍囩ID'}
+                ,{field: 'maktx', align: 'center',title: '鐗╂枡鎻忚堪'}
+                ,{field: 'werks', align: 'center',title: '宸ュ巶'}
+                ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
+                ,{field: 'altme', align: 'center',title: '鍗曚綅'}
+                ,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜'}
+                ,{field: 'bname', align: 'center',title: '鐢ㄦ埛ID'}
+                ,{field: 'memo', align: 'center',title: '澶囨敞'}
+
+                ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:50}
+            ]],
+            request: {
+                pageName: 'curr',
+                pageSize: 'limit'
+            },
+            parseData: function (res) {
+                return {
+                    'code': res.code,
+                    'msg': res.msg,
+                    'count': res.data.total,
+                    'data': res.data.records
+                }
+            },
+            response: {
+                statusCode: 200
+            },
+            done: function(res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCur=curr;
+                form.on('checkbox(tableCheckbox)', function (data) {
+                    var _index = $(data.elem).attr('table-index')||0;
+                    if(data.elem.checked){
+                        res.data[_index][data.value] = 'Y';
+                    }else{
+                        res.data[_index][data.value] = 'N';
+                    }
+                });
+            }
+        });
+    }
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function setFormVal(el, data, showImg) {
+    for (var val in data) {
+        var find = el.find(":input[id='" + val + "']");
+        if (find[0]!=null){
+            if (find[0].type === 'checkbox'){
+                if (data[val]==='Y'){
+                    find.attr("checked","checked");
+                    find.val('Y');
+                } else {
+                    find.remove("checked");
+                    find.val('N');
+                }
+                continue;
+            }
+        }
+        find.val(data[val]);
+        if (showImg){
+            var next = find.next();
+            if (next.get(0)){
+                if (next.get(0).localName === "img") {
+                    find.hide();
+                    next.attr("src", data[val]);
+                    next.show();
+                }
+            }
+        }
+    }
+}
+
+function clearFormVal(el) {
+    $(':input', el)
+        .val('')
+        .removeAttr('checked')
+        .removeAttr('selected');
+}
+
+function detailScreen(index) {
+    var detail = layer.getChildFrame('#data-detail', index);
+    var height = detail.height()+60;
+    if (height > ($(window).height()*0.9)) {
+        height = ($(window).height()*0.8);
+    }
+    layer.style(index, {
+//        top: (($(window).height()-height)/3)+"px",
+        height: height+'px'
+    });
+}
+
+$('body').keydown(function () {
+    if (event.keyCode === 13) {
+        $("#search").click();
+    }
+});
diff --git a/src/main/webapp/static/js/common.js b/src/main/webapp/static/js/common.js
index 2314bb4..151832e 100644
--- a/src/main/webapp/static/js/common.js
+++ b/src/main/webapp/static/js/common.js
@@ -1,4 +1,4 @@
-var baseUrl = "/xzjlwms";
+var baseUrl = "/tzskwms";
 
 // 璇︽儏绐楀彛-楂樺害
 var detailHeight = '80%';
@@ -220,21 +220,19 @@
 ]
 
 var detlCols = [
-    {field: 'matnr', align: 'center',title: '鐗╂枡鍙�', width: 180}
-    ,{field: 'name', align: 'center',title: '绉诲姩绫诲瀷'}
-    // ,{field: 'maktx', align: 'center',title: '鐗╂枡鍙�'}
+    ,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜', width: 110}
+    ,{field: 'matnr', align: 'center',title: '鐗╂枡鍙�'}
+    ,{field: 'model', align: 'center',title: '鎵瑰彿'}
+    ,{field: 'maktx', align: 'center',title: '鐗╂枡鍚嶇О'}
     ,{field: 'specs', align: 'center',title: '瑙勬牸'}
-    ,{field: 'model', align: 'center',title: '鎵规', hide: true}
+    ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
+    ,{field: 'name', align: 'center',title: '绉诲姩绫诲瀷', hide: true}
     ,{field: 'orderNo', align: 'center',title: '鍗曟嵁缂栧彿', hide: false}
     ,{field: 'batch', align: 'center',title: '搴忓垪鐮�', width: 300, sort:true, hide: true}
-    ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
-    ,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜'}
     ,{field: 'manuDate', align: 'center',title: '鍗曟嵁鏃堕棿', hide: true}
     ,{field: 'weight', align: 'center',title: '閲嶉噺', hide: true}
     ,{field: 'units', align: 'center',title: '鏀暟', hide: true}
     ,{field: 'origin', align: 'center',title: '鐗╂枡鐘舵��', hide: true}
-
-
     ,{field: 'color', align: 'center',title: '棰滆壊', hide: true}
     ,{field: 'brand', align: 'center',title: '鍝佺墝', hide: true}
     ,{field: 'unit', align: 'center',title: '鍗曚綅', hide: true}
diff --git a/src/main/webapp/views/agvBasDevp/basDevp.html b/src/main/webapp/views/agvBasDevp/basDevp.html
index a23f341..cf5bbde 100644
--- a/src/main/webapp/views/agvBasDevp/basDevp.html
+++ b/src/main/webapp/views/agvBasDevp/basDevp.html
@@ -32,10 +32,22 @@
 <div class="layui-form">
     <table class="layui-hide" id="agvBasDevp" lay-filter="basDevp"></table>
 </div>
+
+<!--鏄庣粏琛�-->
+<div id="detlTable" style="display: none">
+    <div class="layui-inline"  style="width:90%;margin-top: 10px;margin-left: 20px">
+        <span style=" color: indianred">浠ヤ笅涓哄綋鍓嶇珯鐐圭殑鐗╂枡鏄庣粏</span>
+    </div>
+
+    <table class="layui-hide" id="basDevpDetl" lay-filter="locDetlByMap"></table>
+</div>
+
 <script type="text/html" id="toolbar">
     <div class="layui-btn-container">
         <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
         <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary" id="btn-init" lay-event="init">鍒濆鍖�</button>
+        <button class="layui-btn layui-btn-primary" id="btn-createWrk" lay-event="createWrk">鍏ュ簱</button>
         <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
     </div>
 </script>
@@ -43,8 +55,11 @@
 <script type="text/html" id="operate">
 <!--    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>-->
     <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+    <a class="layui-btn layui-btn-xs btn-detl" lay-event="detl">鏄庣粏</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-unbind" lay-event="unbind">瑙g粦</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>
diff --git a/src/main/webapp/views/agvBasDevp/basDevpWaitPakinDetail.html b/src/main/webapp/views/agvBasDevp/basDevpWaitPakinDetail.html
new file mode 100644
index 0000000..86336b7
--- /dev/null
+++ b/src/main/webapp/views/agvBasDevp/basDevpWaitPakinDetail.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../static/css/common.css" media="all">
+    <style>
+        .layui-table-body.layui-table-main{
+            overflow: auto; !important;
+        }
+    </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="zpallet" class="layui-input" type="text" disabled="disabled">
+    </div>
+</div>
+<table class="layui-hide" id="locDetlByMap" lay-filter="locDetlByMap"></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>
+<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/agvBasDevp/basDevp.js" charset="utf-8"></script>
+<script type="text/javascript">
+    var pageCur;
+    function getCol() {
+        var cols = [
+            {field: 'matnr', align: 'center',title: '鐗╂枡鍙�'},
+            {field: 'batch', align: 'center',title: '鎵瑰彿'},
+            {field: 'maktx', align: 'center',title: '鐗╂枡鍚嶇О'},
+            {field: 'specs', align: 'center',title: '瑙勬牸'},
+            {field: 'anfme', align: 'center',title: '鏁伴噺'}
+        ];
+        //cols.push.apply(cols, detlCols);
+        return cols;
+    }
+    layui.use(['table','laydate', 'form'], function() {
+        table = layui.table;
+        var $ = layui.jquery;
+        var form = layui.form;
+        var tmp = getQueryVariable("barcode")
+        if (tmp == false) {
+            $('#zpallet').val(parent.barcode);
+        }else {
+            $('#zpallet').val(tmp);
+        }
+
+        // 鏁版嵁娓叉煋
+        tableIns = table.render({
+            elem: '#locDetlByMap',
+            headers: {token: localStorage.getItem('token')},
+            url: baseUrl+'/agv/waitPakin/list/auth',
+            page: true,
+            limit: 20,
+            skin: 'line',
+            where: {zpallet: $('#zpallet').val()},
+            even: true,
+            cellMinWidth: 50,
+            cols: [getCol()],
+            request: {
+                pageName: 'curr',
+                pageSize: 'limit'
+            },
+            parseData: function (res) {
+                return {
+                    'code': res.code,
+                    'msg': res.msg,
+                    'count': res.data.total,
+                    'data': res.data.records
+                }
+            },
+            response: {
+                statusCode: 200
+            },
+            done: function(res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCur=curr;
+                form.on('checkbox(tableCheckbox)', function (data) {
+                    var _index = $(data.elem).attr('table-index')||0;
+                    if(data.elem.checked){
+                        res.data[_index][data.value] = 'Y';
+                    }else{
+                        res.data[_index][data.value] = 'N';
+                    }
+                });
+            }
+        });
+    });
+</script>
+</html>
+
diff --git a/src/main/webapp/views/agvBasDevp/basDevp_detail.html b/src/main/webapp/views/agvBasDevp/basDevp_detail.html
index 23309dc..b001735 100644
--- a/src/main/webapp/views/agvBasDevp/basDevp_detail.html
+++ b/src/main/webapp/views/agvBasDevp/basDevp_detail.html
@@ -32,7 +32,7 @@
         <div class="layui-inline"  style="width:31%;">
             <label class="layui-form-label"><span class="not-null">*</span>宸ヤ綔浣嶇紪鍙凤細</label>
             <div class="layui-input-inline">
-                <input id="devNo" class="layui-input" type="text" onkeyup="check(this.id, 'basDevp')" >
+                <input id="devNo" class="layui-input" type="text" onkeyup="check(this.id, 'agv/basDevp')" >
             </div>
         </div>
         <div class="layui-inline"  style="width:31%;">
diff --git a/src/main/webapp/views/agvLocRule/locRule.html b/src/main/webapp/views/agvLocRule/locRule.html
new file mode 100644
index 0000000..516dc91
--- /dev/null
+++ b/src/main/webapp/views/agvLocRule/locRule.html
@@ -0,0 +1,208 @@
+<!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="locRule" lay-filter="locRule"></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/agvLocRule/locRule.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-md6">
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍟嗗搧缂栧彿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="matnr" 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="cstmr" 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">
+                        <div class="layui-input-block">
+                            <select name="floor">
+                                <option value="1" selected>1妤�</option>
+                                <option value="3">3妤�</option>
+                            </select>
+                        </div>
+                    </div>
+                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">鍏朵粬: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="other" placeholder="璇疯緭鍏ュ叾浠�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">涓婇檺: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="limit" placeholder="璇疯緭鍏ヤ笂闄�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">娣疯浇: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <select name="mixed">-->
+<!--                            <option value="1" selected>鏄�</option>-->
+<!--                            <option value="0">鍚�</option>-->
+<!--                        </select>-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">
+                    <label class="layui-form-label">娣疯浇鏈壘鍒板簱浣嶇户缁悳绱�: </label>
+                    <div class="layui-input-block">
+                        <select name="keepGo">
+                            <option value="1">鏄�</option>
+                            <option value="0" selected>鍚�</option>
+                        </select>
+                    </div>
+                </div>-->
+
+             </div>
+
+            <div class="layui-col-md6">
+<!--                <div class="layui-inline">-->
+<!--                    <label class="layui-form-label">鎺掕寖鍥�</label>-->
+<!--                    <div class="layui-input-inline" style="width: 100px;">-->
+<!--                        <input type="text" name="price_min" placeholder="锟�" autocomplete="off" class="layui-input">-->
+<!--                    </div>-->
+<!--                    <div class="layui-form-mid">-</div>-->
+<!--                    <div class="layui-input-inline" style="width: 100px;">-->
+<!--                        <input type="text" name="price_max" placeholder="锟�" autocomplete="off" class="layui-input">-->
+<!--                    </div>-->
+<!--                </div>-->
+
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">寮�濮嬫帓: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="rowBeg" placeholder="璇疯緭鍏ュ紑濮嬫帓" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">缁撴潫鎺�: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="rowEnd" placeholder="璇疯緭鍏ョ粨鏉熸帓" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">寮�濮嬪垪: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="bayBeg" placeholder="璇疯緭鍏ュ紑濮嬪垪" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">缁撴潫鍒�: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="bayEnd" placeholder="璇疯緭鍏ョ粨鏉熷垪" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">寮�濮嬪眰: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="levBeg" placeholder="璇疯緭鍏ュ紑濮嬪眰" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">缁撴潫灞�: </label>
+                    <div class="layui-input-block">
+                        <input type="number" min="1" class="layui-input" name="levEnd" placeholder="璇疯緭鍏ョ粨鏉熷眰" lay-vertype="tips" lay-verify="required" required="">
+                    </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>
+
diff --git a/src/main/webapp/views/agvWrkDetl/wrkDetl.html b/src/main/webapp/views/agvWrkDetl/wrkDetl.html
index 75eda7a..11c3f10 100644
--- a/src/main/webapp/views/agvWrkDetl/wrkDetl.html
+++ b/src/main/webapp/views/agvWrkDetl/wrkDetl.html
@@ -44,7 +44,7 @@
 
 <!-- 琛ㄦ牸 -->
 <div class="layui-form">
-    <table class="layui-hide" id="wrkDetl" lay-filter="wrkDetl"></table>
+    <table class="layui-hide" id="agvWrkDetl" lay-filter="wrkDetl"></table>
 </div>
 <script type="text/html" id="toolbar">
     <div class="layui-btn-container">
@@ -60,7 +60,7 @@
 <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/wrkDetl/wrkDetl.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/agvWrkDetl/wrkDetl.js" charset="utf-8"></script>
 
 <iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
 
diff --git a/src/main/webapp/views/agvWrkMast/wrkDetl.html b/src/main/webapp/views/agvWrkMast/wrkDetl.html
index af87049..497742b 100644
--- a/src/main/webapp/views/agvWrkMast/wrkDetl.html
+++ b/src/main/webapp/views/agvWrkMast/wrkDetl.html
@@ -25,7 +25,7 @@
 <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/locMast/locMast.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/agvLocMast/locMast.js" charset="utf-8"></script>
 <script type="text/javascript">
     var pageCur;
     function getCol() {
@@ -46,7 +46,7 @@
         tableIns1 = table.render({
             elem: '#wrkDetlByMast',
             headers: {token: localStorage.getItem('token')},
-            url: baseUrl+'/wrkDetl/list/auth',
+            url: baseUrl+'/agv/wrkDetl/list/auth',
             where: {wrk_no: parent.wrkNo},
             page: true,
             limit: 16,
diff --git a/src/main/webapp/views/agvWrkMast/wrkMast.html b/src/main/webapp/views/agvWrkMast/wrkMast.html
index e87c9d4..fb8f6ca 100644
--- a/src/main/webapp/views/agvWrkMast/wrkMast.html
+++ b/src/main/webapp/views/agvWrkMast/wrkMast.html
@@ -93,12 +93,13 @@
 
 <!-- 琛ㄦ牸 -->
 <div class="layui-form">
-    <table class="layui-hide" id="wrkMast" lay-filter="wrkMast"></table>
+    <table class="layui-hide" id="agvWrkMast" lay-filter="wrkMast"></table>
 </div>
 <script type="text/html" id="toolbar">
     <div class="layui-btn-container">
         <button class="layui-btn layui-btn-normal" id="btn-pri-add" lay-event="priAdd"><i class="layui-icon">&#xe624;</i>澧炲姞浼樺厛绾�</button>
         <button class="layui-btn layui-btn-normal" id="btn-pri-red" lay-event="priRed"><i class="layui-icon">&#xe67e;</i>闄嶄綆浼樺厛绾�</button>
+        <button class="layui-btn layui-btn-primary" id="btn-startWrk" lay-event="startWrk">寮�濮嬩换鍔�</button>
         <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
     </div>
 </script>
@@ -126,7 +127,7 @@
 <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/wrkMast/wrkMast.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/agvWrkMast/wrkMast.js" charset="utf-8"></script>
 
 <iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
 
diff --git a/src/main/webapp/views/agvWrkMast/wrkMast_detail.html b/src/main/webapp/views/agvWrkMast/wrkMast_detail.html
index 4f39f9e..d7bc8cf 100644
--- a/src/main/webapp/views/agvWrkMast/wrkMast_detail.html
+++ b/src/main/webapp/views/agvWrkMast/wrkMast_detail.html
@@ -48,6 +48,6 @@
 <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/wrkMast/wrkMast.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/agvWrkMast/wrkMast.js" charset="utf-8"></script>
 </html>
 
diff --git a/src/main/webapp/views/mat/mat.html b/src/main/webapp/views/mat/mat.html
index eb19905..a0947c4 100644
--- a/src/main/webapp/views/mat/mat.html
+++ b/src/main/webapp/views/mat/mat.html
@@ -390,7 +390,7 @@
         <tr style="height: 79px;">
             <td align="center" colspan="2" width="100%" style="border: none">
                 <img class="template-code" src="{{this.barcodeUrl}}" width="80%">
-                <div style="letter-spacing: 2px;margin-top: 1px; text-align: center">
+                <div style="letter-spacing: 2px;margin-top: 1px; text-align: center" >
                     <span>{{this.matnr}}</span>
                 </div>
             </td>
@@ -401,34 +401,35 @@
 <!-- 妯℃澘3 -->
 <script type="text/template" id="templatePreview3" class="template-qrcode">
     {{#each data}}
-    <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
-        <tr style="height: 74px" >
-            <td align="center" scope="col" colspan="1">鍟嗗搧</td>
-            <td align="center" scope="col" colspan="1" style="
+    <table class="contain" width="400px" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
+        <tr style="height: 74px;font-size: 18px" >
+            <td width="50px" align="center" scope="col" colspan="1"><strong>鍟嗗搧</strong></td>
+            <td width="150px" align="center" scope="col" colspan="1" style="
                 border: none;
                 border-top: 1px solid #000;
                 overflow: hidden;
                 text-overflow: ellipsis;
                 -webkit-line-clamp: 3;
                 -webkit-box-orient: vertical;
-                    ">
-                {{this.maktx}}
+                font-family: 瀹嬩綋;
+                font-size: 18px">
+                <strong>{{this.maktx}}</strong>
             </td>
             <td align="center" scope="col" colspan="2" rowspan="2">
                 <img class="template-code template-qrcode" src="{{this.barcodeUrl}}" width="80%">
                 <div style="letter-spacing: 1px;margin-top: 1px; text-align: center">
-                    <span>{{this.matnr}}</span>
+                    <span><strong>{{this.matnr}}</strong></span>
                 </div>
             </td>
         </tr>
-        <tr style="height: 74px">
-            <td align="center" colspan="1">瑙勬牸</td>
+        <tr style="height: 74px; font-family: 瀹嬩綋; font-size: 18px">
+            <td width="50px" align="center" colspan="1"><strong>瑙勬牸</strong></td>
             <td align="center" colspan="1" style="
                 overflow:hidden;
                 text-overflow:ellipsis;
                 -webkit-line-clamp: 3;
                 -webkit-box-orient: vertical;
-            ">{{this.specs}}</td>
+            "><strong>{{this.specs}}</strong></td>
         </tr>
     </table>
     {{/each}}

--
Gitblit v1.9.1