From 6d077ee150e66d50f56c61670f97d2baaa1b61a2 Mon Sep 17 00:00:00 2001 From: lty <876263681@qq.com> Date: 星期二, 05 八月 2025 16:59:53 +0800 Subject: [PATCH] #许可证2.0 --- src/main/java/com/zy/common/service/CommonService.java | 65 +++++++++++++++++++++----------- 1 files changed, 43 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java index 8bede90..f6d0189 100644 --- a/src/main/java/com/zy/common/service/CommonService.java +++ b/src/main/java/com/zy/common/service/CommonService.java @@ -26,6 +26,7 @@ import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; +import java.util.Optional; /** * 璐ф灦鏍稿績鍔熻兘 @@ -157,6 +158,39 @@ } + private Optional<CrnRowInfo> findAvailableCrnAndNearRow(RowLastno rowLastno, int curRow, int crnNumber, int times, + FindLocNoAttributeVo findLocNoAttributeVo, LocTypeDto locTypeDto, + RowLastnoType rowLastnoType) { + int attempt = times; + while (attempt < crnNumber * 2) { + int[] params = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber); + curRow = params[1]; + int crnNo = params[2]; + if (!basCrnpService.checkSiteError(crnNo, true)) { + attempt++; + continue; + } + int rowCount = params[0]; + int nearRow = params[3]; + + // 鍙彇鏁伴噺鍒ゆ柇锛岄伩鍏嶆媺鏁� list + int availableLocCount = locMastService.selectCount(new EntityWrapper<LocMast>() + .eq("row1", nearRow) + .eq("loc_sts", "O") + .eq("whs_type", rowLastnoType.getType().longValue())); + int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>() + .eq("crn_no", crnNo).le("io_type", 100)); + if (availableLocCount - crnCountO <= 2) { // 鍙互鎻愭垚甯搁噺锛屾瘮濡� MIN_SPARE_SLOTS = 2 + log.error("{}鍙峰爢鍨涙満娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", crnNo, JSON.toJSONString(locTypeDto), attempt); + attempt++; + continue; + } + return Optional.of(new CrnRowInfo(crnNo, nearRow, curRow, rowCount, attempt)); + } + return Optional.empty(); + } + + /** * 妫�绱㈠簱浣嶅彿 @@ -207,30 +241,17 @@ } //姝ょ▼搴忕敤浜庝紭鍖栧爢鍨涙満寮傚父鏃剁殑杩愯鏃堕棿 - for (int i = times; i < crnNumber * 2; i++) { - int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber); - curRow = locNecessaryParameters[1]; - crnNo = locNecessaryParameters[2]; - if (basCrnpService.checkSiteError(crnNo, true)) { - rowCount = locNecessaryParameters[0]; - nearRow = locNecessaryParameters[3]; - List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>() - .eq("row1", nearRow).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue())); - int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).le("io_type", 100)); - if (locMasts.size() - crnCountO <= 2) { - log.error(crnNo + "鍙峰爢鍨涙満娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", JSON.toJSONString(locTypeDto), times); - nearRow = 0; - times++; - continue; - } - break; - } else { - times++; - } - } - if (nearRow == 0) { + Optional<CrnRowInfo> infoOpt = findAvailableCrnAndNearRow(rowLastno, curRow, crnNumber, times, findLocNoAttributeVo, locTypeDto, rowLastnoType); + if (!infoOpt.isPresent()) { throw new CoolException("鏃犲彲鐢ㄥ爢鍨涙満"); } + CrnRowInfo info = infoOpt.get(); + crnNo = info.getCrnNo(); + nearRow = info.getNearRow(); + curRow = info.getCurRow(); + rowCount = info.getRowCount(); + times = info.getTimes(); + boolean signRule1 = false; boolean signRule2 = false; -- Gitblit v1.9.1