From a44e66e91a00405d4651a9b9dd395c35708df5b9 Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期二, 16 七月 2024 15:21:44 +0800
Subject: [PATCH] 找库位逻辑bug修改
---
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/CommonService.java | 683 ++++++++++++++++++++++++++------------------------------
1 files changed, 322 insertions(+), 361 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 b549167..7a69542 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,17 +1,20 @@
package com.zy.asrs.common.wms.service;
-import com.alibaba.fastjson.JSON;
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.wms.entity.LocMast;
-import com.zy.asrs.common.wms.entity.WrkLastno;
-import com.zy.asrs.common.wms.entity.WrkMast;
+import com.zy.asrs.common.domain.entity.StaDesc;
+import com.zy.asrs.common.sys.service.StaDescService;
+import com.zy.asrs.common.utils.Utils;
+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;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@@ -23,32 +26,6 @@
@Slf4j
@Service
public class CommonService {
-
- public static final List<Integer> FIRST_GROUP_ROW_LIST = new ArrayList<Integer>() {{
- add(1);
- }};
- public static final List<Integer> SECOND_GROUP_ROW_LIST = new ArrayList<Integer>() {{
- add(3);add(4);
- }};
- public static final List<Integer> THIRD_GROUP_ROW_LIST = new ArrayList<Integer>() {{
- add(6);add(7);
- }};
- public static final List<Integer> FOURTH_GROUP_ROW_LIST = new ArrayList<Integer>() {{
- add(8);
- }};
- public static final List<Integer> FIFTH_GROUP_ROW_LIST = new ArrayList<Integer>() {{
- add(10);add(11);
- }};
- public static final List<Integer> SIXTH_GROUP_ROW_LIST = new ArrayList<Integer>() {{
- add(13);add(14);add(15);add(16);
- }};
- public static final List<Integer> SEVENTH_GROUP_ROW_LIST = new ArrayList<Integer>() {{
- add(13);add(14);
- }};
- public static final List<Integer> EIGHTH_GROUP_ROW_LIST = new ArrayList<Integer>() {{
- add(16);
- }};
-
@Autowired
private WrkMastService wrkMastService;
@@ -64,37 +41,43 @@
private LocMastService locMastService;
@Autowired
private LocDetlService locDetlService;
+ @Autowired
+ private LocRuleService locRuleService;
+ @Autowired
+ private LocDirectionService locDirectionService;
+
+ private Long WHS_TYPE = 0L;//榛樿绔嬪簱
/**
* 鐢熸垚宸ヤ綔鍙�
- * @param wrkMk 0:鍏ュ嚭搴� ; 1:鍏朵粬
+ *
+ * @param wrkMk
* @return workNo(宸ヤ綔鍙�)
*/
public int getWorkNo(Integer wrkMk) {
- WrkLastno wrkLastno = wrkLastnoService.getById(wrkMk);
+ WrkLastno wrkLastno = wrkLastnoService.getOne(new LambdaQueryWrapper<WrkLastno>().eq(WrkLastno::getWrkMk, wrkMk));
if (Cools.isEmpty(wrkLastno)) {
throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
}
- int workNo = 0;
- // 鍏ュ嚭搴撶被鍨�
- workNo = wrkLastno.getWrkNo();
+
+ int workNo = wrkLastno.getWrkNo();
int sNo = wrkLastno.getStartNo();
int eNo = wrkLastno.getTargetNo();
-
- workNo = workNo>=eNo ? sNo : workNo+1;
-
+ workNo = workNo >= eNo ? sNo : workNo + 1;
while (true) {
WrkMast wrkMast = wrkMastService.getOne(new LambdaQueryWrapper<WrkMast>().eq(WrkMast::getWrkNo, workNo));
if (null != wrkMast) {
- workNo = workNo>=eNo ? sNo : workNo+1;
+ workNo = workNo >= eNo ? sNo : workNo + 1;
} else {
break;
}
}
- if (workNo > 0){
+ // 淇敼搴忓彿璁板綍
+ if (workNo > 0) {
wrkLastno.setWrkNo(workNo);
wrkLastnoService.updateById(wrkLastno);
}
+ // 妫�楠�
if (workNo == 0) {
throw new CoolException("鐢熸垚宸ヤ綔鍙峰け璐ワ紝璇疯仈绯荤鐞嗗憳");
} else {
@@ -105,340 +88,318 @@
return workNo;
}
- public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto, int times) {
- return getLocNo(staDescId, sourceStaNo, matNos, locTypeDto, times);
- }
-
/**
* 妫�绱㈠簱浣嶅彿
- *
- * @param staDescId 璺緞ID
- * @param sourceStaNo 婧愮珯
- * @param matNos 鐗╂枡鍙烽泦鍚�
- * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿
*/
- public StartupDto getLocNo(Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto, int times) {
+ @Transactional
+ public StartupDto getLocNo(Integer staDescId, Integer sourceStaNo, List<String> matnrs, String batch, Long hostId, LocTypeDto locTypeDto, int times) {
+ if (sourceStaNo==999){//骞冲簱鍐呯疆鍒ゆ柇绔欑偣锛堜复鏃惰В鍐虫柟妗堬級
+ WHS_TYPE = 1L;//骞冲簱
+ } else {
+ WHS_TYPE = 0L;//绔嬪簱
+ }
// 鐩爣搴撲綅
LocMast locMast = null;
-// // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭
-// locMast = getLocNoStep4(staDescId, locTypeDto);
-// if (locMast != null) {
-// //鎵惧埌搴撲綅锛岃繑鍥瀌to
-// return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
-// }
+ // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭
+ locMast = getLocNoEmptyPakIn(staDescId, locTypeDto, sourceStaNo, hostId);
+ if (locMast != null) {
+ //鎵惧埌搴撲綅锛岃繑鍥瀌to
+ return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
+ }
-// //搴撲綅瑙勫垯
-// locMast = getLocNoStepRule(matNos, locTypeDto);
-// 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, matNos, locTypeDto);
-// if (locMast != null) {
-// //鎵惧埌搴撲綅锛岃繑鍥瀌to
-// return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
-// }
-//
-// //鎼滅储鍗曞搧
-// locMast = getLocNoStepSingle(matNos, locTypeDto);
-// if (locMast != null) {
-// //鎵惧埌搴撲綅锛岃繑鍥瀌to
-// return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
-// }
-//
-// //鎼滅储娣锋斁
-// locMast = getLocNoStepMixed(matNos, locTypeDto, times);
-// 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);
+ if (locMast != null) {
+ //鎵惧埌搴撲綅锛岃繑鍥瀌to
+ return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
+ }
//鎵句笉鍒板簱浣嶏紝鎶涘嚭寮傚父
throw new CoolException("娌℃湁绌哄簱浣�");
}
-// /**
-// * 搴撲綅瑙勫垯
-// */
-// private LocMast getLocNoStepRule(List<String> matNos, LocTypeDto locTypeDto) {
-// LocMast locMast = null;
-//
-// //搴撲綅瑙勫垯鍙兘鍦ㄥ崟鍝佽揣鐗╀腑鐢熸晥
-// if (matNos.size() == 1) {
-// // 搴撳尯閿佸畾
-// List<LocRule> locRules = locRuleService.find(Cools.isEmpty(matNos) ? null : matNos.get(0));
-// if (locRules == null || locRules.isEmpty()) {
-// return null;//娌℃湁搴撲綅瑙勫垯锛岃烦鍑哄綋鍓嶄换鍔�
-// }
-//
-// 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());
-// locMast = locFilter(locMasts, matNos,locTypeDto);
-//
-// }
-//
-// 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, List<String> matNos, LocTypeDto locTypeDto) {
-// LocMast locMast = null;
-// if (!Cools.isEmpty(matNos) && matNos.size() == 1 && staDescId == 1) {
-// //鍏堝垽鏂伐浣滄。锛屾煡鎵句富妗OType=1锛� wrkSts < 10鐨勫伐浣滄槑缁嗭紝鏂欏彿鐩稿悓鐨勬槑缁嗗簱浣�
-// List<WrkMast> wrkMasts = wrkMastService.selectSameMatnrs(matNos.get(0));
-// 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(matNos.get(0));
-// for (String locNo : locNos) {
-// LocMast locMast0 = locMastService.findInnerLoc(locNo);
-// if (null != locMast0) {
-// // 娴呭簱浣嶇鍚堝昂瀵告娴�
-// if (VersionUtils.checkLocType(locMast0, locTypeDto)) {
-// locMast = locMast0;
-// break;
-// }
-// }
-// }
-// }
-// }
-//
-// return locMast;
-// }
-//
-// // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭
-// private LocMast getLocNoStep4(Integer staDescId, LocTypeDto locTypeDto) {
-// LocMast locMast = null;
-// // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭
-// if (staDescId == 10) {
-// //鍏堝垽鏂伐浣滄。锛屾煡鎵句富妗OType=1锛� wrkSts < 10鐨勫伐浣滄槑缁嗭紝鏂欏彿鐩稿悓鐨勬槑缁嗗簱浣�
-// List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("io_type",10));
-// for (WrkMast wrkMast : wrkMasts) {
-// LocMast locMast0 = locMastService.findNearloc(wrkMast.getLocNo());
-// if (null != locMast0) {
-// // 娴呭簱浣嶇鍚堝昂瀵告娴�
-// if (VersionUtils.checkLocType(locMast0, locTypeDto)) {
-// locMast = locMast0;
-// break;
-// }
-// }
-// }
-// if (Cools.isEmpty(locMast)){
-// List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
-// .eq("loc_sts", "O"));
-// if (locMasts.size() > 0) {
-// for (LocMast loc : locMasts) {
-// LocMast locMast0 = locMastService.findNearloc(loc.getLocNo());
-// if (null != locMast0) {
-// // 娴呭簱浣嶇鍚堝昂瀵告娴�
-// if (VersionUtils.checkLocType(locMast0, locTypeDto)) {
-// locMast = locMast0;
-// break;
-// }
-// }
-// }
-// }
-// }
-// }
-//
-// return locMast;
-// }
-//
-// // 鎼滅储娣锋斁
-// private LocMast getLocNoStepMixed(List<String> matNos, LocTypeDto locTypeDto, int times) {
-// LocMast locMast = null;
-//
-// if (matNos.size() > 1) {
-// List<LocMast> locMasts = locMastService.selectAreaEmpty(locTypeDto.getLocType1(), 1);//鎼滅储娣锋斁搴撲綅
-// //娣锋斁鍖哄煙鐩存帴鍙栫涓�涓嵆鍙�
-// for (LocMast mast : locMasts) {
-// //棰勭暀绌哄簱浣�
-// if (locMastService.checkEmptyCount(mast, 10)) {
-// locMast = mast;
-// break;
-// }
-// }
-// }
-//
-// // 2.搴撲綅褰撳墠鎵�灞炲昂瀵告棤绌哄簱浣嶆椂锛岃皟鏁村昂瀵稿弬鏁帮紝鍚戜笂鍏煎妫�绱㈠簱浣�
-// if (Cools.isEmpty(locMast)) {
-// log.error("绯荤粺娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", JSON.toJSONString(locTypeDto), times);
-// }
-//
-// return locMast;
-// }
-//
-// // 鎼滅储鍗曞搧
-// private LocMast getLocNoStepSingle(List<String> matNos, LocTypeDto locTypeDto) {
-// LocMast locMast = null;
-// // 1.鍏堟悳绱㈠崟鍝�
-// if (matNos.size() == 1) {
-// //鍗曞搧
-// List<LocMast> locMasts = locMastService.selectAreaEmpty(locTypeDto.getLocType1(), 2);//鎼滅储鍗曞搧搴撲綅
-//
-// for (LocMast mast : locMasts) {
-// List<String> groupLoc = Utils.getGroupLoc(mast.getLocNo());
-// if (!locMastService.checkAllLocEmpty(groupLoc)) {
-// continue;
-// }
-//
-// LocMast tmp = null;
-// for (String loc : groupLoc) {
-// LocMast locMast1 = locMastService.selectByLoc(loc);
-// if (locMast1 == null) {
-// continue;
-// }
-//
-// if (!locMast1.getLocSts().equals("O")) {
-// continue;
-// }
-//
-// tmp = locMast1;
-// break;
-// }
-//
-// //棰勭暀绌哄簱浣�
-// if (tmp != null && locMastService.checkEmptyCount(mast, 10)) {
-// locMast = tmp;
-// break;
-// }
-// }
-//
-// if (locMast == null) {
-// //鍗曞搧鎵句笉鍒板簱浣嶏紝鍏佽灏濊瘯浠庢贩鏀惧尯鍩熶腑杩涜鎼滅储
-// List<LocMast> locMasts2 = locMastService.selectAreaEmpty(locTypeDto.getLocType1(), 1);//鎼滅储鍗曞搧搴撲綅
-// //娣锋斁鍖哄煙鐩存帴鍙栫涓�涓嵆鍙�
-// for (LocMast mast : locMasts2) {
-// //棰勭暀绌哄簱浣�
-// if (locMastService.checkEmptyCount(mast, 10)) {
-// locMast = mast;
-// break;
-// }
-// }
-// }
-// }
-//
-// return locMast;
-// }
-//
-// /*
-// 搴撳瓨瑙勫垯鎼滅储鍒扮殑搴撲綅纭
-// */
-// private LocMast locFilter(List<LocMast> locMasts,List<String> matNos,LocTypeDto locTypeDto){
-// for (LocMast locMast0 : locMasts) {
-// if(!VersionUtils.checkLocType(locMast0,locTypeDto)){
-// continue;
-// }
-// //鍗曞搧鐗╂枡
-// if (matNos.size() == 1) {
-// //濡傛灉涓嶆槸娣辨祬锛屽垯鐩存帴杩斿洖褰撳墠搴撲綅
-// if(Cools.isEmpty(Utils.getGroupDeepLoc(locMast0.getLocNo()))){
-// return locMast0;
-// }else{
-// List<String> groupInnerLoc = Utils.getGroupInnerLoc(locMast0.getLocNo());
-// //濡傛灉鏄繁娴呭簱浣嶏紝浣嗘槸鍐呮祴鏃犲簱浣嶇殑鎯呭喌涓嬶紝鍒欑洿鎺ヨ繑鍥炲綋鍓嶅簱浣�
-// if (Cools.isEmpty(groupInnerLoc)) {
-// return locMast0;
-// }else {
-// //鑾峰彇鏈�娣辩殑搴撲綅
-// String loc = groupInnerLoc.get(groupInnerLoc.size() - 1);
-// LocMast locMast1 = locMastService.selectByLoc(loc);
-// //濡傛灉鏈�娣辨祴搴撲綅涓虹┖搴撲綅锛屽垯鐩存帴杩斿洖鏈�娣卞簱浣�
-// if("O".equals(locMast1.getLocSts())){
-// return locMast1;
-// }else {
-// //濡傛灉鏈�娣卞簱浣嶇姸鎬佷笉涓篎鎴栬�匫锛屽垯璺冲嚭褰撳墠鐨勬繁娴呭簱浣嶆煡鎵�
-// if(!"F".equals(locMast1.getLocSts())){
-// continue;
-// }
-// List<LocDetl> locDetls = locDetlService.selectByLocNo(loc);
-// //濡傛灉褰撳墠娣卞簱浣嶇墿鏂欎笌鍏ュ簱鐗╂枡涓嶇浉绗︼紝鍒欒烦鍑哄綋鍓嶆繁娴呭簱浣嶆煡鎵�
-// if(!Cools.eq(locDetls.get(0).getMatnr(),matNos.get(0))){
-// continue;
-// }
-// //浠庨噷寰�澶栦緷娆¢亶鍘嗚缁勬繁娴呭簱浣�
-// for (int i=groupInnerLoc.size()-1; i>=0 ;i--){
-// LocMast locMast2 = locMastService.selectByLoc(groupInnerLoc.get(i));
-// if("O".equals(locMast2.getLocSts())){
-// //濡傛灉娣卞簱浣嶄腑鍚湁0鐘舵�佺殑搴撲綅锛屽垯鐩存帴杩斿洖璇ュ簱浣�
-// return locMast2;
-// }else if("F".equals(locMast2.getLocSts())){
-// //濡傛灉瀵逛簬locaMast0鏈�杩戠殑涓�涓簱浣嶄篃涓篎鐘舵�侊紝鍒欒繑鍥瀕ocaMastO
-// if(i==0){
-// return locMast0;
-// }else {
-// //濡傛灉璇ョ粍娣辨祬搴撲綅涓惈鏈夋棦涓嶄负F涔熶笉涓篛鐨勫簱浣嶏紝鍒欒烦鍑哄綋鍓嶆繁娴呭簱浣嶆煡鎵�
-// continue;
-// }
-// }else {
-// break;
-// }
-// }
-// }
-//
-// }
-// }
-// }else {
-// if(Cools.isEmpty(Utils.getGroupDeepLoc(locMast0.getLocNo()))){
-// return locMast0;
-// }
-// }
-//
-// }
-// return null;
-// }
-//
-// //杩斿洖dto
-// private StartupDto getLocNoStep6(Integer staDescId, Integer sourceStaNo, LocMast locMast) {
-// StartupDto startupDto = new StartupDto();
-// String locNo = locMast.getLocNo();
-// // 鑾峰彇鐩爣绔�
-// Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
-// .eq("type_no", staDescId)
-// .eq("stn_no", sourceStaNo)
-// .eq("crn_no",Utils.stnNoToLiftNo(sourceStaNo));//鍊熺敤鍫嗗灈鏈哄彿瀛楁鍏呭綋鎻愬崌鏈哄彿
-// StaDesc staDesc = staDescService.selectOne(wrapper);
-// if (Cools.isEmpty(staDesc)) {
-// log.error("鍏ュ簱璺緞涓嶅瓨鍦�, staDescId={}, sourceStaNo={}", staDescId, sourceStaNo);
-// throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
-// }
-//
-// // 妫�娴嬬洰鏍囩珯
-// BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn());
-// if (!staNo.getAutoing().equals("Y")) {
-// throw new CoolException("鐩爣绔�" + staDesc.getCrnStn() + "涓嶅彲鐢�");
-// }
-//
-// // 鐢熸垚宸ヤ綔鍙�
-// int workNo = getWorkNo(0);
-// // 杩斿洖dto
-// startupDto.setWorkNo(workNo);
-// startupDto.setSourceStaNo(sourceStaNo);
-// startupDto.setStaNo(staNo.getDevNo());
-// startupDto.setLocNo(locMast.getLocNo());
-// return startupDto;
-// }
+ 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,WHS_TYPE);
+ 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 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::getHostId,hostId);
+ StaDesc staDesc = staDescService.getOne(wrapper);
+ if (staDesc == null) {
+ throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+ }
+
+ //鎵剧浉鍚岀┖鎵樼洏
+ LambdaQueryWrapper<LocMast> wrapper0 = new LambdaQueryWrapper<LocMast>()
+ .eq(LocMast::getLocSts, "D")
+ .eq(LocMast::getLocType1, locTypeDto.getLocType1())
+ .eq(LocMast::getCrnNo, staDesc.getDeviceNo())
+ .eq(LocMast::getWhsType, WHS_TYPE)
+ .eq(LocMast::getHostId, hostId);
+
+ LambdaQueryWrapper<LocMast> wrapper1 = new LambdaQueryWrapper<LocMast>()
+ .eq(LocMast::getLocSts, "O")
+ .eq(LocMast::getLocType1, locTypeDto.getLocType1())
+ .eq(LocMast::getCrnNo, staDesc.getDeviceNo())
+ .eq(LocMast::getWhsType, WHS_TYPE)
+ .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> locMasts0 = locMastService.list(wrapper0);
+ if (!locMasts0.isEmpty()) {
+ for (LocMast loc : locMasts0) {
+ LocMast locMast0 = locMastService.findNearloc(loc.getLocNo(), hostId, locRangeDto);
+ if (null != locMast0) {
+ locMast = locMast0;
+ break;
+ }
+ }
+ }
+
+ if (locMast == null) {
+ List<LocMast> locMasts = locMastService.list(wrapper1);
+ if (!locMasts.isEmpty()) {
+ for (LocMast loc : locMasts) {
+ LocMast locMast0 = locMastService.findNearloc(loc.getLocNo(), hostId, locRangeDto);
+ if (null != locMast0) {
+ locMast = locMast0;
+ break;
+ }
+ }
+ }
+ }
+
+ if (locMast == null) {
+ throw new CoolException("缂哄皯绌哄簱浣�");
+ }
+ }
+ return locMast;
+ }
+
+ // 鎼滅储鍗曞搧(鏁翠釜搴撲綅缁�)
+ private LocMast getLocNoStepSingle(LocTypeDto locTypeDto, Integer staDescId, Integer sourceStaNo, Long hostId) {
+ LocMast locMast = null;
+ // 鑾峰彇鐩爣绔�
+ 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("鍏ュ簱璺緞涓嶅瓨鍦�");
+ }
+
+ RowLastno rowLastno = rowLastnoService.getOne(new LambdaQueryWrapper<RowLastno>().eq(RowLastno::getWhsType, 1).eq(RowLastno::getHostId, hostId));
+ if (Cools.isEmpty(rowLastno)) {
+ throw new CoolException("1鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
+ }
+
+ int curRow = rowLastno.getCurrentRow();
+ int sRow = rowLastno.getStartRow();
+ int eRow = rowLastno.getTargetRow();
+
+ LambdaQueryWrapper<LocMast> wrapper1 = new LambdaQueryWrapper<LocMast>()
+ .eq(LocMast::getLocSts, "O")
+ .eq(LocMast::getHostId, hostId)
+ .in(LocMast::getRow1, curRow)
+ .orderByAsc(LocMast::getLev1)
+ .orderByAsc(LocMast::getBay1);
+
+
+ //搴撲綅鎼滅储鑼冨洿
+ 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 innerLoc = null;
+ for (String loc : Utils.getGroupLoc(mast.getLocNo(), hostId)) {
+ LocMast one = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, loc).eq(LocMast::getHostId, hostId));
+ if (!one.getLocSts().equals("O")) {
+ innerLoc = null;
+ continue;
+ }
+
+ if (innerLoc == null) {
+ List<Integer> innerDeepRow = locDirectionService.getInnerDeepRow(hostId);
+ if (innerDeepRow.contains(one.getRow1())) {
+ innerLoc = one;
+ }
+ }
+ }
+
+ if(innerLoc == null) {
+ continue;
+ }
+
+ if (VersionUtils.checkLocType(innerLoc, locTypeDto)) {
+ locMast = innerLoc;
+ break;
+ }
+ }
+
+ curRow++;
+ if (curRow > eRow) {
+ curRow = sRow;
+ }
+ rowLastno.setCurrentRow(curRow);
+ rowLastnoService.updateById(rowLastno);
+ return locMast;
+ }
+
+ //杩斿洖dto
+ private StartupDto getLocNoStep6(Integer staDescId, Integer sourceStaNo, LocMast locMast) {
+ StartupDto startupDto = new StartupDto();
+ // 鑾峰彇鐩爣绔�
+ LambdaQueryWrapper<StaDesc> wrapper = new LambdaQueryWrapper<StaDesc>()
+ .eq(StaDesc::getTypeNo, staDescId)
+ .eq(StaDesc::getStnNo, sourceStaNo);
+ StaDesc staDesc = staDescService.getOne(wrapper);
+ if (Cools.isEmpty(staDesc)) {
+ log.error("鍏ュ簱璺緞涓嶅瓨鍦�, staDescId={}, sourceStaNo={}", staDescId, sourceStaNo);
+ throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+ }
+
+ // 妫�娴嬬洰鏍囩珯
+ BasDevp staNo = basDevpService.getById(staDesc.getDeviceStn());
+ if (!staNo.getAutoing().equals("Y")) {
+ throw new CoolException("鐩爣绔�" + staDesc.getDeviceStn() + "涓嶅彲鐢�");
+ }
+
+ // 鐢熸垚宸ヤ綔鍙�
+ int workNo = getWorkNo(0);
+ // 杩斿洖dto
+ startupDto.setWorkNo(workNo);
+ startupDto.setSourceStaNo(sourceStaNo);
+ startupDto.setStaNo(staNo.getDevNo());
+ startupDto.setLocNo(locMast.getLocNo());
+ startupDto.setCrnNo(locMast.getCrnNo());
+ return startupDto;
+ }
}
--
Gitblit v1.9.1