From 10e6a9a8adad2226f13a4e4704ca5b2ad5b9ef9a Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期日, 21 十二月 2025 18:49:59 +0800
Subject: [PATCH] 刀具库WMS功能完善

---
 src/main/java/com/zy/asrs/task/handler/JlerHandler.java            |  256 +++++++++++
 src/main/java/com/zy/asrs/controller/LocMastController.java        |    4 
 src/main/java/com/zy/common/config/ControllerResAdvice.java        |   16 
 src/main/java/com/zy/asrs/task/JlerScheduler.java                  |   31 +
 src/main/resources/mapper/LocDetlMapper.xml                        |   24 
 src/main/java/com/zy/asrs/controller/DigitalTwinController.java    |  118 ++--
 src/main/webapp/static/js/wrkMast/wrkMast.js                       |    3 
 src/main/java/com/zy/asrs/service/MesService.java                  |    9 
 src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java         |  263 +++++------
 src/main/java/com/zy/common/web/AuthController.java                |   34 
 src/main/java/com/zy/asrs/service/DigitalTwinService.java          |    3 
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java        |   13 
 src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java         |   80 +++
 src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java      |  103 ++++
 src/main/resources/application-dev.yml                             |    1 
 src/main/java/com/zy/asrs/controller/MatController.java            |    4 
 src/main/java/com/zy/asrs/controller/MesController.java            |  104 ++--
 src/main/java/com/zy/asrs/service/MobileService.java               |   11 
 src/main/java/com/zy/asrs/entity/WrkDetlLog.java                   |    3 
 src/main/webapp/static/js/basStation/basStation.js                 |    2 
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java        |   12 
 src/main/webapp/static/js/pakStore/stockAdjust.js                  |    2 
 src/main/resources/mapper/WrkMastMapper.xml                        |    2 
 src/main/java/com/zy/asrs/controller/MobileController.java         |   25 +
 src/main/java/com/zy/common/model/LocDto.java                      |    4 
 src/main/webapp/views/basStation/basStation.html                   |    6 
 src/main/webapp/views/locMast/locMast_detail.html                  |   13 
 src/main/java/com/zy/asrs/entity/LocDetl.java                      |    3 
 src/main/java/com/zy/asrs/entity/param/LocDetlAdjustParam.java     |    8 
 src/main/java/com/zy/asrs/entity/digitaltwin/DtLocDetailVo.java    |   11 
 src/main/java/com/zy/asrs/controller/RcsController.java            |    4 
 src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java |   48 +
 src/main/java/com/zy/asrs/entity/mes/StockDetl.java                |   21 +
 33 files changed, 874 insertions(+), 367 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/DigitalTwinController.java b/src/main/java/com/zy/asrs/controller/DigitalTwinController.java
index 06e3892..decee80 100644
--- a/src/main/java/com/zy/asrs/controller/DigitalTwinController.java
+++ b/src/main/java/com/zy/asrs/controller/DigitalTwinController.java
@@ -232,65 +232,65 @@
 //    @ManagerAuth
     public R warehouseDetail(@RequestParam(required = false) String areaId){
 
-//        digitalTwinService.warehouseDetail(areaId);
+        return 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("鐗╂枡鍚嶇О");
-        locDetl.setAnfme(100.0);
-        locDetl.setStandby3("AAA,BBB,CCC");
-        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("鍒�鍏峰簱");
-        locDetl.setMatnr("mat10001");
-        locDetl.setMaktx("鐗╂枡鍚嶇О");
-        locDetl.setAnfme(100.0);
-        locDetl.setStandby3("AAA1,BBB1,CCC1");
-        dtLocDetailVo2.setLocDetl(locDetl2);
-        dtLocDetailVoList.add(dtLocDetailVo2);
+//        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("G01-JT50-ZC32-110-07");
+//        locDetl.setMaktx("D32鏂硅偐閾e垁鏌�");
+//        locDetl.setAnfme(100.0);
+//        locDetl.setStandby3("AAA,BBB,CCC");
+//        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("T08-A72500-XXX-CC09-A1");
+//        locDetl2.setMaktx("D94126绮鹃晽鍒�澶�");
+//        locDetl2.setAnfme(100.0);
+//        locDetl2.setStandby3("AAA1,BBB1,CCC1");
+//        dtLocDetailVo2.setLocDetl(locDetl2);
+//        dtLocDetailVoList.add(dtLocDetailVo2);
 
 
 //        LocDetl locDetl2 = new LocDetl();
@@ -304,7 +304,7 @@
 ////        locDetlList.add(locDetl);
 ////        locDetlList.add(locDetl2);
 
-        return R.ok().add(dtLocDetailVoList);
+//        return R.ok().add(dtLocDetailVoList);
     }
 
 }
diff --git a/src/main/java/com/zy/asrs/controller/LocMastController.java b/src/main/java/com/zy/asrs/controller/LocMastController.java
index 723e3f6..12210b0 100644
--- a/src/main/java/com/zy/asrs/controller/LocMastController.java
+++ b/src/main/java/com/zy/asrs/controller/LocMastController.java
@@ -198,9 +198,11 @@
                 if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()))) {
                     throw new CoolException("鏈嶅姟鍣ㄩ敊璇紝璇疯仈绯荤鐞嗗憳");
                 }
-                locMast.setBarcode("");
             }
         }
+        if(locMast.getLocSts().equals("O"))  {
+            locMast.setBarcode("");
+        }
         locMast.setModiUser(getUserId());
         locMast.setModiTime(now);
         AdjDetl adjDetl = new AdjDetl();
diff --git a/src/main/java/com/zy/asrs/controller/MatController.java b/src/main/java/com/zy/asrs/controller/MatController.java
index 04785d0..9262b38 100644
--- a/src/main/java/com/zy/asrs/controller/MatController.java
+++ b/src/main/java/com/zy/asrs/controller/MatController.java
@@ -51,9 +51,9 @@
 
     @RequestMapping(value = "/mat/list/pda/auth")
     @ManagerAuth
