package com.sandu.ximon.admin.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.service.impl.BaseServiceImpl; import com.sandu.ximon.admin.config.RealtimeServerBean; import com.sandu.ximon.admin.config.XiXunConfig; import com.sandu.ximon.admin.entity.*; import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereHeartbeatReportInnerFrame; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.admin.utils.JsonUtil; import com.sandu.ximon.admin.utils.LightemitUtils; import com.sandu.ximon.admin.utils.LogUtils; import com.sandu.ximon.admin.utils.request.SubTitleSet; 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.mapper.PoleXixunPlayerEntityMapper; import lombok.AllArgsConstructor; import org.apache.commons.lang.StringUtils; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.util.*; /** * 熙讯节目 */ @Service @AllArgsConstructor public class XiXunPlayerService extends BaseServiceImpl { private final PoleXixunPlayerEntityMapper poleXixunPlayerEntityMapper; private final XiXunConfig config; private final LightemitUtils lightemitUtils; private final RealtimeServerBean realtimeServerBean; private final PoleLightemitService poleLightemitService; private final ClientService clientService; private final LedSFileService xiXunFileService; //熙讯节目列表 public LambdaQueryWrapper XixunPlayerList(String keyword) { if (SecurityUtils.getClientId() == null) { if (keyword != null && keyword.isEmpty()) { return Wrappers.lambdaQuery(PoleXixunPlayerEntity.class); } else { return Wrappers.lambdaQuery(PoleXixunPlayerEntity.class).like(PoleXixunPlayerEntity::getProgramName, keyword); } } else { if (keyword != null && keyword.isEmpty()) { return Wrappers.lambdaQuery(PoleXixunPlayerEntity.class).eq(PoleXixunPlayerEntity::getCreateUserId, SecurityUtils.getUserId()) .or(w -> { w.eq(PoleXixunPlayerEntity::getClientId, SecurityUtils.getClientId()); }); } else { return Wrappers.lambdaQuery(PoleXixunPlayerEntity.class).eq(PoleXixunPlayerEntity::getCreateUserId, SecurityUtils.getUserId()) .or(w -> { w.eq(PoleXixunPlayerEntity::getClientId, SecurityUtils.getClientId()); }).like(PoleXixunPlayerEntity::getProgramName, keyword); } } } public boolean insert(ProgramPro programPro) { String json = JsonUtil.jsonObj2Sting(programPro); PoleXixunPlayerEntity poleXixunPlayer = new PoleXixunPlayerEntity(); poleXixunPlayer.setProgramCode(programPro.get_id()); poleXixunPlayer.setProgramName(programPro.getName()); poleXixunPlayer.setHeight(programPro.getHeight()); poleXixunPlayer.setWidth(programPro.getWidth()); poleXixunPlayer.setTotalSize((float) programPro.getTotalSize() / 1000000 + "MB"); // poleXixunPlayer.setTotalSize( Long.parseLong(programPro.getTotalSize()) / 1000000 + "MB"); // programPro.setProgramId(poleXixunPlayer.getProgramId()); // System.out.println(poleXixunPlayer.getProgramId()); poleXixunPlayer.setRequestBody(json); poleXixunPlayer.setScreenShot(programPro.getScreenShot()); // poleXixunPlayer.setCreatTime(sdf.format(date)); poleXixunPlayer.setCreateUserId(SecurityUtils.getUserId()); if (SecurityUtils.getClientId() != null) { poleXixunPlayer.setCreateUserId(SecurityUtils.getUserId()); if (clientService.findClientId()) { poleXixunPlayer.setClientId(clientService.getClientId()); } } return this.save(poleXixunPlayer); } public boolean deleteProgram(Long pid) { PoleXixunPlayerEntity byId = getById(pid); if (byId == null) { throw new BusinessException("未找到该节目"); } return removeById(pid); } public Object getByPid(Long pid) { PoleXixunPlayerEntity byId = getById(pid); List fileIds = new ArrayList<>(); List file = new ArrayList<>(); if (byId == null) { throw new BusinessException("未找到该节目"); } String json = byId.getRequestBody(); ProgramPro programPro = new ProgramPro(); try { programPro = JsonUtil.convertJsonStringToObject(json, ProgramPro.class); programPro.setProgramId(pid); programPro.setScreenShot(byId.getScreenShot()); programPro.getLayers().forEach( layerPro -> { layerPro.getSources().forEach( sourcePro -> { long fileId = Long.parseLong(sourcePro.getId()); file.add(xiXunFileService.getById(fileId)); } ); } ); programPro.setFileList(file); } catch (Exception e) { e.printStackTrace(); } return programPro; } // public Object getProgram(String json) { //// PoleXixunPlayerEntity byId = getById(pid); // List fileIds = new ArrayList<>(); // List file = new ArrayList<>(); // if (json == null) { // throw new BusinessException("未找到该节目"); // } // ProgramPro programPro = new ProgramPro(); // try { // programPro = JsonUtil.convertJsonStringToObject(json, ProgramPro.class); // programPro.setProgramId(pid); // programPro.setScreenShot(byId.getScreenShot()); // programPro.getLayers().forEach( // layerPro -> { // layerPro.getSources().forEach( // sourcePro -> { // long fileId = Long.parseLong(sourcePro.getId()); // file.add(xiXunFileService.getById(fileId)); // } // ); // } // ); // programPro.setFileList(file); // } catch (Exception e) { // e.printStackTrace(); // } // return programPro; // } /** * 推送节目 * * @param programId * @param lightemitIds */ public void videoXixunPlayer(long programId, List lightemitIds) { ProgramPro pro = new ProgramPro(); ItemPro items = new ItemPro(); TaskPro taskPro = new TaskPro(); CommandPro command = new CommandPro(); XixunPlayerPro xixun = new XixunPlayerPro(); PoleXixunPlayerEntity poleXixunPlayerEntity = new PoleXixunPlayerEntity(); items.set_id(UUID.randomUUID().toString()); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("program_id", programId); poleXixunPlayerEntity = this.getOne(queryWrapper); String json = poleXixunPlayerEntity.getRequestBody(); // System.out.println( JSON.parseArray(json, ProgramPro.class)); try { pro = JsonUtil.convertJsonStringToObject(json, ProgramPro.class); } catch (Exception e) { e.printStackTrace(); } items.set_program(pro); items.setRepeatTimes(1); items.setSchedulePros(null);//定时段,不做定时可为null taskPro.set_id(UUID.randomUUID().toString()); taskPro.setName(poleXixunPlayerEntity.getProgramName()); List list2 = new ArrayList<>(); list2.add(items); taskPro.setItems(list2); command.setId(UUID.randomUUID().toString()); //这里是下方的post回调地址,需要修改IP地址 command.setNotificationURL("http://" + config.getIp() + ":" + config.getPort() + "/machine-fast/serv/download/getJSON"); //资源下载链接的请求头 command.setPreDownloadURL("http://" + config.getIp() + ":" + config.getPort() + "/machine-fast/serv/download/downliadFileById/"); command.setTask(taskPro); xixun.set_id(UUID.randomUUID().toString()); xixun.setCommand(command); xixun.setType("commandXixunPlayer"); //命令固定类型,不可更改 Gson gson = new GsonBuilder().disableHtmlEscaping().create(); // String jsondata = JSON.toJSONString(xixun); String jsondata = gson.toJson(xixun); Collection poleLightemitEntities = poleLightemitService.listByIds(lightemitIds); if (poleLightemitEntities != null) { for (PoleLightemitEntity entity : poleLightemitEntities) { lightemitUtils.clear(entity.getLightemitControlCode()); poleLightemitService.updateRequestBody(entity.getLightemitControlCode(), jsondata); String post = lightemitUtils.post(realtimeServerBean.getCommand() + entity.getLightemitControlCode(), jsondata); LogUtils.error("结果:" + post); } } } /** * 推送大气数据到熙讯LED */ @Async("taskExecutor") public Boolean pushWeather(String lightemitControlCode, A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage sensorEntity, Pole streetlightEntity) { if (StringUtils.isBlank(lightemitControlCode)) { return Boolean.valueOf(false); } Integer screenHeight = Integer.parseInt(lightemitUtils.getScreenHeight(lightemitControlCode)); String size = String.valueOf(screenHeight / 18); //字幕主体拼接 String body = "" + "

" + (streetlightEntity == null || streetlightEntity.getCity() == null ? "" : streetlightEntity.getCity().replace("市", "")) + "
" + "温度:" + (sensorEntity == null || sensorEntity.getTemperature() == null ? " -" : sensorEntity.getTemperature()) + "℃
" + "湿度:" + (sensorEntity == null || sensorEntity.getHumidity() == null ? "-" : sensorEntity.getHumidity()) + "%RH
" + "亮度:" + (sensorEntity == null || sensorEntity.getLightIntensity() == null ? "-" : sensorEntity.getLightIntensity()) + "lux
" + "风速:" + (sensorEntity == null || sensorEntity.getWindSpeed() == null ? "-" : sensorEntity.getWindSpeed()) + "m/s
" + "CO2:" + (sensorEntity == null || sensorEntity.getCo2() == null ? "-" : sensorEntity.getCo2()) + "ppm
" + "甲醛:" + (sensorEntity == null || sensorEntity.getEch2o() == null ? "-" : sensorEntity.getEch2o()) + "mg/m³
" + "TVOC:" + (sensorEntity == null || sensorEntity.getTvoc() == null ? "-" : sensorEntity.getTvoc()) + "mg/m³
" + "PM25:" + (sensorEntity == null || sensorEntity.getPm25() == null ? "-" : sensorEntity.getPm25()) + "mg/m³
" + "PM10:" + (sensorEntity == null || sensorEntity.getPm10() == null ? "-" : sensorEntity.getPm10()) + "mg/m³
"; //组装请求参数 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); } } }