From 44b9055cb993157bd26ba8a370719fa9080731f4 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期五, 19 十二月 2025 10:36:41 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvService.java          |    4 +
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/AgvController.java    |   37 +----------
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java |  109 +++++++++++++++++++++++++++++++-----
 3 files changed, 102 insertions(+), 48 deletions(-)

diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/AgvController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/AgvController.java
index f3bace4..9d56a6b 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/AgvController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/AgvController.java
@@ -43,21 +43,6 @@
     private TaskService taskService;
     @Autowired
     private MapDataDispatcher mapDataDispatcher;
-    @Autowired
-    private AreaAgvService areaAgvService;
-
-//    @PreAuthorize("hasAuthority('manager:agv:list')")
-//    @PostMapping("/agv/page")
-//    public R page(@RequestBody Map<String, Object> map) {
-//        BaseParam baseParam = buildParam(map, BaseParam.class);
-//        PageParam<Agv, BaseParam> pageParam = new PageParam<>(baseParam, Agv.class);
-//        PageParam<Agv, BaseParam> page = agvService.page(pageParam, pageParam.buildWrapper(true));
-//        for (Agv agv : page.getRecords()) {
-//            AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId());
-//            agv.setAgvDetail(agvDetail);
-//        }
-//        return R.ok().add(page);
-//    }
 
     @PreAuthorize("hasAuthority('manager:agv:list')")
     @PostMapping("/agv/page")
