From bdbf9db4113d375bb6cec9aab787db5adb14c480 Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期五, 03 一月 2025 16:01:38 +0800
Subject: [PATCH] #出库规则完成,盘点拣料出库测试完成

---
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java |  228 ++++++++++++++++++++++++++++++++------------------------
 1 files changed, 131 insertions(+), 97 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 9553b17..30b3554 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.*;
@@ -172,24 +169,8 @@
             }
         }
         if (!locDetlDtos.isEmpty()) {
-            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo()));
-            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
-                    .eq("lev1", locMast.getLev1())
-                    .orderBy("bay1",false));
-            for (LocMast locMast1 : locMasts) {
-                if (locMast1.getLocNo().equals(locMast.getLocNo())) {
-                    break;
-                }
-                if (locMast1.getLocSts().equals("D") || locMast1.getLocSts().equals("F")) {
-                    throw new CoolException(locMast.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("搴撳瓨涓嶅瓨鍦�");
         }
@@ -217,81 +198,133 @@
             }
         }
         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(0L); // 宸ヤ綔鐘舵�侊細0.寰呮帴鏀�
-            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));
+
+                // 鐢熸垚宸ヤ綔妗�
+                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("N");
+                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() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
+                }
             }
         }
     }
@@ -454,13 +487,14 @@
             if (!locMast.getLocSts().equals("D")){
                 throw new CoolException("鎵�閫夊簱浣嶅瓨鍦ㄧ姸鎬佷笉涓篋鐨勫簱浣嶏紝搴撲綅鍙凤細"+locMast.getLocNo()+" 銆佸綋鍓嶇姸鎬侊細"+locMast.getLocSts()+"-"+locMast.getLocSts$());
             }
-            boolean res1 = false;
+            boolean res1 = true;
             if(param.getOutSite()==100){
-                res1 = true;
+                res1 = false;
             }
             List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
-                    .eq("lev1", locMast.getLev1())
-                    .orderBy("bay1",res1));
+                    .eq("bay1", locMast.getBay1())
+                    .eq("lev1",locMast.getLev1())
+                    .orderBy("row1",res1));
             for (LocMast locMast1 : locMasts) {
                 if (locMast1.getLocNo().equals(locMast.getLocNo())) {
                     break;

--
Gitblit v1.9.1