From 2a6e27f1c0064690d6fc6ab137d64c02fc0742da Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期一, 16 六月 2025 16:16:09 +0800
Subject: [PATCH] 1

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java |  140 ++++++++++++++++++++++++++++------------------
 1 files changed, 86 insertions(+), 54 deletions(-)

diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java
index 1b2b688..9a7a5b7 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java
@@ -1,19 +1,21 @@
 package com.zy.acs.manager.fake;
 
-import com.zy.acs.common.constant.RedisConstant;
 import com.zy.acs.common.domain.AgvProtocol;
 import com.zy.acs.common.domain.protocol.AGV_11_UP;
 import com.zy.acs.common.enums.AgvCompleteType;
 import com.zy.acs.common.utils.RedisSupport;
+import com.zy.acs.manager.core.cache.CoreCache;
+import com.zy.acs.manager.core.domain.CodeStepDto;
+import com.zy.acs.manager.core.domain.type.JobType;
+import com.zy.acs.manager.core.scheduler.MapDataWsScheduler;
+import com.zy.acs.manager.core.service.MainService;
+import com.zy.acs.manager.core.service.MapService;
 import com.zy.acs.manager.manager.entity.Action;
 import com.zy.acs.manager.manager.entity.Agv;
-import com.zy.acs.manager.manager.entity.AgvDetail;
 import com.zy.acs.manager.manager.entity.Code;
 import com.zy.acs.manager.manager.enums.ActionStsType;
 import com.zy.acs.manager.manager.enums.ActionTypeType;
-import com.zy.acs.manager.manager.service.ActionService;
-import com.zy.acs.manager.manager.service.AgvDetailService;
-import com.zy.acs.manager.manager.service.CodeService;
+import com.zy.acs.manager.manager.service.*;
 import lombok.extern.slf4j.Slf4j;
 
 import java.util.List;
@@ -27,8 +29,12 @@
 
     private final Agv agv;
     private final AgvDetailService agvDetailService;
+    private final AgvModelService agvModelService;
     private final ActionService actionService;
     private final CodeService codeService;
+    private final MapService mapService;
+    private final JamService jamService;
+    private final MainService mainService;
     private final List<Action> actionList;
 
     private final RedisSupport redis;
@@ -39,15 +45,23 @@
             Agv agv
             , RedisSupport redis
             , AgvDetailService agvDetailService
+            , AgvModelService agvModelService
             , ActionService actionService
             , CodeService codeService
