From 0ce7d62e80382c7fcd61cfbd3f5a0403800cb243 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期二, 12 十二月 2023 14:40:50 +0800
Subject: [PATCH] #找库位V2

---
 src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java |    5 +
 src/main/java/com/zy/asrs/mapper/LocDetlMapper.java            |    2 
 src/main/java/com/zy/asrs/service/LocDetlService.java          |    5 +
 src/main/resources/mapper/LocDetlMapper.xml                    |   21 +++++++
 src/main/resources/mapper/LocMastMapper.xml                    |   11 +++
 src/main/resources/mapper/WrkMastMapper.xml                    |    4 +
 src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java |    5 +
 src/main/java/com/zy/asrs/service/WrkMastService.java          |    4 +
 src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java |    4 +
 src/main/java/com/zy/asrs/mapper/LocMastMapper.java            |    5 +
 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java            |    1 
 src/main/java/com/zy/asrs/service/LocMastService.java          |    5 +
 src/main/java/com/zy/common/service/CommonService.java         |   83 +++++++++++++++++++++------
 13 files changed, 136 insertions(+), 19 deletions(-)

diff --git a/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java b/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
index 46f540d..c650abe 100644
--- a/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -32,6 +32,8 @@
 
     List<String> selectSameDetl(@Param("matnr") String matnr);
 
+    List<String> selectSameLevDetl(@Param("matnr") String matnr, @Param("lev") Integer lev);
+
     @Select("SELECT ld.loc_no FROM asr_loc_detl ld LEFT JOIN asr_loc_mast lm ON ld.loc_no = lm.loc_no WHERE (1 = 1 AND ld.matnr = #{matnr} AND (lm.row1 >= #{start} AND lm.row1 <= #{end})  AND lm.loc_sts = 'F' AND DateDiff(dd, lm.modi_time, getdate()) = 0) ORDER BY lm.modi_time ASC")
     List<String> selectSameDetlToday(@Param("matnr") String matnr, @Param("start") Integer start, @Param("end") Integer end);
 
diff --git a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
index 8fc3b9a..35e946b 100644
--- a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -26,6 +26,11 @@
      */
     List<LocMast> selectAreaEmpty(Short locType1, Integer locType3);
 
+    /**
+     * 鎼滅储鎸囧畾鍖哄煙鍙敤搴撲綅
+     */
+    List<LocMast> selectAreaEmptyByLev(Short locType1, Integer locType3, Integer lev);
+
     LocMast selectAvailableNearLocDesc(@Param("groupLoc") List<String> groupOuterLoc);
 
     LocMast selectAvailableNearLocAsc(@Param("groupOuterLoc") List<String> groupOuterLoc);
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index b175231..6e58ac5 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -29,4 +29,5 @@
 
     List<WrkMast> selectSameMatnrs(@Param("matnr") String matnr);
 
+    List<WrkMast> selectSameLevMatnrs(@Param("matnr") String matnr, @Param("lev") Integer lev);
 }
