From d907a822a940c7ec0fb7de0ca845472bda52229b Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期二, 03 二月 2026 14:33:12 +0800
Subject: [PATCH] #pda料箱组托和换码
---
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java | 1007 ++++++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 785 insertions(+), 222 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 5808540..de67bf3 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -11,6 +11,7 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.*;
+import com.zy.asrs.entity.result.FindLocNoAttributeVo;
import com.zy.asrs.entity.result.WrkCancel;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.Utils;
@@ -31,6 +32,7 @@
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
@@ -87,6 +89,8 @@
private String cancel;
@Value("${wcs-slave.url}")
private String url;
+ @Value("${wcs-slave.warehouse}")
+ private String warehouse;
@Override
@Transactional
@@ -104,7 +108,7 @@
// List<String> batchs = param.getList().stream().map(FullStoreParam.MatCodeStore::getBatch).distinct().collect(Collectors.toList());
StartupDto dto = commonService.getLocNo(1, param.getDevpNo(), matnrs.get(0), null, null,locTypeDto);
if (Cools.isEmpty(dto)){
- throw new CoolException("鏌ヨ搴撲綅澶辫触锛侊紒==銆媠tartupFullPutStore ==銆� commonService.getLocNo");
+ throw new CoolException("response.query_loc_failed");
}
// 鐢熸垚宸ヤ綔鍙�
int workNo = dto.getWorkNo();
@@ -131,7 +135,7 @@
wrkMast.setModiUser(userId);
wrkMast.setModiTime(now);
if (!wrkMastService.insert(wrkMast)) {
- throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+ throw new CoolException("response.save_work_master_failed");
}
// 鐢熸垚宸ヤ綔妗f槑缁�
List<DetlDto> detlDtos = new ArrayList<>();
@@ -151,7 +155,7 @@
sourceStaNo.setModiUser(userId);
sourceStaNo.setModiTime(now);
if (!basDevpService.updateById(sourceStaNo)){
- throw new CoolException("鏇存柊婧愮珯澶辫触");
+ throw new CoolException("response.update_source_station_failed");
}
// 鏇存柊鐩爣搴撲綅鐘舵��
LocMast locMast = locMastService.selectById(dto.getLocNo());
@@ -160,10 +164,10 @@
locMast.setModiUser(userId);
locMast.setModiTime(now);
if (!locMastService.updateById(locMast)){
- throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+ throw new CoolException("response.change_loc_status_failed");
}
} else {
- throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤");
+ throw new CoolException("response.target_loc_occupied");
}
return dto.getLocNo();
}
@@ -176,8 +180,8 @@
// 鑾峰彇搴撲綅鏄庣粏
List<LocDetlDto> locDetlDtos = new ArrayList<>();
for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
- if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
- LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch());
+ if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount(),paramLocDetl.getBarcode())) {
+ LocDetl one = locDetlService.selectItemCarton(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch(),paramLocDetl.getBarcode());
if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
}
}
@@ -185,15 +189,173 @@
// 鍚姩鍑哄簱寮�濮� 101.鍑哄簱
stockOut(staNo, locDetlDtos, null, userId);
} else {
- throw new CoolException("搴撳瓨涓嶅瓨鍦�");
+ throw new CoolException("response.stock_not_exist");
}
}
+ /**
+ * 妫�鏌ユ繁搴撲綅鍓嶆柟鏄惁鍫靛锛堟寜 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("response.current_row_not_in_priority_group"));
+ 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("response.front_loc_has_goods_forbid_out");
+ }
+
+ // 鍓嶆柟鏈夊叆搴撲换鍔★紙鍋囪 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("response.front_loc_has_in_task_forbid_out");
+ }
+ }
+
+ if (!foundSelf) {
+ throw new CoolException("response.target_loc_not_found_in_group");
+ }
+ }
+ private boolean isInNormalRule(LocMast lm) {
+ List<LocGroupOrder> locGroupAscOrder = slaveProperties.getLocGroupAscOrder();
+ if (locGroupAscOrder == null || locGroupAscOrder.isEmpty()) {
+ return false;
+ }
+ Integer row = lm.getRow1();
+ if (row == null) return false;
+
+ return locGroupAscOrder.stream()
+ .anyMatch(group ->
+ group.getRowList() != null &&
+ group.getRowList().contains(row)
+ );
+ }
+ /**
+ * 妫�鏌ユ甯稿簱浣嶅墠鏂规槸鍚﹀牭濉烇紙娣卞簱浣嶈鍒欙細鍓嶆柟鎺掓槸鍚︽湁璐ф垨鍏ュ簱浠诲姟锛�
+ *
+ * 鍒ゆ柇渚濇嵁锛�
+ * 1. 鍙鏌ュ睘浜庡嚭搴撳垎缁勮鍒欏唴鐨勫簱浣嶏紙閫氳繃鍒嗙粍鐨� rowList 纭畾鑼冨洿锛�
+ * 2. 鍓嶆柟 = 鍒嗙粍涓储寮曞ぇ浜庡綋鍓嶅簱浣嶇殑鎺掞紙鍋囪鍒嗙粍 rowList 宸叉寜鍑哄簱椤哄簭鎺掑垪锛屽ぇ绱㈠紩 = 鍓嶆柟鏇存繁锛�
+ * 3. 鍫靛鏉′欢锛氬墠鏂规湁璐э紙F鐘舵�侊級鎴栨湁鍏ュ簱浠诲姟
+ *
+ * @param normalMasts 闇�瑕佹鏌ョ殑姝e父搴撲綅鍒楄〃锛堝凡閫氳繃 isInNormalRule 杩囨护锛�
+ * @return true = 鍓嶆柟鏈夊牭濉烇紙闇�瑕佽ˉ榻愶級锛宖alse = 鍓嶆柟娓呯┖鎴栨棤闇�妫�鏌�
+ */
+ private boolean checkDeepLocationBlocked(List<LocMast> normalMasts) {
+ if (normalMasts == null || normalMasts.isEmpty()) {
+ return false;
+ }
+
+ // 鑾峰彇鍑哄簱鍒嗙粍閰嶇疆
+ List<LocGroupOrder> locGroupAscOrder = slaveProperties.getLocGroupAscOrder();
+ if (locGroupAscOrder == null || locGroupAscOrder.isEmpty()) {
+ return false; // 鏃犻厤缃椂榛樿涓嶆鏌�
+ }
+
+ // 鍋囪鎵�鏈� normalMasts 鍦ㄥ悓涓�涓垎缁勶紙甯歌鎯呭喌锛岃嫢澶氬垎缁勫彲寰幆澶勭悊锛�
+ LocMast representative = normalMasts.get(0);
+ LocGroupOrder group = locGroupAscOrder.stream()
+ .filter(g -> g.getRowList() != null && g.getRowList().contains(representative.getRow1()))
+ .findFirst()
+ .orElse(null);
+
+ if (group == null || group.getRowList() == null || group.getRowList().isEmpty()) {
+ return false; // 涓嶅湪浠讳綍鍒嗙粍锛屼笉妫�鏌�
+ }
+
+ List<Integer> fullRows = group.getRowList(); // 鍒嗙粍鍐呮墍鏈夋帓鍙峰垪琛紙鎸夊嚭搴撻『搴忔帓鍒楋級
+
+ // 閬嶅巻姣忎釜姝e父搴撲綅
+ for (LocMast lm : normalMasts) {
+ Integer currentRow = lm.getRow1();
+ Integer bay1 = lm.getBay1();
+ Integer lev1 = lm.getLev1();
+
+ if (currentRow == null || bay1 == null || lev1 == null) {
+ continue;
+ }
+
+ // 鍦ㄥ垎缁� rowList 涓壘鍒板綋鍓嶆帓鐨勭储寮�
+ int currentIndex = fullRows.indexOf(currentRow);
+ if (currentIndex < 0) {
+ continue; // 褰撳墠鎺掍笉鍦ㄥ垎缁勫唴锛岃烦杩�
+ }
+
+ // 鍓嶆柟 = 鍒嗙粍涓储寮曟洿澶х殑浣嶇疆锛堝亣璁惧垎缁� rowList 浠庡墠鍒板悗鎺掑垪锛屽ぇ绱㈠紩 = 鏇存繁锛�
+ // 濡傛灉浣犵殑鍒嗙粍鍒楄〃鏄�掑簭鐨勶紙浠庡悗鍒板墠锛夛紝鍒欓渶鏀逛负 currentIndex - 1 鍒� 0
+ for (int i = currentIndex + 1; i < fullRows.size(); i++) {
+ Integer frontRow = fullRows.get(i);
+ LocMast front = getLocMastByRow(frontRow, bay1, lev1);
+ if (front == null) {
+ continue;
+ }
+
+ // 鏈夎揣锛團鐘舵�侊級 鈫� 鍫靛
+ if ("F".equals(front.getLocSts())) {
+ return true;
+ }
+
+ WrkMast frontTask = wrkMastService.selectOne(
+ new EntityWrapper<WrkMast>()
+ .eq("source_loc_no", front.getLocNo())
+ .in("loc_sts", Arrays.asList("S", "Q")) // 鏀寔 loc_sts 涓� S 鎴� Q
+ );
+
+ if (frontTask != null) {
+ return true;
+ }
+ }
+ }
+
+ // 鎵�鏈夋甯稿簱浣嶅墠鏂归兘娓呯┖锛堟垨鏃犲墠鏂癸級
+ return false;
+ }
@Override
@Transactional
public void stockOut(BasDevp staNo, List<LocDetlDto> locDetlDtos, IoWorkType ioWorkType, Long userId) {
Date now = new Date();
- // 鍚堝苟鍚岀被椤�
+
+ // 淇濈暀锛氬悎骞跺悓绫婚」锛堝悓涓�搴撲綅鍚堝苟鏄庣粏锛�
Set<String> locNos = new HashSet<>();
List<OutLocDto> dtos = new ArrayList<>();
for (LocDetlDto locDetlDto : locDetlDtos) {
@@ -210,79 +372,106 @@
dtos.add(new OutLocDto(locNo, locDetlDto));
}
}
- Integer ioType = null;
+ // 浣跨敤鍑哄簱涓撶敤鍒嗙粍閰嶇疆
+ List<LocGroupOrder> locGroupAscOrder = slaveProperties.getLocGroupAscOrder();
+ // 纭畾姝e父鍑哄簱绫诲瀷锛堝拰鍘熸潵淇濇寔绫讳技锛�
+ int ioTypeNormal = 101; // 榛樿鏁存墭鍑哄簱
+ if (ioWorkType != null && ioWorkType.equals(IoWorkType.CHECK_OUT)) {
+ ioTypeNormal = 107;
+ } else if (!dtos.isEmpty() && !dtos.get(0).isAll()) {
+ ioTypeNormal = 103; // 閮ㄥ垎鍑哄簱
+ }
- // 鎸夊垪鍜屽眰鍒嗙粍搴撲綅
- 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; // 缁勫悎鎴愬敮涓�鐨勭粍鏍囪瘑
- }));
+ // 1. 鏌ヨ鎵�鏈夐�変腑鐨勫簱浣嶄富淇℃伅
+ List<LocMast> allSelectedMasts = locMastService.selectList(
+ new EntityWrapper<LocMast>().in("loc_no", locNos)
+ );
- // 閬嶅巻姣忕粍
- for (Map.Entry<String, List<OutLocDto>> entry : locGroups.entrySet()) {
- String groupKey = entry.getKey(); // 缁勬爣璇嗭紝渚嬪 "003-02" 琛ㄧず绗�3鍒楃2灞�
- List<OutLocDto> groupDtos = entry.getValue();
+ if (allSelectedMasts.size() != locNos.size()) {
+ throw new CoolException("response.selected_loc_not_exist_or_error");
+ }
- // 缁勫唴浼樺厛绾ч噸鏂颁粠100寮�濮�
- double priority = 100;
+ // 2. 鍖哄垎姝e父搴撲綅锛堥渶瑕佷弗鏍兼繁搴撲綅妫�鏌ワ級涓庤ˉ鍏呭簱浣�
+ List<LocMast> normalMasts = new ArrayList<>();
+ List<LocMast> supplementMasts = new ArrayList<>();
- // 鎺掑簭缁勫唴搴撲綅锛堟帓鍙峰�掑簭锛�
- groupDtos.sort(Comparator.comparing((OutLocDto dto) -> Integer.valueOf(dto.getLocNo().substring(0, 2))).reversed());
+ // 鍋囪鎴戜滑鏈夋煇绉嶁�滃垎缁勮鍒欌�濓紙濡傛寜鍒楀眰鎴栨帓鑼冨洿锛夛紝杩欓噷绠�鍖栫敤涓�涓ず渚嬪垽鏂�
+ // 浣犲彲浠ユ浛鎹㈡垚瀹為檯鐨勮鍒欙紙濡� getLocGroupOrderOut() 鎴栧叾浠栵級
+ for (LocMast lm : allSelectedMasts) {
+ boolean isNormal = isInNormalRule(lm); // 鈫� 浣犻渶瑕佸疄鐜拌繖涓垽鏂柟娉�
+ if (isNormal) {
+ normalMasts.add(lm);
+ } else {
+ supplementMasts.add(lm);
+ }
+ }
- for (OutLocDto dto : groupDtos) {
- String locNo = dto.getLocNo();
+ // 3. 瀵规甯稿簱浣嶈繘琛屾繁搴撲綅鍓嶆柟妫�鏌ワ紙绫讳技涔嬪墠鐨勮繛缁 + 娓呯┖锛�
+ AtomicReference<Boolean> isLeftSideSupplement = new AtomicReference<>(false);
- // 娣卞簱浣嶈鍒欐鏌ワ紝浠呮鏌ュ綋鍓嶅垪鍜屽眰鍐呯殑鍓嶅簱浣�
- 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 + " 鏈夎揣");
- }
+ if (!normalMasts.isEmpty()) {
+ // 杩欓噷妯℃嫙娣卞簱浣嶅墠鏂规鏌ワ紙浣犲彲浠ユ浛鎹㈡垚浣犲疄闄呯殑妫�鏌ユ柟娉曪級
+ boolean hasBlockage = checkDeepLocationBlocked(normalMasts);
- // 鍒ゆ柇鍓嶅簱浣嶆槸鍚︽湁鍏ュ簱浠诲姟
- WrkMast wrkMastFront = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("loc_no", frontLoc));
- if (!Cools.isEmpty(wrkMastFront)) {
- throw new CoolException(locNo + " 鐨勫墠搴撲綅 " + frontLoc + " 鏈夊叆搴撲换鍔�");
- }
+ if (hasBlockage) {
+ // 鍓嶆柟鍫靛 鈫� 鑷姩琛ュ厖鏈�灏戜竴渚�
+ supplementBothSidesBlocked(normalMasts, locGroupAscOrder, supplementMasts, isLeftSideSupplement);
+ }
+ }
+
+ // 4. 鍚堝苟鎵�鏈夎鍑哄簱鐨勫簱浣�
+ List<LocMast> allMasts = new ArrayList<>();
+ allMasts.addAll(normalMasts);
+ allMasts.addAll(supplementMasts);
+
+ if (allMasts.isEmpty()) {
+ throw new CoolException("response.no_valid_out_loc");
+ }
+
+ // 5. 缁熶竴鎸夋帓鍙凤紙row锛夊�掑簭鎺掑簭锛堥珮鎺掑厛鍑猴級
+ List<LocMast> sortedAll = allMasts.stream()
+ .sorted(Comparator.comparing(LocMast::getRow1, Comparator.reverseOrder()))
+ .collect(Collectors.toList());
+
+ // 6. 鐢熸垚浠诲姟锛堜粠鍚庡線鍓嶉亶鍘嗭級
+ double basePriority = 100.0;
+ for (int index = sortedAll.size() - 1; index >= 0; index--) {
+ LocMast locMast = sortedAll.get(index);
+ String locNo = locMast.getLocNo();
+
+ boolean isSupplement = supplementMasts.contains(locMast);
+ int ioType = isSupplement ? 11 : ioTypeNormal;
+ // 浼樺厛绾ц绠�
+ double priority;
+ if (isSupplement) {
+ if (Boolean.TRUE.equals(isLeftSideSupplement.get())) {
+ // 宸︿晶琛ュ厖 鈫� 鏅氬嚭
+ priority = basePriority - index * 1.0;
+ } else {
+ // 鍙充晶琛ュ厖 鈫� 鏃╁嚭
+ priority = basePriority + index * 1.0;
}
-
- // 璁$畻浼樺厛绾�
- dto.setPriority(priority);
- priority--; // 涓嬩竴涓换鍔′紭鍏堢骇閫掑
-
- // 鑾峰彇搴撲綅
- LocMast locMast = locMastService.selectById(dto.getLocNo());
- if (Cools.isEmpty(locMast)) {
- throw new CoolException(dto.getLocNo() + "搴撲綅涓嶅瓨鍦�");
- }
- if (!locMast.getLocSts().equals("F")) {
- throw new CoolException(dto.getLocNo() + "鎵樼洏闈炲湪搴撶姸鎬�");
- }
-
- // 鍒ゆ柇鍏ュ嚭搴撶被鍨�
- if (ioWorkType == null) {
- ioType = dto.isAll() ? 101 : 103;
- } else if (ioWorkType.equals(IoWorkType.CHECK_OUT)) {
- ioType = 107;
- }
- assert ioType != null;
-
- Integer outSta = staNo.getDevNo();
-
- // 鑾峰彇璺緞
- StaDesc staDesc = staDescService.queryCrnStn(ioType, locMast.getCrnNo(), outSta);
-
- // 鐢熸垚宸ヤ綔鍙�
- int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
- String pick = ioType == 101 ? "N":"Y";
-
+ } else {
+ priority = basePriority - index * 1.0;
+ }
+ OutLocDto dto;
+ Integer outSta = staNo.getDevNo();
+ StaDesc staDesc = null;
+ if(ioType != 11){
+ staDesc = staDescService.queryCrnStn(ioType, locMast.getCrnNo(), outSta);
+ }
+ LocMast locMastNew = null;
+ WrkMast wrkMast = new WrkMast();
+ String locSts;
+ int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
+ String pick = (ioType == 101) ? "N" : "Y";
+ if((ioType == 101 || ioType == 103 || ioType == 107) && staDesc != null) {
+ // 鎵惧埌瀵瑰簲鐨� OutLocDto
+ dto = dtos.stream()
+ .filter(d -> d.getLocNo().equals(locNo))
+ .findFirst()
+ .orElseThrow(() -> new CoolException("response.out_detail_not_found"));
// 鐢熸垚宸ヤ綔妗�
- WrkMast wrkMast = new WrkMast();
wrkMast.setWrkNo(workNo);
wrkMast.setIoTime(now);
wrkMast.setWrkSts(0L);
@@ -291,7 +480,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");
@@ -302,18 +491,14 @@
wrkMast.setAppeTime(now);
wrkMast.setModiUser(userId);
wrkMast.setModiTime(now);
- if (!wrkMastService.insert(wrkMast)) {
- throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細" + dto.getLocNo());
- }
-
- // 鐢熸垚宸ヤ綔妗f槑缁�
+ locSts = ioType != 101? "P" : "R";
+ // 鐢熸垚宸ヤ綔妗f槑缁嗭紙淇濈暀鍘熼�昏緫锛�
for (LocDetlDto detlDto : dto.getLocDetlDtos()) {
if (detlDto.getCount() == null || detlDto.getCount() <= 0.0D) {
continue;
}
WrkDetl wrkDetl = new WrkDetl();
wrkDetl.sync(detlDto.getLocDetl());
- wrkDetl.setOrderNo("");
wrkDetl.setWrkNo(workNo);
wrkDetl.setIoTime(now);
Double anfme = ioType == 101 ? detlDto.getLocDetl().getAnfme() : detlDto.getCount();
@@ -323,23 +508,85 @@
wrkDetl.setModiTime(now);
wrkDetl.setModiUser(userId);
if (!wrkDetlService.insert(wrkDetl)) {
- throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
- }
+ throw new CoolException("response.save_work_detail_failed");
+ }
}
+ }else{
+ List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no",locNo));
+ FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo();
+ findLocNoAttributeVo.setMatnr(locDetls.get(0).getMatnr());
+ findLocNoAttributeVo.setBatch(locDetls.get(0).getBatch());
+ LocTypeDto locTypeDto = new LocTypeDto();
+ locTypeDto.setLocType1(locMast.getLocType1());
+ locMastNew = commonService.searchMaxPallet(findLocNoAttributeVo,locTypeDto);
+ // 鐢熸垚宸ヤ綔妗�
+ wrkMast.setWrkNo(workNo);
+ wrkMast.setIoTime(now);
+ wrkMast.setWrkSts(0L);
+ wrkMast.setIoType(ioType);
+ wrkMast.setIoPri(priority);
+ wrkMast.setCrnNo(locMast.getCrnNo());
+ wrkMast.setSourceStaNo(null);
+ wrkMast.setStaNo(null);
+ wrkMast.setSourceLocNo(locNo);
+ wrkMast.setLocNo(locMastNew.getLocNo());
+ wrkMast.setFullPlt("Y");
+ wrkMast.setPicking(pick);
+ wrkMast.setExitMk("N");
+ wrkMast.setEmptyMk("N");
+ wrkMast.setLinkMis("N");
+ wrkMast.setBarcode(locMast.getBarcode());
+ wrkMast.setAppeUser(userId);
+ wrkMast.setAppeTime(now);
+ wrkMast.setModiUser(userId);
+ wrkMast.setModiTime(now);
+ locSts = "R";
+ // 鐢熸垚宸ヤ綔妗f槑缁嗭紙淇濈暀鍘熼�昏緫锛�
+ if(locDetls != null && locDetls.size() > 0) {
+ for (LocDetl locDetl : locDetls) {
+ WrkDetl wrkDetl = new WrkDetl();
+ wrkDetl.sync(locDetl);
+ wrkDetl.setWrkNo(workNo);
+ wrkDetl.setIoTime(now);
- // 淇敼搴撲綅鐘舵��
- locMast = locMastService.selectById(dto.getLocNo());
- 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());
+ wrkDetl.setAppeTime(now);
+ wrkDetl.setAppeUser(userId);
+ wrkDetl.setModiTime(now);
+ wrkDetl.setModiUser(userId);
+ if (!wrkDetlService.insert(wrkDetl)) {
+ throw new CoolException("response.save_work_detail_failed");
+ }
}
- } else {
- throw new CoolException(dto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
}
}
+ if (!wrkMastService.insert(wrkMast)) {
+ throw new CoolException("response.save_work_master_failed_loc|" + locNo);
+ }
+
+ if(locMastNew != null){
+ if ("O".equals(locMastNew.getLocSts())) {
+ locMastNew.setLocSts("S");
+ locMastNew.setModiUser(userId);
+ locMastNew.setModiTime(now);
+ if (!locMastService.updateById(locMastNew)) {
+ throw new CoolException("response.update_loc_status_failed_loc|" + locNo);
+ }
+ } else {
+ throw new CoolException("response.loc_status_error_not_empty|" + locNo);
+ }
+ }
+ // 鏇存柊搴撲綅鐘舵��
+ locMast = locMastService.selectById(locNo);
+ if ("F".equals(locMast.getLocSts())) {
+ locMast.setLocSts(locSts);
+ locMast.setModiUser(userId);
+ locMast.setModiTime(now);
+ if (!locMastService.updateById(locMast)) {
+ throw new CoolException("response.reserve_loc_status_failed|" + locNo);
+ }
+ } else {
+ throw new CoolException("response.loc_not_in_store|" + locNo);
+ }
}
}
@@ -350,7 +597,7 @@
List<LocDto> locDtos = taskDto.getLocDtos();
for (LocDto locDto : locDtos) {
if (!taskDto.getLocNo().equals(locDto.getLocNo()) && !taskDto.getStaNo().equals(locDto.getStaNo())) {
- throw new CoolException("璁㈠崟鍑哄簱寮傚父锛岃鑱旂郴绠$悊鍛�");
+ throw new CoolException("response.order_out_error_contact_admin");
}
}
// 鑾峰彇搴撲綅
@@ -382,14 +629,15 @@
wrkMast.setModiUser(userId);
wrkMast.setModiTime(now);
if (!wrkMastService.insert(wrkMast)) {
- throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細"+taskDto.getLocNo());
+ throw new CoolException("response.save_work_master_failed_out_loc|" + taskDto.getLocNo());
}
// 鐢熸垚宸ヤ綔妗f槑缁�
for (LocDto locDto : taskDto.getLocDtos()) {
if (locDto.getAnfme()==null || locDto.getAnfme() <= 0.0D) { continue; }
- OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
+ Order order = orderService.selectByNo(locDto.getOrderNo());
+ OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), locDto.getMatnr(), locDto.getBatch(),locDto.getBarcode());
if (orderDetl == null) {
- orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
+ orderDetl = orderDetlService.selectItem(order.getId(), locDto.getMatnr(), null,locDto.getBarcode());
}
WrkDetl wrkDetl = new WrkDetl();
wrkDetl.sync(orderDetl);
@@ -404,11 +652,11 @@
wrkDetl.setModiTime(now);
wrkDetl.setModiUser(userId);
if (!wrkDetlService.insert(wrkDetl)) {
- throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+ throw new CoolException("response.save_work_detail_failed");
}
// 淇敼璁㈠崟鏄庣粏
- if (!orderDetlService.increaseWorkQty(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) {
- throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触");
+ if (!orderDetlService.increaseWorkQty(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme(),locDto.getBarcode())) {
+ throw new CoolException("response.update_order_detail_qty_failed");
}
orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
}
@@ -419,10 +667,10 @@
locMast.setModiUser(userId);
locMast.setModiTime(now);
if (!locMastService.updateById(locMast)) {
- throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細"+taskDto.getLocNo());
+ throw new CoolException("response.reserve_loc_status_failed_loc|" + taskDto.getLocNo());
}
} else {
- throw new CoolException(taskDto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
+ throw new CoolException("response.loc_not_in_store_status|" + taskDto.getLocNo());
}
}
@@ -460,14 +708,14 @@
wrkMast.setModiTime(now);
boolean res = wrkMastService.insert(wrkMast);
if (!res) {
- throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+ throw new CoolException("response.save_work_master_failed");
}
// 鏇存柊婧愮珯鐐逛俊鎭�
sourceStaNo.setWrkNo(workNo);
sourceStaNo.setModiUser(userId);
sourceStaNo.setModiTime(now);
if (!basDevpService.updateById(sourceStaNo)){
- throw new CoolException("鏇存柊婧愮珯澶辫触");
+ throw new CoolException("response.update_source_station_failed");
}
// 鏇存柊鐩爣搴撲綅鐘舵��
LocMast locMast = locMastService.selectById(dto.getLocNo());
@@ -476,100 +724,414 @@
locMast.setModiUser(userId);
locMast.setModiTime(now);
if (!locMastService.updateById(locMast)){
- throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+ throw new CoolException("response.change_loc_status_failed");
}
} else {
- throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤");
+ throw new CoolException("response.target_loc_occupied|" + dto.getLocNo());
}
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("response.selected_loc_invalid_or_missing");
+ }
+
+ // 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("response.row_not_in_group_config|" + 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("response.selected_loc_duplicate_or_invalid_row");
+ }
+
+ 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(
+ "response.selected_rows_must_be_continuous|" + 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(
+ "response.both_sides_blocked|" + fullRows.get(minIndex) + "|" + fullRows.get(maxIndex)
+ );
+ }
+
+ // 5. 閫変腑娈靛唴鎵�鏈夊簱浣嶅繀椤绘槸 D 鐘舵��
+ for (LocMast lm : selected) {
+ if (!"D".equals(lm.getLocSts())) {
+ return LockingCheckResultParam.fail("response.selected_loc_not_empty_status|" + 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));
+ }
+
+ /**
+ * 褰撻�変腑娈典袱渚у墠鏂归兘鍫靛鏃讹紝鍒ゆ柇琛ュ摢涓�渚ч渶瑕佺殑绌烘澘鏈�灏戯紝骞舵妸閭d簺搴撲綅鍔犲叆琛ュ厖鍒楄〃
+ */
+ private void supplementBothSidesBlocked(
+ List<LocMast> normalMasts,
+ List<LocGroupOrder> locGroupAscOrder,
+ List<LocMast> supplementMasts,
+ AtomicReference<Boolean> isLeftSideSupplement) {
+
+ // 鍋囪鎵�鏈� normalMasts 鍦ㄥ悓涓�涓垎缁勶紙濡傛灉澶氬垎缁勶紝鍙惊鐜鐞嗘瘡涓垎缁勶級
+ LocGroupOrder group = locGroupAscOrder.stream()
+ .filter(g -> g.getRowList().contains(normalMasts.get(0).getRow1()))
+ .findFirst()
+ .orElseThrow(() -> new CoolException("response.group_exception"));
+
+ List<Integer> fullRows = group.getRowList();
+
+ // 鍙栭�変腑娈电殑 min/max row
+ Set<Integer> selectedRowSet = normalMasts.stream()
+ .map(LocMast::getRow1)
+ .collect(Collectors.toSet());
+
+ int minRow = Collections.min(selectedRowSet);
+ int maxRow = Collections.max(selectedRowSet);
+
+ int minIndex = fullRows.indexOf(minRow);
+ int maxIndex = fullRows.indexOf(maxRow);
+
+ // 鍋囪鎵�鏈夊簱浣嶅湪鍚� bay 鍜� lev
+ Integer bay1 = normalMasts.get(0).getBay1();
+ Integer lev1 = normalMasts.get(0).getLev1();
+
+ // 璁$畻宸︿晶鍓嶆柟闇�瑕佽ˉ鍏呯殑 D 鐘舵�佸簱浣嶆暟閲忥紙浠� 0 鍒� minIndex-1 鐨� D 鐘舵�佸簱浣嶏級
+ int leftSupplementCount = 0;
+ List<LocMast> leftSupplementLocs = new ArrayList<>();
+ for (int i = 0; i < minIndex; i++) {
+ LocMast loc = getLocMastByRow(fullRows.get(i), bay1, lev1);
+ if (loc != null && "D".equals(loc.getLocSts())) {
+ leftSupplementCount++;
+ leftSupplementLocs.add(loc);
+ }
+ }
+
+ // 璁$畻鍙充晶鍓嶆柟闇�瑕佽ˉ鍏呯殑 D 鐘舵�佸簱浣嶆暟閲忥紙浠� maxIndex+1 鍒� end 鐨� D 鐘舵�佸簱浣嶏級
+ int rightSupplementCount = 0;
+ List<LocMast> rightSupplementLocs = new ArrayList<>();
+ for (int i = maxIndex + 1; i < fullRows.size(); i++) {
+ LocMast loc = getLocMastByRow(fullRows.get(i), bay1, lev1);
+ if (loc != null && "D".equals(loc.getLocSts())) {
+ rightSupplementCount++;
+ rightSupplementLocs.add(loc);
+ }
+ }
+
+ // 閫夋嫨闇�瑕佽ˉ鍏呮渶灏戠殑涓�渚э紙濡傛灉鐩哥瓑锛屼紭鍏堝乏渚э級
+ List<LocMast> chosenSupplementLocs;
+ boolean isLeft = false;
+ if (leftSupplementCount <= rightSupplementCount) {
+ chosenSupplementLocs = leftSupplementLocs;
+ isLeft = true;
+ log.info("閫夋嫨琛ュ厖宸︿晶鍓嶆柟锛屽叡 {} 涓簱浣�", leftSupplementCount);
+ } else {
+ chosenSupplementLocs = rightSupplementLocs;
+ isLeft = false;
+ log.info("閫夋嫨琛ュ厖鍙充晶鍓嶆柟锛屽叡 {} 涓簱浣�", rightSupplementCount);
+ }
+ // 璁板綍閫夋嫨鐨勪晶
+ isLeftSideSupplement.set(isLeft);
+ // 娣诲姞鍒� supplementMasts锛堥伩鍏嶉噸澶嶆坊鍔狅級
+ for (LocMast supp : chosenSupplementLocs) {
+ if (!supplementMasts.contains(supp) && !normalMasts.contains(supp)) {
+ supplementMasts.add(supp);
+ }
+ }
}
@Override
@Transactional
public void emptyPlateOut(EmptyPlateOutParam param, Long userId) {
if (Cools.isEmpty(param.getOutSite())) {
- throw new CoolException("绔欑偣涓嶅瓨鍦�");
+ throw new CoolException("response.site_not_exist");
}
- for (String locNo : param.getLocNos()) {
+
+ // 浣跨敤鍑哄簱涓撶敤鍒嗙粍閰嶇疆
+ List<LocGroupOrder> locGroupAscOrder = slaveProperties.getLocGroupAscOrderOut();
+
+ // 1. 鏌ヨ鎵�鏈夐�変腑鐨勫簱浣嶄俊鎭�
+ List<LocMast> selectedMasts = locMastService.selectList(
+ new EntityWrapper<LocMast>().in("loc_no", param.getLocNos())
+ );
+
+ if (selectedMasts.size() != param.getLocNos().size()) {
+ throw new CoolException("response.selected_loc_abnormal");
+ }
+
+ // 2. 鍖哄垎姝e父鍒嗙粍鍐呯殑搴撲綅 鍜� 闇�瑕佽ˉ鍏呯殑搴撲綅锛堣鍒欏鐨勶級
+ List<LocMast> normalMasts = new ArrayList<>();
+ List<LocMast> supplementMasts = new ArrayList<>();
+ for (LocMast lm : selectedMasts) {
+ boolean inAnyGroup = locGroupAscOrder.stream()
+ .anyMatch(g -> g.getRowList().contains(lm.getRow1()));
+ if (inAnyGroup) {
+ normalMasts.add(lm);
+ } else {
+ supplementMasts.add(lm);
+ }
+ }
+ // 鏂板锛氳褰曟槸鍚﹀洜涓哄乏渚у墠鏂硅琛ュ厖
+ AtomicReference<Boolean> isLeftSideSupplement = new AtomicReference<>(false);
+ // 3. 瀵规甯稿垎缁勫唴鐨勫簱浣嶈繘琛屾鏌ワ紙鏀惧涓や晶鍫靛瑙勫垯锛�
+ if (!normalMasts.isEmpty()) {
+ List<String> normalLocNos = normalMasts.stream()
+ .map(LocMast::getLocNo)
+ .collect(Collectors.toList());
+
+ LockingCheckResultParam checkResult = checkEmptyPlateBlocking(
+ normalLocNos,
+ locGroupAscOrder
+ );
+
+ if (!checkResult.isSuccess()) {
+ String errMsg = checkResult.getErrorMessage();
+ if (errMsg.contains("response.both_sides_blocked")) {
+ // 涓や晶閮藉牭 鈫� 杩涘叆琛ラ綈閫昏緫
+ supplementBothSidesBlocked(normalMasts, locGroupAscOrder, supplementMasts, isLeftSideSupplement);
+ } else {
+ // 鍏朵粬閿欒锛堝涓嶈繛缁�侀潪D鐘舵�侊級鎶涘嚭
+ throw new CoolException(errMsg);
+ }
+ }
+ // 濡傛灉鏈変竴渚ф竻绌猴紝鍒欐甯哥户缁�
+ }
+
+ // 4. 鍚堝苟鎵�鏈夊簱浣嶏紙姝e父 + 琛ュ厖鐨勶紝鍖呮嫭瑙勫垯澶栫殑鍜屽墠鏂硅ˉ鐨勶級
+ List<LocMast> allMasts = new ArrayList<>();
+ allMasts.addAll(normalMasts);
+ allMasts.addAll(supplementMasts);
+
+ if (allMasts.isEmpty()) {
+ throw new CoolException("response.no_valid_empty_pallet_loc");
+ }
+
+ // 5. 缁熶竴鎸� row 鈫� bay 鈫� lev 鎺掑簭锛堜粠灏忓埌澶э級
+ List<LocMast> sortedAll = allMasts.stream()
+ .sorted(Comparator.comparing(LocMast::getRow1)
+ .thenComparing(LocMast::getBay1)
+ .thenComparing(LocMast::getLev1))
+ .collect(Collectors.toList());
+
+ Date now = new Date();
+
+ // 6. 鎸夋帓搴忓悗鐨勯『搴忕敓鎴愬嚭搴撲换鍔★紙浠庡悗寰�鍓嶇敓鎴愶級
+ for (int index = 0; index <sortedAll.size() ; index ++) {
+ LocMast locMast = sortedAll.get(index);
+ String locNo = locMast.getLocNo();
+
+ // 鍒ゆ柇鏄惁涓鸿ˉ鍏呭簱浣嶏紙瑙勫垯澶栫殑 鎴� 鍓嶆柟琛ョ殑锛�
+ boolean isSupplement = supplementMasts.contains(locMast);
+
+ int ioType = isSupplement ? 11 : 110;
+
// 鑾峰彇宸ヤ綔鍙�
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)
.eq("stn_no", param.getOutSite())
.eq("crn_no", locMast.getCrnNo());
StaDesc staDesc = staDescService.selectOne(wrapper);
- Integer sourceStaNo = staDesc.getCrnStn();
+ Integer sourceStaNo = staDesc != null ? staDesc.getCrnStn() : null;
+
if (Cools.isEmpty(sourceStaNo)) {
- throw new CoolException("妫�绱㈡簮绔欏け璐�");
+ throw new CoolException("response.query_source_station_failed_loc|" + locNo);
}
- Date now = new Date();
- // 淇濆瓨宸ヤ綔妗�
+
+ // 璁$畻浼樺厛绾э紙绀轰緥锛氳ˉ鍏呯殑浼樺厛绾х◢浣庯級
+ double BASE_PRI = 200.0;
+ double ioPri;
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.setCrnNo(locMast.getCrnNo());
- wrkMast.setSourceLocNo(locNo); // 婧愬簱浣�
- wrkMast.setFullPlt("N"); // 婊℃澘锛歒
- wrkMast.setPicking("N"); // 鎷f枡
- 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け璐�");
+ LocMast locMastNew = null;
+ if(isSupplement){
+ // 琛ュ厖鐨勫簱浣嶏細鏍规嵁鏄乏渚ц繕鏄彸渚цˉ鍏咃紝鍐冲畾浼樺厛绾ф柟鍚�
+ if (Boolean.TRUE.equals(isLeftSideSupplement.get())) {
+ // 宸︿晶琛ュ厖 鈫� 浼樺厛绾ц緝浣庯紙鏅氬嚭锛�
+ ioPri = BASE_PRI - index * 1.0;
+ } else {
+ // 鍙充晶琛ュ厖 鈫� 浼樺厛绾ц緝楂橈紙鏃╁嚭锛�
+ ioPri = BASE_PRI + index * 1.0;
+ }
+ locMastNew = commonService.searchEmptyPallet(null);
+ wrkMast.setWrkNo(workNo);
+ wrkMast.setIoTime(now);
+ wrkMast.setWrkSts(0L);
+ wrkMast.setIoType(ioType);
+ wrkMast.setIoPri(ioPri);
+ wrkMast.setSourceStaNo(null);
+ wrkMast.setLocNo(locMastNew.getLocNo());
+ wrkMast.setStaNo(null);
+ wrkMast.setCrnNo(locMast.getCrnNo());
+ 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);
+ }else{
+ ioPri = BASE_PRI + index * 1.0;
+ wrkMast.setWrkNo(workNo);
+ wrkMast.setIoTime(now);
+ wrkMast.setWrkSts(0L);
+ wrkMast.setIoType(ioType);
+ wrkMast.setIoPri(ioPri);
+ wrkMast.setSourceStaNo(sourceStaNo);
+ wrkMast.setStaNo(param.getOutSite());
+ wrkMast.setCrnNo(locMast.getCrnNo());
+ 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);
}
- // 鏇存柊搴撲綅鐘舵�� D.绌烘澘 -> R.鍑哄簱棰勭害
- if (locMast.getLocSts().equals("D")){
+
+ if (!wrkMastService.insert(wrkMast)) {
+ throw new CoolException("response.save_work_master_failed_loc|" + locNo);
+ }
+
+ if(locMastNew != null){
+ if ("O".equals(locMastNew.getLocSts())) {
+ locMastNew.setLocSts("S");
+ locMastNew.setModiUser(userId);
+ locMastNew.setModiTime(now);
+ if (!locMastService.updateById(locMastNew)) {
+ throw new CoolException("response.update_loc_status_failed_loc|" + locNo);
+ }
+ } else {
+ throw new CoolException("response.loc_status_error_not_empty|" + locNo);
+ }
+ }
+
+ // 鏇存柊搴撲綅鐘舵�� 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("response.update_loc_status_failed_loc|" + locNo);
}
+ } else {
+ throw new CoolException("response.loc_status_error_not_empty|" + locNo);
}
}
}
-
@Override
@Transactional
public WrkMast emptyPlateOut(EmptyPlateOutParam param) {
WrkMast wrkMast = new WrkMast();
if (Cools.isEmpty(param.getOutSite())) {
- throw new CoolException("绔欑偣涓嶅瓨鍦�");
+ throw new CoolException("response.site_not_exist");
}
for (String locNo : param.getLocNos()) {
// 鑾峰彇宸ヤ綔鍙�
@@ -577,7 +1139,7 @@
// 鑾峰彇搴撲綅
LocMast locMast = locMastService.selectById(locNo);
if (Cools.isEmpty(locMast)) {
- throw new CoolException(locNo+"搴撲綅涓嶅瓨鍦�");
+ throw new CoolException("response.loc_not_exist|" + locNo);
}
// 鑾峰彇婧愮珯
Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
@@ -587,7 +1149,7 @@
StaDesc staDesc = staDescService.selectOne(wrapper);
Integer sourceStaNo = staDesc.getCrnStn();
if (Cools.isEmpty(sourceStaNo)) {
- throw new CoolException("妫�绱㈡簮绔欏け璐�");
+ throw new CoolException("response.query_source_station_failed");
}
Date now = new Date();
// 淇濆瓨宸ヤ綔妗�
@@ -610,10 +1172,10 @@
wrkMast.setAppeTime(now);
wrkMast.setModiUser(1L);
wrkMast.setModiTime(now);
- wrkMast.setMemo("鐢熸垚鑷姩绌烘澘鍑哄簱");
+ wrkMast.setMemo("response.memo_auto_empty_pallet_out");
boolean res = wrkMastService.insert(wrkMast);
if (!res) {
- throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+ throw new CoolException("response.save_work_master_failed");
}
// 鏇存柊搴撲綅鐘舵�� D.绌烘澘 -> R.鍑哄簱棰勭害
if (locMast.getLocSts().equals("D")){
@@ -621,7 +1183,7 @@
locMast.setModiUser(1L);
locMast.setModiTime(now);
if (!locMastService.updateById(locMast)) {
- throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�");
+ throw new CoolException("response.update_loc_status_failed_simple");
}
}
}
@@ -636,8 +1198,8 @@
// 鑾峰彇搴撲綅鏄庣粏
List<LocDetlDto> locDetlDtos = new ArrayList<>();
for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
- if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
- LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch());
+ if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount(),paramLocDetl.getBarcode())) {
+ LocDetl one = locDetlService.selectItemCarton(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch(),paramLocDetl.getBarcode());
if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
}
}
@@ -647,10 +1209,10 @@
// 鍚姩鍑哄簱寮�濮� 107.鐩樼偣鍑哄簱
stockOut(staNo, locDetlDtos, IoWorkType.CHECK_OUT, userId);
}else {
- throw new CoolException("鎵�閫夊簱浣嶅瓨鍦ㄧ姸鎬佷笉涓篎鐨勫簱浣嶏紝搴撲綅鍙凤細"+locMast.getLocNo()+" 銆佸綋鍓嶇姸鎬侊細"+locMast.getLocSts()+"-"+locMast.getLocSts$());
+ throw new CoolException("response.selected_loc_status_error|" + locMast.getLocNo() + "," + locMast.getLocSts() + "-" + locMast.getLocSts$());
}
} else {
- throw new CoolException("搴撲綅鐗╂枡涓嶅瓨鍦�");
+ throw new CoolException("response.loc_material_not_exist");
}
}
@@ -660,17 +1222,17 @@
LocMast sourceLoc = locMastService.selectById(sourceLocNo);
List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLocNo));
if (Cools.isEmpty(sourceLoc)){
- throw new CoolException("鏈壘鍒板簱浣�");
+ throw new CoolException("response.loc_not_found");
}
LocMast loc = locMastService.selectById(locNo);
if (Cools.isEmpty(loc)){
- throw new CoolException("鏈壘鍒板簱浣�");
+ throw new CoolException("response.loc_not_found");
}
if (!loc.getLocSts().equals("O") || (!sourceLoc.getLocSts().equals("F") && !sourceLoc.getLocSts().equals("D"))){
- throw new CoolException("搴撲綅鐘舵�佸凡鏀瑰彉");
+ throw new CoolException("response.loc_status_changed");
}
if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) {
- throw new CoolException("绉昏浆搴撲綅灞炰簬涓嶅悓鍫嗗灈鏈�");
+ throw new CoolException("response.transfer_loc_diff_crn");
}
Date now = new Date();
// 鑾峰彇宸ヤ綔鍙�
@@ -697,7 +1259,7 @@
wrkMast.setModiTime(now);
boolean res = wrkMastService.insert(wrkMast);
if (!res) {
- throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+ throw new CoolException("response.save_work_master_failed_simple");
}
// 宸ヤ綔妗f槑缁嗕繚瀛�
for (LocDetl locDetl : locDetls) {
@@ -711,7 +1273,7 @@
wrkDetl.setModiTime(now);
wrkDetl.setModiUser(userId);
if (!wrkDetlService.insert(wrkDetl)) {
- throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+ throw new CoolException("response.save_work_detail_failed");
}
}
// 淇敼婧愬簱浣嶇姸鎬�
@@ -720,10 +1282,10 @@
sourceLoc.setModiUser(userId);
sourceLoc.setModiTime(now);
if (!locMastService.updateById(sourceLoc)){
- throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+ throw new CoolException("response.update_source_loc_status_failed");
}
} else {
- throw new CoolException("婧愬簱浣嶅嚭搴撳け璐ワ紝鐘舵�侊細"+sourceLoc.getLocSts$());
+ throw new CoolException("response.source_loc_out_failed_status|" + sourceLoc.getLocSts$());
}
// 淇敼鐩爣搴撲綅鐘舵��
if (loc.getLocSts().equals("O")) {
@@ -731,10 +1293,10 @@
loc.setModiTime(now);
loc.setModiUser(userId);
if (!locMastService.updateById(loc)) {
- throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+ throw new CoolException("response.update_target_loc_status_failed");
}
} else {
- throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細"+loc.getLocSts$());
+ throw new CoolException("response.transfer_failed_target_loc_status|" + loc.getLocSts$());
}
}
@@ -743,10 +1305,10 @@
public void completeWrkMast(String workNo, Long userId) {
WrkMast wrkMast = wrkMastService.selectById(workNo);
if (Cools.isEmpty(wrkMast)){
- throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪");
+ throw new CoolException("response.work_master_not_exist|" + workNo);
}
if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 14) {
- throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚");
+ throw new CoolException("response.work_master_completed");
}
// 鍑哄簱
if (wrkMast.getIoType() > 100) {
@@ -762,9 +1324,9 @@
wrkMast.setModiTime(now);
wrkMast.setModiUser(userId);
// 瀹屾垚鎿嶄綔浜哄憳璁板綍
- wrkMast.setManuType("鎵嬪姩瀹屾垚");
+ wrkMast.setManuType("response.manu_complete");
if (!wrkMastService.updateById(wrkMast)) {
- throw new CoolException("淇敼宸ヤ綔妗eけ璐�");
+ throw new CoolException("response.update_work_master_failed");
}
}
@@ -774,10 +1336,10 @@
param.integrate();
LocMast locMast = locMastService.selectById(param.getLocNo());
if (Cools.isEmpty(locMast)) {
- throw new CoolException("搴撲綅涓嶅瓨鍦�");
+ throw new CoolException("response.loc_not_exist_simple");
}
if (!(locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D") || locMast.getLocSts().equals("O"))) {
- throw new CoolException("褰撳墠搴撲綅涓嶅彲璋冩暣锛佸簱浣嶇姸鎬侊細" + locMast.getLocSts$());
+ throw new CoolException("response.loc_not_adjustable|" + locMast.getLocSts$());
}
Date now = new Date();
@@ -798,8 +1360,8 @@
if (!locDetl.getAnfme().equals(adjust.getCount())) {
// todo 鐩樼偣璁板綍
// 淇敼搴撳瓨
- if (!locDetlService.updateAnfme(adjust.getCount(), locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch())) {
- throw new CoolException(locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "鎵瑰彿淇敼鏁伴噺澶辫触");
+ if (!locDetlService.updateAnfme(adjust.getCount(), locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(),locDetl.getBarcode())) {
+ throw new CoolException("response.update_stock_qty_failed|" + locDetl.getLocNo() + "," + locDetl.getMatnr() + "," + locDetl.getBatch());
}
// 淇濆瓨璋冩暣璁板綍
AdjDetl adjDetl = new AdjDetl();
@@ -823,8 +1385,8 @@
// 鍒犻櫎搴撳瓨
for (LocDetl locDetl : locDetls) {
// todo 鐩樼偣璁板綍
- if (!locDetlService.updateAnfme(-1.0D, locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch())) {
- throw new CoolException("鍒犻櫎" + locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "鎵瑰彿搴撳瓨鏄庣粏澶辫触");
+ if (!locDetlService.updateAnfme(-1.0D, locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(),locDetl.getBarcode())) {
+ throw new CoolException("response.delete_stock_detail_failed|" + locDetl.getLocNo() + "," + locDetl.getMatnr() + "," + locDetl.getBatch());
}
// 淇濆瓨璋冩暣璁板綍
AdjDetl adjDetl = new AdjDetl();
@@ -854,7 +1416,7 @@
locDetl.setAppeUser(userId);
locDetl.setAppeTime(now);
if (!locDetlService.insert(locDetl)) {
- throw new CoolException("娣诲姞" + locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "鎵瑰彿搴撳瓨鏄庣粏澶辫触");
+ throw new CoolException("response.add_stock_detail_failed|" + locDetl.getLocNo() + "," + locDetl.getMatnr() + "," + locDetl.getBatch());
}
// 淇濆瓨璋冩暣璁板綍
AdjDetl adjDetl = new AdjDetl();
@@ -884,7 +1446,7 @@
locMast.setModiUser(userId);
locMast.setModiTime(now);
if (!locMastService.updateById(locMast)) {
- throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�");
+ throw new CoolException("response.update_loc_status_failed");
}
}
@@ -895,7 +1457,7 @@
Date now = new Date();
WrkMast wrkMast = wrkMastService.selectById(workNo);
if (Cools.isEmpty(wrkMast)){
- throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪");
+ throw new CoolException("response.work_master_not_exist|" + workNo);
}
String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣�
String locSts = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬�
@@ -909,7 +1471,7 @@
// 搴撲綅杞Щ锛氭簮搴撲綅
LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
if (Cools.isEmpty(locMast)) {
- throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛屾簮搴撲綅涓嶅瓨鍦�:"+ wrkMast.getSourceLocNo());
+ throw new CoolException("response.cancel_transfer_failed_source_not_exist|" + wrkMast.getSourceLocNo());
}
locMast.setLocSts(wrkMast.getFullPlt().equalsIgnoreCase("N")?"D":"F");
locMast.setModiTime(now);
@@ -920,7 +1482,7 @@
} else if (wrkMast.getIoType() > 100 && wrkMast.getWrkSts() != 14) {
locNo = wrkMast.getSourceLocNo();
// 鍑哄簱 ===>> F.鍦ㄥ簱
- if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103) {
+ if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107) {
locSts = "F";
// 绌烘澘鍑哄簱 ===>> D.绌烘《/绌烘爤鏉�
} else if (wrkMast.getIoType() == 110) {
@@ -931,7 +1493,7 @@
// 搴撲綅杞Щ锛氱洰鏍囧簱浣�
LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
if (Cools.isEmpty(locMast)) {
- throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛岀洰鏍囧簱浣嶄笉瀛樺湪:"+ wrkMast.getSourceLocNo());
+ throw new CoolException("response.cancel_transfer_failed_target_not_exist|" + wrkMast.getLocNo());
}
locMast.setLocSts("O");
locMast.setModiTime(now);
@@ -939,7 +1501,7 @@
locMastService.updateById(locMast);
}
} else {
- throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曞彇娑�");
+ throw new CoolException("response.work_status_cannot_cancel");
}
//鍙栨秷鍏ュ簱宸ヤ綔妗f椂锛屾煡璇㈢粍鎵樿〃锛屽鏋滄湁灏嗙姸鎬佹敼涓哄緟澶勭悊
@@ -963,7 +1525,7 @@
for (WrkDetl wrkDetl : wrkDetls) {
if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
- throw new CoolException("璁㈠崟鏁版嵁鍥炴粴澶辫触");
+ throw new CoolException("response.order_data_rollback_failed");
}
//淇敼璁㈠崟涓昏〃鐘舵��,娌℃湁浣滀笟鏁伴噺鏃舵墠鍙互淇敼
@@ -982,7 +1544,7 @@
order.setUpdateTime(now);
}
if(!orderService.update(order,new EntityWrapper<Order>().eq("order_no",wrkDetl.getOrderNo()))){
- throw new CoolException("淇敼璁㈠崟鐘舵�佸け璐�");
+ throw new CoolException("response.update_order_status_failed");
}
}
}
@@ -1003,15 +1565,15 @@
// }
// 鍙栨秷鎿嶄綔浜哄憳璁板綍
- wrkMast.setManuType("鎵嬪姩鍙栨秷");
+ wrkMast.setManuType("response.manu_cancel");
wrkMast.setModiUser(userId);
wrkMast.setModiTime(now);
if (!wrkMastService.updateById(wrkMast)) {
- throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐�");
+ throw new CoolException("response.cancel_work_master_failed");
}
// 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
- throw new CoolException("淇濆瓨宸ヤ綔鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo());
+ throw new CoolException("response.save_work_log_failed|" + wrkMast.getWrkNo());
}
// 鍒犻櫎宸ヤ綔涓绘。
boolean wrkMastRes = wrkMastService.deleteById(wrkMast);
@@ -1028,14 +1590,14 @@
// 淇敼搴撲綅鐘舵��
LocMast locMast = locMastService.selectById(locNo);
if (Cools.isEmpty(locMast)) {
- throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐ワ紝搴撲綅涓嶅瓨鍦�:"+ locNo);
+ throw new CoolException("response.cancel_work_master_failed_loc_not_exist|" + locNo);
}
locMast.setLocSts(locSts);
locMast.setModiTime(now);
locMast.setModiUser(userId);
boolean locMastRes = locMastService.updateById(locMast);
if (!wrkMastRes || !locMastRes) {
- throw new CoolException("淇濆瓨鏁版嵁澶辫触");
+ throw new CoolException("response.save_data_failed");
}
//wms鍙栨秷浠诲姟 鍚屾椂璋冪敤wcs浠诲姟鍙栨秷鎺ュ彛閫氱煡wcs
@@ -1044,6 +1606,7 @@
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
wrkCancel.setTaskId(workNo); // 浠诲姟鍙�
wrkCancel.setMsgTime(dateFormat.format(date)); // 鍙栨秷鏃堕棿
+ wrkCancel.setWarehouse(warehouse); // 浠撳簱缂栫爜
String response = "";
boolean flag = false;
@@ -1059,7 +1622,7 @@
flag = true;
}else {
log.error("wms鍙栨秷浠诲姟涓嬪彂wcs澶辫触--->url锛歿}锛況equest锛歿}锛況esponse锛歿}", url+"/"+cancel, JSON.toJSONString(wrkCancel), response);
- throw new CoolException("wms鍙栨秷浠诲姟涓嬪彂wcs澶辫触");
+ throw new CoolException("response.wms_cancel_task_wcs_failed");
}
}catch (Exception e){
log.error("fail", e);
@@ -1088,15 +1651,15 @@
public void pickWrkMast(String workNo, Long userId) {
WrkMast wrkMast = wrkMastService.selectById(workNo);
if (Cools.isEmpty(wrkMast)){
- throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪");
+ throw new CoolException("response.work_master_not_exist|" + workNo);
}
// 鍏ュ嚭搴撶被鍨嬪垽鏂�
if (wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) {
- throw new CoolException("褰撳墠鍏ュ嚭搴撶被鍨嬫棤娉曡繘琛屾搷浣�");
+ throw new CoolException("response.io_type_cannot_operate");
}
// 宸ヤ綔鐘舵�佸垽鏂�
if (wrkMast.getWrkSts() < 11 || wrkMast.getWrkSts() == 15) {
- throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曡繘琛屾搷浣�");
+ throw new CoolException("response.work_status_cannot_operate");
}
// 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
// if (!wrkDetlLogService.save(wrkMast.getWrkNo())) {
@@ -1104,7 +1667,7 @@
// }
// 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
- throw new CoolException("淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
+ throw new CoolException("response.save_work_master_log_failed");
}
// 鑾峰彇鐩爣绔�
Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
@@ -1113,7 +1676,7 @@
.eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
StaDesc staDesc = staDescService.selectOne(wrapper);
if (Cools.isEmpty(staDesc)) {
- throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+ throw new CoolException("response.in_route_not_exist");
}
Date now = new Date();
// 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
@@ -1128,7 +1691,7 @@
wrkMast.setModiTime(now);
wrkMast.setModiUser(userId);
if (!wrkMastService.updateById(wrkMast)) {
- throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
+ throw new CoolException("response.update_work_master_status_failed");
}
// 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
@@ -1136,14 +1699,14 @@
locMast.setModiTime(now);
locMast.setModiUser(userId);
if (!locMastService.updateById(locMast)) {
- throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
+ throw new CoolException("response.update_loc_status_failed");
}
}
@Override
public StartupDto createWaitPainWrkMastStart(List<WaitPakin> list, Long userId) {
if (Cools.isEmpty(list)) {
- throw new CoolException("鍏ュ簱閫氱煡妗d笉鑳戒负绌�");
+ throw new CoolException("response.wait_pakin_empty");
}
LocTypeDto locTypeDto = new LocTypeDto();
locTypeDto.setLocType1((short) 1);
@@ -1155,7 +1718,7 @@
public String dealPreHaveStart(Integer wrkNo, Long userId) {
WrkMast wrkMast = wrkMastService.selectById(wrkNo);
if (wrkMast == null) {
- throw new CoolException("浠诲姟宸插け鏁�");
+ throw new CoolException("response.task_invalid");
}
String locNo = wrkMast.getLocNo();
LocMast locMast = locMastService.selectById(locNo);
@@ -1205,14 +1768,14 @@
}
if (targetLoc == null) {
- throw new CoolException("鎿嶄綔澶辫触锛屽綋鍓嶄粨搴撴壘涓嶅埌绌哄簱浣�");
+ throw new CoolException("response.no_empty_loc_found");
}
Date now = new Date();
// 淇敼宸ヤ綔妗�
StaDesc staDesc = staDescService.queryCrnStn(targetLoc.getCrnNo());
if (Cools.isEmpty(staDesc)) {
- throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+ throw new CoolException("response.in_route_not_exist");
}
wrkMast.setWrkSts(2L);
wrkMast.setLocNo(targetLoc.getLocNo());
@@ -1222,7 +1785,7 @@
wrkMast.setModiUser(userId);
wrkMast.setPreHave("N");
if (!wrkMastService.updateById(wrkMast)) {
- throw new CoolException("淇敼宸ヤ綔妗eけ璐�");
+ throw new CoolException("response.update_work_master_failed");
}
// 淇敼搴撲綅鐘舵�� O ===>>> S
if (targetLoc.getLocSts().equals("O")){
@@ -1230,10 +1793,10 @@
targetLoc.setModiUser(userId);
targetLoc.setModiTime(now);
if (!locMastService.updateById(targetLoc)){
- throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+ throw new CoolException("response.update_loc_status_failed");
}
} else {
- throw new CoolException(targetLoc.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤");
+ throw new CoolException("response.target_loc_occupied|" + targetLoc.getLocNo());
}
// 绂佺敤寮傚父搴撲綅
// locMast.setLocSts("X"); // X.绂佺敤
@@ -1250,16 +1813,16 @@
public void turnMatLocDetl(EmptyPlateOutParam param, Long userId) {
Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("id", param.getMatId()));
if (Cools.isEmpty(mat)){
- throw new CoolException("鐩爣搴撲綅鍟嗗搧缂栫爜鏈夎锛�");
+ throw new CoolException("response.target_loc_mat_error");
}
List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("matnr", param.getLocDetls().get(0).getMatnr()));
if (Cools.isEmpty(locDetls) || locDetls.size()<1){
- throw new CoolException("寰呬慨鏀瑰晢鍝佹棤搴撳瓨锛屾棤闇�淇敼锛� 鍝佸彿锛�"+param.getLocDetls().get(0).getMatnr());
+ throw new CoolException("response.mat_no_stock_no_need_update|" + param.getLocDetls().get(0).getMatnr());
}
try {
locDetlService.updateMatTurn(param.getLocDetls().get(0).getMatnr(),mat.getMatnr());
}catch (Exception e){
- throw new CoolException("瀵规暟鎹簱淇敼鍑洪敊锛�");
+ throw new CoolException("response.db_update_error");
}
for (LocDetl locDetl:locDetls){
// 淇濆瓨璋冩暣璁板綍
--
Gitblit v1.9.1