From 497d1f54675810ff6fbc52018213dfd7e12cd16d Mon Sep 17 00:00:00 2001
From: LSH
Date: 星期一, 04 三月 2024 16:18:13 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java |   22 +++++
 src/main/java/com/zy/asrs/utils/Utils.java                     |   55 +++++++++++++
 src/main/resources/mapper/LocMastMapper.xml                    |   32 ++++++++
 src/main/java/com/zy/asrs/mapper/LocMastMapper.java            |   20 +++++
 src/main/java/com/zy/asrs/service/LocMastService.java          |   10 ++
 src/main/java/com/zy/common/service/CommonService.java         |  101 +++++++++++++++----------
 6 files changed, 197 insertions(+), 43 deletions(-)

diff --git a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
index d5db54d..d0d5663 100644
--- a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -25,4 +25,24 @@
 
     List<LocMast> selectLocShuttleMoveUnilateralY(@Param("bay")Integer bay,@Param("lev")Integer lev);
     List<LocMast> selectLocShuttleMoveUnilateralN(@Param("bay")Integer bay,@Param("lev")Integer lev);
+
+    /*
+     * 鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娴呴潪绌哄簱浣�  娣�>娴�
+     * */
+    LocMast selectLocByLocStsPakInF1(@Param("locNos") List<String> locNos);
+
+    /*
+     * 鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娴呴潪绌哄簱浣�  娣�<娴�
+     * */
+    LocMast selectLocByLocStsPakInF2(@Param("locNos") List<String> locNos);
+
+    /*
+     * 鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娣辩┖搴撲綅  娣�>娴�
+     * */
+    LocMast selectLocByLocStsPakInO1(@Param("locNos") List<String> locNos);
+
+    /*
+     * 鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娣辩┖搴撲綅  娣�<娴�
+     * */
+    LocMast selectLocByLocStsPakInO2(@Param("locNos") List<String> locNos);
 }
diff --git a/src/main/java/com/zy/asrs/service/LocMastService.java b/src/main/java/com/zy/asrs/service/LocMastService.java
index 168d694..d7781a9 100644
--- a/src/main/java/com/zy/asrs/service/LocMastService.java
+++ b/src/main/java/com/zy/asrs/service/LocMastService.java
@@ -40,4 +40,14 @@
     List<LocMast> queryShallowLocFMast(Integer crnNo);
 
     List<LocMast> selectLocMastShuttleMoveUnilateral(Integer bay,Integer lev,Integer crnNo);
+
+    /*
+     * 鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娴呴潪绌哄簱浣�
+     * */
+    LocMast selectLocByLocStsPakInF(Integer curRow,Integer nearRow,List<String> locNos);
+
+    /*
+     * 鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娣辩┖搴撲綅
+     * */
+    LocMast selectLocByLocStsPakInO(Integer curRow,Integer nearRow,List<String> locNos);
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
index 0b56793..8077398 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -43,6 +43,28 @@
         return this.baseMapper.selectEmptyLocCount(locMast.getLocType1(), locMast.getCrnNo()) > 1;
     }
 
