From 757e410a3580adaaa305741903062371f98d778d Mon Sep 17 00:00:00 2001
From: Junjie <DELL@qq.com>
Date: 星期四, 18 十二月 2025 13:30:33 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/WorkService.java               |    2 
 src/main/java/com/zy/asrs/task/handler/OutWorkHandler.java       |  122 +++++++----
 src/main/java/com/zy/asrs/entity/WrkMast.java                    |    5 
 src/main/java/com/zy/common/web/WcsController.java               |   87 ++++++++
 src/main/java/com/zy/asrs/controller/WorkController.java         |   26 +
 src/main/java/com/zy/asrs/utils/Utils.java                       |    9 
 src/main/java/com/zy/common/properties/SlaveProperties.java      |    2 
 src/main/java/com/zy/asrs/task/OutWorkScheduler.java             |    8 
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java      |  205 +++++++++++--------
 src/main/java/com/zy/asrs/controller/OutController.java          |   12 
 src/main/java/com/zy/common/service/CommonService.java           |   34 ++-
 src/main/resources/application.yml                               |   37 ++-
 src/main/java/com/zy/common/web/param/GetLocNoReassignParam.java |   13 +
 13 files changed, 374 insertions(+), 188 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/OutController.java b/src/main/java/com/zy/asrs/controller/OutController.java
index f38436c..3067a4b 100644
--- a/src/main/java/com/zy/asrs/controller/OutController.java
+++ b/src/main/java/com/zy/asrs/controller/OutController.java
@@ -5,6 +5,7 @@
 import com.core.common.BaseRes;
 import com.core.common.Cools;
 import com.core.common.R;
+import com.core.exception.CoolException;
 import com.zy.asrs.entity.BasDevp;
 import com.zy.asrs.entity.LocDetl;
 import com.zy.asrs.entity.LocMast;
@@ -12,11 +13,13 @@
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.LocDto;
+import com.zy.common.model.OutLocDto;
 import com.zy.common.model.TaskDto;
 import com.zy.common.properties.SlaveProperties;
 import com.zy.common.web.BaseController;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -105,7 +108,8 @@
                             LocDto locDto = new LocDto(locDetl1.getLocNo(), locDetl1.getMatnr(), locDetl1.getMaktx(), locDetl1.getBatch(), orderDetl.getOrderNo(),
                                     issued >= locDetl1.getAnfme() ? locDetl1.getAnfme() : issued);
                             int ioType = (issued >= locDetl1.getAnfme() && locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("loc_no", locDto.getLocNo())) == 1) ? 101 : 103;
-                            List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl1.getLocNo(), ioType);
+//                            List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl1.getLocNo(), ioType);
+                            List<Integer> staNos = Utils.getOutStaNoList();
                             locDto.setStaNos(staNos);
                             locDtos.add(locDto);
                             exist.add(locDetl1.getLocNo());
@@ -158,11 +162,7 @@
                 taskDtos.add(taskDto);
             }
         }
-        // -----------------------------------------------------------------------------------------------
-        for (TaskDto taskDto : taskDtos) {
-            BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
-            workService.stockOut(staNo, taskDto, getUserId());
-        }
+        workService.stockOut(taskDtos, getUserId());
         return R.ok();
     }
 
diff --git a/src/main/java/com/zy/asrs/controller/WorkController.java b/src/main/java/com/zy/asrs/controller/WorkController.java
index e17d4ba..d1380d2 100644
--- a/src/main/java/com/zy/asrs/controller/WorkController.java
+++ b/src/main/java/com/zy/asrs/controller/WorkController.java
@@ -9,6 +9,7 @@
 import com.zy.asrs.entity.param.StockOutParam;
 import com.zy.asrs.service.BasDevpService;
 import com.zy.asrs.service.WorkService;
