From 44c51c450765e98a969f9d2a48185ffa511ef3aa Mon Sep 17 00:00:00 2001
From: dubin <bindu_bean@163.com>
Date: 星期二, 16 十二月 2025 12:46:15 +0800
Subject: [PATCH] #1

---
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java |  253 +++++++++++++++++++++++++++++++------------------
 1 files changed, 159 insertions(+), 94 deletions(-)

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 a526e4c..be77333 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -8,10 +8,7 @@
 import com.core.common.SnowflakeIdWorker;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
-import com.zy.asrs.entity.param.EmptyPlateOutParam;
-import com.zy.asrs.entity.param.FullStoreParam;
-import com.zy.asrs.entity.param.LocDetlAdjustParam;
-import com.zy.asrs.entity.param.StockOutParam;
+import com.zy.asrs.entity.param.*;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.*;
@@ -91,7 +88,11 @@
         // 妫�绱㈠簱浣�
         LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
         List<String> matnrs = param.getList().stream().map(FullStoreParam.MatCodeStore::getMatnr).distinct().collect(Collectors.toList());
-        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), matnrs.get(0), null, null,locTypeDto,0);
+//        List<String> batchs = param.getList().stream().map(FullStoreParam.MatCodeStore::getBatch).distinct().collect(Collectors.toList());
+        StartupDto dto = commonService.getLocNo(1, param.getDevpNo(), matnrs.get(0), null, null,locTypeDto);
+        if (Cools.isEmpty(dto)){
+            throw new CoolException("鏌ヨ搴撲綅澶辫触锛侊紒==銆媠tartupFullPutStore ==銆� commonService.getLocNo");
+        }
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = dto.getWorkNo();
         // 鐢熸垚宸ヤ綔妗�
@@ -168,13 +169,8 @@
             }
         }
         if (!locDetlDtos.isEmpty()) {
-            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo()));
-            if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D") ){
-                // 鍚姩鍑哄簱寮�濮� 101.鍑哄簱
-                stockOut(staNo, locDetlDtos, null, userId);
-            }else {
-                throw new CoolException("鎵�閫夊簱浣嶅瓨鍦ㄧ姸鎬佷笉涓篎銆丏鐨勫簱浣嶏紝搴撲綅鍙凤細"+locMast.getLocNo()+" 銆佸綋鍓嶇姸鎬侊細"+locMast.getLocSts()+"-"+locMast.getLocSts$());
-            }
+            // 鍚姩鍑哄簱寮�濮� 101.鍑哄簱
+            stockOut(staNo, locDetlDtos, null, userId);
         } else {
             throw new CoolException("搴撳瓨涓嶅瓨鍦�");
         }
@@ -202,81 +198,134 @@
             }
         }
         Integer ioType = null;
