From f8bdc51fe4c57a250fb1240056d767883b7d6739 Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期二, 12 十二月 2023 16:49:17 +0800
Subject: [PATCH] Merge branch 'tzskasrs-1' of http://47.97.1.152:5880/r/zy-asrs into tzskasrs-1

---
 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                    |   13 +
 src/main/resources/mapper/WrkMastMapper.xml                    |    4 
 src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java |    5 
 src/main/java/com/zy/common/web/WcsController.java             |  137 ++++++++++++++--
 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         |  211 ++++++++++++++++++++++++++
 14 files changed, 401 insertions(+), 21 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 2718933..47bd2ca 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -503,4 +503,215 @@
         return startupDto;
     }
 
+    /**
+     * 鍥涘悜搴撹幏鍙栧簱浣�
+     */
+    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, currentLev);
+        if (locMast != null) {
+            //鎵惧埌搴撲綅锛岃繑鍥瀌to
+            return getShuttleLocStartupDto(staDescId, sourceStaNo, locMast);//杩斿洖dto
+        }
+
+        //鍗曞搧鐗╂枡 闈犺繎鎽嗘斁瑙勫垯 --- 鐩稿悓璁㈠崟鍙�, 鍚屽ぉ鍚岃鏍肩墿鏂�
+        locMast = getShuttleSingleLocNo(matNos, locTypeDto, currentLev);
+        if (locMast != null) {
+            //鎵惧埌搴撲綅锛岃繑鍥瀌to
+            return getShuttleLocStartupDto(staDescId, sourceStaNo, locMast);//杩斿洖dto
+        }
+
+        // 闈犺繎鎽嗘斁瑙勫垯 --- 鐩稿悓璁㈠崟鍙�, 鍚屽ぉ鍚岃鏍肩墿鏂�
+        locMast = getShuttleMixedLocNo(matNos, locTypeDto, currentLev);
+        if (locMast != null) {
+            //鎵惧埌搴撲綅锛岃繑鍥瀌to
+            return getShuttleLocStartupDto(staDescId, sourceStaNo, locMast);//杩斿洖dto
+        }
+
+        return getShuttleLocNo(staDescId, sourceStaNo, matNos, locTypeDto, startLev, times + 1);
+    }
+
+    //鎼滅储绌烘墭鐩樺簱浣�
+    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));
+            for (WrkMast wrkMast : wrkMasts) {
+                LocMast locMast0 = locMastService.findNearloc(wrkMast.getLocNo());
+                if (null != locMast0) {
+                    // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                    if (VersionUtils.checkLocType(locMast0, locTypeDto)) {
+                        locMast = locMast0;
+                        break;
+                    }
+                }
+            }
+            if (Cools.isEmpty(locMast)) {
+                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+                        .eq("loc_sts", "O").eq("lev1", lev).orderBy("row1,bay1,lev1"));
+                if (!locMasts.isEmpty()) {
+                    for (LocMast loc : locMasts) {
+                        LocMast locMast0 = locMastService.findNearloc(loc.getLocNo());
+                        if (null != locMast0) {
+                            // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                            if (VersionUtils.checkLocType(locMast0, locTypeDto)) {
+                                locMast = locMast0;
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        return locMast;
+    }
+
+    //娣锋斁鐗╂枡
+    private LocMast getShuttleMixedLocNo(List<String> matNos, LocTypeDto locTypeDto, Integer lev) {
+        LocMast locMast = null;
+        if (matNos.size() > 1) {
+            List<LocMast> locMasts = locMastService.selectAreaEmptyByLev(locTypeDto.getLocType1(), 1, lev);//鎼滅储娣锋斁搴撲綅
+            //娣锋斁鍖哄煙鐩存帴鍙栫涓�涓嵆鍙�
+            for (LocMast mast : locMasts) {
+                // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                if (VersionUtils.checkLocType(mast, locTypeDto)) {
+                    locMast = mast;
+                    break;
+                }
+            }
+        }
+        return locMast;
+    }
+
+    //鍗曞搧鐗╂枡 闈犺繎鎽嗘斁瑙勫垯 --- 鐩稿悓璁㈠崟鍙�, 鍚屽ぉ鍚岃鏍肩墿鏂�
+    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.selectSameLevMatnrs(matNo, lev);
+            for (WrkMast wrkMast : wrkMasts) {
+                LocMast locMast0 = locMastService.findNearloc(wrkMast.getLocNo());
+                if (null != locMast0) {
+                    // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                    if (VersionUtils.checkLocType(locMast0, locTypeDto)) {
+                        locMast = locMast0;
+                    }
+                }
+            }
+            if (Cools.isEmpty(locMast)) {
+                //鍐嶅垽鏂簱瀛樻槑缁嗘。锛屾枡鍙风浉鍚岀殑鏄庣粏搴撲綅
+                List<String> locNos = locDetlService.getSameLevDetl(matNo, lev);
+                for (String locNo : locNos) {
+                    LocMast locMast0 = locMastService.findInnerLoc(locNo);
+                    if (null != locMast0) {
+                        // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                        if (VersionUtils.checkLocType(locMast0, locTypeDto)) {
+                            locMast = locMast0;
+                            break;
+                        }
+                    }
+                }
+            }
+            if (Cools.isEmpty(locMast)) {
+                //鎵炬柊搴撲綅
+                List<LocMast> locMasts = locMastService.selectAreaEmptyByLev(locTypeDto.getLocType1(), 2, lev);//鎼滅储鍗曞搧搴撲綅
+                for (LocMast mast : locMasts) {
+                    List<String> groupLoc = Utils.getGroupLoc(mast.getLocNo());
+                    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;
+                        }
+
+                        // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                        if (VersionUtils.checkLocType(locMast1, locTypeDto)) {
+                            tmp = locMast1;
+                            break;
+                        }
+                    }
+                    if (!Cools.isEmpty(tmp)) {
+                        locMast = tmp;
+                        break;
+                    }
+                }
+            }
+            if (Cools.isEmpty(locMast)) {
+                //鍗曞搧鎵句笉鍒板簱浣嶏紝鍏佽灏濊瘯浠庢贩鏀惧尯鍩熶腑杩涜鎼滅储
+                List<LocMast> locMasts2 = locMastService.selectAreaEmptyByLev(locTypeDto.getLocType1(), 1, lev);//鎼滅储娣锋斁搴撲綅
+                //娣锋斁鍖哄煙鐩存帴鍙栫涓�涓嵆鍙�
+                for (LocMast mast : locMasts2) {
+                    // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                    if (VersionUtils.checkLocType(mast, locTypeDto)) {
+                        locMast = mast;
+                        break;
+                    }
+                }
+            }
+        }
+        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/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java
index b6d078f..10d690a 100644
--- a/src/main/java/com/zy/common/web/WcsController.java
+++ b/src/main/java/com/zy/common/web/WcsController.java
@@ -58,6 +58,72 @@
 //    @Autowired
 //    private ErpService erpService;
 
+    @PostMapping("/pakin/loc/v2")
+    @ResponseBody
+    public synchronized R getLocNoV2(@RequestBody SearchLocParam param) {
+        if (Cools.isEmpty(param.getIoType())) {
+            return R.error("鍏ュ嚭搴撶被鍨嬩笉鑳戒负绌�");
+        }
+        if (Cools.isEmpty(param.getSourceStaNo())) {
+            return R.error("婧愮珯缂栧彿涓嶈兘涓虹┖");
+        }
+        List<WaitPakin> waitPakins = null;
+        ArrayList<Mat> mats = new ArrayList<>();
+        if (param.getIoType() == 1) {
+            if (Cools.isEmpty(param.getBarcode())) {
+                return R.error("鏉$爜涓嶈兘涓虹┖");
+            }
+            waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()));
+
+            if (Cools.isEmpty(waitPakins)) {
+                WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode());
+                if (wrkMast != null && (wrkMast.getIoType() == 103 || wrkMast.getIoType() == 104 || wrkMast.getIoType() == 107)) {
+                    return R.parse(CodeRes.PICK_600);
+                }
+                return R.parse(CodeRes.NO_COMB_700);
+            }
+
+            for (WaitPakin waitPakin : waitPakins) {
+                Mat mat = matService.selectByMatnr(waitPakin.getMatnr());
+                mat.setWeight(waitPakin.getAnfme());
+                mats.add(mat);
+            }
+
+            int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode()));
+            int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode()));
+            if (countLoc > 0 || countWrk > 0) {
+                return R.error("宸ヤ綔妗�/搴撳瓨鏉$爜鏁版嵁宸插瓨鍦�");
+            }
+        }
+        if (Cools.isEmpty(param.getLocType1())){
+            return R.error("楂樹綆妫�娴嬩俊鍙蜂笉鑳戒负绌�");
+        }
+
+        // 婧愮珯鐐圭姸鎬佹娴�
+        BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getSourceStaNo(), true);
+        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
+        locTypeDto.setLocType1(param.getLocType1());
+
+        StartupDto dto = null;
+        switch (param.getIoType()) {
+            case 1://婊℃墭鐩樺叆搴�
+                dto = startupFullPutStore(param.getSourceStaNo(), param.getBarcode(), locTypeDto, mats, waitPakins, 2);
+                break;
+            case 10://绌烘墭鐩樺叆搴�
+                dto = emptyPlateIn(param.getSourceStaNo(), locTypeDto, param.getBarcode(), 2);
+                break;
+            case 103:// 鎷f枡鍏ュ簱
+            case 104:// 骞舵澘鍏ュ簱
+            case 107:// 鐩樼偣鍏ュ簱
+                dto = pickWrkPlateIn(param.getWrkNo(), param.getIoType(), param.getSourceStaNo(), locTypeDto, 2);
+                break;
+            default:
+                break;
+        }
+        log.info("/pakin/loc/v1:"+dto + "======鎵樼洏鐮�:"+param.getBarcode());
+        return R.ok().add(dto);
+    }
+
     @PostMapping("/pakin/loc/v1")
     @ResponseBody
     public synchronized R getLocNo(@RequestBody SearchLocParam param) {
@@ -134,17 +200,28 @@
         return R.ok().add(dto);
     }
 
+    /**
+     * 鍏ㄦ澘鍏ュ簱
+     */
+    public StartupDto startupFullPutStore(Integer devpNo, String barcode, LocTypeDto locTypeDto, List<Mat> mats, List<WaitPakin> waitPakins) {
+        return startupFullPutStore(devpNo, barcode, locTypeDto, mats, waitPakins, 1);
+    }
 
     /**
      * 鍏ㄦ澘鍏ュ簱
      */
     @Transactional
-    public StartupDto startupFullPutStore(Integer devpNo, String barcode, LocTypeDto locTypeDto, List<Mat> mats, List<WaitPakin> waitPakins) {
+    public StartupDto startupFullPutStore(Integer devpNo, String barcode, LocTypeDto locTypeDto, List<Mat> mats, List<WaitPakin> waitPakins, Integer version) {
         // 婧愮珯鐐圭姸鎬佹娴�
         BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
         // 妫�绱㈠簱浣�
         List<String> matnrList = mats.stream().map(Mat::getMatnr).distinct().collect(Collectors.toList());
-        StartupDto dto = commonService.getLocNo(1, 1, devpNo, matnrList, locTypeDto,0);
+        StartupDto dto = null;
+        if (version == 2) {
+            dto = commonService.getShuttleLocNo( 1, devpNo, matnrList, locTypeDto);
+        }else {
+            dto = commonService.getLocNo(1, 1, devpNo, matnrList, locTypeDto, 0);
+        }
         int workNo = dto.getWorkNo();
         Date now = new Date();
         // 鐢熸垚宸ヤ綔妗�
@@ -156,7 +233,8 @@
         Double ioPri = wrkMastService.getIoPri(1, dto.getLocNo());
         wrkMast.setIoPri(ioPri); // 浼樺厛绾�
         wrkMast.setCrnNo(dto.getCrnNo());
-        wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), true)?1:0);;
+        wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), true) ? 1 : 0);
+        ;
         wrkMast.setSourceStaNo(dto.getSourceStaNo());
         wrkMast.setStaNo(dto.getStaNo());
         wrkMast.setLocNo(dto.getLocNo());
@@ -176,11 +254,11 @@
         }
         waitPakins.forEach(waitPakin -> {
             Mat mat = matService.selectByMatnr(waitPakin.getMatnr());
-            if(Cools.isEmpty(mat)){
+            if (Cools.isEmpty(mat)) {
                 throw new CoolException(waitPakin.getMatnr() + "璇ョ墿鏂欏彿鏃犳硶鏌ヨ锛岃鏌ョ湅鐗╂枡淇℃伅鏄惁瀛樺湪");
             }
             WrkDetl wrkDetl = new WrkDetl();
-            BeanUtils.copyProperties(waitPakin,wrkDetl);
+            BeanUtils.copyProperties(waitPakin, wrkDetl);
             wrkDetl.setZpallet(barcode);
             wrkDetl.setWrkNo(wrkMast.getWrkNo());
             wrkDetl.setIoTime(wrkMast.getIoTime());
@@ -217,29 +295,39 @@
         // 鏇存柊婧愮珯鐐逛俊鎭�
         sourceStaNo.setWrkNo(workNo);
         sourceStaNo.setModiTime(now);
-        if (!basDevpService.updateById(sourceStaNo)){
+        if (!basDevpService.updateById(sourceStaNo)) {
             throw new CoolException("鏇存柊婧愮珯澶辫触");
         }
         // 鏇存柊鐩爣搴撲綅鐘舵��
         LocMast locMast = locMastService.selectById(dto.getLocNo());
-        if (locMast.getLocSts().equals("O")){
+        if (locMast.getLocSts().equals("O")) {
             locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
             locMast.setModiTime(now);
-            if (!locMastService.updateById(locMast)){
+            if (!locMastService.updateById(locMast)) {
                 throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
             }
         } else {
-            throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤");
+            throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅宸茶鍗犵敤");
         }
         return dto;
     }
 
     @Transactional
     public StartupDto emptyPlateIn(Integer devpNo, LocTypeDto locTypeDto, String barcode) {
+        return emptyPlateIn(devpNo, locTypeDto, barcode, 1);
+    }
+
+    @Transactional
+    public StartupDto emptyPlateIn(Integer devpNo, LocTypeDto locTypeDto, String barcode, Integer version) {
         // 婧愮珯鐐圭姸鎬佹娴�
         BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
         // 妫�绱㈠簱浣�
-        StartupDto dto = commonService.getLocNo(1, 10, devpNo, null, locTypeDto,0);
+        StartupDto dto = null;
+        if (version == 2) {
+            dto = commonService.getShuttleLocNo(10, devpNo, null, locTypeDto);
+        }else {
+            dto = commonService.getLocNo(1, 10, devpNo, null, locTypeDto, 0);
+        }
         int workNo = dto.getWorkNo();
         // 鐢熸垚宸ヤ綔妗�
         WrkMast wrkMast = new WrkMast();
@@ -249,7 +337,8 @@
         wrkMast.setIoType(10); // 鍏ュ嚭搴撶姸鎬侊細10.绌烘澘鍏ュ簱
         Double ioPri = wrkMastService.getIoPri(10, dto.getLocNo());
         wrkMast.setIoPri(ioPri); // 浼樺厛绾�
-        wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), true)?1:0);;
+        wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), true) ? 1 : 0);
+        ;
         wrkMast.setCrnNo(dto.getCrnNo());
         wrkMast.setSourceStaNo(dto.getSourceStaNo());
         wrkMast.setStaNo(dto.getStaNo());
