2021与蓝度共同重构项目,服务端
liuhaonan
2022-09-08 521e71bc33f02ab9a1b79fb1df68c69bad4a75d2
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleLightemitService.java
@@ -1,19 +1,22 @@
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.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.FileUtil;
import com.sandu.ximon.admin.utils.HtmlTemplateUtils;
import com.sandu.ximon.admin.utils.LightemitUtils;
import com.sandu.ximon.admin.utils.*;
import com.sandu.ximon.admin.vo.EquipmentInfomation;
import com.sandu.ximon.dao.domain.Pole;
import com.sandu.ximon.dao.domain.PoleLightemitEntity;
import com.sandu.ximon.dao.enums.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;
@@ -48,6 +51,9 @@
    @Autowired
    PoleLightemitEntityMapper poleLightemitDao;
    @Autowired
    LedSFileService xiXunFileService;
    @PostConstruct
    public void init() {
        //重新获取单例
@@ -61,20 +67,110 @@
     * @param isOnLine
     * @return
     */
    public List<PoleLightemitEntity> listLed(String keyword, boolean isOnLine) {
    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(keyword, null);
            poleLightemitEntityList = poleLightemitDao.listLed(null, null, null);
        } else {
            poleLightemitEntityList = poleLightemitDao.listLed(keyword, SecurityUtils.getUserId());
            poleLightemitEntityList = poleLightemitDao.listLed(null, SecurityUtils.getUserId(), null);
        }
        if (isOnLine) {
            return ledOnline(poleLightemitEntityList);
        return poleLightemitEntityList;
    }
    /**
     * 绑定使用
     *
     * @param keyword
     * @return
     */
    public List<PoleLightemitEntity> listLedOnBinding(String keyword) {
        List<PoleLightemitEntity> poleLightemitEntityList;
        //超管
        if (SecurityUtils.getClientId() == null) {
            poleLightemitEntityList = poleLightemitDao.listLedOnBinding(keyword, null);
        } else {
            ledOnlineCheck(poleLightemitEntityList);
            return poleLightemitEntityList;
            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;
    }
    /**
@@ -148,11 +244,13 @@
        }
        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());
        }
        boolean isScreenOpen = lightemitUtils.getLedOnLine(xiXun.getLightemitControlCode());
        if (isScreenOpen) {
            equipmentInfo.setEquipmentState("在线");
        } else {
@@ -167,13 +265,24 @@
        boolean save = this.save(poleLightemit);
        // 绑定灯杆
        if (save && poleLightemit.getPoleId() != null) {
        if (save && poleLightemit.getStreetlightId() != null) {
            PoleBindingParam poleBindingParam = new PoleBindingParam();
            poleBindingParam.setDeviceCode(poleLightemit.getLightemitControlCode());
            poleBindingParam.setDeviceType(1);
            poleBindingParam.setDeviceName(poleLightemit.getLightemitName());
            poleBindingService.bindPole(poleLightemit.getPoleId(), poleBindingParam);
            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());
    }
@@ -183,11 +292,18 @@
        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.getPoleId() != null) {
        if (b && poleLightemit.getStreetlightId() != null) {
            //先删除绑定关系
            poleBindingService.unBindPole(null, poleLightemit.getLightemitControlCode());
            //再绑定
@@ -195,26 +311,56 @@
            poleBindingParam.setDeviceCode(poleLightemit.getLightemitControlCode());
            poleBindingParam.setDeviceType(10);
            poleBindingParam.setDeviceName(poleLightemit.getLightemitName());
            poleBindingService.bindPole(poleLightemit.getPoleId(), poleBindingParam);
            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());
    }
@@ -267,28 +413,26 @@
     * led上传视频
     *
     * @param lightemitControlCode
     * @param filename
     * @param path
     * @param userName
     * @throws IOException
     */
    @Async("taskExecutor")
    public void videoUpload(String lightemitControlCode, String filename, String path, String userName) throws IOException {
    public String videoUpload(String lightemitControlCode, FileUploadDto fileUploadDto, Integer type) {
        //获取屏幕宽
        String screenWidth = lightemitUtils.getScreenWidth(lightemitControlCode);
        String screenHeight = lightemitUtils.getScreenHeight(lightemitControlCode);
        //发送视频至开发板并播放
        lightemitUtils.postVideo(screenWidth, screenHeight, filename, 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);
        //清屏
        lightemitUtils.clear(lightemitControlCode);
        LogUtils.error("上传播放结果:" + result);
        return result;
    }
    @Async("taskExecutor")
    public void videoXixunPlayer(String lightemitControlCode, String ip, String filename, Long filesize, Integer videoTime) {
    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));
@@ -303,18 +447,23 @@
        source.set_id(UUID.randomUUID().toString());
        //请求头拼接该ID为该资源的完整下载地址
        source.setId(filename);
        //设置资源类型,其他资源类型请参考xixunplayer节目json说明文档
        source.set_type("Video");
        if (type == 1) {
            //设置资源类型,其他资源类型请参考xixunplayer节目json说明文档
            source.set_type("Video");
            source.setMime("video/mp4");
        } else {
            source.set_type("Image");
            source.setMime("image/jpeg");
        }
        //资源后缀名
        source.setFileExt(".mp4");
        source.setFileExt(fileType);
        //资源高度
        source.setHeight(screenHeight);
        //资源宽度
        source.setWidth(screenWidth);
        //距左
        source.setLeft(0);
        source.setMd5("dd135d5d2d44d619a542db773ab529a4");
        source.setMime("video/mp4");
        source.setMd5(md5);
        source.setName(filename);
        source.setPlayTime(0);    //播放起始时间
        source.setSize(filesize);    //资源字节数,要精准
@@ -328,7 +477,7 @@
        List<Layer> list1 = new ArrayList<Layer>();
        list1.add(layer);
        pro.setLayers(list1);
        pro.setName("demo");    //节目名称
        pro.setName("文件上传播放");    //节目名称
        pro.setOthers(true);//如果为true,则该节目来自第三方接口,不是来自我们自己的web,二次开发请务必赋值为true
        pro.setTotalSize(filesize);    //所有资源总字节数
        pro.setVersion(0);            //高级节目=0,简易节目=2
@@ -344,17 +493,29 @@
        task.setItems(list2);
        command.setId(UUID.randomUUID().toString());
        //这里是下方的post回调地址,需要修改IP地址
        command.setNotificationURL("http://" + ip + ":" + port + "/machine-fast/serv/download/getJSON");
        command.setNotificationURL("");
        //资源下载链接的请求头
        command.setPreDownloadURL("http://" + ip + ":" + port + "/machine-fast/serv/download/downloadFile/");
        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);
        lightemitUtils.clear(lightemitControlCode);
        poleLightemitDao.updateRequestBody(lightemitControlCode, jsondata);
        lightemitUtils.post(realtimeServerBean.getCommand() + lightemitControlCode, jsondata);
        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 "推送失败";
            }
        }
    }
    /**
@@ -366,16 +527,6 @@
    public void updateRequestBody(String ledCode, String postBody) {
        baseMapper.updateRequestBody(ledCode, postBody);
    }
//    /**
//     * 根据led屏编码获取灯杆所有信息
//     *
//     * @param ledCode
//     * @return
//     */
//    public PoleStreetlightEntity getStreetlightByLedCode(String ledCode) {
//        return baseMapper.getStreetlightByLedCode(ledCode);
//    }
    /**
@@ -400,4 +551,15 @@
        lightemitUtils.setBrightness(lightemitControlCode, brightness);
    }
    public Object getProgram(Long lightemitId) {
        PoleLightemitEntity xiXun = getById(lightemitId);
        String requestBody = xiXun.getRequestBody();
        if (requestBody == null || requestBody.isEmpty()) {
            throw new BusinessException("未找到节目");
        }
        Map map = JSON.parseObject(requestBody, Map.class);
        return map;
    }
}