| | |
| | | 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; |
| | |
| | | @Autowired |
| | | PoleLightemitEntityMapper poleLightemitDao; |
| | | |
| | | @Autowired |
| | | LedSFileService xiXunFileService; |
| | | |
| | | @PostConstruct |
| | | public void init() { |
| | | //重新获取单例 |
| | |
| | | * @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); |
| | | poleLightemitEntityList = poleLightemitDao.listLed(keyword, null, orderBy); |
| | | } else { |
| | | poleLightemitEntityList = poleLightemitDao.listLed(keyword, SecurityUtils.getUserId()); |
| | | poleLightemitEntityList = poleLightemitDao.listLed(keyword, SecurityUtils.getUserId(), orderBy); |
| | | } |
| | | |
| | | List<PoleLightemitEntity> temp = new ArrayList<>(); |
| | |
| | | } |
| | | } |
| | | 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; |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | 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 { |
| | |
| | | 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()); |
| | | } |
| | | |
| | |
| | | throw new BusinessException("未找到LED屏"); |
| | | } |
| | | |
| | | boolean belong = SpringContextHolder.getBean(PoleBindingService.class).isBelong(byId.getLightemitControlCode(), PoleBindingEnums.XIXUN); |
| | | if (!belong) { |
| | | throw new BusinessException("该设备不属于您,不能修改设备信息"); |
| | | 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()); |
| | | //再绑定 |
| | |
| | | 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()); |
| | | } |
| | |
| | | * 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)); |
| | |
| | | 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); //资源字节数,要精准 |
| | |
| | | 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 |
| | |
| | | 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 "推送失败"; |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | public void updateRequestBody(String ledCode, String postBody) { |
| | | baseMapper.updateRequestBody(ledCode, postBody); |
| | | } |
| | | |
| | | // /** |
| | | // * 根据led屏编码获取灯杆所有信息 |
| | | // * |
| | | // * @param ledCode |
| | | // * @return |
| | | // */ |
| | | // public PoleStreetlightEntity getStreetlightByLedCode(String ledCode) { |
| | | // return baseMapper.getStreetlightByLedCode(ledCode); |
| | | // } |
| | | |
| | | |
| | | /** |
| | |
| | | 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; |
| | | } |
| | | } |