From 621dcca60415d097c1d02f75b63a37a080145e69 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@63.com>
Date: 星期一, 11 七月 2022 10:38:22 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/common/service/CommonService.java |  218 ++++++++++++++++++++++++++++++------------------------
 1 files changed, 121 insertions(+), 97 deletions(-)

diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 10a2f99..d1d6a72 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -10,13 +10,11 @@
 import com.zy.asrs.utils.Utils;
 import com.zy.asrs.utils.VersionUtils;
 import com.zy.common.model.LocTypeDto;
-import com.zy.common.model.Shelves;
 import com.zy.common.model.StartupDto;
 import com.zy.common.properties.SlaveProperties;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -49,7 +47,7 @@
 
     /**
      * 鐢熸垚宸ヤ綔鍙�
-     * @param wrkMk 0:鍏ュ簱 1 - 3000 ; 1:鎷f枡/骞舵澘/鐩樼偣 3001 - 6000 ; 2: 鍑哄簱 6001 -9000 ; 3:鍏朵粬 9001 -9999
+     * @param wrkMk 0:鍏ュ嚭搴� ; 1:鍏朵粬
      * @return workNo(宸ヤ綔鍙�)
      */
     public int getWorkNo(Integer wrkMk) {
@@ -57,25 +55,28 @@
         if (Cools.isEmpty(wrkLastno)) {
             throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
         }
+        int workNo = 0;
+        // 鍏ュ嚭搴撶被鍨�
+        if (wrkLastno.getWrkMk() == 0) {
+            workNo = wrkLastno.getWrkNo();
+            int sNo = wrkLastno.getSNo();
+            int eNo = wrkLastno.getENo();
 
-        int workNo = wrkLastno.getWrkNo();
-        int sNo = wrkLastno.getSNo();
-        int eNo = wrkLastno.getENo();
-        workNo = workNo>=eNo ? sNo : workNo+1;
-        while (true) {
-            WrkMast wrkMast = wrkMastService.selectById(workNo);
-            if (null != wrkMast) {
-                workNo = workNo>=eNo ? sNo : workNo+1;
-            } else {
-                break;
+            workNo = workNo>=eNo ? sNo : workNo+1;
+
+            while (true) {
+                WrkMast wrkMast = wrkMastService.selectById(workNo);
+                if (null != wrkMast) {
+                    workNo = workNo>=eNo ? sNo : workNo+1;
+                } else {
+                    break;
+                }
+            }
+            if (workNo > 0){
+                wrkLastno.setWrkNo(workNo);
+                wrkLastnoService.updateById(wrkLastno);
             }
         }
-        // 淇敼搴忓彿璁板綍
-        if (workNo > 0){
-            wrkLastno.setWrkNo(workNo);
-            wrkLastnoService.updateById(wrkLastno);
-        }
-        // 妫�楠�
         if (workNo == 0) {
             throw new CoolException("鐢熸垚宸ヤ綔鍙峰け璐ワ紝璇疯仈绯荤鐞嗗憳");
         } else {
@@ -86,30 +87,37 @@
         return workNo;
     }
 
+    public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto, int times) {
+        LocTypeDto oldLocType = locTypeDto.clone();
+        return getLocNo(whsType, staDescId, sourceStaNo, matNos, locTypeDto, oldLocType, times);
+    }
+
     /**
      * 妫�绱㈠簱浣嶅彿
      * @param whsType 绫诲瀷 1:鍙屾繁寮忚揣鏋�
-     * @param staDescId 璺緞宸ヤ綔绫诲瀷
+     * @param staDescId 璺緞ID
      * @param sourceStaNo 婧愮珯
-     * @param matNos 鍟嗗搧缂栧彿闆嗗悎
+     * @param matNos 鐗╂枡鍙烽泦鍚�
      * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿
      */
-    @Transactional
-    public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto, int times) {
+    public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto, LocTypeDto oldLocType, int times) {
         StartupDto startupDto = new StartupDto();
+        if (sourceStaNo == 100) { // 杞昏揣淇″彿
+            whsType = 1;    // 1 - 11 宸�
+        } else if (sourceStaNo == 200) { // 閲嶈揣淇″彿
+            whsType = 2;    // 12 - 21 鍙�
+        }
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = getWorkNo(0);
         RowLastno rowLastno = rowLastnoService.selectById(whsType);
         if (Cools.isEmpty(rowLastno)) {
             throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
         }
-
-        // ===============>>>> 寮�濮嬫墽琛�
-        int curRow = rowLastno.getCurrentRow();
-        int sRow = rowLastno.getsRow();
-        int eRow = rowLastno.geteRow();
-        int crn_qty = rowLastno.getCrnQty();
-        int rowCount = eRow - sRow + 1;
+        int curRow = rowLastno.getCurrentRow();  // 褰撳墠鍒�
+        int sRow = rowLastno.getsRow();          // 璧峰鍒�
+        int eRow = rowLastno.geteRow();          // 缁堟鍒�
+        int crn_qty = rowLastno.getCrnQty();     // 鍫嗗灈鏈烘暟閲忥紙宸烽亾鏁伴噺锛�
+        int rowCount = eRow - sRow + 1;          // 搴撴帓鎬绘暟
         // 鐩爣鍫嗗灈鏈哄彿
         int crnNo = 0;
         // 鐩爣搴撲綅
@@ -117,18 +125,15 @@
 
         // 闈犺繎鎽嗘斁瑙勫垯 --- 鍚屽ぉ鍚岃鏍肩墿鏂�
         if (!Cools.isEmpty(matNos)) {
-            List<String> locNos = locDetlService.getSameDetlToday(matNos.get(0), sRow, eRow);
+            List<String> locNos = locDetlService.getSameDetl(matNos.get(0), sRow, eRow);
             for (String locNo : locNos) {
-                if (Utils.isShallowLoc(slaveProperties, locNo)) {
-                    continue;
-                }
-                String shallowLocNo = Utils.getShallowLoc(slaveProperties, locNo);
-                // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
-                LocMast shallowLoc = locMastService.selectById(shallowLocNo);
-                if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
-                    if (VersionUtils.locMoveCheckLocType(shallowLoc, locTypeDto)) {
-                        if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
-                            locMast = shallowLoc;
+                List<String> groupLoc = Utils.getGroupLoc(locNo);
+                locMast = locMastService.findOutMost(groupLoc);
+                if (null != locMast) {
+                    // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                    if (VersionUtils.locMoveCheckLocType(locMast, locTypeDto)) {
+                        // 娴呭簱浣嶅搴斿爢鍨涙満蹇呴』鍙敤涓旀棤寮傚父
+                        if (basCrnpService.checkSiteError(locMast.getCrnNo(), true)) {
                             crnNo = locMast.getCrnNo();
                             break;
                         }
@@ -142,17 +147,16 @@
             List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "D").ge("row1", sRow).le("row1", eRow));
             if (locMasts.size() > 0) {
                 for (LocMast loc : locMasts) {
-                    if (Utils.isShallowLoc(slaveProperties, loc.getLocNo())) {
-                        continue;
-                    }
-                    String shallowLocNo = Utils.getShallowLoc(slaveProperties,  loc.getLocNo());
-                    // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
-                    LocMast shallowLoc = locMastService.selectById(shallowLocNo);
-                    if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
-                        if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
-                            locMast = shallowLoc;
-                            crnNo = locMast.getCrnNo();
-                            break;
+                    List<String> groupLoc = Utils.getGroupLoc(loc.getLocNo());
+                    locMast = locMastService.findOutMost(groupLoc);
+                    if (null != locMast) {
+                        // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                        if (VersionUtils.locMoveCheckLocType(locMast, locTypeDto)) {
+                            // 娴呭簱浣嶅搴斿爢鍨涙満蹇呴』鍙敤涓旀棤寮傚父
+                            if (basCrnpService.checkSiteError(locMast.getCrnNo(), true)) {
+                                crnNo = locMast.getCrnNo();
+                                break;
+                            }
                         }
                     }
                 }
@@ -161,17 +165,61 @@
 
         // 濡傛灉娌℃湁鐩歌繎鐗╂枡锛屽垯鎸夎鍒欒疆璇㈣揣鏋�
         if (null == locMast) {
-            Shelves shelves = new Shelves(rowCount, crn_qty);
+            int t = 0;
+            boolean execute = true;
+            int crnNo1;
+            // 1 - 11鎺�
             if (whsType == 1) {
-                for (int i = 0; i < shelves.group; i ++) {
-                    curRow = shelves.start(curRow);
-                    if (curRow < 0) {
-                        throw new CoolException("妫�绱㈠簱浣嶅け璐ワ紝璇疯仈绯荤鐞嗗憳");
+                while (execute && t < 4) {
+                    t++;
+                    switch (curRow) {
+                        case 3:
+                            curRow = 11;
+                            crnNo1 = 2;
+                            break;
+                        case 11:
+                            curRow = 4;
+                            crnNo1 = 1;
+                            break;
+                        case 4:
+                            curRow = 12;
+                            crnNo1 = 2;
+                            break;
+                        default:
+                            curRow = 3;
+                            crnNo1 = 1;
+                            break;
                     }
-                    Integer crnNo1 = shelves.get(curRow);
                     if (basCrnpService.checkSiteError(crnNo1, true)) {
                         crnNo = crnNo1;
-                        break;
+                        execute = false;
+                    }
+                }
+                // 12 - 21鎺�
+            } else {
+                while (execute && t < 4) {
+                    t++;
+                    switch (curRow) {
+                        case 11:
+                            curRow = 18;
+                            crnNo1 = 3;
+                            break;
+                        case 18:
+                            curRow = 12;
+                            crnNo1 = 2;
+                            break;
+                        case 12:
+                            curRow = 19;
+                            crnNo1 = 3;
+                            break;
+                        default:
+                            curRow = 11;
+                            crnNo1 = 2;
+                            break;
+                    }
+                    if (basCrnpService.checkSiteError(crnNo1, true)) {
+                        crnNo = crnNo1;
+                        execute = false;
                     }
                 }
             }
@@ -187,13 +235,16 @@
                 .eq("crn_no", crnNo);
         StaDesc staDesc = staDescService.selectOne(wrapper);
         if (Cools.isEmpty(staDesc)) {
-            log.error("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo);
+            log.error("鍏ュ簱璺緞涓嶅瓨鍦�, staDescId={}, sourceStaNo={}, crnNo={}", staDescId, sourceStaNo, crnNo);
             throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
         }
+
+        // 妫�娴嬬洰鏍囩珯
         BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn());
         if (!staNo.getAutoing().equals("Y")) {
             throw new CoolException("鐩爣绔�"+staDesc.getCrnStn()+"涓嶅彲鐢�");
         }
+
         // 鏇存柊搴撲綅鎺掑彿
         rowLastno.setCurrentRow(curRow);
         rowLastnoService.updateById(rowLastno);
@@ -202,35 +253,10 @@
 
         // 1.褰撴绱㈠簱鎺掍负娴呭簱浣嶆帓鏃讹紝浼樺厛瀵绘壘褰撳墠搴撴帓鐨勬繁搴撲綅鎺�
         if (locMast == null) {
-            if (Utils.isShallowLoc(slaveProperties, curRow)) {
-                Integer deepRow = Utils.getDeepRow(slaveProperties, curRow);
-                locMast = locMastService.queryFreeLocMast(deepRow, locTypeDto.getLocType1());
-                // todo:luxiaotao 濡傛灉鐢ㄦ祬鎺掓壘鍒扮殑娣卞簱浣嶏紝閭d箞鍒欓渶瑕佸垽鏂繖涓繁搴撲綅瀵瑰簲鐨勬祬搴撲綅鏄惁鏈夎揣锛團銆乆銆丏锛�
-                // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣�
-                if (!locMastService.checkEmptyCount(locMast)) {
-                    locMast = null;
-                }
-            }
-            if (Cools.isEmpty(locMast)) {
-                locMast = locMastService.queryFreeLocMast(curRow, locTypeDto.getLocType1());
-                // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣�
-                if (!locMastService.checkEmptyCount(locMast)) {
-                    locMast = null;
-                }
-                // 鐩爣搴撲綅 ===>> 娴呭簱浣嶏紝 鍒欐牎楠屽叾娣卞簱浣嶆槸鍚︿负 F D X
-                if (null != locMast && Utils.isShallowLoc(slaveProperties, locMast.getLocNo())) {
-                    LocMast deepLoc = locMastService.selectById(Utils.getDeepLoc(slaveProperties, locMast.getLocNo()));
-                    if (!deepLoc.getLocSts().equals("F") && !deepLoc.getLocSts().equals("D") && !deepLoc.getLocSts().equals("X")) {
-                        locMast = null;
-                    }
-                }
-                // 鐩爣搴撲綅 ===>> 娣卞簱浣嶏紝 鍒欐牎楠屽叾娴呭簱浣嶆槸鍚︿负 O
-                if (null != locMast && Utils.isDeepLoc(slaveProperties, locMast.getLocNo())) {
-                    LocMast shallowLoc = locMastService.selectById(Utils.getShallowLoc(slaveProperties, locMast.getLocNo()));
-                    if (!shallowLoc.getLocSts().equals("O")) {
-                        locMast = null;
-                    }
-                }
+            locMast = locMastService.queryFreeLocMast(curRow, locTypeDto.getLocType1());
+            // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣�
+            if (!locMastService.checkEmptyCount(locMast)) {
+                locMast = null;
             }
         }
 
@@ -239,14 +265,13 @@
             // 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
             if (times < rowCount) {
                 times = times + 1;
-                return getLocNo(1, staDescId, sourceStaNo, matNos, locTypeDto, times);
+                return getLocNo(whsType, staDescId, sourceStaNo, matNos, locTypeDto, oldLocType, times);
             }
-
-            // 杞昏揣鐗╂壘杞诲簱浣嶄负绌烘椂锛屽彲浠ュ幓鎵鹃噸搴撲綅浠�
-            if (locTypeDto.getLocType1() == 1) {
-                locTypeDto.setLocType1((short) 2);
-                return getLocNo(1, staDescId, sourceStaNo, matNos, locTypeDto, times);
-            }
+//            // 璐х墿妫�绱綆搴撲綅浠撳け璐ワ紝鍏煎楂樺簱浣嶄粨鍚庣户缁墽琛�
+//            if (locTypeDto.getLocType1() == 1) {
+//                locTypeDto.setLocType1((short) 2);
+//                return getLocNo(1, staDescId, sourceStaNo, emptyMk, matNos, locTypeDto, oldLocType, times);
+//            }
             log.error("绯荤粺娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", JSON.toJSONString(locTypeDto), times);
             throw new CoolException("娌℃湁绌哄簱浣�");
         }
@@ -260,7 +285,6 @@
         startupDto.setLocNo(locNo);
         return startupDto;
     }
-
 
     public static String zerofill(String msg, Integer count) {
         if (msg.length() == count) {

--
Gitblit v1.9.1