From 12c3f4de5ce151b50e187066a3c105260523abb8 Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期四, 30 四月 2026 10:04:56 +0800
Subject: [PATCH] 充电机代码提交

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ChargeService.java |   34 +++++++++++++++++++++++++++-------
 1 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ChargeService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ChargeService.java
index 23ecd1d..8a47f01 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ChargeService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ChargeService.java
@@ -26,6 +26,7 @@
 
     private final Map<String, ModbusTCPMaster> CHARGE_CACHE = new ConcurrentHashMap<>();
 
+    private final Map<String, Object> deviceLocks = new ConcurrentHashMap<>();
 
     @PostConstruct
     public void init() {
@@ -42,22 +43,41 @@
 
     public void add(FuncSta funcSta) {
         ModbusTCPMaster modbusTcp = new ModbusTCPMaster(funcSta.getIp(), funcSta.getPort(), true);
+        try {
+            modbusTcp.connect();
+        } catch (Exception e) {
+            log.info("杩炴帴澶辫触");
+        }
         CHARGE_CACHE.put(funcSta.getUuid(), modbusTcp);
     }
 
     public void remove(String chargePointId) {
-        CHARGE_CACHE.remove(chargePointId);
+        ModbusTCPMaster master = CHARGE_CACHE.remove(chargePointId);
+        if (master != null && master.isConnected()) {
+            master.disconnect();
+        }
     }
 
     public ModbusTCPMaster get(String chargePointId) {
-        ModbusTCPMaster modbusTcp = CHARGE_CACHE.get(chargePointId);
-        if (modbusTcp != null) {
+        // 鑾峰彇鎴栧垱寤鸿澶囬攣
+        Object lock = deviceLocks.computeIfAbsent(chargePointId, k -> new Object());
+        synchronized (lock) {
+            ModbusTCPMaster modbusTcp = CHARGE_CACHE.get(chargePointId);
+            if (modbusTcp != null) {
+                return modbusTcp;
+            }
+            FuncSta funcSta = funcStaService.getOne(new LambdaQueryWrapper<FuncSta>().eq(FuncSta::getUuid, chargePointId));
+            modbusTcp = new ModbusTCPMaster(funcSta.getIp(), funcSta.getPort(),true);
+            try {
+                modbusTcp.connect();
+            } catch (Exception e) {
+                log.info("杩炴帴澶辫触");
+                return null;
+            }
+            CHARGE_CACHE.put(chargePointId, modbusTcp);
             return modbusTcp;
         }
-        FuncSta funcSta = funcStaService.getOne(new LambdaQueryWrapper<FuncSta>().eq(FuncSta::getUuid, chargePointId));
-        modbusTcp = new ModbusTCPMaster(funcSta.getIp(), funcSta.getPort(),true);
-        CHARGE_CACHE.put(chargePointId, modbusTcp);
-        return modbusTcp;
+
     }
 
 

--
Gitblit v1.9.1