From 7b72d43503aa5df4c152b777777085d3cd5e2132 Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期六, 06 十二月 2025 15:49:25 +0800
Subject: [PATCH] Merge branch 'jsxswms' of http://47.97.1.152:5880/r/zy-asrs into jsxswms

---
 src/main/java/com/zy/asrs/mapper/LocDetlMapper.java                |    5 
 src/main/java/com/zy/asrs/service/impl/TaskDetlLogServiceImpl.java |    2 
 src/main/resources/mapper/LocDetlMapper.xml                        |   50 +
 src/main/java/com/zy/asrs/enums/OrderTypeEnum.java                 |   27 
 src/main/webapp/static/js/orderTablePakoutAGV.js                   |  174 ++++++
 src/main/java/com/zy/asrs/entity/OrderPakout.java                  |   21 
 src/main/webapp/views/orderPakout/order.html                       |    8 
 src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java        |   26 
 src/main/java/com/zy/asrs/service/impl/TaskLogServiceImpl.java     |    2 
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java        |   99 +++
 src/main/java/com/zy/asrs/entity/param/OrderDomainParam.java       |    2 
 src/main/webapp/static/js/task/task.js                             |    6 
 src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java      |  155 ++++-
 src/main/java/com/zy/asrs/controller/OutController.java            |   99 +++
 src/main/java/com/zy/asrs/service/MobileService.java               |    5 
 src/main/java/com/zy/asrs/service/WorkService.java                 |    3 
 src/main/webapp/static/js/orderTablePakout.js                      |    4 
 src/main/java/com/zy/asrs/entity/OrderDetlPakout.java              |    8 
 src/main/java/com/zy/asrs/service/LocDetlService.java              |    5 
 src/main/webapp/views/orderPakout/agvOut.html                      |  332 ++++++++++++
 src/main/java/com/zy/asrs/entity/TaskDetlLog.java                  |    3 
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java        |   38 +
 src/main/java/com/zy/common/model/TaskDto.java                     |   10 
 src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java     |    9 
 src/main/java/com/zy/asrs/controller/MobileController.java         |   12 
 src/main/java/com/zy/asrs/entity/TaskDetl.java                     |    1 
 src/main/java/com/zy/common/model/LocDto.java                      |   11 
 src/main/java/com/zy/asrs/controller/OrderPakoutController.java    |   37 +
 src/main/java/com/zy/asrs/entity/WaitPakinLog.java                 |    2 
 src/main/java/com/zy/asrs/entity/WaitPakin.java                    |    5 
 src/main/webapp/static/js/orderPakout/order.js                     |   42 +
 src/main/webapp/static/js/orderPakout/out.js                       |    6 
 src/main/webapp/static/js/orderPakout/agvOut.js                    |  386 ++++++++++++++
 33 files changed, 1,493 insertions(+), 102 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/MobileController.java b/src/main/java/com/zy/asrs/controller/MobileController.java
index fabce93..dfd728c 100644
--- a/src/main/java/com/zy/asrs/controller/MobileController.java
+++ b/src/main/java/com/zy/asrs/controller/MobileController.java
@@ -64,7 +64,7 @@
     @PostMapping("/agv/callEmptyCar")
     @ManagerAuth
     public R pdaAgvFinishedCall(@RequestBody AgvCallParams params){
-        return mobileService.callEmptyCar(params);
+        return mobileService.callEmptyCar(params, getUserId());
     }
 
     @RequestMapping("/pda/WarehouseOut/v1")
@@ -173,6 +173,16 @@
         return mobileService.callAgvMove(params, getUserId());
     }
 
+    @PostMapping("/collection/agv/call")
+    @ApiOperation("闆嗚揣鍖哄叆搴�")
+    @ManagerAuth
+    public R CollectionInCall(@RequestBody AgvCallParams params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return mobileService.collectionInCall(params, getUserId());
+    }
+
 
     /**
      * @author Ryan
diff --git a/src/main/java/com/zy/asrs/controller/OrderPakoutController.java b/src/main/java/com/zy/asrs/controller/OrderPakoutController.java
index 23fbfff..c941727 100644
--- a/src/main/java/com/zy/asrs/controller/OrderPakoutController.java
+++ b/src/main/java/com/zy/asrs/controller/OrderPakoutController.java
@@ -10,6 +10,7 @@
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.param.OrderDomainParam;
 import com.zy.asrs.entity.result.WrkTraceVo;
+import com.zy.asrs.enums.OrderTypeEnum;
 import com.zy.asrs.service.*;
 import com.zy.common.model.DetlDto;
 import com.zy.common.web.BaseController;
@@ -51,6 +52,37 @@
             wrapper.like("order_no", orderNo);
         }
         wrapper.le("settle", 2).eq("status", 1);
+        // 绛涢�夊嚭搴撳崟,涓嶄负OrderTypeEnum.STOCK
+        wrapper.ne("doc_type", OrderTypeEnum.STOCK.type);
+        wrapper.orderBy("create_time", false);
+        List<OrderPakout> orders = orderService.selectList(wrapper);
+        // 淇濈暀鍑哄簱鍗�
+        if (!Cools.isEmpty(orders)) {
+            Iterator<OrderPakout> iterator = orders.iterator();
+            while (iterator.hasNext()) {
+                OrderPakout order = iterator.next();
+                if (order.getDocType() != null) {
+                    DocType docType = docTypeService.selectById(order.getDocType());
+                    if (docType != null) {
+                        if (docType.getPakout() == 0) {
+                            iterator.remove();
+                        }
+                    }
+                }
+            }
+        }
+        return R.ok().add(orders);
+    }
+
+    @RequestMapping(value = "/order/AGV/nav/list/auth")
+    @ManagerAuth
+    public R AGVnavList(@RequestParam(required = false) String orderNo){
+        EntityWrapper<OrderPakout> wrapper = new EntityWrapper<>();
+        if (!Cools.isEmpty(orderNo)) {
+            wrapper.like("order_no", orderNo);
+        }
+        wrapper.le("settle", 2).eq("status", 1);
+        wrapper.eq("doc_type", OrderTypeEnum.STOCK.type);
         wrapper.orderBy("create_time", false);
         List<OrderPakout> orders = orderService.selectList(wrapper);
         // 淇濈暀鍑哄簱鍗�
@@ -117,7 +149,7 @@
                 DateUtils.convert(now),    // 鍗曟嵁鏃ユ湡
                 param.getDocType(),    // 鍗曟嵁绫诲瀷
                 null,    // 椤圭洰缂栧彿
-                null,    //
+                param.getItemName(),    // 鍖哄煙ID
                 null,    // 璋冩嫧椤圭洰缂栧彿
                 null,    // 鍒濆绁ㄦ嵁鍙�
                 null,    // 绁ㄦ嵁鍙�
@@ -191,7 +223,8 @@
         Date now = new Date();
         Long userId = getUserId();
         // 淇敼涓绘。
-        if (!param.getDocType().equals(order.getDocType())) {
+        if (!param.getDocType().equals(order.getDocType()) || !param.getItemName().equals(order.getItemName())) {
+            order.setItemName(param.getItemName());
             order.setDocType(param.getDocType());
             order.setUpdateBy(userId);
             order.setUpdateTime(now);
diff --git a/src/main/java/com/zy/asrs/controller/OutController.java b/src/main/java/com/zy/asrs/controller/OutController.java
index 48e8775..cd5a48c 100644
--- a/src/main/java/com/zy/asrs/controller/OutController.java
+++ b/src/main/java/com/zy/asrs/controller/OutController.java
@@ -6,8 +6,12 @@
 import com.core.common.Cools;
 import com.core.common.R;
 import com.core.exception.CoolException;
+import com.zy.api.enums.LocAreaType;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.service.*;
+import com.zy.asrs.service.impl.BasAreasServiceImpl;
+import com.zy.asrs.service.impl.BasStationServiceImpl;
+import com.zy.asrs.service.impl.LocCacheServiceImpl;
 import com.zy.common.model.LocDto;
 import com.zy.common.model.TaskDto;
 import com.zy.common.web.BaseController;
@@ -50,7 +54,12 @@
     private OrderPakoutService orderPakOutService;
     @Autowired
     private CheckOrderService checkOrderService;
-
+    @Autowired
+    private BasAreasService basAreasService;
+    @Autowired
+    private LocCacheServiceImpl locCacheService;
+    @Autowired
+    private BasStationServiceImpl basStationService;
 
 
     @PostMapping("/out/pakout/orderDetlIds/auth")
@@ -74,37 +83,46 @@
 
         List<LocDto> locDtos = new ArrayList<>();
 
-        Set<String> exist = new HashSet<>();
+        Set<String> exist = new HashSet<>();        
+
+
 
         // 鑾峰彇璁㈠崟涓昏〃
         OrderPakout orderPakOut = orderPakOutService.selectByNo(orderDetlPakouts.get(0).getOrderNo());
-        // 鐩樼偣鍗曞嚭搴�
-        if (orderPakOut.getDocType() == 8) {
+        // 澶囪揣鍗�
+        if (orderPakOut.getDocType() == 5) {
+            List<BasAreas> basAreas = basAreasService.selectList(new EntityWrapper<BasAreas>().in("whs_type_id", LocAreaType.SO_HOLDING.type, LocAreaType.EO_HOLDING.type));
+            List<Long> areaIds = basAreas.stream()
+                    .map(BasAreas::getId)
+                    .collect(Collectors.toList());
             for (OrderDetlPakout orderDetl : orderDetlPakouts) {
                 double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getWorkQty()).orElse(0.0D);
                 if (issued <= 0.0D) {
                     continue;
                 }
-                List<LocDetl> locDetls = locDetlService.queryStockAll(null, exist,orderDetl.getMatnr(), orderDetl.getBatch(),
-                        orderDetl.getBrand(),orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3());
+                List<LocDetl> locDetls = locDetlService.queryStockAllCache(null, exist,orderDetl.getMatnr(), orderDetl.getBatch(),
+                        orderDetl.getBrand(),orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3(),areaIds);
                 for (LocDetl locDetl : locDetls) {
                     if (issued > 0) {
                         LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
                                 issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued);
-                        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetl.getLocNo()));
+//                        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetl.getLocNo()));
+                        LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", locDetl.getLocNo()));
                         locDto.setFrozen(locDetl.getFrozen());
-                        locDto.setFrozenLoc(locMast.getFrozen());
-                        List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), 107);
+                        locDto.setFrozenLoc(locCache.getFrozen());
+                        List<BasStation> basStations = basStationService.selectList(new EntityWrapper<BasStation>().in("area_id", areaIds));
+                        List<String> collect = basStations.stream().map(BasStation::getDevNo).collect(Collectors.toList());
+                        locDto.setAgvStaNos(collect);
                         locDto.setBrand(orderDetl.getBrand());
+
                         locDto.setStandby1(orderDetl.getStandby1());
                         locDto.setStandby2(orderDetl.getStandby2());
                         locDto.setStandby3(orderDetl.getStandby3());
                         locDto.setBoxType1(orderDetl.getBoxType1());
                         locDto.setBoxType2(orderDetl.getBoxType2());
                         locDto.setBoxType3(orderDetl.getBoxType3());
-
-                        locDto.setStaNos(staNos);
                         locDtos.add(locDto);
+                        exist.add(locDetl.getLocNo());
                         // 鍓╀綑寰呭嚭鏁伴噺閫掑噺
                         issued = issued - locDetl.getAnfme();
                     } else {
@@ -114,7 +132,6 @@
                 if (issued > 0) {
                     LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued);
                     locDto.setBrand(orderDetl.getBrand());
-
                     locDto.setStandby1(orderDetl.getStandby1());
                     locDto.setStandby2(orderDetl.getStandby2());
                     locDto.setStandby3(orderDetl.getStandby3());
@@ -126,13 +143,17 @@
                 }
             }
         } else {
+            List<BasAreas> basAreas = basAreasService.selectList(new EntityWrapper<BasAreas>().in("whs_type_id", LocAreaType.AUTOMATED.type));
+            List<Long> areaIds = basAreas.stream()
+                    .map(BasAreas::getId)
+                    .collect(Collectors.toList());
             for (OrderDetlPakout orderDetl : orderDetlPakouts) {
                 double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getWorkQty()).orElse(0.0D);
                 if (issued <= 0.0D) {
                     continue;
                 }
                 List<LocDetl> locDetls = locDetlService.queryStockAll(null, exist,orderDetl.getMatnr(), orderDetl.getBatch(),
-                        orderDetl.getBrand(),orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3());
+                        orderDetl.getBrand(),orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3(),areaIds);
                 for (LocDetl locDetl : locDetls) {
                     if (issued > 0) {
                         LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
@@ -282,4 +303,56 @@
         return R.ok();
     }
 
+
+    @PostMapping("/out/agvPakOut/auth")
+    @ManagerAuth(memo = "璁㈠崟鍑哄簱")
+    public synchronized R agvPakOut(@RequestBody List<LocDto> locDtos) throws InterruptedException {
+        if (Cools.isEmpty(locDtos)) {
+            return R.parse(BaseRes.PARAM);
+        }
+        List<LocDto> locDtoArrayList = new ArrayList<>();
+        for (LocDto locDto : locDtos){
+            if (locDto.getFrozen()!=1 && locDto.getFrozenLoc()!=1){
+                locDtoArrayList.add(locDto);
+            }
+        }
+        locDtos = locDtoArrayList;
+        if (Cools.isEmpty(locDtos)) {
+            return R.parse("搴撳瓨/搴撲綅琚喕缁擄紝璇峰鐞嗗悗鍑哄簱锛侊紒锛�");
+        }
+        boolean lack = true;
+        for (LocDto locDto : locDtos) {
+            if (!locDto.isLack()) {
+                lack = false;
+                break;
+            }
+        }
+        if (lack) {
+            return R.error("搴撳瓨涓嶈冻");
+        }
+
+        Thread.sleep(1000L);
+
+        List<TaskDto> taskDtos = new ArrayList<>();
+        // 鏍规嵁 锛堝簱浣� & 鍑哄簱绔欙級 鍒嗙粍锛� 鐞嗘兂鐘舵�侊細涓�缁勪负涓�娆″嚭搴撲换鍔�
+        for (LocDto locDto : locDtos) {
+            if (locDto.isLack()) { continue; }
+            TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getAgvStaNo(), locDto);
+            if (TaskDto.has(taskDtos, taskDto)) {
+                TaskDto dto = TaskDto.find(taskDtos, taskDto);
+                assert dto != null;
+                dto.getLocDtos().addAll(taskDto.getLocDtos());
+            } else {
+                taskDtos.add(taskDto);
+            }
+        }
+        // -----------------------------------------------------------------------------------------------
+        for (TaskDto taskDto : taskDtos) {
+//            BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
+            BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", taskDto.getAgvStaNo()));
+            workService.agvStockOut(station, taskDto, getUserId());
+        }
+        return R.ok();
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/entity/OrderDetlPakout.java b/src/main/java/com/zy/asrs/entity/OrderDetlPakout.java
index 3af2a93..273c4df 100644
--- a/src/main/java/com/zy/asrs/entity/OrderDetlPakout.java
+++ b/src/main/java/com/zy/asrs/entity/OrderDetlPakout.java
@@ -90,7 +90,7 @@
      * 鎵瑰彿
      */
     @ApiModelProperty(value= "鎵瑰彿")