+            , MapService mapService
+            , JamService jamService
+            , MainService mainService
             , List<Action> actionList
     ) {
         this.agv = agv;
         this.redis = redis;
         this.agvDetailService = agvDetailService;
+        this.agvModelService = agvModelService;
         this.actionService = actionService;
         this.codeService = codeService;
+        this.mapService = mapService;
+        this.jamService = jamService;
+        this.mainService = mainService;
         this.actionList = actionList;
 
         this.groupId = actionList.get(0).getGroupId();
@@ -56,7 +70,6 @@
     @Override
     public void run() {
         try {
-            FakeProcessor.AGV_PROCESSING_MAP.put(agv.getId(), true);
             String qrCode = null;
             for (Action action : actionList) {
                 processAction(agv, action);
@@ -71,14 +84,11 @@
     }
 
     private void processAction(Agv agv, Action action) throws InterruptedException {
-        AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId());
-        if (agvDetail == null) {
-            return;
-        }
 
         switch (Objects.requireNonNull(ActionTypeType.get(action.getActionTypeEl()))) {
             case TurnCorner:
-                simulateRotating(agv, agvDetail, action);
+                simulateWalking(agv, action);
+                simulateRotating(agv, action);
                 break;
             case StraightBackUnturnable:
             case StraightBackTurnable:
@@ -86,7 +96,7 @@
             case StraightAheadTurnable:
             case FinishPath:
             case DockingCharge:
-                simulateWalking(agv, agvDetail, action);
+                simulateWalking(agv, action);
                 break;
             case ReadyTakeFromShelvesLoc:
             case ReadyReleaseToShelvesLoc:
@@ -98,68 +108,89 @@
     }
 
 
-    private void simulateWalking(Agv agv, AgvDetail agvDetail, Action action) throws InterruptedException {
-        Code currCode = codeService.getById(agvDetail.getRecentCode());
-        Code code = codeService.selectByData(action.getCode());
-
-        agvDetail.setPos(1);
-        agvDetail.setCode(code.getId());
-
+    private void simulateWalking(Agv agv, Action action) throws InterruptedException {
+        Code code = codeService.getCacheByData(action.getCode());
+//        agvDetail.setPos(1);
+//        agvDetail.setCode(code.getId());
         // 妯℃嫙鐢甸噺娑堣��
 //        agvDetail.setVol(agvDetail.getVol() - 0.1 * distanceToMove); // 鏍规嵁璺濈娑堣�楃數閲�
 
-        agvDetailService.updateById(agvDetail);
+        Thread.sleep(MapDataWsScheduler.WEBSOCKET_BROADCAST_INTERVAL);
 
-        Thread.sleep(1000);
+        agvDetailService.updatePosCodeByAgvId(agv.getId(), code.getId());
+//        agvDetailService.updateById(agvDetail);
+
+        mapService.unlockPath(agv.getUuid(), code.getData());
+        jamService.checkIfFinish(agv.getId(), code.getData());
 
         action.setActionSts(ActionStsType.FINISH.val());
         actionService.updateById(action);
-
-
     }
 
     /**
      * 妯℃嫙AGV鏃嬭浆
      *
      * @param agv        褰撳墠AGV
-     * @param agvDetail  AGV璇︾粏淇℃伅
      * @param action     褰撳墠鍔ㄤ綔
      */
-    private void simulateRotating(Agv agv, AgvDetail agvDetail, Action action) throws InterruptedException {
-//        Double agvAngle = agvDetail.getAgvAngle();
-//        double actionAngle = Double.parseDouble(action.getParams());
+    private void simulateRotating(Agv agv, Action action) throws InterruptedException {
+        double actionAngle = Double.parseDouble(action.getParams());
+//        agvDetail.setAgvAngle(actionAngle);
+        // 妯℃嫙鐢甸噺娑堣��?
+//        agvDetail.setVol(agvDetail.getVol() - 0.05 * (angleToRotate / 15.0)); // 鏍规嵁瑙掑害娑堣�楃數閲�
 
-
-
-        double totalAngle = Double.parseDouble(action.getParams()); // 鍋囪Action鏈塧ngle灞炴��
-        double stepAngle = 45.0; // 姣忕鏃嬭浆15搴︼紝鍏蜂綋鍊兼牴鎹渶姹傝皟鏁�
-        double actionProgress = 0.0;
-
-        while (actionProgress < totalAngle) {
-            double angleToRotate = Math.min(stepAngle, totalAngle - actionProgress);
-            // 鏇存柊AGV鐨勮搴�
-            double newAngle = (agvDetail.getAgvAngle() + angleToRotate) % 360;
-            agvDetail.setAgvAngle(newAngle);
-
-            // 妯℃嫙鐢甸噺娑堣��
-//            agvDetail.setVol(agvDetail.getVol() - 0.05 * (angleToRotate / 15.0)); // 鏍规嵁瑙掑害娑堣�楃數閲�
-
-            // 鏇存柊AGV璇︾粏淇℃伅
-            agvDetailService.updateById(agvDetail);
-
-            // 妯℃嫙瀹為檯鎵ц鏃堕棿
-            Thread.sleep(1000); // 姣忕鎵ц涓�娆�
-
-            actionProgress += angleToRotate;
-        }
-
-        // 鍔ㄤ綔瀹屾垚锛屾洿鏂扮姸鎬�
+        Thread.sleep(MapDataWsScheduler.WEBSOCKET_BROADCAST_INTERVAL);
+        agvDetailService.updateAngleByAgvId(agv.getId(), actionAngle);
         action.setActionSts(ActionStsType.FINISH.val());
         actionService.updateById(action);
     }
 
     private void finishActionList(String qrCode) {
-        // 1.complete data
+        Long agvId = this.agv.getId();
+        String agvNo = this.agv.getUuid();
+        // 1.show effect
+        CodeStepDto codeStepDto = CoreCache.AGV_MOCK_STEP_CACHE.get(agvId);
+        if (null != codeStepDto && qrCode.equals(codeStepDto.getCodeData())) {
+//            Code currentCode = agvDetailService.getCurrentCode(this.agv.getId());
+            try { Thread.sleep(codeStepDto.getJobType().waitTime); } catch (InterruptedException ignore) {}
+            CoreCache.AGV_MOCK_STEP_CACHE.remove(this.agv.getId());
+
+            JobType jobType = CoreCache.AGV_MOCK_JOB_CACHE.get(this.agv.getUuid());
+            switch (jobType) {
+                case LOC_PICK:
+                    Integer usedSlotsByLocPick = CoreCache.AGV_BACKPACK_USED_CACHE.get(agvId);
+                    usedSlotsByLocPick++;
+                    CoreCache.AGV_BACKPACK_USED_CACHE.put(agvId, usedSlotsByLocPick);
+
+                    if (Objects.equals(agvModelService.getByAgvId(agvId).getBackpack(), usedSlotsByLocPick)) {
+                        CoreCache.AGV_MOCK_JOB_CACHE.put(agvNo, JobType.CONVEYOR_DROP);
+                    }
+                    break;
+                case CONVEYOR_DROP:
+                    CoreCache.AGV_BACKPACK_USED_CACHE.put(agvId, 0);
+
+                    CoreCache.AGV_MOCK_JOB_CACHE.put(agvNo, JobType.CONVEYOR_PICK);
+                    break;
+                case CONVEYOR_PICK:
+                    CoreCache.AGV_BACKPACK_USED_CACHE.put(agvId, agvModelService.getByAgvId(agvId).getBackpack());
+
+                    CoreCache.AGV_MOCK_JOB_CACHE.put(agvNo, JobType.LOCK_DROP);
+                    break;
+                case LOCK_DROP:
+                    Integer usedSlotsByLocDrop = CoreCache.AGV_BACKPACK_USED_CACHE.get(agvId);
+                    usedSlotsByLocDrop--;
+                    CoreCache.AGV_BACKPACK_USED_CACHE.put(agvId, usedSlotsByLocDrop);
+
+                    if (usedSlotsByLocDrop == 0) {
+                        CoreCache.AGV_MOCK_JOB_CACHE.put(agvNo, JobType.LOC_PICK);
+                    }
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        // 2.complete data
         AGV_11_UP agv_11_up = new AGV_11_UP();
         agv_11_up.setSerialNo(groupId);
         agv_11_up.setCompleteCode(AgvCompleteType.ENTIRE_PATH_COMPLETE.getCode());
@@ -167,6 +198,7 @@
         agv_11_up.setQrCode(qrCode);
 
         AgvProtocol agvProtocol = AgvProtocol.build(this.agv.getUuid()).setMessageBody(agv_11_up);
-        redis.push(RedisConstant.AGV_COMPLETE_FLAG, agvProtocol);
+        mainService.upDataSubscribe(agvProtocol);
+//        redis.push(RedisConstant.AGV_COMPLETE_FLAG, agvProtocol);
     }
 }

--
Gitblit v1.9.1