+import com.zy.asrs.utils.Utils;
 import com.zy.common.model.StartupDto;
 import com.zy.common.web.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -50,18 +51,25 @@
     @ManagerAuth()
     public R availableTakeSite(){
         List<Map<String, Object>> result = new ArrayList<>();
-        List<Integer> outSite = basDevpService.getAvailableOutSite(101);
-        for (Integer siteId : outSite) {
+//        List<Integer> outSite = basDevpService.getAvailableOutSite(101);
+//        for (Integer siteId : outSite) {
+//            Map<String, Object> map = new HashMap<>();
+//            map.put("siteId", siteId);
+//            map.put("desc", siteId + "锛堝叏鏉垮嚭搴撳彛锛�");
+//            result.add(map);
+//        }
+//        List<Integer> pickOutSite = basDevpService.getAvailableOutSite(103);
+//        for (Integer siteId : pickOutSite) {
+//            Map<String, Object> map = new HashMap<>();
+//            map.put("siteId", siteId);
+//            map.put("desc", siteId + "锛堟嫞鏂欏嚭搴撳彛锛�");
+//            result.add(map);
+//        }
+        List<Integer> outStaNoList = Utils.getOutStaNoList();
+        for (Integer siteId : outStaNoList){
             Map<String, Object> map = new HashMap<>();
             map.put("siteId", siteId);
             map.put("desc", siteId + "锛堝叏鏉垮嚭搴撳彛锛�");
-            result.add(map);
-        }
-        List<Integer> pickOutSite = basDevpService.getAvailableOutSite(103);
-        for (Integer siteId : pickOutSite) {
-            Map<String, Object> map = new HashMap<>();
-            map.put("siteId", siteId);
-            map.put("desc", siteId + "锛堟嫞鏂欏嚭搴撳彛锛�");
             result.add(map);
         }
         return R.ok().add(result);
diff --git a/src/main/java/com/zy/asrs/entity/WrkMast.java b/src/main/java/com/zy/asrs/entity/WrkMast.java
index f33acd0..0c5b338 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMast.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.annotations.TableName;
 import com.baomidou.mybatisplus.enums.IdType;
 import com.zy.asrs.service.*;
+import com.zy.common.utils.Synchro;
 import com.zy.system.entity.User;
 import com.zy.system.service.UserService;
 import com.core.common.Cools;
@@ -495,6 +496,8 @@
         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.logErrTime);
     }
 
-
+    public void sync(Object source) {
+        Synchro.Copy(source, this);
+    }
 
 }
diff --git a/src/main/java/com/zy/asrs/service/WorkService.java b/src/main/java/com/zy/asrs/service/WorkService.java
index b119a80..e67333f 100644
--- a/src/main/java/com/zy/asrs/service/WorkService.java
+++ b/src/main/java/com/zy/asrs/service/WorkService.java
@@ -34,7 +34,7 @@
      */
     void stockOut(BasDevp staNo, List<LocDetlDto> locDetls, IoWorkType ioWorkType, Long userId);
 
