2021与蓝度共同重构项目,服务端
liuhaonan
2022-02-11 83326b4b2a8a10d11ae18dcedd2e6904dd69d2b2
功能完善
已添加24个文件
1896 ■■■■■ 文件已修改
dao/src/main/java/com/sandu/ximon/dao/domain/PoleLightemitEntity.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/config/NginxConfigBean.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/config/RealtimeServerBean.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/Command.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/Layer.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/Program.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/ProgramsTask.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleLightemitService.java 711 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/Constant.java 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/FileUtil.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/HtmlTemplateUtils.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/LightemitUtils.java 378 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxProgramAPIUtil.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/Clear.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/ClearPlayerTask.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/ClearVideoPlay.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/DownloadFileToLocal.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/GetPicture.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/GetScreenHeight.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/GetScreenWidth.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/GetTimeSchedule.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/IsScreenOpen.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/PlayerProgram.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/PostHtml.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/PoleLightemitEntity.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
package com.sandu.ximon.dao.domain;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/**
 * led广告屏主表
 *
 * @author chenshun
 * @email sunlightcs@gmail.com
 * @date 2019-04-20 13:34:54
 */
@Data
@TableName("pole_lightemit")
public class PoleLightemitEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * LED ID
     */
    @TableId
    private Long lightemitId;
    /**
     * LED名称
     */
    private String lightemitName;
    /**
     * LED控制卡编号
     */
    private String lightemitControlCode;
    /**
     * æ‰€æ˜¾ç¤ºå›¾ç‰‡åœ°å€
     */
    private String url;
    /**
     * æ˜¾ç¤ºæ—¶é—´
     */
    private Integer playTime;
    /**
     * åŠ å…¥æ—¶é—´ï¼ˆå­˜å‚¨å•ç¯æ•°æ®æ›´æ–°æ—¶é—´ï¼‰
     */
    private DateTime addTime;
    /*
    è¯·æ±‚数据
     */
    private String requestBody;
    /**
     * æ’­æ”¾è®¾ç½® 0:使用播放接口; 1:使用xixunplayer播放接口
     */
    private Integer playerSetting;
    /**
     * çŠ¶æ€  0:禁用   1:正常
     */
    private Integer status;
    /**
     * çŠ¶æ€  0:禁用   1:正常
     */
    private String remark;
    /**
     * åˆ›å»ºè€…ID
     */
    private Long createUserId;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    private DateTime createTime;
    /**
     * ç»‘定灯杆ID
     */
    @TableField(exist = false)
    private Long streetlightId;
    /**
     * ç¯æ†åç§°
     */
    @TableField(exist = false)
    private String streetlightName;
    /**
     * led屏幕开关
     */
    @TableField(exist = false)
    private Boolean isOpen;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/config/NginxConfigBean.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.sandu.ximon.admin.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "nginx-config")
