From 2be69300de8d3f96b6c8134094fd11b17d23b0a2 Mon Sep 17 00:00:00 2001
From: whyclxw <810412026@qq.com>
Date: 星期四, 22 五月 2025 14:35:11 +0800
Subject: [PATCH] 左侧列表到电池组

---
 src/main/java/com/whyc/dto/RealTimeDto.java          |   22 ++++
 src/main/java/com/whyc/dto/Station/Station.java      |    2 
 src/main/java/com/whyc/dto/Station/Power.java        |   13 ++
 src/main/java/com/whyc/webSocket/RealTimeSocket.java |  172 ++++++++++++++++++++++++++++++++++
 src/main/java/com/whyc/dto/Station/Batt.java         |   13 ++
 src/main/resources/mapper/StationInfMapper.xml       |   19 +++
 6 files changed, 236 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/whyc/dto/RealTimeDto.java b/src/main/java/com/whyc/dto/RealTimeDto.java
new file mode 100644
index 0000000..276d273
--- /dev/null
+++ b/src/main/java/com/whyc/dto/RealTimeDto.java
@@ -0,0 +1,22 @@
+package com.whyc.dto;
+
+import lombok.Data;
+
+@Data
+public class RealTimeDto {
+    private Integer staitonId;
+    private Integer powerId;
+    private Integer uid;
+    /*
+    * 绯荤粺姒傝堪:system
+    * 鐢垫簮锛歱ower
+    * 鐢靛帇锛歷ol
+    * 鍐呴樆锛歳es
+    * 娓╁害锛歵mp
+    * 鍥剧墖锛歩mg
+    * 3D:3D
+    * 鑷剤鑳藉姏锛歴elf
+    * 绠$悊淇℃伅锛歮anage
+    * */
+    private String  pageType;
+}
\ No newline at end of file
diff --git a/src/main/java/com/whyc/dto/Station/Batt.java b/src/main/java/com/whyc/dto/Station/Batt.java
new file mode 100644
index 0000000..d24d93e
--- /dev/null
+++ b/src/main/java/com/whyc/dto/Station/Batt.java
@@ -0,0 +1,13 @@
+package com.whyc.dto.Station;
+
+import lombok.Data;
+
+@Data
+public class Batt {
+    private Integer stationId;
+    private Integer powerId;
+    private Integer battgroupId;
+    private Integer devId;
+    private String devName;
+    private String battgroupName;
+}
\ No newline at end of file
diff --git a/src/main/java/com/whyc/dto/Station/Power.java b/src/main/java/com/whyc/dto/Station/Power.java
new file mode 100644
index 0000000..7ee1459
--- /dev/null
+++ b/src/main/java/com/whyc/dto/Station/Power.java
@@ -0,0 +1,13 @@
+package com.whyc.dto.Station;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class Power {
+    private Integer powerId;
+    private Integer stationId;
+    private String powerName;
+    private List<Batt> battList;
+}
\ No newline at end of file
diff --git a/src/main/java/com/whyc/dto/Station/Station.java b/src/main/java/com/whyc/dto/Station/Station.java
index ed6ce73..ca2412e 100644
--- a/src/main/java/com/whyc/dto/Station/Station.java
+++ b/src/main/java/com/whyc/dto/Station/Station.java
@@ -12,5 +12,5 @@
     private String country;
     private String stationName;
     private Integer stationId;
-    private List<PowerInf> pinflist;
+    private List<Power> pinflist;
 }
