From 22fc6125f32ecb4d05c7a2e9397a4eabd6a5d7ad Mon Sep 17 00:00:00 2001
From: LSH
Date: 星期三, 20 九月 2023 14:41:33 +0800
Subject: [PATCH] #入库逻辑2.0  简单方便易理解

---
 src/main/java/com/zy/asrs/utils/Utils.java                  |  140 ++++++++++++++++-
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java |    4 
 src/main/java/com/zy/common/web/WcsController.java          |    6 
 src/main/java/com/zy/common/service/CommonService.java      |  279 ++++++++++++++--------------------
 4 files changed, 248 insertions(+), 181 deletions(-)

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 af8a1a9..cc39e1c 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -94,7 +94,7 @@
         // 妫�绱㈠簱浣�
         LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
 //        List<String> matnrs = param.getList().stream().map(FullStoreParam.MatCodeStore::getMatnr).distinct().collect(Collectors.toList());
-        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), null, locTypeDto, 0);
+        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), param.getList().get(0).getMatnr(),null,null, locTypeDto, 1);
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = dto.getWorkNo();
         // 鐢熸垚宸ヤ綔妗�
@@ -467,7 +467,7 @@
         BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
         // 妫�绱㈠簱浣�
         LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
-        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null, locTypeDto, 0);
+        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null,null,null, locTypeDto, 1);
         int workNo = dto.getWorkNo();
         Date now = new Date();
         // 鐢熸垚宸ヤ綔妗�
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index 99e4a80..90c58c9 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -2,10 +2,14 @@
 
 import com.core.common.Arith;
 import com.core.common.Cools;
+import com.core.exception.CoolException;
 import com.zy.common.properties.SlaveProperties;
+import com.zy.common.service.CommonService;
 
 import java.text.DecimalFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -167,6 +171,26 @@
     }
 
     /**
+     * 閫氳繃搴撲綅鍙疯幏鍙� 鍒�
+     */
+    public static int getBay(String locNo) {
+        if (!Cools.isEmpty(locNo)) {
+            return Integer.parseInt(locNo.substring(2, 5));
+        }
+        throw new RuntimeException("搴撲綅瑙f瀽寮傚父");
+    }
+
+    /**
+     * 閫氳繃搴撲綅鍙疯幏鍙� 灞�
+     */
+    public static int getLev(String locNo) {
+        if (!Cools.isEmpty(locNo)) {
+            return Integer.parseInt(locNo.substring(5, 7));
+        }
+        throw new RuntimeException("搴撲綅瑙f瀽寮傚父");
+    }
+
+    /**
      * 褰撴绱㈠埌鍙屾繁搴撲綅鐨勬祬搴撲綅鏃讹紝濡傛灉娣卞簱浣嶆棤璐э紝鍒欐斁鍏ュ搴旂殑娣卞簱浣�
      */
     public static void toDeepIfEmptyByShallow(String shallowLoc) {
@@ -184,15 +208,113 @@
 
     }
 