diff --git a/src/main/java/com/zy/asrs/service/LocDetlService.java b/src/main/java/com/zy/asrs/service/LocDetlService.java
index dece3cb..674438a 100644
--- a/src/main/java/com/zy/asrs/service/LocDetlService.java
+++ b/src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -32,6 +32,11 @@
     List<String> getSameDetl(String matnr);
 
     /**
+     * 鑾峰彇鐩稿悓瑙勬牸璐х墿
+     */
+    List<String> getSameLevDetl(String matnr, Integer lev);
+
+    /**
      * 鑾峰彇褰撳ぉ鐩稿悓瑙勬牸璐х墿鐨勬繁搴撲綅鍙�
      * @param matnr 鐗╂枡鍙�
      * @return locNo 搴撲綅鍙�
diff --git a/src/main/java/com/zy/asrs/service/LocMastService.java b/src/main/java/com/zy/asrs/service/LocMastService.java
index 4b8f371..38b0869 100644
--- a/src/main/java/com/zy/asrs/service/LocMastService.java
+++ b/src/main/java/com/zy/asrs/service/LocMastService.java
@@ -18,6 +18,11 @@
     List<LocMast> selectAreaEmpty(Short locType1, Integer locType3);
 
     /**
+     * 鎼滅储鎸囧畾鍖哄煙鍙敤搴撲綅
+     */
+    List<LocMast> selectAreaEmptyByLev(Short locType1, Integer locType3, Integer lev);
+
+    /**
      * 鑾峰彇鍚岀粍璐ф灦鐨勭┖搴撲綅
      * @param sourceLocNo 婧愬簱浣�
      * @return 鍚岀粍绌哄簱浣嶉泦鍚�
diff --git a/src/main/java/com/zy/asrs/service/WrkMastService.java b/src/main/java/com/zy/asrs/service/WrkMastService.java
index cfd3fed..c06469e 100644
--- a/src/main/java/com/zy/asrs/service/WrkMastService.java
+++ b/src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -28,5 +28,7 @@
 
     WrkMast selectOfPick(Integer wrkNo, Integer ioType);
 
-    List<WrkMast> selectSameMatnrs(String s);
+    List<WrkMast> selectSameMatnrs(String matnr);
+
+    List<WrkMast> selectSameLevMatnrs(String matnr, Integer lev);
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
index ffcc871..b17ee3e 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -58,6 +58,11 @@
     }
 
     @Override
+    public List<String> getSameLevDetl(String matnr, Integer lev) {
+        return this.baseMapper.selectSameLevDetl(matnr, lev);
+    }
+
+    @Override
     public List<String> getSameDetlToday(String matnr, Integer start, Integer end) {
         return this.baseMapper.selectSameDetlToday(matnr, start, end);
     }
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 c1fa598..a15ceb7 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -39,6 +39,11 @@
     }
 
     @Override
+    public List<LocMast> selectAreaEmptyByLev(Short locType1, Integer locType3, Integer lev) {
+        return this.baseMapper.selectAreaEmptyByLev(locType1, locType3, lev);
+    }
+
+    @Override
     public List<String> queryGroupEmptyStock(String sourceLocNo) {
         if (Cools.isEmpty(sourceLocNo)) {
             return null;
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
index 4633630..a7d7031 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -95,4 +95,8 @@
         return this.baseMapper.selectSameMatnrs(matnr);
     }
 
+    @Override
+    public List<WrkMast> selectSameLevMatnrs(String matnr, Integer lev) {
+        return this.baseMapper.selectSameLevMatnrs(matnr, lev);
+    }
 }
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index e18606e..47bd2ca 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -507,40 +507,56 @@
      * 鍥涘悜搴撹幏鍙栧簱浣�
      */
     public StartupDto getShuttleLocNo(Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto) {
+        RowLastno rowLastno = rowLastnoService.selectOne(new EntityWrapper<RowLastno>().eq("whs_type", 1));
+        //璧峰灞�
+        Integer startLev = rowLastno.getCurrentRow();
+        return getShuttleLocNo(staDescId, sourceStaNo, matNos, locTypeDto, startLev, 0);
+    }
+
+    public StartupDto getShuttleLocNo(Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto, int startLev, int times) {
+        RowLastno rowLastno = rowLastnoService.selectOne(new EntityWrapper<RowLastno>().eq("whs_type", 1));
+        //璧峰灞�
+        Integer currentLev = rowLastno.getCurrentRow();
+        if (times > 0 && startLev == currentLev) {
+            throw new CoolException("鏈壘鍒板彲鐢ㄥ簱浣�");
+        }
+        rowLastno.setCurrentRow(currentLev >= rowLastno.geteRow() ? rowLastno.getsRow() : currentLev + 1);//鏇存柊妤煎眰
+        rowLastnoService.updateById(rowLastno);
+
         // 鐩爣搴撲綅
         LocMast locMast = null;
 
         // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭
-        locMast = getShuttleEmptyLocNo(staDescId, locTypeDto);
+        locMast = getShuttleEmptyLocNo(staDescId, locTypeDto, currentLev);
         if (locMast != null) {
             //鎵惧埌搴撲綅锛岃繑鍥瀌to
-            return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
+            return getShuttleLocStartupDto(staDescId, sourceStaNo, locMast);//杩斿洖dto
         }
 
         //鍗曞搧鐗╂枡 闈犺繎鎽嗘斁瑙勫垯 --- 鐩稿悓璁㈠崟鍙�, 鍚屽ぉ鍚岃鏍肩墿鏂�
-        locMast = getShuttleSingleLocNo(matNos, locTypeDto);
+        locMast = getShuttleSingleLocNo(matNos, locTypeDto, currentLev);
         if (locMast != null) {
             //鎵惧埌搴撲綅锛岃繑鍥瀌to
-            return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
+            return getShuttleLocStartupDto(staDescId, sourceStaNo, locMast);//杩斿洖dto
         }
 
         // 闈犺繎鎽嗘斁瑙勫垯 --- 鐩稿悓璁㈠崟鍙�, 鍚屽ぉ鍚岃鏍肩墿鏂�
-        locMast = getShuttleMixedLocNo(matNos, locTypeDto);
+        locMast = getShuttleMixedLocNo(matNos, locTypeDto, currentLev);
         if (locMast != null) {
             //鎵惧埌搴撲綅锛岃繑鍥瀌to
-            return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
+            return getShuttleLocStartupDto(staDescId, sourceStaNo, locMast);//杩斿洖dto
         }
 
-        throw new CoolException("鏈壘鍒板彲鐢ㄥ簱浣�");
+        return getShuttleLocNo(staDescId, sourceStaNo, matNos, locTypeDto, startLev, times + 1);
     }
 
     //鎼滅储绌烘墭鐩樺簱浣�
