2021与蓝度共同重构项目,服务端
liuhaonan
2022-05-16 6d9832f4967d727bbcd455da38cfbe3b2312dec5
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleLightemitService.java
@@ -1,25 +1,23 @@
package com.sandu.ximon.admin.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageHelper;
import com.google.gson.Gson;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.object.BaseConditionVO;
import com.sandu.common.service.impl.BaseServiceImpl;
import com.sandu.ximon.admin.config.NginxConfigBean;
import com.sandu.common.util.SpringContextHolder;
import com.sandu.ximon.admin.config.RealtimeServerBean;
import com.sandu.ximon.admin.entity.*;
import com.sandu.ximon.admin.param.PoleBindingParam;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.admin.utils.Constant;
import com.sandu.ximon.admin.utils.FileUtil;
import com.sandu.ximon.admin.utils.HtmlTemplateUtils;
import com.sandu.ximon.admin.utils.LightemitUtils;
import com.sandu.ximon.admin.utils.request.SubTitleSet;
import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
import com.sandu.ximon.admin.vo.EquipmentInfomation;
import com.sandu.ximon.dao.domain.Pole;
import com.sandu.ximon.dao.domain.PoleLightemitEntity;
import com.sandu.ximon.dao.enums.PoleBindingEnums;
import com.sandu.ximon.dao.mapper.PoleLightemitEntityMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.EnableCaching;
@@ -49,8 +47,6 @@
    private String port;
    @Autowired
    ApplicationContext applicationContext;
    @Autowired
    NginxConfigBean nginxConfigBean;
    @Autowired
    PoleLightemitEntityMapper poleLightemitDao;
