From 0a3cbfd5731c46c2a89cc6a7b4ff5096dc89a315 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期二, 07 一月 2025 13:56:53 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java |  178 ++++++++++++++++++++++++++++++++--------------------------
 1 files changed, 98 insertions(+), 80 deletions(-)

diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
index 45bdd19..a71e6f0 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -250,7 +250,6 @@
             Agv agv = agvService.getById(agvId);
             if (!agvService.judgeEnable(agv.getId(), true)) {
                 return;
-//                throw new CoolException("AGV[" + agv.getUuid() + "]褰撳墠涓嶅彲鐢�...");
             }
             if (!Cools.isEmpty(taskService.selectInSts(agvId, TaskStsType.ASSIGN, TaskStsType.PROGRESS))) {
                 throw new CoolException("AGV[" + agv.getUuid() + "]鍒嗛厤浠诲姟澶辫触锛屽凡瀛樺湪鎵ц浠诲姟...");
@@ -473,6 +472,7 @@
             // task
             for (Task task : taskList) {
                 task.setTaskSts(TaskStsType.ASSIGN.val());
+                task.setStartTime(now);
                 task.setUpdateTime(now);
                 if (!taskService.updateById(task)) {
                     throw new BusinessException(task.getUuid() + "浠诲姟鏇存柊澶辫触");
@@ -642,7 +642,7 @@
      * 鏍规嵁鍒嗙墖鐢熸垚鍔ㄤ綔 ( 杞﹁締鍙兘宸茬粡鍋氳繃涓�浜涗换鍔′簡,姝e湪绛夊緟涓嬩竴娈典换鍔� )
      */
     @Transactional
-    public synchronized void generateAction(Long agvId, List<Segment> segmentList, List<String> pathList) {
+    public synchronized void generateAction(Long agvId, List<Segment> segmentList, List<String> pathList, Date algoStartTime) {
         try {
             if (Cools.isEmpty(agvId, segmentList)) { return; }
             Date now = new Date();
@@ -658,7 +658,6 @@
             assert agvSpeedType != null;
 
             AgvDetail agvDetail = agvDetailService.selectByAgvId(agvId);
-            assert agvDetail != null;
 
             List<Action> actionList = new ArrayList<>();
             // start node
@@ -697,7 +696,7 @@
                             nextDirection = workDirection;
                             reverse = true;
                         }
-                        if (!lastDirection.equals(nextDirection) || actionList.size() == 0) {
+                        if (!lastDirection.equals(nextDirection) || actionList.isEmpty()) {
                             // turn
                             actionList.add(new Action(
                                     null,    // 缂栧彿
@@ -1011,6 +1010,9 @@
                 item.setGroupId(groupId);
                 item.setState(SegmentStateType.RUNNING.toString());
                 item.setUpdateTime(now);
+                if (null != algoStartTime) {
+                    item.setAlgoTime((int) (now.getTime() - algoStartTime.getTime()));
+                }
                 if (!segmentService.updateById(item)) {
                     throw new CoolException("鏇存柊Segment澶辫触");
                 }
@@ -1023,7 +1025,8 @@
 
             if (!Cools.isEmpty(pathList)) {
                 pathList.remove(0);
-                mapDataDispatcher.clearDynamicMatrixByCodeList(null, pathList);
+                List<int[]> codeMatrixIdxList = mapDataDispatcher.getCodeMatrixIdxList(null, pathList);
+                mapDataDispatcher.clearDynamicMatrixByCodeList(null, codeMatrixIdxList);
             }
 
             throw new RuntimeException("generateAction method caught an exception, rolling back transaction.", e);
@@ -1042,8 +1045,9 @@
             if (Cools.isEmpty(actionList)) {
                 return;
             }
+            long actionIssuedSts = ActionStsType.ISSUED.val();
             for (Action action : actionList) {
-                action.setActionSts(ActionStsType.ISSUED.val());
+                action.setActionSts(actionIssuedSts);
                 action.setStartTime(now);
                 action.setIoTime(now);
                 action.setUpdateTime(now);
@@ -1054,17 +1058,18 @@
 
             // task
             List<Long> taskIds = actionService.selectTaskIdsByGroupId(actionGroupId);
+            long taskAssignSts = TaskStsType.ASSIGN.val();
+            long taskProgressSts = TaskStsType.PROGRESS.val();
             for (Long taskId : taskIds) {
                 Task task = taskService.getById(taskId);
-                if (task.getTaskSts().equals(TaskStsType.ASSIGN.val())) {
-                    task.setTaskSts(TaskStsType.PROGRESS.val());
+                if (task.getTaskSts().equals(taskAssignSts)) {
+                    task.setTaskSts(taskProgressSts);
                     task.setUpdateTime(now);
                     if (!taskService.updateById(task)) {
                         throw new BusinessException(task.getSeqNum() + "浠诲姟鏇存柊澶辫触");
                     }
                 }
             }
-
 
             Agv agv = agvService.getById(actionList.get(0).getAgvId());
             AgvAction agvAction = new AgvAction(agv.getUuid(), actionGroupId);
@@ -1250,77 +1255,8 @@
                         .orderByAsc(Segment::getSerial)
                 );
 
-                // task
-                for (Segment segment : segmentList) {
-                    boolean taskComplete = false;
-
-                    Task task = taskService.getById(segment.getTaskId());   assert null != task;
-                    TaskTypeType typeType = TaskTypeType.get(task.getTaskTypeEl());     assert null != typeType;
-
-                    TaskPosDto.PosType posType = TaskPosDto.queryPosType(segment.getPosType());
-                    switch (Objects.requireNonNull(posType)) {
-                        case ORI_STA:
-                        case ORI_LOC:
-                            break;
-                        case DEST_STA:
-                        case DEST_LOC:
-                        case TO_CHARGE:
-                        case TO_STANDBY:
-                            if (segment.getEndNode().equals(task.getDestCode())) {
-                                taskComplete = true;
-                            }
-                            break;
-                        case MOVE:
-                            if (segment.getEndNode().equals(task.getDestCode())) {
-                                if (typeType.equals(TaskTypeType.MOVE)) {
-                                    taskComplete = true;
-                                }
-                            }
-                            break;
-                        default:
-                            break;
-                    }
-
-                    if (taskComplete) {
-                        locService.taskCallBack(task);
-
-                        task.setTaskSts(TaskStsType.COMPLETE.val());
-                        task.setEndTime(now);
-                        task.setUpdateTime(now);
-                        if (!taskService.updateById(task)) {
-                            log.error("Task [{}] 鏇存柊澶辫触 锛侊紒锛�", task.getSeqNum());
-                        } else {
-                            log.info("Task [{}] 浣滀笟瀹屾瘯 ==========>> ", task.getSeqNum());
-                        }
-
-                    }
-                }
-
-                // action
-                List<Action> actionList = actionService.list(new LambdaQueryWrapper<Action>()
-                        .eq(Action::getGroupId, serialNo)
-                        .eq(Action::getActionSts, ActionStsType.ISSUED.val())
-                );
-                for (Action action : actionList) {
-                    action.setActionSts(ActionStsType.FINISH.val());
-                    action.setEndTime(now);
-                    action.setUpdateTime(now);
-                    if (!actionService.updateById(action)) {
-                        log.error("Action [{}] 鏇存柊澶辫触 锛侊紒锛�", action.getPriority() + " - " + action.getName());
-                    }
-                }
-
-                // segment
-                for (Segment segment : segmentList) {
-                    segment.setState(SegmentStateType.FINISH.toString());
-                    segment.setUpdateTime(now);
-                    if (!segmentService.updateById(segment)) {
-                        log.error("Segment [{}] 鏇存柊澶辫触 锛侊紒锛�", segment.getGroupId() + " - " + segment.getSerial());
-                    }
-                }
-
-                // segment call back
-                segmentService.processNext(segmentList);
+                // settlement
+                this.settleSegmentList(segmentList, serialNo);
 
                 log.info("Agv [{}] {}浣滀笟瀹屾瘯 ==========>> ", protocol.getAgvNo(), serialNo);
 
@@ -1335,4 +1271,86 @@
         }
     }
 
+    @Transactional
+    public void settleSegmentList(List<Segment> segmentList, String serialNo) {
+        if (Cools.isEmpty(segmentList)) {
+            return;
+        }
+        Date now = new Date();
+
+        // task
+        for (Segment segment : segmentList) {
+            boolean taskComplete = false;
+
+            Task task = taskService.getById(segment.getTaskId());   assert null != task;
+            TaskTypeType typeType = TaskTypeType.get(task.getTaskTypeEl());     assert null != typeType;
+
+            TaskPosDto.PosType posType = TaskPosDto.queryPosType(segment.getPosType());
+            switch (Objects.requireNonNull(posType)) {
+                case ORI_STA:
+                case ORI_LOC:
+                    break;
+                case DEST_STA:
+                case DEST_LOC:
+                case TO_CHARGE:
+                case TO_STANDBY:
+                    if (segment.getEndNode().equals(task.getDestCode())) {
+                        taskComplete = true;
+                    }
+                    break;
+                case MOVE:
+                    if (segment.getEndNode().equals(task.getDestCode())) {
+                        if (typeType.equals(TaskTypeType.MOVE)) {
+                            taskComplete = true;
+                        }
+                    }
+                    break;
+                default:
+                    break;
+            }
+
+            if (taskComplete) {
+                locService.taskCallBack(task);
+
+                task.setTaskSts(TaskStsType.COMPLETE.val());
+                task.setEndTime(now);
+                task.setUpdateTime(now);
+                if (!taskService.updateById(task)) {
+                    log.error("Task [{}] 鏇存柊澶辫触 锛侊紒锛�", task.getSeqNum());
+                } else {
+                    log.info("Task [{}] 浣滀笟瀹屾瘯 ==========>> ", task.getSeqNum());
+                }
+
+            }
+        }
+
+        // action, follow by groupId
+        if (!Cools.isEmpty(serialNo)) {
+            List<Action> actionList = actionService.list(new LambdaQueryWrapper<Action>()
+                    .eq(Action::getGroupId, serialNo)
+                    .eq(Action::getActionSts, ActionStsType.ISSUED.val())
+            );
+            for (Action action : actionList) {
+                action.setActionSts(ActionStsType.FINISH.val());
+                action.setEndTime(now);
+                action.setUpdateTime(now);
+                if (!actionService.updateById(action)) {
+                    log.error("Action [{}] 鏇存柊澶辫触 锛侊紒锛�", action.getPriority() + " - " + action.getName());
+                }
+            }
+        }
+
+        // segment
+        for (Segment segment : segmentList) {
+            segment.setState(SegmentStateType.FINISH.toString());
+            segment.setUpdateTime(now);
+            if (!segmentService.updateById(segment)) {
+                log.error("Segment [{}] 鏇存柊澶辫触 锛侊紒锛�", segment.getGroupId() + " - " + segment.getSerial());
+            }
+        }
+
+        // segment call back
+        segmentService.processNext(segmentList);
+    }
+
 }

--
Gitblit v1.9.1