From 46168fbb7c925b0ec04def176095e967720e684a Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期五, 16 一月 2026 15:22:07 +0800
Subject: [PATCH] agv查询修复

---
 src/main/java/com/zy/common/config/CoolExceptionHandler.java |    3 
 src/main/java/com/zy/asrs/task/handler/AgvHandler.java       |  122 +++++++++++---------
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java  |   91 ++++++++------
 src/main/webapp/static/js/taskLog/taskLog.js                 |   13 +
 src/main/java/com/zy/common/web/BaseController.java          |    8 +
 src/main/java/com/zy/asrs/task/AgvScheduler.java             |   26 ++++
 src/main/java/com/zy/asrs/controller/TaskLogController.java  |   31 +++-
 src/main/java/com/zy/asrs/entity/TaskLog.java                |   22 +--
 8 files changed, 198 insertions(+), 118 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/TaskLogController.java b/src/main/java/com/zy/asrs/controller/TaskLogController.java
index d4910b7..440c4ee 100644
--- a/src/main/java/com/zy/asrs/controller/TaskLogController.java
+++ b/src/main/java/com/zy/asrs/controller/TaskLogController.java
@@ -12,6 +12,7 @@
 import com.zy.asrs.entity.TaskLog;
 import com.zy.asrs.service.TaskLogService;
 import com.zy.common.web.BaseController;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -20,6 +21,7 @@
 import java.util.List;
 import java.util.Map;
 