+    /*
+     *鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娴呴潪绌哄簱浣�
+     * */
+    @Override
+    public LocMast selectLocByLocStsPakInF(Integer curRow,Integer nearRow,List<String> locNos) {
+        if (curRow<nearRow){
+            return this.baseMapper.selectLocByLocStsPakInF1(locNos);
+        }
+        return this.baseMapper.selectLocByLocStsPakInF2(locNos);
+    }
+
+    /*
+     * 鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娣辩┖搴撲綅
+     * */
+    @Override
+    public LocMast selectLocByLocStsPakInO(Integer curRow,Integer nearRow,List<String> locNos) {
+        if (curRow<nearRow){
+            return this.baseMapper.selectLocByLocStsPakInO1(locNos);
+        }
+        return this.baseMapper.selectLocByLocStsPakInO2(locNos);
+    }
+
     @Override
     public Boolean checkWhole(List<LocDetl> locDetls) {
         return null;
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index 1f40a61..5e948f3 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -218,15 +218,22 @@
 //        System.out.println(deepRow);
 //    }
 
+    public static boolean BooleanWhsTypeStaIoType(Integer whsType) {  //鏌ヨ鐩镐技鐗╂枡寮�鍏�
+        if (whsType == 1 || whsType==3 || whsType==4) {
+            return true;
+        }
+        return false;
+    }
+
     public static boolean BooleanWhsTypeSta(Integer whsType) {
-        if (whsType == 1) {
+        if (whsType == 1 || whsType == 2 || whsType == 5 || whsType==3 || whsType==4) {
             return true;
         }
         return false;
     }
 
     public static boolean BooleanWhsTypeSta(Integer whsType, Integer staDescId) {
-        if (whsType == 1 && staDescId != 11 && staDescId != 111) {
+        if ((whsType == 1 || whsType == 5 || whsType == 2 || whsType==3 || whsType==4) && staDescId != 11 && staDescId != 111) {
             return true;
         }
         return false;
@@ -360,4 +367,48 @@
         return null;
     }
 
+
+    public static Integer GetWhsType(Integer sourceStaNo) {
+        switch (sourceStaNo){
+            case 104:
+            case 173:
+            case 174:
+            case 175:
+            case 130:
+            case 125:
+                return 5;
+            case 204:
+            case 273:
+            case 274:
+            case 275:
+            case 230:
+            case 225:
+                return 2;
+            default:
+                return 0;
+        }
+    }
+
+    /*
+     * 鏈�娣卞簱浣嶆帓鍙� 锛� curRow
+     * 鏈�娴呭簱浣嶆帓鍙� 锛� nearRow
+     * 鏈�娴呭簱浣嶅彿锛岀敤浜庨攣瀹氬垪銆佸眰 锛� nearRow
+     * 鍏ュ簱  true:pakin
+     * 鍑哄簱  false:pakin
+     * */
+    // 澶栦晶鏂瑰悜鐨勮揣浣�  浼樺厛鍏ュ簱鏂瑰悜 ===>> 鍙嶄箣
+    public static List<String> getGroupOutLocCrn(Integer curRow,Integer nearRow,String locNo,boolean pakin){
+        List<String> result = new ArrayList<>();
+        if (pakin){
+            for (int row = curRow;row<=nearRow;row++){
+                result.add(zerofill(String.valueOf(row), 2) + locNo.substring(2));
+            }
+        }else {
+            for (int row = curRow;row>=curRow;row--){
+                result.add(zerofill(String.valueOf(row), 2) + locNo.substring(2));
+            }
+        }
+        return result;
+    }
+
 }
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index b1b5b76..bfa3529 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -99,6 +99,7 @@
      */
     @Transactional
     public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, String matnr, String batch, String grade, LocTypeDto locTypeDto) {
+        whsType = Utils.GetWhsType(sourceStaNo);
         return getLocNoRun(whsType,staDescId,sourceStaNo,matnr,batch,grade,0,locTypeDto,0);
     }
 
@@ -152,13 +153,19 @@
         }
 
         //姝ょ▼搴忕敤浜庝紭鍖栧爢鍨涙満寮傚父鏃剁殑杩愯鏃堕棿
