From f14bb52ddab40bf589304b6b43331ddaccea69f6 Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期六, 27 十二月 2025 16:03:36 +0800
Subject: [PATCH] 1.完善AGV任务创建和下发 2.完善数据孪生 3.新增拍照获取照片 4.新增PDA配盘出库单立即出库 5.新增PDA配盘入库单下拉框获取订单号

---
 src/main/java/com/zy/asrs/task/AGVTaskReportScheduler.java         |   28 +
 src/main/java/com/zy/asrs/entity/param/CombParam.java              |    3 
 src/main/resources/mapper/WrkMastLogMapper.xml                     |    1 
 src/main/java/com/zy/asrs/controller/LocMastController.java        |   40 ++
 src/main/java/com/zy/asrs/entity/Task.java                         |    8 
 src/main/resources/mapper/LocMastMapper.xml                        |    1 
 src/main/java/com/zy/asrs/controller/DigitalTwinController.java    |  269 ++++++++--------
 src/main/webapp/static/js/stoMan/stoQue.js                         |   42 ++
 src/main/java/com/zy/asrs/entity/digitaltwin/LocPicDto.java        |   13 
 src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java         |    4 
 src/main/webapp/views/stoMan/stoQue.html                           |    1 
 src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java      |   21 
 src/main/resources/application-dev.yml                             |    5 
 src/main/java/com/zy/common/model/DetlDto.java                     |    4 
 src/main/java/com/zy/asrs/controller/MesController.java            |   16 
 src/main/java/com/zy/asrs/controller/OutController.java            |  165 ++++++++--
 src/main/java/com/zy/asrs/entity/LocMast.java                      |    3 
 src/main/resources/mapper/ViewDigitalTwinMapper.xml                |   29 +
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java        |    8 
 src/main/java/com/zy/asrs/entity/WrkMast.java                      |    3 
 src/main/java/com/zy/common/model/TaskDto.java                     |    6 
 src/main/resources/mapper/WrkMastMapper.xml                        |    1 
 src/main/java/com/zy/asrs/entity/WrkMastLog.java                   |    3 
 src/main/java/com/zy/asrs/task/OrderSyncScheduler.java             |    2 
 src/main/java/com/zy/asrs/task/handler/AGVTaskReportHandler.java   |   33 +
 src/main/java/com/zy/asrs/controller/MobileController.java         |  207 ++++++++++--
 src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java  |    1 
 src/main/java/com/zy/asrs/entity/rcs/RcsTaskSubmit.java            |    2 
 src/main/java/com/zy/asrs/entity/digitaltwin/DtOrderVo.java        |   10 
 src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java |    4 
 30 files changed, 670 insertions(+), 263 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/DigitalTwinController.java b/src/main/java/com/zy/asrs/controller/DigitalTwinController.java
index db5a98b..73de14d 100644
--- a/src/main/java/com/zy/asrs/controller/DigitalTwinController.java
+++ b/src/main/java/com/zy/asrs/controller/DigitalTwinController.java
@@ -31,16 +31,16 @@
 //    @ManagerAuth
     public R overview(@RequestParam(required = false) String areaId){
 
-        //digitalTwinService.overview(areaId);
+        DtOverviewVo dtOverviewVo = digitalTwinService.overview(areaId);
 
-        DtOverviewVo dtOverviewVo = DtOverviewVo.builder()
-                .totalLoc(999)
-                .useLoc(900)
-                .idleLoc(99)
-                .todayOutbound(160)
-                .todayWarehousing(170)
-                .remainingStock(180)
-                .build();
+//        DtOverviewVo dtOverviewVo = DtOverviewVo.builder()
+//                .totalLoc(999)
+//                .useLoc(900)
+//                .idleLoc(99)
+//                .todayOutbound(160)
+//                .todayWarehousing(170)
+//                .remainingStock(180)
+//                .build();
 
         return R.ok().add(dtOverviewVo);
     }
@@ -57,19 +57,19 @@
     public R recentOrder(@RequestParam(required = false) String startDate,
                          @RequestParam(required = false) String endDate){
 
-//        digitalTwinService.order(startDate, endDate);
+        List<DtOrderVo> orderVoList = digitalTwinService.order(startDate, endDate);
 
-        DtOrderVo dtOrderVo = DtOrderVo.builder()
-                .orderDate("2025-10-22")
-                .orderNum(156)
-                .build();
-        DtOrderVo dtOrderVo2 = DtOrderVo.builder()
-                .orderDate("2025-10-23")
-                .orderNum(166)
-                .build();
-        List<DtOrderVo> orderVoList = new ArrayList<>();
-        orderVoList.add(dtOrderVo);
-        orderVoList.add(dtOrderVo2);
+//        DtOrderVo dtOrderVo = DtOrderVo.builder()
+//                .orderDate("2025-10-22")
+//                .orderNum(156)
+//                .build();
+//        DtOrderVo dtOrderVo2 = DtOrderVo.builder()
+//                .orderDate("2025-10-23")
+//                .orderNum(166)
+//                .build();
+//        List<DtOrderVo> orderVoList = new ArrayList<>();
+//        orderVoList.add(dtOrderVo);
+//        orderVoList.add(dtOrderVo2);
 
         return R.ok().add(orderVoList);
     }
@@ -88,19 +88,19 @@
                            @RequestParam(required = false) String startDate,
                          @RequestParam(required = false) String endDate){
 
-//        digitalTwinService.recentLoc(areaId, startDate, endDate);
+        List<DtLocVo> locVoList = digitalTwinService.recentLoc(areaId, startDate, endDate);
 
-        DtLocVo dtLocVo = DtLocVo.builder()
-                .locDate("2025-10-22")
-                .idleNum(208)
-                .build();
-        DtLocVo dtLocVo2 = DtLocVo.builder()
-                .locDate("2025-10-23")
-                .idleNum(177)
-                .build();
-        List<DtLocVo> locVoList = new ArrayList<>();
-        locVoList.add(dtLocVo);
-        locVoList.add(dtLocVo2);
+//        DtLocVo dtLocVo = DtLocVo.builder()
+//                .locDate("2025-10-22")
+//                .idleNum(208)
+//                .build();
+//        DtLocVo dtLocVo2 = DtLocVo.builder()
+//                .locDate("2025-10-23")
+//                .idleNum(177)
+//                .build();
+//        List<DtLocVo> locVoList = new ArrayList<>();
+//        locVoList.add(dtLocVo);
+//        locVoList.add(dtLocVo2);
 
         return R.ok().add(locVoList);
     }
@@ -119,21 +119,22 @@
                            @RequestParam(required = false) String startDate,
                            @RequestParam(required = false) String endDate){
 
-//        digitalTwinService.inAndOutBound(areaId, startDate, endDate);
+        List<DtInAndOutBoundVo> inAndOutBoundVoList = digitalTwinService.inAndOutBound(areaId, startDate, endDate);
 
-        DtInAndOutBoundVo dtInAndOutBoundVo = DtInAndOutBoundVo.builder()
-                .boundDate("2025-10-22")
-                .inBoundNum(237)
-                .outBoundNum(487)
-                .build();
-        DtInAndOutBoundVo dtInAndOutBoundVo2 = DtInAndOutBoundVo.builder()
-                .boundDate("2025-10-23")
-                .inBoundNum(187)
-                .outBoundNum(287)
-                .build();
-        List<DtInAndOutBoundVo> inAndOutBoundVoList = new ArrayList<>();
-        inAndOutBoundVoList.add(dtInAndOutBoundVo);
-        inAndOutBoundVoList.add(dtInAndOutBoundVo2);
+
+//        DtInAndOutBoundVo dtInAndOutBoundVo = DtInAndOutBoundVo.builder()
+//                .boundDate("2025-10-22")
+//                .inBoundNum(237)
+//                .outBoundNum(487)
+//                .build();
+//        DtInAndOutBoundVo dtInAndOutBoundVo2 = DtInAndOutBoundVo.builder()
+//                .boundDate("2025-10-23")
+//                .inBoundNum(187)
+//                .outBoundNum(287)
+//                .build();
+//        List<DtInAndOutBoundVo> inAndOutBoundVoList = new ArrayList<>();
+//        inAndOutBoundVoList.add(dtInAndOutBoundVo);
+//        inAndOutBoundVoList.add(dtInAndOutBoundVo2);
 
         return R.ok().add(inAndOutBoundVoList);
     }
