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