\ No newline at end of file
diff --git a/src/main/java/com/whyc/webSocket/RealTimeSocket.java b/src/main/java/com/whyc/webSocket/RealTimeSocket.java
new file mode 100644
index 0000000..9aaa829
--- /dev/null
+++ b/src/main/java/com/whyc/webSocket/RealTimeSocket.java
@@ -0,0 +1,172 @@
+package com.whyc.webSocket;
+
+import com.whyc.config.WebSocketConfig;
+import com.whyc.dto.RealTimeDto;
+import com.whyc.dto.Response;
+import com.whyc.pojo.db_user.User;
+import com.whyc.util.ActionUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpSession;
+import javax.websocket.*;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.Map;
+
+@Component
+@ServerEndpoint(value = "/real",encoders = WebSocketEncoder.class,configurator = WebSocketConfig.class)
+public class RealTimeSocket {
+    private Session session;
+
+    private Thread thread;
+
+    //private static LockAlarmService almService;
+
+
+    private volatile boolean runFlag = true;
+
+    private static HttpSession httpSession;
+
+    private volatile Map<String, Thread> threadMap = new HashMap<>();
+
+    private volatile Map<Long,Boolean> threadFlagMap = new HashMap<>();
+
+    /*@Autowired
+    public void setLockAlarmService(LockAlarmService almService) {
+        LockAlmRtSocket.almService = almService;
+    }*/
+
+
+    @OnOpen
+    public void onOpen(Session session, EndpointConfig config) {
+        this.session = session;
+        this.httpSession = (HttpSession) config.getUserProperties().get("httpSession");
+    }
+    @OnMessage
+    public void onMessage(Session session, String message) {
+        RealTimeDto realDto= ActionUtil.getGson().fromJson(message,RealTimeDto.class);
+        if(httpSession!=null){
+            User user = (User) httpSession.getAttribute("user");
+            realDto.setUid(user.getId());
+        }else{
+            realDto.setUid(99);
+        }
+        thread = new Thread("Thread_realTimeSocket") {
+            @Override
+            public void run() {
+                while (runFlag && !isInterrupted()) {
+                    Thread thread = currentThread();
+                    threadFlagMap.put(thread.getId(), true);
+                    try {
+                        Map<String, Object> map=new HashMap<>();
+                        //鑾峰彇澶撮儴淇℃伅
+                        Response topRes=getTop(realDto);
+                        map.put("topRes",topRes);
+                        //鏍规嵁pageType鑾峰彇杩斿洖鐣岄潰
+                        Response realRes=getRes(realDto);
+                        map.put("realRes",realRes);
+                        if (session.isOpen()) {
+                            //鎺ㄩ�佷俊鎭�
+                            synchronized (session) {
+                                session.getBasicRemote().sendObject(new Response<>().set(1,map));
+                            }
+                            threadFlagMap.put(thread.getId(), false);
+                        }
+                        sleep(4000);
+                    } catch (Exception e) {
+                        interrupt();
+                    }
+                }
+            }
+        };
+        thread.start();
+        threadFlagMap.put(thread.getId(),true);
+        //鍋滄鑰佺殑socket绾跨▼
+        Thread threadBefore = threadMap.get(session.getId());
+        if(threadBefore !=null && threadBefore.isAlive()){
+            while (threadFlagMap.get(threadBefore.getId())){
+            }
+            threadBefore.interrupt();
+        }
+        //灏嗙嚎绋嬪瓨鍌�,渚夸簬璋冪敤瀹氫綅
+        threadMap.put(session.getId(), this.thread);
+    }
+    //鑾峰彇澶撮儴淇℃伅
+    private Response getTop(RealTimeDto realDto) {
+        return new Response().set(1);
+    }
+
+    //鏍规嵁pageType鑾峰彇杩斿洖鐣岄潰
+    private Response getRes(RealTimeDto realDto) {
+        Response res=new Response();
+        switch (realDto.getPageType()){
+            case "system":res=getSystemPage(realDto);break;
+            case "power":res=getPowerPage(realDto);break;
+            case "vol":res=getVolPage(realDto);break;
+            case "res":res=getResPage(realDto);break;
+            case "tmp":res=getTmpPage(realDto);break;
+            case "img":res=getImgPage(realDto);break;
+            case "3D":res=get3DPage(realDto);break;
+            case "self":res=getSelfPage(realDto);break;
+            case "manage":res=getManagePage(realDto);break;
+            default:res=new Response().set(1);
+        }
+        return res;
+    }
+    //鑾峰彇绠$悊鐣岄潰淇℃伅
+    private Response getManagePage(RealTimeDto realDto) {
+        return new Response().set(1);
+    }
+    //鑾峰彇鑷剤鑳藉姏鐣岄潰淇℃伅
+    private Response getSelfPage(RealTimeDto realDto) {
+        return new Response().set(1);
+    }
+    //鑾峰彇3D鐣岄潰淇℃伅
+    private Response get3DPage(RealTimeDto realDto) {
+        return new Response().set(1);
+    }
+    //鑾峰彇鍥剧墖鐣岄潰淇℃伅
+    private Response getImgPage(RealTimeDto realDto) {
+        return new Response().set(1);
+    }
+    //鑾峰彇娓╁害鐣岄潰淇℃伅
+    private Response getTmpPage(RealTimeDto realDto) {
+        return new Response().set(1);
+    }
+    //鑾峰彇鍐呴樆鐣岄潰淇℃伅
+    private Response getResPage(RealTimeDto realDto) {
+        return new Response().set(1);
+    }
+    //鑾峰彇鐢靛帇鐣岄潰淇℃伅
+    private Response getVolPage(RealTimeDto realDto) {
+        return new Response().set(1);
+    }
+    //鑾峰彇鐢垫簮鐣岄潰淇℃伅
+    private Response getPowerPage(RealTimeDto realDto) {
+        return new Response().set(1);
+    }
+    //鑾峰彇绯荤粺姒傝堪鐣岄潰淇℃伅
+    private Response getSystemPage(RealTimeDto realDto) {
+        return new Response().set(1);
+    }
+
+    @OnClose
+    public void onClose(CloseReason closeReason){
+        System.err.println("closeReason = " + closeReason);
+        runFlag = false;
+        if (thread != null && thread.isAlive()) {
+            thread.interrupt();
+        }
+        threadMap.remove(session.getId());
+    }
+
+    @OnError
+    public void onError(Throwable error) {
+        error.printStackTrace();
+        if (thread != null && thread.isAlive()) {
+            thread.interrupt();
+        }
+        threadMap.remove(session.getId());
+    }
+}
\ No newline at end of file
diff --git a/src/main/resources/mapper/StationInfMapper.xml b/src/main/resources/mapper/StationInfMapper.xml
index 5927691..8e4c989 100644
--- a/src/main/resources/mapper/StationInfMapper.xml
+++ b/src/main/resources/mapper/StationInfMapper.xml
@@ -52,17 +52,28 @@
         <result property="country" column="country" ></result>
         <result property="stationName" column="station_name" ></result>
         <result property="stationId" column="station_id" ></result>
