whyclxw
2025-03-25 a7fef2846505b08e0711345b17902e7381612d23
src/main/java/com/whyc/webSocket/HomeSocket.java
@@ -6,6 +6,7 @@
import com.whyc.pojo.db_user.UserInf;
import com.whyc.service.AreaInfService;
import com.whyc.service.LockCtlLogService;
import com.whyc.service.LockInfService;
import com.whyc.service.UserInfService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -33,89 +34,34 @@
    private Thread thread;
    private HttpSession httpSession;
    private static LockCtlLogService ctlLogService;
    private static AreaInfService ainfService;
    @Autowired
    public void setLockCtlLogService(LockCtlLogService ctlLogService) {
        HomeSocket.ctlLogService = ctlLogService;
    }
    @Autowired
    public void setAreaInfServicee(AreaInfService ainfService) {
        HomeSocket.ainfService = ainfService;
    }
    @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){
       /* UserInf user = (UserInf) this.httpSession.getAttribute("user");
        HttpSession httpSession = (HttpSession) config.getUserProperties().get("httpSession");
        UserInf user = (UserInf) httpSession.getAttribute("user");
        final int userId = user.getUid();
        final int urole = user.getUrole();
        Thread thread = new Thread() {
        /*final int userId = 10001;
        final int urole = 1;*/
        Thread thread = new Thread("Thread_HomeSocket") {
            @Override
            public void run() {
                try {
                    Map<String, Object> res = new HashMap<>();
                    while (!currentThread().isInterrupted()) {
                        ThreadPoolExecutor poolExecutor = ThreadPoolExecutorFactory.getPoolExecutor();
                        CountDownLatch latch = new CountDownLatch(7);
                        //分组统计前10开锁次数
                        poolExecutor.execute(() -> {
                            Response resGroupCtlCount = ainfService.getGroupCtlCount(userId,urole);
                            res.put("resGroupCtlCount", resGroupCtlCount);
                            latch.countDown();
                        });
                        poolExecutor.execute(() -> {
                            //基础资源信息
                            Response resBattInfoAnalysis = battInfService.getBattInfoAnalysis(userId);
                            res.put("resBattInfoAnalysis", resBattInfoAnalysis);
                            latch.countDown();
                        });
                        poolExecutor.execute(() -> {
                            //站点信息
                            Response resStationAnalysis = new Response();
                            res.put("resStationAnalysis", resStationAnalysis);
                            latch.countDown();
                        });
                        poolExecutor.execute(() -> {
                            //不同品牌同一时间品质和同品牌同时间品质
                            Response resProductQuaAnalysis = badBattMonService.getProductQuaAnalysis(userId);
                            res.put("resProductQuaAnalysis", resProductQuaAnalysis);
                            latch.countDown();
                        });
                        poolExecutor.execute(() -> {
                            //电池信息
                            Response res_battGroupInfo = new Response();
                            res.put("battGroupInfo", res_battGroupInfo);
                            latch.countDown();
                        });
                        poolExecutor.execute(() -> {
                            //电源信息
                            Response resPwrdevInfAnalysis = new Response();
                            res.put("resPwrdevInfAnalysis", resPwrdevInfAnalysis);
                            latch.countDown();
                        });
                        poolExecutor.execute(() -> {
                            //测试信息
                            Response resTestdataInfAnalysis = batttestdataInfService.getTestdataInfAnalysis(userId);
                            res.put("resTestdataInfAnalysis", resTestdataInfAnalysis);
                            latch.countDown();
                        });
                        latch.await(10, TimeUnit.MINUTES);
                        session.getBasicRemote().sendObject(new Response().set(1, res));
                        sleep(5000);
                        while (!currentThread().isInterrupted()) {
                            Map<String, Object> res = sendHome(userId,urole);
                            session.getBasicRemote().sendObject(new Response().set(1, res));
                            sleep(5000);
                        }
                    }
                } catch (Exception e) {
                    this.interrupt();
@@ -123,7 +69,55 @@
            }
        };
        thread.start();
        this.thread = thread;*/
        this.thread = thread;
    }
    //推送数据
    public Map<String, Object> sendHome(int userId,int urole) {
        Map<String, Object> res = new HashMap<>();
        try {
            ThreadPoolExecutor poolExecutor = ThreadPoolExecutorFactory.getPoolExecutor();
            CountDownLatch latch = new CountDownLatch(6);
            poolExecutor.execute(() -> {
                //锁的工作状态
                Response resLockState = ainfService.getLockState(userId,urole);
                res.put("resLockState", resLockState);
                latch.countDown();
            });
            poolExecutor.execute(() -> {
                //屏柜类型
                Response resScreenBox = ainfService.getScreenBoxType(userId,urole);
                res.put("resScreenBox", resScreenBox);
                latch.countDown();
            });
            poolExecutor.execute(() -> {
                //lock的使用频次
                Response resReport = ainfService.getReport(userId,urole);
                res.put("resReport", resReport);
                latch.countDown();
            });
            poolExecutor.execute(() -> {
                //实时开锁信息(失败)
                Response resErrorCtlLog =  ainfService.getErrorCtlog(userId,urole);
                res.put("resErrorCtlLog", resErrorCtlLog);
                latch.countDown();
            });
            poolExecutor.execute(() -> {
                //实时开锁信息(全部)
                Response resAllCtlLog = ainfService.getAllCtlLog(userId,urole);
                res.put("resAllCtlLog", resAllCtlLog);
                latch.countDown();
            });
            poolExecutor.execute(() -> {
                //地图顶部的管理的区域包含子区域
                Response resAllAinf = ainfService.getHomeAllAinf(userId,urole);
                res.put("resAllAinf", resAllAinf);
                latch.countDown();
            });
            latch.await(4, TimeUnit.MINUTES);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return res;
    }
    @OnClose