From eaa43b12bfe9185b4f0b8f09d9ca081895a4d185 Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期四, 12 三月 2026 21:27:44 +0800
Subject: [PATCH] 1.任务下发失败提醒 2.针对订单出库循环堵塞问题优化

---
 src/main/java/com/zy/asrs/controller/OutController.java |   62 +++++++++++++++++++++++-------
 1 files changed, 47 insertions(+), 15 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/OutController.java b/src/main/java/com/zy/asrs/controller/OutController.java
index c32005b..09d2037 100644
--- a/src/main/java/com/zy/asrs/controller/OutController.java
+++ b/src/main/java/com/zy/asrs/controller/OutController.java
@@ -14,8 +14,8 @@
 import com.zy.common.model.LocDto;
 import com.zy.common.model.TaskDto;
 import com.zy.common.web.BaseController;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -29,6 +29,7 @@
  * Created by vincent on 2022/3/26
  */
 
+@Slf4j
 @RestController
 public class OutController extends BaseController {
 
@@ -88,8 +89,8 @@
                 if (issued <= 0.0D) {
                     continue;
                 }
-                List<LocDetl> locDetls = locDetlService.queryStockAll(null, exist,orderDetl.getMatnr(), orderDetl.getBatch(),
-                        orderDetl.getBrand(),orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3());
+                List<LocDetl> locDetls = locDetlService.queryStockAll(null, exist, orderDetl.getMatnr(), orderDetl.getBatch(),
+                        orderDetl.getBrand(), orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(), orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3());
                 for (LocDetl locDetl : locDetls) {
                     if (issued > 0) {
                         LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
@@ -136,8 +137,8 @@
                 if (issued <= 0.0D) {
                     continue;
                 }
-                List<LocDetl> locDetls = locDetlService.queryStockAll(null, exist,orderDetl.getMatnr(), orderDetl.getBatch(),
-                        orderDetl.getBrand(),orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3());
+                List<LocDetl> locDetls = locDetlService.queryStockAll(null, exist, orderDetl.getMatnr(), orderDetl.getBatch(),
+                        orderDetl.getBrand(), orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(), orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3());
                 for (LocDetl locDetl : locDetls) {
                     if (issued > 0) {
                         LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
@@ -181,14 +182,13 @@
 
     @PostMapping("/out/pakout/auth")
     @ManagerAuth(memo = "璁㈠崟鍑哄簱")
-    @Transactional
     public synchronized R pakout(@RequestBody List<LocDto> locDtos) throws InterruptedException {
         if (Cools.isEmpty(locDtos)) {
             return R.parse(BaseRes.PARAM);
         }
         List<LocDto> locDtoArrayList = new ArrayList<>();
-        for (LocDto locDto : locDtos){
-            if (locDto.getFrozen()!=1 && locDto.getFrozenLoc()!=1){
+        for (LocDto locDto : locDtos) {
+            if (locDto.getFrozen() != 1 && locDto.getFrozenLoc() != 1) {
                 locDtoArrayList.add(locDto);
             }
         }
@@ -212,7 +212,9 @@
         List<TaskDto> taskDtos = new ArrayList<>();
         // 鏍规嵁 锛堝簱浣� & 鍑哄簱绔欙級 鍒嗙粍锛� 鐞嗘兂鐘舵�侊細涓�缁勪负涓�娆″嚭搴撲换鍔�
         for (LocDto locDto : locDtos) {
-            if (locDto.isLack()) { continue; }
+            if (locDto.isLack()) {
+                continue;
+            }
             TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto, locDto.getStandby1());
             if (TaskDto.has(taskDtos, taskDto)) {
                 TaskDto dto = TaskDto.find(taskDtos, taskDto);
@@ -223,16 +225,46 @@
             }
         }
         // -----------------------------------------------------------------------------------------------
+        int failCount = 0;
         for (TaskDto taskDto : taskDtos) {
-            BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
-            if (!Objects.isNull(taskDto.getDeviceNo())) {
-                //鐢熸垚鍑哄簱浠诲姟
-                workService.stockOut(staNo, taskDto, taskDto.getDeviceNo(), getUserId());
-            } else  {
-                workService.stockOut(staNo, taskDto, null, getUserId());
+            if (!stockOutSafely(taskDto, getUserId(), "鎵嬪姩璁㈠崟鍑哄簱")) {
+                failCount++;
             }
+        }
+        if (failCount > 0) {
+            return R.ok("閮ㄥ垎鍑哄簱浠诲姟宸茬敓鎴愶紝鎴愬姛" + (taskDtos.size() - failCount) + "鏉★紝澶辫触" + failCount + "鏉★紝璇锋煡鐪嬫棩蹇�");
         }
         return R.ok();
     }
 
+    private boolean stockOutSafely(TaskDto taskDto, Long userId, String scene) {
+        try {
+            BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
+            workService.stockOut(staNo, taskDto, taskDto.getDeviceNo(), userId);
+            return true;
+        } catch (Exception e) {
+            log.error("{}澶辫触[locNo={}, staNo={}, deviceNo={}, orderNos={}]锛屽師鍥�: {}",
+                    scene,
+                    taskDto.getLocNo(),
+                    taskDto.getStaNo(),
+                    taskDto.getDeviceNo(),
+                    collectOrderNos(taskDto),
+                    getErrorMessage(e));
+            return false;
+        }
+    }
+
+    private String collectOrderNos(TaskDto taskDto) {
+        Set<String> orderNos = new LinkedHashSet<>();
+        for (LocDto locDto : taskDto.getLocDtos()) {
+            if (!Cools.isEmpty(locDto.getOrderNo())) {
+                orderNos.add(locDto.getOrderNo());
+            }
+        }
+        return orderNos.toString();
+    }
+
+    private String getErrorMessage(Exception e) {
+        return Cools.isEmpty(e.getMessage()) ? e.getClass().getSimpleName() : e.getMessage();
+    }
 }

--
Gitblit v1.9.1