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 |  807 +++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 577 insertions(+), 230 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 131caf8..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;
 
 /**
@@ -106,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();
@@ -133,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<>();
@@ -153,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());
@@ -162,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();
     }
@@ -178,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()));
             }
         }
@@ -187,7 +189,7 @@
             // 鍚姩鍑哄簱寮�濮� 101.鍑哄簱
             stockOut(staNo, locDetlDtos, null, userId);
         } else {
-            throw new CoolException("搴撳瓨涓嶅瓨鍦�");
+            throw new CoolException("response.stock_not_exist");
         }
     }
     /**
@@ -204,7 +206,7 @@
         LocGroupOrder currentGroup = locGroupAscOrder.stream()
                 .filter(g -> g.getRowList().contains(locMast.getRow1()))
                 .findFirst()
-                .orElseThrow(() -> new CoolException("褰撳墠鎺掍笉鍦ㄤ换浣曞嚭搴撲紭鍏堝垎缁勪腑锛屾棤娉曡繘琛屾繁搴撲綅妫�鏌�: row=" + locMast.getRow1()));
+                .orElseThrow(() -> new CoolException("response.current_row_not_in_priority_group"));
 
         List<Integer> orderedRows = currentGroup.getRowList();
 
@@ -233,7 +235,7 @@
 
             // 鍓嶆柟鏈夎揣锛團鐘舵�侊級
             if ("F".equals(prevLoc.getLocSts())) {
-                throw new CoolException(locNo + " 鐨勫墠鏂逛綅缃� " + prevLoc.getLocNo() + " 鏈夎揣锛岀姝㈠嚭搴�");
+                throw new CoolException("response.front_loc_has_goods_forbid_out");
             }
 
             // 鍓嶆柟鏈夊叆搴撲换鍔★紙鍋囪 io_type=100 涓哄叆搴擄紝鏍规嵁瀹為檯璋冩暣锛�
@@ -246,24 +248,114 @@
             );
 
             if (frontTask != null) {
-                throw new CoolException(locNo + " 鐨勫墠鏂逛綅缃� " + prevLoc.getLocNo() + " 瀛樺湪鍏ュ簱浠诲姟锛岀姝㈠嚭搴�");
+                throw new CoolException("response.front_loc_has_in_task_forbid_out");
             }
         }
 
         if (!foundSelf) {
-            throw new CoolException("鍒嗙粍鍐呮湭鎵惧埌鐩爣搴撲綅锛岃妫�鏌ユ暟鎹竴鑷存��: " + locNo);
+            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();
 
-        // 浠庨厤缃幏鍙栧垎缁勶紙鍜岀┖鏉垮嚭搴撲繚鎸佷竴鑷达級
-        List<LocGroupOrder> locGroupAscOrder = slaveProperties.getLocGroupAscOrder();
-
-        // 鍚堝苟鍚岀被椤癸紙鐩稿悓 locNo 鐨勬槑缁嗗悎骞讹級
+        // 淇濈暀锛氬悎骞跺悓绫婚」锛堝悓涓�搴撲綅鍚堝苟鏄庣粏锛�
         Set<String> locNos = new HashSet<>();
         List<OutLocDto> dtos = new ArrayList<>();
         for (LocDetlDto locDetlDto : locDetlDtos) {
@@ -280,67 +372,106 @@
                 dtos.add(new OutLocDto(locNo, locDetlDto));
             }
         }
+        // 浣跨敤鍑哄簱涓撶敤鍒嗙粍閰嶇疆
+        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; // 閮ㄥ垎鍑哄簱
+        }
 
-        Integer ioType = null;
+        // 1. 鏌ヨ鎵�鏈夐�変腑鐨勫簱浣嶄富淇℃伅
+        List<LocMast> allSelectedMasts = locMastService.selectList(
+                new EntityWrapper<LocMast>().in("loc_no", locNos)
+        );
 
-        // 鎸夊垪鍜屽眰鍒嗙粍搴撲綅锛坆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;
-                }));
+        if (allSelectedMasts.size() != locNos.size()) {
+            throw new CoolException("response.selected_loc_not_exist_or_error");
+        }
 
-        // 閬嶅巻姣忕粍
-        for (Map.Entry<String, List<OutLocDto>> entry : locGroups.entrySet()) {
-            List<OutLocDto> groupDtos = entry.getValue();
+        // 2. 鍖哄垎姝e父搴撲綅锛堥渶瑕佷弗鏍兼繁搴撲綅妫�鏌ワ級涓庤ˉ鍏呭簱浣�
+        List<LocMast> normalMasts = new ArrayList<>();
+        List<LocMast> supplementMasts = new ArrayList<>();
 
-            // 缁勫唴浼樺厛绾ч噸鏂颁粠100寮�濮嬶紙鍘熸湁閫昏緫锛�
-            double priority = 100;
+        // 鍋囪鎴戜滑鏈夋煇绉嶁�滃垎缁勮鍒欌�濓紙濡傛寜鍒楀眰鎴栨帓鑼冨洿锛夛紝杩欓噷绠�鍖栫敤涓�涓ず渚嬪垽鏂�
+        // 浣犲彲浠ユ浛鎹㈡垚瀹為檯鐨勮鍒欙紙濡� getLocGroupOrderOut() 鎴栧叾浠栵級
+        for (LocMast lm : allSelectedMasts) {
+            boolean isNormal = isInNormalRule(lm); // 鈫� 浣犻渶瑕佸疄鐜拌繖涓垽鏂柟娉�
+            if (isNormal) {
+                normalMasts.add(lm);
+            } else {
+                supplementMasts.add(lm);
+            }
+        }
 
-            // 鎺掑簭缁勫唴搴撲綅锛堟帓鍙峰�掑簭锛屽師鏈夐�昏緫锛�
-            groupDtos.sort(Comparator.comparing((OutLocDto dto) -> Integer.valueOf(dto.getLocNo().substring(0, 2))).reversed());
+        // 3. 瀵规甯稿簱浣嶈繘琛屾繁搴撲綅鍓嶆柟妫�鏌ワ紙绫讳技涔嬪墠鐨勮繛缁 + 娓呯┖锛�
+        AtomicReference<Boolean> isLeftSideSupplement = new AtomicReference<>(false);
 
-            for (OutLocDto dto : groupDtos) {
-                String locNo = dto.getLocNo();
+        if (!normalMasts.isEmpty()) {
+            // 杩欓噷妯℃嫙娣卞簱浣嶅墠鏂规鏌ワ紙浣犲彲浠ユ浛鎹㈡垚浣犲疄闄呯殑妫�鏌ユ柟娉曪級
+            boolean hasBlockage = checkDeepLocationBlocked(normalMasts);
 
-                // 鑾峰彇搴撲綅淇℃伅锛堟彁鍓嶈幏鍙栵紝鐢ㄤ簬妫�鏌ュ拰鍚庣画浣跨敤锛�
-                LocMast locMast = locMastService.selectById(locNo);
-                if (Cools.isEmpty(locMast)) {
-                    throw new CoolException(locNo + "搴撲綅涓嶅瓨鍦�");
+            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;
                 }
-                if (!locMast.getLocSts().equals("F")) {
-                    throw new CoolException(locNo + "鎵樼洏闈炲湪搴撶姸鎬�");
-                }
-
-                // =====================================
-                // 娣卞簱浣嶅墠鏂瑰牭濉炴鏌ワ紙鏂伴�昏緫锛屾寜鍒嗙粍椤哄簭锛�
-                checkDeepPositionBlocking(locMast, locNo, locGroupAscOrder);
-                // =====================================
-
-                // 璁$畻浼樺厛绾э紙鍘熸湁閫昏緫锛�
-                dto.setPriority(priority);
-                priority--;
-
-                // 鍒ゆ柇鍏ュ嚭搴撶被鍨�
-                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);
@@ -360,18 +491,14 @@
                 wrkMast.setAppeTime(now);
                 wrkMast.setModiUser(userId);
                 wrkMast.setModiTime(now);
-                if (!wrkMastService.insert(wrkMast)) {
-                    throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細" + locNo);
-                }
-
-                // 鐢熸垚宸ヤ綔妗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();
@@ -381,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(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("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + locNo);
+                        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(locNo + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
                 }
             }
+            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);
+        }
         }
     }
 
@@ -408,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");
             }
         }
         // 鑾峰彇搴撲綅
@@ -440,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);
@@ -462,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);
         }
@@ -477,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());
         }
     }
 
@@ -518,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());
@@ -534,10 +724,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|" + dto.getLocNo());
         }
         return dto.getLocNo();
     }
@@ -562,7 +752,7 @@
         );
 
         if (selectedMasts.size() != selectedLocNos.size()) {
-            return LockingCheckResultParam.fail("閮ㄥ垎閫変腑搴撲綅涓嶅瓨鍦ㄦ垨鏁版嵁寮傚父");
+            return LockingCheckResultParam.fail("response.selected_loc_invalid_or_missing");
         }
 
         // 2. 鎸夊垎缁勮仛鍚堥�変腑鐨勫簱浣嶏紙鏀寔澶氬垎缁勶級
@@ -571,7 +761,7 @@
             LocGroupOrder group = locGroupAscOrder.stream()
                     .filter(g -> g.getRowList().contains(lm.getRow1()))
                     .findFirst()
-                    .orElseThrow(() -> new CoolException("鎺掍笉鍦ㄥ嚭搴撳垎缁勯厤缃腑: row=" + lm.getRow1()));
+                    .orElseThrow(() -> new CoolException("response.row_not_in_group_config|" + lm.getRow1()));
 
             groupSelected.computeIfAbsent(group, k -> new ArrayList<>()).add(lm);
         }
@@ -595,7 +785,7 @@
 
             // 妫�鏌ユ槸鍚﹂噸澶嶆垨鏃犳晥
             if (selectedRows.size() != selected.size()) {
-                return LockingCheckResultParam.fail("閫変腑搴撲綅瀛樺湪閲嶅鎴栨棤鏁堟帓");
+                return LockingCheckResultParam.fail("response.selected_loc_duplicate_or_invalid_row");
             }
 
             int minIndex = fullRows.indexOf(selectedRows.get(0));
@@ -604,7 +794,7 @@
             // 1. 蹇呴』鏄繛缁锛堟棤缂哄彛锛�
             if (maxIndex - minIndex + 1 != selectedRows.size()) {
                 return LockingCheckResultParam.fail(
-                        "閫変腑鎺掑繀椤昏繛缁紝鏃犵己鍙c�備粠 " + fullRows.get(minIndex) + " 鍒� " + fullRows.get(maxIndex)
+                        "response.selected_rows_must_be_continuous|" + fullRows.get(minIndex) + "|" + fullRows.get(maxIndex)
                 );
             }
 
@@ -628,18 +818,17 @@
                 }
             }
 
-            // 4. 鑷冲皯鏈変竴渚ф竻绌烘墠鍏佽鍑哄簱
+            // 4. 鑷冲皯鏈変竴渚ф竻绌烘墠鍏佽鍑哄簱锛堜慨鏀癸細鏀惧锛屽鏋滀袱渚ч兘鍫碉紝杩斿洖鐗瑰畾閿欒鐮佹垨缁х画锛�
             if (!leftClear && !rightClear) {
                 return LockingCheckResultParam.fail(
-                        "閫変腑娈� " + fullRows.get(minIndex) + "~" + fullRows.get(maxIndex) +
-                                " 涓や晶鍓嶆柟閮芥湁绌烘澘/鏁呴殰锛屾棤娉曞嚭搴擄紙姝e簭鎴栧�掑簭鏂瑰悜閮藉牭濉烇級"
+                        "response.both_sides_blocked|" + fullRows.get(minIndex) + "|" + fullRows.get(maxIndex)
                 );
             }
 
             // 5. 閫変腑娈靛唴鎵�鏈夊簱浣嶅繀椤绘槸 D 鐘舵��
             for (LocMast lm : selected) {
                 if (!"D".equals(lm.getLocSts())) {
-                    return LockingCheckResultParam.fail("閫変腑搴撲綅闈炵┖鏉跨姸鎬�: " + lm.getLocNo());
+                    return LockingCheckResultParam.fail("response.selected_loc_not_empty_status|" + lm.getLocNo());
                 }
             }
 
@@ -674,37 +863,167 @@
                 .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");
         }
 
-        // 浣跨敤鏂扮殑鍑哄簱涓撶敤鍒嗙粍閰嶇疆
+        // 浣跨敤鍑哄簱涓撶敤鍒嗙粍閰嶇疆
         List<LocGroupOrder> locGroupAscOrder = slaveProperties.getLocGroupAscOrderOut();
 
-        // 1. 鍏堣繘琛屾暣浣撻樆濉炴鏌ワ紙鍖呭惈杩炵画鎬� + 鍙屽悜鍓嶆柟娓呯┖鏍¢獙锛�
-        LockingCheckResultParam checkResult = checkEmptyPlateBlocking(param.getLocNos(), locGroupAscOrder);
+        // 1. 鏌ヨ鎵�鏈夐�変腑鐨勫簱浣嶄俊鎭�
+        List<LocMast> selectedMasts = locMastService.selectList(
+                new EntityWrapper<LocMast>().in("loc_no", param.getLocNos())
+        );
 
-        if (!checkResult.isSuccess()) {
-            throw new CoolException(checkResult.getErrorMessage());
+        if (selectedMasts.size() != param.getLocNos().size()) {
+            throw new CoolException("response.selected_loc_abnormal");
         }
 
-        // 2. 鑾峰彇鎸夊嚭搴撴柟鍚戞帓搴忓ソ鐨勫簱浣嶅垪琛�
-        List<LocMast> orderedLocMasts = checkResult.getSortedSelected();
+        // 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());
 
-        // 3. 浼樺厛绾у熀纭�鍙傛暟锛堟暟鍊艰秺澶т紭鍏堢骇瓒婇珮锛�
-        double BASE_PRI = 10.0;          // 鏈�浣庝紭鍏堢骇缁勫熀鍑嗭紙鏁板�兼渶澶э級
-        double GROUP_STEP = 100.0;       // 缁勯棿宸窛
-        double IN_GROUP_STEP = 1.0;      // 缁勫唴浣嶇疆宸窛
+            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();
 
-        // 4. 閫愪釜澶勭悊鎺掑簭鍚庣殑搴撲綅锛岀敓鎴愬嚭搴撲换鍔�
-        for (int index = orderedLocMasts.size(); index > 0; index--) {
-            LocMast locMast = orderedLocMasts.get(index);
+        // 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);
@@ -715,67 +1034,95 @@
                     .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("妫�绱㈡簮绔欏け璐ワ紝搴撲綅锛�" + locNo);
+                throw new CoolException("response.query_source_station_failed_loc|" + locNo);
             }
 
-            // 璁$畻鍔ㄦ�佷紭鍏堢骇锛堢粍浼樺厛绾� + 缁勫唴椤哄簭鍋忕Щ锛�
-            // 杩欓噷鍋囪鎵�鏈夐�変腑鐨勫簱浣嶅湪鍚屼竴涓垎缁勶紙澶氬垎缁勫彲鍐嶇粏鍒嗭級
-            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;  // 鏁板�艰秺澶т紭鍏堢骇瓒婇珮
-
-            // 鐢熸垚宸ヤ綔妗�
+            // 璁$畻浼樺厛绾э紙绀轰緥锛氳ˉ鍏呯殑浼樺厛绾х◢浣庯級
+            double BASE_PRI = 200.0;
+            double ioPri;
             WrkMast wrkMast = new WrkMast();
-            wrkMast.setWrkNo(workNo);
-            wrkMast.setIoTime(now);
-            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");
-            wrkMast.setExitMk("N");
-            wrkMast.setEmptyMk("Y");
-            wrkMast.setLinkMis("N");
-            wrkMast.setAppeUser(userId);
-            wrkMast.setAppeTime(now);
-            wrkMast.setModiUser(userId);
-            wrkMast.setModiTime(now);
+            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);
+            }
 
             if (!wrkMastService.insert(wrkMast)) {
-                throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝搴撲綅锛�" + locNo);
+                throw new CoolException("response.save_work_master_failed_loc|" + locNo);
             }
 
-            // 鏇存柊搴撲綅鐘舵�� D 鈫� R锛堝嚭搴撻绾︼級
+            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("鏇存柊搴撲綅鐘舵�佸け璐ワ紝搴撲綅锛�" + locNo);
+                    throw new CoolException("response.update_loc_status_failed_loc|" + locNo);
                 }
             } else {
-                throw new CoolException("搴撲綅鐘舵�佸紓甯革紝闈炵┖鏉跨姸鎬侊細" + locNo);
+                throw new CoolException("response.loc_status_error_not_empty|" + locNo);
             }
         }
     }
@@ -784,7 +1131,7 @@
     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()) {
             // 鑾峰彇宸ヤ綔鍙�
@@ -792,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>()
@@ -802,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();
             // 淇濆瓨宸ヤ綔妗�
@@ -825,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")){
@@ -836,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");
                 }
             }
         }
@@ -851,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()));
             }
         }
@@ -862,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");
         }
     }
 
@@ -875,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();
         // 鑾峰彇宸ヤ綔鍙�
@@ -912,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) {
@@ -926,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");
             }
         }
         // 淇敼婧愬簱浣嶇姸鎬�
@@ -935,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")) {
@@ -946,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$());
         }
     }
 
@@ -958,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) {
@@ -977,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");
         }
     }
 
@@ -989,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();
@@ -1013,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();
@@ -1038,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();
@@ -1069,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();
@@ -1099,7 +1446,7 @@
         locMast.setModiUser(userId);
         locMast.setModiTime(now);
         if (!locMastService.updateById(locMast)) {
-            throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�");
+            throw new CoolException("response.update_loc_status_failed");
         }
     }
 
@@ -1110,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 = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬�
@@ -1124,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);
@@ -1135,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) {
@@ -1146,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);
@@ -1154,7 +1501,7 @@
                 locMastService.updateById(locMast);
             }
         } else {
-            throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曞彇娑�");
+            throw new CoolException("response.work_status_cannot_cancel");
         }
 
         //鍙栨秷鍏ュ簱宸ヤ綔妗f椂锛屾煡璇㈢粍鎵樿〃锛屽鏋滄湁灏嗙姸鎬佹敼涓哄緟澶勭悊
@@ -1178,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");
                     }
 
                     //淇敼璁㈠崟涓昏〃鐘舵��,娌℃湁浣滀笟鏁伴噺鏃舵墠鍙互淇敼
@@ -1197,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");
                         }
                     }
                 }
@@ -1218,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);
@@ -1243,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
@@ -1275,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);
@@ -1304,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())) {
@@ -1320,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>()
@@ -1329,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();
         // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
@@ -1344,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());
@@ -1352,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);
@@ -1371,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);
@@ -1421,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());
@@ -1438,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")){
@@ -1446,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.绂佺敤
@@ -1466,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