From bb3941c91f4d400ec13044f5ada027b9bc3c07d3 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期三, 17 一月 2024 16:21:51 +0800
Subject: [PATCH] #

---
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/CommonService.java |  266 +++++++++++++++++++++++++++++-----------------------
 1 files changed, 148 insertions(+), 118 deletions(-)

diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/CommonService.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/CommonService.java
index 559e5b9..3b57b43 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/CommonService.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/CommonService.java
@@ -1,10 +1,12 @@
 package com.zy.asrs.common.wms.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.common.domain.dto.LocRangeDto;
 import com.zy.asrs.common.domain.dto.LocTypeDto;
 import com.zy.asrs.common.domain.dto.StartupDto;
 import com.zy.asrs.common.domain.entity.StaDesc;
 import com.zy.asrs.common.sys.service.StaDescService;
+import com.zy.asrs.common.utils.VersionUtils;
 import com.zy.asrs.common.wms.entity.*;
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.framework.exception.CoolException;
@@ -37,6 +39,8 @@
     private LocMastService locMastService;
     @Autowired
     private LocDetlService locDetlService;
+    @Autowired
+    private LocRuleService locRuleService;
 
     /**
      * 鐢熸垚宸ヤ綔鍙�
@@ -82,30 +86,30 @@
      * 妫�绱㈠簱浣嶅彿
      */
     @Transactional