-    public static void main(String[] args) {
-        SlaveProperties slaveProperties = new SlaveProperties();
-        slaveProperties.setDoubleDeep(true);
-        List<Integer> list = new ArrayList<>();
-        list.add(1);list.add(4);list.add(5);list.add(8);list.add(9);list.add(12);
-        slaveProperties.setDoubleLocs(list);
-        slaveProperties.setGroupCount(4);
-        Integer deepRow = getDeepRow(slaveProperties, 6);
-        System.out.println(deepRow);
+//    public static void main(String[] args) {
+//        SlaveProperties slaveProperties = new SlaveProperties();
+//        slaveProperties.setDoubleDeep(true);
+//        List<Integer> list = new ArrayList<>();
+//        list.add(1);list.add(4);list.add(5);list.add(8);list.add(9);list.add(12);
+//        slaveProperties.setDoubleLocs(list);
+//        slaveProperties.setGroupCount(4);
+//        Integer deepRow = getDeepRow(slaveProperties, 6);
+//        System.out.println(deepRow);
+//
+//    }
 
+    // 澶栦晶鏂瑰悜鐨勮揣浣�  浼樺厛鍏ュ簱鏂瑰悜/浼樺厛鍑哄簱鏂瑰悜 ===>> 鍙嶄箣
+    public static List<String> getGroupOutsideLocCrn(String locNo,boolean pakin){
+        int row = getRow(locNo);
+        List<String> result = new ArrayList<>();
+        result.add(locNo);
+
+//      result.add(zerofill(String.valueOf(32), 2) + locNo.substring(2));
+
+        return result;
+    }
+
+    public static boolean BooleanWhsTypeSta(Integer whsType){
+        if (whsType==1){
+            return true;
+        }
+        return false;
+    }
+
+    public static int RowCount(Integer whsType,Integer curRow){
+        return LocNecessaryParameters(whsType, curRow)[0];
+    }
+    public static int getCurRow(Integer whsType,Integer curRow){
+        return LocNecessaryParameters(whsType, curRow)[1];
+    }
+    public static int getCrnNo(Integer whsType,Integer curRow){
+        return LocNecessaryParameters(whsType, curRow)[2];
+    }
+    public static int getNearRow(Integer whsType,Integer curRow){
+        return LocNecessaryParameters(whsType, curRow)[3];
+    }
+
+    //搴撲綅鎺掑彿鍒嗛厤
+    public static int[] LocNecessaryParameters(Integer whsType,Integer curRow){
+        int[] necessaryParameters=new int[]{0,0,0,0};
+        if (BooleanWhsTypeSta(whsType)){
+            necessaryParameters[0] = 6;
+            switch (curRow){ //婊℃澘姝e父鍏ュ簱
+                case 24:
+                    necessaryParameters[1] = 1;    //curRow   鏈�娣卞簱浣嶆帓
+                    necessaryParameters[2] = 1;     //crnNo     鍫嗗灈鏈哄彿
+                    necessaryParameters[3] = 2;    //nearRow  鏈�娴呭簱浣嶆帓
+                    break;
+                case 21:
+                    necessaryParameters[1] = 4;    //curRow   鏈�娣卞簱浣嶆帓
+                    necessaryParameters[2] = 1;     //crnNo     鍫嗗灈鏈哄彿
+                    necessaryParameters[3] = 3;    //nearRow  鏈�娴呭簱浣嶆帓
+                    break;
+                default:
+                    curRow=curRow+4;
+                    if (curRow<1 || curRow>24){
+                        throw new CoolException("搴撲綅鎺掑彿寮傚父锛氭帓鍙凤細"+curRow);
+                    }
+                    if ((curRow-1)%4==0){
+                        necessaryParameters[1] = curRow;    //curRow   鏈�娣卞簱浣嶆帓
+                        necessaryParameters[2] = (curRow+3)/4;     //crnNo     鍫嗗灈鏈哄彿
+                        necessaryParameters[3] = curRow+1;    //nearRow  鏈�娴呭簱浣嶆帓
+                    }else if (curRow%4==0){
+                        necessaryParameters[1] = curRow;    //curRow   鏈�娣卞簱浣嶆帓
+                        necessaryParameters[2] = curRow/4;     //crnNo     鍫嗗灈鏈哄彿
+                        necessaryParameters[3] = curRow-1;    //nearRow  鏈�娴呭簱浣嶆帓
+                    }else {
+                        throw new CoolException("搴撲綅鎺掑彿寮傚父锛氭帓鍙凤細"+curRow);
+                    }
+            }
+        }else {//绌烘澘涓嶅叆1鍙�
+            necessaryParameters[0] = 5;
+            switch (curRow){
+                case 24:
+                    necessaryParameters[1] = 5;    //curRow   鏈�娣卞簱浣嶆帓
+                    necessaryParameters[2] = 2;     //crnNo     鍫嗗灈鏈哄彿
+                    necessaryParameters[3] = 6;    //nearRow  鏈�娴呭簱浣嶆帓
+                    break;
+                case 21:
+                    necessaryParameters[1] = 8;    //curRow   鏈�娣卞簱浣嶆帓
+                    necessaryParameters[2] = 2;     //crnNo     鍫嗗灈鏈哄彿
+                    necessaryParameters[3] = 7;    //nearRow  鏈�娴呭簱浣嶆帓
+                    break;
+                default:
+                    curRow=curRow+4;
+                    if (curRow<5 || curRow>24){
+                        throw new CoolException("搴撲綅鎺掑彿寮傚父锛氭帓鍙凤細"+curRow);
+                    }
+                    if ((curRow-1)%4==0){
+                        necessaryParameters[1] = curRow;    //curRow   鏈�娣卞簱浣嶆帓
+                        necessaryParameters[2] = (curRow+3)/4;     //crnNo     鍫嗗灈鏈哄彿
+                        necessaryParameters[3] = curRow+1;    //nearRow  鏈�娴呭簱浣嶆帓
+                    }else if (curRow%4==0){
+                        necessaryParameters[1] = curRow;    //curRow   鏈�娣卞簱浣嶆帓
+                        necessaryParameters[2] = curRow/4;     //crnNo     鍫嗗灈鏈哄彿
+                        necessaryParameters[3] = curRow-1;    //nearRow  鏈�娴呭簱浣嶆帓
+                    }else {
+                        throw new CoolException("搴撲綅鎺掑彿寮傚父锛氭帓鍙凤細"+curRow);
+                    }
+            }
+        }
+        return necessaryParameters;
     }
 }
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 6b10fe2..29719cf 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -20,6 +20,10 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -107,212 +111,166 @@
     /**
      * 妫�绱㈠簱浣嶅彿
      * @param whsType 绫诲瀷 1:鍙屾繁寮忚揣鏋�
-     * @param staDescId 璺緞宸ヤ綔绫诲瀷
+     * @param staDescId 璺緞ID
      * @param sourceStaNo 婧愮珯
-     * @param list 鍟嗗搧缂栧彿闆嗗悎
+     * @param matnr 鐗╂枡鍙烽泦鍚�
      * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿
      */
     @Transactional
-    public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<KeyValueVo> list, LocTypeDto locTypeDto, int times) {
-        whsType = 1;
+    public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, String matnr, String batch,String grade,LocTypeDto locTypeDto, int times) {
+        if (Cools.isEmpty(matnr)){  //鐗╂枡鍙�
+            matnr="";
+        }
+        if (Cools.isEmpty(batch)){  //绠卞彿
+            batch="";
+        }
+        if (Cools.isEmpty(grade)){  //澶囩敤
+            grade="";
+        }
+
+        // 鍒濆鍖栧弬鏁�
+        int crnNo = 0;      //鍫嗗灈鏈哄彿
+        int nearRow = 0;    //鏈�娴呭簱浣嶆帓
+        int curRow = 0;     //鏈�娣卞簱浣嶆帓
+        int rowCount = 0;   //杞杞
+        LocMast locMast = null;     // 鐩爣搴撲綅
+
         StartupDto startupDto = new StartupDto();
-        // 鐢熸垚宸ヤ綔鍙�
-        int workNo = getWorkNo(0);
         RowLastno rowLastno = rowLastnoService.selectById(whsType);
         if (Cools.isEmpty(rowLastno)) {
             throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
         }
-
         // ===============>>>> 寮�濮嬫墽琛�
-        int curRow = rowLastno.getCurrentRow();
-        int sRow = rowLastno.getsRow();
-        int eRow = rowLastno.geteRow();
-        int crn_qty = rowLastno.getCrnQty();
-        int rowCount = eRow - sRow + 1;
-        // 鐩爣鍫嗗灈鏈哄彿
-        int crnNo = 0;
-        // 鐩爣搴撲綅
-        LocMast locMast = null;
+        curRow = rowLastno.getCurrentRow();
+
+        int[] locNecessaryParameters  = Utils.LocNecessaryParameters(whsType, curRow);
+        rowCount=locNecessaryParameters[0];
+        curRow=locNecessaryParameters[1];
+        crnNo=locNecessaryParameters[2];
+        nearRow=locNecessaryParameters[3];
+        if (!basCrnpService.checkSiteError(crnNo,true)){  //姝ょ▼搴忕敤浜庝紭鍖栧爢鍨涙満寮傚父鏃剁殑杩愯鏃堕棿
+            times++;
+            for (int i=times;i<Utils.RowCount(whsType,curRow);i++){
+                locNecessaryParameters  = Utils.LocNecessaryParameters(whsType, curRow);
+                rowCount=locNecessaryParameters[0];
+                curRow=locNecessaryParameters[1];
+                crnNo=locNecessaryParameters[2];
+                nearRow=locNecessaryParameters[3];
+                if (basCrnpService.checkSiteError(crnNo,true)){
+                    break;
+                }else {
+                    times++;
+                }
+            }
+            if (times==Utils.RowCount(whsType,curRow)){
+                throw new CoolException("鏃犲彲鐢ㄥ爢鍨涙満");
+            }
+        }
 
         // 闈犺繎鎽嗘斁瑙勫垯 --- 鍚屽ぉ鍚岃鏍肩墿鏂�
-        if (!Cools.isEmpty(list)) {
-            boolean sameMatnr = true;
-            String matnr = "";
-            String batch = "";
-            for (KeyValueVo vo : list) {
-                if (Cools.isEmpty(matnr)) {
-                    matnr = vo.getName();
-                } else {
-                    if (!matnr.equals(vo.getName())) {
-                        sameMatnr = false;
+        if (Cools.isEmpty(locMast) && !Cools.isEmpty(matnr) &&  (staDescId == 1 || staDescId == 11 || staDescId == 111)) {
+            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O"));
+            for (LocMast locMast1:locMasts){
+                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 (sameMatnr) {
-                List<String> locNos = locDetlService.getSameDetlToday(matnr, sRow, eRow);
-                for (String locNo : locNos) {
-                    if (Utils.isShallowLoc(slaveProperties, locNo)) {
-                        continue;
-                    }
-                    String shallowLocNo = Utils.getShallowLoc(slaveProperties, locNo);
-                    // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
-                    LocMast shallowLoc = locMastService.selectById(shallowLocNo);
-                    if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
-                        if (VersionUtils.locMoveCheckLocType(shallowLoc, locTypeDto)) {
-                            // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣�
-                            if (locMastService.checkEmptyCount(shallowLoc)) {
-                                if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
-                                    locMast = shallowLoc;
-                                    crnNo = locMast.getCrnNo();
-                                    break;
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-
         }
 
         // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭
-        if (staDescId == 10) {
-            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "D").ge("row1", sRow).le("row1", eRow));
-            if (locMasts.size() > 0) {
-                for (LocMast loc : locMasts) {
-                    if (Utils.isShallowLoc(slaveProperties, loc.getLocNo())) {
-                        continue;
-                    }
-                    String shallowLocNo = Utils.getShallowLoc(slaveProperties,  loc.getLocNo());
-                    // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
-                    LocMast shallowLoc = locMastService.selectById(shallowLocNo);
-                    if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
-                        // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣�
-                        if (locMastService.checkEmptyCount(shallowLoc)) {
-                            if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
-                                locMast = shallowLoc;
-                                crnNo = locMast.getCrnNo();
-                                break;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        // 濡傛灉娌℃湁鐩歌繎鐗╂枡锛屽垯鎸夎鍒欒疆璇㈣揣鏋�
-        if (null == locMast) {
-            Shelves shelves = new Shelves(rowCount, crn_qty);
-            for (int i = 0; i < shelves.group; i ++) {
-                curRow = shelves.start(curRow);
-                if (curRow < 0) {
-                    throw new CoolException("妫�绱㈠簱浣嶅け璐ワ紝璇疯仈绯荤鐞嗗憳");
-                }
-                Integer crnNo1 = shelves.get(curRow);
-                if (basCrnpService.checkSiteError(crnNo1, true)) {
-                    crnNo = crnNo1;
+        if (Cools.isEmpty(locMast) && staDescId == 10) {
+            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O"));
+            for (LocMast locMast1:locMasts){
+                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("D")){
+                    locMast = locMast1;
                     break;
                 }
             }
         }
 
-        if (crnNo == 0) {
-            throw new CoolException("娌℃湁鍙敤鐨勫爢鍨涙満");
+        Wrapper<StaDesc> wrapper = null;
+        StaDesc staDesc = null;
+        BasDevp staNo = null;
+
+        if (Utils.BooleanWhsTypeSta(whsType)){
+            // 鑾峰彇鐩爣绔�
+            wrapper = new EntityWrapper<StaDesc>()
+                    .eq("type_no", staDescId)
+                    .eq("stn_no", sourceStaNo)
+                    .eq("crn_no", crnNo);
+            staDesc = staDescService.selectOne(wrapper);
+            if (Cools.isEmpty(staDesc)) {
+                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")) {
+//                throw new CoolException("鐩爣绔�"+staDesc.getCrnStn()+"涓嶅彲鐢�");
+                crnNo=0;
+            }
         }
-        // 鑾峰彇鐩爣绔�
-        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
-                .eq("type_no", staDescId)
-                .eq("stn_no", sourceStaNo)
-                .eq("crn_no", crnNo);
-        StaDesc staDesc = staDescService.selectOne(wrapper);
-        if (Cools.isEmpty(staDesc)) {
-            log.error("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo);
-            throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
-        }
-        BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn());
-        boolean sign = true;
-        if (!staNo.getAutoing().equals("Y")) {
-//            throw new CoolException("鐩爣绔�"+staDesc.getCrnStn()+"涓嶅彲鐢�");
-            log.error("鐩爣绔�"+staDesc.getCrnStn()+"涓嶅彲鐢�");
-            sign = false;
-        }
+
         // 鏇存柊搴撲綅鎺掑彿
-        rowLastno.setCurrentRow(curRow);
-        rowLastnoService.updateById(rowLastno);
+        if (Utils.BooleanWhsTypeSta(whsType)){
+            rowLastno.setCurrentRow(curRow);
+            rowLastnoService.updateById(rowLastno);
+        }
 
         // 寮�濮嬫煡鎵惧簱浣� ==============================>>
 
-        // 1.褰撴绱㈠簱鎺掍负娴呭簱浣嶆帓鏃讹紝浼樺厛瀵绘壘褰撳墠搴撴帓鐨勬繁搴撲綅鎺�
-        if (locMast == null && sign) {
-            if (Utils.isShallowLoc(slaveProperties, curRow)) {
-                Integer deepRow = Utils.getDeepRow(slaveProperties, curRow);
-                locMast = locMastService.queryFreeLocMast(deepRow, locTypeDto.getLocType1());
-                // todo:luxiaotao 濡傛灉鐢ㄦ祬鎺掓壘鍒扮殑娣卞簱浣嶏紝閭d箞鍒欓渶瑕佸垽鏂繖涓繁搴撲綅瀵瑰簲鐨勬祬搴撲綅鏄惁鏈夎揣锛團銆乆銆丏锛�
-                // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣�
-                if (locMast !=null && !locMastService.checkEmptyCount(locMast)) {
-                    locMast = null;
-                }
-            }
-
-            if (Cools.isEmpty(locMast)) {
-                locMast = locMastService.queryFreeLocMast(curRow, locTypeDto.getLocType1());
-                // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣�
-                if (!locMastService.checkEmptyCount(locMast)) {
-                    locMast = null;
-                }
-
-                // 鐩爣搴撲綅 ===>> 娴呭簱浣嶏紝 鍒欐牎楠屽叾娣卞簱浣嶆槸鍚︿负 F D X
-                if (null != locMast && Utils.isShallowLoc(slaveProperties, locMast.getLocNo())) {
-                    LocMast deepLoc = locMastService.selectById(Utils.getDeepLoc(slaveProperties, locMast.getLocNo()));
-                    if (!deepLoc.getLocSts().equals("F") && !deepLoc.getLocSts().equals("D") && !deepLoc.getLocSts().equals("X")) {
-                        locMast = null;
-                    }
-                }
-                // 鐩爣搴撲綅 ===>> 娣卞簱浣嶏紝 鍒欐牎楠屽叾娴呭簱浣嶆槸鍚︿负 O
-                if (null != locMast && Utils.isDeepLoc(slaveProperties, locMast.getLocNo())) {
-                    LocMast shallowLoc = locMastService.selectById(Utils.getShallowLoc(slaveProperties, locMast.getLocNo()));
-                    if (!shallowLoc.getLocSts().equals("O")) {
-                        locMast = null;
-                    }
+        // 1.鎸夎鍒欐煡鎵惧簱浣�
+        if (Cools.isEmpty(locMast) && crnNo!=0){
+            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O"));
+            for (LocMast locMast1:locMasts){
+                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 (Cools.isEmpty(locMast) && !basCrnpService.checkSiteError(crnNo,true)){
+            locMast = null;
+        }
+
         // 2.搴撲綅褰撳墠鎵�灞炲昂瀵告棤绌哄簱浣嶆椂锛岃皟鏁村昂瀵稿弬鏁帮紝鍚戜笂鍏煎妫�绱㈠簱浣�
-        if (Cools.isEmpty(locMast)) {
+        if (Cools.isEmpty(locMast)  || !locMast.getLocSts().equals("O")) {
             // 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
             if (times < rowCount) {
                 times = times + 1;
-                return getLocNo(1, staDescId, sourceStaNo, list, locTypeDto, times);
-            } else {
-                times = 0;
+                return getLocNo(1, staDescId, sourceStaNo, matnr,batch,grade, locTypeDto, times);
             }
 
-            // 杞昏揣鐗╂壘杞诲簱浣嶄负绌烘椂锛屽彲浠ュ幓鎵鹃噸搴撲綅浠�
-            if (locTypeDto.getLocType1() == 1) {
-                locTypeDto.setLocType1((short) 2);
-                return getLocNo(1, staDescId, sourceStaNo, list, locTypeDto, times);
-            }
-            if (!sign){
-                throw new CoolException("鐩爣绔�"+staDesc.getCrnStn()+"涓嶅彲鐢�");
-            }
             log.error("绯荤粺娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", JSON.toJSONString(locTypeDto), times);
             throw new CoolException("娌℃湁绌哄簱浣�");
         }
         String locNo = locMast.getLocNo();
 
+        // 鐢熸垚宸ヤ綔鍙�
+        int workNo = getWorkNo(0);
         // 杩斿洖dto
         startupDto.setWorkNo(workNo);
         startupDto.setCrnNo(crnNo);
         startupDto.setSourceStaNo(sourceStaNo);
-        startupDto.setStaNo(staNo.getDevNo());
+        if (Utils.BooleanWhsTypeSta(whsType)){
+            startupDto.setStaNo(staNo.getDevNo());
+        }
         startupDto.setLocNo(locNo);
         return startupDto;
     }
 
-
-
-    public static String zerofill(String msg, Integer count) {
+    private static String zerofill(String msg, Integer count) {
         if (msg.length() == count) {
             return msg;
         } else if (msg.length() > count) {
@@ -326,17 +284,4 @@
         }
     }
 
-    /**
-     * 鏍规嵁鍏ュ簱绔欒幏鍙栧簱浣嶆帓鍙峰垎閰�
-     */
-    private Integer getCurRow(Integer curRow) {
-        if (Utils.isDeepLocLeft(slaveProperties,curRow)){ //鍒ゆ柇鏄惁涓哄乏娣卞簱浣�
-            curRow=curRow+3;
-        }else if (Utils.isDeepLocLeft(slaveProperties,curRow-1)){
-            curRow=curRow+1;
-        }else {
-            curRow=curRow-2;
-        }
-        return curRow;
-    }
 }
diff --git a/src/main/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java
index e7f2109..fd1cade 100644
--- a/src/main/java/com/zy/common/web/WcsController.java
+++ b/src/main/java/com/zy/common/web/WcsController.java
@@ -116,7 +116,7 @@
         BasDevp sourceStaNo = basDevpService.checkSiteStatus(12, true);
 
         // 妫�绱㈠簱浣�
-        StartupDto dto = commonService.getLocNo(rowLastnoService.selectNextWhsType(), 10, 12, null, locTypeDto,0);
+        StartupDto dto = commonService.getLocNo(rowLastnoService.selectNextWhsType(), 10, 12, null,null,null, locTypeDto,0);
         Date now = new Date();
         // 鐢熸垚宸ヤ綔妗�
         WrkMast wrkMast = new WrkMast();
@@ -168,7 +168,7 @@
         // 妫�绱㈠簱浣�
         List<KeyValueVo> list = waitPakins.stream().map(item-> new KeyValueVo(item.getMatnr(), item.getBatch())).distinct().collect(Collectors.toList());
 //        List<String> matNos = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList());
-        StartupDto dto = commonService.getLocNo(1, 1, devpNo, list, locTypeDto,0);
+        StartupDto dto = commonService.getLocNo(1, 1, devpNo, null,null,null, locTypeDto,1);
         int workNo = dto.getWorkNo();
         Date now = new Date();
         // 鐢熸垚宸ヤ綔妗�
@@ -243,7 +243,7 @@
         // 婧愮珯鐐圭姸鎬佹娴�
         BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
         // 妫�绱㈠簱浣�
-        StartupDto dto = commonService.getLocNo(1, 10, devpNo, null, locTypeDto,0);
+        StartupDto dto = commonService.getLocNo(1, 10, devpNo, null,null,null, locTypeDto,1);
         int workNo = dto.getWorkNo();
         // 鐢熸垚宸ヤ綔妗�
         WrkMast wrkMast = new WrkMast();

--
Gitblit v1.9.1