-        <collection property="pinflist" javaType="java.util.ArrayList" ofType="com.whyc.pojo.db_station.PowerInf" column="{stationId=station_id}" select="selectPowerInf">
+        <collection property="pinflist" javaType="java.util.ArrayList" ofType="com.whyc.dto.Station.Power" column="{stationId=station_id}" select="selectPower">
         </collection>
     </resultMap>
     <select id="selectStation" resultMap="name4List">
         SELECT distinct #{provice} as provice, #{city} as city, #{country} as country,station_name,station_id from  db_station.tb_station_inf
         where provice=#{provice} and city=#{city} and country=#{country}
     </select>
+    <resultMap id="name5List" type="power">
+        <result property="powerId" column="power_id"></result>
+        <result property="stationId" column="station_id" ></result>
+        <result property="powerName" column="power_name" ></result>
+        <collection property="battList" javaType="java.util.ArrayList" ofType="com.whyc.dto.Station.Batt" column="{powerId=power_id}" select="selectBatt">
+        </collection>
+    </resultMap>
+    <select id="selectPower" resultMap="name5List">
+        SELECT distinct tb_power_inf.power_id,power_name,station_id from db_station.tb_power_inf
+        where tb_power_inf.station_id=#{stationId}
+    </select>
 
-    <select id="selectPowerInf" resultType="powerInf">
-        SELECT distinct tb_power_inf.* from db_station.tb_power_inf,db_station.tb_station_inf
-        where tb_power_inf.station_id=tb_station_inf.station_id and tb_power_inf.station_id=#{stationId}
+    <select id="selectBatt" resultType="batt">
+        SELECT distinct tb_batt_inf.battgroup_id,battgroup_name,power_id,station_id,dev_id,dev_name from db_station.tb_batt_inf
+        where tb_batt_inf.power_id=#{powerId}
     </select>
     
     <select id="getProviceByUid" resultType="java.lang.String">

--
Gitblit v1.9.1