@@ -152,31 +153,31 @@
                              @RequestParam(required = false) Integer pageIndex,
                              @RequestParam(required = false) Integer pageSize){
 
-//        digitalTwinService.recentDetainMat(areaId, overDayNum, pageIndex, pageSize);
+        List<DtDetainMatVo> detainMatVoList = digitalTwinService.recentDetainMat(areaId, overDayNum, pageIndex, pageSize);
 
-        DtDetainMatVo dtDetainMatVo = DtDetainMatVo.builder()
-                .belongAreaId("A1")
-                .belongAreaName("鍒�鍏峰簱")
-                .matId("mat10001")
-                .matName("閬撳叿鎶�")
-                .lokId("loc1001")
-                .lokName("搴撲綅10001")
-                .detainTime(765)
-                .inBoundTime("2025-10-11T11:15:16")
-                .build();
-        DtDetainMatVo dtDetainMatVo2 = DtDetainMatVo.builder()
-                .belongAreaId("A1")
-                .belongAreaName("鍒�鍏峰簱")
-                .matId("mat10002")
-                .matName("閬撳叿鎶�")
-                .lokId("loc1002")
-                .lokName("搴撲綅10002")
-                .detainTime(665)
-                .inBoundTime("2025-10-10T11:15:16")
-                .build();
-        List<DtDetainMatVo> detainMatVoList = new ArrayList<>();
-        detainMatVoList.add(dtDetainMatVo);
-        detainMatVoList.add(dtDetainMatVo2);
+//        DtDetainMatVo dtDetainMatVo = DtDetainMatVo.builder()
+//                .belongAreaId("A1")
+//                .belongAreaName("鍒�鍏峰簱")
+//                .matId("mat10001")
+//                .matName("閬撳叿鎶�")
+//                .lokId("loc1001")
+//                .lokName("搴撲綅10001")
+//                .detainTime(765)
+//                .inBoundTime("2025-10-11T11:15:16")
+//                .build();
+//        DtDetainMatVo dtDetainMatVo2 = DtDetainMatVo.builder()
+//                .belongAreaId("A1")
+//                .belongAreaName("鍒�鍏峰簱")
+//                .matId("mat10002")
+//                .matName("閬撳叿鎶�")
+//                .lokId("loc1002")
+//                .lokName("搴撲綅10002")
+//                .detainTime(665)
+//                .inBoundTime("2025-10-10T11:15:16")
+//                .build();
+//        List<DtDetainMatVo> detainMatVoList = new ArrayList<>();
+//        detainMatVoList.add(dtDetainMatVo);
+//        detainMatVoList.add(dtDetainMatVo2);
 
         return R.ok().add(detainMatVoList);
     }
@@ -231,76 +232,74 @@
     @RequestMapping(value = "/warehouseDetail")
 //    @ManagerAuth
     public R warehouseDetail(@RequestParam(required = false) String areaId){
+        List<DtLocDetailVo> dtLocDetailVoList = digitalTwinService.warehouseDetail(areaId);
 
-//        digitalTwinService.warehouseDetail(areaId);
-
-        List<DtLocDetailVo> dtLocDetailVoList = new ArrayList<>();
-        DtLocDetailVo dtLocDetailVo = new DtLocDetailVo();
-        dtLocDetailVo.setLocNo("CA0100202");
-        dtLocDetailVo.setLocSts("O");
-        dtLocDetailVo.setAreaId(10010L);
-        dtLocDetailVo.setAreaName("鍒�鍏峰簱");
-        dtLocDetailVo.setRow1(1);
-        dtLocDetailVo.setBay1(2);
-        dtLocDetailVo.setLev1(2);
-
-        LocMast locMast = new LocMast();
-        locMast.setLocNo("CA0100202");
-        locMast.setLocSts("O");
-        locMast.setRow1(1);
-        locMast.setBay1(2);
-        locMast.setLev1(2);
-        dtLocDetailVo.setLocMast(locMast);
-
-        LocDetl locDetl = new LocDetl();
-        locDetl.setLocNo("CA0100202");
-        locDetl.setAreaId(10010L);
-        locDetl.setAreaName("鍒�鍏峰簱");
-        locDetl.setMatnr("mat10001");
-        locDetl.setMaktx("鍒�鎶�");
-        dtLocDetailVo.setLocDetl(locDetl);
-        dtLocDetailVoList.add(dtLocDetailVo);
-
-
-        DtLocDetailVo dtLocDetailVo2 = new DtLocDetailVo();
-        dtLocDetailVo2.setLocNo("CA0100202");
-        dtLocDetailVo2.setLocSts("O");
-        dtLocDetailVo2.setAreaId(10010L);
-        dtLocDetailVo2.setAreaName("鍒�鍏峰簱");
-        dtLocDetailVo2.setRow1(1);
-        dtLocDetailVo2.setBay1(2);
-        dtLocDetailVo2.setLev1(2);
-
-        LocMast locMast2 = new LocMast();
-        locMast2.setLocNo("CA0100203");
-        locMast2.setLocSts("O");
-        locMast2.setRow1(1);
-        locMast2.setBay1(2);
-        locMast2.setLev1(3);
-        dtLocDetailVo2.setLocMast(locMast2);
-
-        LocDetl locDetl2 = new LocDetl();
-        locDetl2.setLocNo("CA0100203");
-        locDetl2.setAreaId(10010L);
-        locDetl2.setAreaName("鍒�鍏峰簱");
-        locDetl2.setMatnr("mat10001");
-        locDetl2.setMaktx("鍒�鎶�");
-        dtLocDetailVo2.setLocDetl(locDetl2);
-        dtLocDetailVoList.add(dtLocDetailVo2);
-
-
+        return R.ok().add(dtLocDetailVoList);
+    }
+//        List<DtLocDetailVo> dtLocDetailVoList = new ArrayList<>();
+//        DtLocDetailVo dtLocDetailVo = new DtLocDetailVo();
+//        dtLocDetailVo.setLocNo("CA0100202");
+//        dtLocDetailVo.setLocSts("O");
+//        dtLocDetailVo.setAreaId(10010L);
+//        dtLocDetailVo.setAreaName("鍒�鍏峰簱");
+//        dtLocDetailVo.setRow1(1);
+//        dtLocDetailVo.setBay1(2);
+//        dtLocDetailVo.setLev1(2);
+//
+//        LocMast locMast = new LocMast();
+//        locMast.setLocNo("CA0100202");
+//        locMast.setLocSts("O");
+//        locMast.setRow1(1);
+//        locMast.setBay1(2);
+//        locMast.setLev1(2);
+//        dtLocDetailVo.setLocMast(locMast);
+//
+//        LocDetl locDetl = new LocDetl();
+//        locDetl.setLocNo("CA0100202");
+//        locDetl.setAreaId(10010L);
+//        locDetl.setAreaName("鍒�鍏峰簱");
+//        locDetl.setMatnr("mat10001");
+//        locDetl.setMaktx("鍒�鎶�");
+//        dtLocDetailVo.setLocDetl(locDetl);
+//        dtLocDetailVoList.add(dtLocDetailVo);
+//
+//
+//        DtLocDetailVo dtLocDetailVo2 = new DtLocDetailVo();
+//        dtLocDetailVo2.setLocNo("CA0100202");
+//        dtLocDetailVo2.setLocSts("O");
+//        dtLocDetailVo2.setAreaId(10010L);
+//        dtLocDetailVo2.setAreaName("鍒�鍏峰簱");
+//        dtLocDetailVo2.setRow1(1);
+//        dtLocDetailVo2.setBay1(2);
+//        dtLocDetailVo2.setLev1(2);
+//
+//        LocMast locMast2 = new LocMast();
+//        locMast2.setLocNo("CA0100203");
+//        locMast2.setLocSts("O");
+//        locMast2.setRow1(1);
+//        locMast2.setBay1(2);
+//        locMast2.setLev1(3);
+//        dtLocDetailVo2.setLocMast(locMast2);
+//
 //        LocDetl locDetl2 = new LocDetl();
-//        locDetl2.setLocNo("1001");
+//        locDetl2.setLocNo("CA0100203");
 //        locDetl2.setAreaId(10010L);
 //        locDetl2.setAreaName("鍒�鍏峰簱");
 //        locDetl2.setMatnr("mat10001");
 //        locDetl2.setMaktx("鍒�鎶�");
+//        dtLocDetailVo2.setLocDetl(locDetl2);
+//        dtLocDetailVoList.add(dtLocDetailVo2);
 //
-////        List<LocDetl> locDetlList = new ArrayList<>();
-////        locDetlList.add(locDetl);
-////        locDetlList.add(locDetl2);
-
-        return R.ok().add(dtLocDetailVoList);
-    }
+//
+////        LocDetl locDetl2 = new LocDetl();
+////        locDetl2.setLocNo("1001");
+////        locDetl2.setAreaId(10010L);
+////        locDetl2.setAreaName("鍒�鍏峰簱");
+////        locDetl2.setMatnr("mat10001");
+////        locDetl2.setMaktx("鍒�鎶�");
+////
+//////        List<LocDetl> locDetlList = new ArrayList<>();
+//////        locDetlList.add(locDetl);
+//////        locDetlList.add(locDetl2);
 
 }
diff --git a/src/main/java/com/zy/asrs/controller/LocMastController.java b/src/main/java/com/zy/asrs/controller/LocMastController.java
index 723e3f6..32fc68c 100644
--- a/src/main/java/com/zy/asrs/controller/LocMastController.java
+++ b/src/main/java/com/zy/asrs/controller/LocMastController.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
@@ -12,6 +13,7 @@
 import com.core.common.R;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.digitaltwin.LocPicDto;
 import com.zy.asrs.entity.param.LocMastInitParam;
 import com.zy.asrs.mapper.LocDetlMapper;
 import com.zy.asrs.service.*;
@@ -20,6 +22,7 @@
 import com.zy.common.service.CommonService;
 import com.zy.common.web.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -46,6 +49,8 @@
     private WrkMastLogService wrkMastLogService;
     @Resource
     private WrkDetlLogService wrkDetlLogService;
