From 0f478c31b5327ffe4bfdebd72fdf23a6df5d37e6 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期五, 02 六月 2023 11:55:11 +0800 Subject: [PATCH] 随机获取可用且有空库位的堆垛机号,找新巷道时增加判断 --- src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java | 17 +++-- src/main/java/com/zy/asrs/utils/Utils.java | 24 ++++++++ src/main/resources/mapper/LocMastMapper.xml | 23 ++++++- src/main/java/com/zy/asrs/mapper/LocMastMapper.java | 8 +- src/main/java/com/zy/asrs/service/LocMastService.java | 8 +- src/main/java/com/zy/common/service/CommonService.java | 55 ++++++++++++++--- 6 files changed, 107 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java index c2febf3..f884606 100644 --- a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java +++ b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java @@ -40,13 +40,15 @@ List<LocMast> findOutMast(Short locType1, List<Integer> crnNos); //鎵惧崟鍝佺被鍨嬶紝鏈�鍐呬晶绌哄簱浣� - LocMast findInEmptyLocMast(Short locType1, @Param("rows") List<Integer> rows); + List<LocMast> findInEmptyLocMast(Short locType1, @Param("rows") List<Integer> rows, Integer crnNo); //鍦ㄥ簱浣嶇粍涓悳绱㈠彲鍏ョ殑绌哄簱浣� - List<LocMast> findEmptyLocMastByLocNos(Short locType1, @Param("locNos") List<String> locNos); + List<LocMast> findEmptyLocMastByLocNos(Short locType1, @Param("locNos") List<String> locNos, Integer crnNo); //鎼滅储浣庨(娣锋斁鍖哄煙)绌哄簱浣� - List<LocMast> findEmptyLowFrequencyLocMast(Short locType1); + List<LocMast> findEmptyLowFrequencyLocMast(Short locType1, Integer crnNo); + + List<LocMast> findEmptyLocMast(Short locType1, Integer crnNo); List<LocMast> selectLocByLev(Integer lev); diff --git a/src/main/java/com/zy/asrs/service/LocMastService.java b/src/main/java/com/zy/asrs/service/LocMastService.java index 92f2440..c896f45 100644 --- a/src/main/java/com/zy/asrs/service/LocMastService.java +++ b/src/main/java/com/zy/asrs/service/LocMastService.java @@ -59,13 +59,15 @@ List<LocMast> findOutMast(Short locType1, List<Integer> crnNos); //鎵惧崟鍝佺被鍨嬶紝鏈�鍐呬晶绌哄簱浣� - LocMast findInEmptyLocMast(Short locType1, List<Integer> rows); + List<LocMast> findInEmptyLocMast(Short locType1, List<Integer> rows, Integer crnNo); //鍦ㄥ簱浣嶇粍涓悳绱㈠彲鍏ョ殑绌哄簱浣� - List<LocMast> findEmptyLocMastByLocNos(Short locType1, List<String> locNos); + List<LocMast> findEmptyLocMastByLocNos(Short locType1, List<String> locNos, Integer crnNo); //鎼滅储浣庨(娣锋斁鍖哄煙)绌哄簱浣� - List<LocMast> findEmptyLowFrequencyLocMast(Short locType1); + List<LocMast> findEmptyLowFrequencyLocMast(Short locType1, Integer crnNo); + + List<LocMast> findEmptyLocMast(Short locType1, Integer crnNo); //鏌ヨ鎸囧畾妤煎眰鐨勫簱浣嶆暟鎹� List<LocMast> selectLocByLev(Integer lev); 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 9047436..0212b4d 100644 --- a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java @@ -210,18 +210,23 @@ } @Override - public LocMast findInEmptyLocMast(Short locType1, List<Integer> rows) { - return this.baseMapper.findInEmptyLocMast(locType1, rows); + public List<LocMast> findInEmptyLocMast(Short locType1, List<Integer> rows, Integer crnNo) { + return this.baseMapper.findInEmptyLocMast(locType1, rows, crnNo); } @Override - public List<LocMast> findEmptyLocMastByLocNos(Short locType1, List<String> locNos) { - return this.baseMapper.findEmptyLocMastByLocNos(locType1, locNos); + public List<LocMast> findEmptyLocMastByLocNos(Short locType1, List<String> locNos, Integer crnNo) { + return this.baseMapper.findEmptyLocMastByLocNos(locType1, locNos, crnNo); } @Override - public List<LocMast> findEmptyLowFrequencyLocMast(Short locType1) { - return this.baseMapper.findEmptyLowFrequencyLocMast(locType1); + public List<LocMast> findEmptyLowFrequencyLocMast(Short locType1, Integer crnNo) { + return this.baseMapper.findEmptyLowFrequencyLocMast(locType1, crnNo); + } + + @Override + public List<LocMast> findEmptyLocMast(Short locType1, Integer crnNo) { + return this.baseMapper.findEmptyLocMast(locType1, crnNo); } @Override diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java index d4e1661..debe482 100644 --- a/src/main/java/com/zy/asrs/utils/Utils.java +++ b/src/main/java/com/zy/asrs/utils/Utils.java @@ -6,6 +6,7 @@ import com.core.common.SpringUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.LocMast; +import com.zy.asrs.service.BasCrnpService; import com.zy.asrs.service.LocMastService; import com.zy.common.properties.SlaveProperties; @@ -730,6 +731,29 @@ return false; } + /** + * 闅忔満鑾峰彇鍙敤涓旀湁绌哄簱浣嶇殑鍫嗗灈鏈哄彿 + */ + public static Integer getRandomCrnNo(List<Integer> crnNos, Short locType1) { + BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class); + LocMastService locMastService = SpringUtils.getBean(LocMastService.class); + Random random = new Random(); + //鍙敤鍫嗗灈鏈簂ist + ArrayList<Integer> normalCrnNos = new ArrayList<>(); + for (Integer crnNo : crnNos) { + List<LocMast> emptyLocMast = locMastService.findEmptyLocMast(locType1, crnNo); + if (basCrnpService.checkSiteError(crnNo, true) && emptyLocMast.size() > 0) { + normalCrnNos.add(crnNo); + } + } + if (normalCrnNos.size() == 0) { + throw new CoolException("娌℃湁鍙敤鍫嗗灈鏈�"); + } + //闅忔満鍙敤鍫嗗灈鏈哄彿 + Integer randomCrnNo = normalCrnNos.get(random.nextInt(normalCrnNos.size())); + return randomCrnNo; + } + public static void main(String[] args) { List<String> groupLoc = Utils.getGroupLoc("1300801"); System.out.println(groupLoc); diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java index 8df8722..32bdf6d 100644 --- a/src/main/java/com/zy/common/service/CommonService.java +++ b/src/main/java/com/zy/common/service/CommonService.java @@ -17,6 +17,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Random; /** * 璐ф灦鏍稿績鍔熻兘 @@ -181,7 +182,7 @@ if (matType != null) { if (matType == 1) {//鍗曞搧绫诲瀷鍏ュ簱 - locMast = getLocNoStep2(locTypeDto, matNos, rows); + locMast = getLocNoStep2(locTypeDto, matNos, rows, crnNos); if (locMast != null) { //鎵惧埌搴撲綅锛岃繑鍥瀌to return getLocNoFinalStep(staDescId, sourceStaNo, locMast);//杩斿洖dto @@ -190,14 +191,14 @@ locMast = getLocNoStep3(locTypeDto, crnNos); if (locMast == null) { //楂橀娌℃湁鎵惧埌搴撲綅锛屾壘浣庨娣锋斁鍖哄煙搴撲綅 - locMast = getLocNoStep4(locTypeDto); + locMast = getLocNoStep4(locTypeDto, crnNos); } if (locMast != null) { //鎵惧埌搴撲綅锛岃繑鍥瀌to return getLocNoFinalStep(staDescId, sourceStaNo, locMast);//杩斿洖dto } } else if (matType == 3) {//浣庨娣锋斁绫诲瀷 - locMast = getLocNoStep4(locTypeDto); + locMast = getLocNoStep4(locTypeDto, crnNos); if (locMast != null) { //鎵惧埌搴撲綅锛岃繑鍥瀌to return getLocNoFinalStep(staDescId, sourceStaNo, locMast);//杩斿洖dto @@ -239,14 +240,15 @@ } //鍗曞搧绫诲瀷鍏ュ簱 - private LocMast getLocNoStep2(LocTypeDto locTypeDto, List<String> matNos, List<Integer> rows) { + private LocMast getLocNoStep2(LocTypeDto locTypeDto, List<String> matNos, List<Integer> rows, List<Integer> crnNos) { LocMast locMast = null; - //鍏堟壘宸ヤ綔妗� List<WrkMast> wrkMasts = wrkMastService.selectSameWrkMast(matNos.get(0)); for (WrkMast wrkMast : wrkMasts) { List<String> groupLoc = Utils.getGroupLoc(wrkMast.getLocNo()); - List<LocMast> locMasts = locMastService.findEmptyLocMastByLocNos(locTypeDto.getLocType1(), groupLoc); + //闅忔満鍙敤鍫嗗灈鏈哄彿 + Integer randomCrnNo = Utils.getRandomCrnNo(crnNos, locTypeDto.getLocType1()); + List<LocMast> locMasts = locMastService.findEmptyLocMastByLocNos(locTypeDto.getLocType1(), groupLoc, randomCrnNo); for (LocMast locMast0 : locMasts) { //妫�娴嬪綋鍓嶅簱浣嶅唴渚у叾浠栧簱浣嶆槸鍚︿负D銆丗銆乆銆丼 if (Utils.checkInsideLocIsDFXS(locMast0.getLocNo())) { @@ -273,7 +275,7 @@ List<String> locNos = locDetlService.getSameDetl(matNos.get(0)); for (String locNo : locNos) { List<String> groupLoc = Utils.getGroupLoc(locNo); - List<LocMast> locMasts = locMastService.findEmptyLocMastByLocNos(locTypeDto.getLocType1(), groupLoc); + List<LocMast> locMasts = locMastService.findEmptyLocMastByLocNos(locTypeDto.getLocType1(), groupLoc, null); for (LocMast locMast0 : locMasts) { //妫�娴嬪綋鍓嶅簱浣嶅唴渚у叾浠栧簱浣嶆槸鍚︿负D銆丗銆乆 if (Utils.checkInsideLocIsDFX(locMast0.getLocNo())) { @@ -298,7 +300,28 @@ //鏈壘鍒板贩閬擄紝鎵句竴鏉℃柊鐨勭┖宸烽亾 if (locMast == null) { - locMast = locMastService.findInEmptyLocMast(locTypeDto.getLocType1(), rows);//鎵句竴鏉℃柊鐨勭┖宸烽亾 + //闅忔満鍙敤鍫嗗灈鏈哄彿 + Integer randomCrnNo = Utils.getRandomCrnNo(crnNos, locTypeDto.getLocType1()); + List<LocMast> locMasts = locMastService.findInEmptyLocMast(locTypeDto.getLocType1(), rows, randomCrnNo);//鎵句竴鏉℃柊鐨勭┖宸烽亾 + for (LocMast locMast0 : locMasts) { + //妫�娴嬪綋鍓嶅簱浣嶅唴渚у叾浠栧簱浣嶆槸鍚︿负D銆丗銆乆 + if (Utils.checkInsideLocIsDFX(locMast0.getLocNo())) { + //鍐呬晶鍏朵粬搴撲綅涓嶆槸D銆丗銆乆銆備笉鑳介�夊彇璇ュ簱浣� + continue; + } + + // 娴呭簱浣嶇鍚堝昂瀵告娴� + if (VersionUtils.locMoveCheckLocType(locMast0, locTypeDto)) { + // 娴呭簱浣嶅搴斿爢鍨涙満蹇呴』鍙敤涓旀棤寮傚父 + if (basCrnpService.checkSiteError(locMast0.getCrnNo(), true)) { + // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣� + if (locMastService.checkEmptyCount(locMast0, 10)) { + locMast = locMast0; + break; + } + } + } + } } return locMast; @@ -307,8 +330,14 @@ //楂橀绫诲瀷鍏ユ渶澶栦晶搴撲綅 private LocMast getLocNoStep3(LocTypeDto locTypeDto, List<Integer> crnNos) { LocMast locMast = null; + + //闅忔満鍙敤鍫嗗灈鏈哄彿 + Integer randomCrnNo = Utils.getRandomCrnNo(crnNos, locTypeDto.getLocType1()); + ArrayList<Integer> randomCrnNos = new ArrayList<>(); + randomCrnNos.add(randomCrnNo); + //鎵炬渶澶栦晶绌哄簱浣� - List<LocMast> locMasts = locMastService.findOutMast(locTypeDto.getLocType1(), crnNos); + List<LocMast> locMasts = locMastService.findOutMast(locTypeDto.getLocType1(), randomCrnNos); for (LocMast locMast0 : locMasts) { //妫�娴嬪綋鍓嶅簱浣嶅唴渚у叾浠栧簱浣嶆槸鍚︿负D銆丗銆乆 if (Utils.checkInsideLocIsDFX(locMast0.getLocNo())) { @@ -332,9 +361,13 @@ } //浣庨绫诲瀷锛岀洿鎺ユ壘娣锋斁鍖哄煙 - private LocMast getLocNoStep4(LocTypeDto locTypeDto) { + private LocMast getLocNoStep4(LocTypeDto locTypeDto, List<Integer> crnNos) { LocMast locMast = null; - List<LocMast> locMasts = locMastService.findEmptyLowFrequencyLocMast(locTypeDto.getLocType1()); + + //闅忔満鍙敤鍫嗗灈鏈哄彿 + Integer randomCrnNo = Utils.getRandomCrnNo(crnNos, locTypeDto.getLocType1()); + + List<LocMast> locMasts = locMastService.findEmptyLowFrequencyLocMast(locTypeDto.getLocType1(), randomCrnNo); for (LocMast locMast0 : locMasts) { //妫�娴嬪綋鍓嶅簱浣嶅唴渚у叾浠栧簱浣嶆槸鍚︿负D銆丗銆乆 if (Utils.checkInsideLocIsDFX(locMast0.getLocNo())) { diff --git a/src/main/resources/mapper/LocMastMapper.xml b/src/main/resources/mapper/LocMastMapper.xml index 25a8711..1a4ced9 100644 --- a/src/main/resources/mapper/LocMastMapper.xml +++ b/src/main/resources/mapper/LocMastMapper.xml @@ -292,11 +292,11 @@ #{item} </foreach> and loc_sts = 'O' - order by row1,bay1,lev1 + order by bay1,lev1,row1, </select> <select id="findInEmptyLocMast" resultMap="BaseResultMap"> - select top 1 * from asr_loc_mast + select * from asr_loc_mast where loc_type2 = 1 and loc_type1 = #{locType1} and row1 in @@ -304,7 +304,8 @@ #{item} </foreach> and loc_sts = 'O' - order by row1,bay1,lev1 + and crn_no = #{crnNo} + order by bay1,lev1,row1 </select> <select id="findEmptyLocMastByLocNos" resultMap="BaseResultMap"> @@ -316,7 +317,10 @@ #{item} </foreach> and loc_sts = 'O' - order by row1,bay1,lev1 + <if test="crnNo != null || crnNo != ''"> + and crn_no = #{crnNo} + </if> + order by bay1,lev1,row1 </select> <select id="findEmptyLowFrequencyLocMast" resultMap="BaseResultMap"> @@ -324,7 +328,16 @@ where loc_type2 = 3 and loc_type1 = #{locType1} and loc_sts = 'O' - order by row1,bay1,lev1 + and crn_no = #{crnNo} + order by bay1,lev1,row1 + </select> + + <select id="findEmptyLocMast" resultMap="BaseResultMap"> + select * from asr_loc_mast + where loc_type1 = #{locType1} + and loc_sts = 'O' + and crn_no = #{crnNo} + order by bay1,lev1,row1 </select> <select id="selectLocByLev" resultMap="BaseResultMap"> -- Gitblit v1.9.1