@@ -76,30 +72,56 @@
        } else {
            poleLightemitEntityList = poleLightemitDao.listLed(keyword, SecurityUtils.getUserId());
        }
        if (isOnLine) {
            return ledOnline(poleLightemitEntityList);
        } else {
            ledOnlineCheck(poleLightemitEntityList);
            return poleLightemitEntityList;
        List<PoleLightemitEntity> temp = new ArrayList<>();
        for (PoleLightemitEntity poleLightemitEntity : poleLightemitEntityList) {
            //查询设备在线状态
            boolean onLine = lightemitUtils.getLedOnLine(poleLightemitEntity.getLightemitControlCode());
            //查询屏幕的开启状态
            String isOpen = lightemitUtils.getIsScreenOpen(poleLightemitEntity.getLightemitControlCode());
            poleLightemitEntity.setIsOpen(String.valueOf(isOpen));
            poleLightemitEntity.setOnLine(onLine);
            if (!isOnLine || onLine) {
                temp.add(poleLightemitEntity);
            }
        }
        return temp;
    }
    /**
     * 取出在线的熙讯
     *
     * @param list
     * @return
     */
    public List<PoleLightemitEntity> ledOnline(List<PoleLightemitEntity> list) {
        List<PoleLightemitEntity> onLineList = new ArrayList<>();
        for (PoleLightemitEntity poleLightemitEntity : list) {
            poleLightemitEntity.setIsOpen(lightemitUtils.getIsScreenOpen(poleLightemitEntity.getLightemitControlCode()).contains("true"));
            if (poleLightemitEntity.getIsOpen()) {
//            if(lightemitUtils.getIsScreenOpen(poleLightemitEntity.getLightemitControlCode()).contains("true")){
//                poleLightemitEntity.setIsOpen(lightemitUtils.getIsScreenOpen(poleLightemitEntity.getLightemitControlCode()).contains("true"));
//            }
            poleLightemitEntity.setIsOpen(lightemitUtils.getIsScreenOpen(poleLightemitEntity.getLightemitControlCode()));
            boolean ledOnLine = lightemitUtils.getLedOnLine(poleLightemitEntity.getLightemitControlCode());
            if (ledOnLine) {
                poleLightemitEntity.setOnLine(true);
                onLineList.add(poleLightemitEntity);
            } else {
                poleLightemitEntity.setOnLine(false);
            }
        }
        return onLineList;
    }
    /**
     * 设置在线状态
     *
     * @param list
     */
    public void ledOnlineCheck(List<PoleLightemitEntity> list) {
        for (PoleLightemitEntity poleLightemitEntity : list) {
            poleLightemitEntity.setIsOpen(lightemitUtils.getIsScreenOpen(poleLightemitEntity.getLightemitControlCode()).contains("true"));
            poleLightemitEntity.setIsOpen(lightemitUtils.getIsScreenOpen(poleLightemitEntity.getLightemitControlCode()));
            poleLightemitEntity.setOnLine(lightemitUtils.getLedOnLine(poleLightemitEntity.getLightemitControlCode()));
        }
    }
@@ -112,15 +134,44 @@
     */
    public PoleLightemitEntity getLedByLightControlCode(String lightControlCode) {
        PoleLightemitEntity xiXun = getOne(Wrappers.lambdaQuery(PoleLightemitEntity.class).eq(PoleLightemitEntity::getLightemitControlCode, lightControlCode));
        Pole getpole = poleLightemitDao.getpole(lightControlCode);
        if (xiXun == null) {
            return null;
        }
        String isScreenOpen = lightemitUtils.getIsScreenOpen(xiXun.getLightemitControlCode());
        if (isScreenOpen.contains("true")) {
            xiXun.setIsOpen(true);
        }
        xiXun.setIsOpen(false);
        boolean isScreenOpen = lightemitUtils.getLedOnLine(xiXun.getLightemitControlCode());
        xiXun.setIsOpen(lightemitUtils.getIsScreenOpen(lightControlCode));
        xiXun.setOnLine(isScreenOpen);
        xiXun.setStreetlightName(getpole.getPoleName());
        xiXun.setStreetlightId(getpole.getId());
        return xiXun;
    }
    /**
     * 首页灯杆绑定信息
     */
    public EquipmentInfomation getLedByLightControlCodeInfo(String lightControlCode) {
        EquipmentInfomation equipmentInfo = new EquipmentInfomation();
        equipmentInfo.setEquipmentType("熙讯LED");
        if (lightControlCode == null || lightControlCode.trim().length() == 0) {
            return equipmentInfo;
        }
        PoleLightemitEntity xiXun = getOne(Wrappers.lambdaQuery(PoleLightemitEntity.class).eq(PoleLightemitEntity::getLightemitControlCode, lightControlCode));
        if (xiXun != null) {
            equipmentInfo.setEquipmentCreateTime(xiXun.getCreateTime());
            equipmentInfo.setEquipmentMac(xiXun.getLightemitControlCode());
            equipmentInfo.setEquipmentName(xiXun.getLightemitName());
        }
        boolean isScreenOpen = lightemitUtils.getLedOnLine(xiXun.getLightemitControlCode());
        if (isScreenOpen) {
            equipmentInfo.setEquipmentState("在线");
        } else {
            equipmentInfo.setEquipmentState("离线");
        }
        return equipmentInfo;
    }
@@ -128,13 +179,24 @@
        boolean save = this.save(poleLightemit);
        // 绑定灯杆
        if (save && poleLightemit.getStreetlightId() != null) {
        if (save && poleLightemit.getPoleId() != null) {
            PoleBindingParam poleBindingParam = new PoleBindingParam();
            poleBindingParam.setDeviceCode(poleLightemit.getLightemitControlCode());
            poleBindingParam.setDeviceType(1);
            poleBindingParam.setDeviceName(poleLightemit.getLightemitName());
            poleBindingService.bindPole(poleLightemit.getStreetlightId(), poleBindingParam);
            poleBindingService.bindPole(poleLightemit.getPoleId(), poleBindingParam);
        }
        /**
         * 熙汛led新增日志记录开始
         */
        List<String> listCode = new ArrayList<>();
        listCode.add(poleLightemit.getLightemitControlCode());
        String content = "{屏幕id:" + poleLightemit.getLightemitId() + ", 屏幕名称:" + poleLightemit.getLightemitName() + ", 屏幕编码:" + poleLightemit.getLightemitControlCode() + " }";
        StoreOperationRecordsUtils.storeOperationData(listCode, null, "熙汛LED新增", content);
        /**
         * 熙汛led新增日志记录结束
         */
        //  poleStreetlightLightemitService.saveStreetlightLightemit(poleLightemit.getLightemitId(),poleLightemit.getStreetlightId());
    }
@@ -144,38 +206,73 @@
        if (byId == null) {
            throw new BusinessException("未找到LED屏");
        }
        boolean belong = SpringContextHolder.getBean(PoleBindingService.class).isBelong(byId.getLightemitControlCode(), PoleBindingEnums.XIXUN);
        if (!belong) {
            throw new BusinessException("该设备不属于您,不能修改设备信息");
        }
        poleLightemit.setLightemitId(ledId);
        boolean b = this.updateById(poleLightemit);
        // 绑定灯杆
        if (b && poleLightemit.getStreetlightId() != null) {
        if (b && poleLightemit.getPoleId() != null) {
            //先删除绑定关系
            poleBindingService.unBindPole(null, poleLightemit.getLightemitControlCode());
            //再绑定
            PoleBindingParam poleBindingParam = new PoleBindingParam();
            poleBindingParam.setDeviceCode(poleLightemit.getLightemitControlCode());
            poleBindingParam.setDeviceType(1);
            poleBindingParam.setDeviceType(10);
            poleBindingParam.setDeviceName(poleLightemit.getLightemitName());
            poleBindingService.bindPole(poleLightemit.getStreetlightId(), poleBindingParam);
            poleBindingService.bindPole(poleLightemit.getPoleId(), poleBindingParam);
        }
        /**
         * 熙汛led编辑日志记录开始
         */
        List<String> listCode = new ArrayList<>();
        listCode.add(poleLightemit.getLightemitControlCode());
        String content = "{屏幕id:" + poleLightemit.getLightemitId() + ", 屏幕名称:" + poleLightemit.getLightemitName() + ", 屏幕编码:" + poleLightemit.getLightemitControlCode() + " }";
        StoreOperationRecordsUtils.storeOperationData(listCode, null, "熙汛LED编辑", content);
        /**
         * 熙汛led编辑日志记录结束
         */
        // poleStreetlightLightemitService.saveStreetlightLightemit(poleLightemit.getLightemitId(),poleLightemit.getStreetlightId());
    }
    public boolean deletePoleLightemit(List<Long> ledIds) {
        List<PoleLightemitEntity> poleLightemitEntities = listByIds(ledIds);
        if (poleLightemitEntities != null && poleLightemitEntities.size() != 0) {
            throw new BusinessException("设备不存在");
        }
        List<String> listCode = new ArrayList<>();
        // 删除设备绑定
        if (poleLightemitEntities != null && poleLightemitEntities.size() != 0) {
            for (PoleLightemitEntity poleLightemitEntitie : poleLightemitEntities) {
                if (poleLightemitEntitie.getLightemitControlCode() != null) {
                    //删除绑定关系//先删除绑定关系
                    listCode.add(poleLightemitEntitie.getLightemitControlCode());
                    poleBindingService.unBindPole(poleLightemitEntitie.getLightemitControlCode());
                }
            }
        }
        //删除设备
        boolean b = removeByIds(ledIds);
        /**
         * 熙汛led删除日志记录开始
         */
        List<String> nameList = new ArrayList<>();
        for (PoleLightemitEntity poleLightemitEntitie : poleLightemitEntities) {
            nameList.add(poleLightemitEntitie.getLightemitName());
        }
        String content = "{删除熙汛LED的设备信息:" + nameList.toString() + " }";
        StoreOperationRecordsUtils.storeOperationData(listCode, null, "熙汛LED删除", content);
        /**
         * 熙汛led删除日志记录结束
         */
        return b;
        // poleStreetlightLightemitService.saveStreetlightLightemit(poleLightemit.getLightemitId(),poleLightemit.getStreetlightId());
    }
@@ -247,40 +344,6 @@
    }
    /**
     * LED上传单行字幕
     */
    @Async("taskExecutor")
    public Boolean subTitleSet(SubTitleSetEntity subTitleSetEntity, String path, String userName) {
        if (subTitleSetEntity == null) {
            return false;
        }
        if (subTitleSetEntity.getDirection().equals(Constant.LEFT) || subTitleSetEntity.getDirection().equals(Constant.RIGHT)) {
            //字幕横向滚动
            this.BuildHorizonSingSubTitleText(subTitleSetEntity);
        } else if (subTitleSetEntity.getDirection().equals(Constant.UP) || subTitleSetEntity.getDirection().equals(Constant.DOWN)) {
            //字幕纵向滚动
            try {
                this.BuildVerticalSingSubTitleText(subTitleSetEntity, path, userName);
            } catch (IOException e) {
                return false;
            }
        }
        return true;
    }
    /**
     * LED上传多行字幕
     */
    @Async("taskExecutor")
    public Boolean subMultiTitleSet(SubTitleSetEntity subTitleSetEntity, String path, String userName) {
        try {
            this.BuildVerticalMultiSubTitleText(subTitleSetEntity, path, userName);
            return true;
        } catch (IOException e) {
            return false;
        }
    }
    @Async("taskExecutor")
    public void videoXixunPlayer(String lightemitControlCode, String ip, String filename, Long filesize, Integer videoTime) {
@@ -385,7 +448,7 @@
    }
    /**
     * 根据led屏编码设置音量
     * 根据led屏编码设置亮度
     *
     * @param lightemitControlCode
     * @param brightness
@@ -395,168 +458,4 @@
        lightemitUtils.setBrightness(lightemitControlCode, brightness);
    }
    /**
     * 上传水平滚动单行字幕
     *
     * @param subTitleSetEntity
     */
    private void BuildHorizonSingSubTitleText(SubTitleSetEntity subTitleSetEntity) {
        //拼装LED屏幕设置请求body
        SubTitleSet subTitleSet = new SubTitleSet();
        subTitleSet.num = subTitleSetEntity.getNum() != null ? subTitleSetEntity.getNum() : subTitleSet.num;
        subTitleSet.interval = subTitleSetEntity.getInterval() != null ? subTitleSetEntity.getInterval() : subTitleSet.interval;
        subTitleSet.step = subTitleSetEntity.getStep() != null ? subTitleSetEntity.getStep() : subTitleSet.step;
        subTitleSet.direction = subTitleSetEntity.getDirection() != null ? subTitleSetEntity.getDirection() : subTitleSet.direction;
        subTitleSet.align = subTitleSetEntity.getAlign() != null ? subTitleSetEntity.getAlign() : subTitleSet.align;
        //拼接html 背景默认显色为白色
        subTitleSet.html = "<head><style type=\"text/css\">body{background-color:" +
                (subTitleSetEntity.getColor() != null && StringUtils.isNotBlank(subTitleSetEntity.getColor()) ? subTitleSetEntity.getColor() : "#000000") +
                "}</style></head><i style=\"color:" +
                (subTitleSetEntity.getFontColor() != null && StringUtils.isNotBlank(subTitleSetEntity.getFontColor()) ? subTitleSetEntity.getFontColor() : "#ffffff")
                + "; font-size: " +
                (subTitleSetEntity.getFontSize() != null && StringUtils.isNotBlank(subTitleSetEntity.getFontSize()) ? subTitleSetEntity.getFontSize() : "1")
                + "em\">" + subTitleSetEntity.getContent() + "</i>";
        //获取所有led数据
        Collection poleLightemitControllers = this.listByIds(Arrays.asList(subTitleSetEntity.getId()));
        if (!poleLightemitControllers.isEmpty()) {
            Iterator iterator = poleLightemitControllers.iterator();
            while (iterator.hasNext()) {
                PoleLightemitEntity poleLightemitEntity = (PoleLightemitEntity) iterator.next();
                //清屏操作
                lightemitUtils.clear(poleLightemitEntity.getLightemitControlCode());
                //清除播放列表
                lightemitUtils.clearVideoPlay(poleLightemitEntity.getLightemitControlCode());
                //清除节目列表
                lightemitUtils.clearPlayerTask(poleLightemitEntity.getLightemitControlCode());
                //发送字幕设置请求
                lightemitUtils.subTitleSet(subTitleSet, poleLightemitEntity.getLightemitControlCode(), true);
            }
        }
    }
    /**
     * 上传垂直滚动单行字幕
     *
     * @param subTitleSetEntity
     * @param path
     * @param userName
     * @throws IOException
     */
    private void BuildVerticalSingSubTitleText(SubTitleSetEntity subTitleSetEntity, String path, String userName) throws IOException {
        //html地址
        //获取所有led数据
        Collection poleLightemitControllers = this.listByIds(Arrays.asList(subTitleSetEntity.getId()));
        if (!poleLightemitControllers.isEmpty()) {
            Iterator iterator = poleLightemitControllers.iterator();
            while (iterator.hasNext()) {
                PoleLightemitEntity poleLightemitEntity = (PoleLightemitEntity) iterator.next();
                String lightemitControlCode = poleLightemitEntity.getLightemitControlCode();
                //获取屏幕宽
                Integer screenWidth = Integer.valueOf(lightemitUtils.getScreenWidth(lightemitControlCode));
                Integer screenHeight = Integer.valueOf(lightemitUtils.getScreenHeight(lightemitControlCode));
                String filenameTemp = path + userName + "_" + lightemitControlCode + ".html";
                File htmlFile = new File(filenameTemp);
                if (!htmlFile.exists() || htmlFile.delete()) {
                    htmlFile.createNewFile();
                }
                //若向下滚动,文字顺序相反
                if (Constant.DOWN.equals(subTitleSetEntity.getDirection())) {
                    subTitleSetEntity.setContent(StringUtils.reverse(subTitleSetEntity.getContent()));
                }
                Map<String, Object> params = new HashMap<>();
                params.put("direction", subTitleSetEntity.getDirection());
                params.put("screenWidth", screenWidth);
                params.put("screenHeight", screenHeight);
                params.put("fontSize", subTitleSetEntity.getFontSize() != null && StringUtils.isNotBlank(subTitleSetEntity.getFontSize()) ? subTitleSetEntity.getFontSize() : "1");
                params.put("align", subTitleSetEntity.getAlign());
                params.put("fontColor", subTitleSetEntity.getFontColor() != null && StringUtils.isNotBlank(subTitleSetEntity.getFontColor()) ? subTitleSetEntity.getFontColor() : "#ffffff");
                params.put("backgroundColor", subTitleSetEntity.getColor() != null && StringUtils.isNotBlank(subTitleSetEntity.getColor()) ? subTitleSetEntity.getColor() : "#000000");
                params.put("interval", subTitleSetEntity.getInterval() != null ? subTitleSetEntity.getInterval() : 50);
                params.put("step", subTitleSetEntity.getStep() != null ? subTitleSetEntity.getStep() : 1);
                params.put("num", subTitleSetEntity.getNum() != null ? subTitleSetEntity.getNum() : -1);
                params.put("contentArray", subTitleSetEntity.getContent().toCharArray());
                String body = new HtmlTemplateUtils().renderPath("classpath:templates/lightemitTemplates/buildVerticalSingSubTitleTemplates.html", params);
                boolean flag = new FileUtil().writeToFile(body, filenameTemp);
                if (flag) {
                    //清屏操作
                    lightemitUtils.clear(lightemitControlCode);
                    //清除播放列表
                    lightemitUtils.clearVideoPlay(lightemitControlCode);
                    //清除节目列表
                    lightemitUtils.clearPlayerTask(lightemitControlCode);
                    //推送
                    lightemitUtils.postHtmlUseNginx(lightemitControlCode, userName);
                }
            }
        }
    }
    /**
     * 上传垂直滚动多行字幕
     *
     * @param subTitleSetEntity
     * @param path
     * @param userName
     * @throws IOException
     */
    private void BuildVerticalMultiSubTitleText(SubTitleSetEntity subTitleSetEntity, String path, String userName) throws IOException {
        //html地址
        //获取所有led数据
        Collection poleLightemitControllers = this.listByIds(Arrays.asList(subTitleSetEntity.getId()));
        if (!poleLightemitControllers.isEmpty()) {
            Iterator iterator = poleLightemitControllers.iterator();
            while (iterator.hasNext()) {
                PoleLightemitEntity poleLightemitEntity = (PoleLightemitEntity) iterator.next();
                String lightemitControlCode = poleLightemitEntity.getLightemitControlCode();
                //获取屏幕宽
                Integer screenWidth = Integer.valueOf(lightemitUtils.getScreenWidth(lightemitControlCode));
                Integer screenHeight = Integer.valueOf(lightemitUtils.getScreenHeight(lightemitControlCode));
                String filenameTemp = path + userName + "_" + lightemitControlCode + ".html";
                File htmlFile = new File(filenameTemp);
                if (!htmlFile.exists() || htmlFile.delete()) {
                    htmlFile.createNewFile();
                }
                Map<String, Object> params = new HashMap<>();
                params.put("direction", subTitleSetEntity.getDirection());
                params.put("screenWidth", screenWidth);
                params.put("screenHeight", screenHeight);
                params.put("fontSize", subTitleSetEntity.getFontSize() != null && StringUtils.isNotBlank(subTitleSetEntity.getFontSize()) ? subTitleSetEntity.getFontSize() : "1");
                params.put("align", subTitleSetEntity.getAlign());
                params.put("fontColor", subTitleSetEntity.getFontColor() != null && StringUtils.isNotBlank(subTitleSetEntity.getFontColor()) ? subTitleSetEntity.getFontColor() : "#ffffff");
                params.put("backgroundColor", subTitleSetEntity.getColor() != null && StringUtils.isNotBlank(subTitleSetEntity.getColor()) ? subTitleSetEntity.getColor() : "#000000");
                params.put("interval", subTitleSetEntity.getInterval() != null ? subTitleSetEntity.getInterval() : 50);
                params.put("step", subTitleSetEntity.getStep() != null ? subTitleSetEntity.getStep() : 1);
                params.put("num", subTitleSetEntity.getNum() != null ? subTitleSetEntity.getNum() : -1);
                params.put("contentArray", subTitleSetEntity.getContent().split("\n"));
                String body = new HtmlTemplateUtils().renderPath("classpath:templates/lightemitTemplates/buildVerticalSingSubTitleTemplates.html", params);
                boolean flag = new FileUtil().writeToFile(body, filenameTemp);
                if (flag) {
                    //清屏操作
                    lightemitUtils.clear(lightemitControlCode);
                    //清除播放列表
                    lightemitUtils.clearVideoPlay(lightemitControlCode);
                    //清除节目列表
                    lightemitUtils.clearPlayerTask(lightemitControlCode);
                    //推送
                    lightemitUtils.postHtmlUseNginx(lightemitControlCode, userName);
                }
            }
        }
    }
}