package com.sandu.ximon.admin.service;
|
|
import cn.hutool.core.date.DatePattern;
|
import cn.hutool.core.date.DateUtil;
|
import com.alibaba.fastjson.JSON;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.sandu.common.execption.BusinessException;
|
import com.sandu.common.service.impl.BaseServiceImpl;
|
import com.sandu.common.util.SpringContextHolder;
|
import com.sandu.ximon.admin.config.VnnoxConstant;
|
import com.sandu.ximon.admin.dto.PlanDto;
|
import com.sandu.ximon.admin.dto.SchedulesDTO;
|
import com.sandu.ximon.admin.dto.nova.PlayerProgram;
|
import com.sandu.ximon.admin.dto.nova.ProgramDto;
|
import com.sandu.ximon.admin.dto.nova.ProgramPush;
|
import com.sandu.ximon.admin.dto.nova.ProgramSchedule;
|
import com.sandu.ximon.admin.entity.Plans;
|
import com.sandu.ximon.admin.param.PlayPlanParam;
|
import com.sandu.ximon.admin.security.SecurityUtils;
|
import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
|
import com.sandu.ximon.admin.utils.VnnoxAPIUtil;
|
import com.sandu.ximon.admin.utils.VnnoxProgramAPIUtil;
|
import com.sandu.ximon.admin.utils.response.VnnoxResultResponse;
|
import com.sandu.ximon.admin.vo.NovaOpenVO;
|
import com.sandu.ximon.admin.vo.NovaPushResultVO;
|
import com.sandu.ximon.admin.vo.PlansVO;
|
import com.sandu.ximon.dao.domain.*;
|
import com.sandu.ximon.dao.mapper.PlayPlanNvMapper;
|
import lombok.AllArgsConstructor;
|
import org.springframework.stereotype.Service;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* 播放计划
|
*/
|
@Service
|
@AllArgsConstructor
|
public class PlayPlanNvService extends BaseServiceImpl<PlayPlanNvMapper, PlayPlanNv> {
|
|
private final PlayPlanNvMapper playPlanMapper;
|
private final VnnoxProgramAPIUtil vnnoxProgramAPIUtil;
|
private final LedPlayerEntityService ledPlayerEntityService;
|
private VnnoxAPIUtil vnnoxAPIUtil;
|
private final LEDProgramService ledProgramService;
|
private final ClientService clientService;
|
private final LEDProgramFileService fileService;
|
|
public boolean addPlan(PlayPlanParam playPlanParam) {
|
|
PlayPlanNv playPlan = new PlayPlanNv();
|
if (SecurityUtils.getClientId() != null) {
|
playPlan.setUserId(SecurityUtils.getUserId());
|
if (clientService.findClientId()) {
|
playPlan.setClientId(clientService.getClientId());
|
}
|
}
|
playPlan.setName(playPlanParam.getName());
|
playPlan.setLedProgramName(playPlanParam.getLedProgramName());
|
LEDProgram byId = ledProgramService.getById(playPlanParam.getLedProgramId());
|
if (byId == null) {
|
throw new BusinessException("ledProgramId有误,未找到该节目");
|
}
|
playPlan.setLedProgramId(playPlanParam.getLedProgramId());
|
playPlan.setVolume(playPlanParam.getVolume());
|
playPlan.setApplySeries(playPlanParam.getApplySeries());
|
playPlan.setStartDate(playPlanParam.getStartDate());
|
playPlan.setEndDate(playPlanParam.getEndDate());
|
playPlan.setWeekDays(playPlanParam.getWeekDays());
|
|
|
Map schedule = playPlanParam.getSchedule();
|
|
String s = JSON.toJSONString(schedule.get("plans"));
|
List<PlanDto> plans = JSON.parseArray(s, PlanDto.class);
|
System.out.println(plans.toString() + "plans");
|
|
// List<PlanDto> plans = (List<PlanDto>) schedule.get("plans");
|
|
List<SchedulesDTO> schedulesDTOS = new ArrayList<>();
|
for (int i = 0; i < plans.size(); i++) {
|
SchedulesDTO openDto = new SchedulesDTO();
|
|
|
SchedulesDTO closeDto = new SchedulesDTO();
|
|
openDto.setStartDate(schedule.get("startDate").toString());
|
openDto.setEndDate(schedule.get("endDate").toString());
|
openDto.setExecTime(plans.get(i).getStartTime());
|
openDto.setStatus("OPEN");
|
|
/**
|
* 判断时间的先后
|
*/
|
String startTime = openDto.getStartDate() + " " + plans.get(i).getStartTime();
|
String endTime = openDto.getEndDate() + " " + plans.get(i).getEndTime();
|
|
//转换成时间戳
|
long startTimeStamp = DateUtil.parse(startTime, DatePattern.NORM_DATETIME_PATTERN).getTime();
|
long endTimeStamp = DateUtil.parse(endTime, DatePattern.NORM_DATETIME_PATTERN).getTime();
|
if (startTimeStamp > endTimeStamp) {
|
throw new BusinessException("开始时间不能大于结束时间");
|
}
|
|
closeDto.setStartDate(schedule.get("startDate").toString());
|
closeDto.setEndDate(schedule.get("endDate").toString());
|
closeDto.setWeekDays(plans.get(i).getWeekDays());
|
closeDto.setExecTime(plans.get(i).getEndTime());
|
closeDto.setStatus("CLOSE");
|
|
schedulesDTOS.add(closeDto);
|
schedulesDTOS.add(openDto);
|
}
|
|
playPlan.setSchedule(JSON.toJSONString(playPlanParam.getSchedule()));
|
playPlan.setSchedules(JSON.toJSONString(schedulesDTOS));
|
playPlan.setStartTime(playPlanParam.getStartTime());
|
playPlan.setEndTime(playPlanParam.getEndTime());
|
// BeanUtils.copyProperties(playPlanParam, playPlan);
|
|
/**
|
* 诺瓦定时任务/播放计划新增日志记录开始
|
*/
|
boolean save = save(playPlan);
|
String content = "{播放计划:" + playPlan.getId()
|
+ ", 节目名称:" + byId.getName()
|
+ ", 播放计划计划名称:"
|
+ playPlan.getName()
|
+ ", 播放计划计划内容:"
|
+ JSON.toJSONString(playPlan)
|
+ ", 定时任务内容:" + playPlan.getSchedules()
|
+ "}," + " 推送结果:" + save
|
+ " }";
|
if (playPlanParam.getId() == null) {
|
StoreOperationRecordsUtils.storeOperationData(null, null, "诺瓦定时任务/播放计划新增", content);
|
} else {
|
StoreOperationRecordsUtils.storeOperationData(null, null, "诺瓦定时任务/播放计划修改", content);
|
}
|
/**
|
* 诺瓦定时任务/播放计划新增日志记录结束
|
*/
|
|
return save;
|
|
}
|
|
public boolean updatePlan(Long id, PlayPlanParam playPlanParam) {
|
PlayPlanNv byId = getById(id);
|
if (byId == null) {
|
throw new BusinessException("操作对象不存在");
|
}
|
if (removeById(id)) {
|
playPlanParam.setId(id);
|
return addPlan(playPlanParam);
|
}
|
|
return false;
|
|
}
|
|
public boolean deletePlan(List<Long> ids) {
|
for (Long id : ids) {
|
PlayPlanNv byId = getById(id);
|
if (byId == null) {
|
throw new BusinessException("部分操作对象不存在");
|
}
|
}
|
return removeByIds(ids);
|
}
|
|
public Map<String, Object> pushToLed(Long planId, List<NovaPushResultVO> nova) {
|
PushToLed pushToLed = playPlanMapper.pushToLed(planId);
|
PlayPlanNv byId = getById(planId);
|
if (pushToLed == null) {
|
throw new BusinessException("未找到该播放计划");
|
}
|
List<String> playerIds = new ArrayList<>();
|
nova.forEach(n -> {
|
playerIds.add(n.getPlayerId());
|
});
|
|
PlayerProgram program = new PlayerProgram();
|
program.setPlayerIds(playerIds);
|
|
//获取节目实体
|
program.setPages(JSON.parseObject(pushToLed.getPages(), List.class));
|
|
|
//获取节目定时实体
|
program.setSchedule((JSON.parseObject(pushToLed.getSchedule(), Map.class)));
|
Map map = JSON.parseObject(pushToLed.getSchedule(), Map.class);
|
map.get("plans");
|
List<Plans> plans = JSON.parseArray(map.get("plans").toString(), Plans.class);
|
plans.forEach(p -> {
|
//删除后两位字符串
|
p.setStartTime(p.getStartTime().substring(0, p.getStartTime().length() - 3));
|
p.setEndTime(p.getEndTime().substring(0, p.getEndTime().length() - 3));
|
});
|
System.out.println(plans + "plans11111");
|
map.put("plans", plans);
|
program.setSchedule(map);
|
|
program.setNoticeUrl(VnnoxConstant.NOTIFY_URL);
|
VnnoxResultResponse vnnoxResultResponse = vnnoxProgramAPIUtil.normalProgram(program);
|
vnnoxAPIUtil.volChange(playerIds, Integer.valueOf(pushToLed.getVolume()).intValue());
|
|
List<String> success = new ArrayList<>();
|
List<String> fail = new ArrayList<>();
|
if (vnnoxResultResponse.getData() != null) {
|
success = vnnoxResultResponse.getData().getSuccess();
|
fail = vnnoxResultResponse.getData().getFail();
|
}
|
|
//拼接成功失败的结果
|
Map<String, Object> result = new HashMap<>();
|
List<NovaPushResultVO> successList = new ArrayList<>();
|
List<NovaPushResultVO> faileList = new ArrayList<>();
|
List<String> finalSuccess = success;
|
List<String> finalFail = fail;
|
nova.forEach(n -> {
|
if (finalSuccess.contains(n.getPlayerId())) {
|
successList.add(n);
|
} else if (finalFail.contains(n.getPlayerId())) {
|
faileList.add(n);
|
}
|
});
|
|
result.put("success", successList);
|
result.put("fail", faileList);
|
|
/**
|
* 诺瓦推送节目日志记录开始
|
*/
|
List<LedPlayerEntity> list = SpringContextHolder.getBean(LedPlayerEntityService.class)
|
.list(Wrappers.lambdaQuery(LedPlayerEntity.class).in(LedPlayerEntity::getId, nova.stream().map(NovaPushResultVO::getPlayerId).toArray()));
|
List<String> listCode = new ArrayList<>();
|
for (LedPlayerEntity temp : list) {
|
listCode.add(temp.getSn());
|
}
|
|
String content = "{节目ID:" + planId
|
+ ", 节目名称:" + byId.getName()
|
+ "}," + " 推送结果:" + result
|
+ " }";
|
StoreOperationRecordsUtils.storeOperationData(listCode, null, "诺瓦推送播放计划", content);
|
/**
|
* 诺瓦推送节目日志记录结束
|
*/
|
|
return result;
|
}
|
|
|
//推送定时到LED
|
public Map<String, Object> pushSchedule(Long planId, List<NovaPushResultVO> nova) {
|
PlayPlanNv one = getOne(Wrappers.lambdaQuery(PlayPlanNv.class).eq(PlayPlanNv::getId, planId));
|
if (one == null) {
|
throw new BusinessException("未找到节目");
|
}
|
List<SchedulesDTO> schedulesDTOS = JSON.parseArray(one.getSchedules(), SchedulesDTO.class);
|
ProgramSchedule programSchedule = new ProgramSchedule();
|
programSchedule.setSchedules(schedulesDTOS);
|
List<String> playerIds = new ArrayList<>();
|
nova.forEach(
|
n -> {
|
playerIds.add(n.getPlayerId());
|
}
|
);
|
//设置
|
programSchedule.setPlayerIds(playerIds);
|
VnnoxResultResponse vnnoxResultResponse = vnnoxProgramAPIUtil.timeProgram(programSchedule);
|
List<String> success = new ArrayList<>();
|
List<String> fail = new ArrayList<>();
|
if (vnnoxResultResponse.getData() != null) {
|
success = vnnoxResultResponse.getData().getSuccess();
|
fail = vnnoxResultResponse.getData().getFail();
|
}
|
|
//拼接成功失败的结果
|
Map<String, Object> result = new HashMap<>();
|
List<NovaPushResultVO> successList = new ArrayList<>();
|
List<NovaPushResultVO> faileList = new ArrayList<>();
|
List<String> finalSuccess = success;
|
List<String> finalFail = fail;
|
nova.forEach(
|
n -> {
|
if (finalSuccess.contains(n.getPlayerId())) {
|
successList.add(n);
|
} else if (finalFail.contains(n.getPlayerId())) {
|
faileList.add(n);
|
}
|
}
|
|
);
|
|
result.put("success", successList);
|
result.put("fail", faileList);
|
|
/**
|
* 诺瓦推送定时日志记录开始
|
*/
|
List<LedPlayerEntity> list = SpringContextHolder.getBean(LedPlayerEntityService.class)
|
.list(Wrappers.lambdaQuery(LedPlayerEntity.class).in(LedPlayerEntity::getId, nova.stream().map(NovaPushResultVO::getPlayerId).toArray()));
|
List<String> listCode = new ArrayList<>();
|
for (LedPlayerEntity temp : list) {
|
listCode.add(temp.getSn());
|
}
|
|
String content = "{节目ID:" + one.getId()
|
+ ", 节目名称:" + one.getName()
|
+ "}," + " 推送结果:" + result
|
+ " }";
|
StoreOperationRecordsUtils.storeOperationData(listCode, null, "诺瓦推送定时开关屏", content);
|
/**
|
* 诺瓦推送定时日志记录结束
|
*/
|
return result;
|
}
|
|
/**
|
* 解析定时
|
*
|
* @param
|
* @return
|
*/
|
public List<Map<String, Object>> parseSchedule(Map map) {
|
map.get("startDate");
|
map.get("endDate");
|
List<PlansVO> plans = (List<PlansVO>) map.get("plans");
|
|
|
plans.forEach(
|
plan -> {
|
NovaOpenVO Open = new NovaOpenVO();
|
Open.setStartDate(map.get("startDate").toString());
|
Open.setEndDate(map.get("endDate").toString());
|
Open.setExecTime(plan.getStartTime());
|
}
|
);
|
NovaOpenVO Open1 = new NovaOpenVO();
|
Open1.setStartDate(map.get("startDate").toString());
|
Open1.setEndDate(map.get("endDate").toString());
|
|
|
return null;
|
}
|
|
/**
|
* 获取播放计划
|
*
|
* @param planId
|
* @return
|
*/
|
public Object getByPlanId(Long planId) {
|
PlayPlanNv byId = getById(planId);
|
if (byId == null) {
|
throw new BusinessException("找不到该计划");
|
}
|
LEDProgram byId1 = ledProgramService.getById(byId.getLedProgramId());
|
if (byId1 == null) {
|
throw new BusinessException("找不到该节目");
|
}
|
List schedule = JSON.parseObject(byId.getSchedules(), List.class);
|
Map schedules = JSON.parseObject(byId.getSchedule(), Map.class);
|
List pages = JSON.parseObject(byId1.getPages(), List.class);
|
Map plan = new HashMap();
|
plan.put("planId", byId.getId());
|
plan.put("planName", byId.getName());
|
plan.put("programId", byId1.getId());
|
plan.put("programName", byId1.getName());
|
plan.put("planVolume", byId.getVolume());
|
plan.put("preview", byId1.getPreview());
|
plan.put("pages", pages);
|
plan.put("schedule", schedule);
|
plan.put("schedules", schedules);
|
return plan;
|
}
|
|
|
/**
|
* 推送实时节目
|
*
|
* @param pid
|
* @param nova
|
* @return
|
*/
|
public Map<String, Object> pushProgram(Long pid, List<NovaPushResultVO> nova) {
|
LEDProgram ledProgram = ledProgramService.getById(pid);
|
if (ledProgram == null) {
|
throw new BusinessException("未找到节目");
|
}
|
String pages = ledProgram.getPages();
|
List<String> playerIds = new ArrayList<>();
|
nova.forEach(n -> {
|
playerIds.add(n.getPlayerId());
|
});
|
|
ProgramPush program = new ProgramPush();
|
List<ProgramDto> programDtos = JSON.parseArray(pages, ProgramDto.class);
|
programDtos.forEach(
|
programDto -> {
|
programDto.getWidgets().forEach(
|
widget -> {
|
String url = widget.getUrl();
|
LEDProgramFile one = fileService.getOne(Wrappers.lambdaQuery(LEDProgramFile.class).eq(LEDProgramFile::getFileUrl, url));
|
if (one == null) {
|
throw new BusinessException("节目文件已失效");
|
}
|
widget.setMd5(one.getMd5());
|
widget.setSize(one.getSize());
|
}
|
);
|
}
|
);
|
|
program.setPlayerIds(playerIds);
|
//获取节目实体
|
program.setPages(programDtos);
|
|
program.setNoticeUrl(VnnoxConstant.NOTIFY_URL);
|
VnnoxResultResponse vnnoxResultResponse = vnnoxProgramAPIUtil.pushProgram(program);
|
|
List<String> success = new ArrayList<>();
|
List<String> fail = new ArrayList<>();
|
if (vnnoxResultResponse.getData() != null) {
|
success = vnnoxResultResponse.getData().getSuccess();
|
fail = vnnoxResultResponse.getData().getFail();
|
}
|
|
//拼接成功失败的结果
|
Map<String, Object> result = new HashMap<>();
|
List<NovaPushResultVO> successList = new ArrayList<>();
|
List<NovaPushResultVO> faileList = new ArrayList<>();
|
List<String> finalSuccess = success;
|
List<String> finalFail = fail;
|
nova.forEach(n -> {
|
if (finalSuccess.contains(n.getPlayerId())) {
|
successList.add(n);
|
} else if (finalFail.contains(n.getPlayerId())) {
|
faileList.add(n);
|
}
|
});
|
|
result.put("success", successList);
|
result.put("fail", faileList);
|
|
/**
|
* 诺瓦推送节目日志记录开始
|
*/
|
List<LedPlayerEntity> list = SpringContextHolder.getBean(LedPlayerEntityService.class)
|
.list(Wrappers.lambdaQuery(LedPlayerEntity.class).in(LedPlayerEntity::getId, nova.stream().map(NovaPushResultVO::getPlayerId).toArray()));
|
List<String> listCode = new ArrayList<>();
|
for (LedPlayerEntity temp : list) {
|
listCode.add(temp.getSn());
|
}
|
|
String content = "{节目ID:" + pid
|
+ ", 节目名称:" + ledProgram.getName()
|
+ "}," + " 推送结果:" + result
|
+ " }";
|
StoreOperationRecordsUtils.storeOperationData(listCode, null, "诺瓦推送节目", content);
|
/**
|
* 诺瓦推送节目日志记录结束
|
*/
|
|
return result;
|
}
|
|
}
|