-        // 鐢熸垚宸ヤ綔妗�
-        for (OutLocDto dto : dtos) {
-            // 鍒ゆ柇鍏ュ嚭搴撶被鍨嬶細101.鍏ㄦ澘鍑哄簱 or 103.鎷f枡鍑哄簱
-            if (ioWorkType == null) {
-                ioType = dto.isAll() ? 101 : 103;
-            } else if (ioWorkType.equals(IoWorkType.CHECK_OUT)) {
-                ioType = 107;
-            }
-            assert ioType != null;
-            // 鑾峰彇搴撲綅
-            LocMast locMast = locMastService.selectById(dto.getLocNo());
 
-            Integer outSta = staNo.getDevNo();
-//            //2鍙峰爢鍨涙満鍏ㄦ澘鍑哄簱绔欐寚瀹氫负204绔欙紝鎷f枡绔欐寚瀹氫负202
-//            if(locMast.getCrnNo()==2){
-//                outSta = ioType == 101 ? 204 : 202;
-//            }
+        // 鎸夊垪鍜屽眰鍒嗙粍搴撲綅
+        Map<String, List<OutLocDto>> locGroups = dtos.stream()
+                .collect(Collectors.groupingBy(dto -> {
+                    String column = dto.getLocNo().substring(3, 6); // 鍒楀彿
+                    String level = dto.getLocNo().substring(6);    // 灞傚彿
+                    return column + "-" + level;                  // 缁勫悎鎴愬敮涓�鐨勭粍鏍囪瘑
+                }));
 
-            // 鑾峰彇璺緞
-            StaDesc staDesc = staDescService.queryCrnStn(ioType, locMast.getCrnNo(), outSta);
-            // 鐢熸垚宸ヤ綔鍙�
-            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(dto.getLocNo()); // 婧愬簱浣�
-            wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
-            wrkMast.setPicking("N"); // 鎷f枡
-            wrkMast.setExitMk("N"); // 閫�鍑�
-            wrkMast.setEmptyMk("N"); // 绌烘澘
-            wrkMast.setLinkMis("N");
-            wrkMast.setBarcode(locMast.getBarcode());
-            wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁
-            wrkMast.setAppeTime(now);
-            wrkMast.setModiUser(userId);
-            wrkMast.setModiTime(now);
-            if (!wrkMastService.insert(wrkMast)) {
-                throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細"+dto.getLocNo());
-            }
-            // 鐢熸垚宸ヤ綔妗f槑缁�
-            for (LocDetlDto detlDto : dto.getLocDetlDtos()) {
-                if (detlDto.getCount()==null || detlDto.getCount() <= 0.0D) {continue;}
-                WrkDetl wrkDetl = new WrkDetl();
-                wrkDetl.sync(detlDto.getLocDetl());
-                wrkDetl.setOrderNo(""); // 鎵嬪姩鍑哄簱涓嶉渶瑕佸甫鍑哄簱瀛樹腑鐨勫崟鎹紪鍙�
-                wrkDetl.setWrkNo(workNo);
-                wrkDetl.setIoTime(now);
-                Double anfme = ioType==101?detlDto.getLocDetl().getAnfme():detlDto.getCount();
-                wrkDetl.setAnfme(anfme); // 鏁伴噺
-                wrkDetl.setAppeTime(now);
-                wrkDetl.setAppeUser(userId);
-                wrkDetl.setModiTime(now);
-                wrkDetl.setModiUser(userId);
-                if (!wrkDetlService.insert(wrkDetl)) {
-                    throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+        // 閬嶅巻姣忕粍
+        for (Map.Entry<String, List<OutLocDto>> entry : locGroups.entrySet()) {
+            String groupKey = entry.getKey(); // 缁勬爣璇嗭紝渚嬪 "003-02" 琛ㄧず绗�3鍒楃2灞�
+            List<OutLocDto> groupDtos = entry.getValue();
+
+            // 缁勫唴浼樺厛绾ч噸鏂颁粠100寮�濮�
+            double priority = 100;
+
+            // 鎺掑簭缁勫唴搴撲綅锛堟帓鍙峰�掑簭锛�
+            groupDtos.sort(Comparator.comparing((OutLocDto dto) -> Integer.valueOf(dto.getLocNo().substring(0, 2))).reversed());
+
+            for (OutLocDto dto : groupDtos) {
+                String locNo = dto.getLocNo();
+
+                // 娣卞簱浣嶈鍒欐鏌ワ紝浠呮鏌ュ綋鍓嶅垪鍜屽眰鍐呯殑鍓嶅簱浣�
+                int currentRow = Integer.valueOf(locNo.substring(0, 2));
+                for (int i = currentRow + 1; i <= 5; i++) { // 娣卞簱浣嶄负 1-5 鎺�
+                    String frontLoc = String.format("%02d%s", i, locNo.substring(2));
+                    LocMast locMastFront = locMastService.selectOne(new EntityWrapper<LocMast>()
+                            .eq("loc_no", frontLoc).eq("loc_sts", "F"));
+                    if (!Cools.isEmpty(locMastFront)) {
+                        throw new CoolException(locNo + " 鐨勫墠搴撲綅 " + frontLoc + " 鏈夎揣");
+                    }
+
+                    // 鍒ゆ柇鍓嶅簱浣嶆槸鍚︽湁鍏ュ簱浠诲姟
+                    WrkMast wrkMastFront = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("loc_no", frontLoc));
+                    if (!Cools.isEmpty(wrkMastFront)) {
+                        throw new CoolException(locNo + " 鐨勫墠搴撲綅 " + frontLoc + " 鏈夊叆搴撲换鍔�");
+                    }
                 }
-            }
-            // 淇敼搴撲綅鐘舵��:   F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓�
-            locMast = locMastService.selectById(dto.getLocNo());
-            if (locMast.getLocSts().equals("F")) {
-                locMast.setLocSts(ioType==101?"R":"P");
-                locMast.setModiUser(userId);
-                locMast.setModiTime(now);
-                if (!locMastService.updateById(locMast)) {
-                    throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細"+dto.getLocNo());
+
+                // 璁$畻浼樺厛绾�
+                dto.setPriority(priority);
+                priority--; // 涓嬩竴涓换鍔′紭鍏堢骇閫掑
+
+                // 鑾峰彇搴撲綅
+                LocMast locMast = locMastService.selectById(dto.getLocNo());
+                if (Cools.isEmpty(locMast)) {
+                    throw new CoolException(dto.getLocNo() + "搴撲綅涓嶅瓨鍦�");
                 }
-            } else {
-                throw new CoolException(dto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
+                if (!locMast.getLocSts().equals("F")) {
+                    throw new CoolException(dto.getLocNo() + "鎵樼洏闈炲湪搴撶姸鎬�");
+                }
+
+                // 鍒ゆ柇鍏ュ嚭搴撶被鍨�
+                if (ioWorkType == null) {
+                    ioType = dto.isAll() ? 101 : 103;
+                } else if (ioWorkType.equals(IoWorkType.CHECK_OUT)) {
+                    ioType = 107;
+                }
+                assert ioType != null;
+
+                Integer outSta = staNo.getDevNo();
+
+                // 鑾峰彇璺緞
+                StaDesc staDesc = staDescService.queryCrnStn(ioType, locMast.getCrnNo(), outSta);
+
+                // 鐢熸垚宸ヤ綔鍙�
+                int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
+                String pick = ioType == 101 ? "N":"Y";
+
+                // 鐢熸垚宸ヤ綔妗�
+                WrkMast wrkMast = new WrkMast();
+                wrkMast.setWrkNo(workNo);
+                wrkMast.setIoTime(now);
+                wrkMast.setWrkSts(0L);
+                wrkMast.setIoType(ioType);
+                wrkMast.setIoPri(priority);
+                wrkMast.setCrnNo(locMast.getCrnNo());
+                wrkMast.setSourceStaNo(staDesc.getCrnStn());
+                wrkMast.setStaNo(staDesc.getStnNo());
+                wrkMast.setSourceLocNo(dto.getLocNo());
+                wrkMast.setFullPlt("Y");
+                wrkMast.setPicking(pick);
+                wrkMast.setExitMk("N");
+                wrkMast.setEmptyMk("N");
+                wrkMast.setLinkMis("N");
+                wrkMast.setBarcode(locMast.getBarcode());
+                wrkMast.setAppeUser(userId);
+                wrkMast.setAppeTime(now);
+                wrkMast.setModiUser(userId);
+                wrkMast.setModiTime(now);
+                if (!wrkMastService.insert(wrkMast)) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細" + dto.getLocNo());
+                }
+
+                // 鐢熸垚宸ヤ綔妗f槑缁�
+                for (LocDetlDto detlDto : dto.getLocDetlDtos()) {
+                    if (detlDto.getCount() == null || detlDto.getCount() <= 0.0D) {
+                        continue;
+                    }
+                    WrkDetl wrkDetl = new WrkDetl();
+                    wrkDetl.sync(detlDto.getLocDetl());
+                    wrkDetl.setOrderNo("");
+                    wrkDetl.setWrkNo(workNo);
+                    wrkDetl.setIoTime(now);
+                    Double anfme = ioType == 101 ? detlDto.getLocDetl().getAnfme() : detlDto.getCount();
+                    wrkDetl.setAnfme(anfme);
+                    wrkDetl.setAppeTime(now);
+                    wrkDetl.setAppeUser(userId);
+                    wrkDetl.setModiTime(now);
+                    wrkDetl.setModiUser(userId);
+                    if (!wrkDetlService.insert(wrkDetl)) {
+                        throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+                    }
+                }
+
+                // 淇敼搴撲綅鐘舵��
+                locMast = locMastService.selectById(dto.getLocNo());
+                if (locMast.getLocSts().equals("F")) {
+                    locMast.setLocSts(ioType == 101 ? "R" : "P");
+                    locMast.setModiUser(userId);
+                    locMast.setModiTime(now);
+                    if (!locMastService.updateById(locMast)) {
+                        throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + dto.getLocNo());
+                    }
+                } else {
+                    throw new CoolException(dto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
+                }
             }
         }
     }
@@ -371,7 +420,7 @@
         BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
         // 妫�绱㈠簱浣�
         LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
-        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null,null,null, locTypeDto, 0);
+        StartupDto dto = commonService.getLocNo( 10, devpNo, null,null,null, locTypeDto);
         int workNo = dto.getWorkNo();
         Date now = new Date();
         // 鐢熸垚宸ヤ綔妗�
@@ -439,6 +488,22 @@
             if (!locMast.getLocSts().equals("D")){
                 throw new CoolException("鎵�閫夊簱浣嶅瓨鍦ㄧ姸鎬佷笉涓篋鐨勫簱浣嶏紝搴撲綅鍙凤細"+locMast.getLocNo()+" 銆佸綋鍓嶇姸鎬侊細"+locMast.getLocSts()+"-"+locMast.getLocSts$());
             }
+            boolean res1 = true;
+            if(param.getOutSite()==100){
+                res1 = false;
+            }
+            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+                    .eq("bay1", locMast.getBay1())
+                    .eq("lev1",locMast.getLev1())
+                    .orderBy("row1",res1));
+            for (LocMast locMast1 : locMasts) {
+                if (locMast1.getLocNo().equals(locMast.getLocNo())) {
+                    break;
+                }
+                if (locMast1.getLocSts().equals("D") || locMast1.getLocSts().equals("F")) {
+                    throw new CoolException(locNo+"搴撲綅鍫靛锛岀姝㈠嚭搴�");
+                }
+            }
             // 鑾峰彇婧愮珯
             Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                     .eq("type_no", 110)
