whyclxw
2025-03-25 a7fef2846505b08e0711345b17902e7381612d23
src/main/java/com/whyc/webSocket/HomeSocket.java
@@ -34,12 +34,7 @@
    private Thread thread;
    private HttpSession httpSession;
    private static AreaInfService ainfService;
    @Autowired
    public void setAreaInfServicee(AreaInfService ainfService) {
@@ -50,55 +45,23 @@
    @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(5);
                        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();
                        });
                        latch.await(10, TimeUnit.MINUTES);
                        session.getBasicRemote().sendObject(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();
@@ -108,6 +71,54 @@
        thread.start();
        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
    public void onClose(CloseReason closeReason) throws IOException {