-    public R pdaList(@RequestParam(required = true) Long tagId) {
+    public R pdaList(@RequestParam(required = false) Long tagId) {
         EntityWrapper<Mat> wrapper = new EntityWrapper<>();
-        wrapper.eq("tag_id", tagId);
+//        wrapper.eq("tag_id", tagId);
         wrapper.orderBy("create_time", false);
         List<Mat> mats = matService.selectList(wrapper);
         return R.ok().add(mats);
diff --git a/src/main/java/com/zy/asrs/controller/MesController.java b/src/main/java/com/zy/asrs/controller/MesController.java
index 6a7ba4a..68f483f 100644
--- a/src/main/java/com/zy/asrs/controller/MesController.java
+++ b/src/main/java/com/zy/asrs/controller/MesController.java
@@ -1,7 +1,9 @@
 package com.zy.asrs.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.annotations.AppAuth;
 import com.core.common.Cools;
 import com.core.common.R;
 import com.zy.asrs.entity.BasStation;
@@ -9,65 +11,56 @@
 import com.zy.asrs.service.BasStationService;
 import com.zy.asrs.service.MesService;
 import com.zy.common.web.BaseController;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import java.util.Date;
 import java.util.List;
 
 @RestController
+@Slf4j
 public class MesController extends BaseController {
 
     @Resource
     private MesService mesService;
 
+    private void auth(String appkey, Object obj, HttpServletRequest request) {
+        log.info("{}鎺ュ彛琚闂紱appkey:{}锛涜姹傛暟鎹細{}", request.getRequestURI(), appkey, JSON.toJSONString(obj));
+        request.setAttribute("cache", obj);
+    }
 
-    // 鐗╂枡淇℃伅鍚屾
     @PostMapping("/api/mes/synMatInfo")
-    public MesReturn synMatInfo(@RequestBody MesMatInfo param){
-
+    @AppAuth(memo = "鐗╂枡淇℃伅鍚屾")
+    public MesReturn synMatInfo(@RequestHeader(required = false) String appkey,@RequestBody MesMatInfo param,HttpServletRequest request){
+        auth(appkey, param, request);
         MesReturn mesReturn = new MesReturn();
         mesReturn.setSuccess(mesService.synMatInfo(param) == 1 ? "1" : "2");
         return mesReturn;
     }
 
+    @PostMapping("/api/tms/queryStock")
+    @AppAuth(memo = "TMS鏌ヨ搴撳瓨")
+    public R queryStock(@RequestHeader(required = false) String appkey,@RequestBody JSONObject param,HttpServletRequest request){
+        auth(appkey, param, request);
+        String matnr = param.getString("matnr");
+        return mesService.queryStock(matnr);
+    }
+
     // 鍑哄簱鐢宠
     @PostMapping("/api/mes/outBoundOrder")
-    public MesReturn outBoundOrder(@RequestBody MesInApply param){
-        MesReturn mesReturn = new MesReturn();
-        // 缁堢偣涓虹┖锛岃绠楁帴椹充綅
-        BasStation basStation = null;
-        if (Cools.isEmpty(param.getNextStationId())) {
-            List<BasStation> basStations = basStationService.selectList(new EntityWrapper<BasStation>().eq("loc_sts", "O"));
-            if(basStations.isEmpty()) {
-                mesReturn.setSuccess("2");
-                mesReturn.setMessage("鏃犵┖鎺ラ┏浣嶏紝璇风◢鍚庡啀璇�!");
-                return mesReturn;
-            }
-            // 鎺ラ┏鐐�
-            basStation = basStations.get(0);
-            param.setNextStationId(basStation.getDevNo());
-
-            // 鍏堟洿鏂版帴椹崇偣鐘舵��
-            basStation.setModiTime(new Date());
-            basStation.setLocSts("S");
-            basStation.setBarcode(param.getDjNo());
-            basStationService.updateById(basStation);
-        }
-        int i = mesService.outBoundOrder(param);
-        if(i == 1) {
-            mesReturn.setSuccess("1");
-        } else {
-            // 閲婃斁鎺ラ┏鐐�
-            if(basStation != null) {
-                basStation.setModiTime(new Date());
-                basStation.setLocSts("O");
-                basStation.setBarcode("");
-                basStationService.updateById(basStation);
-            }
+    @AppAuth(memo = "鍑哄簱鐢宠(TMS璋冪敤)")
+    public MesReturn outBoundOrder(@RequestHeader(required = false) String appkey,@RequestBody MesInApply param,HttpServletRequest request){
+        auth(appkey, param, request);
+        if(Cools.isEmpty(param.getTaskNo(),param.getOrderNo(),param.getStationId())) {
+            MesReturn mesReturn = new MesReturn();
             mesReturn.setSuccess("2");
+            mesReturn.setMessage("鍙傛暟涓嶈兘涓虹┖锛�" + JSONObject.toJSONString(param));
+            return  mesReturn;
         }
-        return mesReturn;
+
+        return mesService.outBoundOrder(param);
     }
 
 //    // 鍑哄簱鐢宠锛堝彨鏂欙級锛岃閰嶅簱銆佹粦鍧楀簱
@@ -88,10 +81,10 @@
         return mesReturn;
     }
 
-    // 鍏ョ珯鍏佽
     @PostMapping("/api/mes/allowInStation")
-    public MesReturn allowInStation(@RequestBody TransInOutStationAllow param){
-
+    @AppAuth(memo = "鍏ョ珯鍏佽")
+    public MesReturn allowInStation(@RequestHeader(required = false) String appkey,@RequestBody TransInOutStationAllow param,HttpServletRequest request){
+        auth(appkey, param, request);
         return mesService.allowInStation(param);
     }
 
@@ -108,6 +101,7 @@
     // 涓嬪彂杩愯緭浠诲姟锛宮es璋冪敤涓嬪垁06(鍛煎彨agv鎼繍)
     @PostMapping("/api/mes/submitTask")
     public JSONObject submitTask(@RequestBody TransTask param){
+        log.info("涓嬪垁(閫�鍒�)锛歿}",JSONObject.toJSONString(param));
         // 缁堢偣涓虹┖锛岃绠楁帴椹充綅
         BasStation basStation = null;
         if (Cools.isEmpty(param.getNextStationId())) {
@@ -129,11 +123,20 @@
             basStation.setBarcode(param.getDjNo());
             basStationService.updateById(basStation);
         }
-
+        JSONObject sendAgvTask;
         param.setAgvFactory(1); // 娴峰悍
-        param.setNextStationId("A1");
-        JSONObject sendAgvTask = mesService.submitTask(param);
-        if (!"1".equals(sendAgvTask.getString("Success"))) {
+        try {
+            sendAgvTask = mesService.submitTask(param);
+            if (!"1".equals(sendAgvTask.getString("Success"))) {
+                // 閲婃斁鎺ラ┏鐐�
+                if(basStation != null) {
+                    basStation.setModiTime(new Date());
+                    basStation.setLocSts("O");
+                    basStation.setBarcode("");
+                    basStationService.updateById(basStation);
+                }
+            }
+        }catch (Exception e){
             // 閲婃斁鎺ラ┏鐐�
             if(basStation != null) {
                 basStation.setModiTime(new Date());
@@ -141,6 +144,7 @@
                 basStation.setBarcode("");
                 basStationService.updateById(basStation);
             }
+            throw e;
         }
         return sendAgvTask;
     }
@@ -154,19 +158,5 @@
         return mesReturn;
     }
 
-
-    // region 娴嬭瘯
-    @GetMapping("/api/mes/transDj")
-    public int transDj(@RequestParam String taskNo,@RequestParam String djNo){
-
-        return mesService.transDj(taskNo,djNo);
-    }
-
-    // 閫�绌烘墭鐩樿繑鍥炰骇绾� pda涓婃搷浣滅┖鎵樿繑鍥炰骇绾�
-    @GetMapping("/tkt")
-    public R tkt(@RequestParam String taskNo){
-         return mesService.tkt(taskNo);
-    }
-    // endregion
 
 }
diff --git a/src/main/java/com/zy/asrs/controller/MobileController.java b/src/main/java/com/zy/asrs/controller/MobileController.java
index 6b3224b..5befdc3 100644
--- a/src/main/java/com/zy/asrs/controller/MobileController.java
+++ b/src/main/java/com/zy/asrs/controller/MobileController.java
@@ -17,6 +17,7 @@
 import com.zy.common.model.WrkDto;
 import com.zy.common.web.BaseController;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
@@ -30,6 +31,7 @@
  */
 @RestController
 @RequestMapping("mobile")
+@Slf4j
 public class MobileController extends BaseController  {
 
     @Autowired
@@ -60,10 +62,31 @@
     @Resource
     private StaDescService staDescService;
 
+    // 鍏ュ簱鍚姩璋冪敤wcs缁欒緭閫佺嚎涓嬪懡浠� type 1.婊$鍏ュ簱(榛樿),2.绌虹鍏ュ簱
+    @GetMapping("/inboundStart/auth")
+    @ManagerAuth(memo = "鍏ュ簱鍚姩")
+    public R inboundStart(@RequestParam int type){
+        log.info("pda鍏ュ簱鍚姩锛歿}",type);
+        return mobileService.inboundStart(type);
+    }
+
     // 閫�绌烘墭鐩樿繑鍥炰骇绾� pda涓婃搷浣滅┖鎵樿繑鍥炰骇绾�(鍒�鏋惰繑鍥�)
     @GetMapping("/djReturn/auth")
+    @ManagerAuth(memo = "鍒�鏋惰繑鍥�")
     public R tkt(@RequestParam String djNo){
+        log.info("鍒�鏋惰繑鍥烇細{}",djNo);
         return mobileService.djReturn(djNo);
+    }
+
+    // 绌虹鍑哄簱
+    @GetMapping("/emptyBoxOutbound/auth")
+    @ManagerAuth(memo = "绌虹鍑哄簱")
+    public R emptyBoxOutbound(@RequestParam int count){
+        log.info("绌虹鍑哄簱锛歿}",count);
+        if (count <= 0) {
+            return R.parse("鏁伴噺鏈夎锛�" + count);
+        }
+        return mobileService.emptyBoxOutbound(count,getUserId());
     }
 
     @RequestMapping("/comb/auth")
@@ -72,8 +95,6 @@
         mobileService.comb(combParam, getUserId());
         return R.ok("缁勬墭鎴愬姛");
     }
-
-    // 杈撻�佺嚎娴佸姩
 
     @RequestMapping("/pda/WarehouseOut/v1")
     @ManagerAuth(memo = "骞舵澘閫斾腑鎷f枡-鍙傝�冨康鍒�")
diff --git a/src/main/java/com/zy/asrs/controller/RcsController.java b/src/main/java/com/zy/asrs/controller/RcsController.java
index 0f0d58e..0b59603 100644
--- a/src/main/java/com/zy/asrs/controller/RcsController.java
+++ b/src/main/java/com/zy/asrs/controller/RcsController.java
@@ -7,6 +7,7 @@
 import com.zy.asrs.entity.rcs.RcsReturn;
 import com.zy.asrs.service.RcsService;
 import com.zy.common.web.BaseController;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
@@ -14,6 +15,7 @@
 import javax.annotation.Resource;
 
 @RestController
+@Slf4j
 public class RcsController extends BaseController {
 
     @Resource
@@ -23,7 +25,7 @@
     // 鍙嶉浠诲姟鎵ц缁撴灉
     @PostMapping("/api/robot/reporter/task")
     public RcsReturn reporterTask(@RequestBody RcsReporterTask param){
-
+        log.info("agv浠诲姟鎵ц鍙嶉璇锋眰锛歿}",JSONObject.toJSONString(param));
         return rcsService.reporterTask(param);
     }
 
diff --git a/src/main/java/com/zy/asrs/entity/LocDetl.java b/src/main/java/com/zy/asrs/entity/LocDetl.java
index a7ee8a4..34181dc 100644
--- a/src/main/java/com/zy/asrs/entity/LocDetl.java
+++ b/src/main/java/com/zy/asrs/entity/LocDetl.java
@@ -18,6 +18,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
+import org.springframework.beans.BeanUtils;
 
 import java.io.Serializable;
 import java.text.SimpleDateFormat;
@@ -338,7 +339,7 @@
     }
 
     public void sync(Object source) {
-        Synchro.Copy(source, this);
+        BeanUtils.copyProperties(source,this);
     }
 
     public String getFrozen$() {
diff --git a/src/main/java/com/zy/asrs/entity/WrkDetlLog.java b/src/main/java/com/zy/asrs/entity/WrkDetlLog.java
index 6fa1590..25159c9 100644
--- a/src/main/java/com/zy/asrs/entity/WrkDetlLog.java
+++ b/src/main/java/com/zy/asrs/entity/WrkDetlLog.java
@@ -9,6 +9,7 @@
 import com.zy.system.service.UserService;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.beans.BeanUtils;
 
 import java.io.Serializable;
 import java.text.SimpleDateFormat;
@@ -399,6 +400,6 @@
     }
 
     public void sync(Object source) {
-        Synchro.Copy(source, this);
+        BeanUtils.copyProperties(source,this);
     }
 }
diff --git a/src/main/java/com/zy/asrs/entity/digitaltwin/DtLocDetailVo.java b/src/main/java/com/zy/asrs/entity/digitaltwin/DtLocDetailVo.java
index 1c64747..cfd9da0 100644
--- a/src/main/java/com/zy/asrs/entity/digitaltwin/DtLocDetailVo.java
+++ b/src/main/java/com/zy/asrs/entity/digitaltwin/DtLocDetailVo.java
@@ -2,7 +2,10 @@
 
 import com.zy.asrs.entity.LocDetl;
 import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.entity.mes.StockDetl;
 import lombok.Data;
+
+import java.util.List;
 
 @Data
 public class DtLocDetailVo  {
@@ -12,9 +15,9 @@
     // 搴撲綅鐘舵�侊紝O绌哄簱浣嶏紙鑻辨枃涓嶆槸鏁板瓧锛夛紱F 鍦ㄥ簱锛汥 绌烘澘锛汸 鍑哄簱涓紱R 鍑哄簱棰勭害锛汼 鍏ュ簱棰勭害锛涘叾浠� 鍏朵粬锛�
     private String locSts;
     // 搴撳尯id
-    private Long areaId;
+    private Long areaId = 10010L;
     // 搴撳尯鍚嶇О
-    private String areaName;
+    private String areaName = "鍒�鍏峰簱";
     // 鎺�
     private Integer row1;
     // 鍒�
@@ -22,9 +25,7 @@
     // 灞�
     private Integer lev1;
 
-    // 搴撲綅淇℃伅
-    private LocMast locMast;
     // 搴撳瓨淇℃伅
-    private LocDetl locDetl;
+    private List<StockDetl> locDetl;
 
 }
diff --git a/src/main/java/com/zy/asrs/entity/mes/StockDetl.java b/src/main/java/com/zy/asrs/entity/mes/StockDetl.java
new file mode 100644
index 0000000..94bb17c
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/mes/StockDetl.java
@@ -0,0 +1,21 @@
+package com.zy.asrs.entity.mes;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author pang.jiabao
+ * @description
+ * @createDate 2025/12/18 13:42
+ */
+@Data
+public class StockDetl {
+    @ApiModelProperty(value= "鏁伴噺")
+    private Double anfme;
+
+    @ApiModelProperty(value= "鍟嗗搧缂栧彿")
+    private String matnr;
+
+    @ApiModelProperty(value= "鍟嗗搧鍚嶇О")
+    private String maktx;
+}
diff --git a/src/main/java/com/zy/asrs/entity/param/LocDetlAdjustParam.java b/src/main/java/com/zy/asrs/entity/param/LocDetlAdjustParam.java
index 381d7c2..db0b022 100644
--- a/src/main/java/com/zy/asrs/entity/param/LocDetlAdjustParam.java
+++ b/src/main/java/com/zy/asrs/entity/param/LocDetlAdjustParam.java
@@ -30,10 +30,14 @@
         // 鍙樻洿鏁伴噺
         private Double count;
 
-        public LocDetlAdjust(String matnr, String batch, Double count) {
+        // 鏂欑鐮�
+        private String zpallet;
+
+        public LocDetlAdjust(String matnr, String batch, Double count,String zpallet) {
             this.matnr = matnr;
             this.batch = batch;
             this.count = count;
+            this.zpallet = zpallet;
         }
     }
 
@@ -52,7 +56,7 @@
                 }
             }
             if (!exit) {
-                copyList.add(new LocDetlAdjustParam.LocDetlAdjust(adjust.getMatnr(), adjust.getBatch(), adjust.getCount()));
+                copyList.add(new LocDetlAdjustParam.LocDetlAdjust(adjust.getMatnr(), adjust.getBatch(), adjust.getCount(),adjust.getZpallet()));
             }
         }
         list = copyList;
diff --git a/src/main/java/com/zy/asrs/service/DigitalTwinService.java b/src/main/java/com/zy/asrs/service/DigitalTwinService.java
index d56961f..c8f1f55 100644
--- a/src/main/java/com/zy/asrs/service/DigitalTwinService.java
+++ b/src/main/java/com/zy/asrs/service/DigitalTwinService.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.service;
 
+import com.core.common.R;
 import com.zy.asrs.entity.digitaltwin.*;
 
 import java.util.List;
@@ -50,7 +51,7 @@
      * @param areaId
      * @return
      */
-    List<DtLocDetailVo> warehouseDetail(String areaId);
+    R warehouseDetail(String areaId);
 
     /**
      * 杩戞湡鍓╀綑搴撲綅鏁伴噺锛岄粯璁�7澶�
diff --git a/src/main/java/com/zy/asrs/service/MesService.java b/src/main/java/com/zy/asrs/service/MesService.java
index de5936b..a5a5c36 100644
--- a/src/main/java/com/zy/asrs/service/MesService.java
+++ b/src/main/java/com/zy/asrs/service/MesService.java
@@ -42,7 +42,7 @@
      * @param mesOutApply
      * @return
      */
-    int outBoundOrder(MesInApply mesOutApply);
+    MesReturn outBoundOrder(MesInApply mesOutApply);
 
     /**
      * 鍑哄簱鐢宠锛堝彨鏂欙級锛岄綈濂楁�ч厤鐩�
@@ -75,8 +75,6 @@
      * @return
      */
     int inBoundOrder(MesInApply mesInApply, int check);
-
-    int transDj(String taskNo,String djNo);
 
     /**
      * 9.1涓嬪彂杩愯緭浠诲姟
@@ -150,5 +148,8 @@
      */
     int outStation(TransParent apply);
 
-    R tkt(String taskNo);
+    /**
+     * TMS鏌ヨ搴撳瓨
+     */
+    R queryStock(String matnr);
 }
