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/service/WrkMastService.java          |    3 
 src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java   |   20 ++
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java    |    2 
 src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java |    6 
 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java            |    6 
 src/main/java/com/zy/asrs/task/WorkMastScheduler.java          |  148 ++++++++++++--------
 src/main/resources/mapper/WrkMastMapper.xml                    |    8 +
 src/main/java/com/zy/asrs/task/OrderSyncScheduler.java         |   51 ++++++-
 src/main/webapp/static/js/wrkMast/wrkMast.js                   |    2 
 src/main/java/com/zy/asrs/controller/OutController.java        |   62 ++++++--
 src/main/java/com/zy/common/service/CommonService.java         |  110 ---------------
 11 files changed, 220 insertions(+), 198 deletions(-)

diff --git a/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java b/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
index 37283b4..07d0aec 100644
--- a/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
+++ b/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
@@ -153,7 +153,7 @@
         }else if (!Objects.isNull(params.getType()) && params.getType().equals("move")) {
             url = createLocMoveTask;
         }
-        String response;
+        String response = null;
         R r = R.ok();
         try {
             log.info("涓嬪彂鎼繍浠诲姟缁檞cs="+JSON.toJSONString(params));
@@ -233,15 +233,21 @@
                 }
                 //TODO 涓婃姤鏄惁鎴愬姛
             }else {
-                r =R.error();
+                String msg = jsonObject.getString("msg");
+                if (Cools.isEmpty(msg)) {
+                    msg = jsonObject.getString("message");
+                }
+                r = R.error(Cools.isEmpty(msg) ? "涓嬪彂浠诲姟澶辫触" : msg);
             }
         } catch (IOException e) {
-            throw new RuntimeException(e);
+            log.error("涓嬪彂浠诲姟缁檞cs寮傚父, request={}", JSON.toJSONString(params), e);
+            return R.error("璋冪敤WCS鎺ュ彛澶辫触锛�" + e.getMessage());
+        } catch (Exception e) {
+            log.error("瑙f瀽WCS涓嬪彂缁撴灉寮傚父, request={}, response={}", JSON.toJSONString(params), response, e);
+            return R.error("WCS杩斿洖缁撴灉寮傚父锛�" + e.getMessage());
         }
         return r;
     }