-    void stockOut(BasDevp staNo, TaskDto taskDto, Long userId);
+    void stockOut(List<TaskDto> taskDto, Long userId);
 
     /**
      * 绌烘澘鍏ュ簱
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 fef94e6..30f354f 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -221,10 +221,6 @@
                 throw new CoolException(dto.getLocNo()+"鎵樼洏闈炲湪搴撶姸鎬�");
             }
 
-            Integer outSta = staNo.getDevNo();
-
-            // 鑾峰彇璺緞
-            StaDesc staDesc = staDescService.queryCrnStn(ioType, outSta);
             // 鐢熸垚宸ヤ綔鍙�
             int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
             // 鐢熸垚宸ヤ綔妗�
@@ -235,9 +231,8 @@
             wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
             wrkMast.setIoPri(10D); // 浼樺厛绾�
             wrkMast.setCrnNo(locMast.getCrnNo());
-            wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 婧愮珯
-            wrkMast.setStaNo(staDesc.getStnNo()); // 鐩爣绔�
             wrkMast.setSourceLocNo(dto.getLocNo()); // 婧愬簱浣�
+            wrkMast.setStaNo(staNo.getDevNo());// 鐩爣绔�
             wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
             wrkMast.setPicking("N"); // 鎷f枡
             wrkMast.setExitMk("N"); // 閫�鍑�
@@ -284,93 +279,131 @@
                 throw new CoolException(dto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
             }
         }
+
+        //妫�娴嬫槸鍚﹀瓨鍦ㄦ祬搴撲綅
+        for (OutLocDto dto : dtos) {
+            //鍒ゆ柇鏄惁鏄繁搴撲綅 瑙﹀彂绉诲簱浠诲姟
+            if (Utils.isDeepLoc(dto.getLocNo())) {
+                String deepLoc = dto.getLocNo();
+                String shallowLocNo = Utils.getShallowLocNo(deepLoc);
+                LocMast shallowLocMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", shallowLocNo));
+                if (shallowLocMast.getLocSts().equals("F") || shallowLocMast.getLocSts().equals("D")) {
+                    //瑙﹀彂绉诲簱浠诲姟
+                    String locTransferLocNo = commonService.getLocTransferLocNo(shallowLocNo);
+                    if (locTransferLocNo == null) {
+                        throw new CoolException(shallowLocNo + "娴呭簱浣嶆悳绱㈢Щ搴撶┖搴撲綅澶辫触");
+                    }
+                    this.locMove(shallowLocNo, locTransferLocNo, userId);
+                }
+            }
+        }
+
     }
 
     @Override
     @Transactional
-    public void stockOut(BasDevp staNo, TaskDto taskDto, Long userId) {
-        Date now = new Date();
-        List<LocDto> locDtos = taskDto.getLocDtos();
-        for (LocDto locDto : locDtos) {
-            if (!taskDto.getLocNo().equals(locDto.getLocNo()) && !taskDto.getStaNo().equals(locDto.getStaNo())) {
-                throw new CoolException("璁㈠崟鍑哄簱寮傚父锛岃鑱旂郴绠$悊鍛�");
+    public void stockOut(List<TaskDto> taskDtoList, Long userId) {
+        for (TaskDto taskDto : taskDtoList) {
+            Date now = new Date();
+            List<LocDto> locDtos = taskDto.getLocDtos();
+            for (LocDto locDto : locDtos) {
+                if (!taskDto.getLocNo().equals(locDto.getLocNo()) && !taskDto.getStaNo().equals(locDto.getStaNo())) {
+                    throw new CoolException("璁㈠崟鍑哄簱寮傚父锛岃鑱旂郴绠$悊鍛�");
+                }
+            }
+            // 鑾峰彇搴撲綅
+            LocMast locMast = locMastService.selectById(taskDto.getLocNo());
+            // 鑾峰彇璺緞
+            int ioType = taskDto.isAll() ? 101 : 103;
+            // 鐢熸垚宸ヤ綔鍙�
+            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.setSourceLocNo(taskDto.getLocNo()); // 婧愬簱浣�
+            wrkMast.setStaNo(taskDto.getStaNo());// 鐩爣绔�
+            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 = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
+                if (orderDetl == null) {
+                    orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
+                }
+                LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locDto.getLocNo()).eq("matnr", locDto.getMatnr()));
+                Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", locDto.getMatnr()));
+                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.setModel(mat.getModel());
+                wrkDetl.setPrice(locDetl.getAnfme());//搴撳瓨鏁伴噺
+                wrkDetl.setAnfme(locDto.getAnfme()); // 鏁伴噺
+                wrkDetl.setWeight(locDetl.getAnfme());//鎬绘暟
+                wrkDetl.setAppeTime(now);
+                wrkDetl.setAppeUser(userId);
+                wrkDetl.setModiTime(now);
+                wrkDetl.setModiUser(userId);
+                if (!wrkDetlService.insert(wrkDetl)) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+                }
+                // 淇敼璁㈠崟鏄庣粏
+                if (!orderDetlService.increaseWorkQty(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) {
+                    throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触");
+                }
+                orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
+            }
+            // 淇敼搴撲綅鐘舵��:   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() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
             }
         }
-        // 鑾峰彇搴撲綅
-        LocMast locMast = locMastService.selectById(taskDto.getLocNo());
-        // 鑾峰彇璺緞
-        int ioType = taskDto.isAll() ? 101 : 103;
-        StaDesc staDesc = staDescService.queryCrnStn(ioType, staNo.getDevNo());
-        // 鐢熸垚宸ヤ綔鍙�
-        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(staDesc.getCrnStn()); // 婧愮珯
-        wrkMast.setStaNo(staDesc.getStnNo()); // 鐩爣绔�
-        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 = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
-            if (orderDetl == null) {
-                orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
+
+
+        //妫�娴嬫槸鍚﹀瓨鍦ㄦ祬搴撲綅
+        for (TaskDto taskDto : taskDtoList) {
+            //鍒ゆ柇鏄惁鏄繁搴撲綅 瑙﹀彂绉诲簱浠诲姟
+            if (Utils.isDeepLoc(taskDto.getLocNo())) {
+                String deepLoc = taskDto.getLocNo();
+                String shallowLocNo = Utils.getShallowLocNo(deepLoc);
+                LocMast shallowLocMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", shallowLocNo));
+                if (shallowLocMast.getLocSts().equals("F") || shallowLocMast.getLocSts().equals("D")) {
+                    //瑙﹀彂绉诲簱浠诲姟
+                    String locTransferLocNo = commonService.getLocTransferLocNo(shallowLocNo);
+                    if (locTransferLocNo == null) {
+                        throw new CoolException(shallowLocNo + "娴呭簱浣嶆悳绱㈢Щ搴撶┖搴撲綅澶辫触");
+                    }
+                    this.locMove(shallowLocNo, locTransferLocNo, userId);
+                }
             }
-            LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locDto.getLocNo()).eq("matnr", locDto.getMatnr()));
-            Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", locDto.getMatnr()));
-            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.setModel(mat.getModel());
-            wrkDetl.setPrice(locDetl.getAnfme());//搴撳瓨鏁伴噺
-            wrkDetl.setAnfme(locDto.getAnfme()); // 鏁伴噺
-            wrkDetl.setWeight(locDetl.getAnfme());//鎬绘暟
-            wrkDetl.setAppeTime(now);
-            wrkDetl.setAppeUser(userId);
-            wrkDetl.setModiTime(now);
-            wrkDetl.setModiUser(userId);
-            if (!wrkDetlService.insert(wrkDetl)) {
-                throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
-            }
-            // 淇敼璁㈠崟鏄庣粏
-            if (!orderDetlService.increaseWorkQty(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) {
-                throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触");
-            }
-            orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
-        }
-        // 淇敼搴撲綅鐘舵��:   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() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
         }
     }
 
diff --git a/src/main/java/com/zy/asrs/task/OutWorkScheduler.java b/src/main/java/com/zy/asrs/task/OutWorkScheduler.java
index c27ce48..3d1211d 100644
--- a/src/main/java/com/zy/asrs/task/OutWorkScheduler.java
+++ b/src/main/java/com/zy/asrs/task/OutWorkScheduler.java
@@ -26,11 +26,11 @@
     /**
      * 鍑哄簱浠诲姟涓嬪彂
      */