+    @Value("${wcs.url}")
+    private String WCS_URL;
 
     @RequestMapping(value = "/locMast/init/pwd")
     public R locMastInitPwd(@RequestParam(required = false) String pwd) {
@@ -335,4 +340,39 @@
             return R.error("鍒濆鍖栧け璐�===>" + e.getMessage());
         }
     }
+
+    @GetMapping("/locMast/picUrl")
+    @ManagerAuth
+    public R getPicUrl(@RequestParam String locNo) {
+        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                .eq("loc_no", locNo));
+        if (locMast == null) {
+            return R.error();
+        }
+
+        List<LocPicDto> list = new ArrayList<>();
+        String picStr = locMast.getPic();
+        if (Cools.isEmpty(picStr)) {
+            return R.ok().add(list);
+        }
+        List<String> pics = JSON.parseArray(picStr, String.class);
+        for (String pic : pics) {
+            List<String> picList = new ArrayList<>();
+            String[] split = pic.split("_");
+            String picPath = split[0];
+            String locNoStr = "";
+            if (split.length > 1) {
+                locNoStr = split[1];
+                picPath += "_" + locNoStr;
+            }
+            picList.add("http://" + WCS_URL + "/image/" + picPath + "-1.jpg");
+            picList.add("http://" + WCS_URL + "/image/" + picPath + "-2.jpg");
+
+            LocPicDto locPicDto = new LocPicDto();
+            locPicDto.setLocNo(locNoStr);
+            locPicDto.setPics(picList);
+            list.add(locPicDto);
+        }
+        return R.ok().add(list);
+    }
 }
diff --git a/src/main/java/com/zy/asrs/controller/MesController.java b/src/main/java/com/zy/asrs/controller/MesController.java
index 7b4343c..3497c5a 100644
--- a/src/main/java/com/zy/asrs/controller/MesController.java
+++ b/src/main/java/com/zy/asrs/controller/MesController.java
@@ -41,14 +41,14 @@
         return mesReturn;
     }
 
-//    // 鍑哄簱鐢宠
-//    @PostMapping("/api/mes/outBoundOrder")
-//    public MesReturn outBoundOrder(@RequestBody MesOutApply param){
-//
-//        MesReturn mesReturn = new MesReturn();
-//        mesReturn.setSuccess(mesService.outBoundOrder(param) == 1 ? "1" : "2");
-//        return mesReturn;
-//    }
+    // 鍑哄簱鐢宠
+    @PostMapping("/api/mes/outBoundOrder")
+    public MesReturn outBoundOrder(@RequestBody MesOutApply param){
+
+        MesReturn mesReturn = new MesReturn();
+        mesReturn.setSuccess(mesService.outBoundOrder(param) == 1 ? "1" : "2");
+        return mesReturn;
+    }
 
 //    // 鍑哄簱鍏ュ簱璁㈠崟鐢宠
     @PostMapping("/api/mes/callOutBoundOrder")
diff --git a/src/main/java/com/zy/asrs/controller/MobileController.java b/src/main/java/com/zy/asrs/controller/MobileController.java
index 81cd8f6..b239166 100644
--- a/src/main/java/com/zy/asrs/controller/MobileController.java
+++ b/src/main/java/com/zy/asrs/controller/MobileController.java
@@ -14,6 +14,10 @@
 import com.zy.asrs.entity.result.MobileAdjustResult;
 import com.zy.asrs.mapper.ManLocDetlMapper;
 import com.zy.asrs.service.*;
+import com.zy.asrs.service.impl.OrderDetlPakinServiceImpl;
+import com.zy.asrs.service.impl.OrderDetlPakoutServiceImpl;
+import com.zy.asrs.service.impl.OrderPakinServiceImpl;
+import com.zy.asrs.service.impl.OrderPakoutServiceImpl;
 import com.zy.asrs.utils.OrderInAndOutUtil;
 import com.zy.common.model.WrkDto;
 import com.zy.common.utils.HttpHandler;