-
-
     /**
      * 涓婃姤閿佸畾/閲婃斁搴撲綅淇℃伅
      *
@@ -258,7 +264,7 @@
                 url = MesConstant.RELEASE_LOCS_URL;
             }
         }
-        String response;
+        String response = null;
         try {
             response = new HttpHandler.Builder()
                     .setUri(MesConstant.URL)
@@ -520,3 +526,5 @@
         return locAround;
     }
 }
+
+
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();
+    }
 }
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index 8d0111e..2a968d8 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -7,6 +7,7 @@
 import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Repository;
 
+import java.util.Date;
 import java.util.List;
 
 @Mapper
@@ -25,4 +26,9 @@
             , @Param("standby1")String standby1, @Param("standby2")String standby2, @Param("standby3")String standby3
             , @Param("boxType1")String boxType1, @Param("boxType2")String boxType2, @Param("boxType3")String boxType3, @Param("crnNo") Integer crnNo);
 
+    int updatePublishError(@Param("wrkNo") Integer wrkNo,
+                           @Param("updMk") String updMk,
+                           @Param("errorTime") Date errorTime,
+                           @Param("errorMemo") String errorMemo);
+
 }
diff --git a/src/main/java/com/zy/asrs/service/WrkMastService.java b/src/main/java/com/zy/asrs/service/WrkMastService.java
index 0329de3..69bcbd1 100644
--- a/src/main/java/com/zy/asrs/service/WrkMastService.java
+++ b/src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -4,6 +4,7 @@
 import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.entity.result.FindLocNoAttributeVo;
 
+import java.util.Date;
 import java.util.List;
 
 public interface WrkMastService extends IService<WrkMast> {
@@ -27,4 +28,6 @@
 
     List<WrkMast> selectWrkMastWrkDetl(Integer ioType, FindLocNoAttributeVo findLocNoAttributeVo, Integer crnNo);
 
+    int updatePublishError(Integer wrkNo, String updMk, Date errorTime, String errorMemo);
+
 }
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 8870b81..be3e4b6 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -459,7 +459,7 @@
                 .eq("dev_no", basDevice.getType()).orderBy("order_no"));
 
         if (Objects.isNull(binds)) {
-            log.error("娌℃湁鍙敤鏈哄彴");
+            log.error(deviceNo+"---"+basDevice.getType()+"--娌℃湁鍙敤鏈哄彴");
             return;
         }
 //
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
index d8ad458..a9b3acb 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -10,6 +10,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
 import java.util.List;
 
 @Slf4j
@@ -58,4 +59,9 @@
                 ,findLocNoAttributeVo.getBoxType1(),findLocNoAttributeVo.getBoxType2(),findLocNoAttributeVo.getBoxType3()
                 ,crnNo);
     }
+
+    @Override
+    public int updatePublishError(Integer wrkNo, String updMk, Date errorTime, String errorMemo) {
+        return this.baseMapper.updatePublishError(wrkNo, updMk, errorTime, errorMemo);
+    }
 }
diff --git a/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java b/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
index ebf389c..0bd578b 100644
--- a/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
+++ b/src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -2,7 +2,6 @@
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
-import com.core.common.R;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.service.*;
 import com.zy.asrs.task.core.ReturnT;
@@ -90,7 +89,7 @@
                             List<LocDetl> locDetls = locDetlService.queryStockAll(null, exist, detl.getMatnr(), detl.getBatch(),
                                     detl.getBrand(), detl.getStandby1(), detl.getStandby2(), detl.getStandby3(), detl.getBoxType1(), detl.getBoxType2(), detl.getBoxType3());
                             for (LocDetl locDetl : locDetls) {
-                                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetl.getLocNo()).eq("loc_sts","F"));
+                                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetl.getLocNo()).eq("loc_sts", "F"));
                                 if (locMast != null) {
                                     LocAroundBind bLocNo = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", locMast.getLocNo()));
                                     if (!Cools.isEmpty(bLocNo)) {
@@ -132,7 +131,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);
@@ -143,14 +144,15 @@
                             }
                         }
                         // -----------------------------------------------------------------------------------------------
+                        int failCount = 0;
                         for (TaskDto taskDto : taskDtos) {
-                            BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
-                            if (!Objects.isNull(taskDto.getDeviceNo())) {
-                                //鐢熸垚鍑哄簱浠诲姟
-                                workService.stockOut(staNo, taskDto, taskDto.getDeviceNo(), 9995L);
-                            } else  {
-                                workService.stockOut(staNo, taskDto, null, 9995L);
+                            if (!stockOutSafely(taskDto, 9995L, "鑷姩璁㈠崟鍑哄簱")) {
+                                failCount++;
                             }
+                        }
+                        if (failCount > 0) {
+                            log.warn("鑷姩璁㈠崟鍑哄簱閮ㄥ垎澶辫触[orderNo={}]锛屾垚鍔焮}鏉★紝澶辫触{}鏉�",
+                                    order.getOrderNo(), taskDtos.size() - failCount, failCount);
                         }
                     }
                 }
@@ -201,4 +203,35 @@
             }
         }
     }
+
+    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();
+    }
 }
diff --git a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
index efe8e29..4ce13b4 100644
--- a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
+++ b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -8,9 +8,7 @@
 import com.zy.api.service.WcsApiService;
 import com.zy.asrs.entity.LocAroundBind;
 import com.zy.asrs.entity.LocMast;
-import com.zy.asrs.entity.Task;
 import com.zy.asrs.entity.WrkMast;
-import com.zy.asrs.mapper.TaskMapper;
 import com.zy.asrs.service.LocAroundBindService;
 import com.zy.asrs.service.TaskService;
 import com.zy.asrs.service.WrkMastService;
@@ -88,78 +86,108 @@
         }
         Collections.shuffle(wrkMasts);
         for (WrkMast wrkMast : wrkMasts) {
-            //鏌ョ湅涓嬪彂浠诲姟鏄惁涓哄喕缁撳簱浣嶏紝鏄喕缁撳簱浣嶅垯璺宠繃涓嬪彂浠诲姟
-            LocAroundBind locAroundBind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>()
-                    .eq("b_loc_no", wrkMast.getLocNo())
-                    .eq("freeze", 1));
-            if (Cools.isEmpty(locAroundBind)) {
-                locAroundBind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>()
-                        .eq("b_loc_no", wrkMast.getSourceLocNo())
+            try {
+                //鏌ョ湅涓嬪彂浠诲姟鏄惁涓哄喕缁撳簱浣嶏紝鏄喕缁撳簱浣嶅垯璺宠繃涓嬪彂浠诲姟
+                LocAroundBind locAroundBind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>()
+                        .eq("b_loc_no", wrkMast.getLocNo())
                         .eq("freeze", 1));
-                if (!Cools.isEmpty(locAroundBind)) {
+                if (Cools.isEmpty(locAroundBind)) {
+                    locAroundBind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>()
+                            .eq("b_loc_no", wrkMast.getSourceLocNo())
+                            .eq("freeze", 1));
+                    if (!Cools.isEmpty(locAroundBind)) {
+                        markPublishError(wrkMast.getWrkNo(), String.valueOf("婧愬簱浣嶈鍐荤粨"));
+                        continue;
+                    }
+                } else {
+                    markPublishError(wrkMast.getWrkNo(), String.valueOf("鐩爣搴撲綅琚喕缁�"));
                     continue;
                 }
-            }else {
-                continue;
-            }
 //            Integer crnNo = wrkMast.getCrnNo();
 //            //璇ュ爢鍨涙満宸茬粡涓嬪彂浠诲姟缁檞cs鍚庝笉鍐嶄笅鍙戞柊鐨勬惉杩愪换鍔�
 //            List<WrkMast> wrkMasts1 = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).in("wrk_sts", Arrays.asList(2L, 12L)));
 //            if (!wrkMasts1.isEmpty()) {
 //                continue;
 //            }
-            //婧愬簱浣嶄负鍐荤粨搴撲綅鏃剁姝笅鍙戞惉杩愪换鍔$粰鍫嗗灈鏈�
-            if (!Cools.isEmpty(wrkMast.getSourceLocNo())){
-                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
-                        .eq("loc_no", wrkMast.getSourceLocNo())
-                        .eq("frozen",0));
-                if (Cools.isEmpty(locMast)) {
-                    continue;
+                //婧愬簱浣嶄负鍐荤粨搴撲綅鏃剁姝笅鍙戞惉杩愪换鍔$粰鍫嗗灈鏈�
+                if (!Cools.isEmpty(wrkMast.getSourceLocNo())) {
+                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                            .eq("loc_no", wrkMast.getSourceLocNo())
+                            .eq("frozen", 0));
+                    if (Cools.isEmpty(locMast)) {
+                        continue;
+                    }
                 }
-            }
 
-            //鐩爣搴撲綅涓哄喕缁撳簱浣嶆椂绂佹涓嬪彂鎼繍浠诲姟缁欏爢鍨涙満
-            if (!Cools.isEmpty(wrkMast.getLocNo())){
-                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
-                        .eq("loc_no", wrkMast.getLocNo())
-                        .eq("frozen",0));
-                if (Cools.isEmpty(locMast)) {
-                    continue;
+                //鐩爣搴撲綅涓哄喕缁撳簱浣嶆椂绂佹涓嬪彂鎼繍浠诲姟缁欏爢鍨涙満
+                if (!Cools.isEmpty(wrkMast.getLocNo())) {
+                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                            .eq("loc_no", wrkMast.getLocNo())
+                            .eq("frozen", 0));
+                    if (Cools.isEmpty(locMast)) {
+                        continue;
+                    }
                 }
-            }
 
-            String wcsSourceLocNo = Cools.isEmpty(wrkMast.getSourceLocNo()) ? "" : Utils.WMSLocToWCSLoc(wrkMast.getSourceLocNo());
-            String wcsLocNo = Cools.isEmpty(wrkMast.getLocNo()) ? "" : Utils.WMSLocToWCSLoc(wrkMast.getLocNo());
-            WorkTaskParams params = new WorkTaskParams();
-            //鍑哄簱鍜岀Щ搴�
-            if((wrkMast.getIoType()==101||wrkMast.getIoType()==110)&&!Cools.isEmpty(wrkMast.getStaNo())&& !wrkMast.getStaNo().equals("0")) {
-                params.setType("out")
-                        .setTaskNo(wrkMast.getWrkNo()+"")
-                        .setSourceLocNo(wcsSourceLocNo)
-                        .setLocNo(wcsLocNo)
-                        .setStaNo(wrkMast.getStaNo())
-                        .setTaskPri(wrkMast.getIoPri().intValue())
-                        .setBarcode(wrkMast.getBarcode());
-            }else if(wrkMast.getIoType()==2&& !Cools.isEmpty(wrkMast.getSourceStaNo())){
-                params.setType("in")
-                        .setTaskNo(wrkMast.getWrkNo()+"")
-                        .setSourceStaNo(wrkMast.getSourceStaNo())
-                        .setStaNo(wrkMast.getStaNo())
-                        .setLocNo(wcsLocNo)
-                        .setTaskPri(wrkMast.getIoPri().intValue())
-                        .setBarcode(wrkMast.getBarcode());
-            } else {
-                params.setType("move")
-                        .setTaskNo(wrkMast.getWrkNo()+"")
-                        .setSourceLocNo(wcsSourceLocNo)
-                        .setLocNo(wcsLocNo)
-                        .setBarcode(wrkMast.getBarcode());
+                String wcsSourceLocNo = Cools.isEmpty(wrkMast.getSourceLocNo()) ? "" : Utils.WMSLocToWCSLoc(wrkMast.getSourceLocNo());
+                String wcsLocNo = Cools.isEmpty(wrkMast.getLocNo()) ? "" : Utils.WMSLocToWCSLoc(wrkMast.getLocNo());
+                Integer taskPri = wrkMast.getIoPri() == null ? null : wrkMast.getIoPri().intValue();
+                WorkTaskParams params = new WorkTaskParams();
+                //鍑哄簱鍜岀Щ搴�
+                if ((wrkMast.getIoType() == 101 || wrkMast.getIoType() == 110) && !Cools.isEmpty(wrkMast.getStaNo()) && !wrkMast.getStaNo().equals("0")) {
+                    params.setType("out")
+                            .setTaskNo(wrkMast.getWrkNo() + "")
+                            .setSourceLocNo(wcsSourceLocNo)
+                            .setLocNo(wcsLocNo)
+                            .setStaNo(wrkMast.getStaNo())
+                            .setTaskPri(taskPri)
+                            .setBarcode(wrkMast.getBarcode());
+                } else if (wrkMast.getIoType() == 2 && !Cools.isEmpty(wrkMast.getSourceStaNo())) {
+                    params.setType("in")
+                            .setTaskNo(wrkMast.getWrkNo() + "")
+                            .setSourceStaNo(wrkMast.getSourceStaNo())
+                            .setStaNo(wrkMast.getStaNo())
+                            .setLocNo(wcsLocNo)
+                            .setTaskPri(taskPri)
+                            .setBarcode(wrkMast.getBarcode());
+                } else {
+                    params.setType("move")
+                            .setTaskNo(wrkMast.getWrkNo() + "")
+                            .setSourceLocNo(wcsSourceLocNo)
+                            .setLocNo(wcsLocNo)
+                            .setBarcode(wrkMast.getBarcode());
+                }
+                R r = wcsApiService.pubWrkToWcs(params);
+                if (isSuccess(r)) {
+                    clearPublishError(wrkMast.getWrkNo());
+                    break;
+                }
+                markPublishError(wrkMast.getWrkNo(), String.valueOf(r.get("msg")));
+            } catch (Exception e) {
+                log.error("宸ヤ綔妗wrkNo={}]涓嬪彂浠诲姟寮傚父", wrkMast.getWrkNo(), e);
+                markPublishError(wrkMast.getWrkNo(), e.getMessage());
             }
-            R r = wcsApiService.pubWrkToWcs(params);
-            if (r.get("code").equals(200)){
-                break;
-            }
-        };
+        }
+    }
+
+    private boolean isSuccess(R r) {
+        return r != null && "200".equals(String.valueOf(r.get("code")));
+    }
+
+    private void markPublishError(Integer wrkNo, String msg) {
+        if (wrkMastService.updatePublishError(wrkNo, "X", new Date(), buildPublishErrorMsg(msg)) <= 0) {
+            log.error("宸ヤ綔妗wrkNo={}]鍥炲啓涓嬪彂寮傚父澶辫触", wrkNo);
+        }
+    }
+
+    private void clearPublishError(Integer wrkNo) {
+        if (wrkMastService.updatePublishError(wrkNo, null, null, null) <= 0) {
+            log.error("宸ヤ綔妗wrkNo={}]娓呯悊涓嬪彂寮傚父澶辫触", wrkNo);
+        }
+    }
+
+    private String buildPublishErrorMsg(String msg) {
+        return Cools.isEmpty(msg) || "null".equalsIgnoreCase(msg) ? "涓嬪彂浠诲姟澶辫触" : "涓嬪彂浠诲姟澶辫触锛�" + msg;
     }
 
     /**
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index b62242a..845ecd9 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -233,10 +233,8 @@
         //姝ょ▼搴忕敤浜庝紭鍖栧爢鍨涙満寮傚父鏃剁殑杩愯鏃堕棿
         for (int i = times; i < crnNumber * 2; i++) {
             int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber);
-            curRow = locNecessaryParameters[1];
             crnNo = locNecessaryParameters[2];
             if (basCrnpService.checkSiteError(crnNo, true)) {
-                rowCount = locNecessaryParameters[0];
                 nearRow = locNecessaryParameters[3];
                 List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                         .eq("row1", nearRow)
@@ -246,6 +244,9 @@
                         .eq("whs_type", rowLastnoType.getType().longValue()));
                 int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).le("io_type", 100));
                 if (locMasts.size() - crnCountO <= 2) {
+                    if(curRow+2==7){
+
+                    }
                     log.error(crnNo + "鍙峰爢鍨涙満娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", JSON.toJSONString(locTypeDto), times);
                     nearRow = 0;
                     times++;
@@ -258,111 +259,6 @@
         }
         if (nearRow == 0) {
             throw new CoolException("鏃犲彲鐢ㄥ爢鍨涙満");
-        }
-
-        boolean signRule1 = false;
-        boolean signRule2 = false;
-
-
-        if (Utils.BooleanWhsTypeStaIoType(rowLastno)) {
-            // 闈犺繎鎽嗘斁瑙勫垯 --- 鍚屽ぉ鍚岃鏍肩墿鏂� //鍒嗙鐗�
-            if (!Cools.isEmpty(findLocNoAttributeVo.getMatnr()) && staDescId == 1) {
-                signRule1 = true;
-            }
-            // 闈犺繎鎽嗘斁瑙勫垯 --- 鍚屽ぉ鍚岃鏍肩墿鏂� //浜掗�氱増
-            if (!Cools.isEmpty(findLocNoAttributeVo.getMatnr()) && staDescId == 1) {
-                signRule2 = true;
-            }
-
-            if (!Cools.isEmpty(findLocNoAttributeVo.getMatnr()) && (staDescId == 11 || staDescId == 111)) {
-                signRule1 = true;
-            }
-        }
-
-        if (signRule1) {
-            if (nearRow != curRow) {
-                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
-                        .eq("row1", nearRow)
-                        .eq("frozen", 0).eq("deleted", 0)
-                        .eq("loc_sts", "O")
-                        .eq("whs_type", rowLastnoType.getType().longValue()));
-                for (LocMast locMast1 : locMasts) {
-                    //鑾峰彇宸烽亾
-//                    List<String> groupOutsideLocCrn = Utils.getGroupOutLocCrn(curRow,nearRow,locMast1.getLocNo(), curRow>nearRow);
-//                    LocMast locMastGro = locMastService.selectById(wrkMast.getLocNo());
-                    //鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娴呴潪绌哄簱浣�
-                    LocMast locMastF = locMastService.selectLocByLocStsPakInF(curRow, nearRow, locMast1, rowLastnoType.getType().longValue());
-                    if (!Cools.isEmpty(locMastF) && locMastF.getLocSts().equals("F")) {
-                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMastF.getLocNo()));
-                        if (!Cools.isEmpty(locDetl) && findLocNoAttributeVo.beSimilar(locDetl)) {
-                            //鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娣辩┖搴撲綅
-                            locMast = locMastService.selectLocByLocStsPakInO(curRow, nearRow, locMast1, rowLastnoType.getType().longValue());
-                            break;
-                        }
-                    }
-                }
-            }
-        } else if (signRule2) {
-            List<String> locNos = locDetlService.getSameDetlToday(findLocNoAttributeVo.getMatnr(), sRow, eRow);
-            for (String locNo : locNos) {
-                if (Utils.isShallowLoc(slaveProperties, locNo)) {
-                    continue;
-                }
-                String shallowLocNo = Utils.getShallowLoc(slaveProperties, locNo);
-                // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
-                LocMast shallowLoc = locMastService.selectById(shallowLocNo);
-                if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
-                    if (VersionUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
-                        if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
-                            locMast = shallowLoc;
-                            crnNo = locMast.getCrnNo();
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-
-//        // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭  //鍒嗙鐗�
-//        if (staDescId == 10 && Utils.BooleanWhsTypeStaIoType(whsType)) {
-//            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O"));
-//            for (LocMast locMast1:locMasts){
-//                if (VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
-//                    continue;
-//                }
-//                String shallowLoc = Utils.getDeepLoc(slaveProperties,locMast1.getLocNo());
-//                LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",shallowLoc));
-//                if (!Cools.isEmpty(locMast2) && locMast2.getLocSts().equals("D")){
-//                    locMast = locMast1;
-//                    break;
-//                }
-//            }
-//        }
-
-        // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭 //浜掗�氱増
-        if (staDescId == 10 && Utils.BooleanWhsTypeStaIoType(rowLastno)) {
-            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
-                    .eq("loc_sts", "D").eq("frozen", 0).eq("deleted", 0)
-                    .ge("row1", sRow).le("row1", eRow).eq("whs_type", rowLastnoType.getType().longValue()));
-            if (!locMasts.isEmpty()) {
-                for (LocMast loc : locMasts) {
-                    if (Utils.isShallowLoc(slaveProperties, loc.getLocNo())) {
-                        continue;
-                    }
-                    String shallowLocNo = Utils.getShallowLoc(slaveProperties, loc.getLocNo());
-                    // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
-                    LocMast shallowLoc = locMastService.selectById(shallowLocNo);
-                    if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
-                        if (VersionUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
-                            if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
-                                locMast = shallowLoc;
-                                crnNo = locMast.getCrnNo();
-                                break;
-                            }
-                        }
-                    }
-                }
-            }
         }
 
         Wrapper<StaDesc> wrapper = null;
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index a06edb2..eeb0ead 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -149,4 +149,12 @@
         </choose>
     </select>
 
+    <update id="updatePublishError">
+        update asr_wrk_mast
+        set upd_mk = #{updMk},
+            error_time = #{errorTime},
+            error_memo = #{errorMemo}
+        where wrk_no = #{wrkNo}
+    </update>
+
 </mapper>
diff --git a/src/main/webapp/static/js/wrkMast/wrkMast.js b/src/main/webapp/static/js/wrkMast/wrkMast.js
index c1e41cb..dd64486 100644
--- a/src/main/webapp/static/js/wrkMast/wrkMast.js
+++ b/src/main/webapp/static/js/wrkMast/wrkMast.js
@@ -36,6 +36,7 @@
             ,{field: 'preHave', align: 'center',title: '鍏堝叆鍝�', hide: true}
             ,{field: 'takeNone', align: 'center',title: '绌烘搷浣�', hide: true}
             ,{field: 'isSuplus$', align: 'center', title: '鍥炲簱绫诲瀷', hide: false, width: 120}
+            ,{field: 'errorMemo', align: 'center',title: '涓嬪彂/寮傚父淇℃伅', minWidth: 220}
             ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳', hide:true}
             ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿', hide:true, width: 160}
             ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:350}
@@ -683,3 +684,4 @@
         $("#search").click();
     }
 });
+

--
Gitblit v1.9.1