@@ -454,7 +519,7 @@
             WrkMast wrkMast = new WrkMast();
             wrkMast.setWrkNo(workNo);
             wrkMast.setIoTime(now);
-            wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+            wrkMast.setWrkSts(0L); // 宸ヤ綔鐘舵�侊細0.寰呭彂閫�
             wrkMast.setIoType(110); // 鍏ュ嚭搴撶姸鎬侊細 110.绌烘澘鍑哄簱
             wrkMast.setIoPri(10D);
             wrkMast.setSourceStaNo(sourceStaNo); // 婧愮珯
@@ -670,12 +735,13 @@
         if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 14) {
             throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚");
         }
-        // 鍏ュ簱 + 搴撲綅杞Щ
-        if (wrkMast.getWrkSts() < 4 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType()==11)) {
-            wrkMast.setWrkSts(4L);
         // 鍑哄簱
-        } else if (wrkMast.getWrkSts() > 10) {
+        if (wrkMast.getIoType() > 100) {
             wrkMast.setWrkSts(14L);
+            // 鍏ュ簱 + 搴撲綅杞Щ
+        } else if (wrkMast.getIoType()==1 || wrkMast.getIoType()==10 || wrkMast.getIoType()==11) {
+            wrkMast.setWrkSts(4L);
+
         }
         Date now = new Date();
         wrkMast.setCrnStrTime(DateUtils.calculate(now, 1L, TimeUnit.SECONDS, true));
@@ -821,7 +887,7 @@
         String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣�
         String locSts = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬�
         // 鍏ュ簱鍙栨秷锛堜慨鏀圭洰鏍囧簱浣嶏級
-        if (wrkMast.getWrkSts() < 4) {
+        if (wrkMast.getIoType() < 100) {
             locNo = wrkMast.getLocNo();
             locSts = "O";
 
@@ -838,10 +904,10 @@
                 locMastService.updateById(locMast);
             }
         // 鍑哄簱鍙栨秷锛堜慨鏀规簮搴撲綅锛�
-        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14) {
+        } else if (wrkMast.getIoType() > 100 && wrkMast.getWrkSts() != 14) {
             locNo = wrkMast.getSourceLocNo();
             // 鍑哄簱 ===>> F.鍦ㄥ簱
-            if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
+            if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103) {
                 locSts = "F";
             // 绌烘澘鍑哄簱 ===>> D.绌烘《/绌烘爤鏉�
             } else if (wrkMast.getIoType() == 110) {
@@ -873,8 +939,7 @@
                     waitPakinService.update(waitPakin, new EntityWrapper<WaitPakin>()
 //                            .eq("order_no", waitPakin.getOrderNo())
                             .eq("zpallet",waitPakin.getZpallet())
-                            .eq("matnr", waitPakin.getMatnr())
-                            .eq("batch", waitPakin.getBatch()));
+                            .eq("matnr", waitPakin.getMatnr()));
                 }
             }
         }

--
Gitblit v1.9.1