2021与蓝度共同重构项目,服务端
liuhaonan
2022-09-08 39f6f31b5b5c6f646b60cf344c1300bb72c59147
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleLightemitService.java
@@ -1,711 +1,567 @@
//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);
package com.sandu.ximon.admin.service;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.file.FileUploadDto;
import com.sandu.common.service.impl.BaseServiceImpl;
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.*;
import com.sandu.ximon.admin.vo.EquipmentInfomation;
import com.sandu.ximon.dao.domain.LedSFile;
import com.sandu.ximon.dao.domain.Pole;
import com.sandu.ximon.dao.domain.PoleLightemitEntity;
import com.sandu.ximon.dao.domain.PoleXixunPlayerEntity;
import com.sandu.ximon.dao.enums.OrderByEnums;
import com.sandu.ximon.dao.enums.PoleBindingEnums;
import com.sandu.ximon.dao.mapper.PoleLightemitEntityMapper;
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<PoleLightemitEntityMapper, PoleLightemitEntity> {
    @Autowired
    private PoleBindingService poleBindingService;
    LightemitUtils lightemitUtils;
    @Autowired
    private RealtimeServerBean realtimeServerBean;
    @Value("${server.port}")
    private String port;
    @Autowired
    ApplicationContext applicationContext;
    @Autowired
    PoleLightemitEntityMapper poleLightemitDao;
    @Autowired
    LedSFileService xiXunFileService;
    @PostConstruct
    public void init() {
        //重新获取单例
        lightemitUtils = applicationContext.getBean(LightemitUtils.class);
    }
    /**
     * 熙讯list
     *
     * @param keyword
     * @param isOnLine
     * @return
     */
    public List<PoleLightemitEntity> listLed(String keyword, Integer order, Integer seq, boolean isOnLine) {
        List<PoleLightemitEntity> poleLightemitEntityList;
        //排序字段
        String orderByResult = "id";
        //正序、倒叙
        String orderBySeq = OrderByEnums.ASC.getCode();
        if (order != null) {
            switch (order) {
                case 1:
                    orderByResult = OrderByEnums.LED_S_CODE.getCode();
                    break;
                case 2:
                    orderByResult = OrderByEnums.LED_S_NAME.getCode();
                    break;
                case 3:
                    orderByResult = OrderByEnums.LED_S_POLE_NAME.getCode();
                    break;
                case 4:
                    orderByResult = OrderByEnums.LED_S_CREATE_TIME.getCode();
                    break;
                default:
            }
        }
        if (seq != null) {
            switch (seq) {
                case 1:
                    orderBySeq = " ASC";
                    break;
                case 2:
                    orderBySeq = " DESC";
                    break;
                default:
                    break;
            }
        }
        //排序方式
        String orderBy = orderByResult + " " + orderBySeq;
        //超管
        if (SecurityUtils.getClientId() == null) {
            poleLightemitEntityList = poleLightemitDao.listLed(keyword, null, orderBy);
        } else {
            poleLightemitEntityList = poleLightemitDao.listLed(keyword, SecurityUtils.getUserId(), orderBy);
        }
        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;
    }
    /**
     * 熙讯设备列表(用于首页数据统计)
     *
     * @return
     */
    public List<PoleLightemitEntity> listLedOnHome() {
        List<PoleLightemitEntity> poleLightemitEntityList;
        //超管
        if (SecurityUtils.getClientId() == null) {
            poleLightemitEntityList = poleLightemitDao.listLed(null, null, null);
        } else {
            poleLightemitEntityList = poleLightemitDao.listLed(null, SecurityUtils.getUserId(), null);
        }
        return poleLightemitEntityList;
    }
    /**
     * 绑定使用
     *
     * @param keyword
     * @return
     */
    public List<PoleLightemitEntity> listLedOnBinding(String keyword) {
        List<PoleLightemitEntity> poleLightemitEntityList;
        //超管
        if (SecurityUtils.getClientId() == null) {
            poleLightemitEntityList = poleLightemitDao.listLedOnBinding(keyword, null);
        } else {
            poleLightemitEntityList = poleLightemitDao.listLedOnBinding(keyword, SecurityUtils.getUserId());
        }
        for (PoleLightemitEntity poleLightemitEntity : poleLightemitEntityList) {
            //查询设备在线状态
            boolean onLine = lightemitUtils.getLedOnLine(poleLightemitEntity.getLightemitControlCode());
            //查询屏幕的开启状态
            String isOpen = lightemitUtils.getIsScreenOpen(poleLightemitEntity.getLightemitControlCode());
            poleLightemitEntity.setIsOpen(String.valueOf(isOpen));
            poleLightemitEntity.setOnLine(onLine);
        }
        return poleLightemitEntityList;
    }
    /**
     * 取出在线的熙讯
     *
     * @param list
     * @return
     */
    public List<PoleLightemitEntity> ledOnline(List<PoleLightemitEntity> list) {
        List<PoleLightemitEntity> onLineList = new ArrayList<>();
        for (PoleLightemitEntity poleLightemitEntity : list) {
//            if(lightemitUtils.getIsScreenOpen(poleLightemitEntity.getLightemitControlCode()).contains("true")){
//                poleLightemitEntity.setIsOpen(lightemitUtils.getIsScreenOpen(poleLightemitEntity.getLightemitControlCode()).contains("true"));
//            }
//
//        }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);
//    }
//}
            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()));
            poleLightemitEntity.setOnLine(lightemitUtils.getLedOnLine(poleLightemitEntity.getLightemitControlCode()));
        }
    }
    /**
     * 查询单个LED
     *
     * @param lightControlCode
     * @return
     */
    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;
        }
        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));
        boolean isScreenOpen = false;
        if (xiXun != null) {
            equipmentInfo.setEquipmentCreateTime(xiXun.getCreateTime());
            equipmentInfo.setEquipmentMac(xiXun.getLightemitControlCode());
            equipmentInfo.setEquipmentName(xiXun.getLightemitName());
            isScreenOpen = lightemitUtils.getLedOnLine(xiXun.getLightemitControlCode());
        }
        if (isScreenOpen) {
            equipmentInfo.setEquipmentState("在线");
        } else {
            equipmentInfo.setEquipmentState("离线");
        }
        return equipmentInfo;
    }
    public void savePoleLightemit(PoleLightemitEntity poleLightemit) {
        boolean save = this.save(poleLightemit);
        // 绑定灯杆
        if (save && poleLightemit.getStreetlightId() != null) {
            PoleBindingParam poleBindingParam = new PoleBindingParam();
            poleBindingParam.setDeviceCode(poleLightemit.getLightemitControlCode());
            poleBindingParam.setDeviceType(1);
            poleBindingParam.setDeviceName(poleLightemit.getLightemitName());
            poleBindingService.bindPole(poleLightemit.getStreetlightId(), 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 void updatePoleLightemit(Long ledId, PoleLightemitEntity poleLightemit) {
        PoleLightemitEntity byId = getById(ledId);
        if (byId == null) {
            throw new BusinessException("未找到LED屏");
        }
        if (SecurityUtils.getClientId() != null) {
            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) {
            //先删除绑定关系
            poleBindingService.unBindPole(null, poleLightemit.getLightemitControlCode());
            //再绑定
            PoleBindingParam poleBindingParam = new PoleBindingParam();
            poleBindingParam.setDeviceCode(poleLightemit.getLightemitControlCode());
            poleBindingParam.setDeviceType(10);
            poleBindingParam.setDeviceName(poleLightemit.getLightemitName());
            poleBindingService.bindPole(poleLightemit.getStreetlightId(), poleBindingParam);
        }
        /**
         * 熙汛led编辑日志记录开始
         */
        List<String> listCode = new ArrayList<>();
        listCode.add(byId.getLightemitControlCode());
        String content = "{屏幕id:" + byId.getLightemitId() + ", 屏幕原名:" + byId.getLightemitName() + ", 屏幕名称:" + poleLightemit.getLightemitName() + ", 屏幕编码:" + byId.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());
    }
    /**
     * led上传图片
     *
     * @param lightemitControlCode
     * @param path
     * @param filenameList
     * @param userName
     * @throws IOException
     */
    @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上传视频
     *
     * @param lightemitControlCode
     */
    @Async("taskExecutor")
    public String videoUpload(String lightemitControlCode, FileUploadDto fileUploadDto, Integer type) {
        //获取屏幕宽
        String screenWidth = lightemitUtils.getScreenWidth(lightemitControlCode);
        String screenHeight = lightemitUtils.getScreenHeight(lightemitControlCode);
        //发送视频至开发板并播放
        String fileUrl = fileUploadDto.getFileUrl();
        String[] split = fileUrl.split("/");
        String id = split[split.length - 1];
        String result = this.videoXixunPlayer(lightemitControlCode, id, fileUploadDto.getFileSize(), fileUploadDto.getMd5(), type, fileUploadDto.getFileType(), 999999);
        LogUtils.error("上传播放结果:" + result);
        return result;
    }
    @Async("taskExecutor")
    public String videoXixunPlayer(String lightemitControlCode, String filename, Long filesize, String md5, Integer type, String fileType, 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();
        //所有_id都可用UUID随机生成
        source.set_id(UUID.randomUUID().toString());
        //请求头拼接该ID为该资源的完整下载地址
        source.setId(filename);
        if (type == 1) {
            //设置资源类型,其他资源类型请参考xixunplayer节目json说明文档
            source.set_type("Video");
            source.setMime("video/mp4");
        } else {
            source.set_type("Image");
            source.setMime("image/jpeg");
        }
        //资源后缀名
        source.setFileExt(fileType);
        //资源高度
        source.setHeight(screenHeight);
        //资源宽度
        source.setWidth(screenWidth);
        //距左
        source.setLeft(0);
        source.setMd5(md5);
        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("文件上传播放");    //节目名称
        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("");
        //资源下载链接的请求头
        command.setPreDownloadURL("https://ximonsmart.oss-cn-shanghai.aliyuncs.com/");
        command.setTask(task);
        xixun.set_id(UUID.randomUUID().toString());
        xixun.setCommand(command);
        xixun.setType("commandXixunPlayer");    //命令固定类型,不可更改
        String jsondata = new Gson().toJson(xixun);
        String clearResult = lightemitUtils.clear(lightemitControlCode);
        if (clearResult.contains("does not exist")) {
            return "推送失败";
        } else {
            poleLightemitDao.updateRequestBody(lightemitControlCode, jsondata);
            String post = lightemitUtils.post(realtimeServerBean.getCommand() + lightemitControlCode, jsondata);
            LogUtils.error("结果:" + post);
            //{"_type":"success","_id":"ce8dc3ff-dc88-43b7-8f55-60abd8700f1a","timestamp":1653555160535}
            if (post.startsWith("{") && post.endsWith("}") && post.contains("_type\":\"success")) {
                return "推送成功";
            } else {
                return "推送失败";
            }
        }
    }
    /**
     * 更新请求数据
     *
     * @param ledCode
     * @param postBody
     */
    public void updateRequestBody(String ledCode, String postBody) {
        baseMapper.updateRequestBody(ledCode, postBody);
    }
    /**
     * 根据led屏编码设置音量
     *
     * @param lightemitControlCode
     * @param volume
     */
    @Async("taskExecutor")
    public void setVolume(String lightemitControlCode, Integer volume) {
        lightemitUtils.setVoiume(lightemitControlCode, volume);
    }
    /**
     * 根据led屏编码设置亮度
     *
     * @param lightemitControlCode
     * @param brightness
     */
    @Async("taskExecutor")
    public void setBrightness(String lightemitControlCode, Integer brightness) {
        lightemitUtils.setBrightness(lightemitControlCode, brightness);
    }
    public Object getProgram(Long lightemitId) {
        PoleLightemitEntity xiXun = getById(lightemitId);
        String requestBody = xiXun.getRequestBody();
        Map map = JSON.parseObject(requestBody, Map.class);
        ProgramPro pro;
        return map;
    }
}