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