| | |
| | | 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.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.dao.domain.PoleLightemitEntity; |
| | | 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; |
| | |
| | | private String port; |
| | | @Autowired |
| | | ApplicationContext applicationContext; |
| | | @Autowired |
| | | NginxConfigBean nginxConfigBean; |
| | | |
| | | @Autowired |
| | | PoleLightemitEntityMapper poleLightemitDao; |
| | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 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) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据led屏编码设置音量 |
| | | * 根据led屏编码设置亮度 |
| | | * |
| | | * @param lightemitControlCode |
| | | * @param brightness |
| | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |