From 193c3204f7f998df4d603df202dbea88a3074585 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期四, 04 九月 2025 09:03:39 +0800
Subject: [PATCH] #入库逻辑变更

---
 src/main/resources/mapper/asrs/MatMapper.xml                   |    1 
 src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java |    6 
 src/main/java/com/zy/asrs/mapper/LocDetlMapper.java            |    2 
 src/main/java/com/zy/asrs/service/LocDetlService.java          |    5 
 src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java |   10 
 src/main/java/com/zy/common/web/WcsController.java             |    7 
 src/main/resources/mapper/asrs/LocDetlMapper.xml               |   13 +
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java    |    4 
 src/main/java/com/zy/asrs/mapper/LocMastMapper.java            |    2 
 src/main/java/com/zy/asrs/entity/Mat.java                      |    7 
 src/main/resources/mapper/asrs/LocMastMapper.xml               |    6 
 src/main/java/com/zy/asrs/service/LocMastService.java          |    2 
 src/main/java/com/zy/common/service/CommonService.java         |  519 +++++++++++++++++++++++++++++++++++++++++++++------
 13 files changed, 514 insertions(+), 70 deletions(-)

diff --git a/src/main/java/com/zy/asrs/entity/Mat.java b/src/main/java/com/zy/asrs/entity/Mat.java
index f666131..ddfd8b6 100644
--- a/src/main/java/com/zy/asrs/entity/Mat.java
+++ b/src/main/java/com/zy/asrs/entity/Mat.java
@@ -325,6 +325,13 @@
     @TableField("store_max_date")
     private Integer storeMaxDate;
 
+    /**
+     * 鐗规畩浜у搧(鍛嗘粸鏂欐爣璁�)
+     * 0:鏅�� 1:鍛嗘粸
+     */
+    @TableField("tscp")
+    private Integer tscp;
+
     public Mat() {}
 
     public Mat(String uuid,Long tagId,String matnr,String maktx,String name,String specs,String model,String color,String brand,String unit,Double price,String sku,Double units,String barcode,String origin,String manu,String manuDate,String itemNum,Double safeQty,Double weight,Double manLength,Double volume,String threeCode,String supp,String suppCode,Integer beBatch,String deadTime,Integer deadWarn,Integer source,Integer inspect,Integer danger,Integer status,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
diff --git a/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java b/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
index 8dbd409..1622d68 100644
--- a/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -56,6 +56,8 @@
     @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, ld.appe_time, getdate()) = 0) ORDER BY ld.appe_time ASC")
     List<String> selectSameDetlToday(@Param("matnr") String matnr, @Param("start") Integer start, @Param("end") Integer end);
 
+    List<String> getSameDetlList(@Param("matnr") String matnr,@Param("rows") List<Integer> rows);
+
     List<String> selectSameDetlTodayBatch(@Param("matnr") String matnr,@Param("batch") String batch, @Param("start") Integer start, @Param("end") Integer end);
 
     List<LocDetl> getStockStatis(Map<String, Object> map);
diff --git a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
index f179d73..33dc114 100644
--- a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -62,4 +62,6 @@
      * @return 搴撲綅鍙�
      */
     String findFirstFrozenLocNo(@Param("locNoList") List<String> locNoList);
+
+    List<Integer> selectRowByCrnNo(Integer crnNo);
 }
diff --git a/src/main/java/com/zy/asrs/service/LocDetlService.java b/src/main/java/com/zy/asrs/service/LocDetlService.java
index 6d94975..b36fa4c 100644
--- a/src/main/java/com/zy/asrs/service/LocDetlService.java
+++ b/src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -49,6 +49,11 @@
 
     /**
      * 鑾峰彇褰撳ぉ鐩稿悓瑙勬牸璐х墿鐨勬繁搴撲綅鍙�
+     */
+    List<String> getSameDetlList(String matnr, List<Integer> rows);
+
+    /**
+     * 鑾峰彇褰撳ぉ鐩稿悓瑙勬牸璐х墿鐨勬繁搴撲綅鍙�
      * @param matnr 鍟嗗搧缂栧彿
      * @param batch 鎵规鍙�
      * @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 a0677de..e65ef0d 100644
--- a/src/main/java/com/zy/asrs/service/LocMastService.java
+++ b/src/main/java/com/zy/asrs/service/LocMastService.java
@@ -62,4 +62,6 @@
 
     //鏌ヨ鎸囧畾妤煎眰鐨勫簱浣嶆暟鎹�
     List<LocMast> selectLocByLev(Integer lev);
+
+    List<Integer> selectRowByCrnNo(Integer crnNo);
 }
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 eaba688..c0966c3 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -17,10 +17,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
 @Service("locDetlService")
 public class LocDetlServiceImpl extends ServiceImpl<LocDetlMapper, LocDetl> implements LocDetlService {
@@ -93,6 +90,11 @@
     }
 
     @Override
+    public List<String> getSameDetlList(String matnr, List<Integer> rows) {
+        return this.baseMapper.getSameDetlList(matnr, rows);
+    }
+
+    @Override
     public List<String> getSameDetlToday(String matnr,String batch, Integer start, Integer end) {
         return this.baseMapper.selectSameDetlTodayBatch(matnr,batch, 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 ace2531..bc4efa2 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -10,6 +10,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Collections;
 import java.util.List;
 
 @Service("locMastService")
@@ -153,4 +154,9 @@
         }
         return this.baseMapper.selectLocShuttleMoveUnilateralN(bay,lev,type);
     }
+
+    @Override
+    public List<Integer> selectRowByCrnNo(Integer crnNo) {
+        return this.baseMapper.selectRowByCrnNo(crnNo);
+    }
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index 46e6205..039e8be 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -119,7 +119,7 @@
 //        List<String> matnrs = param.getList().stream().map(FullStoreParam.MatCodeStore::getMatnr).distinct().collect(Collectors.toList());
 //        List<String> batchs = param.getList().stream().map(FullStoreParam.MatCodeStore::getBatch).distinct().collect(Collectors.toList());
         FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(param.getList().get(0));
-        StartupDto dto = commonService.getLocNo(1, param.getDevpNo(), findLocNoAttributeVo, locTypeDto);
+        StartupDto dto = commonService.getLocNo(1, param.getDevpNo(), findLocNoAttributeVo, locTypeDto, param.getBarcode());
         if (Cools.isEmpty(dto)) {
             throw new CoolException("鏌ヨ搴撲綅澶辫触锛侊紒==銆媠tartupFullPutStore ==銆� commonService.getLocNo");
         }
@@ -589,7 +589,7 @@
         LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
         FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo();
 
-        StartupDto dto = commonService.getLocNo(10, devpNo, findLocNoAttributeVo, locTypeDto);
+        StartupDto dto = commonService.getLocNo(10, devpNo, findLocNoAttributeVo, locTypeDto, null);
         int workNo = dto.getWorkNo();
         Date now = new Date();
         // 鐢熸垚宸ヤ綔妗�
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 5debc83..6b29b4d 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -55,6 +55,8 @@
     private WrkDetlService wrkDetlService;
     @Autowired
     private ConfigService configService;
+    @Autowired
+    private MatService matService;
 
     /**
      * 鐢熸垚宸ヤ綔鍙�
@@ -122,78 +124,473 @@
      * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿
      */
     @Transactional
-    public StartupDto getLocNo(Integer staDescId, Integer sourceStaNo, FindLocNoAttributeVo findLocNoAttributeVo, LocTypeDto locTypeDto) {
-        // try {
-        Integer whsType = Utils.GetWhsType(sourceStaNo);
-        RowLastno rowLastno = rowLastnoService.selectById(whsType);
-        RowLastnoType rowLastnoType = rowLastnoTypeService.selectById(rowLastno.getTypeId());
-        /**
-         * 搴撳瀷 1: 鏍囧噯鍫嗗灈鏈哄簱  2: 骞冲簱  3: 绌挎鏉�  4: 鍥涘悜杞�  5: AGV  0: 鏈煡
-         */
-        switch (rowLastnoType.getType()) {
-            case 1:
-                Config crnSearchDetectTaskCountConfig = configService.selectConfigByCode("crnSearchDetectTaskCount");
-                int crnSearchDetectTaskCount = Integer.parseInt(crnSearchDetectTaskCountConfig.getValue());
+    public StartupDto getLocNo(Integer staDescId, Integer sourceStaNo, FindLocNoAttributeVo findLocNoAttributeVo, LocTypeDto locTypeDto, String barcode) {
+        List<Integer> crnList = new ArrayList<>();
+        if (barcode.startsWith("11")) {
+            crnList.add(4);
+            crnList.add(5);
 
-                Config applyInTaskTotalCountConfig = configService.selectConfigByCode("applyInTaskTotalCount");
-                int applyInTaskTotalCount = Integer.parseInt(applyInTaskTotalCountConfig.getValue());
-                int crnNo = 7;
-                boolean flag = true;
-                List<String> data = new ArrayList<>();
-                while (crnNo > 1) {
-                    crnNo--;
-                    List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("crn_no", crnNo).eq("whs_type", rowLastnoType.getType().longValue()).eq("loc_type1", locTypeDto.getLocType1()).eq("loc_type2", locTypeDto.getLocType2()));
-                    if (locMasts.size() <= 15) {
-                        log.error(crnNo + "鍙峰爢鍨涙満娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}", JSON.toJSONString(locTypeDto));
-                        data.add(crnNo + "鍙锋病鏈夌┖搴撲綅;");
-                    } else {
-                        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).in("io_type", 1, 10, 53, 57));
-                        if (wrkMasts.size() > crnSearchDetectTaskCount) {
-                            log.error(crnNo + "鍙峰爢鍨涙満宸茶揪鍒板叆搴撴帶鍒朵笂闄愶紒锛侊紒 浠诲姟鏁伴噺锛� {}锛� 鎺у埗鏁伴噺锛歿}", wrkMasts.size(), crnSearchDetectTaskCount);
-                            data.add(crnNo + "鍙峰叆搴撴帶鍒朵笂闄�;");
-                            continue;
-                        }
-                        List<WrkMast> wrkMastsList = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).in("io_type", 1, 10, 53, 57, 101, 103, 107, 110));
-                        if (wrkMastsList.size() > applyInTaskTotalCount) {
-                            log.error(crnNo + "鍙峰爢鍨涙満宸茶揪鍒扮敵璇峰叆搴撴椂鎬讳换鍔℃暟閲忎笂闄�(鍏ュ簱銆佸嚭搴�)锛侊紒锛� 浠诲姟鏁伴噺锛� {}锛� 鎺у埗鏁伴噺锛歿}", wrkMastsList.size(), applyInTaskTotalCount);
-                            data.add(crnNo + "鍙风敵璇峰叆搴撴椂鎬讳换鍔℃暟閲忎笂闄�;");
-                            continue;
-                        }
-                        flag = false;
-                        break;
-                    }
+            Config config = configService.selectConfigByCode("11CrnConfig");
+            List<Integer> list = JSON.parseArray(config.getValue(), Integer.class);
+            for (Integer crn : list) {
+                crnList.remove(crn);
+            }
 
+            if (crnList.isEmpty()) {
+                crnList.add(4);
+                crnList.add(5);
+
+                configService.updateValue("11CrnConfig", "[]");
+            }else {
+                if (!list.isEmpty()) {
+                    crnList.addAll(list);
                 }
-                if (!flag) {
-                    return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
-                } else {
-                    log.info("鏁版嵁锛歿}", data);
-                    throw new CoolException(data.toString());
+            }
+        }else if (barcode.startsWith("13")) {
+            crnList.add(1);
+            crnList.add(2);
+            crnList.add(3);
+
+            Config config = configService.selectConfigByCode("13CrnConfig");
+            List<Integer> list = JSON.parseArray(config.getValue(), Integer.class);
+            for (Integer crn : list) {
+                crnList.remove(crn);
+            }
+
+            if (crnList.isEmpty()) {
+                crnList.add(1);
+                crnList.add(2);
+                crnList.add(3);
+
+                configService.updateValue("13CrnConfig", "[]");
+            }else {
+                if (!list.isEmpty()) {
+                    crnList.addAll(list);
                 }
-            case 2:
-                log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo);
-                break;
-            case 3:
-                log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo);
-                break;
-            case 4:
-                return getLocNoRun4(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 4, locTypeDto, 0);
-            case 5:
-                return getLocNoRun5(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
-            default:
-                log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo);
-                break;
+            }
+
+            //妫�娴嬫槸鍚︿负鍛嗘粸鏂�
+            String matnr = findLocNoAttributeVo.getMatnr();
+            Mat mat = matService.selectByMatnr(matnr);
+            if (mat == null) {
+                throw new CoolException(matnr + "鐗╂枡淇℃伅涓嶅瓨鍦�");
+            }
+
+            if (mat.getTscp() != null && mat.getTscp() == 1) {
+                crnList.add(0, 1);
+            }
+        }else if (barcode.startsWith("16")) {
+            crnList.add(6);
+        }else {
+            throw new CoolException("鎵樼洏鐮�:{}" + barcode + "瑙勫垯閿欒锛屾棤娉曟壘鍒板尮閰嶅爢鍨涙満");
         }
 
-//        } catch (Exception e) {
-//            log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒欙紝{}", sourceStaNo, e.getMessage());
-//        }
-        return null;
+        StartupDto startupDto = null;
+        StringBuilder builder = new StringBuilder();
+        for (Integer crnNo : crnList) {
+            try {
+                startupDto = searchLocNoByCrnNo(staDescId, sourceStaNo, findLocNoAttributeVo, locTypeDto, crnNo);
+                if(startupDto != null) {
+                    break;
+                }
+            } catch (Exception e) {
+                builder.append(e.getMessage()).append(",");
+            }
+        }
+
+        if(startupDto == null) {
+            builder.append("鎵句笉鍒扮┖搴撲綅");
+            throw new CoolException(builder.toString());
+        }
+
+        Integer crnNo = startupDto.getCrnNo();
+        if (barcode.startsWith("11")) {
+            Config config = configService.selectConfigByCode("11CrnConfig");
+            List<Integer> list = JSON.parseArray(config.getValue(), Integer.class);
+            List<Integer> newList = new ArrayList<>();
+            for (Integer crn : list) {
+                if(crn == crnNo) {
+                    continue;
+                }
+                newList.add(crn);
+            }
+            newList.add(crnNo);
+            configService.updateValue("11CrnConfig", JSON.toJSONString(newList));
+        }else if (barcode.startsWith("13")) {
+            Config config = configService.selectConfigByCode("13CrnConfig");
+            List<Integer> list = JSON.parseArray(config.getValue(), Integer.class);
+            List<Integer> newList = new ArrayList<>();
+            for (Integer crn : list) {
+                if(crn == crnNo) {
+                    continue;
+                }
+                newList.add(crn);
+            }
+            newList.add(crnNo);
+            configService.updateValue("13CrnConfig", JSON.toJSONString(newList));
+        }
+
+        return startupDto;
     }
 
     /**
      * 妫�绱㈠簱浣嶅彿
      *
+     * @param staDescId            璺緞ID
+     * @param sourceStaNo          婧愮珯
+     * @param findLocNoAttributeVo 灞炴��
+     * @param locTypeDto           绫诲瀷
+     * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿
+     */
+    @Transactional
+    public StartupDto searchLocNoByCrnNo(Integer staDescId, Integer sourceStaNo, FindLocNoAttributeVo findLocNoAttributeVo, LocTypeDto locTypeDto, Integer crnNo) {
+        Config devpTaskStackOverConfig = configService.selectConfigByCode("devpTaskStackOver");
+        int devpTaskStackOver = Integer.parseInt(devpTaskStackOverConfig.getValue());
+        Integer devpWorkingCount = queryDevpWorkingCount();
+        if (devpWorkingCount > devpTaskStackOver) {
+            throw new CoolException("杈撻�佺嚎浠诲姟杩囪浇锛屽綋鍓嶈緭閫佺嚎鎵胯浇鏁伴噺:{}" + devpWorkingCount);
+        }
+
+        if (!basCrnpService.checkSiteError(crnNo, true)) {
+            throw new CoolException(crnNo + "鍙峰爢鍨涙満寮傚父");
+        }
+
+        Config crnSearchDetectTaskCountConfig = configService.selectConfigByCode("crnSearchDetectTaskCount");
+        int crnSearchDetectTaskCount = Integer.parseInt(crnSearchDetectTaskCountConfig.getValue());
+
+        Config applyInTaskTotalCountConfig = configService.selectConfigByCode("applyInTaskTotalCount");
+        int applyInTaskTotalCount = Integer.parseInt(applyInTaskTotalCountConfig.getValue());
+
+        Config emptyInKeepLimitConfig = configService.selectConfigByCode("emptyInKeepLimit");
+        int emptyInKeepLimit = Integer.parseInt(emptyInKeepLimitConfig.getValue());
+
+        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).in("io_type", 1, 10, 53, 57));
+        if (wrkMasts.size() > crnSearchDetectTaskCount) {
+            log.error(crnNo + "鍙峰爢鍨涙満宸茶揪鍒板叆搴撴帶鍒朵笂闄愶紒锛侊紒 浠诲姟鏁伴噺锛� {}锛� 鎺у埗鏁伴噺锛歿}", wrkMasts.size(), crnSearchDetectTaskCount);
+            throw new CoolException(crnNo + "鍙峰爢鍨涙満宸茶揪鍒板叆搴撴帶鍒朵笂闄愶紒");
+        }
+
+        List<WrkMast> wrkMastsList = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).in("io_type", 1, 10, 53, 57, 101, 103, 107, 110));
+        if (wrkMastsList.size() > applyInTaskTotalCount) {
+            log.error(crnNo + "鍙峰爢鍨涙満宸茶揪鍒扮敵璇峰叆搴撴椂鎬讳换鍔℃暟閲忎笂闄�(鍏ュ簱銆佸嚭搴�)锛侊紒锛� 浠诲姟鏁伴噺锛� {}锛� 鎺у埗鏁伴噺锛歿}", wrkMastsList.size(), applyInTaskTotalCount);
+            throw new CoolException(crnNo + "鍙峰爢鍨涙満宸茶揪鍒扮敵璇峰叆搴撴椂鎬讳换鍔℃暟閲忎笂闄�(鍏ュ簱銆佸嚭搴�)锛�");
+        }
+
+        List<LocMast> searchLocMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_type1", locTypeDto.getLocType1()).eq("loc_sts", "O").eq("crn_no", crnNo));
+        if (searchLocMasts.size() <= emptyInKeepLimit) {
+            log.error(crnNo + "鍙峰爢鍨涙満鍒拌揪绌哄簱浣嶉鐣欎笂闄愶紒锛侊紒 灏哄瑙勬牸锛� {}", JSON.toJSONString(locTypeDto));
+            throw new CoolException(crnNo + "鍙峰爢鍨涙満鍒拌揪绌哄簱浣嶉鐣欎笂闄愶紒灏哄瑙勬牸锛�" + (locTypeDto.getLocType1() == 1 ? "楂�" : "浣�"));
+        }
+
+        if (crnNo == 1) {
+            if (wrkMasts.size() >= 1) {
+                log.error(crnNo + "鍙峰爢鍨涙満宸茶揪鍒板叆搴撴帶鍒朵笂闄愶紒锛侊紒 浠诲姟鏁伴噺锛� {}锛� 鎺у埗鏁伴噺锛歿}", wrkMasts.size(), 1);
+                throw new CoolException(crnNo + "鍙峰爢鍨涙満宸茶揪鍒板叆搴撴帶鍒朵笂闄愶紒");
+            }
+        }
+
+        LocMast locMast = null;
+        if (staDescId == 10) {
+            //鎼滅储绌烘墭鐩�
+            locMast = searchEmptyPallet(crnNo, locTypeDto);
+        }else {
+            //婊℃墭鐩�
+            locMast = searchMaxPallet(crnNo, findLocNoAttributeVo, locTypeDto);
+        }
+
+        if(locMast == null) {
+            throw new CoolException(crnNo + "鍙峰爢鍨涙満鎵句笉鍒扮鍚堝昂瀵哥殑绌哄簱浣�");
+        }
+
+        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("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo);
+            throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+        } else {
+            BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn());
+            if (!staNo.getAutoing().equals("Y")) {
+                log.error("鐩爣绔�" + staDesc.getCrnStn() + "涓嶅彲鐢�");
+                throw new CoolException("鐩爣绔�"+staDesc.getCrnStn()+"涓嶅彲鐢�");
+            }
+            startupDto.setStaNo(staNo.getDevNo());
+        }
+        String locNo = locMast.getLocNo();
+        // 鐢熸垚宸ヤ綔鍙�
+        int workNo = getWorkNo(0);
+        // 杩斿洖dto
+        startupDto.setWorkNo(workNo);
+        startupDto.setCrnNo(locMast.getCrnNo());
+        startupDto.setSourceStaNo(sourceStaNo);
+        startupDto.setLocNo(locNo);
+        return startupDto;
+    }
+
+    public Integer queryDevpWorkingCount() {
+        List<WrkMast> wrkMastsIn = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+                .in("wrk_sts", 2, 3, 4, 5));
+
+        List<WrkMast> wrkMastsOut = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+                .in("wrk_sts", 12, 14, 15));
+
+        int count = 0;
+        count += wrkMastsIn.size();
+        count += wrkMastsOut.size();
+        return count;
+    }
+
+    //鎼滅储婊℃墭鐩樺簱浣�
+    public LocMast searchMaxPallet(Integer crnNo, FindLocNoAttributeVo findLocNoAttributeVo, LocTypeDto locTypeDto) {
+        //鑾峰彇鍫嗗灈鏈烘帓
+        List<Integer> rowList = locMastService.selectRowByCrnNo(crnNo);
+        //鑾峰彇娣卞簱浣嶆帓
+        List<Integer> deepRowList = new ArrayList<>();
+        for (Integer row : rowList) {
+            if (Utils.isDeepLoc(slaveProperties, row)) {
+                deepRowList.add(row);
+            }
+        }
+
+        LocMast targetLocMast = null;
+        List<String> locNos = locDetlService.getSameDetlList(findLocNoAttributeVo.getMatnr(), deepRowList);
+        for (String locNo : locNos) {
+            //妫�娴嬪搴旀祬搴撲綅鏄惁鍙敤
+            String shallowLocNo = Utils.getShallowLoc(slaveProperties, locNo);
+            LocMast shallowLoc = locMastService.selectById(shallowLocNo);
+            if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
+                if (VersionUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
+                    targetLocMast = shallowLoc;
+                    break;
+                }
+            }
+        }
+
+        if(targetLocMast == null) {
+            if (crnNo == 1) {
+                return searchMaxPalletByOne(crnNo, findLocNoAttributeVo, locTypeDto);
+            }
+
+            //鐩歌繎鐗╂枡鍖归厤澶辫触锛屾悳绱㈡繁搴撲綅鍙敤绌哄簱浣�
+            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+                    .eq("crn_no", crnNo)
+                    .eq("loc_sts", "O")
+                    .in("row1", deepRowList)
+                    .orderBy("lev1", true)
+                    .orderBy("bay1", true));
+            for (LocMast locMast : locMasts) {
+                if (!VersionUtils.locMoveCheckLocTypeComplete(locMast, locTypeDto)) {
+                    continue;
+                }
+
+                //娣卞簱浣嶇洿鎺ラ�夋嫨
+                targetLocMast = locMast;
+                break;
+            }
+
+            if(targetLocMast == null) {
+                //娣卞簱浣嶆悳绱㈠け璐ワ紝鎼滅储鍙敤绌哄簱浣�
+                List<LocMast> shallowLocMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+                        .eq("crn_no", crnNo)
+                        .eq("loc_sts", "O")
+                        .orderBy("lev1", true)
+                        .orderBy("bay1", true));
+                for (LocMast locMast : shallowLocMasts) {
+                    if (!VersionUtils.locMoveCheckLocTypeComplete(locMast, locTypeDto)) {
+                        continue;
+                    }
+
+                    targetLocMast = locMast;
+                    break;
+                }
+            }
+
+        }
+
+        return targetLocMast;
+    }
+
+    //1鍙峰爢鍨涙満鎼滅储閫昏緫
+    public LocMast searchMaxPalletByOne(Integer crnNo, FindLocNoAttributeVo findLocNoAttributeVo, LocTypeDto locTypeDto) {
+        List<Integer> nearRowList = new ArrayList<Integer>() {{
+            add(4);
+            add(6);
+            add(3);
+            add(1);
+        }};
+
+        LocMast targetLocMast = null;
+        for (Integer row : nearRowList) {
+            //鐩歌繎鐗╂枡鍖归厤澶辫触锛屾悳绱㈡繁搴撲綅鍙敤绌哄簱浣�
+            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+                    .eq("crn_no", crnNo)
+                    .eq("loc_sts", "O")
+                    .eq("row1", row)
+                    .orderBy("lev1", true)
+                    .orderBy("bay1", true));
+            for (LocMast locMast : locMasts) {
+                if (!VersionUtils.locMoveCheckLocTypeComplete(locMast, locTypeDto)) {
+                    continue;
+                }
+
+                //娣卞簱浣嶇洿鎺ラ�夋嫨
+                targetLocMast = locMast;
+                break;
+            }
+
+            if (targetLocMast != null) {
+                break;
+            }
+        }
+
+        return targetLocMast;
+    }
+
+    //鎼滅储绌烘墭鐩�
+    public LocMast searchEmptyPallet(Integer crnNo, LocTypeDto locTypeDto) {
+        // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭
+        LocMast targetLocMast = null;
+
+        List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+                .eq("loc_sts", "D")
+                .eq("crn_no", crnNo)
+        );
+        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)) {
+                    targetLocMast = shallowLoc;
+                    break;
+                }
+            }
+        }
+
+        if (targetLocMast == null) {
+            List<LocMast> locMastsList = locMastService.selectList(new EntityWrapper<LocMast>()
+                    .eq("loc_sts", "O")
+                    .eq("crn_no", crnNo)
+                    .orderBy("lev1", false)
+                    .orderBy("bay1", true));
+            for (LocMast locMast : locMastsList) {
+                if (!VersionUtils.locMoveCheckLocTypeComplete(locMast, locTypeDto)) {
+                    continue;
+                }
+
+                boolean shallowLoc = Utils.isShallowLoc(slaveProperties, locMast.getLocNo());
+                if (shallowLoc) {
+                    //娴呭簱浣嶏紝鍏堝垽鏂繁搴撲綅
+                    String deepLoc2 = Utils.getDeepLoc2(slaveProperties, locMast.getLocNo());
+                    if (!Cools.isEmpty(deepLoc2)) {
+                        LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
+                                .eq("loc_no", deepLoc2)
+                                .eq("loc_sts", "O")
+                                .eq("crn_no", crnNo)
+                        );
+                        if (!Cools.isEmpty(locMast2)) {
+                            targetLocMast = locMast2;
+                            break;
+                        }
+                    }
+                }else {
+                    //绌虹殑娣卞簱浣嶇洿鎺ラ�夋嫨
+                    targetLocMast = locMast;
+                    break;
+                }
+            }
+        }
+
+        return targetLocMast;
+    }
+
+//    /**
+//     * 妫�绱㈠簱浣嶅彿
+//     *
+//     * @param staDescId            璺緞ID
+//     * @param sourceStaNo          婧愮珯
+//     * @param findLocNoAttributeVo 灞炴��
+//     * @param locTypeDto           绫诲瀷
+//     * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿
+//     */
+//    @Transactional
+//    public StartupDto getLocNo(Integer staDescId, Integer sourceStaNo, FindLocNoAttributeVo findLocNoAttributeVo, LocTypeDto locTypeDto) {
+//        // try {
+//        Integer whsType = Utils.GetWhsType(sourceStaNo);
+//        RowLastno rowLastno = rowLastnoService.selectById(whsType);
+//        RowLastnoType rowLastnoType = rowLastnoTypeService.selectById(rowLastno.getTypeId());
+//        /**
+//         * 搴撳瀷 1: 鏍囧噯鍫嗗灈鏈哄簱  2: 骞冲簱  3: 绌挎鏉�  4: 鍥涘悜杞�  5: AGV  0: 鏈煡
+//         */
+//        switch (rowLastnoType.getType()) {
+//            case 1:
+//                Config crnSearchDetectTaskCountConfig = configService.selectConfigByCode("crnSearchDetectTaskCount");
+//                int crnSearchDetectTaskCount = Integer.parseInt(crnSearchDetectTaskCountConfig.getValue());
+//
+//                Config applyInTaskTotalCountConfig = configService.selectConfigByCode("applyInTaskTotalCount");
+//                int applyInTaskTotalCount = Integer.parseInt(applyInTaskTotalCountConfig.getValue());
+//                int crnNo = 7;
+//                boolean flag = true;
+//                List<String> data = new ArrayList<>();
+//                while (crnNo > 1) {
+//                    crnNo--;
+//                    List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("crn_no", crnNo).eq("whs_type", rowLastnoType.getType().longValue()).eq("loc_type1", locTypeDto.getLocType1()).eq("loc_type2", locTypeDto.getLocType2()));
+//                    if (locMasts.size() <= 15) {
+//                        log.error(crnNo + "鍙峰爢鍨涙満娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}", JSON.toJSONString(locTypeDto));
+//                        data.add(crnNo + "鍙锋病鏈夌┖搴撲綅;");
+//                    } else {
+//                        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).in("io_type", 1, 10, 53, 57));
+//                        if (wrkMasts.size() > crnSearchDetectTaskCount) {
+//                            log.error(crnNo + "鍙峰爢鍨涙満宸茶揪鍒板叆搴撴帶鍒朵笂闄愶紒锛侊紒 浠诲姟鏁伴噺锛� {}锛� 鎺у埗鏁伴噺锛歿}", wrkMasts.size(), crnSearchDetectTaskCount);
+//                            data.add(crnNo + "鍙峰叆搴撴帶鍒朵笂闄�;");
+//                            continue;
+//                        }
+//                        List<WrkMast> wrkMastsList = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).in("io_type", 1, 10, 53, 57, 101, 103, 107, 110));
+//                        if (wrkMastsList.size() > applyInTaskTotalCount) {
+//                            log.error(crnNo + "鍙峰爢鍨涙満宸茶揪鍒扮敵璇峰叆搴撴椂鎬讳换鍔℃暟閲忎笂闄�(鍏ュ簱銆佸嚭搴�)锛侊紒锛� 浠诲姟鏁伴噺锛� {}锛� 鎺у埗鏁伴噺锛歿}", wrkMastsList.size(), applyInTaskTotalCount);
+//                            data.add(crnNo + "鍙风敵璇峰叆搴撴椂鎬讳换鍔℃暟閲忎笂闄�;");
+//                            continue;
+//                        }
+//                        flag = false;
+//                        break;
+//                    }
+//
+//                }
+//                if (!flag) {
+//                    return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
+//                } else {
+//                    log.info("鏁版嵁锛歿}", data);
+//                    throw new CoolException(data.toString());
+//                }
+//            case 2:
+//                log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo);
+//                break;
+//            case 3:
+//                log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo);
+//                break;
+//            case 4:
+//                return getLocNoRun4(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 4, locTypeDto, 0);
+//            case 5:
+//                return getLocNoRun5(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
+//            default:
+//                log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo);
+//                break;
+//        }
+//
+////        } catch (Exception e) {
+////            log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒欙紝{}", sourceStaNo, e.getMessage());
+////        }
+//        return null;
+//    }
+
+    /**
+     * 妫�绱㈠簱浣嶅彿
+     *
      * @param whsType              绫诲瀷 1:鍙屾繁寮忚揣鏋�
      * @param staDescId            璺緞ID
      * @param sourceStaNo          婧愮珯
diff --git a/src/main/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java
index 23e99f4..ac04da3 100644
--- a/src/main/java/com/zy/common/web/WcsController.java
+++ b/src/main/java/com/zy/common/web/WcsController.java
@@ -122,7 +122,7 @@
         // 妫�绱㈠簱浣�
         FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo();
 
-        StartupDto dto = commonService.getLocNo(10, 12, findLocNoAttributeVo, locTypeDto);
+        StartupDto dto = commonService.getLocNo(10, 12, findLocNoAttributeVo, locTypeDto, null);
         Date now = new Date();
         // 鐢熸垚宸ヤ綔妗�
         WrkMast wrkMast = new WrkMast();
@@ -178,6 +178,7 @@
 //        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(matnrs.get(0), batchs.get(0));
         WaitPakin waitPakin1 = waitPakins.get(0);
         FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo();
+        findLocNoAttributeVo.setMatnr(waitPakin1.getMatnr());
 
         //TODO 娴嬭瘯
 //        StartupDto dto = new StartupDto();
@@ -188,7 +189,7 @@
 //        dto.setLocNo(locMastxx.getLocNo());
 //        dto.setWorkNo(Integer.parseInt((System.currentTimeMillis() + "").substring(10)));
 
-        StartupDto dto = commonService.getLocNo( 1, devpNo,findLocNoAttributeVo, locTypeDto);
+        StartupDto dto = commonService.getLocNo(1, devpNo, findLocNoAttributeVo, locTypeDto, barcode);
         if (dto == null) {
             throw new CoolException("鎵句笉鍒扮┖搴撲綅");
         }
@@ -264,7 +265,7 @@
         // 妫�绱㈠簱浣�
         FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo();
 
-        StartupDto dto = commonService.getLocNo(10, devpNo, findLocNoAttributeVo, locTypeDto);
+        StartupDto dto = commonService.getLocNo(10, devpNo, findLocNoAttributeVo, locTypeDto, barcode);
         int workNo = dto.getWorkNo();
         // 鐢熸垚宸ヤ綔妗�
         WrkMast wrkMast = new WrkMast();
diff --git a/src/main/resources/mapper/asrs/LocDetlMapper.xml b/src/main/resources/mapper/asrs/LocDetlMapper.xml
index b32ff7e..e9c59a6 100644
--- a/src/main/resources/mapper/asrs/LocDetlMapper.xml
+++ b/src/main/resources/mapper/asrs/LocDetlMapper.xml
@@ -742,4 +742,17 @@
         ) t where t.row between ((#{pageNumber}-1)*#{pageSize}+1) and (#{pageNumber}*#{pageSize})
     </select>
 
+    <select id="getSameDetlList" 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
+        WHERE 1 = 1
+        AND ld.matnr = #{matnr}
+        AND lm.loc_sts = 'F'
+        AND lm.row1 in
+        <foreach collection="rows" item="item" index="index" separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        ORDER BY ld.appe_time ASC
+    </select>
+
 </mapper>
diff --git a/src/main/resources/mapper/asrs/LocMastMapper.xml b/src/main/resources/mapper/asrs/LocMastMapper.xml
index 4edecc1..da74878 100644
--- a/src/main/resources/mapper/asrs/LocMastMapper.xml
+++ b/src/main/resources/mapper/asrs/LocMastMapper.xml
@@ -200,4 +200,10 @@
         </foreach>
     </select>
 
+    <select id="selectRowByCrnNo" resultType="java.lang.Integer">
+        select DISTINCT row1 from asr_loc_mast
+        where crn_no = #{crnNo}
+        order by row1
+    </select>
+
 </mapper>
diff --git a/src/main/resources/mapper/asrs/MatMapper.xml b/src/main/resources/mapper/asrs/MatMapper.xml
index de36573..f362988 100644
--- a/src/main/resources/mapper/asrs/MatMapper.xml
+++ b/src/main/resources/mapper/asrs/MatMapper.xml
@@ -44,6 +44,7 @@
         <result column="memo" property="memo" />
 
         <result column="stock" property="stock" />
+        <result column="tscp" property="tscp" />
     </resultMap>
 
     <select id="listByPage" resultMap="BaseResultMap">

--
Gitblit v1.9.1