-//    @Scheduled(cron = "0/3 * * * * ? ")
+    @Scheduled(cron = "0/3 * * * * ? ")
     private void execute() {
-        List<WrkMast> wrkMasts=wrkMastService.selectList(new EntityWrapper<WrkMast>()
-                .eq("wrk_sts",11)
-                .in("io_type",11,101,103,107,110));
+        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+                .eq("wrk_sts", 11)
+                .in("io_type", 11, 101, 103, 107, 110));
         for(WrkMast wrkMast:wrkMasts){
             ReturnT<String> result = outWorkHandler.start(wrkMast);
             if (!result.isSuccess()) {
diff --git a/src/main/java/com/zy/asrs/task/handler/OutWorkHandler.java b/src/main/java/com/zy/asrs/task/handler/OutWorkHandler.java
index 113b152..039dda2 100644
--- a/src/main/java/com/zy/asrs/task/handler/OutWorkHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/OutWorkHandler.java
@@ -7,6 +7,8 @@
 import com.zy.asrs.service.WrkMastService;
 import com.zy.asrs.task.AbstractHandler;
 import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.utils.Utils;
+import com.zy.common.model.StartupDto;
 import com.zy.common.utils.HttpHandler;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -21,64 +23,88 @@
 @Transactional
 public class OutWorkHandler extends AbstractHandler<String> {
 
-    @Autowired
-    private ApiLogService apiLogService;
     @Value("${wcs.address.URL}")
     private String addrs;
-    @Value("${wcs.address.outboundTaskSend}")
-    private String outboundTaskSend;
+    @Value("${wcs.address.createOutTask}")
+    private String outTask;
+    @Value("${wcs.address.createLocMoveTask}")
+    private String locMoveTask;
+
+    @Autowired
+    private ApiLogService apiLogService;
     @Autowired
     private WrkMastService wrkMastService;
 
-
     public synchronized ReturnT<String> start(WrkMast wrkMast) {
-        HashMap<String, Object> map = new HashMap<>();
-        map.put("taskNo", wrkMast.getWrkNo());
-        map.put("taskPriority", 10);
-        map.put("barcode", wrkMast.getBarcode());
+        StartupDto startupDto = new StartupDto();
+        startupDto.setTaskNo(wrkMast.getWrkNo());
+        startupDto.setStaNo(wrkMast.getStaNo());
+        startupDto.setLocNo(Utils.locToLocNo(wrkMast.getSourceLocNo()));
+        startupDto.setTaskPri(wrkMast.getIoPri());
 
         if (wrkMast.getIoType() == 11) {
-            map.put("taskType", 3);
-            map.put("startPoint", wrkMast.getSourceLocNo());
-            map.put("targetPoint", wrkMast.getLocNo());
-        }else {
-            map.put("taskType", 2);
-            map.put("startPoint", wrkMast.getSourceLocNo());
-            map.put("targetPoint", wrkMast.getSourceStaNo() + "-" + wrkMast.getStaNo());
-        }
-
-        String response ="";
-        boolean bool =false;
-        try {
-            log.info("wms娲惧彂浠诲姟缁檞cs鍑哄簱={}", JSON.toJSONString(map));
-            response = new HttpHandler.Builder()
-                    // .setHeaders(headParam)
-                    .setUri(addrs)
-                    .setPath(outboundTaskSend)
-                    .setJson(JSON.toJSONString(map))
-                    .build()
-                    .doPost();
-            JSONObject jsonObject = JSON.parseObject(response);
-            if(jsonObject.getInteger("code") == 200){
-                wrkMast.setWrkSts(12L);
-                wrkMastService.updateById(wrkMast);
-                bool = true;
-            }else {
-                log.error("wms娲惧彂浠诲姟缁檞cs鍑哄簱澶辫触{},杩斿洖鍊�={}", JSON.toJSONString(wrkMast), response);
+            String response = "";
+            boolean bool = false;
+            try {
+                log.info("wms娲惧彂浠诲姟缁檞cs绉诲簱={}", JSON.toJSONString(startupDto));
+                response = new HttpHandler.Builder()
+                        .setUri(addrs)
+                        .setPath(locMoveTask)
+                        .setJson(JSON.toJSONString(startupDto))
+                        .build()
+                        .doPost();
+                JSONObject jsonObject = JSON.parseObject(response);
+                if (jsonObject.getInteger("code") == 200) {
+                    wrkMast.setWrkSts(12L);
+                    wrkMastService.updateById(wrkMast);
+                    bool = true;
+                } else {
+                    log.error("wms娲惧彂浠诲姟缁檞cs绉诲簱澶辫触{},杩斿洖鍊�={}", JSON.toJSONString(wrkMast), response);
+                }
+            } catch (Exception e) {
+                log.error("wms娲惧彂浠诲姟缁檞cs绉诲簱澶辫触{},杩斿洖鍊�={}", JSON.toJSONString(wrkMast), response);
+            } finally {
+                apiLogService.save("wms娲惧彂浠诲姟缁檞cs绉诲簱"
+                        , addrs + locMoveTask
+                        , null
+                        , "127.0.0.1"
+                        , JSON.toJSONString(startupDto)
+                        , response
+                        , bool
+                );
             }
-        } catch (Exception e) {
-            log.error("wms娲惧彂浠诲姟缁檞cs鍑哄簱澶辫触{},杩斿洖鍊�={}", JSON.toJSONString(wrkMast), response);
-        } finally {
-            apiLogService.save("wms娲惧彂浠诲姟缁檞cs鍑哄簱"
-                    , addrs + outboundTaskSend
-                    , null
-                    , "127.0.0.1"
-                    , JSON.toJSONString(map)
-                    , response
-                    , bool
-            );
+        } else {
+            String response ="";
+            boolean bool =false;
+            try {
+                log.info("wms娲惧彂浠诲姟缁檞cs鍑哄簱={}", JSON.toJSONString(startupDto));
+                response = new HttpHandler.Builder()
+                        .setUri(addrs)
+                        .setPath(outTask)
+                        .setJson(JSON.toJSONString(startupDto))
+                        .build()
+                        .doPost();
+                JSONObject jsonObject = JSON.parseObject(response);
+                if(jsonObject.getInteger("code") == 200){
+                    wrkMast.setWrkSts(12L);
+                    wrkMastService.updateById(wrkMast);
+                    bool = true;
+                }else {
+                    log.error("wms娲惧彂浠诲姟缁檞cs鍑哄簱澶辫触{},杩斿洖鍊�={}", JSON.toJSONString(wrkMast), response);
+                }
+            } catch (Exception e) {
+                log.error("wms娲惧彂浠诲姟缁檞cs鍑哄簱澶辫触{},杩斿洖鍊�={}", JSON.toJSONString(wrkMast), response);
+            } finally {
+                apiLogService.save("wms娲惧彂浠诲姟缁檞cs鍑哄簱"
+                        , addrs + outTask
+                        , null
+                        , "127.0.0.1"
+                        , JSON.toJSONString(startupDto)
+                        , response
+                        , bool
+                );
+            }
         }
         return SUCCESS;
-
     }
 }
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index 3faf851..be8d545 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -1,7 +1,11 @@
 package com.zy.asrs.utils;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Arith;
 import com.core.common.Cools;
+import com.core.common.SpringUtils;
+import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.service.LocMastService;
 import com.zy.common.model.LocGroupOrder;
 import com.zy.common.properties.SlaveProperties;
 
@@ -136,6 +140,11 @@
         return checkOrder;
     }
 
+    public static List<Integer> getOutStaNoList() {
+        SlaveProperties slaveProperties = SpringUtils.getBean(SlaveProperties.class);
+        return slaveProperties.getOutStaNoList();
+    }
+
     //鍒ゆ柇鏄惁鏄繁搴撲綅
     public static boolean isDeepLoc(String locNo){
         int i = getRow(locNo);
diff --git a/src/main/java/com/zy/common/properties/SlaveProperties.java b/src/main/java/com/zy/common/properties/SlaveProperties.java
index f953f3e..de13365 100644
--- a/src/main/java/com/zy/common/properties/SlaveProperties.java
+++ b/src/main/java/com/zy/common/properties/SlaveProperties.java
@@ -17,4 +17,6 @@
 
     private List<LocGroupOrder> locGroupAscOrder;
 
+    private List<Integer> outStaNoList;
+
 }
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 9733d3d..1c4bc4f 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
+import com.core.common.SpringUtils;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.result.FindLocNoAttributeVo;
@@ -212,20 +213,6 @@
 
         StartupDto startupDto = new StartupDto();
 
-        // 鑾峰彇鐩爣绔�
-//        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>().eq("type_no", staDescId).eq("stn_no", sourceStaNo).eq("crn_no", locMast.getCrnNo());
-//        StaDesc staDesc = staDescService.selectOne(wrapper);
-//        if (Cools.isEmpty(staDesc)) {
-//            log.error("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo);
-//            throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
-//        } else {
-//            BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn());
-//            if (!staNo.getAutoing().equals("Y")) {
-//                log.error("鐩爣绔�" + staDesc.getCrnStn() + "涓嶅彲鐢�");
-//                throw new CoolException("鐩爣绔�"+staDesc.getCrnStn()+"涓嶅彲鐢�");
-//            }
-//            startupDto.setStaNo(staNo.getDevNo());
-//        }
         String locNo = locMast.getLocNo();
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = getWorkNo(0);
@@ -513,4 +500,23 @@
         }
     }
 
