2021与蓝度共同重构项目,服务端
liuhaonan
2022-09-15 60fc84976142a9019effbbb79c4d43bc4a4a3b36
ximon-admin/src/main/java/com/sandu/ximon/admin/service/VnnoxService.java
@@ -10,16 +10,15 @@
import com.sandu.ximon.admin.dto.nova.PlayerWidget;
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereHeartbeatReportInnerFrame;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.admin.utils.RedisUtils;
import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
import com.sandu.ximon.admin.utils.VnnoxAPIUtil;
import com.sandu.ximon.admin.utils.VnnoxProgramAPIUtil;
import com.sandu.ximon.admin.utils.*;
import com.sandu.ximon.admin.utils.request.VnnoxScreenStatusType;
import com.sandu.ximon.admin.utils.response.VnnoxPlayerListResponse;
import com.sandu.ximon.admin.utils.response.VnnoxPlayerResponse;
import com.sandu.ximon.admin.utils.response.VnnoxResult;
import com.sandu.ximon.admin.utils.response.VnnoxResultResponse;
import com.sandu.ximon.admin.vo.NovaPushResultVO;
import com.sandu.ximon.admin.vo.NovaScreenShorUrlVO;
import com.sandu.ximon.admin.vo.NovaWeatherVO;
import com.sandu.ximon.dao.domain.LedPlayerEntity;
import com.sandu.ximon.dao.domain.LedPlayerInfoEntity;
import com.sandu.ximon.dao.domain.LedV2RegisterResultEntity;
@@ -50,6 +49,7 @@
    private LedPlayerEntityService ledPlayerEntityService;
    private VnnoxProgramAPIUtil vnnoxProgramAPIUtil;
    private CountDownLatchUtil countDownLatchUtil;
    /**
     * 设备校验注册
@@ -157,7 +157,7 @@
        //  根据屏幕状态调整REDIS标识位
        for (String playerId : vnnoxResult.getSuccess()) {
            redisUtils.set(VnnoxConstant.REDIS_SCREEN_STATUS + playerId, screenStatus, VnnoxConstant.REDIS_MAX_SAVE_TIME);
            redisUtils.set(VnnoxConstant.REDIS_SCREEN_STATUS + playerId, screenStatus);
        }
        return result;
    }
@@ -174,7 +174,7 @@
        VnnoxResult vnnoxResult = vnnoxAPIUtil.volChange(playerList.stream().map(item -> item.getPlayerId()).collect(Collectors.toList()), vol);
        //  根据音量调整REDIS标识位
        for (String playerId : vnnoxResult.getSuccess()) {
            redisUtils.set(VnnoxConstant.REDIS_VOL + playerId, vol, VnnoxConstant.REDIS_MAX_SAVE_TIME);
            redisUtils.set(VnnoxConstant.REDIS_VOL + playerId, vol, VnnoxConstant.STATUS_TIME);
        }
        List<String> success = vnnoxResult.getSuccess();
        List<String> fail = vnnoxResult.getFail();
@@ -215,7 +215,7 @@
        VnnoxResult vnnoxResult = vnnoxAPIUtil.brightnessChange(playerList.stream().map(item -> item.getPlayerId()).collect(Collectors.toList()), brightness);
        //  根据亮度调整REDIS标识位
        for (String playerId : vnnoxResult.getSuccess()) {
            redisUtils.set(VnnoxConstant.REDIS_BRIGHTNESS + playerId, brightness, VnnoxConstant.REDIS_MAX_SAVE_TIME);
            redisUtils.set(VnnoxConstant.REDIS_BRIGHTNESS + playerId, brightness, VnnoxConstant.STATUS_TIME);
        }
        List<String> success = vnnoxResult.getSuccess();
        List<String> fail = vnnoxResult.getFail();
@@ -289,7 +289,7 @@
    // 批量截屏
    public List<NovaScreenShorUrlVO> getScreenShotUrl(List<NovaPushResultVO> playerIds) {
    public List<NovaScreenShorUrlVO> getScreenShotUrl(List<NovaPushResultVO> playerIds) throws InterruptedException {
        List<NovaScreenShorUrlVO> screenShorUrlList = new ArrayList<>();
        //从playerIds中获取playerId
@@ -309,6 +309,7 @@
                        break;
                    } else {
                        num++;
                        Thread.sleep(500);
                    }
                }
                screenShorUrlVO.setShortUrl(url);
@@ -500,78 +501,90 @@
    /**
     * 获取缓存数据
     *
     * @param list
     * @param
     * @return
     */
    public List<LedPlayerEntity> setCacheInfo(List<LedPlayerEntity> list) {
        for (LedPlayerEntity playerEntity : list) {
            String playerId = playerEntity.getPlayerId();
            LedPlayerInfoEntity cache = new LedPlayerInfoEntity();
            //  设置屏幕状态
            String result = redisUtils.get(VnnoxConstant.REDIS_SCREEN_STATUS + playerId);
            Integer screenStatus = 1;
            if (null != result) {
                screenStatus = Integer.parseInt(result);
    public List<LedPlayerEntity> setCacheInfo(List<LedPlayerEntity> ledList) {
        List<String> temp = new ArrayList<>();
        for (LedPlayerEntity item : ledList) {
            String playerId = item.getPlayerId();
            if (redisUtils.get(VnnoxConstant.REDIS_VOL + playerId) == null
                    || redisUtils.get(VnnoxConstant.REDIS_BRIGHTNESS + playerId) == null) {
                temp.add(item.getPlayerId());
            }
            cache.setScreenStatus(screenStatus);
            //  设置屏幕音量
            result = redisUtils.get(VnnoxConstant.REDIS_VOL + playerId);
            Integer vol = 0;
            if (null != result) {
                vol = Integer.parseInt(result);
            }
            cache.setVol(vol);
            //  设置屏幕亮度
            result = redisUtils.get(VnnoxConstant.REDIS_BRIGHTNESS + playerId);
            Integer brightness = 0;
            if (null != result) {
                brightness = Integer.parseInt(result);
            }
            cache.setBrightness(brightness);
            //  设置缩略图访问路径
            result = redisUtils.get(VnnoxConstant.REDIS_SCREEN_SHOT + playerId);
            if (null != result) {
                playerEntity.setScreenShotUrl(result);
            } else {
                playerEntity.setScreenShotUrl("");
            }
            playerEntity.setPlayerInfo(cache);
        }
        return list;
        if (temp.size() > 0) {
            List<List<String>> split = CollectionUtil.split(temp, 100);
            for (List<String> playIds : split) {
                System.out.println(playIds.size());
                vnnoxAPIUtil.asyncStatus(playIds);
            }
        }
        List<List<LedPlayerEntity>> split = CollectionUtil.split(ledList, 100);
        for (List<LedPlayerEntity> list : split) {
            for (LedPlayerEntity playerEntity : list) {
                String playerId = playerEntity.getPlayerId();
                LedPlayerInfoEntity cache = new LedPlayerInfoEntity();
                //  设置屏幕状态
                String result = redisUtils.get(VnnoxConstant.REDIS_SCREEN_STATUS + playerId);
                Integer screenStatus = 1;
                if (null != result) {
                    screenStatus = Integer.parseInt(result);
                }
                cache.setScreenStatus(screenStatus);
                //  设置屏幕音量
                result = redisUtils.get(VnnoxConstant.REDIS_VOL + playerId);
                Integer vol = 0;
                if (null != result) {
                    vol = Float.valueOf(result).intValue();
                }
                cache.setVol(vol);
                //  设置屏幕亮度
                result = redisUtils.get(VnnoxConstant.REDIS_BRIGHTNESS + playerId);
                Integer brightness = 0;
                if (null != result) {
                    brightness = Float.valueOf(result).intValue();
                }
                cache.setBrightness(brightness);
                //  设置缩略图访问路径
                result = redisUtils.get(VnnoxConstant.REDIS_SCREEN_SHOT + playerId);
                if (null != result) {
                    playerEntity.setScreenShotUrl(result);
                } else {
                    playerEntity.setScreenShotUrl("");
                }
                playerEntity.setPlayerInfo(cache);
            }
        }
        return ledList;
    }
    public VnnoxResult publishWaterData(String playerId, A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage poleSensorEntity) {
    public VnnoxResult WaterData(String playerId, Long duration, A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage poleSensorEntity) {
        List<String> playerIds = new ArrayList<>();
        playerIds.add(playerId);
        AirDataProgram playerProgram = new AirDataProgram();
        NovaWeatherVO playerProgram = new NovaWeatherVO();
        playerProgram.setPlayerIds(playerIds);
        PlayerPage playerPage = new PlayerPage();
        playerPage.setName("AirData page");
        List<PlayerWidget> widgetList = generateWaterAndSensorWidget(poleSensorEntity);
        playerPage.setWidgets(widgetList);
        List<PlayerPage> list = new ArrayList<>();
        list.add(playerPage);
        playerProgram.setPages(list);
        playerProgram.setNoticeUrl(VnnoxConstant.NOTIFY_URL);
        /**
         * 诺瓦推送大气数据 日志记录开始
         ////         */
//        String content = "{诺瓦playerId:" + playerId + ",节目内容:" + JSON.toJSONString(playerProgram) + " }";
//        StoreOperationRecordsUtils.storeOperationData(null, null, "大气数据推送到诺瓦", content);
        /**
         * 诺瓦推送大气数据 日志记录结束
         */
        return vnnoxProgramAPIUtil.normalProgram(playerProgram).getData();
        NovaWeatherVO.AttributeDTO attributeDTO = new NovaWeatherVO.AttributeDTO();
        attributeDTO.setDuration(duration);
        playerProgram.setAttribute(attributeDTO);
        List<NovaWeatherVO.PageDTO.WidgetsDTO> widgets = setWeather(duration, poleSensorEntity);
        NovaWeatherVO.PageDTO page = new NovaWeatherVO.PageDTO();
        page.setWidgets(widgets);
        playerProgram.setPage(page);
        return vnnoxProgramAPIUtil.emergencyProgram(playerProgram).getData();
    }
    private List<PlayerWidget> generateWaterAndSensorWidget(A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage poleSensorEntity) {
    private List<NovaWeatherVO.PageDTO.WidgetsDTO> setWeather(Long duration, A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage poleSensorEntity) {
        List widgetList = new ArrayList<>();
        List<NovaWeatherVO.PageDTO.WidgetsDTO> widgets = new ArrayList<>();
        List<String> list = new ArrayList<>();
        if (Objects.nonNull(poleSensorEntity)) {
            list.add("环境监测:");
@@ -581,11 +594,67 @@
            list.add("pm10:" + poleSensorEntity.getPm10() + "μg/m³");
            list.add("甲醛:" + poleSensorEntity.getEch2o() + "μg/m³");
            list.add("CO2:" + poleSensorEntity.getCo2() + "ppm");
        } else {
            list.add("大气设备不在线");
            list.add("目前是固定数据:");
            list.add("环境监测:");
            list.add("温度: 40°");
            list.add("湿度: 60%");
            list.add("pm25:0.58 μg/m³");
            list.add("pm10:0.58 μg/m³");
            list.add("甲醛:99.9 μg/m³");
            list.add("CO2:200 ppm");
        }
        widgetList.add(new PlayerWidget().generateScrollUpTextWidget("weather", 1, 100000L, list, "#FFFFFF", 15, new PlayerLayout("0%", "5%", "100%", "100%")));
        return widgetList;
        List<NovaWeatherVO.PageDTO.WidgetsDTO.LinesDTO> lines = new ArrayList<>();
        list.forEach(
                txt -> {
                    List<NovaWeatherVO.PageDTO.WidgetsDTO.LinesDTO.TextAttributesDTO> textAttributes = new ArrayList<>();
                    NovaWeatherVO.PageDTO.WidgetsDTO.LinesDTO linesDTO = new NovaWeatherVO.PageDTO.WidgetsDTO.LinesDTO();
                    NovaWeatherVO.PageDTO.WidgetsDTO.LinesDTO.TextAttributesDTO textAttributesDTO = new NovaWeatherVO.PageDTO.WidgetsDTO.LinesDTO.TextAttributesDTO();
                    textAttributesDTO.setContent(txt);
                    textAttributes.add(textAttributesDTO);
                    System.out.println(txt + "文本内容");
                    linesDTO.setTextAttributes(textAttributes);
                    lines.add(linesDTO);
                }
        );
        NovaWeatherVO.PageDTO.WidgetsDTO widgetsDTO = new NovaWeatherVO.PageDTO.WidgetsDTO();
        NovaWeatherVO.PageDTO.WidgetsDTO.ScrollAttributeDTO scrollAttribute = new NovaWeatherVO.PageDTO.WidgetsDTO.ScrollAttributeDTO();
        NovaWeatherVO.PageDTO.WidgetsDTO.LayoutDTO layout = new NovaWeatherVO.PageDTO.WidgetsDTO.LayoutDTO();
        widgetsDTO.setScrollAttribute(scrollAttribute);
        widgetsDTO.setLayout(layout);
        widgetsDTO.setLines(lines);
        widgetsDTO.setDuration(duration);
        widgets.add(widgetsDTO);
        System.out.println(lines + "播放内容");
        return widgets;
    }
    /**
     * 更新诺瓦屏幕分辨率
     */
    public void saveInfo() {
        List<LedPlayerEntity> list = vnnoxAPIUtil.saveCurrentInfo(ledPlayerEntityService.list());
        boolean b = SpringContextHolder.getBean(LedPlayerEntityService.class).updateBatchById(list);
        if (b) {
            LogUtils.error("更新诺瓦屏幕分辨率成功");
        }
    }
    public void asyncStatus(List<String> playerIds) {
        VnnoxResultResponse vnnoxResultResponse = vnnoxAPIUtil.asyncStatus(playerIds);
    }
}