whyclxw
2025-05-22 2be69300de8d3f96b6c8134094fd11b17d23b0a2
左侧列表到电池组
2个文件已修改
4个文件已添加
241 ■■■■■ 已修改文件
src/main/java/com/whyc/dto/RealTimeDto.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/Station/Batt.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/Station/Power.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/Station/Station.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/webSocket/RealTimeSocket.java 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/StationInfMapper.xml 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/RealTimeDto.java
New file
@@ -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
    * 电源:power
    * 电压:vol
    * 内阻:res
    * 温度:tmp
    * 图片:img
    * 3D:3D
    * 自愈能力:self
    * 管理信息:manage
    * */
    private String  pageType;
}
src/main/java/com/whyc/dto/Station/Batt.java
New file
@@ -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;
}
src/main/java/com/whyc/dto/Station/Power.java
New file
@@ -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;
}
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;
}
src/main/java/com/whyc/webSocket/RealTimeSocket.java
New file
@@ -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());
    }
}
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">