-    private String batch;
+    private String batch = "1";
 
     /**
      * 瑙勬牸
@@ -396,6 +396,12 @@
         this.memo = memo;
     }
 
+    //灏忔澗椤圭洰鏃犳壒娆★紝榛樿1鏂逛究鍚庣画淇敼
+    public void setBatch(String batch) {
+        this.batch = batch == null ? "1" : batch;
+    }
+
+
     public String getOrderId$(){
         OrderService service = SpringUtils.getBean(OrderService.class);
         Order order = service.selectById(this.orderId);
diff --git a/src/main/java/com/zy/asrs/entity/OrderPakout.java b/src/main/java/com/zy/asrs/entity/OrderPakout.java
index aaa08a9..bab33e7 100644
--- a/src/main/java/com/zy/asrs/entity/OrderPakout.java
+++ b/src/main/java/com/zy/asrs/entity/OrderPakout.java
@@ -6,6 +6,8 @@
 import com.baomidou.mybatisplus.enums.IdType;
 import com.core.common.Cools;
 import com.core.common.SpringUtils;
+import com.zy.asrs.entity.BasAreas;
+import com.zy.asrs.service.BasAreasService;
 import com.zy.asrs.service.DocTypeService;
 import com.zy.asrs.service.OrderSettleService;
 import com.zy.common.utils.Synchro;
@@ -66,7 +68,7 @@
     @TableField("item_id")
     private Long itemId;
 
-    @ApiModelProperty(value= "")
+    @ApiModelProperty(value= "鍖哄煙ID")
     @TableField("item_name")
     private String itemName;
 
@@ -352,6 +354,23 @@
 //            null    // 澶囨敞
 //    );
 
+
+    public String getItemName$() {
+        if (Cools.isEmpty(this.itemName)) {
+            return null;
+        }
+        try {
+            BasAreasService service = SpringUtils.getBean(BasAreasService.class);
+            BasAreas area = service.selectById(Long.parseLong(this.itemName));
+            if (!Cools.isEmpty(area)) {
+                return area.getName();
+            }
+        } catch (Exception e) {
+            return this.itemName;
+        }
+        return null;
+    }
+
     public String getDocType$(){
         DocTypeService service = SpringUtils.getBean(DocTypeService.class);
         DocType docType = service.selectById(this.docType);
diff --git a/src/main/java/com/zy/asrs/entity/TaskDetl.java b/src/main/java/com/zy/asrs/entity/TaskDetl.java
index 2467477..745b03b 100644
--- a/src/main/java/com/zy/asrs/entity/TaskDetl.java
+++ b/src/main/java/com/zy/asrs/entity/TaskDetl.java
@@ -1,6 +1,7 @@
 package com.zy.asrs.entity;
 
 import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
 import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableField;
 import java.text.SimpleDateFormat;
 import java.util.Date;
diff --git a/src/main/java/com/zy/asrs/entity/TaskDetlLog.java b/src/main/java/com/zy/asrs/entity/TaskDetlLog.java
index 52bb660..bf7ecb5 100644
--- a/src/main/java/com/zy/asrs/entity/TaskDetlLog.java
+++ b/src/main/java/com/zy/asrs/entity/TaskDetlLog.java
@@ -1,5 +1,7 @@
 package com.zy.asrs.entity;
 
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
 import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableField;
 import java.text.SimpleDateFormat;
 import java.util.Date;
@@ -26,6 +28,7 @@
 
     private static final long serialVersionUID = 1L;
 
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @TableField("log_id")
diff --git a/src/main/java/com/zy/asrs/entity/WaitPakin.java b/src/main/java/com/zy/asrs/entity/WaitPakin.java
index 51002e4..f4ea6f9 100644
--- a/src/main/java/com/zy/asrs/entity/WaitPakin.java
+++ b/src/main/java/com/zy/asrs/entity/WaitPakin.java
@@ -1,7 +1,9 @@
 package com.zy.asrs.entity;
 
 import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
 import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.core.common.SpringUtils;
@@ -21,6 +23,9 @@
 
     private static final long serialVersionUID = 1L;
 
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
     @ApiModelProperty(value= "鎵樼洏鏉$爜")
     private String zpallet;
 
diff --git a/src/main/java/com/zy/asrs/entity/WaitPakinLog.java b/src/main/java/com/zy/asrs/entity/WaitPakinLog.java
index d8c7306..5b3e4c6 100644
--- a/src/main/java/com/zy/asrs/entity/WaitPakinLog.java
+++ b/src/main/java/com/zy/asrs/entity/WaitPakinLog.java
@@ -20,6 +20,8 @@
 
     private static final long serialVersionUID = 1L;
 
+    private Long id;
+
     @ApiModelProperty(value= "鎵樼洏鏉$爜")
     private String zpallet;
 
diff --git a/src/main/java/com/zy/asrs/entity/param/OrderDomainParam.java b/src/main/java/com/zy/asrs/entity/param/OrderDomainParam.java
index 8721ace..2f7b6a8 100644
--- a/src/main/java/com/zy/asrs/entity/param/OrderDomainParam.java
+++ b/src/main/java/com/zy/asrs/entity/param/OrderDomainParam.java
@@ -17,6 +17,8 @@
 
     private String orderNo;
 
+    private String itemName;
+
     private List<OrderDetl> orderDetlList;
 
     private List<OrderDetlPakin> orderDetlPakinList;
diff --git a/src/main/java/com/zy/asrs/enums/OrderTypeEnum.java b/src/main/java/com/zy/asrs/enums/OrderTypeEnum.java
index beb6825..ec2aecb 100644
--- a/src/main/java/com/zy/asrs/enums/OrderTypeEnum.java
+++ b/src/main/java/com/zy/asrs/enums/OrderTypeEnum.java
@@ -1,25 +1,16 @@
 package com.zy.asrs.enums;
 
 public enum OrderTypeEnum {
+    //涓婃灦娲惧伐鍗�
+    PICKING(1, "涓婃灦娲惧伐鍗�"),
+    //澶囪揣璋冩嫧鍗�
+    TRANSFER(2, "澶囪揣璋冩嫧鍗�"),
+    INVENTORY(3, "鐩樼偣鍗�"),
+    ADJUSTMENT(4, "搴撳瓨璋冩暣鍗�"),
+    //澶囪揣鍗�
+    STOCK(5, "澶囪揣鍗�");
 
-    MATERIAL(1, "鐗╂枡妗f"),
-    OUT_NOTICE(2, "鍙戣揣閫氱煡鍗�"),
-    OTHER_IN(3, "鍏朵粬鍏ュ簱鍗�"),
-    IN_NOTICE(4, "鏀舵枡閫氱煡鍗�"),
-    PRODUCTION(5, "鐢熶骇姹囨姤鍗�"),
-    RETURN(6, "閫�璐ч�氱煡鍗�"),
-    OUT_APPLY(7, "鍑哄簱鐢宠鍗�"),
-    INVENTORY(8, "鐩樼偣鍗�"),
-    TRANSFER_IN(9, "璋冩嫧鍏ュ簱鍗�"),
-    ADJUSTMENT(10, "搴撳瓨璋冩暣鍗�"),
-    SALE_OUT(27, "鍙戣揣閫氱煡鍗�-閿�鍞嚭搴撳崟"),
-    PURCHASE_IN(28, "鏀舵枡閫氱煡鍗�-閲囪喘鍏ュ簱鍗�"),
-    PRODUCTION_IN(29, "鐢熶骇姹囨姤鍗�-鐢熶骇鍏ュ簱鍗�"),
-    PRODUCTION_OTHER_IN(30, "鐢熶骇姹囨姤鍗�-鍏朵粬鍏ュ簱鍗�"),
-    SALE_RETURN(31, "閫�璐ч�氱煡鍗�-閿�鍞��璐у崟"),
-    OTHER_OUT(32, "鍑哄簱鐢宠鍗�-鍏朵粬鍑哄簱鍗�"),
-    PRODUCT_IN(33, "鎴愬搧鍏ュ簱鍗�"),
-    PRODUCT_OUT(34, "鎴愬搧鍑哄簱鍗�");
+
 
     public Integer type;
     public String desc;
diff --git a/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java b/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
index bbf8ac8..641ed95 100644
--- a/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -73,7 +73,10 @@
     List<LocDetl> queryStock(@Param("matnr")String matnr, @Param("batch")String batch, @Param("orderNo")String orderNo, @Param("locNos") Set<String> locNos);
     List<LocDetl> queryStockAll(@Param("orderNo")String orderNo, @Param("locNos") Set<String> locNos, @Param("matnr")String matnr, @Param("batch")String batch,
                                 @Param("brand")String brand,@Param("standby1")String standby1,@Param("standby2")String standby2,
-                                @Param("standby3")String standby3,@Param("boxType1")String boxType1,@Param("boxType2")String boxType2,@Param("boxType3")String boxType3);
+                                @Param("standby3")String standby3,@Param("boxType1")String boxType1,@Param("boxType2")String boxType2,@Param("boxType3")String boxType3,@Param("areaIds")List<Long> areaIds);
+    List<LocDetl> queryStockAllCache(@Param("orderNo")String orderNo, @Param("locNos") Set<String> locNos, @Param("matnr")String matnr, @Param("batch")String batch,
+                                @Param("brand")String brand,@Param("standby1")String standby1,@Param("standby2")String standby2,
+                                @Param("standby3")String standby3,@Param("boxType1")String boxType1,@Param("boxType2")String boxType2,@Param("boxType3")String boxType3,@Param("areaIds")List<Long> areaIds);
 
     Double queryStockAnfme(String matnr, String batch);
 
diff --git a/src/main/java/com/zy/asrs/service/LocDetlService.java b/src/main/java/com/zy/asrs/service/LocDetlService.java
index 2bdc4f2..99d68d4 100644
--- a/src/main/java/com/zy/asrs/service/LocDetlService.java
+++ b/src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -67,7 +67,10 @@
 
     List<LocDetl> queryStock(String matnr, String batch, String orderNo, Set<String> locNos);
 
-    List<LocDetl> queryStockAll(String orderNo, Set<String> locNos,String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3);
+    List<LocDetl> queryStockAll(String orderNo, Set<String> locNos,String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3 ,List<Long> areaIds);
+
+    List<LocDetl> queryStockAllCache(String orderNo, Set<String> locNos,String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3 ,List<Long> areaIds);
+
 
     Double queryStockAnfme(String matnr, String batch);
 
diff --git a/src/main/java/com/zy/asrs/service/MobileService.java b/src/main/java/com/zy/asrs/service/MobileService.java
index 16715df..f2cf0e1 100644
--- a/src/main/java/com/zy/asrs/service/MobileService.java
+++ b/src/main/java/com/zy/asrs/service/MobileService.java
@@ -6,7 +6,6 @@
 import com.zy.asrs.entity.param.*;
 
 import java.util.Date;
-import java.util.Map;
 
 public interface MobileService {
 
@@ -107,5 +106,7 @@
      */
     void generateCRNOutTask(BasStation station, LocCache locCaches, Long userId);
 