diff --git a/src/main/java/com/zy/asrs/service/MobileService.java b/src/main/java/com/zy/asrs/service/MobileService.java
index 30ffc29..3354ce9 100644
--- a/src/main/java/com/zy/asrs/service/MobileService.java
+++ b/src/main/java/com/zy/asrs/service/MobileService.java
@@ -105,4 +105,15 @@
      * @param djNo 鍒�鏋跺彿
      */
     R djReturn(String djNo);
+
+    /**
+     * pda鍛煎彨绌烘枡绠卞嚭搴�
+     */
+    R emptyBoxOutbound(int count,Long userId);
+
+    /**
+     * 鍏ュ簱鍚姩璋冪敤wcs缁欒緭閫佺嚎涓嬪懡浠�
+     * @param type 1.婊$鍏ュ簱9998(榛樿),2.绌虹鍏ュ簱9997
+     */
+    R inboundStart(int type);
 }
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..0a14629 100644
--- a/src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/DigitalTwinServiceImpl.java
@@ -1,12 +1,18 @@
 package com.zy.asrs.service.impl;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.common.R;
 import com.zy.asrs.entity.LocCount;
 import com.zy.asrs.entity.LocDetl;
 import com.zy.asrs.entity.LocMast;
 import com.zy.asrs.entity.digitaltwin.*;
+import com.zy.asrs.entity.mes.StockDetl;
 import com.zy.asrs.mapper.DigitalTwinMapper;
 import com.zy.asrs.mapper.LocCountMapper;
 import com.zy.asrs.service.DigitalTwinService;
+import com.zy.asrs.service.LocDetlService;
+import com.zy.asrs.service.LocMastService;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -142,38 +148,48 @@
         return dbDetainMats;
     }
 
+    @Resource
+    private LocDetlService locDetlService;
+
+    @Resource
+    private LocMastService locMastService;
+
     /**
      * 鏌ヨ搴撳瓨鍜屽簱浣嶈缁嗕俊鎭�
      *
      * @param areaId
      * @return
      */
