2021与蓝度共同重构项目,服务端
liuhaonan
2022-09-06 4791362c19d2d27a51593d625abb24173d1c63f2
ximon-admin/src/main/java/com/sandu/ximon/admin/service/VnnoxService.java
@@ -1,5 +1,6 @@
package com.sandu.ximon.admin.service;
import cn.hutool.core.collection.CollectionUtil;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.util.SpringContextHolder;
import com.sandu.ximon.admin.config.VnnoxConstant;
@@ -9,15 +10,14 @@
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.dao.domain.LedPlayerEntity;
import com.sandu.ximon.dao.domain.LedPlayerInfoEntity;
import com.sandu.ximon.dao.domain.LedV2RegisterResultEntity;
@@ -27,6 +27,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.net.URISyntaxException;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -47,6 +48,7 @@
    private LedPlayerEntityService ledPlayerEntityService;
    private VnnoxProgramAPIUtil vnnoxProgramAPIUtil;
    private CountDownLatchUtil countDownLatchUtil;
    /**
     * 设备校验注册
@@ -110,7 +112,10 @@
     */
    public Map<String, Object> screenStatusChange(List<LedPlayerEntity> playerList, Integer screenStatus) {
        playerList.forEach(item -> {
            if (item.getPlayerId().isEmpty() || item.getPlayerName().isEmpty() || item.getPlayerName() == null || item.getPlayerId() == null) {
            if (item.getName() == null || item.getPlayerId() == null) {
                throw new BusinessException("playerId或playerName为空");
            }
            if (item.getPlayerId().isEmpty() || item.getName().isEmpty()) {
                throw new BusinessException("playerId或playerName为空");
            }
        });
@@ -135,12 +140,12 @@
        playerList.forEach(n -> {
            if (finalSuccess.contains(n.getPlayerId())) {
                NovaPushResultVO vo = new NovaPushResultVO();
                vo.setName(n.getPlayerName());
                vo.setName(n.getName());
                vo.setPlayerId(n.getPlayerId());
                successList.add(vo);
            } else if (finalFail.contains(n.getPlayerId())) {
                NovaPushResultVO vo = new NovaPushResultVO();
                vo.setName(n.getPlayerName());
                vo.setName(n.getName());
                vo.setPlayerId(n.getPlayerId());
                faileList.add(vo);
            }
@@ -151,21 +156,24 @@
        //  根据屏幕状态调整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;
    }
    public Map<String, Object> volChange(List<LedPlayerEntity> playerList, Integer vol) {
        playerList.forEach(item -> {
            if (item.getPlayerId().isEmpty() || item.getPlayerName().isEmpty() || item.getPlayerName() == null || item.getPlayerId() == null) {
            if (item.getName() == null || item.getPlayerId() == null) {
                throw new BusinessException("playerId或playerName为空");
            }
            if (item.getPlayerId().isEmpty() || item.getName().isEmpty()) {
                throw new BusinessException("playerId或playerName为空");
            }
        });
        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);
        }
        List<String> success = vnnoxResult.getSuccess();
        List<String> fail = vnnoxResult.getFail();
@@ -178,12 +186,12 @@
        playerList.forEach(n -> {
            if (finalSuccess.contains(n.getPlayerId())) {
                NovaPushResultVO vo = new NovaPushResultVO();
                vo.setName(n.getPlayerName());
                vo.setName(n.getName());
                vo.setPlayerId(n.getPlayerId());
                successList.add(vo);
            } else if (finalFail.contains(n.getPlayerId())) {
                NovaPushResultVO vo = new NovaPushResultVO();
                vo.setName(n.getPlayerName());
                vo.setName(n.getName());
                vo.setPlayerId(n.getPlayerId());
                faileList.add(vo);
            }
@@ -196,14 +204,17 @@
    public Map<String, Object> brightnessChange(List<LedPlayerEntity> playerList, Integer brightness) {
        playerList.forEach(item -> {
            if (item.getPlayerId().isEmpty() || item.getPlayerName().isEmpty() || item.getPlayerName() == null || item.getPlayerId() == null) {
            if (item.getName() == null || item.getPlayerId() == null) {
                throw new BusinessException("playerId或playerName为空");
            }
            if (item.getPlayerId().isEmpty() || item.getName().isEmpty()) {
                throw new BusinessException("playerId或playerName为空");
            }
        });
        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);
        }
        List<String> success = vnnoxResult.getSuccess();
        List<String> fail = vnnoxResult.getFail();
@@ -216,12 +227,12 @@
        playerList.forEach(n -> {
            if (finalSuccess.contains(n.getPlayerId())) {
                NovaPushResultVO vo = new NovaPushResultVO();
                vo.setName(n.getPlayerName());
                vo.setName(n.getName());
                vo.setPlayerId(n.getPlayerId());
                successList.add(vo);
            } else if (finalFail.contains(n.getPlayerId())) {
                NovaPushResultVO vo = new NovaPushResultVO();
                vo.setName(n.getPlayerName());
                vo.setName(n.getName());
                vo.setPlayerId(n.getPlayerId());
                faileList.add(vo);
            }
@@ -275,6 +286,62 @@
        return map;
    }
    // 批量截屏
    public List<NovaScreenShorUrlVO> getScreenShotUrl(List<NovaPushResultVO> playerIds) throws InterruptedException {
        List<NovaScreenShorUrlVO> screenShorUrlList = new ArrayList<>();
        //从playerIds中获取playerId
        List<String> AllplayerIdsList = playerIds.stream().map(item -> item.getPlayerId()).collect(Collectors.toList());
        List<List<String>> split = CollectionUtil.split(AllplayerIdsList, 100);
        for (List<String> playerIdsList : split) {
            VnnoxResult vnnoxResult = vnnoxAPIUtil.screenShot(playerIdsList);
            LocalDateTime now = LocalDateTime.now();
            NovaScreenShorUrlVO screenShorUrlVO;
            for (String successStrId : vnnoxResult.getSuccess()) {
                screenShorUrlVO = new NovaScreenShorUrlVO();
                String url = null;
                int num = 0;
                while (num < 3) {
                    url = redisUtils.get(VnnoxConstant.REDIS_SCREEN_SHOT + successStrId);
                    if (url != null) {
                        break;
                    } else {
                        num++;
                        Thread.sleep(500);
                    }
                }
                screenShorUrlVO.setShortUrl(url);
                screenShorUrlVO.setPlayerId(successStrId);
                screenShorUrlVO.setTime(now);
                for (NovaPushResultVO bean : playerIds) {
                    if (bean.getPlayerId().equals(successStrId)) {
                        screenShorUrlVO.setName(bean.getName());
                        break;
                    }
                }
                screenShorUrlList.add(screenShorUrlVO);
            }
            for (String failStrId : vnnoxResult.getFail()) {
                screenShorUrlVO = new NovaScreenShorUrlVO();
                String url = null;
                screenShorUrlVO.setShortUrl(url);
                screenShorUrlVO.setPlayerId(failStrId);
                screenShorUrlVO.setTime(now);
                for (NovaPushResultVO bean : playerIds) {
                    if (bean.getPlayerId().equals(failStrId)) {
                        screenShorUrlVO.setName(bean.getName());
                        break;
                    }
                }
                screenShorUrlList.add(screenShorUrlVO);
            }
        }
        return screenShorUrlList;
    }
//    //重启
//    public VnnoxResult reboot(List<LedPlayerEntity> playerList) {
//        return vnnoxAPIUtil.reboot(
@@ -288,7 +355,10 @@
    public Map<String, Object> reboot(List<NovaPushResultVO> nova) {
        List<String> playerIds = new ArrayList<>();
        nova.forEach(item -> {
            if (item.getPlayerId().isEmpty() || item.getName().isEmpty() || item.getName() == null || item.getPlayerId() == null) {
            if (item.getName() == null || item.getPlayerId() == null) {
                throw new BusinessException("playerId或playerName为空");
            }
            if (item.getPlayerId().isEmpty() || item.getName().isEmpty()) {
                throw new BusinessException("playerId或playerName为空");
            }
            playerIds.add(item.getPlayerId());
@@ -327,7 +397,10 @@
    public Map<String, Object> syncPlay(List<NovaPushResultVO> nova, Integer option) {
        List<String> playerIds = new ArrayList<>();
        nova.forEach(item -> {
            if (item.getPlayerId().isEmpty() || item.getName().isEmpty() || item.getName() == null || item.getPlayerId() == null) {
            if (item.getName() == null || item.getPlayerId() == null) {
                throw new BusinessException("playerId或playerName为空");
            }
            if (item.getPlayerId().isEmpty() || item.getName().isEmpty()) {
                throw new BusinessException("playerId或playerName为空");
            }
            playerIds.add(item.getPlayerId());
@@ -364,7 +437,10 @@
    public Map<String, Object> ntpSync(List<NovaPushResultVO> nova, boolean enable) {
        List<String> playerIds = new ArrayList<>();
        nova.forEach(item -> {
            if (item.getPlayerId().isEmpty() || item.getName().isEmpty() || item.getName() == null || item.getPlayerId() == null) {
            if (item.getName() == null || item.getPlayerId() == null) {
                throw new BusinessException("playerId或playerName为空");
            }
            if (item.getPlayerId().isEmpty() || item.getName().isEmpty()) {
                throw new BusinessException("playerId或playerName为空");
            }
            playerIds.add(item.getPlayerId());
@@ -424,46 +500,66 @@
    /**
     * 获取缓存数据
     *
     * @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;
    }
@@ -494,7 +590,7 @@
    private List<PlayerWidget> generateWaterAndSensorWidget(A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage poleSensorEntity) {
        //TODO
        List widgetList = new ArrayList<>();
        List<String> list = new ArrayList<>();
        if (Objects.nonNull(poleSensorEntity)) {
@@ -512,4 +608,22 @@
        return widgetList;
    }
    /**
     * 更新诺瓦屏幕分辨率
     */
    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);
    }
}