From 053d403d024d9f6cf578ed5ca51800e60b7894ba Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期五, 16 一月 2026 08:45:06 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java | 379 ++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 296 insertions(+), 83 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index 08ba104..131caf8 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -190,12 +190,80 @@
throw new CoolException("搴撳瓨涓嶅瓨鍦�");
}
}
+ /**
+ * 妫�鏌ユ繁搴撲綅鍓嶆柟鏄惁鍫靛锛堟寜 locGroupAscOrder 閰嶇疆鐨勫垎缁勫拰椤哄簭妫�鏌ワ級
+ * 鍙鏌ュ悓涓� bay + lev + 褰撳墠鍒嗙粍 rowList 鍐咃紝鍓嶆柟浣嶇疆鏄惁鏈夎揣(F) 鎴� 鍏ュ簱浠诲姟
+ *
+ * @param locMast 褰撳墠搴撲綅涓绘。
+ * @param locNo 褰撳墠搴撲綅鍙�
+ * @param locGroupAscOrder 鍑哄簱浼樺厛鍒嗙粍閰嶇疆
+ * @throws CoolException 濡傛灉鍓嶆柟鏈夎揣鎴栧叆搴撲换鍔�
+ */
+ private void checkDeepPositionBlocking(LocMast locMast, String locNo, List<LocGroupOrder> locGroupAscOrder) {
+ // 鏌ユ壘褰撳墠 row 鎵�灞炲垎缁�
+ LocGroupOrder currentGroup = locGroupAscOrder.stream()
+ .filter(g -> g.getRowList().contains(locMast.getRow1()))
+ .findFirst()
+ .orElseThrow(() -> new CoolException("褰撳墠鎺掍笉鍦ㄤ换浣曞嚭搴撲紭鍏堝垎缁勪腑锛屾棤娉曡繘琛屾繁搴撲綅妫�鏌�: row=" + locMast.getRow1()));
+
+ List<Integer> orderedRows = currentGroup.getRowList();
+
+ // 鏌ヨ鍚屼竴 bay + lev + 鏈粍 rowList 鍐呯殑鎵�鏈夊簱浣�
+ List<LocMast> sameBayLevLocs = locMastService.selectList(new EntityWrapper<LocMast>()
+ .eq("bay1", locMast.getBay1())
+ .eq("lev1", locMast.getLev1())
+ .in("row1", orderedRows));
+
+ // 鎸夐厤缃『搴忛噸鏂版帓鍒�
+ List<LocMast> orderedLocs = orderedRows.stream()
+ .map(row -> sameBayLevLocs.stream()
+ .filter(lm -> lm.getRow1().equals(row))
+ .findFirst()
+ .orElse(null))
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+
+ // 閬嶅巻妫�鏌ュ墠鏂�
+ boolean foundSelf = false;
+ for (LocMast prevLoc : orderedLocs) {
+ if (prevLoc.getLocNo().equals(locNo)) {
+ foundSelf = true;
+ break; // 鍒拌揪鑷繁浣嶇疆锛屽仠姝�
+ }
+
+ // 鍓嶆柟鏈夎揣锛團鐘舵�侊級
+ if ("F".equals(prevLoc.getLocSts())) {
+ throw new CoolException(locNo + " 鐨勫墠鏂逛綅缃� " + prevLoc.getLocNo() + " 鏈夎揣锛岀姝㈠嚭搴�");
+ }
+
+ // 鍓嶆柟鏈夊叆搴撲换鍔★紙鍋囪 io_type=100 涓哄叆搴擄紝鏍规嵁瀹為檯璋冩暣锛�
+ // 杩欓噷鍙煡寰呭彂閫佺殑浠诲姟锛坵rk_sts=0锛夛紝鍙牴鎹渶瑕佸姞 wrk_sts=1 绛�
+ WrkMast frontTask = wrkMastService.selectOne(
+ new EntityWrapper<WrkMast>()
+ .eq("source_loc_no", prevLoc.getLocNo()) // 鍏ュ簱浠诲姟鐨勬簮浣嶇疆
+ .eq("io_type", 100) // 鍏ュ簱绫诲瀷锛堣纭浣犵殑绯荤粺瀹氫箟锛�
+ .eq("wrk_sts", 0L) // 寰呭彂閫�
+ );
+
+ if (frontTask != null) {
+ throw new CoolException(locNo + " 鐨勫墠鏂逛綅缃� " + prevLoc.getLocNo() + " 瀛樺湪鍏ュ簱浠诲姟锛岀姝㈠嚭搴�");
+ }
+ }
+
+ if (!foundSelf) {
+ throw new CoolException("鍒嗙粍鍐呮湭鎵惧埌鐩爣搴撲綅锛岃妫�鏌ユ暟鎹竴鑷存��: " + locNo);
+ }
+ }
@Override
@Transactional
public void stockOut(BasDevp staNo, List<LocDetlDto> locDetlDtos, IoWorkType ioWorkType, Long userId) {
Date now = new Date();
- // 鍚堝苟鍚岀被椤�
+
+ // 浠庨厤缃幏鍙栧垎缁勶紙鍜岀┖鏉垮嚭搴撲繚鎸佷竴鑷达級
+ List<LocGroupOrder> locGroupAscOrder = slaveProperties.getLocGroupAscOrder();
+
+ // 鍚堝苟鍚岀被椤癸紙鐩稿悓 locNo 鐨勬槑缁嗗悎骞讹級
Set<String> locNos = new HashSet<>();
List<OutLocDto> dtos = new ArrayList<>();
for (LocDetlDto locDetlDto : locDetlDtos) {
@@ -212,59 +280,47 @@
dtos.add(new OutLocDto(locNo, locDetlDto));
}
}
+
Integer ioType = null;
- // 鎸夊垪鍜屽眰鍒嗙粍搴撲綅
+ // 鎸夊垪鍜屽眰鍒嗙粍搴撲綅锛坆ay + lev锛�
Map<String, List<OutLocDto>> locGroups = dtos.stream()
.collect(Collectors.groupingBy(dto -> {
String column = dto.getLocNo().substring(3, 6); // 鍒楀彿
- String level = dto.getLocNo().substring(6); // 灞傚彿
- return column + "-" + level; // 缁勫悎鎴愬敮涓�鐨勭粍鏍囪瘑
+ String level = dto.getLocNo().substring(6); // 灞傚彿
+ return column + "-" + level;
}));
// 閬嶅巻姣忕粍
for (Map.Entry<String, List<OutLocDto>> entry : locGroups.entrySet()) {
- String groupKey = entry.getKey(); // 缁勬爣璇嗭紝渚嬪 "003-02" 琛ㄧず绗�3鍒楃2灞�
List<OutLocDto> groupDtos = entry.getValue();
- // 缁勫唴浼樺厛绾ч噸鏂颁粠100寮�濮�
+ // 缁勫唴浼樺厛绾ч噸鏂颁粠100寮�濮嬶紙鍘熸湁閫昏緫锛�
double priority = 100;
- // 鎺掑簭缁勫唴搴撲綅锛堟帓鍙峰�掑簭锛�
+ // 鎺掑簭缁勫唴搴撲綅锛堟帓鍙峰�掑簭锛屽師鏈夐�昏緫锛�
groupDtos.sort(Comparator.comparing((OutLocDto dto) -> Integer.valueOf(dto.getLocNo().substring(0, 2))).reversed());
for (OutLocDto dto : groupDtos) {
String locNo = dto.getLocNo();
- // 娣卞簱浣嶈鍒欐鏌ワ紝浠呮鏌ュ綋鍓嶅垪鍜屽眰鍐呯殑鍓嶅簱浣�
- int currentRow = Integer.valueOf(locNo.substring(0, 2));
- for (int i = currentRow + 1; i <= 5; i++) { // 娣卞簱浣嶄负 1-5 鎺�
- String frontLoc = String.format("%02d%s", i, locNo.substring(2));
- LocMast locMastFront = locMastService.selectOne(new EntityWrapper<LocMast>()
- .eq("loc_no", frontLoc).eq("loc_sts", "F"));
- if (!Cools.isEmpty(locMastFront)) {
- throw new CoolException(locNo + " 鐨勫墠搴撲綅 " + frontLoc + " 鏈夎揣");
- }
-
- // 鍒ゆ柇鍓嶅簱浣嶆槸鍚︽湁鍏ュ簱浠诲姟
- WrkMast wrkMastFront = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("loc_no", frontLoc));
- if (!Cools.isEmpty(wrkMastFront)) {
- throw new CoolException(locNo + " 鐨勫墠搴撲綅 " + frontLoc + " 鏈夊叆搴撲换鍔�");
- }
- }
-
- // 璁$畻浼樺厛绾�
- dto.setPriority(priority);
- priority--;
-
- // 鑾峰彇搴撲綅
- LocMast locMast = locMastService.selectById(dto.getLocNo());
+ // 鑾峰彇搴撲綅淇℃伅锛堟彁鍓嶈幏鍙栵紝鐢ㄤ簬妫�鏌ュ拰鍚庣画浣跨敤锛�
+ LocMast locMast = locMastService.selectById(locNo);
if (Cools.isEmpty(locMast)) {
- throw new CoolException(dto.getLocNo() + "搴撲綅涓嶅瓨鍦�");
+ throw new CoolException(locNo + "搴撲綅涓嶅瓨鍦�");
}
if (!locMast.getLocSts().equals("F")) {
- throw new CoolException(dto.getLocNo() + "鎵樼洏闈炲湪搴撶姸鎬�");
+ throw new CoolException(locNo + "鎵樼洏闈炲湪搴撶姸鎬�");
}
+
+ // =====================================
+ // 娣卞簱浣嶅墠鏂瑰牭濉炴鏌ワ紙鏂伴�昏緫锛屾寜鍒嗙粍椤哄簭锛�
+ checkDeepPositionBlocking(locMast, locNo, locGroupAscOrder);
+ // =====================================
+
+ // 璁$畻浼樺厛绾э紙鍘熸湁閫昏緫锛�
+ dto.setPriority(priority);
+ priority--;
// 鍒ゆ柇鍏ュ嚭搴撶被鍨�
if (ioWorkType == null) {
@@ -281,7 +337,7 @@
// 鐢熸垚宸ヤ綔鍙�
int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
- String pick = ioType == 101 ? "N":"Y";
+ String pick = ioType == 101 ? "N" : "Y";
// 鐢熸垚宸ヤ綔妗�
WrkMast wrkMast = new WrkMast();
@@ -293,7 +349,7 @@
wrkMast.setCrnNo(locMast.getCrnNo());
wrkMast.setSourceStaNo(staDesc.getCrnStn());
wrkMast.setStaNo(staDesc.getStnNo());
- wrkMast.setSourceLocNo(dto.getLocNo());
+ wrkMast.setSourceLocNo(locNo);
wrkMast.setFullPlt("Y");
wrkMast.setPicking(pick);
wrkMast.setExitMk("N");
@@ -305,7 +361,7 @@
wrkMast.setModiUser(userId);
wrkMast.setModiTime(now);
if (!wrkMastService.insert(wrkMast)) {
- throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細" + dto.getLocNo());
+ throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細" + locNo);
}
// 鐢熸垚宸ヤ綔妗f槑缁�
@@ -330,16 +386,16 @@
}
// 淇敼搴撲綅鐘舵��
- locMast = locMastService.selectById(dto.getLocNo());
+ locMast = locMastService.selectById(locNo); // 閲嶆柊鑾峰彇鏈�鏂扮姸鎬�
if (locMast.getLocSts().equals("F")) {
locMast.setLocSts(ioType == 101 ? "R" : "P");
locMast.setModiUser(userId);
locMast.setModiTime(now);
if (!locMastService.updateById(locMast)) {
- throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + dto.getLocNo());
+ throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + locNo);
}
} else {
- throw new CoolException(dto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
+ throw new CoolException(locNo + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
}
}
}
@@ -485,40 +541,174 @@
}
return dto.getLocNo();
}
+ /**
+ * 妫�鏌ョ┖鏉垮嚭搴撳垎缁勫唴閫変腑杩炵画娈电殑鍙屽悜鍓嶆柟娓呯┖鎯呭喌锛屽苟杩斿洖鍑哄簱鏂瑰悜涓庢帓搴忓悗鐨勫簱浣嶅垪琛�
+ *
+ * @param selectedLocNos 閫変腑鐨勫簱浣嶅彿鍒楄〃
+ * @param locGroupAscOrder 鍑哄簱鍒嗙粍閰嶇疆
+ * @return LockingCheckResultParam 鍖呭惈鏍¢獙缁撴灉銆佹柟鍚戙�佹帓搴忓悗搴撲綅鍒楄〃
+ */
+ private LockingCheckResultParam checkEmptyPlateBlocking(
+ List<String> selectedLocNos,
+ List<LocGroupOrder> locGroupAscOrder) {
+ if (Cools.isEmpty(selectedLocNos)) {
+ return LockingCheckResultParam.success(Collections.emptyList());
+ }
+
+ // 1. 鏌ヨ鎵�鏈夐�変腑鐨勫簱浣嶄俊鎭�
+ List<LocMast> selectedMasts = locMastService.selectList(
+ new EntityWrapper<LocMast>().in("loc_no", selectedLocNos)
+ );
+
+ if (selectedMasts.size() != selectedLocNos.size()) {
+ return LockingCheckResultParam.fail("閮ㄥ垎閫変腑搴撲綅涓嶅瓨鍦ㄦ垨鏁版嵁寮傚父");
+ }
+
+ // 2. 鎸夊垎缁勮仛鍚堥�変腑鐨勫簱浣嶏紙鏀寔澶氬垎缁勶級
+ Map<LocGroupOrder, List<LocMast>> groupSelected = new HashMap<>();
+ for (LocMast lm : selectedMasts) {
+ LocGroupOrder group = locGroupAscOrder.stream()
+ .filter(g -> g.getRowList().contains(lm.getRow1()))
+ .findFirst()
+ .orElseThrow(() -> new CoolException("鎺掍笉鍦ㄥ嚭搴撳垎缁勯厤缃腑: row=" + lm.getRow1()));
+
+ groupSelected.computeIfAbsent(group, k -> new ArrayList<>()).add(lm);
+ }
+
+ // 鐢变簬閫氬父涓�娆¤姹傚湪涓�涓垎缁勫唴锛岃繖閲屽彇绗竴涓垎缁勭殑缁撴灉
+ // 濡傛灉闇�瑕佹敮鎸佸鍒嗙粍鍚屾椂鍑哄簱锛屽彲鏀逛负杩斿洖 Map<LocGroupOrder, LockingCheckResultParam>
+ LockingCheckResultParam result = null;
+
+ for (Map.Entry<LocGroupOrder, List<LocMast>> entry : groupSelected.entrySet()) {
+ LocGroupOrder group = entry.getKey();
+ List<LocMast> selected = entry.getValue();
+
+ List<Integer> fullRows = group.getRowList(); // 濡� [3,4,5,6,7,8,9,10]
+
+ // 鑾峰彇閫変腑鐨� row锛屽苟鎸夊垎缁勯『搴忔帓搴�
+ List<Integer> selectedRows = selected.stream()
+ .map(LocMast::getRow1)
+ .distinct()
+ .sorted(Comparator.comparingInt(fullRows::indexOf))
+ .collect(Collectors.toList());
+
+ // 妫�鏌ユ槸鍚﹂噸澶嶆垨鏃犳晥
+ if (selectedRows.size() != selected.size()) {
+ return LockingCheckResultParam.fail("閫変腑搴撲綅瀛樺湪閲嶅鎴栨棤鏁堟帓");
+ }
+
+ int minIndex = fullRows.indexOf(selectedRows.get(0));
+ int maxIndex = fullRows.indexOf(selectedRows.get(selectedRows.size() - 1));
+
+ // 1. 蹇呴』鏄繛缁锛堟棤缂哄彛锛�
+ if (maxIndex - minIndex + 1 != selectedRows.size()) {
+ return LockingCheckResultParam.fail(
+ "閫変腑鎺掑繀椤昏繛缁紝鏃犵己鍙c�備粠 " + fullRows.get(minIndex) + " 鍒� " + fullRows.get(maxIndex)
+ );
+ }
+
+ // 2. 妫�鏌ュ乏鍓嶆柟锛堟搴忔柟鍚戯細浠庡乏鍒板彸锛屽墠鏂规槸绱㈠紩灏忕殑浣嶇疆锛�
+ boolean leftClear = true;
+ for (int i = 0; i < minIndex; i++) {
+ LocMast prev = getLocMastByRow(fullRows.get(i), selected.get(0).getBay1(), selected.get(0).getLev1());
+ if (prev != null && ("D".equals(prev.getLocSts()) || "F".equals(prev.getLocSts()))) {
+ leftClear = false;
+ break;
+ }
+ }
+
+ // 3. 妫�鏌ュ彸鍓嶆柟锛堝�掑簭鏂瑰悜锛氫粠鍙冲埌宸︼紝鍓嶆柟鏄储寮曞ぇ鐨勪綅缃級
+ boolean rightClear = true;
+ for (int i = maxIndex + 1; i < fullRows.size(); i++) {
+ LocMast prev = getLocMastByRow(fullRows.get(i), selected.get(0).getBay1(), selected.get(0).getLev1());
+ if (prev != null && ("D".equals(prev.getLocSts()) || "F".equals(prev.getLocSts()))) {
+ rightClear = false;
+ break;
+ }
+ }
+
+ // 4. 鑷冲皯鏈変竴渚ф竻绌烘墠鍏佽鍑哄簱
+ if (!leftClear && !rightClear) {
+ return LockingCheckResultParam.fail(
+ "閫変腑娈� " + fullRows.get(minIndex) + "~" + fullRows.get(maxIndex) +
+ " 涓や晶鍓嶆柟閮芥湁绌烘澘/鏁呴殰锛屾棤娉曞嚭搴擄紙姝e簭鎴栧�掑簭鏂瑰悜閮藉牭濉烇級"
+ );
+ }
+
+ // 5. 閫変腑娈靛唴鎵�鏈夊簱浣嶅繀椤绘槸 D 鐘舵��
+ for (LocMast lm : selected) {
+ if (!"D".equals(lm.getLocSts())) {
+ return LockingCheckResultParam.fail("閫変腑搴撲綅闈炵┖鏉跨姸鎬�: " + lm.getLocNo());
+ }
+ }
+
+ // 6. 鍐冲畾鍑哄簱鏂瑰悜鍜屾帓搴忛『搴�
+ String direction;
+ List<LocMast> sortedSelected;
+
+ // 浼樺厛閫夋嫨姝e簭锛堝鏋滀袱渚ч兘娓呯┖锛岄粯璁ゆ搴忥級
+ if (leftClear) {
+ direction = "ASC";
+ sortedSelected = selected.stream()
+ .sorted(Comparator.comparingInt(m -> fullRows.indexOf(m.getRow1())))
+ .collect(Collectors.toList());
+ } else {
+ direction = "DESC";
+ sortedSelected = selected.stream()
+ .sorted(Comparator.comparingInt(m -> -fullRows.indexOf(m.getRow1()))) // 鍊掑簭
+ .collect(Collectors.toList());
+ }
+
+ result = LockingCheckResultParam.success(direction, sortedSelected);
+ }
+
+ // 濡傛灉娌℃湁鍒嗙粍锛堢悊璁轰笂涓嶄細鍙戠敓锛夛紝杩斿洖榛樿鎴愬姛
+ return result != null ? result : LockingCheckResultParam.success(Collections.emptyList());
+ }
+
+ // 杈呭姪鏂规硶锛氭牴鎹� row 鑾峰彇 LocMast
+ private LocMast getLocMastByRow(Integer row, Integer bay1, Integer lev1) {
+ return locMastService.selectOne(new EntityWrapper<LocMast>()
+ .eq("bay1", bay1)
+ .eq("lev1", lev1)
+ .eq("row1", row));
+ }
@Override
@Transactional
public void emptyPlateOut(EmptyPlateOutParam param, Long userId) {
if (Cools.isEmpty(param.getOutSite())) {
throw new CoolException("绔欑偣涓嶅瓨鍦�");
}
- for (String locNo : param.getLocNos()) {
+
+ // 浣跨敤鏂扮殑鍑哄簱涓撶敤鍒嗙粍閰嶇疆
+ List<LocGroupOrder> locGroupAscOrder = slaveProperties.getLocGroupAscOrderOut();
+
+ // 1. 鍏堣繘琛屾暣浣撻樆濉炴鏌ワ紙鍖呭惈杩炵画鎬� + 鍙屽悜鍓嶆柟娓呯┖鏍¢獙锛�
+ LockingCheckResultParam checkResult = checkEmptyPlateBlocking(param.getLocNos(), locGroupAscOrder);
+
+ if (!checkResult.isSuccess()) {
+ throw new CoolException(checkResult.getErrorMessage());
+ }
+
+ // 2. 鑾峰彇鎸夊嚭搴撴柟鍚戞帓搴忓ソ鐨勫簱浣嶅垪琛�
+ List<LocMast> orderedLocMasts = checkResult.getSortedSelected();
+
+ // 3. 浼樺厛绾у熀纭�鍙傛暟锛堟暟鍊艰秺澶т紭鍏堢骇瓒婇珮锛�
+ double BASE_PRI = 10.0; // 鏈�浣庝紭鍏堢骇缁勫熀鍑嗭紙鏁板�兼渶澶э級
+ double GROUP_STEP = 100.0; // 缁勯棿宸窛
+ double IN_GROUP_STEP = 1.0; // 缁勫唴浣嶇疆宸窛
+
+ Date now = new Date();
+
+ // 4. 閫愪釜澶勭悊鎺掑簭鍚庣殑搴撲綅锛岀敓鎴愬嚭搴撲换鍔�
+ for (int index = orderedLocMasts.size(); index > 0; index--) {
+ LocMast locMast = orderedLocMasts.get(index);
+ String locNo = locMast.getLocNo();
+
// 鑾峰彇宸ヤ綔鍙�
int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
- // 鑾峰彇搴撲綅
- LocMast locMast = locMastService.selectById(locNo);
- if (Cools.isEmpty(locMast)) {
- throw new CoolException(locNo+"搴撲綅涓嶅瓨鍦�");
- }
- if (!locMast.getLocSts().equals("D")){
- throw new CoolException("鎵�閫夊簱浣嶅瓨鍦ㄧ姸鎬佷笉涓篋鐨勫簱浣嶏紝搴撲綅鍙凤細"+locMast.getLocNo()+" 銆佸綋鍓嶇姸鎬侊細"+locMast.getLocSts()+"-"+locMast.getLocSts$());
- }
- boolean res1 = true;
- if(param.getOutSite()==100){
- res1 = false;
- }
- List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
- .eq("bay1", locMast.getBay1())
- .eq("lev1",locMast.getLev1())
- .orderBy("row1",res1));
- for (LocMast locMast1 : locMasts) {
- if (locMast1.getLocNo().equals(locMast.getLocNo())) {
- break;
- }
- if (locMast1.getLocSts().equals("D") || locMast1.getLocSts().equals("F")) {
- throw new CoolException(locNo+"搴撲綅鍫靛锛岀姝㈠嚭搴�");
- }
- }
+
// 鑾峰彇婧愮珯
Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
.eq("type_no", 110)
@@ -527,45 +717,68 @@
StaDesc staDesc = staDescService.selectOne(wrapper);
Integer sourceStaNo = staDesc.getCrnStn();
if (Cools.isEmpty(sourceStaNo)) {
- throw new CoolException("妫�绱㈡簮绔欏け璐�");
+ throw new CoolException("妫�绱㈡簮绔欏け璐ワ紝搴撲綅锛�" + locNo);
}
- Date now = new Date();
- // 淇濆瓨宸ヤ綔妗�
+
+ // 璁$畻鍔ㄦ�佷紭鍏堢骇锛堢粍浼樺厛绾� + 缁勫唴椤哄簭鍋忕Щ锛�
+ // 杩欓噷鍋囪鎵�鏈夐�変腑鐨勫簱浣嶅湪鍚屼竴涓垎缁勶紙澶氬垎缁勫彲鍐嶇粏鍒嗭級
+ int groupIndex = locGroupAscOrder.indexOf(
+ locGroupAscOrder.stream()
+ .filter(g -> g.getRowList().contains(locMast.getRow1()))
+ .findFirst()
+ .orElse(null)
+ );
+
+ if (groupIndex == -1) {
+ throw new CoolException("鍒嗙粍绱㈠紩寮傚父: " + locNo);
+ }
+
+ double groupBasePri = BASE_PRI + (locGroupAscOrder.size() + 1 - groupIndex) * GROUP_STEP;
+
+ // 缁勫唴鍋忕Щ锛氭寜鍑哄簱椤哄簭锛坕ndex瓒婂皬瓒婂厛鍑猴紝浼樺厛绾ц秺楂� 鈫� 鏁板�艰秺澶э級
+ // 濡傛灉鏄� DESC 鏂瑰悜锛宨ndex 宸茬粡鏄�掑簭鐨勶紝鎵�浠ョ洿鎺ョ敤
+ double inGroupOffset = index * IN_GROUP_STEP;
+
+ double ioPri = groupBasePri + inGroupOffset; // 鏁板�艰秺澶т紭鍏堢骇瓒婇珮
+
+ // 鐢熸垚宸ヤ綔妗�
WrkMast wrkMast = new WrkMast();
wrkMast.setWrkNo(workNo);
wrkMast.setIoTime(now);
- wrkMast.setWrkSts(0L); // 宸ヤ綔鐘舵�侊細0.寰呭彂閫�
- wrkMast.setIoType(110); // 鍏ュ嚭搴撶姸鎬侊細 110.绌烘澘鍑哄簱
- wrkMast.setIoPri(10D);
- wrkMast.setSourceStaNo(sourceStaNo); // 婧愮珯
- wrkMast.setStaNo(param.getOutSite()); // 鐩爣绔�
+ wrkMast.setWrkSts(0L); // 寰呭彂閫�
+ wrkMast.setIoType(110); // 绌烘澘鍑哄簱
+ wrkMast.setIoPri(ioPri);
+ wrkMast.setSourceStaNo(sourceStaNo);
+ wrkMast.setStaNo(param.getOutSite());
wrkMast.setCrnNo(locMast.getCrnNo());
- wrkMast.setSourceLocNo(locNo); // 婧愬簱浣�
- wrkMast.setFullPlt("N"); // 婊℃澘锛歒
- wrkMast.setPicking("N"); // 鎷f枡
- wrkMast.setExitMk("N"); // 閫�鍑�
- wrkMast.setEmptyMk("Y"); // 绌烘澘
+ wrkMast.setSourceLocNo(locNo);
+ wrkMast.setFullPlt("N");
+ wrkMast.setPicking("N");
+ wrkMast.setExitMk("N");
+ wrkMast.setEmptyMk("Y");
wrkMast.setLinkMis("N");
wrkMast.setAppeUser(userId);
wrkMast.setAppeTime(now);
wrkMast.setModiUser(userId);
wrkMast.setModiTime(now);
- boolean res = wrkMastService.insert(wrkMast);
- if (!res) {
- throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+
+ if (!wrkMastService.insert(wrkMast)) {
+ throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝搴撲綅锛�" + locNo);
}
- // 鏇存柊搴撲綅鐘舵�� D.绌烘澘 -> R.鍑哄簱棰勭害
- if (locMast.getLocSts().equals("D")){
+
+ // 鏇存柊搴撲綅鐘舵�� D 鈫� R锛堝嚭搴撻绾︼級
+ if ("D".equals(locMast.getLocSts())) {
locMast.setLocSts("R");
locMast.setModiUser(userId);
locMast.setModiTime(now);
if (!locMastService.updateById(locMast)) {
- throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�");
+ throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐ワ紝搴撲綅锛�" + locNo);
}
+ } else {
+ throw new CoolException("搴撲綅鐘舵�佸紓甯革紝闈炵┖鏉跨姸鎬侊細" + locNo);
}
}
}
-
@Override
@Transactional
public WrkMast emptyPlateOut(EmptyPlateOutParam param) {
--
Gitblit v1.9.1