-    public List<DtLocDetailVo> warehouseDetail(String areaId) {
-        List<DtLocDetailVo> locDetailVos = new ArrayList<>();
+    public R warehouseDetail(String areaId) {
+        List<LocDetl> locDetls;
+        locDetls = locDetlService.selectList(new EntityWrapper<>());
 
-        List<LocMast> locMasts = new ArrayList<>();
-        List<LocDetl> locDetls = new ArrayList<>();
+        List<String> locNoList = locDetls.stream().map(LocDetl::getLocNo).distinct().collect(Collectors.toList());
+        List<DtLocDetailVo> dtLocDetailVoList = new ArrayList<>();
+        for (String locNo: locNoList) {
 
-        for (LocMast locMast : locMasts) {
+            LocMast locMast = locMastService.selectById(locNo);
             DtLocDetailVo dtLocDetailVo = new DtLocDetailVo();
-            dtLocDetailVo.setLocMast(locMast);
-            dtLocDetailVo.setLocNo(locMast.getLocNo());
+            dtLocDetailVo.setLocNo(locNo);
             dtLocDetailVo.setLocSts(locMast.getLocSts());
             dtLocDetailVo.setRow1(locMast.getRow1());
             dtLocDetailVo.setBay1(locMast.getBay1());
             dtLocDetailVo.setLev1(locMast.getLev1());
-            for (LocDetl locDetl : locDetls) {
-                List<LocDetl> locDetl1 = locDetls.parallelStream().filter(a -> a.getLocNo().equals(locDetl.getLocNo())).collect(Collectors.toList());
-                if (locDetl1 != null && locDetl1.size() == 1) {
-                    dtLocDetailVo.setLocDetl(locDetl1.get(0));
-                    dtLocDetailVo.setAreaId(locDetl.getAreaId());
-                    dtLocDetailVo.setAreaName(locDetl.getAreaName());
-                }
+
+            List<LocDetl> locDetlList2 = locDetls.parallelStream().filter(o-> o.getLocNo().equals(locNo)).collect(Collectors.toList());
+            List<StockDetl> stockDetls = new ArrayList<>();
+            for(LocDetl locDetl:locDetlList2) {
+                StockDetl stockDetl = new StockDetl();
+                stockDetl.setMatnr(locDetl.getMatnr());
+                stockDetl.setMaktx(locDetl.getMaktx());
+                stockDetl.setAnfme(locDetl.getAnfme());
+                stockDetls.add(stockDetl);
             }
-            locDetailVos.add(dtLocDetailVo);
+            dtLocDetailVo.setLocDetl(stockDetls);
+            dtLocDetailVoList.add(dtLocDetailVo);
         }
 
-        return locDetailVos;
+        return R.ok(dtLocDetailVoList);
     }
 
     /**
diff --git a/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
index e6b7a13..1c92379 100644
--- a/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
@@ -9,6 +9,7 @@
 import com.core.common.SnowflakeIdWorker;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.digitaltwin.DtLocDetailVo;
 import com.zy.asrs.entity.mes.*;
 import com.zy.asrs.entity.param.CombParam;
 import com.zy.asrs.entity.rcs.*;
@@ -133,11 +134,7 @@
             // 瑙勫垯瀹氫箟锛氶粯璁ょ3灞備负鍚屾鐨勭墿鏂欑被鍨�
             long secondPath = 2;
             String secondParentName = WMS_CURRENT_NAME;
-//        long locType = 1;
             long userId = defaultUserId;
-//            if (mesMatInfo.getModified_operator1() != null && !mesMatInfo.getModified_operator1().isEmpty()) {
-//                userId = Long.parseLong(mesMatInfo.getModified_operator1());
-//            }
             Date now = new Date();
             if (mesMatInfo.getModified_date1() != null && !mesMatInfo.getModified_date1().isEmpty()) {
                 now = Date.from(OffsetDateTime.parse(mesMatInfo.getModified_date1()).toInstant());
@@ -168,35 +165,29 @@
             // 鐗╂枡鏇存柊
             long tagId = tagService.selectByName(mesMatInfo.getItem_type(), 3).getId();
             Mat mat = matService.selectByMatnr(mesMatInfo.getItem_no());
-            Mat newMat = new Mat();
-            newMat.setMatnr(mesMatInfo.getItem_no());
-            newMat.setMaktx(mesMatInfo.getDescription());
-            newMat.setTagId(tagId);
-            newMat.setLocType(tagId);   //locType
-            newMat.setSpecs(mesMatInfo.getSpecification());
-            newMat.setUnit("浠�");   //缁熶竴涓轰欢锛宮esMatInfo.getUnit_of_measure()
-            newMat.setModel(mesMatInfo.getClassification_code());
-            newMat.setMemo(JSONObject.toJSONString(mesMatInfo));
-            newMat.setCreateBy(userId);
-            newMat.setCreateTime(now);
-            newMat.setUpdateBy(userId);
-            newMat.setUpdateTime(now);
-            newMat.setStatus(1);
             if (mat == null) {
-                if (!matService.insert(newMat))
-                    return -2;
+                Mat newMat = new Mat();
+                newMat.setMatnr(mesMatInfo.getItem_no());
+                newMat.setMaktx(mesMatInfo.getDescription());
+                newMat.setTagId(tagId);
+                newMat.setLocType(tagId);   //locType
+                newMat.setSpecs(mesMatInfo.getSpecification());
+                newMat.setUnit(mesMatInfo.getUnit_of_measure());
+                newMat.setModel(mesMatInfo.getClassification_code());
+//            newMat.setMemo(JSONObject.toJSONString(mesMatInfo));
+                newMat.setCreateBy(userId);
+                newMat.setCreateTime(now);
+                newMat.setUpdateBy(userId);
+                newMat.setUpdateTime(now);
+                newMat.setStatus(1);
+                matService.insert(newMat);
             } else {
-                JSONObject dbMemo = JSONObject.parseObject(mat.getMemo());
-//            dbMemo.remove("OrderNo");
-//            dbMemo.remove("qty");
-            JSONObject newMemo = JSONObject.parseObject(newMat.getMemo());
-//            newMemo.remove("OrderNo");
-//            newMemo.remove("qty");
-                if (!dbMemo.equals(newMemo)) {
-                    newMat.setId(mat.getId());
-                    if (!matService.updateById(newMat))
-                        return -2;
-                }
+                mat.setMaktx(mesMatInfo.getDescription());
+                mat.setSpecs(mesMatInfo.getSpecification());
+                mat.setUnit(mesMatInfo.getUnit_of_measure());
+                mat.setModel(mesMatInfo.getClassification_code());
+                mat.setUpdateTime(now);
+                matService.updateById(mat);
             }
 
             return 1;
@@ -266,6 +257,9 @@
         return 0;
     }
 
+    @Resource
+    private BasStationService basStationService;
+
     /**
      * 鍑哄簱鐢宠
      * 鍔犲伐搴撱�佸垁鍏峰簱
@@ -274,22 +268,38 @@
      * @return 1 鎴愬姛锛�-1 璁㈠崟閲嶅锛�
      */
     @Transactional
-    public int outBoundOrder(MesInApply mesOutApply){
+    public MesReturn outBoundOrder(MesInApply mesOutApply) {
+        MesReturn mesReturn = new MesReturn();
+        // 缁堢偣涓虹┖锛岃绠楁帴椹充綅
+        BasStation basStation = null;
+        if (Cools.isEmpty(mesOutApply.getNextStationId())) {
+            List<BasStation> basStations = basStationService.selectList(new EntityWrapper<BasStation>().eq("loc_sts", "O"));
+            if (basStations.isEmpty()) {
+                mesReturn.setSuccess("2");
+                mesReturn.setMessage("鏃犵┖鎺ラ┏浣嶏紝璇风◢鍚庡啀璇�!");
+                return mesReturn;
+            }
+            // 鎺ラ┏鐐�
+            basStation = basStations.get(0);
+            mesOutApply.setNextStationId(basStation.getDevNo());
+        }
 
         // docType鏍规嵁搴撶被鍨嬬‘瀹�
-        long docType = 7;
+        long docType = Long.parseLong(mesOutApply.getBillType());
         long settle = 1;
 
         // 鏍¢獙璁㈠崟鏄惁閲嶅
         OrderPakout order = orderPakoutService.selectByNo(mesOutApply.getOrderNo());
         if (order != null && !StringUtils.isEmpty(order.getOrderNo())) {
-            return -1;
+            mesReturn.setSuccess("2");
+            mesReturn.setMessage("orderNo閲嶅锛�" + mesOutApply.getOrderNo());
+            return mesReturn;
         }
 
         // 鐢熸垚璁㈠崟
         Date now = new Date();
         OrderPakout orderPakout = new OrderPakout();
-        orderPakout.setUuid( String.valueOf(snowflakeIdWorker.nextId()));
+        orderPakout.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
         orderPakout.setOrderNo(mesOutApply.getOrderNo());
         orderPakout.setOrderTime(com.core.common.DateUtils.convert(now));
         orderPakout.setDocType(docType);
@@ -302,7 +312,7 @@
         orderPakout.setMemo(JSONObject.toJSONString(mesOutApply));
         orderPakout.setPakinPakoutStatus(2);
         if (!orderPakoutService.insert(orderPakout)) {
-            log.error("MES淇濆瓨鍑哄簱璁㈠崟涓绘。澶辫触:{}",orderPakout);
+            log.error("MES淇濆瓨鍑哄簱璁㈠崟涓绘。澶辫触:{}", orderPakout);
             throw new CoolException("淇濆瓨鍑哄簱璁㈠崟涓绘。澶辫触");
         }
 
@@ -325,74 +335,43 @@
             orderDetlPakout.setStatus(1);
             orderDetlPakout.setPakinPakoutStatus(2);
             if (!orderDetlPakoutService.insert(orderDetlPakout)) {
-                log.error("MES淇濆瓨鍑哄簱璁㈠崟鏄庣粏妗eけ璐�:{}",orderDetlPakout);
+                log.error("MES淇濆瓨鍑哄簱璁㈠崟鏄庣粏妗eけ璐�:{}", orderDetlPakout);
                 throw new CoolException("淇濆瓨鍑哄簱璁㈠崟鏄庣粏妗eけ璐�");
             }
         }
 
-        // TODO锛欳TU鍑哄簱鍔ㄤ綔
-
         // 绔嬪簱鐢熸垚璁㈠崟鍚庯紝鑷姩璋冨害AGV浠庝骇绾胯繍杈撶┖鍒�鏋惰嚦绔嬪簱缂撳瓨鍖恒��
-            if (!StringUtils.isEmpty(mesOutApply.getTaskNo()) && !StringUtils.isEmpty(mesOutApply.getStationId())) {
-                TransTask transTask = new TransTask();
-                transTask.setTaskno(mesOutApply.getTaskNo());
-                transTask.setTaskname(mesOutApply.getTaskname());
-                transTask.setOrderNo(mesOutApply.getOrderNo());
-                transTask.setTransType("02");    //杩愬洖鍒�鏋舵椂榛樿02锛堜笅绌烘墭锛� mesOutApply.getTransType()
-                transTask.setCurProcess(mesOutApply.getProductLineId());
-                transTask.setCurStationId(mesOutApply.getStationId());
-                transTask.setNextProcess(mesOutApply.getProductLineId());
-                transTask.setNextStationId(mesOutApply.getNextStationId());
-//                transTask.setItemno(mesOutApply.getItemNo());
-                transTask.setQty(1);
-                transTask.setProductLineId(mesOutApply.getProductLineId());
-//                        transTask.setItemBarcode(codes);
-//                        transTask.setTuoPanId(entry.getKey());
-                transTask.setDjNo(mesOutApply.getDjNo());
-                transTask.setOperateType(1);
-                transTask.setAgvFactory(1);
-                JSONObject sendAgvTask = submitTask(transTask);
-                if (!"1".equals(sendAgvTask.getString("Success"))) {
-                    log.error("鍑哄簱涓嬪彂agv杩愯緭浠诲姟澶辫触锛歿}", JSONObject.toJSONString(transTask));
-                }
+        TransTask transTask = new TransTask();
+        transTask.setTaskno(mesOutApply.getTaskNo());
+        transTask.setTaskname(mesOutApply.getTaskname());
+        transTask.setOrderNo(mesOutApply.getOrderNo());
+        transTask.setTransType("02");    //杩愬洖鍒�鏋舵椂榛樿02锛堜笅绌烘墭锛� mesOutApply.getTransType()
+        transTask.setCurProcess(mesOutApply.getProductLineId());
+        transTask.setCurStationId(mesOutApply.getStationId());
+        transTask.setNextProcess(mesOutApply.getProductLineId());
+        transTask.setNextStationId(mesOutApply.getNextStationId());
+        transTask.setQty(1);
+        transTask.setProductLineId(mesOutApply.getProductLineId());
+        transTask.setDjNo(mesOutApply.getDjNo());
+        transTask.setOperateType(1);
+        transTask.setAgvFactory(1);
+        JSONObject sendAgvTask = submitTask(transTask);
+        if ("1".equals(sendAgvTask.getString("Success"))) {
+            // 鏂版帴椹崇偣鐘舵��
+            if (basStation != null) {
+                basStation.setModiTime(new Date());
+                basStation.setLocSts("S");
+                basStation.setBarcode(mesOutApply.getDjNo());
+                basStationService.updateById(basStation);
             }
-        return 1;
-    }
 
-    public int transDj(String taskNo,String djNo) {
-        try {
-            EntityWrapper<Task> wapper = new EntityWrapper<>();
-            wapper.eq("task_no", taskNo).orderBy("wrk_date");
-            Task task = taskService.selectOne(wapper);
-            if (task != null) {
-                JSONObject memo = JSONObject.parseObject(task.getMemo());
-
-                TransTask transTask = new TransTask();
-                transTask.setTaskno(taskNo + "_1");
-//                        transTask.setTaskname(mesOutApply.getTaskname());
-                transTask.setOrderNo(memo.getString("OrderNo"));
-                transTask.setTransType("05");    //閫佸垁鏃堕粯璁�05锛堜笂鍒�锛�
-                transTask.setCurStationId(WMS_TRANS_START_STATION_1);
-                transTask.setNextProcess(memo.getString("ProductLineId"));
-                transTask.setNextStationId(memo.getString("CurStationId"));
-//                transTask.setItemno(mesOutApply.getItemNo());
-//                transTask.setQty(0);
-                transTask.setProductLineId(memo.getString("ProductLineId"));
-//                        transTask.setItemBarcode(codes);
-//                        transTask.setTuoPanId(entry.getKey());
-                transTask.setOperateType(1);
-                transTask.setAgvFactory(1);
-                transTask.setDjNo(djNo);
-                JSONObject sendAgvTask = submitTask(transTask);
-                if (!"1".equals(sendAgvTask.getString("Success"))) {
-                    log.error("涓婂垁涓嬪彂agv杩愯緭浠诲姟澶辫触", JSONObject.toJSONString(transTask));
-                }
-            }
-        } catch (Exception e) {
-            log.error("涓婂垁涓嬪彂AGV杩愯緭浠诲姟澶辫触", e);
+            mesReturn.setSuccess("1");
+            mesReturn.setMessage("璁㈠崟涓嬪彂鎴愬姛锛宎gv寮�濮嬭繍杈擄細" + transTask.getTaskno());
+            return mesReturn;
+        } else {
+            log.error("鍑哄簱涓嬪彂agv杩愯緭浠诲姟澶辫触锛歿}", JSONObject.toJSONString(transTask));
+            throw new CoolException("鍑哄簱涓嬪彂agv杩愯緭浠诲姟澶辫触");
         }
-
-        return 1;
     }
 
     /**
@@ -710,7 +689,6 @@
 
     /**
      * 9.1涓嬪彂杩愯緭浠诲姟
-     * TODO:鍏朵粬搴撶殑浠诲姟鍏ㄩ儴杞埌婊戝潡搴撶粺涓�璋冨害
      *
      * @param transTask
      * @return
@@ -734,7 +712,11 @@
         // 涓嬪彂缁橰CS
         RcsTaskSubmit rcsTaskSubmit = new RcsTaskSubmit();
         // 妯℃澘鍚�
-        rcsTaskSubmit.setTaskType("CS");
+        if(transTask.getCurStationId().startsWith("LL") || transTask.getCurStationId().startsWith("LG")) { // 璧风偣浜х嚎
+            rcsTaskSubmit.setTaskType("DJ1");
+        } else if(transTask.getNextStationId().startsWith("LL") || transTask.getNextStationId().startsWith("LG")) { // 缁堢偣浜х嚎
+            rcsTaskSubmit.setTaskType("DJ2");
+        }
         rcsTaskSubmit.setRobotTaskCode(transTask.getTaskno());
         rcsTaskSubmit.setInitPriority(10);  //榛樿10
         List<RcsTaskTargetRoute> targetRouteList = new ArrayList<>();
@@ -990,51 +972,47 @@
         return 0;
     }
 
+    @Resource
+    private LocDetlService locDetlService;
+
+    @Resource
+    private LocMastService locMastService;
+
     @Override
-    public R tkt(String taskNo) {
-        boolean flag = false;
-        try {
-            EntityWrapper<Task> wapper = new EntityWrapper<>();
-            wapper.eq("task_no", taskNo).orderBy("wrk_date",false);
-            Task task = taskService.selectOne(wapper);
-            // 涓嬪彂缁橰CS
-            RcsTaskSubmit rcsTaskSubmit = new RcsTaskSubmit();
-            rcsTaskSubmit.setRobotTaskCode(taskNo + "-1");
-            rcsTaskSubmit.setInitPriority(10);  //榛樿10
-            List<RcsTaskTargetRoute> targetRouteList = new ArrayList<>();
-            RcsTaskTargetRoute startRoute = new RcsTaskTargetRoute();
-            startRoute.setSeq(0);
-            startRoute.setCode(task.getStaNo());
-            startRoute.setOperation("COLLECT");
-            targetRouteList.add(startRoute);
-            RcsTaskTargetRoute endRoute = new RcsTaskTargetRoute();
-            endRoute.setSeq(1);
-            endRoute.setCode(task.getSourceStaNo());
-            endRoute.setOperation("DELIVERY");
-            targetRouteList.add(endRoute);
-            rcsTaskSubmit.setTargetRoute(targetRouteList);
-            // 鏇存柊璧风偣鍜岀粓鐐�
-            String memo = task.getMemo();
-            TransTask transTask = JSONObject.parseObject(memo, TransTask.class);
-            transTask.setCurStationId(task.getSourceStaNo());
-            transTask.setNextStationId(task.getStaNo());
-            transTask.setTransType("01"); // 涓嬬┖鎵�
-            // 鏇存柊agv浠诲姟璧风偣鍜岀粓鐐�
-            task.setTaskNo(taskNo + "-1");
-            task.setSourceStaNo(transTask.getCurStationId());
-            task.setStaNo(transTask.getNextStationId());
-            task.setMemo(JSONObject.toJSONString(transTask));
-            taskService.updateById(task);
-            // 杞彂缁欐捣搴锋垨鍗庢檽RCS
-            RcsReturn rcsReturn = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory());
-            if (rcsReturn.getCode().equals("SUCCESS")) {
-                flag = true;
-            }
-        } catch (Exception e) {
-            log.error("绌烘墭鍥炰骇绾垮彂AGV杩愯緭浠诲姟澶辫触", e);
+    public R queryStock(String matnr) {
+        List<LocDetl> locDetls;
+        if (Cools.isEmpty(matnr)) {
+            locDetls = locDetlService.selectList(new EntityWrapper<>());
+        } else {
+            locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("matnr",matnr));
         }
 
-        return flag ?R.ok() : R.parse("绌烘墭鍥炰骇绾垮懠鍙玜gv澶辫触");
+        List<String> locNoList = locDetls.stream().map(LocDetl::getLocNo).distinct().collect(Collectors.toList());
+        List<DtLocDetailVo> dtLocDetailVoList = new ArrayList<>();
+        for (String locNo: locNoList) {
+
+            LocMast locMast = locMastService.selectById(locNo);
+            DtLocDetailVo dtLocDetailVo = new DtLocDetailVo();
+            dtLocDetailVo.setLocNo(locNo);
+            dtLocDetailVo.setLocSts(locMast.getLocSts());
+            dtLocDetailVo.setRow1(locMast.getRow1());
+            dtLocDetailVo.setBay1(locMast.getBay1());
+            dtLocDetailVo.setLev1(locMast.getLev1());
+
+            List<LocDetl> locDetlList2 = locDetls.parallelStream().filter(o-> o.getLocNo().equals(locNo)).collect(Collectors.toList());
+            List<StockDetl> stockDetls = new ArrayList<>();
+            for(LocDetl locDetl:locDetlList2) {
+                StockDetl stockDetl = new StockDetl();
+                stockDetl.setMatnr(locDetl.getMatnr());
+                stockDetl.setMaktx(locDetl.getMaktx());
+                stockDetl.setAnfme(locDetl.getAnfme());
+                stockDetls.add(stockDetl);
+            }
+            dtLocDetailVo.setLocDetl(stockDetls);
+            dtLocDetailVoList.add(dtLocDetailVo);
+        }
+
+        return R.ok(dtLocDetailVoList);
     }
 
     // endregion
@@ -1047,8 +1025,9 @@
      */
     private int checkRcsFactory(String agvNo) {
 
-        AgvInfo agvInfo = agvInfoMapper.selectById(agvNo);
-        return agvInfo.getAgvFactory();
+//        AgvInfo agvInfo = agvInfoMapper.selectById(agvNo);
+//        return agvInfo.getAgvFactory();
+        return 1;
     }
 
 }
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 61a8b77..a008dca 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -4,6 +4,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
 import com.core.common.*;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
@@ -30,10 +31,12 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
@@ -123,6 +126,102 @@
     @Resource
     private RcsService rcsService;
 
+
+    @Override
+    @Transactional
+    public R emptyBoxOutbound(int count, Long userId) {
+        List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>().setSqlSelect("TOP " + count + " *").eq("loc_sts", "D").eq("frozen", 0).orderBy("lev1").orderBy("bay1").orderBy("row1"));
+        if (locMastList.size() < count) {
+            return R.parse("绌烘枡绠辨暟閲忎笉瓒�(鎴栧喕缁�)锛屽墿浣欐暟閲忥細" + locMastList.size());
+        }
+        for (LocMast locMast : locMastList) {
+            // 鑾峰彇宸ヤ綔鍙�
+            int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
+            Date now = new Date();
+            // 淇濆瓨宸ヤ綔妗�
+            WrkMast wrkMast = new WrkMast();
+            wrkMast.setWrkNo(workNo);
+            wrkMast.setIoTime(now);
+            wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+            wrkMast.setIoType(110); // 鍏ュ嚭搴撶姸鎬侊細 110.绌烘澘鍑哄簱
+            wrkMast.setIoPri(10D);
+            wrkMast.setSourceStaNo("101"); // 婧愮珯
+            wrkMast.setStaNo("103"); // 鐩爣绔�
+            wrkMast.setCrnNo(locMast.getCrnNo());
+            wrkMast.setSourceLocNo(locMast.getLocNo()); // 婧愬簱浣�
+            wrkMast.setBarcode(locMast.getBarcode());
+            wrkMast.setFullPlt("N"); // 婊℃澘锛歒
+            wrkMast.setPicking("N"); // 鎷f枡
+            wrkMast.setExitMk("N"); // 閫�鍑�
+            wrkMast.setEmptyMk("Y"); // 绌烘澘
+            wrkMast.setLinkMis("N");
+            wrkMast.setAppeUser(userId);
+            wrkMast.setAppeTime(now);
+            wrkMast.setModiUser(userId);
+            wrkMast.setModiTime(now);
+            wrkMastService.insert(wrkMast);
+
+            locMast.setLocSts("R");
+            locMast.setModiUser(userId);
+            locMast.setModiTime(now);
+            if (!locMastService.updateById(locMast)) {
+                throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�");
+            }
+
+        }
+        return R.ok("鍑哄簱鎴愬姛");
+    }
+
+    @Value("${wcs-slave.url}")
+    private String WCS_URL;
+
+    @Override
+    public R inboundStart(int type) {
+//        BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 103));
+//        if (!basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("Y")) {
+//            return R.parse("绔欑偣103涓嶆槸鑷姩/鏈夌墿鐘舵��");
+//        }
+
+        Map<String,Object> params = new HashMap<>();
+        params.put("siteId",103);
+        int wrkNo = type == 1 ? 9998 : 9997;
+        params.put("workNo",wrkNo);
+        params.put("staNo", 104);
+        params.put("pakMk","Y");
+        String response;
+        boolean success = false;
+        String message = "";
+        try {
+            HashMap<String, Object> headers = new HashMap<>();
+            headers.put("token","1");
+            response = new HttpHandler.Builder()
+                    .setUri(WCS_URL)
+                    .setPath("/site/detl/update")
+//                    .setHeaders(headers)
+                    .setParams(params)
+                    .build()
+                    .doPost();
+            if (Cools.isEmpty(response)) {
+                log.error("鍏ュ簱鍚姩璋冪敤wcs缁欒緭閫佺嚎涓嬪懡浠ゅけ璐ワ紝杩斿洖鍊间负绌�");
+            } else {
+                JSONObject jsonObject = JSONObject.parseObject(response);
+                if(jsonObject.getInteger("code").equals(200)) {
+                    success = true;
+                    log.info("鍏ュ簱鍚姩璋冪敤wcs缁欒緭閫佺嚎涓嬪懡鎴愬姛,wrkNo:{}",wrkNo);
+                } else {
+                    message = String.valueOf(jsonObject.getString("msg"));
+                    log.error("鍏ュ簱鍚姩璋冪敤wcs缁欒緭閫佺嚎涓嬪懡浠ゅけ璐�:{}",message);
+                }
+            }
+        } catch (IOException e) {
+            log.error("鍏ュ簱鍚姩璋冪敤wcs缁欒緭閫佺嚎涓嬪懡浠ゅ紓甯�:{}",e.getMessage());
+            message = e.getMessage();
+            e.printStackTrace();
+        }
+
+        return success ? R.ok("涓嬪彂鎴愬姛") : R.parse(message);
+    }
+
     @Override
     @Transactional
     public R djReturn(String djNo) {
@@ -140,7 +239,7 @@
 
             TransTask transTask = JSONObject.parseObject(task.getMemo(), TransTask.class);
             transTask.setTaskno(task.getTaskNo());
-            transTask.setCurStationId(sourceStaNo);
+            transTask.setCurStationId(task.getSourceStaNo());
             transTask.setNextStationId(task.getStaNo());
             if(transTask.getTransType().equals("06")) {
                 transTask.setTransType("01");
@@ -156,7 +255,7 @@
             // 涓嬪彂缁橰CS
             RcsTaskSubmit rcsTaskSubmit = new RcsTaskSubmit();
             // 妯℃澘鍚�
-            rcsTaskSubmit.setTaskType("CS");
+            rcsTaskSubmit.setTaskType("DJ2");
             rcsTaskSubmit.setRobotTaskCode(transTask.getTaskno());
             rcsTaskSubmit.setInitPriority(10);  //榛樿10
             List<RcsTaskTargetRoute> targetRouteList = new ArrayList<>();
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 66ed864..12af9a8 100644
--- a/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
@@ -4,9 +4,9 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
 import com.zy.asrs.entity.*;
-import com.zy.asrs.entity.mes.TransArrivalStation;
-import com.zy.asrs.entity.mes.TransParent;
+import com.zy.asrs.entity.mes.*;
 import com.zy.asrs.entity.rcs.*;
 import com.zy.asrs.enums.RcsRetMethodEnum;
 import com.zy.asrs.mapper.BlockStationMapper;
@@ -23,6 +23,8 @@
 import java.net.URL;
 import java.net.URLConnection;
 import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
@@ -40,6 +42,9 @@
     @Value("${mes.defaultUserId}")
     public long defaultUserId;
 
+    @Value("${dj.url}")
+    public String DJ_URL;
+
     @Resource
     private BasStationService basStationService;
 
@@ -55,6 +60,12 @@
     private TaskDetlServiceImpl taskDetlService;
     @Resource
     private WrkMastService wrkMastService;
+
+    @Resource
+    private WrkDetlService wrkDetlService;
+
+    @Resource
+    private OrderPakoutService orderPakoutService;
 
 
     // region 灏侀攣鍖洪�昏緫锛岀洰鍓嶅彧鏈変竴涓ぇ灏侀攣鍖猴紝浠诲姟鍏ㄩ儴杞埌婊戝潡搴撳鐞嗭紝鎴栫洿鎺ュ啓鍒版粦鍧楀簱
@@ -175,21 +186,23 @@
         String url = rcsFactory == 2 ? HX_URL : HIK_URL + "api/robot/controller/task/submit";
         String response = "";
         try {
+            // 妯℃嫙杩斿洖
+//            rcsReturn.setCode("SUCCESS");
+//            success = true;
+
             response = sendPost(url, JSONObject.toJSONString(rcsTaskSubmit));
             if (!StringUtils.isEmpty(response) && response.contains("code")) {
                 rcsReturn = JSONObject.parseObject(response, RcsReturn.class);
                 if ("SUCCESS".equals(rcsReturn.getCode())) {
-                    // 妯℃嫙杩斿洖
-//            rcsReturn.setCode("SUCCESS");
-//            JSONObject jsonObject = new JSONObject();
-//            jsonObject.put("robotTaskCode","2025121301");
-//            rcsReturn.setData(jsonObject);
                     success = true;
 
                     log.info("鍛煎彨agv鎼繍鎴愬姛锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", url, JSON.toJSONString(rcsTaskSubmit), response);
                 } else {
                     log.error("鍛煎彨agv鎼繍澶辫触锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", url, JSON.toJSONString(rcsTaskSubmit), response);
                 }
+            } else {
+                log.error("鍛煎彨agv鎼繍澶辫触锛宺esponse锛歿}",response);
+                rcsReturn.setCode("ERROR");
             }
         } catch (Exception e) {
             log.error("鍛煎彨agv鎼繍寮傚父", e);
@@ -314,11 +327,11 @@
                     switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) {
                         case TASK_START: {
                             if (ioType == 1 || ioType == 10 || ioType == 53) {
-                                wrkMast.setCrnStrTime(now);
                                 wrkMast.setModiTime(now);
                                 wrkMastService.updateById(wrkMast);
                             } else if (ioType == 101 || ioType == 110 || ioType == 103) {
-
+                                wrkMast.setModiTime(now);
+                                wrkMastService.updateById(wrkMast);
                             } else {
                                 log.error("{}ioType{}涓嶅湪end鍙嶉澶勭悊涓�", wrkMast.getWrkNo(), ioType);
                             }
@@ -331,6 +344,44 @@
                                 wrkMast.setModiTime(now);
                                 wrkMastService.updateById(wrkMast);
                             } else if (ioType == 101 || ioType == 110 || ioType == 103) {
+                                wrkMast.setWrkSts(14L);
+                                wrkMast.setCrnEndTime(now);
+                                wrkMast.setModiTime(now);
+                                wrkMastService.updateById(wrkMast);
+                                // 缁橳MS鍙嶉鍑哄簱璐х墿淇℃伅
+                                List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
+                                if(!wrkDetls.isEmpty()) {
+                                    WrkDetl wrkDetl = wrkDetls.get(0);
+                                    String orderNo = wrkDetl.getOrderNo();
+                                    if(!Cools.isEmpty(orderNo)) {
+                                        OrderPakout orderPakout = orderPakoutService.selectByNo(orderNo);
+                                        if (orderPakout != null) {
+                                            MesInApply mesOutFeedback = new MesInApply();
+                                            mesOutFeedback.setBillType(String.valueOf(orderPakout.getDocType()));
+                                            mesOutFeedback.setOrderNo(orderNo);
+                                            mesOutFeedback.setCreateTime( new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now));
+                                            List<MesItemDetails> details = new ArrayList<>();
+                                            for(WrkDetl detl:wrkDetls) {
+                                                MesItemDetails detail = new MesItemDetails();
+                                                detail.setItemNo(detl.getMatnr());
+                                                detail.setAnfme(detl.getAnfme());
+                                                details.add(detail);
+                                            }
+                                            mesOutFeedback.setDetails(details);
+                                            String url = DJ_URL + "api/OutboundOrder/WmsOutFinish";
+                                            String request = JSONObject.toJSONString(mesOutFeedback);
+                                            String response = RcsServiceImpl.sendPost(url, request);
+                                            if (!StringUtils.isEmpty(response) && response.contains("Success")){
+                                                MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
+                                                if("1".equals(mesReturn.getSuccess())) {
+                                                    log.info("CTU鍑哄簱鍙嶉end,涓婃姤TMS鎴愬姛,宸ヤ綔鍙凤細{}锛屾槑缁嗭細{}",wrkMast.getWrkNo(),request);
+                                                } else {
+                                                    log.error("CTU鍑哄簱鍙嶉end,涓婃姤TMS澶辫触锛�,宸ヤ綔鍙凤細{}锛屾槑缁嗭細{}",wrkMast.getWrkNo(),request);
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
 
                             } else {
                                 log.error("{}ioType{}涓嶅湪end鍙嶉澶勭悊涓�", wrkMast.getWrkNo(), ioType);
@@ -393,7 +444,7 @@
                         task.setModiUser(defaultUserId);
                         taskService.updateById(task);
                         // 浠诲姟瀹屾垚
-                        mesService.reporterTask(rcsReporterTask);
+//                        mesService.reporterTask(rcsReporterTask);
 
                         // 鏇存柊鎺ラ┏浣嶇疆鐘舵��
 
@@ -433,6 +484,15 @@
                             mesService.applyOutStation(apply);
                         } else if (RcsRetMethodEnum.ARRIVE_OFF_STATION.getCode().equals(method)) {
                             mesService.outStation(apply);
+                            // agv缁х画鎵ц
+                            // 婧愮珯鐐规槸浜х嚎锛岀绔欏畬鎴愬悗缁檙cs鍙嶉缁х画鎵ц
+                            if(task.getSourceStaNo().contains("TOOL")) {
+                                TransInOutStationAllow inOutStationAllow = new TransInOutStationAllow();
+                                inOutStationAllow.setTaskno(robotTaskCode);
+                                inOutStationAllow.setStatus("Y");
+                                inOutStationAllow.setAgvCode(singleRobotCode);
+                                mesService.allowOutStation(inOutStationAllow);
+                            }
                         }
                     } break;
                     case ARRIVE_ON_STATION: {
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 32e9eaa..494de65 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -468,6 +468,7 @@
             wrkDetl.setSpecs(orderDetl.getSpecs());
             wrkDetl.setModel(orderDetl.getModel());
             wrkDetl.setUnit(orderDetl.getUnit());
+            wrkDetl.setThreeCode(String.valueOf(orderPakout.getDocType())); // 鍗曟嵁绫诲瀷
             if (!wrkDetlService.insert(wrkDetl)) {
                 throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
             }
@@ -598,6 +599,7 @@
             wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
             wrkMast.setIoType(110); // 鍏ュ嚭搴撶姸鎬侊細 110.绌烘澘鍑哄簱
             wrkMast.setIoPri(10D);
+            wrkMast.setBarcode(locMast.getBarcode());
             wrkMast.setSourceStaNo(sourceStaNo + ""); // 婧愮珯
             wrkMast.setStaNo(param.getOutSite() + ""); // 鐩爣绔�
             wrkMast.setCrnNo(locMast.getCrnNo());
@@ -1007,14 +1009,16 @@
             Mat mat = matService.selectByMatnr(adjust.getMatnr());
             LocDetl locDetl = new LocDetl();
             locDetl.sync(mat);
+            locDetl.setId(null);
             locDetl.setBatch(adjust.getBatch());
             locDetl.setLocNo(locMast.getLocNo());
-            locDetl.setZpallet(locMast.getBarcode());
+            locDetl.setZpallet(adjust.getZpallet());
             locDetl.setAnfme(adjust.getCount()); // 鏁伴噺
             locDetl.setModiUser(userId); // 鎿嶄綔浜哄憳淇℃伅
             locDetl.setModiTime(now);
             locDetl.setAppeUser(userId);
             locDetl.setAppeTime(now);
+            locDetl.setMemo("");
             if (!locDetlService.insert(locDetl)) {
                 throw new CoolException("娣诲姞" + locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "鎵瑰彿搴撳瓨鏄庣粏澶辫触");
             }
@@ -1065,6 +1069,7 @@
         if (locMast.getLocSts().equals("D") || locMast.getLocSts().equals("O")) {
             if (count > 0) {
                 locMast.setLocSts("F");
+                locMast.setBarcode(list.get(0).getZpallet());
             }
         }
         locMast.setModiUser(userId);
@@ -1258,7 +1263,7 @@
         // 鑾峰彇鐩爣绔�
         Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                 .eq("type_no", wrkMast.getIoType() - 50)
-                .eq("stn_no", wrkMast.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
+                .eq("stn_no", 104) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
                 .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
         StaDesc staDesc = staDescService.selectOne(wrapper);
         if (Cools.isEmpty(staDesc)) {
@@ -1270,8 +1275,8 @@
         // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
         wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
         wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
-        wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
-        wrkMast.setStaNo(staNo + ""); // 鐩爣绔�
+        wrkMast.setSourceStaNo(staDesc.getStnNo$()); // 婧愮珯
+        wrkMast.setStaNo(staDesc.getCrnStn$()); // 鐩爣绔�
         wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
         wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
         wrkMast.setModiTime(now);
diff --git a/src/main/java/com/zy/asrs/task/JlerScheduler.java b/src/main/java/com/zy/asrs/task/JlerScheduler.java
index 2a32c88..1989eca 100644
--- a/src/main/java/com/zy/asrs/task/JlerScheduler.java
+++ b/src/main/java/com/zy/asrs/task/JlerScheduler.java
@@ -1,7 +1,9 @@
 package com.zy.asrs.task;
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.OrderPakout;
 import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.service.OrderPakoutService;
 import com.zy.asrs.service.WrkMastService;
 import com.zy.asrs.task.handler.JlerHandler;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -24,6 +26,9 @@
     @Resource
     private WrkMastService wrkMastService;
 
+    @Resource
+    private OrderPakoutService orderPakoutService;
+
     /**
      * 璐х墿鍒拌揪鍏ュ簱鍙f帴椹充綅寮�濮嬪懠鍙枡绠辨満鍣ㄤ汉
      */
@@ -36,5 +41,31 @@
         }
     }
 
+
+    /**
+     * 鏍规嵁鍑哄簱璁㈠崟鑷姩鐢熸垚鍑哄簱浠诲姟
+     */
+    @Scheduled(cron = "0/8 * * * * ? ")
+    private void autoGenerateOutTask() {
+        OrderPakout orderPakout = orderPakoutService.selectOne(new EntityWrapper<OrderPakout>().eq("settle", 1));
+        if (orderPakout == null) {
+            return;
+        }
+
+        jlerHandler.autoGenerateOutTask(orderPakout);
+    }
+
+    /**
+     * 鏍规嵁鍑哄簱浠诲姟鑷姩鍛煎彨鏂欑鏈哄櫒浜烘惉杩�
+     */
+    @Scheduled(cron = "0/10 * * * * ? ")
+    private void outboundCallBinRobot() {
+        // 姣忔鍙�3鏉�
+        List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().setSqlSelect("TOP 3 *").eq("source_sta_no", 101).eq("wrk_sts", 11).orderBy("io_type"));
+        for(WrkMast wrkMast:wrkMastList) {
+            jlerHandler.outboundCallBinRobot(wrkMast);
+        }
+    }
+
 }
 
diff --git a/src/main/java/com/zy/asrs/task/handler/JlerHandler.java b/src/main/java/com/zy/asrs/task/handler/JlerHandler.java
index 3c09955..0b401b5 100644
--- a/src/main/java/com/zy/asrs/task/handler/JlerHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/JlerHandler.java
@@ -1,19 +1,27 @@
 package com.zy.asrs.task.handler;
 
-import com.zy.asrs.entity.WrkMast;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.rcs.RcsReturn;
 import com.zy.asrs.entity.rcs.RcsTaskSubmit;
 import com.zy.asrs.entity.rcs.RcsTaskTargetRoute;
-import com.zy.asrs.service.RcsService;
-import com.zy.asrs.service.WrkMastService;
+import com.zy.asrs.service.*;
+import com.zy.asrs.utils.OrderInAndOutUtil;
+import com.zy.common.model.LocDto;
+import com.zy.common.model.TaskDto;
+import com.zy.common.model.enums.WorkNoType;
+import com.zy.common.service.CommonService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * @author pang.jiabao
@@ -30,6 +38,30 @@
     @Resource
     private RcsService rcsService;
 
+    @Resource
+    private OrderPakoutService orderPakoutService;
+
+    @Resource
+    private OrderDetlPakoutService orderDetlPakoutService;
+
+    @Resource
+    private LocDetlService locDetlService;
+
+    @Resource
+    private LocMastService locMastService;
+
+    @Resource
+    private StaDescService staDescService;
+
+    @Value("${mes.defaultUserId}")
+    public long defaultUserId;
+
+    @Resource
+    private CommonService  commonService;
+
+    @Resource
+    private WrkDetlService wrkDetlService;
+
     @Transactional
     public void callAgvToWarehouse(WrkMast wrkMast) {
 
@@ -42,7 +74,7 @@
         List<RcsTaskTargetRoute> targetRouteList = new ArrayList<>();
         RcsTaskTargetRoute startRoute = new RcsTaskTargetRoute();
         startRoute.setSeq(0);
-        startRoute.setCode("106");
+        startRoute.setCode(wrkMast.getStaNo());
         startRoute.setOperation("COLLECT");
         startRoute.setType("SITE");
         targetRouteList.add(startRoute);
@@ -57,14 +89,218 @@
         // 杞彂缁欐捣搴锋垨鍗庢檽RCS
         RcsReturn rcsReturn = rcsService.submitTask(rcsTaskSubmit, 1);
         if (rcsReturn.getCode().equals("SUCCESS")) {
+            Date now = new Date();
             wrkMast.setWrkSts(3L);
-            wrkMast.setModiTime(new Date());
+            wrkMast.setModiTime(now);
+            wrkMast.setCrnStrTime(now);
             wrkMast.setTaskNo(rcsTaskSubmit.getRobotTaskCode());
             wrkMastService.updateById(wrkMast);
-            log.info("鍏ュ簱缁欐枡绠辨満鍣ㄤ汉鍙戦�佸懡浠ゆ垚鍔燂紝宸ヤ綔鍙凤細{}锛屼换鍔″彿锛歿}",wrkMast.getWrkNo(),rcsTaskSubmit.getRobotTaskCode());
+            log.info("鍑哄簱缁欐枡绠辨満鍣ㄤ汉鍙戦�佸懡浠ゆ垚鍔燂紝宸ヤ綔鍙凤細{}锛屼换鍔″彿锛歿}",wrkMast.getWrkNo(),rcsTaskSubmit.getRobotTaskCode());
         } else {
-            log.error("鍏ュ簱缁欐枡绠辨満鍣ㄤ汉鍙戦�佸懡浠ゅけ璐ワ紝宸ヤ綔鍙凤細{}锛屼换鍔″彿锛歿}",wrkMast.getWrkNo(),rcsTaskSubmit.getRobotTaskCode());
+            log.error("鍑哄簱缁欐枡绠辨満鍣ㄤ汉鍙戦�佸懡浠ゅけ璐ワ紝宸ヤ綔鍙凤細{}锛屼换鍔″彿锛歿}",wrkMast.getWrkNo(),rcsTaskSubmit.getRobotTaskCode());
         }
     }
 
+    /**
+     * 鏍规嵁鍑哄簱璁㈠崟鑷姩鐢熸垚鍑哄簱浠诲姟
+     */
+    @Transactional
+    public void autoGenerateOutTask(OrderPakout orderPakout) {
+        List<OrderDetlPakout> orderDetlPakouts = orderDetlPakoutService.selectByOrderId(orderPakout.getId());
+
+        List<LocDto> locDtos = new ArrayList<>();
+
+        Set<String> exist = new HashSet<>();
+
+        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());
+            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.setStaNo(103);
+                    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);
+            }
+        }
+
+        List<LocDto> locDtoArrayList = new ArrayList<>();
+        //
+        for (LocDto locDto : locDtos){
+            if (locDto.getFrozen()!=1 && locDto.getFrozenLoc()!=1 && !locDto.isLack()){
+                locDtoArrayList.add(locDto);
+            } else {
+                log.warn("搴撲綅/搴撳瓨琚喕缁撴垨搴撳瓨涓嶈冻:{}", JSONObject.toJSONString(locDto));
+            }
+        }
+        locDtos = locDtoArrayList;
+
+        List<TaskDto> taskDtos = new ArrayList<>();
+        // 鏍规嵁 锛堝簱浣� & 鍑哄簱绔欙級 鍒嗙粍锛� 鐞嗘兂鐘舵�侊細涓�缁勪负涓�娆″嚭搴撲换鍔�
+        for (LocDto locDto : locDtos) {
+            if (locDto.isLack()) { continue; }
+            TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto);
+            if (TaskDto.has(taskDtos, taskDto)) {
+                TaskDto dto = TaskDto.find(taskDtos, taskDto);
+                assert dto != null;
+                dto.getLocDtos().addAll(taskDto.getLocDtos());
+            } else {
+                taskDtos.add(taskDto);
+            }
+        }
+        // -----------------------------------------------------------------------------------------------
+        long userId = defaultUserId;
+        for (TaskDto taskDto : taskDtos) {
+            Date now = new Date();
+            // 鑾峰彇搴撲綅
+            LocMast locMast = locMastService.selectById(taskDto.getLocNo());
+            int ioType = taskDto.isAll() ? 101 : 103;
+            // 鐢熸垚宸ヤ綔鍙�
+            int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
+            // 鐢熸垚宸ヤ綔妗�
+            WrkMast wrkMast = new WrkMast();
+            wrkMast.setWrkNo(workNo);
+            wrkMast.setIoTime(now);
+            wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+            wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
+            wrkMast.setIoPri(13D); // 浼樺厛绾э細13
+            wrkMast.setCrnNo(locMast.getCrnNo());
+            wrkMast.setSourceStaNo("101"); // 婧愮珯
+            wrkMast.setStaNo("103"); // 鐩爣绔�
+            wrkMast.setSourceLocNo(taskDto.getLocNo()); // 婧愬簱浣�
+            wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+            wrkMast.setPicking("N"); // 鎷f枡
+            wrkMast.setExitMk("N"); // 閫�鍑�
+            wrkMast.setEmptyMk("N"); // 绌烘澘
+            wrkMast.setLinkMis("N");
+            wrkMast.setBarcode(locMast.getBarcode());
+            wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁
+            wrkMast.setAppeTime(now);
+            wrkMast.setModiUser(userId);
+            wrkMast.setModiTime(now);
+            if (!wrkMastService.insert(wrkMast)) {
+                throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細" + taskDto.getLocNo());
+            }
+            // 鐢熸垚宸ヤ綔妗f槑缁�
+            for (LocDto locDto : taskDto.getLocDtos()) {
+                if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) {
+                    continue;
+                }
+                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());
+
+                WrkDetl wrkDetl = new WrkDetl();
+                wrkDetl.sync(orderDetl);
+                wrkDetl.setZpallet(wrkMast.getBarcode());
+                wrkDetl.setIoTime(now);
+                wrkDetl.setWrkNo(workNo);
+                wrkDetl.setBatch(locDto.getBatch());
+                wrkDetl.setOrderNo(locDto.getOrderNo());
+                wrkDetl.setAnfme(locDto.getAnfme()); // 鏁伴噺
+                wrkDetl.setAppeTime(now);
+                wrkDetl.setAppeUser(userId);
+                wrkDetl.setModiTime(now);
+                wrkDetl.setModiUser(userId);
+                wrkDetl.setMatnr(orderDetl.getMatnr());
+                wrkDetl.setMaktx(orderDetl.getMaktx());
+                wrkDetl.setSpecs(orderDetl.getSpecs());
+                wrkDetl.setModel(orderDetl.getModel());
+                wrkDetl.setUnit(orderDetl.getUnit());
+                wrkDetl.setThreeCode(String.valueOf(orderPakout.getDocType())); // 鍗曟嵁绫诲瀷,rcs鍙嶉end鍒皐cs鏃剁粰tms涓婃姤鐢�
+                if (!wrkDetlService.insert(wrkDetl)) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+                }
+                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());
+                log.info("鏍规嵁璁㈠崟鑷姩鐢熸垚鍑哄簱浠诲姟鎴愬姛銆愬伐浣滃彿锛歿}锛岃鍗曞彿锛歿}锛岀墿鏂欙細{}锛屾暟閲忥細{}銆�",workNo,locDto.getOrderNo(),locDto.getMatnr(),locDto.getAnfme());
+            }
+            // 淇敼搴撲綅鐘舵��:   F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓�
+            locMast = locMastService.selectById(taskDto.getLocNo());
+            if (locMast.getLocSts().equals("F")) {
+                locMast.setLocSts(ioType == 101 ? "R" : "P");
+                locMast.setModiUser(userId);
+                locMast.setModiTime(now);
+                if (!locMastService.updateById(locMast)) {
+                    throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + taskDto.getLocNo());
+                }
+            } else {
+                throw new CoolException(taskDto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
+            }
+        }
+        OrderInAndOutUtil.updateOrder(Boolean.FALSE, orderPakout.getId(), 2L, userId);
+    }
+
+    public void outboundCallBinRobot(WrkMast wrkMast) {
+        // 涓嬪彂缁橰CS
+        RcsTaskSubmit rcsTaskSubmit = new RcsTaskSubmit();
+        // 妯℃澘鍚�
+        rcsTaskSubmit.setTaskType("F11");
+        rcsTaskSubmit.setRobotTaskCode(String.valueOf(new Date().getTime()));
+        rcsTaskSubmit.setInitPriority(10);  //榛樿10
+        List<RcsTaskTargetRoute> targetRouteList = new ArrayList<>();
+        RcsTaskTargetRoute startRoute = new RcsTaskTargetRoute();
+        startRoute.setSeq(0);
+        startRoute.setCode(wrkMast.getSourceLocNo());
+        startRoute.setOperation("COLLECT");
+        startRoute.setType("STORAGE");
+        targetRouteList.add(startRoute);
+        RcsTaskTargetRoute endRoute = new RcsTaskTargetRoute();
+        endRoute.setSeq(1);
+        endRoute.setCode(wrkMast.getSourceStaNo());
+        endRoute.setOperation("DELIVERY");
+        endRoute.setType("SITE");
+        targetRouteList.add(endRoute);
+        rcsTaskSubmit.setTargetRoute(targetRouteList);
+
+        // 杞彂缁欐捣搴锋垨鍗庢檽RCS
+        RcsReturn rcsReturn = rcsService.submitTask(rcsTaskSubmit, 1);
+        if (rcsReturn.getCode().equals("SUCCESS")) {
+            Date now = new Date();
+            wrkMast.setWrkSts(12L);
+            wrkMast.setModiTime(now);
+            wrkMast.setCrnStrTime(now);
+            wrkMast.setTaskNo(rcsTaskSubmit.getRobotTaskCode());
+            wrkMastService.updateById(wrkMast);
+            log.info("鍑哄簱缁欐枡绠辨満鍣ㄤ汉鍙戦�佸懡浠ゆ垚鍔燂紝宸ヤ綔鍙凤細{}锛屼换鍔″彿锛歿}",wrkMast.getWrkNo(),rcsTaskSubmit.getRobotTaskCode());
+        } else {
+            log.error("鍑哄簱缁欐枡绠辨満鍣ㄤ汉鍙戦�佸懡浠ゅけ璐ワ紝宸ヤ綔鍙凤細{}锛屼换鍔″彿锛歿}",wrkMast.getWrkNo(),rcsTaskSubmit.getRobotTaskCode());
+        }
+    }
 }
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 3dde35c..af71601 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -253,19 +253,19 @@
                         }
 
                         // 鏇存柊璁㈠崟瀹屾垚鏁伴噺