+    //绉诲簱浠诲姟鑾峰彇绌哄簱浣�
+    public String getLocTransferLocNo(String locNo){
+        List<Integer> locGroupDesc = Utils.getLocGroupDesc(slaveProperties, locNo);
+        //鍏堟壘娣卞簱浣�
+        List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").in("row1", locGroupDesc));
+        if (locMastList.isEmpty()) {
+            //鎼滅储娴呭簱浣�
+            List<Integer> locGroupAsc = Utils.getLocGroupAsc(slaveProperties, locNo);
+            locMastList = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").in("row1", locGroupAsc));
+        }
+
+        if (locMastList.isEmpty()) {
+            return null;
+        }
+
+        LocMast locMast = locMastList.get(0);
+        return locMast.getLocNo();
+    }
+
 }
diff --git a/src/main/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java
index 3a1102e..d3d8bcb 100644
--- a/src/main/java/com/zy/common/web/WcsController.java
+++ b/src/main/java/com/zy/common/web/WcsController.java
@@ -7,28 +7,26 @@
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.result.FindLocNoAttributeVo;
-import com.zy.asrs.entity.result.StorageResult;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.CodeRes;
 import com.zy.common.model.LocTypeDto;
 import com.zy.common.model.StartupDto;
 import com.zy.common.service.CommonService;
