From 3521070a2fda24b1d534e21018ce8017e01f595a Mon Sep 17 00:00:00 2001
From: whycq <10027870+whycq@user.noreply.gitee.com>
Date: 星期一, 29 七月 2024 10:05:53 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/common/service/CommonService.java |  243 ++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 214 insertions(+), 29 deletions(-)

diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index edbb19c..a1548b8 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -7,7 +7,6 @@
 import com.core.common.Cools;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
-import com.zy.asrs.entity.result.KeyValueVo;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.Utils;
 import com.zy.asrs.utils.VersionUtils;
@@ -20,10 +19,6 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -123,10 +118,200 @@
     }
 
     /**
+     * 鍙屾繁鎵惧簱浣�
+     */
+    @Transactional
+    public StartupDto getLocNo(Integer staDescId, Integer sourceStaNo,LocTypeDto locTypeDto,int times) {
+
+        // 鍒濆鍖栧弬鏁�
+        int crnNo = 0;      //鍫嗗灈鏈哄彿
+        int nearRow = 0;    //鏈�娴呭簱浣嶆帓
+        int curRow = 0;     //鏈�娣卞簱浣嶆帓
+        LocMast locMast = null;     // 鐩爣搴撲綅
+
+        StartupDto startupDto = new StartupDto();
+        RowLastno rowLastno = rowLastnoService.selectById(1);
+        int sRow = rowLastno.getsRow();
+        int eRow = rowLastno.geteRow();
+        int crn_qty = rowLastno.getCrnQty();
+        int rowCount = eRow - sRow + 1;
+        if (Cools.isEmpty(rowLastno)) {
+            throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
+        }
+        // ===============>>>> 寮�濮嬫墽琛�
+
+        curRow = rowLastno.getCurrentRow();
+
+        // 濡傛灉娌℃湁鐩歌繎鐗╂枡锛屽垯鎸夎鍒欒疆璇㈣揣鏋�
+        if (Cools.isEmpty(locMast)) {
+            Shelves shelves = new Shelves(rowCount, crn_qty);
+            int divides = (int) Arith.divides(1, curRow - 1, 4);
+            curRow = (int) Arith.remainder(curRow, 4);
+            if (curRow == 0) {
+                curRow = 4;
+            }
+            for (int i = 0; i < shelves.group; i ++) {
+                curRow = shelves.start(curRow);
+                if (curRow < 0) {
+                    throw new CoolException("妫�绱㈠簱浣嶅け璐ワ紝璇疯仈绯荤鐞嗗憳");
+                }
+                Integer crnNo1 = shelves.get(curRow);
+                crnNo1 = crnNo1 + divides*1;
+                if (basCrnpService.checkSiteError(crnNo1, true)) {
+                    crnNo = crnNo1;
+                    curRow = curRow + divides*4;
+                    break;
+                }
+            }
+        }
+
+        if (crnNo == 0) {
+            throw new CoolException("娌℃湁鍙敤鐨勫爢鍨涙満");
+        }
+
+        // 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 (!Cools.isEmpty(shallowLoc)) {
+                        if (!shallowLoc.getLocSts().equals("O")) {
+                            locMast = null;
+                        }
+                    }
+
+
+                }
+            }
+        }
+        // 鏇存柊搴撲綅鎺掑彿
+        rowLastno.setCurrentRow(curRow);
+        rowLastnoService.updateById(rowLastno);
+        // 2.搴撲綅褰撳墠鎵�灞炲昂瀵告棤绌哄簱浣嶆椂锛岃皟鏁村昂瀵稿弬鏁帮紝鍚戜笂鍏煎妫�绱㈠簱浣�
+        if (Cools.isEmpty(locMast)) {
+            // 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
+            if (times < rowCount) {
+                times = times + 1;
+                return getLocNo(staDescId, sourceStaNo, locTypeDto, times);
+            }
+            log.error("绯荤粺娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", JSON.toJSONString(locTypeDto), times);
+            throw new CoolException("娌℃湁绌哄簱浣�");
+        }
+
+
+//        // 鎼滅储绌烘墭
+//        locMast = getLocNoStep4(staDescId, sourceStaNo);
+//        if (locMast != null) {
+//            //鎵惧埌搴撲綅锛岃繑鍥瀌to
+//            return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
+//        }
+        if (locMast == null) {
+            //鎼滅储鏁翠釜绌哄簱浣嶇粍
+            locMast = getLocNoStepSingle(locTypeDto);
+        }
+
+        if (locMast != null) {
+            //鎵惧埌搴撲綅锛岃繑鍥瀌to
+            return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
+        }
+
+       //鎵句笉鍒板簱浣嶏紝鎶涘嚭寮傚父
+        throw new CoolException("娌℃湁绌哄簱浣�");
+    }
+    // 鎼滅储鍗曞搧(鏁翠釜搴撲綅缁�)
+    private LocMast getLocNoStepSingle(LocTypeDto locTypeDto) {
+        LocMast locMast = null;
+        //鍗曞搧
+        List<LocMast> locMasts = locMastService.selectAreaEmpty(locTypeDto.getLocType1());//鎼滅储璐х墿
+
+        for (LocMast mast : locMasts) {
+            List<String> groupLoc = Utils.getGroupLocNo(mast.getLocNo(), true);
+//            if (!locMastService.checkAllLocEmpty(groupLoc)) {
+//                continue;
+//            }
+
+            LocMast tmp = null;
+            for (String loc : groupLoc) {
+                LocMast locMast1 = locMastService.selectByLoc(loc);
+                if (locMast1 == null) {
+                    continue;
+                }
+
+                if (!locMast1.getLocSts().equals("O")) {
+                    continue;
+                }
+
+                tmp = locMast1;
+                break;
+            }
+
+            //棰勭暀绌哄簱浣�
+            if (tmp != null && locMastService.checkEmptyCount(mast, 10)) {
+                locMast = tmp;
+                break;
+            }
+        }
+
+        return locMast;
+    }
+
+    //杩斿洖dto
+    private StartupDto getLocNoStep6(Integer staDescId, Integer sourceStaNo, LocMast locMast) {
+        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("鍏ュ簱璺緞涓嶅瓨鍦�, staDescId={}, sourceStaNo={}", staDescId, sourceStaNo);
+            throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+        }
+
+        // 妫�娴嬬洰鏍囩珯
+        BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn());
+        if (!staNo.getAutoing().equals("Y")) {
+            throw new CoolException("鐩爣绔�" + staDesc.getCrnStn() + "涓嶅彲鐢�");
+        }
+
+        // 鐢熸垚宸ヤ綔鍙�
+        int workNo = getWorkNo(0);
+        // 杩斿洖dto
+        startupDto.setWorkNo(workNo);
+        startupDto.setSourceStaNo(sourceStaNo);
+        startupDto.setStaNo(staNo.getDevNo());
+        startupDto.setLocNo(locMast.getLocNo());
+        startupDto.setCrnNo(locMast.getCrnNo());
+        return startupDto;
+    }
+    /**
      * 妫�绱㈠簱浣嶅彿
      *
      * @param whsType     绫诲瀷 1:鍙屾繁寮忚揣鏋�
-     * @param staDescId   璺緞ID
+     * @param staDescId   鍏ュ簱绫诲瀷
      * @param sourceStaNo 婧愮珯
      * @param matnr       鐗╂枡鍙烽泦鍚�
      * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿
@@ -532,29 +717,29 @@
 //            }
 //        }
 
-        // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭 //浜掗�氱増
-        if (staDescId == 10) {
-            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 (VersionUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
-                            if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
-                                locMast = shallowLoc;
-                                crnNo = locMast.getCrnNo();
-                                break;
-                            }
-                        }
-                    }
-                }
-            }
-        }
+//        // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭 //浜掗�氱増
+//        if (staDescId == 10) {
+//            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 (VersionUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
+//                            if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
+//                                locMast = shallowLoc;
+//                                crnNo = locMast.getCrnNo();
+//                                break;
+//                            }
+//                        }
+//                    }
+//                }
+//            }
+//        }
 
         Wrapper<StaDesc> wrapper = null;
         StaDesc staDesc = null;

--
Gitblit v1.9.1