From 7020a74ae60374f202e804bb972ee977dacb66f8 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期二, 07 四月 2026 09:33:50 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java |  104 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 104 insertions(+), 0 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 9a7a5b7..9f07632 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,10 +1,19 @@
 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.hk.state.HkState;
+import com.zy.acs.common.hk.state.HkStateActionState;
+import com.zy.acs.common.hk.state.HkStateAgvPosition;
+import com.zy.acs.common.hk.state.HkStateBatteryState;
+import com.zy.acs.common.hk.state.HkStateVelocity;
+import com.zy.acs.common.hk.state.type.HkActionStatusType;
 import com.zy.acs.common.utils.RedisSupport;
 import com.zy.acs.manager.core.cache.CoreCache;
+import com.zy.acs.manager.common.config.HikOrderProperties;
+import com.zy.acs.manager.core.constant.HikAngleConstant;
 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;
@@ -12,13 +21,20 @@
 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.AgvModel;
 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.*;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.StringUtils;
 
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.Locale;
 import java.util.Objects;
 
 /**
@@ -36,6 +52,7 @@
     private final JamService jamService;
     private final MainService mainService;
     private final List<Action> actionList;
+    private final HikOrderProperties hikOrderProperties;
 
     private final RedisSupport redis;
 
@@ -51,6 +68,7 @@
             , MapService mapService
             , JamService jamService
             , MainService mainService
+            , HikOrderProperties hikOrderProperties
             , List<Action> actionList
     ) {
         this.agv = agv;
@@ -62,6 +80,7 @@
         this.mapService = mapService;
         this.jamService = jamService;
         this.mainService = mainService;
+        this.hikOrderProperties = hikOrderProperties;
         this.actionList = actionList;
 
         this.groupId = actionList.get(0).getGroupId();
@@ -191,6 +210,11 @@
         }
 
         // 2.complete data
+        if (isHikAgv()) {
+            finishHikActionList();
+            return;
+        }
+
         AGV_11_UP agv_11_up = new AGV_11_UP();
         agv_11_up.setSerialNo(groupId);
         agv_11_up.setCompleteCode(AgvCompleteType.ENTIRE_PATH_COMPLETE.getCode());
@@ -201,4 +225,84 @@
         mainService.upDataSubscribe(agvProtocol);
 //        redis.push(RedisConstant.AGV_COMPLETE_FLAG, agvProtocol);
     }
+
+    private void finishHikActionList() {
+        HkState state = new HkState();
+        state.setTimestamp(Instant.now().toString());
+        state.setSerialNumber(agv.getUuid());
+        state.setManufacturer(hikOrderProperties.getManufacturer());
+        state.setVersion(hikOrderProperties.getMajorVersion());
+        state.setOrderId(groupId);
+        state.setOrderUpdateId(0L);
+        state.setZoneSetId(hikOrderProperties.getZoneSetId());
+        state.setDriving(Boolean.FALSE);
+        state.setPaused(Boolean.FALSE);
+        state.setNodeStates(Collections.emptyList());
+        state.setEdgeStates(Collections.emptyList());
+        state.setActionStates(buildFinishedActionStates());
+        state.setLastNodeSequenceId(actionList.size() * 2L);
+
+        Code code = codeService.getCacheByData(actionList.get(actionList.size() - 1).getCode());
+        if (code != null) {
+            state.setLastNodeId(code.getData());
+            state.setAgvPosition(buildAgvPosition(code));
+        }
+
+        AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId());
+        state.setVelocity(new HkStateVelocity());
+        state.setBatteryState(buildBatteryState(agvDetail));
+
+        redis.push(RedisConstant.HK_AGV_DATA_FLAG, state);
+    }
+
+    private List<HkStateActionState> buildFinishedActionStates() {
+        List<HkStateActionState> actionStates = new ArrayList<>();
+        for (Action action : actionList) {
+            HkStateActionState actionState = new HkStateActionState();
+            actionState.setActionId("A" + action.getId());
+            actionState.setActionStatus(HkActionStatusType.FINISHED);
+            ActionTypeType actionType = ActionTypeType.get(action.getActionTypeEl());
+            actionState.setActionType(actionType == null ? String.valueOf(action.getActionType()) : actionType.name());
+            actionStates.add(actionState);
+        }
+        return actionStates;
+    }
+
+    private HkStateAgvPosition buildAgvPosition(Code code) {
+        HkStateAgvPosition position = new HkStateAgvPosition();
+        position.setPositionInitialized(Boolean.TRUE);
+        position.setLocalizationScore(1.0);
+        position.setX(code.getX() * hikOrderProperties.getCoordinateScale());
+        position.setY(code.getY() * hikOrderProperties.getCoordinateScale());
+        position.setMapId(hikOrderProperties.getMapId());
+
+        AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId());
+        if (agvDetail != null && agvDetail.getAgvAngle() != null) {
+            position.setTheta(HikAngleConstant.toHikAngleRadians(Math.toRadians(agvDetail.getAgvAngle())));
+        }
+        return position;
+    }
+
+    private HkStateBatteryState buildBatteryState(AgvDetail agvDetail) {
+        HkStateBatteryState batteryState = new HkStateBatteryState();
+        if (agvDetail == null) {
+            return batteryState;
+        }
+        if (agvDetail.getSoc() != null) {
+            batteryState.setBatteryCharge(agvDetail.getSoc().doubleValue());
+        }
+        if (agvDetail.getVol() != null) {
+            batteryState.setBatteryVoltage(agvDetail.getVol().doubleValue());
+        }
+        return batteryState;
+    }
+
+    private boolean isHikAgv() {
+        AgvModel agvModel = agvModelService.getByAgvId(agv.getId());
+        if (agvModel == null) {
+            return false;
+        }
+        String protocol = agvModel.getProtocol();
+        return StringUtils.hasText(protocol) && protocol.toLowerCase(Locale.ROOT).contains("hik");
+    }
 }

--
Gitblit v1.9.1