-    private LocMast getShuttleEmptyLocNo(Integer staDescId, LocTypeDto locTypeDto) {
+    private LocMast getShuttleEmptyLocNo(Integer staDescId, LocTypeDto locTypeDto, int lev) {
         LocMast locMast = null;
         // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭
         if (staDescId == 10) {
             //鍏堝垽鏂伐浣滄。锛屾煡鎵句富妗OType=1锛� wrkSts < 10鐨勫伐浣滄槑缁嗭紝鏂欏彿鐩稿悓鐨勬槑缁嗗簱浣�
-            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("io_type",10));
+            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("io_type", 10));
             for (WrkMast wrkMast : wrkMasts) {
                 LocMast locMast0 = locMastService.findNearloc(wrkMast.getLocNo());
                 if (null != locMast0) {
@@ -551,9 +567,9 @@
                     }
                 }
             }
-            if (Cools.isEmpty(locMast)){
+            if (Cools.isEmpty(locMast)) {
                 List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
-                        .eq("loc_sts", "O").orderBy("row1,bay1,lev1"));
+                        .eq("loc_sts", "O").eq("lev1", lev).orderBy("row1,bay1,lev1"));
                 if (!locMasts.isEmpty()) {
                     for (LocMast loc : locMasts) {
                         LocMast locMast0 = locMastService.findNearloc(loc.getLocNo());
@@ -573,10 +589,10 @@
     }
 
     //娣锋斁鐗╂枡
-    private LocMast getShuttleMixedLocNo(List<String> matNos, LocTypeDto locTypeDto) {
+    private LocMast getShuttleMixedLocNo(List<String> matNos, LocTypeDto locTypeDto, Integer lev) {
         LocMast locMast = null;
         if (matNos.size() > 1) {
-            List<LocMast> locMasts = locMastService.selectAreaEmpty(locTypeDto.getLocType1(), 1);//鎼滅储娣锋斁搴撲綅
+            List<LocMast> locMasts = locMastService.selectAreaEmptyByLev(locTypeDto.getLocType1(), 1, lev);//鎼滅储娣锋斁搴撲綅
             //娣锋斁鍖哄煙鐩存帴鍙栫涓�涓嵆鍙�
             for (LocMast mast : locMasts) {
                 // 娴呭簱浣嶇鍚堝昂瀵告娴�
@@ -590,12 +606,12 @@
     }
 
     //鍗曞搧鐗╂枡 闈犺繎鎽嗘斁瑙勫垯 --- 鐩稿悓璁㈠崟鍙�, 鍚屽ぉ鍚岃鏍肩墿鏂�
-    private LocMast getShuttleSingleLocNo(List<String> matNos, LocTypeDto locTypeDto) {
+    private LocMast getShuttleSingleLocNo(List<String> matNos, LocTypeDto locTypeDto, int lev) {
         LocMast locMast = null;
         if (matNos.size() == 1) {
             String matNo = matNos.get(0);//鐗╂枡鍙�
             //鍏堝垽鏂伐浣滄。锛屾煡鎵句富妗OType=1锛� wrkSts < 10鐨勫伐浣滄槑缁嗭紝鏂欏彿鐩稿悓鐨勬槑缁嗗簱浣�
-            List<WrkMast> wrkMasts = wrkMastService.selectSameMatnrs(matNo);
+            List<WrkMast> wrkMasts = wrkMastService.selectSameLevMatnrs(matNo, lev);
             for (WrkMast wrkMast : wrkMasts) {
                 LocMast locMast0 = locMastService.findNearloc(wrkMast.getLocNo());
                 if (null != locMast0) {
@@ -607,7 +623,7 @@
             }
             if (Cools.isEmpty(locMast)) {
                 //鍐嶅垽鏂簱瀛樻槑缁嗘。锛屾枡鍙风浉鍚岀殑鏄庣粏搴撲綅
-                List<String> locNos = locDetlService.getSameDetl(matNo);
+                List<String> locNos = locDetlService.getSameLevDetl(matNo, lev);
                 for (String locNo : locNos) {
                     LocMast locMast0 = locMastService.findInnerLoc(locNo);
                     if (null != locMast0) {
@@ -621,7 +637,7 @@
             }
             if (Cools.isEmpty(locMast)) {
                 //鎵炬柊搴撲綅
-                List<LocMast> locMasts = locMastService.selectAreaEmpty(locTypeDto.getLocType1(), 2);//鎼滅储鍗曞搧搴撲綅
+                List<LocMast> locMasts = locMastService.selectAreaEmptyByLev(locTypeDto.getLocType1(), 2, lev);//鎼滅储鍗曞搧搴撲綅
                 for (LocMast mast : locMasts) {
                     List<String> groupLoc = Utils.getGroupLoc(mast.getLocNo());
                     if (!locMastService.checkAllLocEmpty(groupLoc)) {
@@ -653,7 +669,7 @@
             }
             if (Cools.isEmpty(locMast)) {
                 //鍗曞搧鎵句笉鍒板簱浣嶏紝鍏佽灏濊瘯浠庢贩鏀惧尯鍩熶腑杩涜鎼滅储
-                List<LocMast> locMasts2 = locMastService.selectAreaEmpty(locTypeDto.getLocType1(), 1);//鎼滅储娣锋斁搴撲綅
+                List<LocMast> locMasts2 = locMastService.selectAreaEmptyByLev(locTypeDto.getLocType1(), 1, lev);//鎼滅储娣锋斁搴撲綅
                 //娣锋斁鍖哄煙鐩存帴鍙栫涓�涓嵆鍙�
                 for (LocMast mast : locMasts2) {
                     // 娴呭簱浣嶇鍚堝昂瀵告娴�
@@ -667,4 +683,35 @@
         return locMast;
     }
 
+    //杩斿洖dto
+    private StartupDto getShuttleLocStartupDto(Integer staDescId, Integer sourceStaNo, LocMast locMast) {
+        StartupDto startupDto = new StartupDto();
+        String locNo = locMast.getLocNo();
+        // 鑾峰彇鐩爣绔�
+        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+                .eq("type_no", staDescId)
+                .eq("stn_no", sourceStaNo)
+                .eq("crn_no",Utils.stnNoToLiftNo(sourceStaNo));//鍊熺敤鍫嗗灈鏈哄彿瀛楁鍏呭綋鎻愬崌鏈哄彿
+        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());
+        return startupDto;
+    }
+
 }
diff --git a/src/main/resources/mapper/LocDetlMapper.xml b/src/main/resources/mapper/LocDetlMapper.xml
index b0dabf7..8e6b7de 100644
--- a/src/main/resources/mapper/LocDetlMapper.xml
+++ b/src/main/resources/mapper/LocDetlMapper.xml
@@ -343,6 +343,27 @@
         ORDER BY lm.modi_time ASC
     </select>
 
+    <select id="selectSameLevDetl" resultType="java.lang.String">
+        SELECT
+            ld.loc_no
+        FROM asr_loc_detl ld
+                 LEFT JOIN asr_loc_mast lm ON ld.loc_no = lm.loc_no
+                 LEFT JOIN (
+            select
+                loc_no,
+                count(1) as count
+            from asr_loc_detl
+            where 1=1
+            group by loc_no
+        ) dual on dual.loc_no = lm.loc_no
+        WHERE 1 = 1
+          AND ld.matnr = #{matnr}
+          AND (lm.loc_sts = 'F')
+          AND dual.count = 1
+          AND lm.lev1 = #{lev}
+        ORDER BY lm.modi_time ASC
+    </select>
+
     <select id="searchByLike" resultMap="BaseResultMap">
         select *
         from asr_loc_detl
diff --git a/src/main/resources/mapper/LocMastMapper.xml b/src/main/resources/mapper/LocMastMapper.xml
index 091887c..ee92255 100644
--- a/src/main/resources/mapper/LocMastMapper.xml
+++ b/src/main/resources/mapper/LocMastMapper.xml
@@ -122,6 +122,17 @@
         ORDER BY row1,bay1,lev1
     </select>
 
+    <select id="selectAreaEmptyByLev" resultMap="BaseResultMap">
+        select * from asr_loc_mast
+        where loc_sts in ('O')
+        and loc_type3 = #{locType3}
+        <if test="locType1 != null">
+            and loc_type1 = #{locType1}
+        </if>
+        and lev1 = #{lev}
+        ORDER BY row1,bay1,lev1
+    </select>
+
     <select id="selectEmptyByLocNos" resultMap="BaseResultMap">
         SELECT * FROM asr_loc_mast
         WHERE loc_sts IN ('O')
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index b23289f..406c6cc 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -106,4 +106,8 @@
         where m.wrk_no=d.wrk_no and io_type=1 and wrk_sts &lt; 11 and d.matnr = #{matnr} ORDER BY m.wrk_no desc
     </select>
 
+    <select id="selectSameLevMatnrs" resultMap="BaseResultMap">
+        select m.loc_no from asr_wrk_mast m,asr_wrk_detl d,asr_loc_mast lm
+        where m.wrk_no=d.wrk_no and m.loc_no = lm.loc_no and io_type=1 and wrk_sts &lt; 11 and d.matnr = #{matnr} and lm.lev1 = #{lev} ORDER BY m.wrk_no desc
+    </select>
 </mapper>

--
Gitblit v1.9.1