@@ -24,6 +28,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 /**
@@ -61,6 +66,16 @@
 
     @Resource
     private StaDescService staDescService;
+    @Autowired
+    private OrderPakinServiceImpl orderPakinService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private OrderDetlPakinServiceImpl orderDetlPakinService;
+    @Autowired
+    private OrderPakoutServiceImpl orderPakoutService;
+    @Autowired
+    private OrderDetlPakoutServiceImpl orderDetlPakoutService;
 
     @RequestMapping("/pda/WarehouseOut/v1")
     @ManagerAuth(memo = "骞舵澘閫斾腑鎷f枡-鍙傝�冨康鍒�")
@@ -209,48 +224,50 @@
     @RequestMapping("/order/search/orderNo/auth")
     @ManagerAuth
     public R orderSearchByBarcode(@RequestParam String orderNo){
-        if (Cools.isEmpty(orderNo)){
-            orderNo=null;
-        }
-//        List<Order> orders = orderService.selectorderNoL(orderNo);
-        List<Order> orders = OrderInAndOutUtil.selectOrderNoL(null, orderNo);
-        if (Cools.isEmpty(orders)){
+        OrderPakin orderPakin = orderPakinService.selectByNo(orderNo);
+        if (orderPakin == null) {
             return R.ok();
         }
-        LinkedList<CombParam> combParams = new LinkedList<>();
-        if (!Cools.isEmpty(orders)){
-            for (Order order:orders){
-                CombParam combParam=new CombParam();
-                if (order == null) {
-                    continue;
-                }
-                DocType docType = docTypeService.selectById(order.getDocType());
-                if (docType.getPakin() == null || docType.getPakin() != 1) {
-                    continue;
-                }
-                if (order.getSettle() > 2) {
-                    continue;
-                }
-//                List<OrderDetl> orderDetls = orderService.selectWorkingDetls(order.getId());
-                List<OrderDetl> orderDetls = OrderInAndOutUtil.selectWorkingDetls(order.getPakinPakoutStatus$(), order.getId());
-                if (!Cools.isEmpty(orderDetls)) {
-                    LinkedList<CombParam.CombMat> combMats = new LinkedList<>();
-                    for (OrderDetl orderDetl:orderDetls){
-                        CombParam.CombMat combMat = new CombParam.CombMat();
-                        combMat.setMatnr(orderDetl.getMatnr());
-                        combMat.setBatch(orderDetl.getBatch());
-                        combMat.setAnfme(orderDetl.getAnfme()-orderDetl.getWorkQty());
-                        combMat.setMaktx(orderDetl.getMaktx());
-                        combMat.setSpecs(orderDetl.getSpecs());
-                        combMats.add(combMat);
-                    }
-                    combParam.setCombMats(combMats);
-                }
-                combParam.setOrderNo(order.getOrderNo());
-                combParams.add(combParam);
-            }
+        DocType docType = docTypeService.selectById(orderPakin.getDocType());
+        if (docType.getPakin() != 1) {
+            return R.ok();
         }
-        return R.ok().add(combParams);
+
+        List<OrderDetlPakin> orderDetlPakins = orderPakinService.selectWorkingDetls(orderPakin.getId());
+        if (Cools.isEmpty(orderDetlPakins)) {
+            return R.ok();
+        }
+        List<OrderDetlPakin> orderDetls1= new ArrayList<>();
+        for (OrderDetlPakin orderDetl : orderDetlPakins) {
+            if(orderDetl.getAnfme()-orderDetl.getWorkQty()>0){
+                orderDetls1.add(orderDetl);
+            }
+
+        }
+        return R.ok().add(orderDetls1);
+    }
+
+    @RequestMapping("/order/search/orderNo/out/auth")
+    @ManagerAuth
+    public R orderSearchByBarcodeOut(@RequestParam String orderNo){
+        OrderPakout orderPakout = orderPakoutService.selectByNo(orderNo);
+        if (orderPakout == null) {
+            return R.ok();
+        }
+        DocType docType = docTypeService.selectById(orderPakout.getDocType());
+
+        List<OrderDetlPakout> orderDetlPakouts = orderPakoutService.selectWorkingDetls(orderPakout.getId());
+        if (Cools.isEmpty(orderDetlPakouts)) {
+            return R.ok();
+        }
+        List<OrderDetlPakout> orderDetls1= new ArrayList<>();
+        for (OrderDetlPakout orderDetl : orderDetlPakouts) {
+            if(orderDetl.getAnfme()-orderDetl.getWorkQty()>0){
+                orderDetls1.add(orderDetl);
+            }
+
+        }
+        return R.ok().add(orderDetls1);
     }
 
     @RequestMapping("/comb/auth")
@@ -549,4 +566,116 @@
         return mobileService.callEmptyBinOutBound(locNo,size,getUserId());
     }
 
+    /**
+     * 绌烘澘鍥炲簱鎴栬�呮嫞鏂欏洖搴�
+     *
+     * @param sourceStaNo
+     * @param staNo
+     * @return
+     */
+    @RequestMapping("/AGVStartReturn")
+    public synchronized R AGVStartReturn(@RequestParam(required = false) String sourceStaNo
+            , @RequestParam(required = false) String staNo
+            , @RequestParam(required = false) String taskNo) {
+        if (Cools.isEmpty(sourceStaNo) || Cools.isEmpty(staNo)) {
+            return R.error("婧愮珯鐐瑰拰鎵樼洏鐮佷笉鑳戒负绌�");
+        }
+        List<Task> tasks = taskService.selectList(new EntityWrapper<Task>().eq("source_sta_no", sourceStaNo).eq("barcode", staNo));
+        if (tasks.size() > 0) {
+            return R.error("璇ユ墭鐩�="+staNo+"宸茬粡瀛樺湪鎼繍浠诲姟锛岃涓嶈閲嶅涓嬪彂");
+        }
+
+        String barcode = staNo.substring(0,1);
+        if(barcode.equals("3")){
+            taskNo = "307";
+        }else if(barcode.equals("4")){
+            taskNo = "402";
+        }else if(barcode.equals("5")){
+            taskNo = "401";
+        }
+
+        R r = R.ok();
+        //鐢熸垚AGV鎼繍鍑哄簱浠诲姟
+        // 淇濆瓨宸ヤ綔妗�
+        Task task = new Task();
+        Date date = new Date();
+        String TaskNo = 555555 + "aa" + date.getTime();
+        task.setWrkNo((int) date.getTime())
+                .setTaskNo(TaskNo)
+                .setIoTime(date)
+                .setWrkSts(301L) // 宸ヤ綔鐘舵�侊細301.浠诲姟涓嬪彂
+                .setIoType(3) // 鍏ュ嚭搴撶姸鎬侊細 3.绔欏埌绔�  4.绔欏埌鍖哄煙
+                .setTaskType("agv")
+                .setIoPri(10D)
+                .setFullPlt("Y") // 婊℃澘锛歒
+                .setPicking("N") // 鎷f枡
+                .setExitMk("N")// 閫�鍑�
+                .setStaNo(staNo)
+                .setSourceStaNo(taskNo)//agv鍙栬揣绔欑偣
+                .setEmptyMk("N")// 绌烘澘
+                .setBarcode(staNo)// 鎵樼洏鐮�
+                .setLinkMis("N")
+                .setAppeUser(9945L)
+                .setAppeTime(date)
+                .setModiUser(9945L)
+                .setModiTime(date);
+        if (!taskService.insert(task)) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+
+        return r;
+    }
+
+    @RequestMapping("/orderIn")
+    public synchronized R AGVOrderInReturn() {
+        List<OrderPakin> settle = orderPakinService.selectList(new EntityWrapper<OrderPakin>().in("settle", 1, 2));
+        List<String> list = new ArrayList<>();
+        for (OrderPakin orderPakin : settle) {
+            if (orderPakin.getSettle()==2){
+                List<OrderDetlPakin> orderId = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>().eq("order_id", orderPakin.getId()));
+                Boolean boo=true;
+                for (OrderDetlPakin orderDetlPakin : orderId) {
+                    if (orderDetlPakin.getAnfme()>orderDetlPakin.getWorkQty()){
+                        boo=false;
+                        break;
+                    }
+                }
+                if (boo) {
+                    settle.remove(orderPakin);
+                }else {
+                    list.add(orderPakin.getOrderNo());
+                }
+            }else {
+                list.add(orderPakin.getOrderNo());
+            }
+        }
+        return R.ok(list);
+    }
+
+    @RequestMapping("/orderOut")
+    public synchronized R AGVOrderOutReturn() {
+        List<OrderPakout> settle = orderPakoutService.selectList(new EntityWrapper<OrderPakout>().in("settle", 1, 2).eq("doc_type",11));
+        List<String> list = new ArrayList<>();
+        for (OrderPakout orderPakout: settle) {
+            if (orderPakout.getSettle()==2){
+                List<OrderDetlPakout> orderId = orderDetlPakoutService.selectList(new EntityWrapper<OrderDetlPakout>().eq("order_id", orderPakout.getId()));
+                Boolean boo=true;
+                for (OrderDetlPakout orderDetlPakout: orderId) {
+                    if (orderDetlPakout.getAnfme()>orderDetlPakout.getWorkQty()){
+                        boo=false;
+                        break;
+                    }
+                }
+                if (boo) {
+                    settle.remove(orderPakout);
+                }else {
+                    list.add(orderPakout.getOrderNo());
+                }
+            }else {
+                list.add(orderPakout.getOrderNo());
+            }
+        }
+        return R.ok(list);
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/controller/OutController.java b/src/main/java/com/zy/asrs/controller/OutController.java
index 5a603ab..b033501 100644
--- a/src/main/java/com/zy/asrs/controller/OutController.java
+++ b/src/main/java/com/zy/asrs/controller/OutController.java
@@ -11,6 +11,7 @@
 import com.zy.common.model.LocDto;
 import com.zy.common.model.TaskDto;
 import com.zy.common.web.BaseController;
+import lombok.Synchronized;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -81,8 +82,8 @@
                 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.queryStockAll(null, exist, orderDetl.getMatnr(), orderDetl.getBatch(),
+                        orderDetl.getBrand(), orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(), orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3());
                 for (LocDetl locDetl : locDetls) {
                     if (issued > 0) {
                         LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
@@ -128,8 +129,8 @@
                     continue;
                 }
 
-                List<LocDetl> locDetls = locDetlService.queryStockAll(null, exist,orderDetl.getMatnr(), orderDetl.getBatch(),
-                        orderDetl.getBrand(),orderPakOut.getDocType()==11?null:orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3());
+                List<LocDetl> locDetls = locDetlService.queryStockAll(null, exist, orderDetl.getMatnr(), orderDetl.getBatch(),
+                        orderDetl.getBrand(), orderPakOut.getDocType() == 11 ? null : orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(), orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3());
                 for (LocDetl locDetl : locDetls) {
                     if (issued > 0) {
                         LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
@@ -172,15 +173,16 @@
         return R.ok().add(locDtos);
     }
 
+    @Synchronized
     @PostMapping("/out/pakout/auth")
     @ManagerAuth(memo = "璁㈠崟鍑哄簱")
-    public synchronized R pakout(@RequestBody List<LocDto> locDtos) throws InterruptedException {
+    public R pakout(@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){
+        for (LocDto locDto : locDtos) {
+            if (locDto.getFrozen() != 1 && locDto.getFrozenLoc() != 1) {
                 locDtoArrayList.add(locDto);
             }
         }
@@ -204,7 +206,9 @@
         List<TaskDto> taskDtos = new ArrayList<>();
         // 鏍规嵁 锛堝簱浣� & 鍑哄簱绔欙級 鍒嗙粍锛� 鐞嗘兂鐘舵�侊細涓�缁勪负涓�娆″嚭搴撲换鍔�
         for (LocDto locDto : locDtos) {
-            if (locDto.isLack()) { continue; }
+            if (locDto.isLack()) {
+                continue;
+            }
             TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto);
             if (TaskDto.has(taskDtos, taskDto)) {
                 TaskDto dto = TaskDto.find(taskDtos, taskDto);
@@ -223,29 +227,35 @@
         //浼樺厛绾�
         int ioPri = 50;
         //宸蹭笅绌烘澘鍑哄簱浠诲姟鏁伴噺
-        int j=1;
+        int j = 1;
         // -----------------------------------------------------------------------------------------------
         for (TaskDto taskDto : taskDtos) {
             BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
-            workService.stockOut(staNo, taskDto, getUserId(),ioPri);
+            workService.stockOut(staNo, taskDto, getUserId(), ioPri);
             ioPri--;
             i++;
             //閰嶇洏鍑哄簱鍗曚娇鐢紝涓嬪彂闇�瑕佸嚭鐨勭┖鏉夸换鍔�
             if (orderPakout.getDocType() == 11) {
-                if (i==size){
-                    for (;j<=orderPakout.getPayType();j++){
-                        String bar="";
+                if (i == size) {
+                    for (; j <= orderPakout.getPayType(); j++) {
+                        LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", taskDto.getLocNo()));
+                        Integer locType = Integer.valueOf(locMast1.getLocType2());
+                        //閰嶇洏 鍑哄簱鍗曞嚭搴撳尯鍩熸椂Q-L4鏃�,鍑哄ぇ鎵樼洏绌烘澘
+                        if(orderPakout.getCstmrName().equals("Q-L4")){
+                            locType = 2;
+                        }
+                        String bar = "";
                         //鍏蜂綋寰呭畾
 //                        if(!Cools.isEmpty(orderPakout.getShipCode())&&orderPakout.getShipCode().equals("A01")){
 //                            bar = "A01";
 //                        }
-                        LocMast locMast = new  LocMast();
-                        if(Cools.isEmpty(bar)){
-                            locMast=locMastService.selectOne(new EntityWrapper<LocMast>()
-                                    .eq("loc_sts", "D"));
-                        }else {
-                            locMast=locMastService.selectOne(new EntityWrapper<LocMast>()
-                                    .eq("loc_sts", "D").like("barcode", bar));
+                        LocMast locMast = new LocMast();
+                        if (Cools.isEmpty(bar)) {
+                            locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                                    .eq("loc_sts", "D").eq("loc_type2", locType));
+                        } else {
+                            locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                                    .eq("loc_sts", "D").eq("loc_type2", locType).like("barcode", bar));
                         }
 
                         if (Cools.isEmpty(locMast)) {
@@ -254,29 +264,38 @@
                         String locNo = locMast.getLocNo();
                         EmptyPlateOutParam emptyPlateOutParam = new EmptyPlateOutParam();
                         emptyPlateOutParam.setOutSite(303);
-                        emptyPlateOutParam.setLocNos(new ArrayList<String>(){{add(locNo);}});
+                        emptyPlateOutParam.setLocNos(new ArrayList<String>() {{
+                            add(locNo);
+                        }});
                         String agvSta = "";
-                        if(locMast.getLocType3()==2){
+                        if (locMast.getLocType3() == 2) {
 
-                        }else {
+                        } else {
                             agvSta = orderPakout.getCstmrName();//agv鐩爣绔欑偣浣嶇疆
                         }
-                        WrkMast wrkMast = workService.emptyPlateOut(emptyPlateOutParam,ioPri,agvSta);
+                        WrkMast wrkMast = workService.emptyPlateOut(emptyPlateOutParam, ioPri, agvSta);
                         ioPri--;
 
                     }
-                }else if(i == 4){
-                    String bar="";
-                    if(!Cools.isEmpty(orderPakout.getShipCode())&&orderPakout.getShipCode().equals("A01")){
+                } else if (i == 4) {
+                    LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", taskDto.getLocNo()));
+                    Integer locType = Integer.valueOf(locMast1.getLocType2());
+                    //閰嶇洏 鍑哄簱鍗曞嚭搴撳尯鍩熸椂Q-L4鏃�,鍑哄ぇ鎵樼洏绌烘澘
+                    if(orderPakout.getCstmrName().equals("Q-L4")){
+                        locType = 2;
+                    }
+
+                    String bar = "";
+                    if (!Cools.isEmpty(orderPakout.getShipCode()) && orderPakout.getShipCode().equals("A01")) {
                         bar = "A01";
                     }
                     LocMast locMast = null;
-                    if(Cools.isEmpty(bar)){
-                        locMast=locMastService.selectOne(new EntityWrapper<LocMast>()
-                                .eq("loc_sts", "D"));
-                    }else {
-                        locMast=locMastService.selectOne(new EntityWrapper<LocMast>()
-                                .eq("loc_sts", "D").like("barcode", bar));
+                    if (Cools.isEmpty(bar)) {
+                        locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                                .eq("loc_sts", "D").eq("loc_type2", locType));
+                    } else {
+                        locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                                .eq("loc_sts", "D").eq("loc_type2", locType).like("barcode", bar));
                     }
 
                     if (Cools.isEmpty(locMast)) {
@@ -285,19 +304,91 @@
                     String locNo = locMast.getLocNo();
                     EmptyPlateOutParam emptyPlateOutParam = new EmptyPlateOutParam();
                     emptyPlateOutParam.setOutSite(303);
-                    emptyPlateOutParam.setLocNos(new ArrayList<String>(){{add(locNo);}});
+                    emptyPlateOutParam.setLocNos(new ArrayList<String>() {{
+                        add(locNo);
+                    }});
                     String agvSta = "";
-                    if(locMast.getLocType3()==2){
+                    if (locMast.getLocType3() == 2) {
 
-                    }else {
+                    } else {
                         agvSta = orderPakout.getCstmrName();//agv鐩爣绔欑偣浣嶇疆
                     }
-                    WrkMast wrkMast = workService.emptyPlateOut(emptyPlateOutParam,ioPri,agvSta);
+                    WrkMast wrkMast = workService.emptyPlateOut(emptyPlateOutParam, ioPri, agvSta);
                     ioPri--;
+                    j++;
                 }
             }
         }
         return R.ok();
     }
 
+    @PostMapping("/out/pakout/preview/auth1")
+    @ManagerAuth
+    public R pakoutPreview1(@RequestBody String orderNo) throws InterruptedException {
+        if (Cools.isEmpty(orderNo)) {
+            return R.parse(BaseRes.PARAM);
+        }
+        List<OrderDetlPakout> orderDetlPakouts = orderDetlPakoutService.selectList(new EntityWrapper<OrderDetlPakout>().eq("order_no", orderNo));
+
+        if (orderDetlPakouts.size() == 0) {
+            return R.parse("璁㈠崟鏄庣粏涓虹┖");
+        }
+
+        List<LocDto> locDtos = new ArrayList<>();
+
+        Set<String> exist = new HashSet<>();
+
+        // 鑾峰彇璁㈠崟涓昏〃
+        OrderPakout orderPakOut = orderPakOutService.selectByNo(orderDetlPakouts.get(0).getOrderNo());
+
+        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(), orderPakOut.getDocType() == 11 ? null : orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(), orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3());
+            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()));
+                    locDto.setFrozen(locDetl.getFrozen());
+                    locDto.setFrozenLoc(locMast.getFrozen());
+                    List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103);
+                    locDto.setStaNos(staNos);
+                    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());
+                    locDtos.add(locDto);
+                    exist.add(locDetl.getLocNo());
+                    // 鍓╀綑寰呭嚭鏁伴噺閫掑噺
+                    issued = issued - locDetl.getAnfme();
+                } else {
+                    break;
+                }
+            }
+            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());
+                locDto.setBoxType1(orderDetl.getBoxType1());
+                locDto.setBoxType2(orderDetl.getBoxType2());
+                locDto.setBoxType3(orderDetl.getBoxType3());
+                locDto.setLack(Boolean.TRUE);
+                locDtos.add(locDto);
+            }
+        }
+        R pakout = pakout(locDtos);
+        return R.ok().add(pakout);
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/entity/LocMast.java b/src/main/java/com/zy/asrs/entity/LocMast.java
index c9c6ba9..0e6e9e4 100644
--- a/src/main/java/com/zy/asrs/entity/LocMast.java
+++ b/src/main/java/com/zy/asrs/entity/LocMast.java
@@ -209,6 +209,9 @@
     @TableField("frozen_memo")
     private String frozenMemo;
 
+    @ApiModelProperty(value= "鎷嶇収鍥剧墖")
+    private String pic;
+
 
     public String getWhsType$(){
         BasWhsTypeService service = SpringUtils.getBean(BasWhsTypeService.class);
diff --git a/src/main/java/com/zy/asrs/entity/Task.java b/src/main/java/com/zy/asrs/entity/Task.java
index aff7888..8178f9a 100644
--- a/src/main/java/com/zy/asrs/entity/Task.java
+++ b/src/main/java/com/zy/asrs/entity/Task.java
@@ -135,6 +135,10 @@
     @ApiModelProperty(value= "鏂欐灦鍙�")
     private String packed;
 
+    @ApiModelProperty(value= "涓嬪彂AGV浠诲姟璁℃暟")
+    @TableField("ctn_type")
+    private Integer ctnType=0;
+
     /**
      * 鎷f枡
      */
@@ -173,10 +177,6 @@
     @ApiModelProperty(value= "宸ヤ綔鏃堕棿")
     @TableField("io_time")
     private Date ioTime;
-
-    @ApiModelProperty(value= "")
-    @TableField("ctn_type")
-    private Integer ctnType;
 
     @ApiModelProperty(value= "")
     @TableField("ove_mk")
diff --git a/src/main/java/com/zy/asrs/entity/WrkMast.java b/src/main/java/com/zy/asrs/entity/WrkMast.java
index daf4250..e301b8e 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMast.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -332,6 +332,9 @@
     @TableField("task_no")
     private String taskNo;
 
+    @ApiModelProperty(value= "鎷嶇収鍥剧墖")
+    private String pic;
+
     public WrkMast() {}
 
     public String getYmd$(){
diff --git a/src/main/java/com/zy/asrs/entity/WrkMastLog.java b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
index 820f59d..800bda2 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMastLog.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
@@ -327,6 +327,9 @@
     @TableField("take_none")
     private String takeNone;
 
+    @ApiModelProperty(value= "鎷嶇収鍥剧墖")
+    private String pic;
+
     public WrkMastLog() {
     }
 
diff --git a/src/main/java/com/zy/asrs/entity/digitaltwin/DtOrderVo.java b/src/main/java/com/zy/asrs/entity/digitaltwin/DtOrderVo.java
index b2f206a..d3c8e47 100644
--- a/src/main/java/com/zy/asrs/entity/digitaltwin/DtOrderVo.java
+++ b/src/main/java/com/zy/asrs/entity/digitaltwin/DtOrderVo.java
@@ -3,13 +3,17 @@
 import lombok.Builder;
 import lombok.Data;
 
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.Date;
+
 // 鏁板瓧瀛敓锛氭寜澶╄鍗曟暟閲�
 @Data
 @Builder
+// DtOrderVo.java
 public class DtOrderVo {
 
-    // 鏃ユ湡
-    private String orderDate;
-    // 璁㈠崟鏁伴噺
+    private String orderDate;  // 鎴� LocalDate
     private Integer orderNum;
+
 }
diff --git a/src/main/java/com/zy/asrs/entity/digitaltwin/LocPicDto.java b/src/main/java/com/zy/asrs/entity/digitaltwin/LocPicDto.java
new file mode 100644
index 0000000..0281c39
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/digitaltwin/LocPicDto.java
@@ -0,0 +1,13 @@
+package com.zy.asrs.entity.digitaltwin;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class LocPicDto {
+    private String locNo;
+
+    private List<String> pics;
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/param/CombParam.java b/src/main/java/com/zy/asrs/entity/param/CombParam.java
index ac07e41..77f6da8 100644
--- a/src/main/java/com/zy/asrs/entity/param/CombParam.java
+++ b/src/main/java/com/zy/asrs/entity/param/CombParam.java
@@ -19,6 +19,9 @@
     // 搴撲綅缂栧彿
     private String locNo;
 
+    //agv鍘熺珯鐐�
+    private String rsta;
+
     private List<CombMat> combMats;
 
     @Data
diff --git a/src/main/java/com/zy/asrs/entity/rcs/RcsTaskSubmit.java b/src/main/java/com/zy/asrs/entity/rcs/RcsTaskSubmit.java
index eed3e7f..15a7e79 100644
--- a/src/main/java/com/zy/asrs/entity/rcs/RcsTaskSubmit.java
+++ b/src/main/java/com/zy/asrs/entity/rcs/RcsTaskSubmit.java
@@ -9,7 +9,7 @@
 public class RcsTaskSubmit {
 
     // 浠诲姟绫诲瀷锛屾灇涓惧�硷細TRANSPORT鎼繍銆�
-    private String taskType = "TRANSPORT";
+    private String taskType = "CS3";
     // 鎵ц姝ラ闆嗗悎銆傛湰娆′换鍔℃満鍣ㄤ汉闇�瑕佹墽琛岀殑鍏抽敭璺緞锛屽簭鍙�0浠h〃璧风偣锛屽簭鍙�1浠h〃缁堢偣銆�
     private List<RcsTaskTargetRoute> targetRoute;
     // 浠诲姟鍞竴缂栧彿,濡傛灉涓虹┖锛岀郴缁熺敓鎴愪换鍔″彿骞惰繑鍥炪��
diff --git a/src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java
index ede00fc..32bb716 100644
--- a/src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java
@@ -74,7 +74,9 @@
         endTime = endDate.substring(0, 4) + "-" + endDate.substring(4, 6) + "-" + endDate.substring(6, 8) + "00:00:00";
         List<DtOrderVo> dbOrder = digitalTwinMapper.recentOrder(startTime, endTime);
         // 绌烘棩鏈熻ˉ鍏�
-
+        for (DtOrderVo dtOrderVo : dbOrder) {
+            dtOrderVo.setOrderDate(dtOrderVo.getOrderDate());
+        }
 
         return dbOrder;
     }
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 9b1f3f4..d19ab06 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -733,7 +733,7 @@
                 Order order = OrderInAndOutUtil.selectByNo(Boolean.TRUE, orderNo);
                 OrderInAndOutUtil.updateOrder(Boolean.TRUE, order.getId(), 2L, userId);
             });
-            if(!Cools.isEmpty(param.getLocNo())){
+            if(!Cools.isEmpty(param.getRsta()) && param.getRsta().contains("-")){
                 //鐢熸垚AGV鎼繍浠诲姟
                 //鐢熸垚AGV鎼繍鍑哄簱浠诲姟
                 // 淇濆瓨宸ヤ綔妗�
@@ -741,14 +741,14 @@
                 Date date = new Date();
                 String s = "";
                 if (param.getBarcode().charAt(0) == '3'){
-                    s = "307";
+                    s = "Z-307";
                 }else if (param.getBarcode().charAt(0) == '4'){
-                    s = "401";
+                    s = "Z-402";
                 }else if (param.getBarcode().charAt(0) == '5'){
-                    s = "402";
+                    s = "Z-401";
                 }
-                String TaskNo = param.getBarcode()+"-"+date.getTime();
-                task.setWrkNo(Integer.getInteger(param.getBarcode()))
+                String TaskNo = param.getBarcode()+"aa"+date.getTime();
+                task.setWrkNo((int) date.getTime())
                         .setTaskNo(TaskNo)
                         .setIoTime(date)
                         .setWrkSts(301L) // 宸ヤ綔鐘舵�侊細301.浠诲姟涓嬪彂
@@ -759,7 +759,7 @@
                         .setPicking("N") // 鎷f枡
                         .setExitMk("N")// 閫�鍑�
                         .setStaNo(s)
-                        .setSourceStaNo(param.getLocNo())//绌烘枡鏋剁紦瀛樺尯E1
+                        .setSourceStaNo(param.getRsta())//agv鍙栬揣浣�
                         .setEmptyMk("N")// 绌烘澘
                         .setBarcode(param.getBarcode())// 鎵樼洏鐮�
                         .setLinkMis("N")
@@ -1334,11 +1334,12 @@
         //婊戝潡搴�
         if(locMast.getLocType3()==1){
             if(locMast.getLocType2()==1){
-
-
+                sta = "Z-402";
+            }else if(locMast.getLocType2()==2){
+                sta = "Z-401";
             }
         }else if(locMast.getLocType3()==2){
-            sta="307";
+            sta="Z-307";
         }
 
         // 鑾峰彇璺緞
diff --git a/src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java
index a69e0a4..bbc3986 100644
--- a/src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java
@@ -100,6 +100,7 @@
                     orderDetl.setCreateBy(order.getCreateBy());
                     orderDetl.setUpdateTime(order.getUpdateTime());
                     orderDetl.setUpdateBy(order.getUpdateBy());
+                    orderDetl.setBarcode(wrkDetl.getZpallet());
                     if (!orderDetlPakinService.insert(orderDetl)) {
                         throw new CoolException("閲嶆暣鍑哄簱璁㈠崟銆恛rderNo = " + order.getOrderNo() + "銆戞槑缁嗗け璐�");
                     }
diff --git a/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
index e77e4a2..46facd4 100644
--- a/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
@@ -233,7 +233,7 @@
             RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class);
             if("SUCCESS".equals(rcsReturn.getCode())||"200".equals(rcsReturn.getCode())) {
                 JSONObject data = rcsReturn.getData();
-                String robotTaskCode = data.getString("RobotTaskCode");
+                String robotTaskCode = data.getString("robotTaskCode");
                 if (robotTaskCode.equals(rcsTaskSubmit.getRobotTaskCode())){
                     return 1;
                 }
@@ -327,6 +327,8 @@
 
         String robotTaskCode = rcsReporterTask.getRobotTaskCode();
         String singleRobotCode = rcsReporterTask.getSingleRobotCode();
+        String[] split = robotTaskCode.split("-");
+        robotTaskCode = split[0];
         //鍗庢檽AGV鐘舵�佸弽棣堬紝鍙婄敵璇�
         if(Cools.isEmpty(rcsReporterTask.getExtra())){
             if(Cools.isEmpty(rcsReporterTask.getMethod())){
diff --git a/src/main/java/com/zy/asrs/task/AGVTaskReportScheduler.java b/src/main/java/com/zy/asrs/task/AGVTaskReportScheduler.java
index 2c0a156..6f7c6b0 100644
--- a/src/main/java/com/zy/asrs/task/AGVTaskReportScheduler.java
+++ b/src/main/java/com/zy/asrs/task/AGVTaskReportScheduler.java
@@ -67,7 +67,7 @@
                 // 淇濆瓨宸ヤ綔妗�
                 Task task = new Task();
                 Date date = new Date();
-                String TaskNo = wrkMast.getWrkNo() + "-" + date.getTime();
+                String TaskNo = wrkMast.getWrkNo() + "aa" + date.getTime();
                 task.setWrkNo(wrkMast.getWrkNo())
                         .setTaskNo(TaskNo)
                         .setIoTime(date)
@@ -78,8 +78,8 @@
                         .setFullPlt("Y") // 婊℃澘锛歒
                         .setPicking("N") // 鎷f枡
                         .setExitMk("N")// 閫�鍑�
-                        .setStaNo(stnNo)
-                        .setSourceStaNo(wrkMast.getSourceStaNo())//绌烘枡鏋剁紦瀛樺尯E1
+                        .setStaNo(wrkMast.getMemo())
+                        .setSourceStaNo("Z-"+wrkMast.getSourceStaNo())
                         .setEmptyMk("N")// 绌烘澘
                         .setBarcode(wrkMast.getBarcode())// 鎵樼洏鐮�
                         .setLinkMis("N")
@@ -123,7 +123,7 @@
                     //濡傛灉鏄帴椹崇珯鐐瑰垯闇�瑕佸垽鏂帴椹崇珯鐐规槸鍚︽湁绌烘枡鏋�
                     //濡傛灉鏈夌┖鏂欐灦闇�瑕佸垽鏂槸鍚︽湁鍑哄簱浠诲姟
                     //鏈夊嚭搴撲换鍔″垯绂佹涓嬪彂鏈鎼繍浠诲姟
-                    if (task.getStaNo().equals("401") || task.getStaNo().equals("402") || task.getStaNo().equals("307")) {
+                    if (task.getStaNo().equals("Z-401") || task.getStaNo().equals("Z-402") || task.getStaNo().equals("Z-307")) {
                         BasDevp basDevp = basDevpService.checkSiteStatus(Integer.parseInt(task.getStaNo()));
                         if (basDevp != null && !Cools.isEmpty(basDevp.getInreq1()) && basDevp.getInreq1().equals("Y")) {
                             List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
@@ -139,13 +139,13 @@
                                     //鐢熸垚AGV鎼繍鍑哄簱浠诲姟
                                     // 淇濆瓨宸ヤ綔妗�
                                     String SourceStaNo = "";
-                                    if (task.getStaNo().equals("401")) {
+                                    if (task.getStaNo().equals("Z-401")) {
                                         //澶ф枡鏋剁紦鍐插尯
-                                        SourceStaNo = "E3";
-                                    }else if (task.getStaNo().equals("402")) {
-                                        SourceStaNo = "E2";
-                                    }else if (task.getStaNo().equals("307")) {
-                                        SourceStaNo = "E1";
+                                        SourceStaNo = "Q-E3";
+                                    }else if (task.getStaNo().equals("Z-402")) {
+                                        SourceStaNo = "Q-E2";
+                                    }else if (task.getStaNo().equals("Z-307")) {
+                                        SourceStaNo = "Q-E1";
                                     }
                                     Task task3 = new Task();
                                     Date date = new Date();
@@ -183,10 +183,18 @@
                         if (!start.isSuccess()) {
                             task.setUpdMk("X");
                             task.setErrorMemo(start.getMsg());
+                            task.setCtnType(task.getCtnType()+1);//涓嬪彂浠诲姟璁℃暟
                             task.setModiTime(new Date());
                             if (!taskService.updateById(task)) {
                                 log.error("宸ヤ綔妗workNo={}]鏍囪寰呭鐞嗗け璐�", task.getWrkNo());
                             }
+                        }else {
+                            task.setCtnType(task.getCtnType()+1);
+                            task.setModiTime(new Date());
+                            task.setWrkSts(302L);//浠诲姟鎵ц涓�
+                            if (!taskService.updateById(task)) {
+                                log.error("宸ヤ綔妗workNo={}]鏍囪寰呭鐞嗗け璐�", task.getWrkNo());
+                            }
                         }
                     }
 
diff --git a/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java b/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
index 69cab94..62af1a2 100644
--- a/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
+++ b/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -179,7 +179,7 @@
     void otherInOrderCompleteReport() {
         String erpReport = Parameter.get().getErpReport();
         if (!Cools.isEmpty(erpReport) && erpReport.equals("true")) {
-            OrderPakin orderPakin = orderPakinService.selectOne(new EntityWrapper<OrderPakin>().eq("settle", 4)
+            OrderPakin orderPakin = orderPakinService.selectOne(new EntityWrapper<OrderPakin>().ne("doc_type",1).eq("settle", 4)
                     .ne("doc_type", 1).orderBy("update_time"));
             if (orderPakin == null) {
                 return;
diff --git a/src/main/java/com/zy/asrs/task/handler/AGVTaskReportHandler.java b/src/main/java/com/zy/asrs/task/handler/AGVTaskReportHandler.java
index 2dd58e0..e2a9c29 100644
--- a/src/main/java/com/zy/asrs/task/handler/AGVTaskReportHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AGVTaskReportHandler.java
@@ -37,21 +37,48 @@
         }else if(task.getIoType()==5){
             SourceStaNoType = "ZONE";
         }
+        String taskType = "CS3";
+        Boolean flag1 = false;
+        Boolean flag2 = false;
+        if(task.getStaNo().equals("Z-401")|| task.getStaNo().equals("Z-402")|| task.getStaNo().equals("Z-307")){
+            taskType = "YLIN";
+            flag1 = true;
+        }
+        if (task.getSourceStaNo().equals("Z-401")|| task.getSourceStaNo().equals("Z-402")|| task.getSourceStaNo().equals("Z-307")){
+            taskType = "YLOUT";
+            flag2 = true;
+        }
+        if(flag1&&flag2){
+            taskType = "YLBOTH";
+        }
+        //AGV鍖哄煙涓棤娉曠敤-
+        String StaNo = task.getStaNo();
+        String SourceStaNo = task.getSourceStaNo();
+        if (task.getStaNo().split("-")[0].equals("Q")) {
+            String[] split = task.getStaNo().split("-");
+            StaNo = split[0]+split[1];
+        }
+        if (task.getSourceStaNo().split("-")[0].equals("Q")) {
+            String[] split = task.getStaNo().split("-");
+            SourceStaNo = split[0]+split[1];
+        }
+
         // 涓嬪彂缁橰CS
         RcsTaskSubmit rcsTaskSubmit = new RcsTaskSubmit();
-        rcsTaskSubmit.setRobotTaskCode(task.getTaskNo());
+        rcsTaskSubmit.setTaskType(taskType);
+        rcsTaskSubmit.setRobotTaskCode(task.getTaskNo()+"-"+task.getCtnType());
         rcsTaskSubmit.setInitPriority(10);  //榛樿10
         List<RcsTaskTargetRoute> targetRouteList = new ArrayList<>();
         RcsTaskTargetRoute startRoute = new RcsTaskTargetRoute();
         startRoute.setSeq(0);
         startRoute.setType(SourceStaNoType);
-        startRoute.setCode(task.getSourceStaNo());
+        startRoute.setCode(SourceStaNo);
         startRoute.setOperation("COLLECT");
         targetRouteList.add(startRoute);
         RcsTaskTargetRoute endRoute = new RcsTaskTargetRoute();
         endRoute.setSeq(1);
         endRoute.setType(TargetStaNoType);
-        endRoute.setCode(task.getStaNo());
+        endRoute.setCode(StaNo);
         endRoute.setOperation("DELIVERY");
         targetRouteList.add(endRoute);
         rcsTaskSubmit.setTargetRoute(targetRouteList);
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 d715373..3b1dfc1 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -93,6 +93,7 @@
                         locMast.setLocSts("D");
                         locMast.setIoTime(now);
                         locMast.setModiTime(now);
+                        locMast.setPic(wrkMast.getPic());
                         if (!locMastService.updateById(locMast)) {
 //                            exceptionHandle("绌烘澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐�;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -177,6 +178,7 @@
                         locMast.setBarcode(wrkMast.getBarcode());
                         locMast.setIoTime(now);
                         locMast.setModiTime(now);
+                        locMast.setPic(wrkMast.getPic());
                         if (!locMastService.updateById(locMast)) {
 //                            exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -285,6 +287,7 @@
                         locMast.setBarcode(wrkMast.getBarcode());
                         locMast.setIoTime(now);
                         locMast.setModiTime(now);
+                        locMast.setPic(wrkMast.getPic());
                         if (!locMastService.updateById(locMast)) {
 //                            exceptionHandle("鎷f枡鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -354,6 +357,7 @@
                         locMast.setBarcode(wrkMast.getBarcode());
                         locMast.setIoTime(now);
                         locMast.setModiTime(now);
+                        locMast.setPic(wrkMast.getPic());
                         if (!locMastService.updateById(locMast)) {
 //                            exceptionHandle("骞舵澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -391,6 +395,7 @@
                         locMast.setBarcode(wrkMast.getBarcode());
                         locMast.setIoTime(now);
                         locMast.setModiTime(now);
+                        locMast.setPic(wrkMast.getPic());
                         if (!locMastService.updateById(locMast)) {
 //                            exceptionHandle("鐩樼偣鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -413,8 +418,10 @@
                         }
                     }
                     // 淇敼婧愬簱浣嶇姸鎬� ==> O
+                    String picUrl = "";
                     LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo());
                     if (null != sourceLoc) {
+                        picUrl = sourceLoc.getPic();
                         sourceLoc.setBarcode("");
                         sourceLoc.setLocSts("O");
                         sourceLoc.setModiTime(now);
@@ -430,6 +437,7 @@
                     locMast.setBarcode(wrkMast.getBarcode());
                     locMast.setIoTime(now);
                     locMast.setModiTime(now);
+                    locMast.setPic(picUrl);
                     if (!locMastService.updateById(locMast)) {
 //                        exceptionHandle("搴撲綅绉昏浆 ===>> 淇敼鐩爣搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
diff --git a/src/main/java/com/zy/common/model/DetlDto.java b/src/main/java/com/zy/common/model/DetlDto.java
index f3e11a4..2e71070 100644
--- a/src/main/java/com/zy/common/model/DetlDto.java
+++ b/src/main/java/com/zy/common/model/DetlDto.java
@@ -227,9 +227,9 @@
         if (Cools.isEmpty(matnr)) {
             return null;
         }
-        for (DetlDto detlDto : detlDtos) {
+        for (DetlDto detlDto : detlDtos) {//&& standby1.equals(detlDto.getStandby1())
             if (matnr.equals(detlDto.getMatnr()) && Cools.eq(batch, detlDto.getBatch())
-                    && brand.equals(detlDto.getBrand()) && standby1.equals(detlDto.getStandby1())
+                    && brand.equals(detlDto.getBrand())
                     && standby2.equals(detlDto.getStandby2()) && standby3.equals(detlDto.getStandby3())
                     && boxType1.equals(detlDto.getBoxType1()) && boxType2.equals(detlDto.getBoxType2())
                     && boxType3.equals(detlDto.getBoxType3())) {
diff --git a/src/main/java/com/zy/common/model/TaskDto.java b/src/main/java/com/zy/common/model/TaskDto.java
index 36a5aa3..af369cf 100644
--- a/src/main/java/com/zy/common/model/TaskDto.java
+++ b/src/main/java/com/zy/common/model/TaskDto.java
@@ -71,14 +71,14 @@
         // 姹囨�讳笉鑰冭檻搴忓垪鐮�
         List<DetlDto> detlDtos = new ArrayList<>();
         for (LocDto locDto : this.getLocDtos()) {
-            DetlDto dto = new DetlDto(locDto.getMatnr(), locDto.getBatch(),locDto.getBrand(),locDto.getStandby1(),locDto.getStandby2(),locDto.getStandby3(),locDto.getBoxType1(),locDto.getBoxType2(),locDto.getBoxType3(), locDto.getAnfme());
+            DetlDto dto = new DetlDto(locDto.getMatnr(), locDto.getBatch(),locDto.getBrand(),null,locDto.getStandby2(),locDto.getStandby3(),locDto.getBoxType1(),locDto.getBoxType2(),locDto.getBoxType3(), locDto.getAnfme());
             if (DetlDto.has(detlDtos, dto)) {
-                DetlDto detlDto = DetlDto.find(detlDtos, locDto.getMatnr(), dto.getBatch(),dto.getBrand(),dto.getStandby1(),dto.getStandby2(),dto.getStandby3(),dto.getBoxType1(),dto.getBoxType2(),dto.getBoxType3());
+                DetlDto detlDto = DetlDto.find(detlDtos, locDto.getMatnr(), dto.getBatch(),dto.getBrand(),null,dto.getStandby2(),dto.getStandby3(),dto.getBoxType1(),dto.getBoxType2(),dto.getBoxType3());
                 assert detlDto != null;
                 detlDto.setAnfme(detlDto.getAnfme() + locDto.getAnfme());
             } else {
                 detlDtos.add(new DetlDto(locDto.getMatnr(), locDto.getBatch()
-                        ,locDto.getBrand(),locDto.getStandby1(),locDto.getStandby2(),locDto.getStandby3(),locDto.getBoxType1(),locDto.getBoxType2(),locDto.getBoxType3()
+                        ,locDto.getBrand(),null,locDto.getStandby2(),locDto.getStandby3(),locDto.getBoxType1(),locDto.getBoxType2(),locDto.getBoxType3()
                         , locDto.getAnfme()));
             }
         }
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 1e70885..9f0f009 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -129,6 +129,9 @@
   #鎵樼洏鐗╂枡鍙�
   zpalletId: tuopan
 
+wcs:
+  url: 127.0.0.1:9094/wcs
+
 #mes瀵规帴
 mes:
 
@@ -139,7 +142,7 @@
 #娴峰悍瀵规帴
 hik:
   switch: true
-  url: http://172.26.11.98:80/
+  url: http://172.26.11.98:80/rcs/rtas/
 
 #鍗庢檽瀵规帴
 hx:
diff --git a/src/main/resources/mapper/LocMastMapper.xml b/src/main/resources/mapper/LocMastMapper.xml
index cae15d0..ba7589d 100644
--- a/src/main/resources/mapper/LocMastMapper.xml
+++ b/src/main/resources/mapper/LocMastMapper.xml
@@ -36,6 +36,7 @@
         <result column="ctn_no" property="ctnNo" />
         <result column="frozen" property="frozen" />
         <result column="frozen_memo" property="frozenMemo" />
+        <result column="pic" property="pic" />
     </resultMap>
 
     <select id="queryFreeLocMast" resultMap="BaseResultMap">
diff --git a/src/main/resources/mapper/ViewDigitalTwinMapper.xml b/src/main/resources/mapper/ViewDigitalTwinMapper.xml
index 4f909df..bc08c3f 100644
--- a/src/main/resources/mapper/ViewDigitalTwinMapper.xml
+++ b/src/main/resources/mapper/ViewDigitalTwinMapper.xml
@@ -3,6 +3,13 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zy.asrs.mapper.DigitalTwinMapper">
 
+    <resultMap id="dtOrderMap" type="com.zy.asrs.entity.digitaltwin.DtOrderVo">
+        <constructor>
+            <arg column="orderDate" javaType="java.util.Date"/>
+            <arg column="orderNum" javaType="java.lang.Integer"/>
+        </constructor>
+    </resultMap>
+
     <!--鎬昏锛氭�诲簱浣嶃�佸凡鐢ㄥ簱浣嶃�佷粖鏃ュ簱瀛樸�佷粖鏃ュ嚭搴撱�佷粖鏃ュ叆搴�-->
     <select id="overview" resultType="Double">
         SELECT COUNT(*) FROM asr_loc_mast WHERE loc_sts != 'Z'
@@ -32,10 +39,26 @@
     </select>
 
     <select id="recentOrder" resultType="com.zy.asrs.entity.digitaltwin.DtOrderVo">
-        SELECT CONVERT(VARCHAR, order_time, 23) as orderDate, COUNT(*) AS orderNum
-        FROM man_order
+
+        SELECT
+        FORMAT(orderDate, 'yyyyMMdd') as orderDate,
+        COUNT(*) as orderNum
+        FROM (
+        SELECT
+        CAST(order_time AS DATE) as orderDate
+        FROM man_order_pakin
         WHERE order_time BETWEEN #{startTime} AND #{endTime}
-        GROUP BY CONVERT(VARCHAR, order_time, 23)
+
+        UNION ALL
+
+        SELECT
+        CAST(order_time AS DATE) as orderDate
+        FROM man_order_pakout
+        WHERE order_time BETWEEN #{startTime} AND #{endTime}
+        ) combined
+        GROUP BY orderDate
+        ORDER BY orderDate
+
     </select>
 
     <select id="recentInBound" resultType="com.zy.asrs.entity.digitaltwin.DtInAndOutBoundVo">
diff --git a/src/main/resources/mapper/WrkMastLogMapper.xml b/src/main/resources/mapper/WrkMastLogMapper.xml
index 8086afb..b7a61ef 100644
--- a/src/main/resources/mapper/WrkMastLogMapper.xml
+++ b/src/main/resources/mapper/WrkMastLogMapper.xml
@@ -61,6 +61,7 @@
         <result column="full_plt" property="fullPlt" />
         <result column="pre_have" property="preHave" />
         <result column="take_none" property="takeNone" />
+        <result column="pic" property="pic" />
     </resultMap>
     <sql id="queryWhere">
         <where>
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 83c4cce..0b853b2 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -60,6 +60,7 @@
         <result column="full_plt" property="fullPlt" />
         <result column="pre_have" property="preHave" />
         <result column="take_none" property="takeNone" />
+        <result column="pic" property="pic" />
     </resultMap>
 
     <select id="selectToBeCompleteData" resultMap="BaseResultMap">
diff --git a/src/main/webapp/static/js/stoMan/stoQue.js b/src/main/webapp/static/js/stoMan/stoQue.js
index 95d3552..034eebb 100644
--- a/src/main/webapp/static/js/stoMan/stoQue.js
+++ b/src/main/webapp/static/js/stoMan/stoQue.js
@@ -56,7 +56,7 @@
             ,{field: 'locType3$', align: 'center',title: '杞婚噸绫诲瀷', hide:true}
             ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳', hide:true}
             ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿', width: 180, hide:false}
-            ,{ fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate'}
+            ,{ fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width: 180}
         ]],
         request: {
             pageName: 'curr',
@@ -181,6 +181,46 @@
                 }
                 locDetlToLayer(data.locNo);
                 break;
+            case 'showPic':
+                let imgHtml = '<div style="height:100%;display: flex;justify-content: space-around;align-items: center;flex-wrap: wrap;">';
+                $.ajax({
+                    url: baseUrl+"/locMast/picUrl",
+                    headers: {'token': localStorage.getItem('token')},
+                    data: {
+                        locNo: data.locNo
+                    },
+                    method: 'GET',
+                    traditional:true,
+                    success: function (res) {
+                        if (res.code === 200){
+                            res.data.forEach((item) => {
+                                let locNo = item.locNo;
+                                let pics = item.pics;
+                                pics.forEach((pic) => {
+                                    let tmp = '<div><div><img width="600" src="' + pic + '" /></div><div>' + locNo + '</div></div>';
+                                    imgHtml += tmp;
+                                })
+                            })
+                            imgHtml += "</div>";
+
+                            layer.open({
+                                type: 1,
+                                title: '鏌ョ湅鍥剧墖',
+                                area: [top.detailWidth, top.detailHeight],
+                                shadeClose: true,
+                                content: imgHtml,
+                                success: function(layero, index){
+                                }
+                            });
+
+                        } else if (res.code === 403){
+                            top.location.href = baseUrl+"/";
+                        } else {
+                            layer.msg(res.msg)
+                        }
+                    }
+                });
+                break;
         }
     });
 
diff --git a/src/main/webapp/views/stoMan/stoQue.html b/src/main/webapp/views/stoMan/stoQue.html
index 698bc72..96bde44 100644
--- a/src/main/webapp/views/stoMan/stoQue.html
+++ b/src/main/webapp/views/stoMan/stoQue.html
@@ -105,6 +105,7 @@
 
 <script type="text/html" id="operate">
     <a class="layui-btn layui-btn-xs loc-detl" lay-event="locDetl">鏌ョ湅鏄庣粏</a>
+    <a class="layui-btn layui-btn-xs loc-detl" lay-event="showPic">鏌ョ湅鍥剧墖</a>
 </script>
 
 <!--鏄庣粏琛�-->

--
Gitblit v1.9.1