+import com.zy.common.web.param.GetLocNoReassignParam;
 import com.zy.common.web.param.NotifyDto;
 import com.zy.common.web.param.SearchLocParam;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.core.ReactiveTypeDescriptor;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
 
 /**
  * Created by vincent on 2020/10/30
@@ -78,6 +76,15 @@
         return R.ok(map);
     }
 
+    @PostMapping("/reassign/loc/v1")
+    @ResponseBody
+    @Transactional
+    public synchronized R getLocNoReassign(@RequestBody(required = false) GetLocNoReassignParam param) {
+        log.info("鏀跺埌WCS閲嶆柊鍒嗛厤鍏ュ簱鎺ュ彛璇锋眰====>>鍏ュ弬:{}", param);
+        StartupDto dto = startupFullReassign(param.getTaskNo(), param.getRow());
+        log.info("WCS鍏ュ簱鎺ュ彛杩斿弬:{}", dto);
+        return R.ok().add(dto);
+    }
 
     @PostMapping("/pakin/loc/v1")
     @ResponseBody
@@ -371,6 +378,78 @@
         return dto;
     }
 
+    /**
+     * 鍏ㄦ澘鍏ュ簱-閲嶆柊鍒嗛厤
+     */
+    @Transactional
+    public StartupDto startupFullReassign(String workNo, int[] row) {
+        WrkMast sourceWrkMast = wrkMastService.selectByTaskNo(workNo);
+        if(sourceWrkMast == null) {
+            throw new CoolException(workNo + "宸ヤ綔鏁版嵁涓嶅瓨鍦�");
+        }
+
+        List<WrkDetl> sourceWrkDetlList = wrkDetlService.selectByWrkNo(sourceWrkMast.getWrkNo());
+        if (sourceWrkDetlList.isEmpty()) {
+            throw new CoolException(workNo + "宸ヤ綔鏄庣粏鏁版嵁涓嶅瓨鍦�");
+        }
+
+        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo();
+        findLocNoAttributeVo.setMatnr(sourceWrkDetlList.get(0).getMatnr());
+
+        LocMast sourceLocMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", sourceWrkMast.getLocNo()));
+        if (sourceLocMast == null) {
+            throw new CoolException(sourceWrkMast.getLocNo() + "搴撲綅鏁版嵁涓嶅瓨鍦�");
+        }
+
+        LocTypeDto locTypeDto = new LocTypeDto();
+        locTypeDto.setLocType1(sourceLocMast.getLocType1());
+
+        StartupDto dto = commonService.getLocNoToWmsDev(1, sourceWrkMast.getSourceStaNo(), findLocNoAttributeVo, locTypeDto, sourceWrkMast.getBarcode(), row);
+        if (dto == null) {
+            throw new CoolException("鎵句笉鍒扮┖搴撲綅");
+        }
+
+        Date now = new Date();
+        // 鐢熸垚宸ヤ綔妗�
+        sourceWrkMast.setIoTime(new Date());
+        sourceWrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
+        sourceWrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+        sourceWrkMast.setIoPri(13D); // 浼樺厛绾�
+        sourceWrkMast.setCrnNo(dto.getCrnNo());
+        sourceWrkMast.setSourceStaNo(dto.getSourceStaNo());
+        sourceWrkMast.setStaNo(dto.getStaNo());
+        sourceWrkMast.setLocNo(loc(dto.getLocNo()));
+        sourceWrkMast.setModiTime(now);
+        boolean res = wrkMastService.updateById(sourceWrkMast);
+        if (!res) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+
+        // 鏇存柊婧愬簱浣嶇姸鎬�
+        if (sourceLocMast.getLocSts().equals("S")) {
+            sourceLocMast.setLocSts("O");
+            sourceLocMast.setModiTime(now);
+            if (!locMastService.updateById(sourceLocMast)) {
+                throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+            }
+        } else {
+            throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅鐘舵�佷笉灞炰簬鍏ュ簱棰勭害涓�");
+        }
+
+        // 鏇存柊鐩爣搴撲綅鐘舵��
+        LocMast locMast = locMastService.selectById(loc(dto.getLocNo()));
+        if (locMast.getLocSts().equals("O")) {
+            locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
+            locMast.setModiTime(now);
+            if (!locMastService.updateById(locMast)) {
+                throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+            }
+        } else {
+            throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅宸茶鍗犵敤");
+        }
+        return dto;
+    }
+
     public String loc(String locNo){
         String[] split = locNo.split("-");
         return Utils.getLocNo(Integer.parseInt(split[0]),Integer.parseInt(split[1]),Integer.parseInt(split[2]));
diff --git a/src/main/java/com/zy/common/web/param/GetLocNoReassignParam.java b/src/main/java/com/zy/common/web/param/GetLocNoReassignParam.java
new file mode 100644
index 0000000..1ac9257
--- /dev/null
+++ b/src/main/java/com/zy/common/web/param/GetLocNoReassignParam.java
@@ -0,0 +1,13 @@
+package com.zy.common.web.param;
+
+import lombok.Data;
+
+@Data
+public class GetLocNoReassignParam {
+
+    private String taskNo;
+
+    //搴撲綅鎺�
+    private int[] row;
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index aa8d950..2df8c3d 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -12,7 +12,7 @@
     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
     url: jdbc:sqlserver://127.0.0.1:1433;databasename=qlasrs-sxk
     username: sa
-    password: sa@123
+    password: Ab!123456
   mvc:
     static-path-pattern: /**
   redis:
@@ -53,21 +53,28 @@
 wcs-slave:
   # 鐢辨祬鍏ユ繁
   locGroupAscOrder: [
-    {rowList: [1],minBay: 2,maxBay: 60},
-    {rowList: [3,4,5,6],minBay: 2,maxBay: 60},
-    {rowList: [10,9,8,7],minBay: 2,maxBay: 60},
-    {rowList: [10,9,8,7,6,5,4,3],minBay: 2,maxBay: 60},
-    {rowList: [12,13],minBay: 2,maxBay: 60},
-    {rowList: [15,14],minBay: 2,maxBay: 60},
-    {rowList: [17,18,19,20,21,22,23,24],minBay: 2,maxBay: 60},
-    {rowList: [2],minBay: 2,maxBay: 60},
-    {rowList: [11],minBay: 2,maxBay: 60},
-    {rowList: [16],minBay: 2,maxBay: 60},
-    {rowList: [25,26,27,28],minBay: 2,maxBay: 60},
-    {rowList: [29,30,31,32],minBay: 2,maxBay: 60},
-    {rowList: [33,34,35,36],minBay: 2,maxBay: 60},
-    {rowList: [37,38,39,40],minBay: 2,maxBay: 60},
+    {rowList: [2,1],minBay: 2,maxBay: 60},
+    {rowList: [3,4],minBay: 2,maxBay: 60},
+    {rowList: [6,5],minBay: 2,maxBay: 60},
+    {rowList: [7,8],minBay: 2,maxBay: 60},
+    {rowList: [10,9],minBay: 2,maxBay: 60},
+    {rowList: [11,12],minBay: 2,maxBay: 60},
+    {rowList: [14,13],minBay: 2,maxBay: 60},
+    {rowList: [15,16],minBay: 2,maxBay: 60},
+    {rowList: [18,17],minBay: 2,maxBay: 60},
+    {rowList: [19,20],minBay: 2,maxBay: 60},
+    {rowList: [22,21],minBay: 2,maxBay: 60},
+    {rowList: [23,24],minBay: 2,maxBay: 60},
+    {rowList: [26,25],minBay: 2,maxBay: 60},
+    {rowList: [27,28],minBay: 2,maxBay: 60},
+    {rowList: [30,29],minBay: 2,maxBay: 60},
+    {rowList: [31,32],minBay: 2,maxBay: 60},
+    {rowList: [34,33],minBay: 2,maxBay: 60},
+    {rowList: [35,36],minBay: 2,maxBay: 60},
+    {rowList: [38,37],minBay: 2,maxBay: 60},
+    {rowList: [39,40],minBay: 2,maxBay: 60},
   ]
+  outStaNoList: [1152,1169,1177]
 
 #wcs瀵规帴
 wcs:

--
Gitblit v1.9.1