public class NginxConfigBean {
    private String filePath;
    private String url;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/config/RealtimeServerBean.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.sandu.ximon.admin.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
 * @program: machine-fast
 * @description: led服務器地址
 * @author: YSS
 * @create: 2019-04-24 13:24
 **/
@Component
@ConfigurationProperties(prefix = "realtime-server")
public class RealtimeServerBean {
    private String command;
    private String url;
    public void setCommand(String command) {
        this.command = command;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getCommand() {
        return command;
    }
    public String getUrl() {
        return url;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/Command.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.sandu.ximon.admin.entity;
import lombok.Data;
import java.io.Serializable;
@Data
public class Command implements Serializable {
    private static final long serialVersionUID = 1L;
    private String id;
    private String preDownloadURL;
    private String notificationURL;
    private ProgramsTask task;
    private String _type = "PlayXixunTask";
}
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/Layer.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.sandu.ximon.admin.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class Layer implements Serializable {
    private static final long serialVersionUID = 1L;
    private List<Source> sources;   //素材都需要加入到这个list里面
    private boolean repeat = true;            //如果该值为false,它会在播放时长到达后结束播放,否则他会循环播放直到list中最长的那个layer播放结束时结束播放
}
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/Program.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.sandu.ximon.admin.entity;
import lombok.Data;
import java.util.List;
@Data
public class Program  {
    private String  _id;                    //请使用UUID赋值
    private String name;                    //好记的名字
    private int width;                    //节目宽
    private int height;                    //节目高度
    private List<Layer> layers;            //所有素材都包含在该list中
    private long totalSize;                //将layers中的sources的size累加赋值给他,表示节目所有素材占用的空间
    //如果为true,则该节目来自第三方接口,不是来自我们自己的web,二次开发请务必赋值为true
    private boolean isOthers=true;
    private int version;                    //2为简易节目,9为定点节目,其他为高级节目,请赋值其他。
}
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/ProgramsTask.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.sandu.ximon.admin.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class ProgramsTask implements Serializable {
    private static final long serialVersionUID = 1L;
    private String _id;                    //使用UUID赋值
    private String name;                    //节目名
    private List<TaskItem> items;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleLightemitService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,711 @@
//package com.sandu.ximon.admin.service;
//
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import com.google.gson.Gson;
//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.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 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;
//import org.springframework.context.ApplicationContext;
//import org.springframework.scheduling.annotation.Async;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.PostConstruct;
//import java.io.File;
//import java.io.IOException;
//import java.util.*;
//
//
//@Service
//@EnableCaching
//public class PoleLightemitService extends BaseServiceImpl<PoleLightemitDao, PoleLightemitEntity> {
//
//    @Autowired
//    PoleStreetlightLightemitService poleStreetlightLightemitService;
//    LightemitUtils lightemitUtils;
//    @Autowired
//    RealtimeServerBean realtimeServerBean;
//    @Value("${server.port}")
//    private String port;
//    @Autowired
//    ApplicationContext applicationContext;
//    @Autowired
//    FfmpegUtils ffmpegUtils;
//    @Autowired
//    FileUploadPathBean fileUploadPathBean;
//    @Autowired
//    NginxConfigBean nginxConfigBean;
//    @Autowired
//    PoleLightemitDao poleLightemitDao;
//
//    @PostConstruct
//    public  void init(){
//        //重新获取单例
//        lightemitUtils = applicationContext.getBean(LightemitUtils.class);
//    }
//
//    /*@Override
//    public PageUtils queryPage(Map<String, Object> params, Long userId) {
//
//        String key = (String)params.get("key");
//
//        Long groupId = StringUtils.isNotBlank((String)params.get("group"))? Long.valueOf((String)params.get("group")): null;
//
//        String order = (String)params.get("order");
//
//        String column = (String)params.get("sortby");
//
//        IPage<PoleLightemitEntity> page = new Page<>();
//        //获取角色列表
//        Long roleId = (sysUserRoleService.queryRoleId(userId));
//
//        if(roleId == null || roleId == 0){
//            return null;
//        }
//
//        if(roleId.longValue() == Constant.SUPER_ADMIN){
////            page = this.page(
////                    new Query<PoleLightemitEntity>().getPage(params),
////                    new QueryWrapper<PoleLightemitEntity>().like(StringUtils.isNotBlank(key),"lightemit_name", key));
//            if (order != null && order.equals("ASC") && column.equals("isOpen")) {
//                Map<String, Object> map = new HashMap<>();
//                Integer pg = 1;
//                Integer size = 200;
//                map.put("page",pg);
//                params.put("limit",size);
//                page = baseMapper.superAdminSelectPageVo(PageTransform.transformPage(params),key,groupId,order,column);
//                ledOnlineCheck(page.getRecords());
//                page.setRecords(page.getRecords().stream().filter(h-> h.getIsOpen().equals(true)).collect(Collectors.toList()));
//                return new PageUtils(page);
//            }else if (order != null && order.equals("DESC") && column.equals("isOpen")){
//                Map<String, Object> map = new HashMap<>();
//                Integer pg = 1;
//                Integer size = 200;
//                map.put("page",pg);
//                params.put("limit",size);
//                page = baseMapper.superAdminSelectPageVo(PageTransform.transformPage(params),key,groupId,order,column);
//                ledOnlineCheck(page.getRecords());
//                page.setRecords(page.getRecords().stream().filter(h-> h.getIsOpen().equals(false)).collect(Collectors.toList()));
//                return new PageUtils(page);
//            }else {
//                page = baseMapper.superAdminSelectPageVo(PageTransform.transformPage(params), key, groupId,order,column);
//            }
//
//        }else if(roleId.longValue() == Constant.ADMIN){
//            if (order != null && order.equals("ASC") && column.equals("isOpen")) {
//                Map<String, Object> map = new HashMap<>();
//                Integer pg = 1;
//                Integer size = 200;
//                map.put("page",pg);
//                params.put("limit",size);
//                page = baseMapper.adminSelectPageVo(PageTransform.transformPage(params), userId, key, groupId,order,column);
//                ledOnlineCheck(page.getRecords());
//                page.setRecords(page.getRecords().stream().filter(h-> h.getIsOpen().equals(true)).collect(Collectors.toList()));
//                return new PageUtils(page);
//            }else if (order != null && order.equals("DESC") && column.equals("isOpen")){
//                Map<String, Object> map = new HashMap<>();
//                Integer pg = 1;
//                Integer size = 200;
//                map.put("page",pg);
//                params.put("limit",size);
//                page = baseMapper.adminSelectPageVo(PageTransform.transformPage(params), userId, key, groupId,order,column);
//                ledOnlineCheck(page.getRecords());
//                page.setRecords(page.getRecords().stream().filter(h-> h.getIsOpen().equals(false)).collect(Collectors.toList()));
//                return new PageUtils(page);
//            }else {
//                page = baseMapper.adminSelectPageVo(PageTransform.transformPage(params), userId, key, groupId,order,column);
//            }
//
//        }else if(roleId.longValue() == Constant.USER){
//            if (order != null && order.equals("ASC") && column.equals("isOpen")) {
//                Map<String, Object> map = new HashMap<>();
//                Integer pg = 1;
//                Integer size = 200;
//                map.put("page",pg);
//                params.put("limit",size);
//                page = baseMapper.userSelectPageVo(PageTransform.transformPage(params), userId, key, groupId,order,column);
//                ledOnlineCheck(page.getRecords());
//                page.setRecords(page.getRecords().stream().filter(h-> h.getIsOpen().equals(true)).collect(Collectors.toList()));
//                return new PageUtils(page);
//            }else if (order != null && order.equals("DESC") && column.equals("isOpen")){
//                Map<String, Object> map = new HashMap<>();
//                Integer pg = 1;
//                Integer size = 200;
//                map.put("page",pg);
//                params.put("limit",size);
//                page = baseMapper.userSelectPageVo(PageTransform.transformPage(params), userId, key, groupId,order,column);
//                ledOnlineCheck(page.getRecords());
//                page.setRecords(page.getRecords().stream().filter(h-> h.getIsOpen().equals(false)).collect(Collectors.toList()));
//                return new PageUtils(page);
//            }else {
//                page = baseMapper.userSelectPageVo(PageTransform.transformPage(params), userId, key, groupId,order,column);
//            }
//
//        }
//        ledOnlineCheck(page.getRecords());
//        return new PageUtils(page);
//    }
//*//*
//    @Override
//    public List<PoleLightemitEntity> getAll(Long userId) {
//        //获取角色列表
//        Long roleId = (sysUserRoleService.queryRoleId(userId));
//
//        if(roleId == null || roleId == 0){
//            return null;
//        }
//        List<PoleLightemitEntity> list = null;
//        if(roleId.longValue() == Constant.SUPER_ADMIN){
//            list = poleLightemitDao.selectAll();
//        }else if(roleId.longValue() == Constant.ADMIN){
//            list = poleLightemitDao.selectAllByCompany(userId);
//        }else if(roleId.longValue() == Constant.USER){
//            list = poleLightemitDao.selectAllByUser(userId);
//        }
//        return list;
//    }
//*/
//
///*    public void ledOnlineCheck(List<PoleLightemitEntity> list) {
//
//        for(PoleLightemitEntity poleLightemitEntity : list){
//            poleLightemitEntity.setIsOpen(lightemitUtils.getIsScreenOpen(poleLightemitEntity.getLightemitControlCode()).contains("true"));
//        }
//    }*/
//
//
//   /* public void savePoleLightemit(PoleLightemitEntity poleLightemit) {
//        this.save(poleLightemit);
//        poleStreetlightLightemitService.saveStreetlightLightemit(poleLightemit.getLightemitId(),poleLightemit.getStreetlightId());
//    }*/
//
//
//  /*  public void updatePoleLightemit(PoleLightemitEntity poleLightemit) {
//        this.updateById(poleLightemit);
//        poleStreetlightLightemitService.saveStreetlightLightemit(poleLightemit.getLightemitId(),poleLightemit.getStreetlightId());
//    }*/
//
//    /**
//     * æŸ¥è¯¢æƒé™èŒƒå›´å†…的所有led屏信息
//     * @param
//     * @return
//     */
//   /* public List<PoleLightemitEntity> selectLightemitByUserId(Long userId) {
//        List<PoleLightemitEntity> list = new ArrayList<>();
//
//        Long roleId = sysUserRoleService.queryRoleId(userId);
//
//        if(roleId == null || roleId == 0){
//            return new ArrayList<>();
//        }
//        if(roleId.longValue() == Constant.SUPER_ADMIN){
//            list = this.list();
//        }else if(roleId.longValue() == Constant.ADMIN){
//            list = baseMapper.selectCompanyLightemitByUserId(userId);
//        }else if(roleId.longValue() == Constant.USER){
//            list = baseMapper.selectLightemitByUserId(userId);
//        }
//        return list;
//    }
//*/
//    /*
//    é€šè¿‡å±å¹•编码查询
//     */
//
//    public PoleLightemitEntity selectByLightemitControlCode(String lightemitControlCode) {
//        QueryWrapper<PoleLightemitEntity> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("lightemit_control_code", lightemitControlCode);
//        return this.getOne(queryWrapper);
//    }
//
//    /*
//    led上传图片
//     */
//    @Async("taskExecutor")
//    public void photoUpload(String lightemitControlCode, String path, List<String> filenameList, String userName) throws IOException {
//        //获取屏幕宽
//        String screenWidth = lightemitUtils.getScreenWidth(lightemitControlCode);
//        String screenHeight = lightemitUtils.getScreenHeight(lightemitControlCode);
//
//        //html地址
//        String filenameTemp = path + userName + "_"+lightemitControlCode + ".html";
//        File htmlFile = new File(filenameTemp);
//        if (!htmlFile.exists() || htmlFile.delete()) {
//            htmlFile.createNewFile();
//        }
//
//        //获取body的html
//        Map<String, Object> params = new HashMap<>();
//        params.put("imgList",filenameList);
//        params.put("screenWidth",screenWidth);
//        params.put("screenHeight",screenHeight);
//
//        String body = new HtmlTemplateUtils().renderPath("classpath:templates/lightemitTemplates/photoTemplates.html", params);
//
//        boolean flag = new FileUtil().writeToFile(body, filenameTemp);
//
//        if(flag){
//            //清屏操作
//            lightemitUtils.clear(lightemitControlCode);
//            //清除播放列表
//            lightemitUtils.clearVideoPlay(lightemitControlCode);
//            //清除节目列表
//            lightemitUtils.clearPlayerTask(lightemitControlCode);
//            //推送图片
//            lightemitUtils.postHtml(lightemitControlCode,userName);
//        }
//    }
//
//    /*
//    led上传视频
//     */
//
//    @Async("taskExecutor")
//    public void videoUpload(String lightemitControlCode, String filename, String path, String userName) throws IOException {
//        //获取屏幕宽
//        String screenWidth = lightemitUtils.getScreenWidth(lightemitControlCode);
//        String screenHeight = lightemitUtils.getScreenHeight(lightemitControlCode);
//
//        //发送视频至开发板并播放
//        lightemitUtils.postVideo(screenWidth, screenHeight, filename, lightemitControlCode);
//
//        //清屏
//        lightemitUtils.clear(lightemitControlCode);
//
//    }
//
//    /**
//     * 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;
//        }
//    }
//
//    /*
//    åˆ é™¤
//     */
//
//   /* public void deleteByIds(List<Long> lightemitIds) {
//        this.removeByIds(lightemitIds);
//        //删除关系表中的数据
//        poleStreetlightLightemitService.remove(
//                new UpdateWrapper<PoleStreetlightLightemitEntity>().in("lightemit_id", lightemitIds.toArray()));
//    }*/
//
//    /*
//    ç†™è®¯è§†é¢‘设置
//     */
//
//    @Async("taskExecutor")
//    public void videoXixunPlayer(String lightemitControlCode, String ip, String filename, Long filesize, Integer videoTime) {
//        //获取屏幕宽
//        Integer screenWidth = Integer.valueOf(lightemitUtils.getScreenWidth(lightemitControlCode));
//        Integer screenHeight = Integer.valueOf(lightemitUtils.getScreenHeight(lightemitControlCode));
//        Source source = new Source();
//        Layer layer = new Layer();
//        Program pro = new Program();
//        TaskItem items = new TaskItem();
//        ProgramsTask task = new ProgramsTask();
//        Command command = new Command();
//        XixunPlayer xixun = new XixunPlayer();
//        source.set_id(UUID.randomUUID().toString());//所有_id都可用UUID随机生成
//        source.setId(filename);//请求头拼接该ID为该资源的完整下载地址
//        source.set_type("Video");    //设置资源类型,其他资源类型请参考xixunplayer节目json说明文档
//        source.setFileExt(".mp4");    //资源后缀名
//        source.setHeight(screenHeight);        //资源高度
//        source.setWidth(screenWidth);        //资源宽度
//        source.setLeft(0);            //距左
//        source.setMd5("dd135d5d2d44d619a542db773ab529a4");
//        source.setMime("video/mp4");
//        source.setName(filename);
//        source.setPlayTime(0);    //播放起始时间
//        source.setSize(filesize);    //资源字节数,要精准
//        source.setTimeSpan(videoTime);        //该资源播放时长
//        source.setTop(0);            //距顶
//        List<Source> list=new ArrayList<Source>();
//        list.add(source);
//        layer.setSources(list);
//        pro.set_id(UUID.randomUUID().toString());
//        pro.setHeight(screenHeight);        //节目高度
//        List<Layer> list1=new ArrayList<Layer>();
//        list1.add(layer);
//        pro.setLayers(list1);
//        pro.setName("demo");    //节目名称
//        pro.setOthers(true);//如果为true,则该节目来自第三方接口,不是来自我们自己的web,二次开发请务必赋值为true
//        pro.setTotalSize(filesize);    //所有资源总字节数
//        pro.setVersion(0);            //高级节目=0,简易节目=2
//        pro.setWidth(screenWidth);        //节目宽度
//        items.set_id(UUID.randomUUID().toString());
//        items.set_program(pro);
//        items.setRepeatTimes(1);
//        items.setSchedules(null);//定时段,不做定时可为null
//        task.set_id(UUID.randomUUID().toString());
//        task.setName("这是一个示例");
//        List<TaskItem> list2=new ArrayList<TaskItem>();
//        list2.add(items);
//        task.setItems(list2);
//        command.setId(UUID.randomUUID().toString());
//        //这里是下方的post回调地址,需要修改IP地址
//        command.setNotificationURL("http://" + ip + ":" + port + "/machine-fast/serv/download/getJSON");
//        //资源下载链接的请求头
//        command.setPreDownloadURL("http://" + ip + ":" + port + "/machine-fast/serv/download/downloadFile/");
//        command.setTask(task);
//        xixun.set_id(UUID.randomUUID().toString());
//        xixun.setCommand(command);
//        xixun.setType("commandXixunPlayer");    //命令固定类型,不可更改
//        String jsondata = new Gson().toJson(xixun);
//        lightemitUtils.clear(lightemitControlCode);
//        this.updateRequestBody(lightemitControlCode,jsondata);
//        lightemitUtils.post(realtimeServerBean.getCommand() + lightemitControlCode,jsondata);
//    }
//
//    /*
//    æŽ¨é€å¤©æ°”数据
//     */
//
//    //@Async("taskExecutor")
//   /* public Boolean pushWeather(String lightemitControlCode, PoleSensorEntity sensorEntity, PoleStreetlightEntity streetlightEntity) {
//        if(StringUtils.isBlank(lightemitControlCode)){
//            return Boolean.valueOf(false);
//        }
//        Integer screenHeight = Integer.parseInt(lightemitUtils.getScreenHeight(lightemitControlCode));
//        String size = String.valueOf(screenHeight/18);
//        //字幕主体拼接
//        String body =
//                "<head><style type=\"text/css\">body{background-color:#000;}</style></head>" +
//                        "<p style=\"font-size:" + size + "px;line-height:17px;color:#fff\">" +
//                        (streetlightEntity == null || streetlightEntity.getCity() == null? "": streetlightEntity.getCity().replace("市", "")) + "<br/>" +
//                        "温度:" + (sensorEntity == null || sensorEntity.getTemperature() == null? "-": sensorEntity.getTemperature()) + "℃<br/>" +
//                        "湿度:" + (sensorEntity == null || sensorEntity.getHumidity() == null? "-": sensorEntity.getHumidity()) + "%RH<br/>" +
//                        "亮度:" + (sensorEntity == null || sensorEntity.getBrightness() == null? "-": sensorEntity.getBrightness()) + "lux<br/>" +
//                        "风速:" + (sensorEntity == null || sensorEntity.getWindSpeed() == null? "-": sensorEntity.getWindSpeed()) + "m/s<br/>" +
//                        "CO2:" + (sensorEntity == null || sensorEntity.getEco2() == null? "-": sensorEntity.getEco2()) + "ppm<br/>" +
//                        "甲醛:" + (sensorEntity == null || sensorEntity.getEch2o() == null? "-": sensorEntity.getEch2o()) + "mg/m³<br/>" +
//                        "TVOC:" + (sensorEntity == null || sensorEntity.getTvoc() == null? "-": sensorEntity.getTvoc()) + "mg/m³<br/>" +
//                        "PM25:" + (sensorEntity == null || sensorEntity.getPm25() == null? "-": sensorEntity.getPm25()) + "mg/m³<br/>" +
//                        "PM10:" + (sensorEntity == null || sensorEntity.getPm10() == null? "-": sensorEntity.getPm10()) + "mg/m³<br/>";
//
//        //组装请求参数
//        SubTitleSet subTitleSet = new SubTitleSet();
//        subTitleSet.html = body;
//        subTitleSet.num = 1;
//
//        //清屏操作
//        lightemitUtils.clear(lightemitControlCode);
//        //清除播放列表
//        lightemitUtils.clearVideoPlay(lightemitControlCode);
//        //清除节目列表
//        lightemitUtils.clearPlayerTask(lightemitControlCode);
//        try{
//            lightemitUtils.subTitleSet(subTitleSet, lightemitControlCode, false);
//            return true;
//        }catch (Exception e){
//            return false;
//        }finally {
//            //一分钟后清除屏幕
//            new Timer().schedule(new TimerTask() {
//                @Override
//                public void run() {
//                    lightemitUtils.clear(lightemitControlCode);
//                    //清除播放列表
//                    lightemitUtils.clearVideoPlay(lightemitControlCode);
//                    //清除节目列表
//                    lightemitUtils.clearPlayerTask(lightemitControlCode);
//                    //推送最后命令
//                    lightemitUtils.sendLastCommand(lightemitControlCode);
//                }
//            }, 60*1000);
//        }
//    }*/
//
//    /*
//    æ›´æ–°è¯·æ±‚数据
//     */
//
//    public void updateRequestBody(String ledCode, String postBody) {
//        baseMapper.updateRequestBody(ledCode, postBody);
//    }
//
//    /*
//    æ ¹æ®led屏编码获取灯杆所有信息
//     */
//
//    public PoleStreetlightEntity getStreetlightByLedCode(String ledCode) {
//        return baseMapper.getStreetlightByLedCode(ledCode);
//    }
//
//    /*
//    æ ¹æ®led屏编码设置音量
//     */
//
//    @Async("taskExecutor")
//    public void setVolume(String lightemitControlCode, Integer volume) {
//        lightemitUtils.setVoiume(lightemitControlCode, volume);
//    }
//
//
//    public List<PoleLightemitEntity> listOfStreetlight(String streetlightId) {
//        return baseMapper.listOfStreetlight(streetlightId);
//    }
//
//
//    public List<PoleLightemitEntity> selectLedByStreetlightId(String streetlightId) {
//        return baseMapper.getLedByStreetlightId(streetlightId);
//    }
//
//    /*
//        ä¸Šä¼ æ°´å¹³æ»šåŠ¨å•è¡Œå­—å¹•
//         */
//    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);
//            }
//        }
//    }
//
//    /*
//    ä¸Šä¼ åž‚直滚动单行字幕
//     */
//    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);
//                }
//            }
//        }
//    }
//
//
//    /*
//    ä¸Šä¼ åž‚直滚动多行字幕
//     */
//    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);
//                }
//            }
//        }
//    }
//
//    @Override
//    public void xixunplaySetting(String lightemitControlCode) {
//        //获取屏幕宽
////        Integer screenWidth = Integer.valueOf(lightemitUtils.getScreenWidth(lightemitControlCode));
////        Integer screenHeight = Integer.valueOf(lightemitUtils.getScreenHeight(lightemitControlCode));
////        Source source = new Source();
////        Layer layer = new Layer();
////        Program pro = new Program();
////        TaskItem items = new TaskItem();
////        ProgramsTask task = new ProgramsTask();
////        Command payload = new Command();
////        XixunPlayer xixun = new XixunPlayer();
////        source.set_id(UUID.randomUUID().toString());//所有_id都可用UUID随机生成
////        source.setId(filename);//请求头拼接该ID为该资源的完整下载地址
////        source.set_type("Video");    //设置资源类型,其他资源类型请参考xixunplayer节目json说明文档
////        source.setFileExt(".mp4");    //资源后缀名
////        source.setHeight(screenHeight);        //资源高度
////        source.setWidth(screenWidth);        //资源宽度
////        source.setLeft(0);            //距左
////        source.setMd5("dd135d5d2d44d619a542db773ab529a4");
////        source.setMime("video/mp4");
////        source.setName(filename);
////        source.setPlayTime(0);    //播放起始时间
////        source.setSize(filesize);    //资源字节数,要精准
////        source.setTimeSpan(videoTime);        //该资源播放时长
////        source.setTop(0);            //距顶
////        List<Source> list = new ArrayList<Source>();
////        list.add(source);
////        layer.setSources(list);
////        pro.set_id(UUID.randomUUID().toString());
////        pro.setHeight(screenHeight);        //节目高度
////        List<Layer> list1=new ArrayList<Layer>();
////        list1.add(layer);
////        pro.setLayers(list1);
////        pro.setName("demo");    //节目名称
////        pro.setOthers(true);//如果为true,则该节目来自第三方接口,不是来自我们自己的web,二次开发请务必赋值为true
////        pro.setTotalSize(filesize);    //所有资源总字节数
////        pro.setVersion(0);            //高级节目=0,简易节目=2
////        pro.setWidth(screenWidth);        //节目宽度
////        items.set_id(UUID.randomUUID().toString());
////        items.set_program(pro);
////        items.setRepeatTimes(1);
////        items.setSchedules(null);//定时段,不做定时可为null
////        task.set_id(UUID.randomUUID().toString());
////        task.setName("这是一个示例");
////        List<TaskItem> list2=new ArrayList<TaskItem>();
////        list2.add(items);
////        task.setItems(list2);
////        payload.setId(UUID.randomUUID().toString());
////        //这里是下方的post回调地址,需要修改IP地址
////        payload.setNotificationURL("http://" + ip + ":" + port + "/machine-fast/serv/download/getJSON");
////        //资源下载链接的请求头
////        payload.setPreDownloadURL("http://" + ip + ":" + port + "/machine-fast/serv/download/downloadFile/");
////        payload.setTask(task);
////        xixun.set_id(UUID.randomUUID().toString());
////        xixun.setCommand(payload);
////        xixun.setType("commandXixunPlayer");    //命令固定类型,不可更改
////        String jsondata = new Gson().toJson(xixun);
////        lightemitUtils.clear(lightemitControlCode);
////        this.updateRequestBody(lightemitControlCode,jsondata);
////        lightemitUtils.post(realtimeServerBean.getCommand() + lightemitControlCode,jsondata);
//    }
//}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/Constant.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,252 @@
package com.sandu.ximon.admin.utils;
/**
 * å¸¸é‡
 *
 * @author Mark sunlightcs@gmail.com
 */
public class Constant {
    /** è¶…级管理员ID ä¸Žè§’色ID*/
    public static final int SUPER_ADMIN = 1;
    /** è¶…级管理员ID ä¸Žè§’色ID*/
    public static final int ADMIN = 2;
    /** è¶…级管理员ID ä¸Žè§’色ID*/
    public static final int USER = 3;
    /**
     * å½“前页码
     */
    public static final String PAGE = "page";
    /**
     * æ¯é¡µæ˜¾ç¤ºè®°å½•æ•°
     */
    public static final String LIMIT = "limit";
    /**
     * æŽ’序字段
     */
    public static final String ORDER_FIELD = "sidx";
    /**
     * æŽ’序方式
     */
    public static final String ORDER = "order";
    /**
     *  å‡åº
     */
    public static final String ASC = "asc";
    /**
     * è·¯ç¯ç±»åž‹
     */
    public static final int TYPE_LIGHT = 54448;
    /**
     * æŽ§ç¯å®šæ—¶Tesk
     */
    public static final String LIGHT_BATCH_TESK = "lightbatchTesk";
    /**
     * å·¦
     */
    public static final String LEFT = "left";
    /**
     * å³
     */
    public static final String RIGHT = "right";
    /**
     * ä¸Š
     */
    public static final String UP = "up";
    /**
     * ä¸‹
     */
    public static final String DOWN = "down";
    /**
     * é™æ€
     */
    public static final String STATIC = "static";
    /**
     * èœå•类型
     *
     * @author chenshun
     * @email sunlightcs@gmail.com
     * @date 2016å¹´11月15日 ä¸‹åˆ1:24:29
     */
    public enum MenuType {
        /**
         * ç›®å½•
         */
        CATALOG(0),
        /**
         * èœå•
         */
        MENU(1),
        /**
         * æŒ‰é’®
         */
        BUTTON(2);
        private int value;
        MenuType(int value) {
            this.value = value;
        }
        public int getValue() {
            return value;
        }
    }
    /*
    å®šæ—¶åˆ—表类型
     */
    public enum ScheduleType {
        /*
        ç»„
         */
        GROUP(0),
        /*
        åˆ—
         */
        COLUMN(1),;
        private int value;
        ScheduleType(int value) {
            this.value = value;
        }
        public int getValue() {
            return value;
        }
    }
    /**
     * å®šæ—¶ä»»åŠ¡çŠ¶æ€
     *
     * @author chenshun
     * @email sunlightcs@gmail.com
     * @date 2016å¹´12月3日 ä¸Šåˆ12:07:22
     */
    public enum ScheduleStatus {
        /**
         * æ­£å¸¸
         */
        NORMAL(0),
        /**
         * æš‚停
         */
        PAUSE(1);
        private int value;
        ScheduleStatus(int value) {
            this.value = value;
        }
        public int getValue() {
            return value;
        }
    }
    /**
     * äº‘服务商
     */
    public enum CloudService {
        /**
         * ä¸ƒç‰›äº‘
         */
        QINIU(1),
        /**
         * é˜¿é‡Œäº‘
         */
        ALIYUN(2),
        /**
         * è…¾è®¯äº‘
         */
        QCLOUD(3);
        private int value;
        CloudService(int value) {
            this.value = value;
        }
        public int getValue() {
            return value;
        }
    }
    /**
     * led字幕类型
     */
    public enum SubTitleType {
        /**
         * å•行文本
         */
        SINGLE(0),
        /**
         * å¤šè¡Œæ–‡æœ¬
         */
        MULTI(1);
        private int value;
        SubTitleType(int value) {
            this.value = value;
        }
        public int getValue() {
            return value;
        }
    }
    public enum LinkType {
        /**
         * æœ‰çº¿è¿žæŽ¥
         */
        WIRED(0),
        /**
         * nb连接
         */
        NBLINK(1),
        /**
         * MQTT连接
         */
        MQTTLINK(2),
        /**
         *  MQTT串口主板类型
         */
        MQTT_MAINBOARDLINK(3);
        private int value;
        LinkType(int value) {
            this.value = value;
        }
        public int getValue() {
            return value;
        }
    }
    // led节目单个资源类型
    public enum ledProgramFileType {
        /*
        å›¾ç‰‡
         */
        IMAGE(0),
        /*
        è§†é¢‘
         */
        VIDEO(1);
        private int value;
        ledProgramFileType(int value) {
            this.value = value;
        }
        public int getValue() {
            return value;
        }
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/FileUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
package com.sandu.ximon.admin.utils;
import java.io.*;
/**
 * @program: machine-fast
 * @description: æ–‡ä»¶æ“ä½œç±»
 * @author: YSS
 * @create: 2019-04-24 13:58
 **/
public class FileUtil {
    /**
     * å­—段写入文件
     * @param newStr        å­—段
     * @param filePath      æ–‡ä»¶è·¯å¾„
     * @return
     * @throws
     */
    public boolean writeToFile(String newStr,String filePath) throws IOException {
        OutputStream outputStream = null;
        OutputStreamWriter outputStreamWriter = null;
        BufferedWriter bufferedWriter = null;
        try{
            outputStream = new FileOutputStream(new File(filePath));
            outputStreamWriter = new OutputStreamWriter(outputStream, "utf-8");
            bufferedWriter = new BufferedWriter(outputStreamWriter);
            bufferedWriter.write(newStr);
            bufferedWriter.flush();
        }catch (Exception e){
            return false;
        }finally {
            try{
                if(bufferedWriter != null){
                    bufferedWriter.close();
                }
                if(outputStreamWriter != null){
                    outputStreamWriter.close();
                }
                if(outputStream != null){
                    outputStream.close();
                }
                return true;
            }catch (IOException e){
                return false;
            }
        }
    }
    public byte[] fileToByte(String filePath){
        byte[] buffer = null;
        File file = new File(filePath);
        FileInputStream fileInputStream = null;
        ByteArrayOutputStream byteArrayOutputStream = null;
        try {
            fileInputStream = new FileInputStream(file);
            byteArrayOutputStream = new ByteArrayOutputStream();
            byte[] b = new byte[1024];
            int n;
            while ((n = fileInputStream.read(b)) != -1){
                byteArrayOutputStream.write(b, 0, n);
            }
            buffer = byteArrayOutputStream.toByteArray();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(byteArrayOutputStream != null){
                    byteArrayOutputStream.close();
                }
                if(fileInputStream != null){
                    fileInputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return buffer;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/HtmlTemplateUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.sandu.ximon.admin.utils;
import java.io.*;
import java.util.Map;
import org.springframework.core.io.ClassPathResource;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
/**
 * @program: machine-fast
 * @description: thymeleaf渲染工具类
 * @author: YSS
 * @create: 2019-09-09 17:55
 **/
public class HtmlTemplateUtils {
    private final TemplateEngine templateEngine = new TemplateEngine();
    // è§£æžæ¨¡æ¿
    public String render(String template, Map<String, Object> params){
        Context context = new Context();
        context.setVariables(params);
        return templateEngine.process(template, context);
    }
    // æ–‡ä»¶è¯»å–包装方法
    public String renderPath(String path, Map<String, Object> params){
        InputStream inputStream = null;
        InputStreamReader inputStreamReader = null;
        BufferedReader bufferedReader = null;
        String body = "";
        try {
//            File file = ResourceUtils.getFile(path);
            ClassPathResource classPathResource = new ClassPathResource(path);
            inputStream = classPathResource.getInputStream();
            inputStreamReader = new InputStreamReader(inputStream, "utf-8");
            bufferedReader = new BufferedReader(inputStreamReader);
            String s = "";
            while ((s = bufferedReader.readLine()) != null){
                body += s + "\n";
            }
            return this.render(body, params);
        } catch (IOException e) {
            return body;
        }finally {
            try{
                if(bufferedReader != null){
                    bufferedReader.close();
                }
                if(inputStreamReader != null){
                    inputStreamReader.close();
                }
                if(inputStream != null){
                    inputStream.close();
                }
            }catch (IOException e){
            }
        }
    };
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/LightemitUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,378 @@
//package com.sandu.ximon.admin.utils;
//
//import com.alibaba.fastjson.JSONObject;
//import com.google.gson.Gson;
//import com.sandu.ximon.admin.config.NginxConfigBean;
//import com.sandu.ximon.admin.config.RealtimeServerBean;
//import com.sandu.ximon.admin.service.PoleLightemitService;
//import com.sandu.ximon.admin.utils.request.*;
//import com.sandu.ximon.dao.domain.PoleLightemitEntity;
//import com.squareup.okhttp.*;
//import org.apache.commons.lang.StringEscapeUtils;
//import org.apache.commons.lang.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.ApplicationContext;
//import org.springframework.stereotype.Component;
//
//import java.io.IOException;
//
//@Component
//public class LightemitUtils {
//    @Autowired
//    RealtimeServerBean realtimeServerBean;
//
//    PoleLightemitService poleLightemitService;
//    @Autowired
//    ApplicationContext applicationContext;
//    @Autowired
//    NginxConfigBean nginxConfigBean;
//    //body封装编码
//    private final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
//
//    private OkHttpClient client = new OkHttpClient();
//
//
//    public void init(){
//        //重新获取单例
//        poleLightemitService = applicationContext.getBean(PoleLightemitService.class);
//    }
//    /**
//     * post请求封装方法
//     * @param url url
//     * @param json body
//     * @return
//     */
//    public String post(String url, String json){
//        RequestBody body = RequestBody.create(JSON, json);
//        Request request = new Request.Builder()
//                .url(url)
//                .post(body)
//                .build();
//        try {
//            Response response = client.newCall(request).execute();
//            return response.body().string();
//        } catch (IOException e) {
//            LogUtils.error(e.getMessage());
//            return "";
//        }
//    }
//
//    /**
//     * èŽ·å–led屏宽度
//     * @param ledCode led屏编号
//     * @return
//     */
//    public String getScreenWidth(String ledCode){
//        String postBody = new Gson().toJson(new GetScreenWidth());
//        //请求地址
//        String url = realtimeServerBean.getCommand() + ledCode;
//        //请求
//        String result =  post(url,postBody);
//        if(StringUtils.isNotBlank(result)){
//            try{
//                return JSONObject.parseObject(result).get("result").toString();
//            }catch (Exception e){
//                return "64";
//            }
//        }else{
//            return "64";
//        }
//    }
//
//    /**
//     * èŽ·å–led屏高度
//     * @param ledCode led屏编号
//     * @return
//     */
//    public String getScreenHeight(String ledCode){
//        String postBody = new Gson().toJson(new GetScreenHeight());
//        //请求地址
//        String url = realtimeServerBean.getCommand() + ledCode;
//        //请求
//        String result =  post(url,postBody);
//        if(StringUtils.isNotBlank(result)){
//            try{
//                return JSONObject.parseObject(result).get("result").toString();
//            }catch (Exception e){
//                return "64";
//            }
//        }else{
//            return "64";
//        }
//    }
//
//    /**
//     * æ¸…屏操作
//     * @param ledCode
//     */
//    public void clear(String ledCode){
//        String postBody = new Gson().toJson(new Clear());
//        //请求地址
//        String url = realtimeServerBean.getCommand() + ledCode;
//        //请求
////        poleLightemitService.updateRequestBody(ledCode, "");
//        String result =  post(url,postBody);
//    }
//
//    /**
//     * html传输至led屏
//     * @param ledCode
//     * @param username
//     */
//    public void postHtml(String ledCode, String username){
//
//        PostHtml postHtml = new PostHtml(realtimeServerBean.getUrl() + username + "_" + ledCode + ".html");
//        String postBody = new Gson().toJson(postHtml);
//
//        //请求地址
//        String url = realtimeServerBean.getCommand() + ledCode;
//        //保存led数据
//        poleLightemitService.updateRequestBody(ledCode, postBody);
//        //请求
//        String result =  post(url,postBody);
//    }
//    /**
//     * html传输至led屏, é€šè¿‡url获取html
//     * @param ledCode
//     * @param username
//     */
//    public void postHtmlUseNginx(String ledCode, String username){
//
//        PostHtml postHtml = new PostHtml(nginxConfigBean.getUrl() + username + "_" + ledCode + ".html");
//        String postBody = new Gson().toJson(postHtml);
//
//        //请求地址
//        String url = realtimeServerBean.getCommand() + ledCode;
//        //保存led数据
//        poleLightemitService.updateRequestBody(ledCode, postBody);
//        //请求
//        String result =  post(url,postBody);
//    }
//
//    /**
//     * è§†é¢‘传输至led屏
//     * @param screenWidth
//     * @param screenHeight
//     * @param filename
//     * @param ledCode
//     */
//    public void postVideo(String screenWidth, String screenHeight, String filename, String ledCode) {
//
//        //led开发板下载视频请求body
//        DownloadFileToLocal downloadFileToLocal = new DownloadFileToLocal();
//        downloadFileToLocal.url = realtimeServerBean.getUrl() + filename;
//        downloadFileToLocal.path += filename;
//
//        //led开发板下载视频请求
//        this.post(realtimeServerBean.getCommand() + ledCode, new Gson().toJson(downloadFileToLocal));
//
//        //led开发板视频列表请求body
//        SetPlayList setPlayList = new SetPlayList();
//        setPlayList.list[0] = "/data/data/com.xixun.xy.conn/files/local/abc/"+filename;
////        setPlayList.pathList[0] = "";
//        try{
//            setPlayList.width = Integer.valueOf(screenWidth);
//            setPlayList.height = Integer.valueOf(screenHeight);
//        }catch (Exception e){
//            return;
//        }
//        String postBody = new Gson().toJson(setPlayList);
//        //保存led数据
//        poleLightemitService.updateRequestBody(ledCode, postBody);
//        //led开发板视频列表请求
//        this.post(realtimeServerBean.getCommand() + ledCode, postBody);
//    }
//
//    /**
//     * led屏字幕设置
//     * @param subTitleSet
//     * @param ledCode
//     */
//    public void subTitleSet(SubTitleSet subTitleSet, String ledCode, Boolean isSave){
//        String postBody =  new Gson().toJson(subTitleSet);
//        if(isSave == true){
//            poleLightemitService.updateRequestBody(ledCode, postBody);
//        }
//        this.post(realtimeServerBean.getCommand() + ledCode, postBody);
//    }
//
//    /**
//     * æ¸…除播放列表
//     * @param ledCode
//     */
//    public void clearVideoPlay(String ledCode) {
////        poleLightemitService.updateRequestBody(ledCode, "");
//        this.post(realtimeServerBean.getCommand() + ledCode, new Gson().toJson(new ClearVideoPlay()));
//    }
//
//    /**
//     * æ¸…除节目列表
//     * @param ledCode
//     */
//    public void clearPlayerTask(String ledCode) {
////        poleLightemitService.updateRequestBody(ledCode, "");
//        this.post(realtimeServerBean.getCommand() + ledCode, new Gson().toJson(new ClearPlayerTask()));
//    }
//
//    /**
//     * èŽ·å–led屏画面
//     * @param ledCode
//     */
//    public String getPicture(String ledCode) {
//        String result = this.post(realtimeServerBean.getCommand() + ledCode, new Gson().toJson(new GetPicture()));
//        //获取base64图片数据
//        if(StringUtils.isBlank(result)){
//            return "";
//        }
//        String re;
//
//        try{
//            re = JSONObject.parseObject(result).get("result").toString();
//        }catch (Exception e){
//            re = "0";
//        }
//
//        if(StringUtils.isBlank(re)){
//            return "";
//        }
//        //去除换行符
//        re.replaceAll("\r|\n*","");
//        return re;
//    }
//
//    /**
//     * åˆ¤æ–­led屏是否开启
//     * @param ledCode
//     * @return
//     */
//    public String getIsScreenOpen(String ledCode){
//        String result = this.post(realtimeServerBean.getCommand() + ledCode, new Gson().toJson(new IsScreenOpen()));
//        //获取base64图片数据
//        if(StringUtils.isNotBlank(result)){
//            String re;
//            try{
//                re = JSONObject.parseObject(result).get("result").toString();
//            }catch (Exception e){
//                re = "false";
//            }
//            return re;
//        }else{
//            return "";
//        }
//    }
//
//    /*
//    å¯åЍxwalk
//     */
//    /*public void startActivity(String ledCode){
//        String result = this.post(realtimeServerBean.getCommand() + ledCode, new Gson().toJson(new StartActivity()));
//    }*/
//
//    /*
//    ä½¿ç”¨xwalk加载网页
//     */
//    /*public void callXwalkFn(String ledCode,String username){
//
//        CallXwalkFn callXwalkFn = new CallXwalkFn();
//
//        callXwalkFn.setArgUrl(realtimeServerBean.getUrl() + username + "_" + ledCode + ".html");
//        String postBody = new Gson().toJson(callXwalkFn);
//
//        //请求地址
//        String url = realtimeServerBean.getCommand() + ledCode;
//        //请求
//        String result =  post(url,postBody);
//    }*/
//
//    /*
//   æŽ§åˆ¶å±å¹•开关
//    */
//    public String setScreenOpen(String ledCode, Boolean bool) {
//        String result = this.post(realtimeServerBean.getCommand() + ledCode, new Gson().toJson(new setScreenOpen(bool)));
//        //获取base64图片数据
//        if(StringUtils.isNotBlank(result)){
//            String re = "";
//            try{
//                re = JSONObject.parseObject(result).get("result").toString();
//            }catch (Exception e){
//                re = "false";
//            }
//            return re;
//        }else{
//            return "";
//        }
//    }
//
//    //发送最新的数据
//    public void sendLastCommand(String lightemitControlCode) {
//        PoleLightemitEntity poleLightemitEntity = poleLightemitService.selectByLightemitControlCode(lightemitControlCode);
//        if(poleLightemitEntity == null || StringUtils.isBlank(poleLightemitEntity.getRequestBody())){
//            return;
//        }
//        this.post(realtimeServerBean.getCommand() + lightemitControlCode, poleLightemitEntity.getRequestBody());
//    }
//
//    /*
//    è®¾ç½®led音量
//     */
//    public void setVoiume(String ledCode,Integer volume){
//
//        SetVolume setVolume = new SetVolume();
//        setVolume.arg1 = volume;
//        String postBody = new Gson().toJson(setVolume);
//
//        //请求
//        String result =  post(realtimeServerBean.getCommand() + ledCode,postBody);
//    }
//
//    /*
//    èŽ·å–led音量
//     */
//    /*public String getVoiume(String ledCode){
//        GetVolume getVolume = new GetVolume();
//        String postBody = new Gson().toJson(getVolume);
//
//        //请求
//        String result =  post(realtimeServerBean.getCommand() + ledCode,postBody);
//        //请求
//        if(StringUtils.isNotBlank(result)){
//            try{
//                return JSONObject.parseObject(result).get("result").toString();
//            }catch (Exception e){
//                return "0";
//            }
//        }else{
//            return "0";
//        }
//    }
//*/
//    /**
//     * æŸ¥è¯¢å®šæ—¶
//     * @param ledCode
//     * @return
//     */
//    public String getTimeSchedule(String ledCode) {
//        String result = this.post(realtimeServerBean.getCommand() + ledCode, new Gson().toJson(new GetTimeSchedule()));
//        //获取定时json数据
////        Map map = new Gson().fromJson(result,Map.class);
////        Gson gson = new Gson();
////        Task task =gson.fromJson((String)gson.fromJson(result,Map.class).get("task"),Task.class);
////        Schedules schedules =gson.fromJson((String)gson.fromJson(result,Map.class).get("schedule"),Schedules.class);
//        if(StringUtils.isBlank(result)){
//            return "";
//        }
//        String re;
//
//        //去除字符串中的\
//        re = StringEscapeUtils.unescapeJavaScript(result);
//        //去除字符串中的}"
//        re = re.replace("}\"","}");
//        //去除字符串中"{
//        re = re.replace("\"{","{");
//        re = re.replace("\"null\"","{}");
//        if(StringUtils.isBlank(re)){
//            return "";
//        }
//        return re;
//    }
//}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxProgramAPIUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.sandu.ximon.admin.utils;
import com.alibaba.fastjson.JSON;
import com.sandu.ximon.admin.config.VnnoxUrl;
import com.sandu.ximon.admin.utils.request.CommonHeader;
import com.sandu.ximon.admin.utils.request.PlayerProgram;
import com.sandu.ximon.admin.utils.response.VnnoxResultResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component("VnnoxProgramAPIUtil")
public class VnnoxProgramAPIUtil {
    @Autowired
    private RedisUtils redisUtils;
    public static VnnoxProgramAPIUtil getBean(){
        return (VnnoxProgramAPIUtil) SpringContextUtil.getBean("VnnoxProgramAPIUtil");
    }
    /**
     * æ™®é€šèŠ‚ç›®æ’­æ”¾
     * @param
     * @return
     */
    //public VnnoxResultResponse normalProgram(Map<String,Object> program) {
    public VnnoxResultResponse normalProgram(PlayerProgram program) {
        String result = VnnoxRequestUtil.PostWithHeader(
                VnnoxUrl.getUrl(VnnoxUrl.NORMAL_PROGRAM),
                program.toJson(),
                new CommonHeader(CommonHeader.JSON, true)
        );
        LogUtils.error("节目播放response:"+result);
        return JSON.parseObject(result,VnnoxResultResponse.class);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/Clear.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.sandu.ximon.admin.utils.request;
/**
 * @program: machine-fast
 * @description: æ¸…屏请求body
 * @author: YSS
 * @create: 2019-04-24 14:16
 **/
public class Clear {
    public final String type = "clear";
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/ClearPlayerTask.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
package com.sandu.ximon.admin.utils.request;
/**
 * æ¸…除播放列表
 */
public class ClearPlayerTask {
    public final String type = "clearPlayerTask";
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/ClearVideoPlay.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.sandu.ximon.admin.utils.request;
/**+
 * æ¸…除播放列表
 */
public class ClearVideoPlay {
    public final String type = "clearPlayList";
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/DownloadFileToLocal.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.sandu.ximon.admin.utils.request;
/**
 * @program: machine-fast
 * @description: ä¸Šä¼ æ–‡ä»¶è‡³led开发板
 * @author: YSS
 * @create: 2019-04-24 17:15
 **/
public class DownloadFileToLocal {
    public final String type = "downloadFileToLocal";
    public String url;
    public String path = "/abc/";
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/GetPicture.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.sandu.ximon.admin.utils.request;
/**
 * @description: èŽ·å–å½“å‰led屏幕图像
 **/
public class GetPicture {
    public final String type = "callCardService";
    public final String fn = "screenshot";
    public final int arg1 = 100;
    public final int arg2 = 100;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/GetScreenHeight.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.sandu.ximon.admin.utils.request;
/**
 * @program: machine-fast
 * @description: èŽ·å–led屏高度请求body
 * @author: YSS
 * @create: 2019-04-24 11:40
 **/
public class GetScreenHeight {
    public final String type = "callCardService";
    public final String fn = "getScreenHeight";
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/GetScreenWidth.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.sandu.ximon.admin.utils.request;
/**
 * @program: machine-fast
 * @description: èŽ·å–led屏宽度请求body
 * @author: YSS
 * @create: 2019-04-24 10:41
 **/
public class GetScreenWidth {
    public final String type = "callCardService";
    public final String fn = "getScreenWidth";
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/GetTimeSchedule.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
package com.sandu.ximon.admin.utils.request;
/**
 * @description: æŸ¥è¯¢å®šæ—¶
 **/
public class GetTimeSchedule {
//        "type":"getTimedScreening"
    private String type = "getTimedScreening";
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/IsScreenOpen.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.sandu.ximon.admin.utils.request;
/**
 * @program: machine-fast
 * @description: æŸ¥è¯¢å±å¹•状态请求body
 * @author: YSS
 * @create: 2019-04-25 13:24
 **/
public class IsScreenOpen {
    public final String type = "callCardService";
    public final String fn = "isScreenOpen";
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/PlayerProgram.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.sandu.ximon.admin.utils.request;
import com.sandu.ximon.admin.config.VnnoxConstant;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
 * æ™®é€šèŠ‚ç›®
 */
@Data
public class PlayerProgram implements VnnoxRequest {
    //  éœ€è¦å¤„理的播放器ID集合,最多支持100个播放器同时处理
    private List<String> playerIds;
    //  æ’­æ”¾æ—¶é—´æŽ’期,如果为空,会全天24小时循环播放
    private  Map schedule;
    //  éœ€è¦æ’­æ”¾çš„页面内容集合
    private  List<Map<String,Object>> pages ;
    //  èŠ‚ç›®ä¸‹è½½è¿›åº¦é€šçŸ¥æŽ¥å£ï¼Œä¼šé€šè¿‡æ­¤æŽ¥å£å°†èŠ‚ç›®çš„ä¸‹è½½è¿›åº¦å‘ç»™å®¢æˆ·ï¼ŒæŽ¥å£çš„å“åº”æ—¶é—´ä¸èƒ½è¶…è¿‡3s
    private String noticeUrl;
    @Override
    public String toJson() {
        return VnnoxConstant.GSON.toJson(this);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/PostHtml.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.sandu.ximon.admin.utils.request;
/**
 * @program: machine-fast
 * @description: æäº¤html页面请求bodyç±»
 * @author: YSS
 * @create: 2019-04-24 14:27
 **/
public class PostHtml {
    public final String type="loadUrl";
    public String url;//url:'file:///mnt/sdcard/test.html, //也可以是本地路径
    public final boolean persistent = true ;//持久化,重启会自动加载url
    public PostHtml(String url) {
        this.url = url;
    }
}