-    public StartupDto getLocNo(Integer staDescId, Integer sourceStaNo, Long hostId, LocTypeDto locTypeDto, int times) {
+    public StartupDto getLocNo(Integer staDescId, Integer sourceStaNo, List<String> matnrs, String batch, Long hostId, LocTypeDto locTypeDto, int times) {
         // 鐩爣搴撲綅
         LocMast locMast = null;
 
         // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭
-        locMast = getLocNoStep4(staDescId, locTypeDto, sourceStaNo);
+        locMast = getLocNoEmptyPakIn(staDescId, locTypeDto, sourceStaNo, hostId);
         if (locMast != null) {
             //鎵惧埌搴撲綅锛岃繑鍥瀌to
             return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
         }
 
-//        //搴撲綅瑙勫垯
-//        locMast = getLocNoStepRule(matnr, locTypeDto, staDescId, sourceStaNo);
-//        if (locMast != null) {
-//            //鎵惧埌搴撲綅锛岃繑鍥瀌to
-//            return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
-//        }
+        //搴撲綅瑙勫垯
+        locMast = getLocNoStepRule(matnrs, batch, locTypeDto, hostId);
+        if (locMast != null) {
+            //鎵惧埌搴撲綅锛岃繑鍥瀌to
+            return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
+        }
 
-//        // 闈犺繎鎽嗘斁瑙勫垯 --- 鐩稿悓璁㈠崟鍙�, 鍚屽ぉ鍚岃鏍肩墿鏂�
-//        locMast = getLocNoStep3(staDescId, matnr, batch, grade, locTypeDto, sourceStaNo);
-//        if (locMast != null) {
-//            //鎵惧埌搴撲綅锛岃繑鍥瀌to
-//            return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
-//        }
+        // 闈犺繎鎽嗘斁瑙勫垯 --- 鐩稿悓璁㈠崟鍙�, 鍚屽ぉ鍚岃鏍肩墿鏂�
+        locMast = getLocNoNearPlace(staDescId, matnrs, batch, locTypeDto, sourceStaNo, hostId);
+        if (locMast != null) {
+            //鎵惧埌搴撲綅锛岃繑鍥瀌to
+            return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
+        }
 
         //鎼滅储鏁翠釜绌哄簱浣嶇粍
         locMast = getLocNoStepSingle(locTypeDto, staDescId, sourceStaNo, hostId);
@@ -118,121 +122,138 @@
         throw new CoolException("娌℃湁绌哄簱浣�");
     }
 
-//    /**
-//     * 搴撲綅瑙勫垯
-//     */
-//    private LocMast getLocNoStepRule(String matnr, LocTypeDto locTypeDto, Integer staDescId, Integer sourceStaNo) {
-//        LocMast locMast = null;
-//
-//        // 搴撳尯閿佸畾
-//        List<LocRule> locRules = locRuleService.find(matnr);
-//        if (locRules == null || locRules.isEmpty()) {
-//            return null;//娌℃湁搴撲綅瑙勫垯锛岃烦鍑哄綋鍓嶄换鍔�
-//        }
-//
-//        // 鑾峰彇鐩爣绔�
-//        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
-//                .eq("type_no", staDescId)
-//                .eq("stn_no", sourceStaNo);
-//        StaDesc staDesc = staDescService.selectOne(wrapper);
-//        if (staDesc == null) {
-//            throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
-//        }
-//
-//        for (LocRule locRule : locRules) {
-//            if (locRule == null) {
-//                continue;
-//            }
-//
-//            List<LocMast> locMasts = locMastService.queryFreeLocMast2(locTypeDto.getLocType1(), locRule.getRowBeg(), locRule.getRowEnd(), locRule.getBayBeg(), locRule.getBayEnd(), locRule.getLevBeg(), locRule.getLevEnd(), staDesc.getCrnNo());
-//            for (LocMast locMast0 : locMasts) {
-//                //棰勭暀绌哄簱浣�
-//                if (locMastService.checkEmptyCount(locMast0, 10)) {
-//                    return locMast0;
-//                }
-//            }
-//        }
-//
-//        if (locRules.get(0).getKeepGo() == 0) {
-//            //鎵句笉鍒扮┖搴撲綅锛屼笖绂佹缁х画瀵绘壘鍏朵粬闈炴贩杞藉尯鍩熷簱浣�
-//            //鎵句笉鍒板簱浣嶏紝鎶涘嚭寮傚父
-//            throw new CoolException("瑙勫垯鍖哄煙娌℃湁绌哄簱浣�");
-//        }
-//
-//        return locMast;
-//    }
+    /**
+     * 搴撲綅瑙勫垯
+     */
+    private LocMast getLocNoStepRule(List<String> matnrs, String batch, LocTypeDto locTypeDto, Long hostId) {
+        if (matnrs.size() != 1) {
+            return null;
+        }
+        String matnr = matnrs.get(0);
+        LambdaQueryWrapper<LocRule> wrapper = new LambdaQueryWrapper<LocRule>()
+                .eq(LocRule::getHostId, hostId)
+                .eq(LocRule::getMatnr, matnr);
+        if (batch != null) {
+            wrapper.eq(LocRule::getBatch, batch);
+        }
+        List<LocRule> locRules = locRuleService.list(wrapper);
+        if (locRules == null || locRules.isEmpty()) {
+            return null;//娌℃湁搴撲綅瑙勫垯锛岃烦鍑哄綋鍓嶄换鍔�
+        }
 
-//    // 闈犺繎鎽嗘斁瑙勫垯 --- 鐩稿悓璁㈠崟鍙�, 鍚屽ぉ鍚岃鏍肩墿鏂�
-//    private LocMast getLocNoStep3(Integer staDescId, String matnr, String batch, String grade, LocTypeDto locTypeDto, Integer sourceStaNo) {
-//        LocMast locMast = null;
-//        if (staDescId == 1) {
-//            // 鑾峰彇鐩爣绔�
-//            Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
-//                    .eq("type_no", staDescId)
-//                    .eq("stn_no", sourceStaNo);
-//            StaDesc staDesc = staDescService.selectOne(wrapper);
-//            if (staDesc == null) {
-//                throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
-//            }
-//
-//            //鍏堝垽鏂伐浣滄。锛屾煡鎵句富妗OType=1锛� wrkSts < 10鐨勫伐浣滄槑缁嗭紝鏂欏彿鐩稿悓鐨勬槑缁嗗簱浣�
-//            List<WrkMast> wrkMasts = wrkMastService.selectSameMatnrs(matnr, batch, grade, staDesc.getCrnNo());
-//            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.getSameDetl(matnr, batch, grade, staDesc.getCrnNo());
-//                for (String locNo : locNos) {
-//                    LocMast locMast0 = locMastService.findNearloc(locNo);
-//                    if (null != locMast0) {
-//                        // 娴呭簱浣嶇鍚堝昂瀵告娴�
-//                        if (VersionUtils.checkLocType(locMast0, locTypeDto)) {
-//                            locMast = locMast0;
-//                            break;
-//                        }
-//                    }
-//                }
-//            }
-//        }
-//
-//        return locMast;
-//    }
+        for (LocRule locRule : locRules) {
+            if (locRule == null) {
+                continue;
+            }
+
+            List<LocMast> locMasts = locMastService.queryFreeLocMast2(locTypeDto.getLocType1(), locRule.getRowBeg(), locRule.getRowEnd(), locRule.getBayBeg(), locRule.getBayEnd(), locRule.getLevBeg(), locRule.getLevEnd(), hostId);
+            for (LocMast locMast0 : locMasts) {
+                //棰勭暀绌哄簱浣�
+                if (locMastService.checkEmptyCount(locMast0, 10, hostId)) {
+                    return locMast0;
+                }
+            }
+        }
+
+        if (locRules.get(0).getKeepGo() == 0) {
+            //鎵句笉鍒扮┖搴撲綅锛屼笖绂佹缁х画瀵绘壘鍏朵粬闈炴贩杞藉尯鍩熷簱浣�
+            //鎵句笉鍒板簱浣嶏紝鎶涘嚭寮傚父
+            throw new CoolException("瑙勫垯鍖哄煙娌℃湁绌哄簱浣�");
+        }
+
+        return null;
+    }
+
+    // 闈犺繎鎽嗘斁瑙勫垯 --- 鐩稿悓璁㈠崟鍙�, 鍚屽ぉ鍚岃鏍肩墿鏂�
+    private LocMast getLocNoNearPlace(Integer staDescId, List<String> matnrs, String batch, LocTypeDto locTypeDto, Integer sourceStaNo, Long hostId) {
+        LocMast locMast = null;
+        if (staDescId == 1) {
+            // 鑾峰彇鐩爣绔�
+            LambdaQueryWrapper<StaDesc> wrapper = new LambdaQueryWrapper<StaDesc>()
+                    .eq(StaDesc::getTypeNo, staDescId)
+                    .eq(StaDesc::getStnNo, sourceStaNo)
+                    .eq(StaDesc::getHostId, hostId);
+            StaDesc staDesc = staDescService.getOne(wrapper);
+            if (staDesc == null) {
+                throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+            }
+
+            String matnr = matnrs.get(0);
+
+            //搴撲綅鎼滅储鑼冨洿
+            LocRangeDto locRangeDto = locTypeDto.getLocRangeDto();
+
+            //鍏堝垽鏂伐浣滄。锛屾煡鎵句富妗OType=1锛� wrkSts < 10鐨勫伐浣滄槑缁嗭紝鏂欏彿鐩稿悓鐨勬槑缁嗗簱浣�
+            List<WrkMast> wrkMasts = wrkMastService.selectSameMatnrs(matnr, batch, locTypeDto.getLocRangeDto(), hostId);
+            for (WrkMast wrkMast : wrkMasts) {
+                LocMast locMast0 = locMastService.findNearloc(wrkMast.getLocNo(), hostId, locRangeDto);
+                if (null != locMast0) {
+                    // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                    if (VersionUtils.checkLocType(locMast0, locTypeDto)) {
+                        locMast = locMast0;
+                    }
+                }
+            }
+            if (Cools.isEmpty(locMast)) {
+                //鍐嶅垽鏂簱瀛樻槑缁嗘。锛屾枡鍙风浉鍚岀殑鏄庣粏搴撲綅
+                List<String> locNos = locDetlService.getSameDetl(matnr, batch, hostId);
+                for (String locNo : locNos) {
+                    LocMast locMast0 = locMastService.findNearloc(locNo, hostId, locRangeDto);
+                    if (null != locMast0) {
+                        // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                        if (VersionUtils.checkLocType(locMast0, locTypeDto)) {
+                            locMast = locMast0;
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+
+        return locMast;
+    }
 
     // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭
-    private LocMast getLocNoStep4(Integer staDescId, LocTypeDto locTypeDto, Integer sourceStaNo) {
+    private LocMast getLocNoEmptyPakIn(Integer staDescId, LocTypeDto locTypeDto, Integer sourceStaNo, Long hostId) {
         LocMast locMast = null;
         // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭
         if (staDescId == 10) {
             // 鑾峰彇鐩爣绔�
             LambdaQueryWrapper<StaDesc> wrapper = new LambdaQueryWrapper<StaDesc>()
                     .eq(StaDesc::getTypeNo, staDescId)
-                    .eq(StaDesc::getStnNo, sourceStaNo);
+                    .eq(StaDesc::getStnNo, sourceStaNo)
+                    .eq(StaDesc::getHostId,hostId);
             StaDesc staDesc = staDescService.getOne(wrapper);
             if (staDesc == null) {
                 throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
             }
 
-            List<LocMast> locMasts = locMastService.list(new LambdaQueryWrapper<LocMast>()
+            LambdaQueryWrapper<LocMast> wrapper1 = new LambdaQueryWrapper<LocMast>()
                     .eq(LocMast::getLocSts, "O")
                     .eq(LocMast::getLocType1, 1)
                     .eq(LocMast::getCrnNo, staDesc.getDeviceNo())
-                    .orderByAsc(LocMast::getLev1, LocMast::getBay1, LocMast::getRow1));
+                    .eq(LocMast::getHostId, hostId)
+                    .orderByAsc(LocMast::getLev1, LocMast::getBay1, LocMast::getRow1);
+
+            //搴撲綅鎼滅储鑼冨洿
+            LocRangeDto locRangeDto = locTypeDto.getLocRangeDto();
+            if (locRangeDto != null) {
+                wrapper1.ge(LocMast::getRow1, locRangeDto.getStartRow());
+                wrapper1.le(LocMast::getRow1, locRangeDto.getTargetRow());
+                wrapper1.ge(LocMast::getBay1, locRangeDto.getStartBay());
+                wrapper1.le(LocMast::getBay1, locRangeDto.getTargetBay());
+                wrapper1.ge(LocMast::getLev1, locRangeDto.getStartLev());
+                wrapper1.le(LocMast::getLev1, locRangeDto.getTargetLev());
+            }
+
+            List<LocMast> locMasts = locMastService.list(wrapper1);
             if (!locMasts.isEmpty()) {
                 for (LocMast loc : locMasts) {
-//                    LocMast locMast0 = locMastService.findNearloc(loc.getLocNo());
-//                    if (null != locMast0) {
-//                        locMast = locMast0;
-//                        break;
-//                    }
-                    locMast = loc;
-                    break;
+                    LocMast locMast0 = locMastService.findNearloc(loc.getLocNo(), hostId, locRangeDto);
+                    if (null != locMast0) {
+                        locMast = locMast0;
+                        break;
+                    }
                 }
             }
 
@@ -256,17 +277,26 @@
             throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
         }
 
-        List<LocMast> locMasts = locMastService.list(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocSts, "O").eq(LocMast::getHostId, hostId));//鎼滅储璐х墿
-
-        if (locMasts == null) {
-            return null;
+        LambdaQueryWrapper<LocMast> wrapper1 = new LambdaQueryWrapper<LocMast>()
+                .eq(LocMast::getLocSts, "O")
+                .eq(LocMast::getHostId, hostId);
+        //搴撲綅鎼滅储鑼冨洿
+        LocRangeDto locRangeDto = locTypeDto.getLocRangeDto();
+        if (locRangeDto != null) {
+            wrapper1.ge(LocMast::getRow1, locRangeDto.getStartRow());
+            wrapper1.le(LocMast::getRow1, locRangeDto.getTargetRow());
+            wrapper1.ge(LocMast::getBay1, locRangeDto.getStartBay());
+            wrapper1.le(LocMast::getBay1, locRangeDto.getTargetBay());
+            wrapper1.ge(LocMast::getLev1, locRangeDto.getStartLev());
+            wrapper1.le(LocMast::getLev1, locRangeDto.getTargetLev());
         }
-
+        List<LocMast> locMasts = locMastService.list(wrapper1);//鎼滅储璐х墿
         for (LocMast mast : locMasts) {
-            locMast = mast;
-            break;
+            if (VersionUtils.checkLocType(mast, locTypeDto)) {
+                locMast = mast;
+                break;
+            }
         }
-
         return locMast;
     }
 

--
Gitblit v1.9.1