-                        OrderDetlPakin orderDetlPakin = orderDetlPakinService.selectItem
+                        OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem
                                 (wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(),
                                         wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                         wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
-                        if (orderDetlPakin == null) {
-                            orderDetlPakin = orderDetlPakinService.selectItem
+                        if (orderDetlPakout == null) {
+                            orderDetlPakout = orderDetlPakoutService.selectItem
                                     (wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                             wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                         }
                         try {
-                            if (!Cools.isEmpty(orderDetlPakin)) {
-                                if (!orderDetlPakinService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
-                                        orderDetlPakin.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
+                            if (!Cools.isEmpty(orderDetlPakout)) {
+                                if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
+                                        orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                                         wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) {
 //                                    exceptionHandle("鎷f枡鍏ュ簱 ===>> 鏇存柊璁㈠崟瀹屾垚鏁伴噺澶辫触锛沎workNo={0}],[locNo={1}]",
 //                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
diff --git a/src/main/java/com/zy/common/config/ControllerResAdvice.java b/src/main/java/com/zy/common/config/ControllerResAdvice.java
index a4cdc97..d48b27f 100644
--- a/src/main/java/com/zy/common/config/ControllerResAdvice.java
+++ b/src/main/java/com/zy/common/config/ControllerResAdvice.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSON;
 import com.core.common.Cools;
 import com.core.common.R;
+import com.zy.asrs.entity.mes.MesReturn;
 import com.zy.asrs.service.ApiLogService;
 import com.zy.common.utils.IpTools;
 import lombok.extern.slf4j.Slf4j;
@@ -59,6 +60,21 @@
                         );
                     }
                 }
+                if (o instanceof MesReturn) {
+                    MesReturn mesReturn = (MesReturn) o;
+                    String appkey = request.getHeader("appkey");
+                    Object reqCache = request.getAttribute("cache");
+                    // 淇濆瓨鎺ュ彛鏃ュ織
+                    apiLogService.save(
+                            String.valueOf(appAuth),
+                            request.getRequestURI(),
+                            appkey,
+                            IpTools.gainRealIp(request),
+                            reqCache==null?"": JSON.toJSONString(reqCache),
+                            JSON.toJSONString(o),
+                            String.valueOf(mesReturn.getSuccess()).equalsIgnoreCase("1")
+                    );
+                }
             }
         }
         return o;
diff --git a/src/main/java/com/zy/common/model/LocDto.java b/src/main/java/com/zy/common/model/LocDto.java
index eaaffee..9dab9e9 100644
--- a/src/main/java/com/zy/common/model/LocDto.java
+++ b/src/main/java/com/zy/common/model/LocDto.java
@@ -35,9 +35,9 @@
     /**
      * 鏄惁鍐荤粨  "鏄惁鍐荤粨,0.鏈喕缁擄紝1.宸插喕缁�"
      */
-    private Integer frozen = 1;
+    private Integer frozen = 0;
 
-    private Integer frozenLoc = 1;
+    private Integer frozenLoc = 0;
 
 //    private Integer frozen$;
 
diff --git a/src/main/java/com/zy/common/web/AuthController.java b/src/main/java/com/zy/common/web/AuthController.java
index cc00686..01307b0 100644
--- a/src/main/java/com/zy/common/web/AuthController.java
+++ b/src/main/java/com/zy/common/web/AuthController.java
@@ -53,39 +53,37 @@
     @Autowired
     private LoadingConfigTimer loadingConfigTimer;
 
-    @PostMapping("/login.action")
+    @RequestMapping("/login.action")
     @ManagerAuth(value = ManagerAuth.Auth.NONE, memo = "鐧诲綍")
-    public R loginAction(@RequestBody Map<String, String> param) {
+    public R loginAction(String username, String password){
         //楠岃瘉璁稿彲璇佹槸鍚︽湁鏁�
-        if (!licenseTimer.getSystemSupport()) {
+        if (!licenseTimer.getSystemSupport()){
             return R.parse(CodeRes.SYSTEM_20001);
         }
+        if (username.equals("super") && password.equals(Cools.md5(superPwd))) {
+            Map<String, Object> res = new HashMap<>();
+            res.put("username", username);
+            res.put("token", Cools.enToken(System.currentTimeMillis() + username, superPwd));
+            return R.ok(res);
+        }
         EntityWrapper<User> userWrapper = new EntityWrapper<>();
-        userWrapper.eq("username", param.get("username"));
+        userWrapper.eq("username", username);
         User user = userService.selectOne(userWrapper);
-        if (Cools.isEmpty(user)) {
-            if (param.get("username").equals("super") && param.get("password").equals(Cools.md5(superPwd))) {
-                Map<String, Object> res = new HashMap<>();
-                res.put("username", param.get("username"));
-                res.put("token", Cools.enToken(System.currentTimeMillis() + param.get("username"), superPwd));
-                return R.ok(res);
-            }
+        if (Cools.isEmpty(user)){
             return R.parse(CodeRes.USER_10001);
         }
-        if (user.getStatus() != 1) {
+        if (user.getStatus()!=1){
             return R.parse(CodeRes.USER_10002);
         }
-        if (!user.getPassword().equals(param.get("password"))) {
+        if (!user.getPassword().equals(password)){
             return R.parse(CodeRes.USER_10003);
         }
-        String token = Cools.enToken(System.currentTimeMillis() + param.get("username"), user.getPassword());
-        if (loadingConfigTimer.getTokenNumber() == 1) {
-            userLoginService.delete(new EntityWrapper<UserLogin>().eq("user_id", user.getId()).eq("system", "WMS"));
-        }        UserLogin userLogin = new UserLogin();
+        String token = Cools.enToken(System.currentTimeMillis() + username, user.getPassword());
+        userLoginService.delete(new EntityWrapper<UserLogin>().eq("user_id", user.getId()));
+        UserLogin userLogin = new UserLogin();
         userLogin.setUserId(user.getId());
         userLogin.setToken(token);
         userLogin.setCreateTime(new Date());
-        userLogin.setSystem("WMS");
         userLoginService.insert(userLogin);
         Map<String, Object> res = new HashMap<>();
         res.put("username", user.getUsername());
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 26c6780..50243e9 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -58,6 +58,7 @@
 
 # 涓嬩綅鏈洪厤缃�
 wcs-slave:
+  url: http://127.0.0.1:9090/djwcs
   # 鍙屾繁
   doubleDeep: true
   # 鍙屾繁搴撲綅鎺掑彿
diff --git a/src/main/resources/mapper/LocDetlMapper.xml b/src/main/resources/mapper/LocDetlMapper.xml
index 958190a..94fb0fd 100644
--- a/src/main/resources/mapper/LocDetlMapper.xml
+++ b/src/main/resources/mapper/LocDetlMapper.xml
@@ -544,22 +544,22 @@
         <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="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>-->
 
-        order by
-        DATEPART(yyyy,a.modi_time),DATEPART(mm,a.modi_time),DATEPART(dd,a.modi_time), a.anfme
-        desc,
-        NEWID(),
+        order by a.modi_time,
+--         DATEPART(yyyy,a.modi_time),DATEPART(mm,a.modi_time),DATEPART(dd,a.modi_time), a.anfme
+--         desc,
+--         NEWID(),
         case
-        when (left(a.loc_no, 2) = '01') then 0
+        when (left(a.loc_no, 2) = '01') then 1
         when (left(a.loc_no, 2) = '02') then 1
         when (left(a.loc_no, 2) = '03') then 1
-        when (left(a.loc_no, 2) = '04') then 0
+        when (left(a.loc_no, 2) = '04') then 1
         when (left(a.loc_no, 2) = '05') then 0
         when (left(a.loc_no, 2) = '06') then 1
         when (left(a.loc_no, 2) = '07') then 1
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 44c6d36..f6e0a06 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -70,7 +70,7 @@
         select * from asr_wrk_mast
         where wrk_sts=5
         or (wrk_sts=15 and ove_mk='Y' and wrk_no not in (select wrk_no from asr_bas_devp))
-        or (wrk_sts=15 and dateadd(mi,1,crn_end_time) &lt;= getdate() and wrk_no not in (select wrk_no from asr_bas_devp))
+        or (wrk_sts=15 and dateadd(second,10,crn_end_time) &lt;= getdate() and wrk_no not in (select wrk_no from asr_bas_devp))
         or (wrk_sts=15 and crn_end_time is null and wrk_no not in (select wrk_no from asr_bas_devp))
         order by io_time,wrk_no asc
     </select>
diff --git a/src/main/webapp/static/js/basStation/basStation.js b/src/main/webapp/static/js/basStation/basStation.js
index 1eaa6be..8b9b3d0 100644
--- a/src/main/webapp/static/js/basStation/basStation.js
+++ b/src/main/webapp/static/js/basStation/basStation.js
@@ -27,7 +27,7 @@
             , {field: 'area', align: 'center', title: '鍖哄煙'}
             , {field: 'locSts$', align: 'center', title: '鐘舵��'}
             , {field: 'barcode', align: 'center', title: '鍒�鏋跺彿'}
-            , {field: 'ioTime', align: 'center', title: '鍏ュ嚭搴撴椂闂�'}
+            , {field: 'ioTime', align: 'center', title: '鍏ュ嚭搴撴椂闂�',hide: true}
             , {field: 'modiUser$', align: 'center', title: '淇敼浜哄憳'}
             , {field: 'modiTime$', align: 'center', title: '淇敼鏃堕棿'}
             , {field: 'appeUser$', align: 'center', title: '鍒涘缓鑰�',hide: true}
diff --git a/src/main/webapp/static/js/pakStore/stockAdjust.js b/src/main/webapp/static/js/pakStore/stockAdjust.js
index 042a8b5..fdcbf23 100644
--- a/src/main/webapp/static/js/pakStore/stockAdjust.js
+++ b/src/main/webapp/static/js/pakStore/stockAdjust.js
@@ -8,9 +8,11 @@
         {fixed: 'left', field: 'count', title: '瀹為檯鏁伴噺', align: 'center', edit:'text', width: 120,  style:'color: blue;font-weight: bold'}
         ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
         ,{field: 'batch', align: 'center',title: '鎵瑰彿锛堢紪杈戯級', edit: true, style: 'font-weight:bold'}
+        ,{field: 'zpallet', align: 'center',title: '鏂欑鐮�', edit: true, style: 'font-weight:bold'}
     ];
     arrRemove(detlCols, "field", "anfme");
     arrRemove(detlCols, "field", "batch");
+    arrRemove(detlCols, "field", "zpallet");
     cols.push.apply(cols, detlCols);
     cols.push({fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:80})
     return cols;
diff --git a/src/main/webapp/static/js/wrkMast/wrkMast.js b/src/main/webapp/static/js/wrkMast/wrkMast.js
index b367be3..2969503 100644
--- a/src/main/webapp/static/js/wrkMast/wrkMast.js
+++ b/src/main/webapp/static/js/wrkMast/wrkMast.js
@@ -25,13 +25,14 @@
             ,{field: 'wrkSts$', align: 'center',title: '宸ヤ綔鐘舵��', width: 120}
             ,{field: 'ioType$', align: 'center',title: '鍏ュ嚭搴撶被鍨�', width: 140}
             ,{field: 'ioPri', align: 'center',title: '浼樺厛绾�'}
-            ,{field: 'taskType$', align: 'center',title: '浠诲姟绫诲瀷'}
+            ,{field: 'taskType$', align: 'center',title: '浠诲姟绫诲瀷',hide: true}
             ,{field: 'barcode', align: 'center',title: '鏉$爜', width: 120}
             ,{field: 'crnNo$', align: 'center',title: '鍫嗗灈鏈�'}
             ,{field: 'sourceStaNo$', align: 'center',title: '婧愮珯'}
             ,{field: 'staNo$', align: 'center',title: '鐩爣绔�'}
             ,{field: 'sourceLocNo', align: 'center',title: '婧愬簱浣�', width: 120}
             ,{field: 'locNo', align: 'center',title: '鐩爣搴撲綅', width: 120}
+            ,{field: 'taskNo', align: 'center',title: 'CTU浠诲姟鍙�',width: 150}
             ,{field: 'preHave', align: 'center',title: '鍏堝叆鍝�', hide: true}
             ,{field: 'takeNone', align: 'center',title: '绌烘搷浣�', hide: true}
             ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳', hide:true}
diff --git a/src/main/webapp/views/basStation/basStation.html b/src/main/webapp/views/basStation/basStation.html
index ec8de94..c10b931 100644
--- a/src/main/webapp/views/basStation/basStation.html
+++ b/src/main/webapp/views/basStation/basStation.html
@@ -89,6 +89,12 @@
                     </div>
                 </div>
                 <div class="layui-form-item">
+                    <label class="layui-form-label">鍒�鏋跺彿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="barcode" placeholder="璇疯緭鍏ュ垁鏋跺彿">
+                    </div>
+                </div>
+                <div class="layui-form-item">
                     <label class="layui-form-label">鍖哄煙锛�</label>
                     <div class="layui-input-block cool-auto-complete">
                         <input class="layui-input" name="areaId" placeholder="璇烽�夋嫨搴撳尯" style="display: none">
diff --git a/src/main/webapp/views/locMast/locMast_detail.html b/src/main/webapp/views/locMast/locMast_detail.html
index cd62adc..0c146fe 100644
--- a/src/main/webapp/views/locMast/locMast_detail.html
+++ b/src/main/webapp/views/locMast/locMast_detail.html
@@ -71,6 +71,12 @@
                 </div>
             </div>
         </div>
+        <div class="layui-inline"  style="width:80%;">
+            <label class="layui-form-label">鏂欑鐮�</label>
+            <div class="layui-input-inline">
+                <input id="barcode" class="layui-input" type="text" autocomplete="off">
+            </div>
+        </div>
         <div class="layui-inline"  style="width:31%;display: none">
             <label class="layui-form-label">锛�</label>
             <div class="layui-input-inline">
@@ -220,12 +226,7 @@
                 <input id="mk" class="layui-input" type="text">
             </div>
         </div>
-        <div class="layui-inline"  style="width:31%;display: none">
-            <label class="layui-form-label">锛�</label>
-            <div class="layui-input-inline">
-                <input id="barcode" class="layui-input" type="text">
-            </div>
-        </div>
+
         <div class="layui-inline"  style="width:31%;display: none">
             <label class="layui-form-label">锛�</label>
             <div class="layui-input-inline">

--
Gitblit v1.9.1