@@ -89,7 +74,6 @@
         Agv agv = agvService.getById(id);
         if (null != agv) {
             agv.setOnline(agvService.judgeOnline(agv.getId()));
-            if (agv.getUuid().equals("2")) { agv.setOnline(true); }
             AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId());
             if (null != agvDetail) {
                 agv.setAgvDetail(agvDetail);
@@ -134,30 +118,19 @@
     @OperationLog("Update Agv")
     @PostMapping("/agv/update")
     public R update(@RequestBody Agv agv) {
-        if (agvService.count(new LambdaQueryWrapper<Agv>()
-                .eq(Agv::getUuid, agv.getUuid())
-                .ne(Agv::getId, agv.getId())) > 0) {
-            return R.error("Update Fail");
-        }
-        agv.setUpdateBy(getLoginUserId());
-        agv.setUpdateTime(new Date());
-        if (!agvService.updateById(agv)) {
-            return R.error("Update Fail");
-        }
-        return R.ok("Update Success").add(agv);
+        return R.ok("Update Success").add(agvService.modify(agv, getLoginUserId()));
     }
 
     @PreAuthorize("hasAuthority('manager:agv:remove')")
     @OperationLog("Delete Agv")
     @PostMapping("/agv/remove/{ids}")
     public R remove(@PathVariable Long[] ids) {
+        Long userId = getLoginUserId();
+        List<Long> agvIds = new ArrayList<>();
         for (Long agvId : ids) {
-            areaAgvService.removeByAgvId(agvId);
+            agvIds.add(agvService.delete(agvId, userId));
         }
-        if (!agvService.removeByIds(Arrays.asList(ids))) {
-            return R.error("Delete Fail");
-        }
-        return R.ok("Delete Success").add(ids);
+        return R.ok("Delete Success").add(agvIds);
     }
 
     @PreAuthorize("hasAuthority('manager:agv:list')")
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvService.java
index 989a4e0..8d9b662 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvService.java
@@ -26,6 +26,10 @@
 
     String getAgvNo(Long agvId);
 
+    Agv modify(Agv agv, Long userId);
+
+    Long delete(Long agvId, Long userId);
+
     Boolean judgeEnable(Long agvId);
 
     Boolean judgeEnable(Long agvId, Boolean withBattery);
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
index 1a08ec2..9f155e7 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
@@ -6,11 +6,13 @@
 import com.zy.acs.common.enums.AgvStatusType;
 import com.zy.acs.common.utils.RedisSupport;
 import com.zy.acs.framework.common.Cools;
+import com.zy.acs.framework.exception.CoolException;
 import com.zy.acs.manager.common.domain.BaseParam;
 import com.zy.acs.manager.common.domain.PageParam;
 import com.zy.acs.manager.common.domain.PageResult;
 import com.zy.acs.manager.core.cache.CoreCache;
 import com.zy.acs.manager.core.domain.VehicleDto;
+import com.zy.acs.manager.core.service.astart.MapDataDispatcher;
 import com.zy.acs.manager.manager.controller.result.AgvResult;
 import com.zy.acs.manager.manager.entity.Agv;
 import com.zy.acs.manager.manager.entity.AgvDetail;
@@ -23,12 +25,14 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.PostConstruct;
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * 瀛楀吀鏁版嵁Service瀹炵幇
@@ -42,9 +46,9 @@
 
     private final RedisSupport redis = RedisSupport.defaultRedisSupport;
 
-    private static final Map<String, Long> AGV_ID_MAP = new HashMap<>();
+    public static final Map<String, Long> AGV_ID_MAP = new ConcurrentHashMap<>();
 
-    private static final Map<Long, String> AGV_NO_MAP = new HashMap<>();
+    public static final Map<Long, String> AGV_NO_MAP = new ConcurrentHashMap<>();
 
     @Autowired
     private AgvDetailService agvDetailService;
@@ -58,6 +62,10 @@
     private SegmentService segmentService;
     @Autowired
     private TaskService taskService;
+    @Autowired
+    private AreaAgvService areaAgvService;
+    @Autowired
+    private MapDataDispatcher mapDataDispatcher;
 
     @PostConstruct
     public void init() {
@@ -80,27 +88,96 @@
     @Override
     public Long getAgvId(String uuid) {
         if (Cools.isEmpty(uuid)) {
-            Agv agv = this.selectByUuid(uuid);
-            if (agv != null) {
-                AGV_ID_MAP.put(uuid, agv.getId());
-            } else {
-                return null;
-            }
+            return null;
         }
-        return AGV_ID_MAP.get(uuid);
+        Long agvId = AGV_ID_MAP.get(uuid);
+        if (agvId != null) {
+            return agvId;
+        }
+        Agv agv = this.selectByUuid(uuid);
+        if (agv == null) {
+            return null;
+        }
+        AGV_ID_MAP.put(uuid, agv.getId());
+        return agv.getId();
     }
 
     @Override
     public String getAgvNo(Long agvId) {
         if (Cools.isEmpty(agvId)) {
-            Agv agv = this.getById(agvId);
-            if (agv != null) {
-                AGV_NO_MAP.put(agvId, agv.getUuid());
-            } else {
-                return null;
+            return null;
+        }
+        String agvNo = AGV_NO_MAP.get(agvId);
+        if (!Cools.isEmpty(agvNo)) {
+            return agvNo;
+        }
+        Agv agv = this.getById(agvId);
+        if (null == agv) {
+            return null;
+        }
+        AGV_NO_MAP.put(agvId, agv.getUuid());
+        return agv.getUuid();
+    }
+
+    @Override
+    public Agv modify(Agv agv, Long userId) {
+        if (agv == null || agv.getId() == null) {
+            throw new CoolException("Update Fail");
+        }
+        Date now = new Date();
+
+        // 鍞竴鎬ф牎楠岋細鍙湁褰� uuid 闈炵┖鏃舵墠鏍¢獙锛堥伩鍏嶇┖鍊艰鍒わ級
+        if (!Cools.isEmpty(agv.getUuid())) {
+            boolean exists = this.count(new LambdaQueryWrapper<Agv>()
+                    .eq(Agv::getUuid, agv.getUuid())
+                    .ne(Agv::getId, agv.getId())) > 0;
+            if (exists) {
+                throw new CoolException("Update Fail");
             }
         }
-        return AGV_NO_MAP.get(agvId);
+
+        Agv oldAgv = this.getById(agv.getId());
+        String oldAgvNo = oldAgv.getUuid();
+
+        agv.setUpdateBy(userId);
+        agv.setUpdateTime(now);
+        if (!this.updateById(agv)) {
+            throw new CoolException("Update Fail");
+        }
+
+        // 浠� DB 鏈�缁堝�间负鍑嗗埛鏂扮紦瀛橈紙闃叉璇锋眰浣撶己瀛楁/涓虹┖锛�
+        Agv newAgv = this.getById(agv.getId());
+        String newAgvNo = newAgv.getUuid();
+
+        if (!oldAgvNo.equals(newAgvNo)) {
+            AGV_ID_MAP.remove(oldAgvNo);
+            AGV_ID_MAP.put(newAgvNo, newAgv.getId());
+
+            AGV_NO_MAP.remove(newAgv.getId());
+            AGV_NO_MAP.put(newAgv.getId(), newAgvNo);
+        }
+
+        return newAgv;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Long delete(Long agvId, Long userId) {
+        if (Cools.isEmpty(agvId)) {
+            return null;
+        }
+        Agv agv = this.getById(agvId);
+        AGV_NO_MAP.remove(agvId);
+        AGV_ID_MAP.remove(agv.getUuid());
+
+        mapDataDispatcher.modifyDynamicMatrix(MapDataDispatcher.MAP_DEFAULT_LEV, null, agv.getUuid(), true);
+
+        areaAgvService.removeByAgvId(agvId);
+        this.removeById(agvId);
+
+        agvDetailService.removeByAgvId(agvId);
+
+        return agvId;
     }
 
 

--
Gitblit v1.9.1