-        for (int i = times; i < crnNumber; i++) {
+        for (int i = times; i < crnNumber*2; i++) {
             int[] locNecessaryParameters = Utils.LocNecessaryParameters(whsType, curRow, crnNumber);
             curRow = locNecessaryParameters[1];
             crnNo = locNecessaryParameters[2];
             if (basCrnpService.checkSiteError(crnNo, true)) {
                 rowCount =  locNecessaryParameters[0];
                 nearRow = locNecessaryParameters[3];
+                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O"));
+                int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).le("io_type",100));
+                if (locMasts.size()-crnCountO<=2){
+                    times++;
+                    continue;
+                }
                 break;
             } else {
                 times++;
@@ -172,37 +179,41 @@
         boolean signRule2 = false;
 
 
-        // 闈犺繎鎽嗘斁瑙勫垯 --- 鍚屽ぉ鍚岃鏍肩墿鏂� //鍒嗙鐗�
-//        if (!Cools.isEmpty(matnr) &&  (staDescId == 1)){
-//            signRule1 = true;
-//        }
-        // 闈犺繎鎽嗘斁瑙勫垯 --- 鍚屽ぉ鍚岃鏍肩墿鏂� //浜掗�氱増
-        if (!Cools.isEmpty(matnr) && staDescId == 1) {
-            signRule2 = true;
-        }
+        if (Utils.BooleanWhsTypeStaIoType(whsType)){
+            // 闈犺繎鎽嗘斁瑙勫垯 --- 鍚屽ぉ鍚岃鏍肩墿鏂� //鍒嗙鐗�
+            if (!Cools.isEmpty(matnr) &&  staDescId == 1){
+                signRule1 = true;
+            }
+            // 闈犺繎鎽嗘斁瑙勫垯 --- 鍚屽ぉ鍚岃鏍肩墿鏂� //浜掗�氱増
+            if (!Cools.isEmpty(matnr) && staDescId == 1) {
+                signRule2 = true;
+            }
 
-        if (!Cools.isEmpty(matnr) &&  (staDescId == 11 || staDescId == 111)) {
-            signRule1 = true;
+            if (!Cools.isEmpty(matnr) &&  (staDescId == 11 || staDescId == 111)) {
+                signRule1 = true;
+            }
         }
 
         if (signRule1){
-            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O"));
-            for (LocMast locMast1:locMasts){
-                if (VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
-                    continue;
-                }
-                String shallowLoc = Utils.getDeepLoc(slaveProperties,locMast1.getLocNo());
-                LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",shallowLoc));
-                if (!Cools.isEmpty(locMast2) && locMast2.getLocSts().equals("F")){
-                    LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast2.getLocNo()));
-                    if (!Cools.isEmpty(locDetl) && matnr.equals(locDetl.getMatnr())) {
-                        locMast = locMast1;
-                        break;
+            if (nearRow!=curRow){
+                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O"));
+                for (LocMast locMast1:locMasts){
+                    //鑾峰彇宸烽亾
+                    List<String> groupOutsideLocCrn = Utils.getGroupOutLocCrn(curRow,nearRow,locMast1.getLocNo(), curRow>nearRow);
+                    //鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娴呴潪绌哄簱浣�
+                    LocMast locMastF = locMastService.selectLocByLocStsPakInF(curRow,nearRow,groupOutsideLocCrn);
+                    if (!Cools.isEmpty(locMastF) && locMastF.getLocSts().equals("F")){
+                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMastF.getLocNo()));
+                        if (!Cools.isEmpty(locDetl) && matnr.equals(locDetl.getMatnr()) && batch.equals(Cools.isEmpty(locDetl.getBatch()) ? "" : locDetl.getBatch()) && grade.equals(Cools.isEmpty(locDetl.getBrand()) ? "" : locDetl.getBrand())) {
+                            //鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娴呴潪绌哄簱浣�
+                            locMast = locMastService.selectLocByLocStsPakInO(curRow,nearRow,groupOutsideLocCrn);
+                            break;
+                        }
                     }
                 }
             }
         }else if (signRule2){
-            List<String> locNos = locDetlService.getSameDetlToday(matnr,batch, sRow, eRow);
+            List<String> locNos = locDetlService.getSameDetlToday(matnr, sRow, eRow);
             for (String locNo : locNos) {
                 if (Utils.isShallowLoc(slaveProperties, locNo)) {
                     continue;
@@ -223,7 +234,7 @@
         }
 
 //        // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭  //鍒嗙鐗�
-//        if (staDescId == 10) {
+//        if (staDescId == 10 && Utils.BooleanWhsTypeStaIoType(whsType)) {
 //            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O"));
 //            for (LocMast locMast1:locMasts){
 //                if (VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
@@ -239,7 +250,7 @@
 //        }
 
         // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭 //浜掗�氱増
-        if (staDescId == 10) {
+        if (staDescId == 10  && Utils.BooleanWhsTypeStaIoType(whsType)) {
             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) {
@@ -277,17 +288,18 @@
                 log.error("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo);
 //                throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
                 crnNo = 0;
-            }
-            staNo = basDevpService.selectById(staDesc.getCrnStn());
-            if (!staNo.getAutoing().equals("Y")) {
+            }else {
+                staNo = basDevpService.selectById(staDesc.getCrnStn());
+                if (!staNo.getAutoing().equals("Y")) {
 //                throw new CoolException("鐩爣绔�"+staDesc.getCrnStn()+"涓嶅彲鐢�");
-                crnNo = 0;
+                    crnNo = 0;
+                }
+                startupDto.setStaNo(staNo.getDevNo());
             }
-            startupDto.setStaNo(staNo.getDevNo());
         }
 
         // 鏇存柊搴撲綅鎺掑彿
-        if (Utils.BooleanWhsTypeSta(whsType, staDescId)) {
+        if (Utils.BooleanWhsTypeSta(whsType, staDescId) && Cools.isEmpty(locMast)) {
             rowLastno.setCurrentRow(curRow);
             rowLastnoService.updateById(rowLastno);
         }
@@ -296,16 +308,23 @@
 
         // 1.鎸夎鍒欐煡鎵惧簱浣�
         if (Cools.isEmpty(locMast) && crnNo != 0) {
-            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O"));
+            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O").orderBy("lev1",true).orderBy("bay1",true));
             for (LocMast locMast1 : locMasts) {
-                if (VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
+                if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
                     continue;
                 }
-                String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast1.getLocNo());
-                LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", shallowLoc).eq("loc_sts", "O"));
-                if (!Cools.isEmpty(locMast2)) {
-                    locMast = locMast2;
-                    break;
+                if (Utils.BooleanWhsTypeStaIoType(whsType)){
+                    String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast1.getLocNo());
+                    LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", shallowLoc).eq("loc_sts", "O"));
+                    if (!Cools.isEmpty(locMast2)) {
+                        locMast = locMast2;
+                        break;
+                    }
+                }else {
+                    if (!Cools.isEmpty(locMast1)) {
+                        locMast = locMast1;
+                        break;
+                    }
                 }
             }
         }
@@ -317,9 +336,9 @@
         // 閫掑綊鏌ヨ
         if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("O")) {
             // 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
-            if (times < rowCount) {
+            if (times < rowCount*2) {
                 times = times + 1;
-                return getLocNoRun(1, staDescId, sourceStaNo, matnr, batch, grade,moveCrnNo, locTypeDto, times);
+                return getLocNoRun(whsType, staDescId, sourceStaNo, matnr, batch, grade,moveCrnNo, locTypeDto, times);
             }
 //            // 2.搴撲綅褰撳墠鎵�灞炲昂瀵告棤绌哄簱浣嶆椂锛岃皟鏁村昂瀵稿弬鏁帮紝鍚戜笂鍏煎妫�绱㈠簱浣�
 //            if (locTypeDto.getLocType1() < 2) {
diff --git a/src/main/resources/mapper/LocMastMapper.xml b/src/main/resources/mapper/LocMastMapper.xml
index 1a9ad24..a9c6062 100644
--- a/src/main/resources/mapper/LocMastMapper.xml
+++ b/src/main/resources/mapper/LocMastMapper.xml
@@ -84,4 +84,36 @@
         select * from [dbo].[asr_loc_mast] where row1>17 and row1 &lt; 31 and bay1 = #{bay} and lev1 = #{lev} and loc_sts='F' order by row1 desc
     </select>
 
+    <select id="selectLocByLocStsPakInF1" resultMap="BaseResultMap">
+        SELECT top 1 * FROM [dbo].[asr_loc_mast] WHERE loc_no in
+        <foreach collection="locNos" item="locNo" index="index" open="(" close=")" separator=",">
+            #{locNo}
+        </foreach>
+        AND loc_sts not in ('O') order by row1
+    </select>
+
+    <select id="selectLocByLocStsPakInF2" resultMap="BaseResultMap">
+        SELECT top 1 * FROM [dbo].[asr_loc_mast] WHERE loc_no in
+        <foreach collection="locNos" item="locNo" index="index" open="(" close=")" separator=",">
+            #{locNo}
+        </foreach>
+        AND loc_sts not in ('O') order by row1 desc
+    </select>
+
+    <select id="selectLocByLocStsPakInO1" resultMap="BaseResultMap">
+        SELECT top 1 * FROM [dbo].[asr_loc_mast] WHERE loc_no in
+        <foreach collection="locNos" item="locNo" index="index" open="(" close=")" separator=",">
+            #{locNo}
+        </foreach>
+        AND loc_sts in ('O') order by row1 desc
+    </select>
+
+    <select id="selectLocByLocStsPakInO2" resultMap="BaseResultMap">
+        SELECT top 1 * FROM [dbo].[asr_loc_mast] WHERE loc_no in
+        <foreach collection="locNos" item="locNo" index="index" open="(" close=")" separator=",">
+            #{locNo}
+        </foreach>
+        AND loc_sts in ('O') order by row1
+    </select>
+
 </mapper>

--
Gitblit v1.9.1