+@Slf4j
 @RestController
 public class TaskLogController extends BaseController {
 
@@ -40,20 +42,33 @@
                   @RequestParam(required = false) String orderByType,
                   @RequestParam(required = false) String condition,
                   @RequestParam Map<String, Object> param) {
-        EntityWrapper<TaskLog> wrapper = new EntityWrapper<>();
-        excludeTrash(param);
-        convert(param, wrapper);
-        allLike(TaskLog.class, param.keySet(), wrapper, condition);
-        if (!Cools.isEmpty(orderByField)) {
-            wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
+        try {
+            log.info("TaskLog鏌ヨ璇锋眰锛屽弬鏁帮細curr={}, limit={}, param={}", curr, limit, param);
+            EntityWrapper<TaskLog> wrapper = new EntityWrapper<>();
+            excludeTrash(param);
+            convert(param, wrapper);
+            allLike(TaskLog.class, param.keySet(), wrapper, condition);
+            if (!Cools.isEmpty(orderByField)) {
+                wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
+            }
+            wrapper.orderBy("appe_time",false);
+            Page<TaskLog> page = taskLogService.selectPage(new Page<>(curr, limit), wrapper);
+            log.info("TaskLog鏌ヨ鎴愬姛锛岃繑鍥瀧}鏉¤褰�", page.getRecords().size());
+            return R.ok(page);
+        } catch (Exception e) {
+            log.error("TaskLog鏌ヨ澶辫触", e);
+            e.printStackTrace();
+            return R.error("鏌ヨ澶辫触锛�" + e.getMessage());
         }
-        wrapper.orderBy("appe_time",false);
-        return R.ok(taskLogService.selectPage(new Page<>(curr, limit), wrapper));
     }
 
     private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper) {
         for (Map.Entry<String, Object> entry : map.entrySet()) {
             String val = String.valueOf(entry.getValue());
+            // 璺宠繃绌哄�煎拰 "null" 瀛楃涓�
+            if (Cools.isEmpty(val) || "null".equals(val)) {
+                continue;
+            }
             if (val.contains(RANGE_TIME_LINK)) {
                 String[] dates = val.split(RANGE_TIME_LINK);
                 wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
diff --git a/src/main/java/com/zy/asrs/entity/TaskLog.java b/src/main/java/com/zy/asrs/entity/TaskLog.java
index 2f69175..941ba7f 100644
--- a/src/main/java/com/zy/asrs/entity/TaskLog.java
+++ b/src/main/java/com/zy/asrs/entity/TaskLog.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.annotations.TableField;
 import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.core.common.SpringUtils;
 import com.zy.asrs.service.*;
@@ -23,6 +24,13 @@
 
     @ApiModelProperty(value = "")
     private Long id;
+
+    /**
+     * 浠诲姟绫诲瀷锛� agv  , crn
+     */
+    @ApiModelProperty(value = "浠诲姟绫诲瀷锛� agv  , crn")
+    @TableField("task_type")
+    private String taskType;
 
     /**
      * 宸ヤ綔鍙�
@@ -457,21 +465,11 @@
     }
 
     public String getStaNo$() {
-        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
-        BasDevp basDevp = service.selectById(this.staNo);
-        if (!Cools.isEmpty(basDevp)) {
-            return String.valueOf(basDevp.getDevNo());
-        }
-        return null;
+        return this.staNo;
     }
 
     public String getSourceStaNo$() {
-        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
-        BasDevp basDevp = service.selectById(this.sourceStaNo);
-        if (!Cools.isEmpty(basDevp)) {
-            return String.valueOf(basDevp.getDevNo());
-        }
-        return null;
+        return this.sourceStaNo;
     }
 
     public String getSourceLocNo$() {
diff --git a/src/main/java/com/zy/asrs/task/AgvScheduler.java b/src/main/java/com/zy/asrs/task/AgvScheduler.java
index 5eb5e6f..cd317c9 100644
--- a/src/main/java/com/zy/asrs/task/AgvScheduler.java
+++ b/src/main/java/com/zy/asrs/task/AgvScheduler.java
@@ -146,6 +146,7 @@
             
             Date now = new Date();
             int completedCount = 0;
+            List<Task> completedTasks = new ArrayList<>();
             
             for (WrkMast wrkMast : completedWrkMasts) {
                 // 鏌ユ壘瀵瑰簲鐨凙GV浠诲姟锛堜紭鍏堥�氳繃wrk_no鏌ヨ锛�
@@ -173,11 +174,22 @@
                         agvTask.setWrkSts(9L);
                         agvTask.setModiTime(now);
                         if (taskService.updateById(agvTask)) {
+                            completedTasks.add(agvTask);
                             completedCount++;
                             log.info("鍏ュ簱浠诲姟宸ヤ綔妗e凡鍏ュ簱鎴愬姛锛屽畬缁揂GV鍛煎彨鍗曪紝taskId锛歿}锛寃rkNo锛歿}锛宐arcode锛歿}", 
                                 agvTask.getId(), wrkMast.getWrkNo(), wrkMast.getBarcode());
                         }
                     }
+                }
+            }
+            
+            // 绔嬪嵆灏嗗畬鎴愮殑AGV浠诲姟杞Щ鍒板巻鍙茶〃锛屼笉淇濈暀鍦═ask琛ㄤ腑
+            if (!completedTasks.isEmpty()) {
+                try {
+                    agvHandler.moveTaskToHistory(completedTasks);
+                    log.info("鍏ュ簱瀹屾垚锛屽凡灏唟}涓狝GV浠诲姟杞Щ鍒板巻鍙茶〃锛堜笉淇濈暀鍦═ask琛ㄤ腑锛�", completedTasks.size());
+                } catch (Exception e) {
+                    log.error("鍏ュ簱瀹屾垚锛岃浆绉籄GV浠诲姟鍒板巻鍙茶〃澶辫触", e);
                 }
             }
             
@@ -213,6 +225,7 @@
             
             Date now = new Date();
             int completedCount = 0;
+            List<Task> completedTasks = new ArrayList<>();
             
             for (Task agvTask : agvTasks) {
                 boolean isCompleted = false;
@@ -288,11 +301,12 @@
                     }
                 }
                 
-                // 濡傛灉宸插畬鎴愶紝鏇存柊AGV浠诲姟鐘舵��
+                // 濡傛灉宸插畬鎴愶紝鏇存柊AGV浠诲姟鐘舵�佸苟鏀堕泦鍒板垪琛�
                 if (isCompleted) {
                     agvTask.setWrkSts(9L);
                     agvTask.setModiTime(now);
                     if (taskService.updateById(agvTask)) {
+                        completedTasks.add(agvTask);
                         completedCount++;
                         log.info("{}锛屽畬缁揂GV鍛煎彨鍗曪紝taskId锛歿}锛寃rkNo锛歿}锛宐arcode锛歿}锛岀珯鐐癸細{}", 
                             reason, agvTask.getId(), agvTask.getWrkNo(), agvTask.getBarcode(), agvTask.getStaNo());
@@ -300,6 +314,16 @@
                 }
             }
             
+            // 绔嬪嵆灏嗗畬鎴愮殑AGV浠诲姟杞Щ鍒板巻鍙茶〃锛屼笉淇濈暀鍦═ask琛ㄤ腑
+            if (!completedTasks.isEmpty()) {
+                try {
+                    agvHandler.moveTaskToHistory(completedTasks);
+                    log.info("鍏ュ簱/鍑哄簱瀹屾垚锛屽凡灏唟}涓狝GV浠诲姟杞Щ鍒板巻鍙茶〃锛堜笉淇濈暀鍦═ask琛ㄤ腑锛�", completedTasks.size());
+                } catch (Exception e) {
+                    log.error("鍏ュ簱/鍑哄簱瀹屾垚锛岃浆绉籄GV浠诲姟鍒板巻鍙茶〃澶辫触", e);
+                }
+            }
+            
             if (completedCount > 0) {
                 log.info("鏈妫�鏌ュ畬缁撲簡{}涓狝GV鍛煎彨鍗曪紙宸ヤ綔妗e凡瀹屾垚鎴栧凡杞巻鍙叉。锛�", completedCount);
             }
diff --git a/src/main/java/com/zy/asrs/task/handler/AgvHandler.java b/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
index 458f54b..4349f98 100644
--- a/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
@@ -322,14 +322,14 @@
             return null;
         }
         
-        // 鎺掗櫎鏈夋鍦ㄦ惉杩愪换鍔$殑绔欑偣锛堢姸鎬�8锛氬凡鍛煎彨AGV锛屾鍦ㄦ惉杩愶級
-        List<BasDevp> availableDevList = new ArrayList<>();
-        Integer taskIoType = task.getIoType();
+        // 鍏堟寜瑙勫垯鎺掑簭锛堝叆搴撲换鍔℃暟鎺掑簭锛�
+        devList.sort(Comparator.comparing(BasDevp::getInQty));
         
+        // 鏍规嵁浠诲姟绫诲瀷纭畾瑕佹鏌ョ殑io_type鍒楄〃
+        Integer taskIoType = task.getIoType();
+        List<Integer> checkIoTypes = null;
+        String taskTypeName = "";
         if (taskIoType != null) {
-            // 鏍规嵁浠诲姟绫诲瀷纭畾瑕佹鏌ョ殑io_type鍒楄〃
-            List<Integer> checkIoTypes;
-            String taskTypeName;
             if (taskIoType < 100) {
                 // 鍏ュ簱浠诲姟锛氬彧妫�鏌ュ叆搴撶被鍨嬶紙1, 10, 53, 57锛�
                 checkIoTypes = Arrays.asList(1, 10, 53, 57);
@@ -339,11 +339,54 @@
                 checkIoTypes = Arrays.asList(101, 110, 103, 107);
                 taskTypeName = "鍑哄簱";
             }
+        }
+        
+        // 绛涢�夊嚭浠诲姟鏁版渶灏戠殑绔欑偣鍒楄〃锛堟寜瑙勫垯鎺掑簭鍚庣殑鍊欓�夌珯鐐癸級
+        int minInQty = devList.get(0).getInQty();
+        List<BasDevp> minTaskSites = devList.stream()
+                .filter(dev -> dev.getInQty() == minInQty)
+                .collect(Collectors.toList());
+        
+        // 鏍规嵁閰嶇疆閫夋嫨鍒嗛厤绛栫暐锛岀‘瀹氫紭鍏堝垎閰嶇殑绔欑偣椤哄簭
+        List<BasDevp> orderedSites = new ArrayList<>();
+        String strategy = agvProperties.getSiteAllocation().getStrategy();
+        boolean enableRoundRobin = agvProperties.getSiteAllocation().isEnableRoundRobin();
+        
+        if (minTaskSites.size() > 1 && enableRoundRobin && "round-robin".equals(strategy)) {
+            // 杞鍒嗛厤锛氬厛鎸夎疆璇㈢瓥鐣ユ帓搴�
+            AtomicInteger counter = siteRoundRobinCounters.computeIfAbsent(groupKey, k -> new AtomicInteger(0));
+            int startIndex = counter.get() % minTaskSites.size();
+            // 灏嗚疆璇㈤�変腑鐨勭珯鐐规斁鍦ㄦ渶鍓嶉潰
+            orderedSites.addAll(minTaskSites.subList(startIndex, minTaskSites.size()));
+            orderedSites.addAll(minTaskSites.subList(0, startIndex));
+            // 娣诲姞鍏朵粬绔欑偣锛堜换鍔℃暟鏇村鐨勶級
+            orderedSites.addAll(devList.stream()
+                    .filter(dev -> dev.getInQty() > minInQty)
+                    .collect(Collectors.toList()));
+            log.debug("浣跨敤杞鍒嗛厤绛栫暐锛岀珯鐐圭粍锛歿}锛岃疆璇㈣捣濮嬬储寮曪細{}", groupKey, startIndex);
+        } else if (minTaskSites.size() > 1 && enableRoundRobin && "random".equals(strategy)) {
+            // 闅忔満鍒嗛厤锛氬厛闅忔満鎺掑簭浠诲姟鏁版渶灏戠殑绔欑偣
+            List<BasDevp> shuffledMinSites = new ArrayList<>(minTaskSites);
+            Collections.shuffle(shuffledMinSites);
+            orderedSites.addAll(shuffledMinSites);
+            // 娣诲姞鍏朵粬绔欑偣锛堜换鍔℃暟鏇村鐨勶級
+            orderedSites.addAll(devList.stream()
+                    .filter(dev -> dev.getInQty() > minInQty)
+                    .collect(Collectors.toList()));
+            log.debug("浣跨敤闅忔満鍒嗛厤绛栫暐");
+        } else {
+            // 榛樿锛氭寜鍏ュ簱浠诲姟鏁版帓搴忥紙宸茬粡鎺掑簭濂戒簡锛�
+            orderedSites = devList;
+        }
+        
+        // 渚濇妫�鏌ユ瘡涓珯鐐规槸鍚﹀湪鎼繍锛屾壘鍒扮涓�涓┖闂茬珯鐐瑰氨鍒嗛厤
+        BasDevp selectedSite = null;
+        for (BasDevp dev : orderedSites) {
+            String staNo = String.valueOf(dev.getDevNo());
             
-            // 妫�鏌ユ瘡涓珯鐐规槸鍚︽湁姝e湪鎼繍鐨勫悓绫诲瀷浠诲姟
-            for (BasDevp dev : devList) {
-                String staNo = String.valueOf(dev.getDevNo());
-                // 鏌ヨ璇ョ珯鐐规槸鍚︽湁鐘舵��8锛堟鍦ㄦ惉杩愶級鐨勫悓绫诲瀷浠诲姟
+            // 濡傛灉浠诲姟绫诲瀷涓嶄负绌猴紝妫�鏌ヨ绔欑偣鏄惁鏈夋鍦ㄦ惉杩愮殑鍚岀被鍨嬩换鍔�
+            boolean isTransporting = false;
+            if (checkIoTypes != null && !checkIoTypes.isEmpty()) {
                 List<Task> transportingTasks = taskService.selectList(
                     new EntityWrapper<Task>()
                         .eq("sta_no", staNo)
@@ -351,61 +394,29 @@
                         .eq("wrk_sts", 8L) // 鍙鏌ユ鍦ㄦ惉杩愮姸鎬佺殑浠诲姟
                         .in("io_type", checkIoTypes)
                 );
+                isTransporting = !transportingTasks.isEmpty();
                 
-                if (transportingTasks.isEmpty()) {
-                    // 璇ョ珯鐐规病鏈夋鍦ㄦ惉杩愮殑浠诲姟锛屽彲浠ュ垎閰�
-                    availableDevList.add(dev);
-                } else {
-                    log.debug("绔欑偣{}鏈墈}涓鍦ㄦ惉杩愮殑{}AGV浠诲姟锛岃烦杩囧垎閰�", 
+                if (isTransporting) {
+                    log.debug("绔欑偣{}鏈墈}涓鍦ㄦ惉杩愮殑{}AGV浠诲姟锛屾鏌ヤ笅涓�涓珯鐐�", 
                         staNo, transportingTasks.size(), taskTypeName);
+                    continue; // 璇ョ珯鐐规鍦ㄦ惉杩愶紝妫�鏌ヤ笅涓�涓珯鐐�
                 }
             }
-        } else {
-            // 濡傛灉ioType涓虹┖锛屼笉杩涜杩囨护锛堜繚鎸佸師鏈夐�昏緫锛�
-            availableDevList = devList;
+            
+            // 鎵惧埌绗竴涓┖闂茬珯鐐癸紝鍒嗛厤
+            selectedSite = dev;
+            log.info("浠诲姟ID锛歿}鎸夎鍒欏簲鍒嗛厤鍒扮珯鐐箋}锛岃绔欑偣绌洪棽锛屽垎閰嶆垚鍔�", task.getId(), staNo);
+            break;
         }
         
         // 濡傛灉鎵�鏈夌珯鐐归兘鍦ㄦ惉杩愶紝鍒欎笉鍒嗛厤绔欑偣
-        if (availableDevList.isEmpty()) {
-            log.warn("浠诲姟ID锛歿}鐨勬墍鏈夊�欓�夌珯鐐归兘鏈夋鍦ㄦ惉杩愮殑{}浠诲姟锛屾殏涓嶅垎閰嶇珯鐐�", 
+        if (selectedSite == null) {
+            log.warn("浠诲姟ID锛歿}鐨勬墍鏈夊�欓�夌珯鐐归兘鏈夋鍦ㄦ惉杩愮殑{}浠诲姟锛屾殏涓嶅垎閰嶇珯鐐癸紝绛夊緟绌洪棽", 
                 task.getId(), taskIoType != null && taskIoType < 100 ? "鍏ュ簱" : "鍑哄簱");
             return null;
         }
         
-        // 鍏ュ簱浠诲姟鏁版帓搴�
-        availableDevList.sort(Comparator.comparing(BasDevp::getInQty));
-        
-        // 閫夋嫨绔欑偣
-        BasDevp basDevp;
-        int minInQty = availableDevList.get(0).getInQty();
-        
-        // 绛涢�夊嚭浠诲姟鏁版渶灏戠殑绔欑偣鍒楄〃
-        List<BasDevp> minTaskSites = availableDevList.stream()
-                .filter(dev -> dev.getInQty() == minInQty)
-                .collect(Collectors.toList());
-        
-        // 鏍规嵁閰嶇疆閫夋嫨鍒嗛厤绛栫暐
-        String strategy = agvProperties.getSiteAllocation().getStrategy();
-        boolean enableRoundRobin = agvProperties.getSiteAllocation().isEnableRoundRobin();
-        
-        if (minTaskSites.size() > 1 && enableRoundRobin && "round-robin".equals(strategy)) {
-            // 杞鍒嗛厤
-            AtomicInteger counter = siteRoundRobinCounters.computeIfAbsent(groupKey, k -> new AtomicInteger(0));
-            int index = counter.getAndIncrement() % minTaskSites.size();
-            basDevp = minTaskSites.get(index);
-            log.info("浣跨敤杞鍒嗛厤绛栫暐锛岀珯鐐圭粍锛歿}锛岃疆璇㈢储寮曪細{}锛岄�変腑绔欑偣锛歿}", groupKey, index, basDevp.getDevNo());
-        } else if (minTaskSites.size() > 1 && enableRoundRobin && "random".equals(strategy)) {
-            // 闅忔満鍒嗛厤
-            Random random = new Random();
-            int index = random.nextInt(minTaskSites.size());
-            basDevp = minTaskSites.get(index);
-            log.info("浣跨敤闅忔満鍒嗛厤绛栫暐锛岄�変腑绔欑偣锛歿}", basDevp.getDevNo());
-        } else {
-            // 榛樿锛氶�夋嫨绗竴涓紙浠诲姟鏈�灏戠殑锛�
-            basDevp = devList.get(0);
-        }
-        
-        Integer endSite = basDevp.getDevNo();
+        Integer endSite = selectedSite.getDevNo();
         
         // 鍏ュ簱鏆傚瓨+1
         basDevpMapper.incrementInQty(endSite);
@@ -445,10 +456,11 @@
     @Transactional(rollbackFor = Exception.class)
     public void moveTaskToHistory(List<Task> taskList) {
 
-        // 鍐欏叆鍘嗗彶琛�
+        // 鍐欏叆鍘嗗彶琛紝淇濇寔ID涓�鑷�
         for (Task task : taskList) {
             TaskLog log = new TaskLog();
             BeanUtils.copyProperties(task, log);
+            // 淇濇寔ID涓�鑷达紝涓嶈缃负null
             taskLogService.insert(log);
         }
 
diff --git a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
index f8883ff..bdba3e6 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -865,55 +865,66 @@
 
     @Transactional(rollbackFor = Exception.class)
     public ReturnT<String> agvDoIn(Task wrkMast) {
-        if (wrkMast.getIoType().equals(1)) {
-            LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo()));
-            if (Objects.isNull(locCache)) {
-                throw new CoolException("鏁版嵁閿欒锛屽簱浣嶄笉瀛樺湪锛侊紒");
-            }
-            if (!locCache.getLocSts().equals(LocStsType.LOC_STS_TYPE_S.type)) {
-                throw new CoolException("褰撳墠搴撲綅鐘舵�佷负锛�" + LocStsType.LOC_STS_TYPE_S.type + "." + LocStsType.LOC_STS_TYPE_S.desc + "锛屼笉鏄嚭搴撻绾︾姸鎬�");
-            }
-            List<TaskDetl> taskDetls = taskDetlService.selectList(new EntityWrapper<TaskDetl>().eq("task_id", wrkMast.getId()));
-            if (Objects.isNull(taskDetls)) {
-                throw new CoolException("鏁版嵁閿欒锛氱粍鎵樻暟鎹笉瀛樺湪锛侊紒");
-            }
-            taskDetls.forEach(pakin -> {
-                LocCacheDetl detl = new LocCacheDetl();
-                BeanUtils.copyProperties(pakin, detl);
-                detl.setBarcode(pakin.getBarcode())
-                        .setLocId(locCache.getId())
-                        .setAnfme(pakin.getAnfme())
-                        .setBrand(pakin.getBrand())
-                        .setAppeTime(new Date())
-                        .setSpecs(pakin.getSpecs())
-                        .setColor(pakin.getColor())
-                        .setLocNo(locCache.getLocNo())
-                        .setAreaId(locCache.getAreaId())
-                        .setAreaName(locCache.getAreaName())
-                        .setUnit(pakin.getUnit())
-                        .setBatch(pakin.getBatch());
-                if (!locCacheDetlService.insert(detl)) {
-                    throw new CoolException("搴撲綅鏄庣粏淇濆瓨澶辫触锛侊紒");
+        Integer ioType = wrkMast.getIoType();
+        if (ioType == null) {
+            throw new CoolException("鏁版嵁閿欒锛歩oType涓虹┖锛侊紒");
+        }
+        
+        // 澶勭悊鍏ュ簱浠诲姟绫诲瀷锛�1锛堝疄鎵樺叆搴擄級銆�10锛堢┖鎵樺叆搴擄級銆�53銆�57
+        if (ioType == 1 || ioType == 10 || ioType == 53 || ioType == 57) {
+            // ioType == 1 闇�瑕佸鐞嗙粍鎵樻暟鎹�
+            if (ioType == 1) {
+                LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo()));
+                if (Objects.isNull(locCache)) {
+                    throw new CoolException("鏁版嵁閿欒锛屽簱浣嶄笉瀛樺湪锛侊紒");
                 }
-            });
+                if (!locCache.getLocSts().equals(LocStsType.LOC_STS_TYPE_S.type)) {
+                    throw new CoolException("褰撳墠搴撲綅鐘舵�佷负锛�" + LocStsType.LOC_STS_TYPE_S.type + "." + LocStsType.LOC_STS_TYPE_S.desc + "锛屼笉鏄嚭搴撻绾︾姸鎬�");
+                }
+                List<TaskDetl> taskDetls = taskDetlService.selectList(new EntityWrapper<TaskDetl>().eq("task_id", wrkMast.getId()));
+                if (Objects.isNull(taskDetls)) {
+                    throw new CoolException("鏁版嵁閿欒锛氱粍鎵樻暟鎹笉瀛樺湪锛侊紒");
+                }
+                taskDetls.forEach(pakin -> {
+                    LocCacheDetl detl = new LocCacheDetl();
+                    BeanUtils.copyProperties(pakin, detl);
+                    detl.setBarcode(pakin.getBarcode())
+                            .setLocId(locCache.getId())
+                            .setAnfme(pakin.getAnfme())
+                            .setBrand(pakin.getBrand())
+                            .setAppeTime(new Date())
+                            .setSpecs(pakin.getSpecs())
+                            .setColor(pakin.getColor())
+                            .setLocNo(locCache.getLocNo())
+                            .setAreaId(locCache.getAreaId())
+                            .setAreaName(locCache.getAreaName())
+                            .setUnit(pakin.getUnit())
+                            .setBatch(pakin.getBatch());
+                    if (!locCacheDetlService.insert(detl)) {
+                        throw new CoolException("搴撲綅鏄庣粏淇濆瓨澶辫触锛侊紒");
+                    }
+                });
 
-            locCache.setLocSts(LocStsType.LOC_STS_TYPE_F.type);
-            locCache.setModiTime(new Date());
-            locCache.setBarcode(wrkMast.getBarcode());
-            locCache.setModiTime(new Date());
-            locCache.setIoTime(new Date());
-            if (!locCacheService.updateById(locCache)) {
-                throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒");
+                locCache.setLocSts(LocStsType.LOC_STS_TYPE_F.type);
+                locCache.setModiTime(new Date());
+                locCache.setBarcode(wrkMast.getBarcode());
+                locCache.setModiTime(new Date());
+                locCache.setIoTime(new Date());
+                if (!locCacheService.updateById(locCache)) {
+                    throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒");
+                }
             }
+            
+            // 鏇存柊浠诲姟鐘舵�佷负5锛堝簱瀛樻洿鏂板畬鎴愶級
             wrkMast.setWrkSts(5L);
             wrkMast.setModiTime(new Date());
             if (!taskService.updateById(wrkMast)) {
                 throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
             }
-        }else {
-            throw new CoolException("鏁版嵁閿欒锛歩oType涓嶅瓨鍦紒锛�");
+        } else {
+            // 闈炲叆搴撲换鍔$被鍨嬶紝璁板綍鏃ュ織浣嗕笉鎶涘嚭寮傚父锛屽厑璁稿叾浠栫被鍨嬬殑浠诲姟閫氳繃
+            log.warn("agvDoIn鏂规硶鏀跺埌闈炲叆搴撲换鍔$被鍨嬶紝ioType锛歿}锛宼askId锛歿}锛岃烦杩囧鐞�", ioType, wrkMast.getId());
         }
-
 
         return SUCCESS;
     }
diff --git a/src/main/java/com/zy/common/config/CoolExceptionHandler.java b/src/main/java/com/zy/common/config/CoolExceptionHandler.java
index b3968a3..a990bf7 100644
--- a/src/main/java/com/zy/common/config/CoolExceptionHandler.java
+++ b/src/main/java/com/zy/common/config/CoolExceptionHandler.java
@@ -2,6 +2,7 @@
 
 import com.core.common.R;
 import com.core.exception.CoolException;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.HttpRequestMethodNotSupportedException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
@@ -10,11 +11,13 @@
 /**
  * Created by vincent on 2019-06-09
  */
+@Slf4j
 @RestControllerAdvice
 public class CoolExceptionHandler {
 
     @ExceptionHandler(Exception.class)
     public R handlerException(HandlerMethod handler, Exception e) {
+        log.error("鍏ㄥ眬寮傚父澶勭悊鍣ㄦ崟鑾峰紓甯革紝handler: {}, 寮傚父淇℃伅: {}", handler != null ? handler.getMethod().getName() : "unknown", e.getMessage(), e);
         e.printStackTrace();
         return R.error();
     }
diff --git a/src/main/java/com/zy/common/web/BaseController.java b/src/main/java/com/zy/common/web/BaseController.java
index 06a2bf5..a3dc2fc 100644
--- a/src/main/java/com/zy/common/web/BaseController.java
+++ b/src/main/java/com/zy/common/web/BaseController.java
@@ -163,6 +163,14 @@
                     || Modifier.isTransient(field.getModifiers())) {
                 continue;
             }
+            // 妫�鏌ュ瓧娈垫槸鍚︽爣璁颁负涓嶅瓨鍦ㄤ簬鏁版嵁搴撹〃涓�
+            if (field.isAnnotationPresent(TableField.class)) {
+                TableField tableField = field.getAnnotation(TableField.class);
+                // 濡傛灉瀛楁鏍囪涓� exist = false锛岃烦杩囪瀛楁
+                if (!tableField.exist()) {
+                    continue;
+                }
+            }
             String column = null;
             if (field.isAnnotationPresent(TableField.class)) {
                 column = field.getAnnotation(TableField.class).value();
diff --git a/src/main/webapp/static/js/taskLog/taskLog.js b/src/main/webapp/static/js/taskLog/taskLog.js
index 231f2bb..680728e 100644
--- a/src/main/webapp/static/js/taskLog/taskLog.js
+++ b/src/main/webapp/static/js/taskLog/taskLog.js
@@ -44,11 +44,20 @@
             pageSize: 'limit'
         },
         parseData: function (res) {
+            // 瀹夊叏妫�鏌ワ紝闃叉res.data涓簎ndefined
+            if (!res || !res.data) {
+                return {
+                    'code': res ? res.code : 500,
+                    'msg': res ? res.msg : '鏁版嵁鏍煎紡閿欒',
+                    'count': 0,
+                    'data': []
+                };
+            }
             return {
                 'code': res.code,
                 'msg': res.msg,
-                'count': res.data.total,
-                'data': res.data.records
+                'count': res.data.total || 0,
+                'data': res.data.records || []
             }
         },
         response: {

--
Gitblit v1.9.1