-    R callEmptyCar(AgvCallParams params);
+    R callEmptyCar(AgvCallParams params, Long userId);
+
+    R collectionInCall(AgvCallParams params, Long userId);
 }
diff --git a/src/main/java/com/zy/asrs/service/WorkService.java b/src/main/java/com/zy/asrs/service/WorkService.java
index 361e76f..ab0c49e 100644
--- a/src/main/java/com/zy/asrs/service/WorkService.java
+++ b/src/main/java/com/zy/asrs/service/WorkService.java
@@ -1,6 +1,7 @@
 package com.zy.asrs.service;
 
 import com.zy.asrs.entity.BasDevp;
+import com.zy.asrs.entity.BasStation;
 import com.zy.asrs.entity.WaitPakin;
 import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.entity.param.EmptyPlateOutParam;
@@ -44,6 +45,8 @@
 
     void checkStockOut(BasDevp staNo, TaskDto taskDto, Long userId);
 
+    void agvStockOut(BasStation staNo, TaskDto taskDto, Long userId);
+
     /**
      * 绌烘澘鍏ュ簱
      * @return 搴撲綅鍙�
diff --git a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
index 38b96af..a09d2d6 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -131,8 +131,13 @@
 
 
     @Override
-    public List<LocDetl> queryStockAll(String orderNo, Set<String> locNos,String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3) {
-        return this.baseMapper.queryStockAll(orderNo,locNos, matnr, batch,brand,standby1,standby2,standby3,boxType1,boxType2,boxType3);
+    public List<LocDetl> queryStockAll(String orderNo, Set<String> locNos,String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3,List<Long> areaIds) {
+        return this.baseMapper.queryStockAll(orderNo,locNos, matnr, batch,brand,standby1,standby2,standby3,boxType1,boxType2,boxType3, areaIds);
+    }
+
+    @Override
+    public List<LocDetl> queryStockAllCache(String orderNo, Set<String> locNos,String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3,List<Long> areaIds) {
+        return this.baseMapper.queryStockAllCache(orderNo,locNos, matnr, batch,brand,standby1,standby2,standby3,boxType1,boxType2,boxType3, areaIds);
     }
 
     @Override
diff --git a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
index 15df4a6..e26145d 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -13,6 +13,8 @@
 import com.zy.asrs.entity.result.HIKResultDTO;
 import com.zy.asrs.enums.*;
 import com.zy.asrs.enums.OrderSettle;
+import com.zy.asrs.enums.LocAreaType;
+import com.zy.asrs.enums.LocStsType;
 import com.zy.asrs.mapper.LocMastMapper;
 import com.zy.asrs.mapper.ManLocDetlMapper;
 import com.zy.asrs.service.*;
@@ -626,6 +628,12 @@
                 waitPakin.setIoStatus("N");
                 waitPakin.setAnfme(detlDto.getAnfme());
                 waitPakin.setStatus("Y");
+                waitPakin.setStandby1(detlDto.getStandby1());
+                waitPakin.setStandby2(detlDto.getStandby2());
+                waitPakin.setStandby3(detlDto.getStandby3());
+                waitPakin.setBoxType1(detlDto.getBoxType1());
+                waitPakin.setBoxType2(detlDto.getBoxType2());
+                waitPakin.setBoxType3(detlDto.getBoxType3());
                 waitPakin.setAppeUser(userId);
                 waitPakin.setAppeTime(now);
                 waitPakin.setModiUser(userId);
@@ -1286,25 +1294,68 @@
     }
 
     @Override
-    public R callEmptyCar(AgvCallParams params) {
-        List<LocCache> locSts = locCacheService.selectList(new EntityWrapper<LocCache>().eq("loc_sts", LocStsType.LOC_STS_TYPE_D.type));
-        if (locSts.isEmpty()){
+    public R callEmptyCar(AgvCallParams params, Long userId) {
+
+        BasAreas basAreas = basAreasService.selectOne(new EntityWrapper<BasAreas>().eq("name", params.getOrgSite()));
+
+
+        List<LocCache> locCaches = locCacheService.selectList(new EntityWrapper<LocCache>()
+                .eq("loc_sts", LocStsType.LOC_STS_TYPE_D.type)
+                .eq("area_id", basAreas.getId())
+        );
+        if (locCaches.isEmpty()){
             throw new CoolException("鏆傛棤绌烘澘搴撲綅");
         }
 
-        HIKApiDTO hikApiDTO =new HIKApiDTO()
-                .setOrg(locSts.get(0).getLocNo())
-                .setOrgType("05")
-                .setTar(params.getTarSite())
-                .setTarType("05")
-                .setTaskType("GT5")
-                .setPriority("1")
-                .setCtnrType("2")
-                ;
-        HIKResultDTO hikResultDTO = sendAgvTask(hikApiDTO, HIKApiConstant.AGV_CALL_IN_PATH);
-        if (!hikResultDTO.isSuccess()){
-            return R.error(hikResultDTO.getMessage());
+        BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>()
+                .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)
+                .eq("dev_no", params.getTarSite()));
+        if (Objects.isNull(station)) {
+            throw new CoolException("绔欑偣姝e湪鎵ц浠诲姟锛侊紒");
         }
+        generateCacheOutTask(station, locCaches.get(0), userId);
+
+
+//        HIKApiDTO hikApiDTO =new HIKApiDTO()
+//                .setOrg(locCaches.get(0).getLocNo())
+//                .setOrgType("05")
+//                .setTar(params.getTarSite())
+//                .setTarType("05")
+//                .setTaskType("GT5")
+//                .setPriority("1")
+//                .setCtnrType("2")
+//                ;
+//        HIKResultDTO hikResultDTO = sendAgvTask(hikApiDTO, HIKApiConstant.AGV_CALL_IN_PATH);
+//        if (!hikResultDTO.isSuccess()){
+//            return R.error(hikResultDTO.getMessage());
+//        }
+
+        return R.ok();
+    }
+
+    @Override
+//    @Transactional(rollbackFor = Exception.class)
+    public R collectionInCall(AgvCallParams params, Long userId) {
+        if (Objects.isNull(params.getOrgSite())) {
+            throw new CoolException("婧愮珯鐐逛笉鑳戒负绌猴紒锛�");
+        }
+
+        List<Task> tasks = taskService.selectList(new EntityWrapper<Task>().eq("barcode", params.getBarcode()));
+        if (!tasks.isEmpty()){
+            throw new CoolException("鎵樼洏鐮佸凡鐢熸垚浠诲姟");
+        }
+
+        BasAreas basAreas = basAreasService.selectOne(new EntityWrapper<BasAreas>().eq("name", params.getTarSite()));
+
+        List<LocCache> locCaches = locCacheService.selectList(new EntityWrapper<LocCache>()
+                .in("loc_sts", LocStsType.LOC_STS_TYPE_O.type, LocStsType.LOC_STS_TYPE_D.type)
+                .eq("area_id", basAreas.getId())
+        );
+        if (locCaches.isEmpty()) {
+            throw new CoolException("褰撳墠鏆傛棤绌哄簱浣嶏紒锛�");
+        }
+
+        generateAgvTask("agv", locCaches.get(0), params.getOrgSite(), params.getBarcode(), userId);
 
         return R.ok();
     }
@@ -1493,10 +1544,10 @@
         task.setWrkNo(workNo)
                 .setIoTime(new Date())
                 .setWrkSts(11L) // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
-                .setIoType(101) // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
+                .setIoType(loc.getLocSts().equals("D") ? 110 : 101) // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
                 .setTaskType("agv")
                 .setIoPri(10D)
-                .setFullPlt("Y") // 婊℃澘锛歒
+                .setFullPlt(loc.getLocSts().equals("D") ? "N" : "Y") // 婊℃澘锛歒
                 .setPicking("N") // 鎷f枡
                 .setExitMk("N")// 閫�鍑�
                 .setStaNo(station.getDevNo())
@@ -1512,31 +1563,30 @@
             throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
         }
         List<LocDetl> detls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_id", loc.getId()));
-        if (Objects.isNull(detls) || detls.isEmpty()) {
-            throw new CoolException("鏁版嵁閿欒锛氬簱浣嶆槑缁嗕负绌猴紒锛�");
-        }
-        List<TaskDetl> taskDetls = new ArrayList<>();
-        detls.forEach(pakin -> {
-            TaskDetl wrkDetl = new TaskDetl();
-            BeanUtils.copyProperties(pakin, wrkDetl);
-            wrkDetl.setWrkNo(workNo)
-                    .setIoTime(new Date())
-                    .setOrderNo(pakin.getOrderNo())
-                    .setAnfme(pakin.getAnfme())
-                    .setZpallet(pakin.getZpallet())
-                    .setBatch(pakin.getBatch())
-                    .setMatnr(pakin.getMatnr())
-                    .setMaktx(pakin.getMaktx())
-                    .setAppeUser(userId)
-                    .setUnit(pakin.getUnit())
-                    .setModel(pakin.getModel())
-                    .setAppeTime(new Date())
-                    .setModiUser(userId);
-            taskDetls.add(wrkDetl);
-        });
-        //淇濆瓨宸ヤ綔妗f槑缁�
-        if (!taskDetlService.insertBatch(taskDetls)) {
-            throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+        if (!detls.isEmpty()) {
+            List<TaskDetl> taskDetls = new ArrayList<>();
+            detls.forEach(pakin -> {
+                TaskDetl wrkDetl = new TaskDetl();
+                BeanUtils.copyProperties(pakin, wrkDetl);
+                wrkDetl.setWrkNo(workNo)
+                        .setIoTime(new Date())
+                        .setOrderNo(pakin.getOrderNo())
+                        .setAnfme(pakin.getAnfme())
+                        .setZpallet(pakin.getZpallet())
+                        .setBatch(pakin.getBatch())
+                        .setMatnr(pakin.getMatnr())
+                        .setMaktx(pakin.getMaktx())
+                        .setAppeUser(userId)
+                        .setUnit(pakin.getUnit())
+                        .setModel(pakin.getModel())
+                        .setAppeTime(new Date())
+                        .setModiUser(userId);
+                taskDetls.add(wrkDetl);
+            });
+            //淇濆瓨宸ヤ綔妗f槑缁�
+            if (!taskDetlService.insertBatch(taskDetls)) {
+                throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+            }
         }
 
         loc.setLocSts(LocStsType.LOC_STS_TYPE_R.type);
@@ -1622,6 +1672,13 @@
         if (!taskDetlService.insertBatch(taskDetls)) {
             throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
         }
+
+        pakins.forEach(pakin -> {pakin.setIoStatus("Y");});
+
+        if (!waitPakinService.updateBatchById(pakins)) {
+            throw new CoolException("鏇存柊缁勬墭淇℃伅澶辫触");
+        }
+
         // 淇敼鐩爣搴撲綅鐘舵��
         if (loc.getLocSts().equals(LocStsType.LOC_STS_TYPE_O.type)) {
             loc.setLocSts(LocStsType.LOC_STS_TYPE_S.type); // S.鍏ュ簱棰勭害
@@ -1633,6 +1690,20 @@
         } else {
             throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細" + loc.getLocSts$());
         }
+
+        // 淇敼鐩爣绔欑偣淇℃伅
+        BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", orgSite));
+        if (station.getLocSts().equals("O")) {
+            station.setLocSts("R"); // S.鍏ュ簱棰勭害
+            station.setBarcode(barcode);
+            station.setModiTime(new Date());
+            station.setModiUser(userId);
+            if (!basStationService.updateById(station)) {
+                throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+            }
+        } else {
+            throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細" + station.getLocSts());
+        }
     }
 
 
diff --git a/src/main/java/com/zy/asrs/service/impl/TaskDetlLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TaskDetlLogServiceImpl.java
index 5c2334e..6dceeaa 100644
--- a/src/main/java/com/zy/asrs/service/impl/TaskDetlLogServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/TaskDetlLogServiceImpl.java
@@ -42,6 +42,6 @@
                 throw new CoolException("宸ヤ綔妗f槑缁嗗巻鍙蹭繚瀛樺け璐ワ紒锛�");
             }
         });
-        return false;
+        return true;
     }
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/TaskLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TaskLogServiceImpl.java
index cd66568..2c49ee8 100644
--- a/src/main/java/com/zy/asrs/service/impl/TaskLogServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/TaskLogServiceImpl.java
@@ -44,6 +44,6 @@
             throw new CoolException("浠诲姟鏃ュ織淇濆瓨澶辫触锛侊紒");
         }
 
-        return false;
+        return true;
     }
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
index a983123..9d075f5 100644
--- a/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
@@ -34,6 +34,8 @@
     private TaskService taskService;
     @Autowired
     private TaskDetlLogService taskDetlLogService;
+    @Autowired
+    private BasStationService basStationService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -154,6 +156,18 @@
                 locMast.setModiUser(userId);
                 locCacheService.updateById(locMast);
             }
+
+            BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", wrkMast.getSourceStaNo()));
+            if (station.getLocSts().equals("R")) {
+                station.setLocSts(wrkMast.getIoType().equals(1)?"F":"D");
+                station.setModiTime(new Date());
+                station.setModiUser(userId);
+                if (!basStationService.updateById(station)) {
+                    throw new CoolException("鏇存柊婧愮珯鐐圭姸鎬佸け璐�");
+                }
+            } else {
+                throw new CoolException("鏇存柊婧愮珯鐐圭姸鎬佸け璐ワ紝鐩爣搴撲綅鐘舵�侊細" + station.getLocSts());
+            }
             // 鍑哄簱鍙栨秷锛堜慨鏀规簮搴撲綅锛�
         } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14) {
             locNo = wrkMast.getSourceLocNo();
@@ -176,6 +190,18 @@
                 locMast.setModiUser(userId);
                 locCacheService.updateById(locMast);
             }
+
+            BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", wrkMast.getStaNo()));
+            if (station.getLocSts().equals("S")) {
+                station.setLocSts("O");
+                station.setModiTime(new Date());
+                station.setModiUser(userId);
+                if (!basStationService.updateById(station)) {
+                    throw new CoolException("鏇存柊婧愮珯鐐圭姸鎬佸け璐�");
+                }
+            } else {
+                throw new CoolException("鏇存柊婧愮珯鐐圭姸鎬佸け璐ワ紝鐩爣搴撲綅鐘舵�侊細" + station.getLocSts());
+            }
         } else {
             throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曞彇娑�");
         }
diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index c1caa89..caa1443 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -25,6 +25,7 @@
 import com.zy.common.service.CommonService;
 import com.zy.common.web.WcsController;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -91,6 +92,12 @@
 
     @Autowired
     private CheckOrderDetlService checkOrderDetlService;
+    @Autowired
+    private LocCacheServiceImpl locCacheService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private TaskDetlService taskDetlService;
 
     @Override
     @Transactional
@@ -578,6 +585,98 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void agvStockOut(BasStation 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("璁㈠崟鍑哄簱寮傚父锛岃鑱旂郴绠$悊鍛�");
+            }
+        }
+        // 鑾峰彇搴撲綅
+        LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", taskDto.getLocNo()));
+        int ioType = (taskDto.isAll() ? 101 : 103);
+        // 鐢熸垚宸ヤ綔鍙�
+        int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
+
+        Task task = new Task();
+        task.setWrkNo(workNo)
+                .setIoTime(new Date())
+                .setWrkSts(11L) // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+                .setIoType(ioType) // 鍏ュ嚭搴撶姸鎬�
+                .setTaskType("agv")
+                .setIoPri(10D)
+                .setFullPlt("Y") // 婊℃澘锛歒
+                .setPicking("N") // 鎷f枡
+                .setExitMk("N")// 閫�鍑�
+                .setStaNo(staNo.getDevNo())
+                .setSourceLocNo(locCache.getLocNo())
+                .setEmptyMk("N")// 绌烘澘
+                .setBarcode(locCache.getBarcode())// 鎵樼洏鐮�
+                .setLinkMis("N")
+                .setAppeUser(userId)
+                .setAppeTime(new Date())
+                .setModiUser(userId)
+                .setModiTime(new Date());
+        if (!taskService.insert(task)) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+        // 鐢熸垚宸ヤ綔妗f槑缁�
+        for (LocDto locDto : taskDto.getLocDtos()) {
+            if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) {
+                continue;
+            }
+//            OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
+            OrderDetl orderDetl = OrderInAndOutUtil.selectItem(Boolean.FALSE, locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getBrand()
+                    , locDto.getStandby1(), locDto.getStandby2(), locDto.getStandby3(), locDto.getBoxType1(), locDto.getBoxType2(), locDto.getBoxType3());
+//            if (orderDetl == null) {
+////                orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
+//                orderDetl = OrderInAndOutUtil.selectItem(Boolean.FALSE, locDto.getOrderNo(), locDto.getMatnr(), null);
+//
+//            }
+
+            TaskDetl wrkDetl = new TaskDetl();
+            BeanUtils.copyProperties(orderDetl, wrkDetl);
+            wrkDetl.setWrkNo(workNo)
+                    .setId(null)
+                    .setIoTime(new Date())
+                    .setOrderNo(locDto.getOrderNo())
+                    .setAnfme(locDto.getAnfme())
+                    .setZpallet(locCache.getBarcode())
+                    .setBatch(locDto.getBatch())
+                    .setAppeUser(userId)
+                    .setAppeTime(new Date())
+                    .setModiUser(userId);
+            if (!taskDetlService.insert(wrkDetl)) {
+                throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+            }
+//            // 淇敼璁㈠崟鏄庣粏
+//            if (!orderDetlService.increaseWorkQty(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) {
+//                throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触");
+//            }
+//            orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
+            OrderInAndOutUtil.increaseWorkQty(Boolean.FALSE, orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(),
+                    orderDetl.getBrand(), orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(),
+                    orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3()
+                    , locDto.getAnfme());
+            OrderInAndOutUtil.updateOrder(Boolean.FALSE, orderDetl.getOrderId(), 2L, userId);
+        }
+        // 淇敼搴撲綅鐘舵��:   F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓�
+
+        if (locCache.getLocSts().equals("F")) {
+            locCache.setLocSts(ioType == 101 ? "R" : "P");
+            locCache.setModiUser(userId);
+            locCache.setModiTime(now);
+            if (!locCacheService.updateById(locCache)) {
+                throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + taskDto.getLocNo());
+            }
+        } else {
+            throw new CoolException(taskDto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
+        }
+    }
+
+    @Override
     @Transactional
     public String emptyPlateIn(Integer devpNo, Long userId) {
         // 婧愮珯鐐圭姸鎬佹娴�
diff --git a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
index d72be91..47ff9cc 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -786,6 +786,42 @@
             if (!taskService.updateById(task)) {
                 throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
             }
+        } else if (task.getIoType().equals(110)) {
+            Date now = new Date();
+            LocCache locMast = locCacheService
+                    .selectOne(new EntityWrapper<LocCache>().eq("loc_no", task.getSourceLocNo()));
+            if (Objects.isNull(locMast)) {
+                throw new RuntimeException("鏁版嵁閿欒锛氬簱浣嶄俊鎭笉鑳戒负绌猴紒锛�");
+            }
+            // 淇敼婧愬簱浣嶇姸鎬� R ===>> O
+            if (locMast.getLocSts().equals(LocStsType.LOC_STS_TYPE_R.type)) {
+                locMast.setLocSts(LocStsType.LOC_STS_TYPE_O.type);
+                locMast.setBarcode("");
+                locMast.setModiTime(now);
+                locMast.setIoTime(now);
+                if (!locCacheService.updateById(locMast)) {
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    return FAIL.setMsg("鍏ㄦ澘鍑哄簱 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐�; [workNo=" + task.getWrkNo() + "],[locNo="
+                            + task.getSourceLocNo() + "]");
+                }
+            } else {
+                throw new CoolException("褰撳墠搴撲綅鐘舵��" + locMast.getLocSts() + ", 鏃犳硶鎵ц鍑哄簱鎿嶄綔锛侊紒");
+            }
+
+            BasStation devNo = basStationService
+                    .selectOne(new EntityWrapper<BasStation>().eq("dev_no", task.getStaNo()));
+            if (Objects.isNull(devNo)) {
+                throw new CoolException("绔欑偣锛�" + task.getSourceStaNo() + ", 涓嶅瓨鍦紒锛�");
+            }
+            devNo.setLocSts(LocStsType.LOC_STS_TYPE_D.type);
+            devNo.setModiTime(new Date());
+            if (!basStationService.updateById(devNo)) {
+                throw new CoolException("绔欑偣淇℃伅淇敼澶辫触锛侊紒");
+            }
+            task.setWrkSts(15L);
+            if (!taskService.updateById(task)) {
+                throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+            }
         } else {
 
         }
@@ -845,7 +881,7 @@
         Set<Long> list = apallet.stream().map(WaitPakin::getOrderId).collect(Collectors.toSet());
         List<OrderPakin> pakins = orderPakinService.selectList(new EntityWrapper<OrderPakin>().in("id", list));
         if (Objects.isNull(pakins) || pakins.isEmpty()) {
-            throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
+//            throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
         }
 
         return SUCCESS;
diff --git a/src/main/java/com/zy/common/model/LocDto.java b/src/main/java/com/zy/common/model/LocDto.java
index eaaffee..19410a6 100644
--- a/src/main/java/com/zy/common/model/LocDto.java
+++ b/src/main/java/com/zy/common/model/LocDto.java
@@ -47,6 +47,10 @@
 
     private Integer staNo;
 
+    private List<String> agvStaNos;
+
+    private String agvStaNo;
+
     public LocDto() {
     }
 
@@ -85,6 +89,13 @@
         }
     }
 
+    public void setAgvStaNos(List<String> agvStaNos) {
+        this.agvStaNos = agvStaNos;
+        if (!Cools.isEmpty(agvStaNos)) {
+            this.agvStaNo = agvStaNos.get(0);
+        }
+    }
+
     public String getFrozen$() {
         if (null == this.frozen){ return null; }
         switch (this.frozen){
diff --git a/src/main/java/com/zy/common/model/TaskDto.java b/src/main/java/com/zy/common/model/TaskDto.java
index 36a5aa3..a06a373 100644
--- a/src/main/java/com/zy/common/model/TaskDto.java
+++ b/src/main/java/com/zy/common/model/TaskDto.java
@@ -22,6 +22,10 @@
 
     private List<LocDto> locDtos;
 
+
+
+    private String agvStaNo;
+
     {
         locDtos = new ArrayList<>();
     }
@@ -37,6 +41,12 @@
         this.locDtos.add(locDto);
     }
 
+    public TaskDto(String locNo, String staNo, LocDto locDto) {
+        this.locNo = locNo;
+        this.agvStaNo = staNo;
+        this.locDtos.add(locDto);
+    }
+
     public TaskDto(String locNo, Integer staNo, List<LocDto> locDtos) {
         this.locNo = locNo;
         this.staNo = staNo;
diff --git a/src/main/resources/mapper/LocDetlMapper.xml b/src/main/resources/mapper/LocDetlMapper.xml
index e99489c..eb99aa4 100644
--- a/src/main/resources/mapper/LocDetlMapper.xml
+++ b/src/main/resources/mapper/LocDetlMapper.xml
@@ -552,6 +552,13 @@
                 #{item}
             </foreach>
         </if>
+        <if test="areaIds != null and areaIds.size > 0">
+            and a.area_id in
+            <foreach item="item" collection="areaIds" index="index"  separator="," open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
+
 
         order by
         DATEPART(yyyy,a.modi_time),DATEPART(mm,a.modi_time),DATEPART(dd,a.modi_time), a.anfme
@@ -611,6 +618,49 @@
         desc
     </select>
 
+    <select id="queryStockAllCache" resultMap="BaseResultMap">
+        select a.*
+        from asr_loc_detl a
+        left join asr_loc_cache b on a.loc_no = b.loc_no
+        where 1=1
+        and b.loc_sts = 'F'
+        and a.matnr = #{matnr}
+        <!--        <choose>-->
+        <!--            <when test="batch != null and batch != ''">-->
+        <!--                and a.batch = #{batch}-->
+        <!--            </when>-->
+        <!--            <otherwise>-->
+        <!--                and (a.batch IS NULL OR a.batch = '')-->
+        <!--            </otherwise>-->
+        <!--        </choose>-->
+        <if test="orderNo != null and orderNo != ''">
+            and a.order_no = #{orderNo}
+        </if>
+
+        <include refid="batchSeqA"></include>
+
+
+        <if test="locNos != null and locNos.size > 0">
+            and b.loc_no not in
+            <foreach item="item" collection="locNos" index="index"  separator="," open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="areaIds != null and areaIds.size > 0">
+            and a.area_id in
+            <foreach item="item" collection="areaIds" index="index"  separator="," open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
+
+
+        order by
+        DATEPART(yyyy,a.modi_time),DATEPART(mm,a.modi_time),DATEPART(dd,a.modi_time), a.anfme
+        desc,
+        NEWID()
+
+    </select>
+
     <select id="queryStockAnfme" resultType="java.lang.Double">
         select sum(anfme) as count from man_loc_detl
          where 1=1
diff --git a/src/main/webapp/static/js/orderPakout/agvOut.js b/src/main/webapp/static/js/orderPakout/agvOut.js
new file mode 100644
index 0000000..9559cd2
--- /dev/null
+++ b/src/main/webapp/static/js/orderPakout/agvOut.js
@@ -0,0 +1,386 @@
+var pageCurr;
+var insTb2;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).extend({
+    notice: 'notice/notice',
+}).use(['table','laydate', 'form', 'util', 'admin', 'notice', 'treeTable', 'xmSelect', 'tableMerge', 'tableX'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+    var util = layui.util;
+    var notice = layui.notice;
+    var treeTable = layui.treeTable;
+    var xmSelect = layui.xmSelect;
+    var tableMerge = layui.tableMerge;
+    var tableX = layui.tableX;
+
+    insTb2 = table.render({
+        elem: '#orderDetlTable',
+        headers: {token: localStorage.getItem('token')},
+        data: [],
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#orderDetToolbar',
+        height: 'full-120',
+        where: {doc_type: 5},
+        cols: [[
+            {type: 'checkbox'}
+            ,{type: 'numbers', title: '#'}
+            ,{field: 'orderNo', align: 'center',title: '鍗曟嵁缂栧彿', templet: '#orderNoTpl', width: 160}
+            ,{field: 'matnr', align: 'center',title: '鍟嗗搧缂栫爜', width: 160}
+            ,{field: 'maktx', align: 'center',title: '鍟嗗搧鍚嶇О', width: 200}
+            ,{field: 'standby1', align: 'center',title: '渚涘簲鍟嗕唬鐮�'}
+            ,{field: 'specs', align: 'center',title: '瑙勬牸'}
+            // ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
+            // ,{field: 'qty', align: 'center',title: '浣滀笟鏁伴噺', style: 'font-weight: bold'}
+            ,{field: 'enableQty', align: 'center',title: '寰呭嚭鏁伴噺', style: 'font-weight: bold'}
+            // ,{field: 'name', align: 'center',title: '鍚嶇О'}
+            // ,{field: 'model', align: 'center',title: '鍨嬪彿'}
+            ,{field: 'unit', align: 'center',title: '鍗曚綅', hide: true}
+            ,{field: 'barcode', align: 'center',title: '鍟嗗搧鏉$爜', hide: true}
+            // ,{field: 'supplier', align: 'center',title: '渚涘簲鍟�'}
+            // ,{field: 'unitPrice', align: 'center',title: '鍗曚环'}
+            // ,{field: 'itemNum', align: 'center',title: '鍝侀」鏁�'}
+            // ,{field: 'count', align: 'center',title: '鏁伴噺'}
+            // ,{field: 'weight', align: 'center',title: '閲嶉噺'}
+            // ,{field: 'status$', align: 'center',title: '鐘舵��'}
+            // ,{field: 'createBy$', align: 'center',title: '娣诲姞浜哄憳'}
+            // ,{field: 'createTime$', align: 'center',title: '娣诲姞鏃堕棿'}
+            // ,{field: 'updateBy$', align: 'center',title: '淇敼浜哄憳'}
+            // ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿'}
+            // ,{field: 'memo', align: 'center',title: '澶囨敞'}
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width: 160}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    /* 琛ㄦ牸2鎼滅储 */
+    form.on('submit(sensorTbSearch)', function (data) {
+        insTb2.reload({url: baseUrl + '/order/pakout/orderDetl/pakout/list/auth',where: data.field, page: {curr: 1}});
+        return false;
+    });
+
+    /* 琛ㄦ牸2澶村伐鍏锋爮鐐瑰嚮浜嬩欢 */
+    table.on('toolbar(orderDetlTable)', function (obj) {
+
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        if (obj.event === 'pakoutPreview') { // 娣诲姞
+            if (checkStatus.length === 0) {
+                layer.msg('璇烽�夋嫨鑷冲皯涓�鏉″嚭搴撴槑缁�', {icon: 2});
+                return;
+            }
+            pakoutPreview(checkStatus.map(function (d) {
+                return d.id;
+            }));
+        } else if (obj.event === 'del') { // 鍒犻櫎
+            var checkRows = table.checkStatus('sensorTable');
+            if (checkRows.data.length === 0) {
+                layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                return;
+            }
+            var ids = checkRows.data.map(function (d) {
+                return d.id;
+            });
+            doDelSensor({ids: ids});
+        }
+    });
+
+    /* 琛ㄦ牸2宸ュ叿鏉$偣鍑讳簨浠� */
+    table.on('tool(orderDetlTable)', function (obj) {
+        console.log(obj);
+        var data = obj.data;
+        switch (obj.event) {
+            // 鍑哄簱
+            case 'pakoutPreview':
+                pakoutPreview([data.id])
+                break;
+        }
+    });
+
+    function pakoutPreview(ids) {
+        let loadIndex = layer.load(2);
+        $.ajax({
+            url: baseUrl + "/out/pakout/preview/auth",
+            headers: {'token': localStorage.getItem('token')},
+            contentType: 'application/json;charset=UTF-8',
+            data: JSON.stringify(ids),
+            method: 'POST',
+            success: function (res) {
+                layer.close(loadIndex);
+                var tableCache;
+                if (res.code === 200){
+                    layer.open({
+                        type: 1
+                        ,title: false
+                        ,closeBtn: false
+                        ,offset: '50px'
+                        ,area: ['1200px', '700px']
+                        ,shade: 0.5
+                        ,shadeClose: false
+                        ,btn: ['绔嬪嵆鍑哄簱', '绋嶅悗澶勭悊']
+                        ,btnAlign: 'c'
+                        ,moveType: 1 //鎷栨嫿妯″紡锛�0鎴栬��1
+                        ,content: $('#pakoutPreviewBox').html()
+                        ,success: function(layero, index){
+                            stoPreTabIdx = table.render({
+                                elem: '#stoPreTab',
+                                data: res.data,
+                                height: 520,
+                                page: false,
+                                limit: Number.MAX_VALUE,
+                                cellMinWidth: 100,
+                                cols: [[
+                                    // {type: 'checkbox', merge: ['orderNo']},
+                                    {field: 'orderNo', title: '鍗曟嵁缂栧彿', merge: true, align: 'center'},
+                                    {field: 'title', title: '鍟嗗搧', merge: true, align: 'center', width: 250},
+                                    {field: 'standby1', align: 'center',title: '渚涘簲鍟嗕唬鐮�'},
+                                    {field: 'anfme', title: '鏁伴噺', align: 'center', width: 90, style: 'font-weight: bold'},
+                                    {field: 'locNo', title: '璐т綅', align: 'center', templet: '#locNoTpl'},
+                                    {field: 'frozen$', title: '鏄庣粏', align: 'center', width: 90, templet: '#locFrozen'},
+                                    {field: 'frozenLoc$', title: '搴撲綅', align: 'center', width: 90, templet: '#locFrozenLoc'},
+                                    {field: 'agvStaNos', align: 'center', title: '鍑哄簱绔�', merge: ['locNo'], templet: '#tbBasicTbStaNos'},
+                                    {type: 'checkbox', merge: ['locNo']},
+                                ]],
+                                done: function (res) {
+                                    tableMerge.render(this);
+                                    $('.layui-table-body.layui-table-main').css("overflow", "auto");
+                                    tableCache = tableData = table.cache.stoPreTab;
+                                }
+                            });
+                            // 淇敼鍑哄簱绔�
+                            form.on('select(tbBasicTbStaNos)', function (obj) {
+                                let index  = obj.othis.parents('tr').attr("data-index");
+                                let data = tableCache[index];
+                                for (let i = 0; i<tableCache.length; i++) {
+                                    if (tableCache[i].locNo === data.locNo) {
+                                        tableCache[i]['staNo'] = Number(obj.elem.value);
+                                    }
+                                }
+                                obj.othis.children().find("input").css("color", "blue");
+                                return false;
+                            });
+                            // 鎵归噺淇敼鍑哄簱绔�
+                            form.on('submit(batchModifySta)', function () {
+                                let stoPreTabData = layui.table.checkStatus('stoPreTab').data;
+                                if (stoPreTabData.length < 1) {
+                                    layer.msg("璇疯嚦灏戦�夋嫨涓�鏉′互涓婂悎骞舵暟鎹�", {icon: 7});
+                                    return false;
+                                }
+                                modifySta(stoPreTabData);
+                            });
+                            // 鎵归噺淇敼鍑哄簱绔� - 绔欑偣閫夋嫨
+                            function modifySta(stoPreTabData) {
+                                // 鍑哄簱绔欏彇浜ら泦
+                                let staBatchSelectVal = [];
+                                for(let i = 0; i<stoPreTabData.length; i++) {
+                                    let staNos = stoPreTabData[i].staNos;
+                                    if (staNos !== null) {
+                                        if (staBatchSelectVal.length === 0) {
+                                            staBatchSelectVal = staNos;
+                                        } else {
+                                            staBatchSelectVal = staBatchSelectVal.filter(val =>
+                                                {
+                                                    return new Set(staNos).has(val)
+                                                }
+                                            )
+                                        }
+                                    }
+                                }
+                                if (staBatchSelectVal.length === 0) {
+                                    layer.msg("鍑哄簱绔欐病鏈変氦闆嗭紝鏃犳硶鎵归噺淇敼", {icon: 2});
+                                    return;
+                                }
+                                admin.open({
+                                    type: 1,
+                                    area: '300px',
+                                    offset: 'auto',
+                                    title: '璇烽�夋嫨绔欑偣',
+                                    content: $('#staBatchSelectDialog').html(),
+                                    success: function (layero, ddIndex) {
+                                        // 娓叉煋涓嬫媺妗�
+                                        let template = Handlebars.compile($('#batchStaSelectTpl').html());
+                                        $('#batchSelectStaBox').html(template({list: staBatchSelectVal}));
+                                        // 纭
+                                        form.on('submit(staBatchSelectConfirm)', function (obj) {
+                                            let loadIdx = layer.load(2);
+                                            let batchSta = Number(obj.field.batchSta);
+                                            let arr = [];
+                                            for (let j = 0; j<stoPreTabData.length; j++) {
+                                                for (let i = 0; i<tableCache.length; i++) {
+                                                    if (tableCache[i].orderNo === stoPreTabData[j].orderNo
+                                                        && tableCache[i].matnr === stoPreTabData[j].matnr
+                                                        && tableCache[i].locNo === stoPreTabData[j].locNo) {
+                                                        tableCache[i]['staNo'] = batchSta;
+                                                        arr.push(i);
+                                                    }
+                                                }
+                                            }
+                                            stoPreTabIdx.reload({data: tableCache});
+                                            arr.forEach(item => {
+                                                $('div[lay-id=stoPreTab] tr[data-index="' + item + '"] .order-sta-select').val(batchSta);
+                                            });
+                                            layui.form.render('select');
+                                            arr.forEach(item => {
+                                                $('div[lay-id=stoPreTab] tr[data-index="' + item + '"] .layui-select-title').find("input").css("color", "blue");
+                                            });
+                                            layer.close(loadIdx); layer.close(ddIndex);
+                                            return false;
+                                        });
+                                        // 寮圭獥涓嶅嚭鐜版粴鍔ㄦ潯
+                                        $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                                        layui.form.render('select');
+                                    },
+                                })
+                            }
+
+                        }
+                        ,yes: function(index, layero){
+                            //鎸夐挳銆愮珛鍗冲嚭搴撱�戠殑鍥炶皟
+                            pakout(tableCache, index);
+                        }
+                        ,btn2: function(index, layero){
+                            //鎸夐挳銆愮◢鍚庡鐞嗐�戠殑鍥炶皟
+                            layer.close(index)
+                            //return false 寮�鍚浠g爜鍙姝㈢偣鍑昏鎸夐挳鍏抽棴
+                        }
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                } else {
+                    layer.msg(res.msg, {icon: 2})
+                }
+            }
+        })
+    }
+
+    function pakout(tableCache, layerIndex) {
+        // let loadIndex = layer.load(2);
+        notice.msg('姝e湪鐢熸垚鍑哄簱浠诲姟......', {icon: 4});
+        $.ajax({
+            url: baseUrl + "/out/agvPakOut/auth",
+            headers: {'token': localStorage.getItem('token')},
+            contentType: 'application/json;charset=UTF-8',
+            data: JSON.stringify(tableCache),
+            method: 'POST',
+            success: function (res) {
+                notice.destroy();
+                if (res.code === 200) {
+                    layer.close(layerIndex);
+                    layer.msg(res.msg, {icon: 1});
+                    insTb.reload({where: null});
+                    insTb2.reload({url: baseUrl + '/order/pakout/orderDetl/pakout/list/auth',where: null, page: {curr: 1}});
+                } else if (res.code === 403) {
+                    top.location.href = baseUrl + "/";
+                } else {
+                    layer.msg(res.msg, {icon: 2})
+                }
+            }
+        });
+    }
+
+
+
+    /* 鍒犻櫎璁㈠崟 */
+    function doDelSensor(obj) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/sensor/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: obj.ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        $(".layui-laypage-btn")[0].click();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    }else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+
+        });
+    }
+
+    // 淇敼鐘舵��
+    form.on('switch(statusSwitch)', function (obj) {
+        var index  = obj.othis.parents('tr').attr("data-index");
+        var data = tableData[index];
+        data[this.name] = obj.elem.checked?1:0;
+        http.post(baseUrl+"/sensor/edit/auth", {id: data.id, status: data[this.name]}, function (res) {
+            layer.msg(res.msg, {icon: 1});
+        })
+    })
+
+    window.pakoutPreview = pakoutPreview;
+
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        }
+    });
+}
+
+/**
+ * 涓�閿嚭搴�
+ */
+function autoOut(orderId) {
+    let loadIndex = layer.msg('璇锋眰涓�...', {icon: 16, shade: 0.01, time: false});
+    $.ajax({
+        url: baseUrl + "/out/pakout/orderDetlIds/auth",
+        headers: {'token': localStorage.getItem('token')},
+        data: { orderId : orderId },
+        method: 'POST',
+        success: function (res) {
+            layer.close(loadIndex);
+            if (res.code === 200){
+                pakoutPreview(res.data);
+            } else if (res.code === 403){
+                top.location.href = baseUrl+"/";
+            } else {
+                layer.msg(res.msg, {icon: 2});
+            }
+        }
+    })
+}
diff --git a/src/main/webapp/static/js/orderPakout/order.js b/src/main/webapp/static/js/orderPakout/order.js
index bedb1f0..b28b5ff 100644
--- a/src/main/webapp/static/js/orderPakout/order.js
+++ b/src/main/webapp/static/js/orderPakout/order.js
@@ -43,12 +43,13 @@
         cols: [[
             {type: 'numbers'},
             {field: 'orderNo', title: '鍗曟嵁缂栧彿', templet: '#orderNoTpl'},
+            {field: 'itemName$', align: 'center', title: '鍑哄簱鍖哄煙',  minWidth: 160, width: 160},
             {field: 'docType$', align: 'center', title: '绫诲瀷',  minWidth: 160, width: 160},
             {align: 'center', title: '鏄庣粏', toolbar: '#tbLook', minWidth: 160, width: 160},
             {field: 'createTime$', title: '鍒涘缓鏃堕棿', minWidth: 200, width: 200},
             {field: 'settle$', align: 'center', title: '鐘舵��', templet: '#settleTpl',  minWidth: 160, width: 160},
             {field: 'memo', align: 'center',title: '澶囨敞', hide: true},
-            {align: 'center', title: '鎿嶄綔', toolbar: '#operate', width: 180}
+            {align: 'center', title: '鎿嶄綔', toolbar: '#operate'}
         ]],
         request: {
             pageName: 'curr',
@@ -122,9 +123,10 @@
                         cellMinWidth: 100,
                         cols: [[
                             {type: 'numbers'},
-                            {field: 'matnr', title: '鍟嗗搧缂栫爜', width: 160},
-                            {field: 'maktx', title: '鍟嗗搧鍚嶇О', width: 160},
-                            {field: 'batch', title: '鎵瑰彿'},
+                            {field: 'matnr', title: '闆朵欢浠g爜', width: 160},
+                            {field: 'maktx', title: '闆朵欢鍚嶇О', width: 160},
+                            // {field: 'batch', title: '鎵瑰彿'},
+                            {field: 'standby1', title: '渚涘簲鍟嗕唬鐮�'},
                             {field: 'anfme', title: '鏁伴噺'},
                             {field: 'workQty', title: '浣滀笟鏁伴噺'},
                             {field: 'qty', title: '瀹屾垚鏁伴噺', style: 'font-weight: bold'},
@@ -173,6 +175,30 @@
             success: function (layero, dIndex) {
                 $(layero).children('.layui-layer-content').css('overflow', 'visible');
                 var isExpAdd = !expTpe;
+                // 鍔犺浇鍖哄煙涓嬫媺鏁版嵁
+                $.ajax({
+                    url: baseUrl + "/basAreas/list/auth",
+                    headers: {'token': localStorage.getItem('token')},
+                    data: { limit: 9999 },
+                    method: 'POST',
+                    success: function (res) {
+                        if (res.code === 200) {
+                            var areaSelect = $(layero).find('select[name="itemName"]');
+                            var html = '<option value="">璇烽�夋嫨鍖哄煙</option>';
+                            var records = res.data.records || res.data;
+                            for (var i = 0; i < records.length; i++) {
+                                var selected = (expTpe && expTpe.itemName == records[i].id) ? ' selected' : '';
+                                html += '<option value="' + records[i].id + '"' + selected + '>' + records[i].name + '</option>';
+                            }
+                            areaSelect.html(html);
+                            form.render('select', 'editForm');
+                        } else if (res.code === 403) {
+                            top.location.href = baseUrl + "/";
+                        } else {
+                            layer.msg(res.msg, {icon: 2});
+                        }
+                    }
+                });
                 // 鍥炴樉鏁版嵁
                 form.val('editForm', expTpe);
                 if (expTpe) {
@@ -204,6 +230,7 @@
                             orderId: Number(data.field.id),
                             docType: Number(data.field.docType),
                             orderNo: data.field.orderNo,
+                            itemName: data.field.itemName ? Number(data.field.itemName) : null,
                             orderDetlPakoutList: nList
                         }),
                         contentType:'application/json;charset=UTF-8',
@@ -234,9 +261,10 @@
                     cellMinWidth: 100,
                     cols: [[
                         {type: 'numbers', title: '#'},
-                        {field: 'matnr', title: '鍟嗗搧缂栫爜', width: 160},
-                        {field: 'maktx', title: '鍟嗗搧鍚嶇О', width: 200},
-                        {field: 'batch', title: '鎵瑰彿', edit: true},
+                        {field: 'matnr', title: '闆朵欢浠g爜', width: 160},
+                        {field: 'maktx', title: '闆朵欢鍚嶇О', width: 200},
+                        // {field: 'batch', title: '鎵瑰彿', edit: true},
+                        {field: 'standby1', title: '渚涘簲鍟嗕唬鐮�', edit: true},
                         {field: 'specs', title: '瑙勬牸'},
                         {field: 'anfme', title: '鏁伴噺(淇敼)', style: 'color: blue;font-weight: bold', edit: true, minWidth: 110, width: 110},
                         {field: 'workQty', title: '浣滀笟鏁伴噺',  minWidth: 100, width: 100},
diff --git a/src/main/webapp/static/js/orderPakout/out.js b/src/main/webapp/static/js/orderPakout/out.js
index a7ba719..3f61514 100644
--- a/src/main/webapp/static/js/orderPakout/out.js
+++ b/src/main/webapp/static/js/orderPakout/out.js
@@ -21,7 +21,7 @@
     insTb2 = table.render({
         elem: '#orderDetlTable',
         headers: {token: localStorage.getItem('token')},
-        url: baseUrl+'/order/pakout/orderDetl/pakout/list/auth',
+        data:[],
         page: true,
         limit: 15,
         limits: [15, 30, 50, 100, 200, 500],
@@ -82,7 +82,7 @@
 
     /* 琛ㄦ牸2鎼滅储 */
     form.on('submit(sensorTbSearch)', function (data) {
-        insTb2.reload({where: data.field, page: {curr: 1}});
+        insTb2.reload({url: baseUrl + '/order/pakout/orderDetl/pakout/list/auth',where: data.field, page: {curr: 1}});
         return false;
     });
 
@@ -294,7 +294,7 @@
                     layer.close(layerIndex);
                     layer.msg(res.msg, {icon: 1});
                     insTb.reload({where: null});
-                    insTb2.reload({where: null, page: {curr: 1}});
+                    insTb2.reload({url: baseUrl + '/order/pakout/orderDetl/pakout/list/auth',where: null, page: {curr: 1}});
                 } else if (res.code === 403) {
                     top.location.href = baseUrl + "/";
                 } else {
diff --git a/src/main/webapp/static/js/orderTablePakout.js b/src/main/webapp/static/js/orderTablePakout.js
index f7a4b63..ea857ed 100644
--- a/src/main/webapp/static/js/orderTablePakout.js
+++ b/src/main/webapp/static/js/orderTablePakout.js
@@ -73,7 +73,7 @@
     /* 琛ㄦ牸閲嶇疆 */
     form.on('submit(originTbReset)', function (data) {
         insTb.reload({where: null});
-        insTb2.reload({where: null, page: {curr: 1}});
+        insTb2.reload({url: baseUrl + '/order/pakout/orderDetl/pakout/list/auth',where: null, page: {curr: 1}});
         return false;
     });
 
@@ -101,7 +101,7 @@
 
         selObj = obj;
         obj.tr.addClass('layui-table-click').siblings().removeClass('layui-table-click');
-        insTb2.reload({where: {order_id: obj.data.id}, page: {curr: 1}});
+        insTb2.reload({url: baseUrl + '/order/pakout/orderDetl/pakout/list/auth',where: {order_id: obj.data.id}, page: {curr: 1}});
     });
 
     /* 鏄剧ず琛ㄥ崟寮圭獥 */
diff --git a/src/main/webapp/static/js/orderTablePakoutAGV.js b/src/main/webapp/static/js/orderTablePakoutAGV.js
new file mode 100644
index 0000000..c018ef4
--- /dev/null
+++ b/src/main/webapp/static/js/orderTablePakoutAGV.js
@@ -0,0 +1,174 @@
+var insTb;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"  // 閰嶇疆妯″潡鎵�鍦ㄧ殑鐩綍
+}).use(['table','laydate', 'form',  'admin', 'tableX'], function() {
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+    var tableX = layui.tableX;
+
+    /****************************************** 宸﹁竟琛� *************************************************/
+
+    insTb = table.render({
+        elem: '#originTable',
+        url: baseUrl + '/order/pakout/order/AGV/nav/list/auth',
+        height: 'full-120',
+        headers: {token: localStorage.getItem('token')},
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        page: false,
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'data': res.data
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        // toolbar: ['<p>',
+        //     '<button lay-event="add" class="layui-btn layui-btn-sm icon-btn"><i class="layui-icon">&#xe654;</i>娣诲姞</button>&nbsp;',
+        //     '<button lay-event="edit" class="layui-btn layui-btn-sm layui-btn-warm icon-btn"><i class="layui-icon">&#xe642;</i>淇敼</button>&nbsp;',
+        //     '<button lay-event="del" class="layui-btn layui-btn-sm layui-btn-danger icon-btn"><i class="layui-icon">&#xe640;</i>鍒犻櫎</button>',
+        //     '</p>'].join(''),
+        defaultToolbar: [],
+        cols: [[
+            // {type: 'numbers', title: '#'},
+            {field: 'orderTime', title: '鏃ユ湡', width: 160},
+            {field: 'orderNo', title: '鍗曟嵁缂栧彿', align: 'center', width: 155},
+            {field: 'docType$', title: '鍗曟嵁绫诲瀷', align: 'center'}
+        ]],
+        done: function (res, curr, count) {
+            $('#dictTable+.layui-table-view .layui-table-body tbody>tr:first').trigger('click');
+
+            // 缁戝畾榧犳爣鍙抽敭
+            tableX.bindCtxMenu('originTable', function (d) {
+                return [
+                    {
+                        icon: 'layui-icon layui-icon-ok',
+                        name: '涓�閿嚭搴�',
+                        click: function (d) {
+                            autoOut(d.id);
+                        }
+                    }
+                ]
+
+            })
+
+        }
+    });
+
+    /* 琛ㄦ牸鎼滅储 */
+    form.on('submit(originTableSearch)', function (data) {
+        insTb.reload({where: data.field});
+        return false;
+    });
+
+    /* 琛ㄦ牸閲嶇疆 */
+    form.on('submit(originTbReset)', function (data) {
+        insTb.reload({where: null});
+        insTb2.reload({url: baseUrl + '/order/pakout/orderDetl/pakout/list/auth',where: null, page: {curr: 1}});
+        return false;
+    });
+
+    /* 琛ㄦ牸澶村伐鍏锋爮鐐瑰嚮浜嬩欢 */
+    table.on('toolbar(originTable)', function (obj) {
+        if (obj.event === 'add') { // 娣诲姞
+            showEdit();
+        } else if (obj.event === 'edit') { // 淇敼
+            if (selObj == null) {
+                return;
+            }
+            showEdit(selObj.data);
+        } else if (obj.event === 'del') { // 鍒犻櫎
+            if (selObj == null) {
+                return;
+            }
+            doDel(selObj);
+        }
+    });
+
+
+    /* 鐩戝惉琛屽崟鍑讳簨浠� */
+    var selObj;
+    table.on('row(originTable)', function (obj) {
+
+        selObj = obj;
+        obj.tr.addClass('layui-table-click').siblings().removeClass('layui-table-click');
+        insTb2.reload({url: baseUrl + '/order/pakout/orderDetl/pakout/list/auth',where: {order_id: obj.data.id}, page: {curr: 1}});
+    });
+
+    /* 鏄剧ず琛ㄥ崟寮圭獥 */
+    function showEdit(mData) {
+        admin.open({
+            type: 1,
+            title: (mData ? '淇敼' : '娣诲姞') + '椤圭洰',
+            content: $('#hostEditDialog').html(),
+            success: function (layero, dIndex) {
+                // 鍥炴樉琛ㄥ崟鏁版嵁
+                form.val('hostEditForm', mData);
+                // 琛ㄥ崟鎻愪氦浜嬩欢
+                form.on('submit(hostEditSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/host/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            selObj = null;
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                insTb.reload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function doDel(obj) {
+        layer.confirm('纭畾瑕佸垹闄ゆ鍗曟嵁绫诲瀷鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/host/delete/one/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {param: JSON.stringify(obj.data)},
+                method: 'POST',
+                success: function (res) {
+                    selObj = null;
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.closeAll();
+                        insTb.reload();
+                        $('#dictTable+.layui-table-view .layui-table-body tbody>tr:first').trigger('click');
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+})
diff --git a/src/main/webapp/static/js/task/task.js b/src/main/webapp/static/js/task/task.js
index 6235ea8..3b86c71 100644
--- a/src/main/webapp/static/js/task/task.js
+++ b/src/main/webapp/static/js/task/task.js
@@ -171,7 +171,7 @@
                         title: '宸ヤ綔鍙凤細' + data.wrkNo,
                         shadeClose: true
                     }, function () {
-                        http.post(baseUrl + "/hand/control/wrkMast", {workNo: data.wrkNo, type: 2}, function (res) {
+                        http.post(baseUrl + "/task/control", {workNo: data.wrkNo, type: 2}, function (res) {
                             $(".layui-laypage-btn")[0].click();
                             layer.msg(data.wrkNo + res.msg);
                         })
@@ -182,7 +182,7 @@
                         title: '宸ヤ綔鍙凤細' + data.wrkNo,
                         shadeClose: true
                     }, function () {
-                        http.post(baseUrl + "/hand/control/wrkMast", {workNo: data.wrkNo, type: 2}, function (res) {
+                        http.post(baseUrl + "/task/control", {workNo: data.wrkNo, type: 2}, function (res) {
                             $(".layui-laypage-btn")[0].click();
                             layer.msg(data.wrkNo + res.msg);
                         })
@@ -193,7 +193,7 @@
             //  鎷f枡鍏ュ簱
             case 'pick':
                 layer.confirm('鎷f枡鍏ュ簱璇ョ瑪宸ヤ綔妗o紵', {title: '宸ヤ綔鍙凤細' + data.wrkNo, shadeClose: true}, function () {
-                    http.post(baseUrl + "/hand/control/wrkMast", {workNo: data.wrkNo, type: 3}, function (res) {
+                    http.post(baseUrl + "/task/control", {workNo: data.wrkNo, type: 3}, function (res) {
                         $(".layui-laypage-btn")[0].click();
                         layer.msg(data.wrkNo + res.msg);
                     })
diff --git a/src/main/webapp/views/orderPakout/agvOut.html b/src/main/webapp/views/orderPakout/agvOut.html
new file mode 100644
index 0000000..4e7d077
--- /dev/null
+++ b/src/main/webapp/views/orderPakout/agvOut.html
@@ -0,0 +1,332 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../static/css/originTable.css" media="all">
+    <style>
+        body {
+            color: #595959;
+            background-color: #f5f7f9;
+        }
+
+        .admin-form {
+            padding: 25px 30px 0 0 !important;
+            margin: 0 !important;
+        }
+
+        .layui-table-view .layui-table-cell .layui-select-title .layui-input {
+            height: 28px;
+            line-height: 28px;
+        }
+
+        .layui-table-view [lay-size="lg"] .layui-table-cell .layui-select-title .layui-input {
+            height: 40px;
+            line-height: 40px;
+        }
+
+        .layui-table-view [lay-size="lg"] .layui-table-cell .layui-select-title .layui-input {
+            height: 40px;
+            line-height: 40px;
+        }
+
+        .layui-table-view [lay-size="sm"] .layui-table-cell .layui-select-title .layui-input {
+            height: 20px;
+            line-height: 20px;
+        }
+
+        .layui-table-view [lay-size="sm"] .layui-table-cell .layui-btn-xs {
+            height: 18px;
+            line-height: 18px;
+        }
+
+        /* 鏉冮檺鎺у埗 */
+        #btn-pakoutPreview {
+            display: none;
+        }
+        /*#btn-delete {*/
+        /*    display: none;*/
+        /*}*/
+        /*.btn-edit {*/
+        /*    display: none;*/
+        /*}*/
+        /*.btn-more {*/
+        /*    display: none;*/
+        /*}*/
+    </style>
+</head>
+<body>
+<!-- 姝f枃寮�濮� -->
+<div class="layui-fluid" style="padding-bottom: 0;">
+    <div class="layui-row layui-col-space15">
+        <!-- 宸� -->
+        <div class="layui-col-md3" id="left-table">
+            <div class="layui-card">
+                <div class="layui-card-body" style="padding: 10px;">
+                    <form class="layui-form toolbar">
+                        <div class="layui-form-item">
+                            <div class="layui-inline" style="max-width: 300px;">
+                                <input name="orderNo" class="layui-input" placeholder="杈撳叆鍗曟嵁缂栧彿" autocomplete="off"/>
+                            </div>
+                            <div class="layui-inline">
+                                <button class="layui-btn icon-btn" lay-filter="originTableSearch" lay-submit>
+                                    <i class="layui-icon">&#xe615;</i>鎼滅储
+                                </button>
+                                <button class="layui-btn icon-btn" lay-filter="originTbReset" lay-submit>
+                                    <i class="layui-icon">&#xe666;</i>閲嶇疆
+                                </button>
+                            </div>
+                        </div>
+                    </form>
+                    <table id="originTable" lay-filter="originTable"></table>
+                </div>
+            </div>
+        </div>
+        <!-- 鍙� -->
+        <div class="layui-col-md9">
+            <div class="layui-card">
+                <div class="layui-card-body" style="padding: 10px;">
+                    <form class="layui-form toolbar">
+                        <div class="layui-form-item">
+                            <div class="layui-inline">
+                                <label class="layui-form-label">鍟嗗搧缂栫爜:</label>
+                                <div class="layui-input-inline">
+                                    <input name="matnr" class="layui-input" placeholder="鍟嗗搧缂栫爜"/>
+                                </div>
+                            </div>
+                            <div class="layui-inline">
+                                <label class="layui-form-label">鍟嗗搧鍚嶇О:</label>
+                                <div class="layui-input-inline">
+                                    <input name="maktx" class="layui-input" placeholder="鍟嗗搧鍚嶇О"/>
+                                </div>
+                            </div>
+                            <div class="layui-inline">
+                                <label class="layui-form-label">搴忓垪鐮�:</label>
+                                <div class="layui-input-inline">
+                                    <input name="batch" class="layui-input" placeholder="搴忓垪鐮�"/>
+                                </div>
+                            </div>
+                            <!--                            <div class="layui-inline">-->
+                            <!--                                <label class="layui-form-label">鐘舵��:</label>-->
+                            <!--                                <div class="layui-input-inline">-->
+                            <!--                                    <select name="isOnline">-->
+                            <!--                                        <option value="1">鍏呯數涓�</option>-->
+                            <!--                                        <option value="1">鍏呯數涓�</option>-->
+                            <!--                                        <option value="0">涓嶅湪鍏呯數</option>-->
+                            <!--                                    </select>-->
+                            <!--                                </div>-->
+                            <!--                            </div>-->
+                            <div class="layui-inline">&emsp;
+                                <button class="layui-btn icon-btn" lay-filter="sensorTbSearch" lay-submit>
+                                    <i class="layui-icon">&#xe615;</i>鎼滅储
+                                </button>
+                            </div>
+                        </div>
+                    </form>
+                    <table id="orderDetlTable" lay-filter="orderDetlTable"></table>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<!-- 澶村伐鍏锋爮 -->
+<script type="text/html" id="orderDetToolbar">
+
+    <!--    <div class="layui-btn-container">-->
+    <!--        <div class="layui-col-md3">-->
+    <!--            <select id="staNoSelect" lay-verify="required">-->
+    <!--                <option value="">璇烽�夋嫨绔欑偣</option>-->
+    <!--            </select>-->
+    <!--        </div>-->
+    <!--    </div>-->
+    <button class="layui-btn layui-btn-sm layui-btn-danger btn-pakoutPreview" id="btn-pakoutPreview" lay-event="pakoutPreview">鎵归噺鍑哄簱</button>
+
+</script>
+
+<!-- 琛屽伐鍏锋爮 -->
+<script type="text/html" id="operate">
+    {{#if (d.enableQty > 0){ }}
+    <a class="layui-btn layui-btn-xs layui-btn-danger btn-pakoutPreview" lay-event="pakoutPreview"><i class="layui-icon layui-icon-prev-circle"></i>鍑哄簱</a>
+    {{# } }}
+</script>
+
+<!-- 鍑哄簱棰勮 -->
+<script type="text/html" id="pakoutPreviewBox" style="display: none">
+    <div style="padding: 25px; line-height: 22px; background-color: #393D49; color: #fff; font-weight: 300;">
+        <span style="font-size: large; font-weight: bold">鍑哄簱棰勮</span>
+    </div>
+    <div class="layui-card">
+        <div class="layui-card-body" style="padding: 10px">
+            <table id="stoPreTab" lay-filter="stoPreTab"></table>
+        </div>
+        <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm" lay-filter="batchModifySta" lay-submit style="display: block;float: right;margin-right: 1rem">
+            鎵归噺淇敼
+        </button>
+    </div>
+</script>
+
+<script type="text/html" id="tbBasicTbStaNos">
+    <div class="ew-select-fixed">
+        <select class="order-sta-select" lay-filter="tbBasicTbStaNos">
+            {{#if (d.agvStaNos!=null) {}}
+            {{# for(let i=0; i<d.agvStaNos.length; i++) { }}
+            <option value="{{d.agvStaNos[i]}}">{{d.agvStaNos[i]}}</option>
+            {{# } }}
+            {{# } }}
+        </select>
+    </div>
+</script>
+
+<script type="text/html" id="staBatchSelectDialog">
+    <form class="layui-form" style="padding: 25px 50px 30px 50px;text-align: center">
+        <select id="batchSelectStaBox" name="batchSta" lay-vertype="tips" lay-verify="required" required="">
+        </select>
+        <button style="margin-top: 30px" class="layui-btn" lay-filter="staBatchSelectConfirm" lay-submit="">纭畾</button>
+    </form>
+</script>
+
+<script type="text/html" id="locNoTpl">
+    <span name="locNo"
+          {{# if( d.lack === false){ }}
+          class="layui-badge layui-badge-green" >{{d.locNo}}</span>
+    {{# } else { }}
+    class="layui-badge layui-badge-red" >搴撳瓨涓嶈冻</span>
+    {{# } }}
+</script>
+
+<script type="text/html" id="locFrozen">
+    <span name="frozen"
+          {{# if( d.lack === false){ }}
+          class="layui-badge layui-badge-green" >{{d.frozen$}}</span>
+    {{# } else { }}
+    class="layui-badge layui-badge-red" >鏈煡</span>
+    {{# } }}
+</script>
+
+<script type="text/html" id="locFrozenLoc">
+    <span name="frozenLoc"
+          {{# if( d.lack === false){ }}
+          class="layui-badge layui-badge-green" >{{d.frozenLoc$}}</span>
+    {{# } else { }}
+    class="layui-badge layui-badge-red" >鏈煡</span>
+    {{# } }}
+</script>
+
+<!-- 琛屾牱寮� -->
+<script type="text/html" id="orderNoTpl">
+    <span name="orderNo" class="layui-badge layui-badge-gray">{{d.orderNo}}</span>
+</script>
+<script type="text/html" id="statusTpl">
+    <input type="checkbox" name="status" value="{{d.status}}" lay-skin="switch" lay-text="姝e父|绂佺敤" lay-filter="statusSwitch" {{ d.status === 1 ? 'checked' : '' }}>
+</script>
+
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form">
+        <input name="id" type="hidden">
+        <input name="status" type="hidden">
+        <div class="layui-row">
+
+            <div class="layui-col-md4">
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">璁惧缂栧彿</label>
+                    <div class="layui-input-block">
+                        <input name="uuid" placeholder="璇疯緭鍏ヨ澶囩紪鍙�" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+            </div>
+            <div class="layui-col-md4">
+                <div class="layui-form-item">
+                    <label class="layui-form-label">璁惧绫诲瀷锛�</label>
+                    <div class="layui-input-block">
+                        <div id="modelSel" class="ew-xmselect-tree"></div>
+                    </div>
+                </div>
+            </div>
+            <div class="layui-col-md4">
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">鎵�灞為」鐩�: </label>
+                    <div class="layui-input-block cool-auto-complete">
+                        <input name="hostId" class="layui-input" style="display: none">
+                        <input id="hostId$" name="hostId$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇烽�夋嫨鎵�灞為」鐩�" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="hostQueryByhostId" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="hostQueryByhostIdSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="layui-col-md12">
+                <div class="layui-form-item">
+                    <label class="layui-form-label">璇︾粏鍦板潃</label>
+                    <div class="layui-input-block">
+                        <input name="addr" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�" class="layui-input">
+                    </div>
+                </div>
+            </div>
+            <hr class="layui-bg-gray">
+            <div class="layui-col-md12" style="text-align: center">
+                <iframe id="mapIframe" src="map.html" scrolling="no" frameborder="0"
+                        style="display: inline-block; width: 90%;height: 400px;margin: auto">
+                </iframe>
+            </div>
+
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/tools/md5.js"></script>
+<script type="text/javascript" src="../../static/js/orderTablePakoutAGV.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/orderPakout/agvOut.js" charset="utf-8"></script>
+<!--<script type="text/template" id="takeSiteSelectTemplate">-->
+<!--    {{#each data}}-->
+<!--    <option value="{{siteId}}">{{desc}}</option>-->
+<!--    {{/each}}-->
+<!--</script>-->
+<!-- 椤圭洰缂栬緫绐楀彛 -->
+<script type="text/html" id="hostEditDialog">
+    <form id="hostEditForm" lay-filter="hostEditForm" class="layui-form model-form">
+        <input name="id" type="hidden"/>
+        <div class="layui-form-item">
+            <label class="layui-form-label layui-form-required">椤圭洰鍚嶇О:</label>
+            <div class="layui-input-block">
+                <input name="name" placeholder="璇疯緭鍏ョ被鍨嬪悕绉�" class="layui-input"
+                       lay-verType="tips" lay-verify="required" required/>
+            </div>
+        </div>
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="hostEditSubmit" lay-submit>淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+
+</body>
+
+<script type="text/template" id="batchStaSelectTpl">
+    <option value="">閫夋嫨鍑哄簱绔�</option>
+    {{#each list}}
+    <option value="{{this}}">{{this}}</option>
+    {{/each}}
+</script>
+
+</html>
+
diff --git a/src/main/webapp/views/orderPakout/order.html b/src/main/webapp/views/orderPakout/order.html
index 7584f2e..f87b9bc 100644
--- a/src/main/webapp/views/orderPakout/order.html
+++ b/src/main/webapp/views/orderPakout/order.html
@@ -163,6 +163,14 @@
 <!--                lay-verify="required"-->
             </div>
         </div>
+        <div class="layui-form-item">
+            <label class="layui-form-label">鍑哄簱鍖哄煙锛�</label>
+            <div class="layui-input-block">
+                <select id="itemName" name="itemName" lay-verType="tips">
+                    <option value="">璇烽�夋嫨鍖哄煙</option>
+                </select>
+            </div>
+        </div>
         <div class="layui-form-item" style="position: relative;">
             <label class="layui-form-label">鍗曟嵁鏄庣粏锛�</label>
             <div class="layui-input-block">

--
Gitblit v1.9.1