From a68f64232c3f3ad22d27f9b5c89fe761c8a56280 Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期二, 28 四月 2026 13:16:13 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/common/service/CommonService.java | 258 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 254 insertions(+), 4 deletions(-)
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index f3cf41c..642f3c5 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -9,6 +9,7 @@
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.result.FindLocNoAttributeVo;
import com.zy.asrs.entity.result.KeyValueVo;
+import com.zy.asrs.mapper.LocDetlMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.Utils;
import com.zy.asrs.utils.VersionUtils;
@@ -53,6 +54,8 @@
private LocMastService locMastService;
@Autowired
private LocDetlService locDetlService;
+ @Autowired
+ private LocDetlMapper locDetlMapper;
@Autowired
private SlaveProperties slaveProperties;
@Autowired
@@ -134,9 +137,9 @@
*/
switch (rowLastnoType.getType()) {
case 1:
- return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
+ return getLocNoRunV3(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
case 2:
- return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
+ return getLocNoRunV3(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
case 3:
log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo);
break;
@@ -144,6 +147,32 @@
return getLocNoRun4(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 4, locTypeDto, 0);
case 5:
return getLocNoRun5(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, 0, locTypeDto, 0);
+ default:
+ log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo);
+ break;
+ }
+
+ } catch (Exception e) {
+ log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo);
+ }
+ return null;
+ }
+
+
+ @Transactional
+ public StartupDto getLocNoV2(Integer staDescId, Integer sourceStaNo, WrkMast wrkMast, LocTypeDto locTypeDto) {
+ try {
+ Integer whsType = 1;
+ RowLastno rowLastno = rowLastnoService.selectById(whsType);
+ RowLastnoType rowLastnoType = rowLastnoTypeService.selectById(rowLastno.getTypeId());
+ /**
+ * 搴撳瀷 1: 鏍囧噯鍫嗗灈鏈哄簱 2: 鍚屽贩閬撴壘搴撲綅
+ */
+ switch (rowLastnoType.getType()) {
+ case 1:
+ return getLocNoRunV2(whsType, staDescId, sourceStaNo, wrkMast, 0, locTypeDto, 0);
+ case 2:
+ return getLocNoRunV2(whsType, staDescId, sourceStaNo, wrkMast, 0, locTypeDto, 0);
default:
log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�", sourceStaNo);
break;
@@ -212,8 +241,10 @@
.eq("deleted", 0)
.eq("whs_type", 1)
.orderBy("lev1,bay1"));
- if (Cools.isEmpty(locMasts) || locMasts.size() > 15) {
- locMast = locMasts.get(0);
+ if (!Cools.isEmpty(locMasts)) {
+ if (locMasts.size() > 15) {
+ locMast = locMasts.get(0);
+ }
}
}
int crnNo1 = crnNo + 1;
@@ -257,6 +288,225 @@
return startupDto;
}
+ @Transactional
+ public StartupDto getLocNoRunV3(Integer whsType, Integer staDescId, Integer sourceStaNo, FindLocNoAttributeVo findLocNoAttributeVo, Integer moveCrnNo, LocTypeDto locTypeDto, int times) {
+ StartupDto startupDto = new StartupDto();
+
+ // 鍒濆鍖栧弬鏁�
+ int crnNo = 0; //鍫嗗灈鏈哄彿
+ LocMast locMast = null; // 鐩爣搴撲綅
+ RowLastno whsType1 = rowLastnoService.selectOne(new EntityWrapper<RowLastno>().eq("whs_type", 2));
+ crnNo = whsType1.getCrnQty();
+ String matnr = findLocNoAttributeVo == null ? null : findLocNoAttributeVo.getMatnr();
+ Integer chosenCrnNo = null;
+ Integer chosenCount = null;
+ LocMast chosenLocMast = null;
+ int sCrnNo = whsType1.getsCrnNo();
+ int eCrnNo = whsType1.geteCrnNo();
+ List<Integer> candidates = new ArrayList<>();
+ for (int i = crnNo; i <= eCrnNo; i++) {
+ candidates.add(i);
+ }
+ for (int i = sCrnNo; i < crnNo; i++) {
+ candidates.add(i);
+ }
+ if(staDescId != 10){
+ for (Integer candidate : candidates) {
+ if (!basCrnpService.checkSiteError(candidate, true)) {
+ continue;
+ }
+ StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
+ .eq("type_no", staDescId)
+ .eq("stn_no", sourceStaNo)
+ .eq("crn_no", candidate));
+ if (Cools.isEmpty(staDesc)) {
+ continue;
+ }
+ List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+ .eq("crn_no", candidate)
+ .eq("loc_sts", "O")
+ .eq("frozen", 0)
+ .eq("deleted", 0)
+ .eq("whs_type", 1)
+ .orderBy("lev1,bay1"));
+ if (Cools.isEmpty(locMasts) || locMasts.size() <= 10) {
+ continue;
+ }
+ Integer count = null;
+ if (!Cools.isEmpty(matnr)) {
+ count = locDetlMapper.countMatnrByCrnNo(candidate, matnr);
+ }
+ if (count == null) {
+ count = 0;
+ }
+ if (chosenCrnNo == null || count < chosenCount) {
+ chosenCrnNo = candidate;
+ chosenCount = count;
+ chosenLocMast = locMasts.get(0);
+ }
+ }
+ }
+
+ if (chosenCrnNo != null) {
+ crnNo = chosenCrnNo;
+ locMast = chosenLocMast;
+ } else
+// else if (basCrnpService.checkSiteError(crnNo, true))
+ {//鑻ヨ疆璇㈡壘涓嶅埌鏁伴噺鏈�灏戠殑宸烽亾锛岄��鍥炲師鏉ユ柟娉�
+ BasCrnp basCrnp = basCrnpService.selectById(crnNo);
+ List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+ .eq("crn_no", basCrnp.getCrnNo())
+ .eq("loc_sts", "O")
+ .eq("frozen", 0)
+ .eq("deleted", 0)
+ .eq("whs_type", 1)
+ .orderBy("lev1,bay1"));
+ if (!Cools.isEmpty(locMasts)) {
+ if (locMasts.size() > 10) {
+ locMast = locMasts.get(0);
+ }
+ }
+ }
+ int crnNo1 = crnNo + 1;
+ if (crnNo1> whsType1.geteCrnNo()) {
+ crnNo1 = whsType1.getsCrnNo();
+ }
+ whsType1.setCrnQty(crnNo1);
+ rowLastnoService.updateById(whsType1);
+
+ Wrapper<StaDesc> wrapper = null;
+ StaDesc staDesc = null;
+ // 鑾峰彇鐩爣绔�
+ 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("鍏ュ簱璺緞涓嶅瓨鍦╰ype_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo);
+ }
+ // 閫掑綊鏌ヨ
+ if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("O")) {
+ // 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
+ if (times < 5) {
+ times = times + 1;
+ return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, moveCrnNo, locTypeDto, times);
+ }
+ 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.setLocNo(locNo);
+ startupDto.setStaNo(staDesc.getCrnStn());
+ return startupDto;
+ }
+
+ /**
+ * 褰撳洖婧愬簱浣嶄笉鍦ㄦ湰宸烽亾鏃讹紝閲嶆柊妫�绱㈠贩閬撴牴鎹�1锛�2宸烽亾涔嬮棿鍒嗛厤锛�3锛�4宸烽亾鍏ㄥ眬鍒嗛厤瑙勫垯
+ */
+ @Transactional
+ public StartupDto getLocNoRunV2(Integer whsType, Integer staDescId, Integer sourceStaNo, WrkMast wrkMast, Integer moveCrnNo, LocTypeDto locTypeDto, int times) {
+ StartupDto startupDto = new StartupDto();
+ List<WrkDetl> wrkDetl = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
+ WrkDetl detl = null;
+ if(!wrkDetl.isEmpty()){
+ detl = wrkDetl.get(0);
+ }
+ String matnr = detl == null ? null : detl.getMatnr();
+ Integer sourceCrnNo = null;
+ if (moveCrnNo != null && moveCrnNo != 0) {
+ sourceCrnNo = moveCrnNo;
+ } else if (wrkMast != null && !Cools.isEmpty(wrkMast.getSourceLocNo())) {
+ LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo());
+ if (!Cools.isEmpty(sourceLoc) && sourceLoc.getCrnNo() != null) {
+ sourceCrnNo = sourceLoc.getCrnNo();
+ }
+ } else if (wrkMast != null && wrkMast.getCrnNo() != null) {
+ sourceCrnNo = wrkMast.getCrnNo();
+ }
+ int[] candidates = sourceCrnNo != null && sourceCrnNo < 3 ? new int[]{1, 2} : new int[]{1, 2, 3, 4};
+ Integer chosenCrnNo = null;
+ Integer chosenCount = null;
+ for (int candidate : candidates) {
+ if (sourceCrnNo != null && candidate == sourceCrnNo) {
+ continue;
+ }
+ //鍒ゆ柇璇ュ贩閬撴槸鍚﹀瓨鍦ㄧ┖浣�
+ LocMast candidateLoc = locMastService.selectOne(new EntityWrapper<LocMast>()
+ .eq("crn_no", candidate)
+ .eq("loc_sts", "O")
+ .eq("frozen", 0)
+ .eq("deleted", 0)
+ .eq("whs_type", 1)
+ .orderBy("lev1,bay1"));
+ if (Cools.isEmpty(candidateLoc)) {
+ continue;
+ }
+ Integer count = null;
+ if (!Cools.isEmpty(matnr)) {
+ count = locDetlMapper.countMatnrByCrnNo(candidate, matnr); //璁$畻姣忎釜宸烽亾鐨勫搴旂墿鏂欏崰澶氬皯搴撲綅
+ }
+ if (count == null) {
+ count = 0;
+ }
+ if (chosenCrnNo == null || count < chosenCount) {
+ chosenCrnNo = candidate;
+ chosenCount = count;
+ }
+ }
+ LocMast locMast = null;
+ if (chosenCrnNo != null) {
+ locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+ .eq("crn_no", chosenCrnNo)
+ .eq("loc_sts", "O")
+ .eq("frozen", 0)
+ .eq("deleted", 0)
+ .eq("whs_type", 1)
+ .orderBy("lev1,bay1"));
+ }
+ if (Cools.isEmpty(locMast)) {
+ List<LocMast> anyLocs = locMastService.selectList(new EntityWrapper<LocMast>()
+ .eq("loc_sts", "O")
+ .eq("frozen", 0)
+ .eq("deleted", 0)
+ .eq("whs_type", 1)
+ .orderBy("lev1,bay1"));
+ if (!Cools.isEmpty(anyLocs)) {
+ for (LocMast anyLoc : anyLocs) {
+ if (anyLoc == null || anyLoc.getCrnNo() == null) {
+ continue;
+ }
+ if (sourceCrnNo != null && sourceCrnNo.equals(anyLoc.getCrnNo())) {
+ continue;
+ }
+ if (!basCrnpService.checkSiteError(anyLoc.getCrnNo(), true)) {
+ continue;
+ }
+ chosenCrnNo = anyLoc.getCrnNo();
+ locMast = anyLoc;
+ break;
+ }
+ }
+ }
+
+ if (Cools.isEmpty(locMast)) {
+ throw new CoolException("娌℃湁绌哄簱浣�");
+ }
+ String locNo = locMast.getLocNo();
+ int workNo = getWorkNo(0);
+ startupDto.setWorkNo(workNo);
+ startupDto.setCrnNo(chosenCrnNo);
+ startupDto.setLocNo(locNo);
+ return startupDto;
+ }
+
public StartupDto getLocNoRun4(Integer whsType, Integer staDescId, Integer sourceStaNo, FindLocNoAttributeVo findLocNoAttributeVo, Integer moveCrnNo, LocTypeDto locTypeDto, int times) {
// 鍒濆鍖栧弬鏁�
--
Gitblit v1.9.1