@@ -272,25 +361,30 @@
         // 鏇存柊婧愮珯鐐逛俊鎭�
         sourceStaNo.setWrkNo(workNo);
         sourceStaNo.setModiTime(new Date());
-        if (!basDevpService.updateById(sourceStaNo)){
+        if (!basDevpService.updateById(sourceStaNo)) {
             throw new CoolException("鏇存柊婧愮珯澶辫触");
         }
         // 鏇存柊鐩爣搴撲綅鐘舵��
         LocMast locMast = locMastService.selectById(dto.getLocNo());
-        if (locMast.getLocSts().equals("O")){
+        if (locMast.getLocSts().equals("O")) {
             locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
             locMast.setModiTime(new Date());
-            if (!locMastService.updateById(locMast)){
+            if (!locMastService.updateById(locMast)) {
                 throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
             }
         } else {
-            throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤");
+            throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅宸茶鍗犵敤");
         }
         return dto;
     }
 
     @Transactional
     public StartupDto pickWrkPlateIn(Integer wrkNo, Integer ioType, Integer devpNo, LocTypeDto locTypeDto) {
+        return pickWrkPlateIn(wrkNo, ioType, devpNo, locTypeDto, 1);
+    }
+
+    @Transactional
+    public StartupDto pickWrkPlateIn(Integer wrkNo, Integer ioType, Integer devpNo, LocTypeDto locTypeDto, Integer version) {
         WrkMast wrkMast = wrkMastService.selectOfPick(wrkNo, ioType);
         if (Cools.isEmpty(wrkMast)) {
             log.error("{}浠诲姟銆恑oType = {}銆戝凡杩囨湡!!!", wrkNo, ioType);
@@ -307,17 +401,22 @@
                 devpNo = 341;
             }
         }
-        StartupDto dto = commonService.getLocNo(1, ioType - 50, devpNo, matnrList, locTypeDto,0); // 搴撲綅鍙凤紝 鍫嗗灈鏈猴紝鐩爣绔�
+        StartupDto dto = null;
+        if (version == 2) {
+            dto = commonService.getShuttleLocNo( ioType - 50, devpNo, matnrList, locTypeDto); // 搴撲綅鍙凤紝 鍫嗗灈鏈猴紝鐩爣绔�
+        }else {
+            dto = commonService.getLocNo(1, ioType - 50, devpNo, matnrList, locTypeDto, 0); // 搴撲綅鍙凤紝 鍫嗗灈鏈猴紝鐩爣绔�
+        }
         // 鏇存柊鐩爣搴撲綅鐘舵��
         LocMast locMast = locMastService.selectById(dto.getLocNo());
-        if (locMast.getLocSts().equals("O")){
+        if (locMast.getLocSts().equals("O")) {
             locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
             locMast.setModiTime(new Date());
-            if (!locMastService.updateById(locMast)){
+            if (!locMastService.updateById(locMast)) {
                 throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
             }
         } else {
-            throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤");
+            throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅宸茶鍗犵敤");
         }
         return dto;
     }
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 5d6b2cc..ee92255 100644
--- a/src/main/resources/mapper/LocMastMapper.xml
+++ b/src/main/resources/mapper/LocMastMapper.xml
@@ -119,7 +119,18 @@
         <if test="locType1 != null">
             and loc_type1 = #{locType1}
         </if>
-        ORDER BY lev1,bay1,row1
+        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">
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