package com.sandu.ximon.admin.service;
|
|
import com.alibaba.fastjson.JSON;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.github.pagehelper.PageHelper;
|
import com.sandu.common.execption.BusinessException;
|
import com.sandu.common.object.BaseConditionVO;
|
import com.sandu.common.service.impl.BaseServiceImpl;
|
import com.sandu.ximon.admin.minio.entity.MinIoConstant;
|
import com.sandu.ximon.admin.param.IpVolumeMissionParam;
|
import com.sandu.ximon.admin.security.SecurityUtils;
|
import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
|
import com.sandu.ximon.admin.utils.TaskAPIUtils;
|
import com.sandu.ximon.admin.vo.TaskMediaFileVO;
|
import com.sandu.ximon.admin.vo.TaskTerminalVO;
|
import com.sandu.ximon.admin.vo.TaskVO;
|
import com.sandu.ximon.dao.bo.IpVolumeMissionBo;
|
import com.sandu.ximon.dao.domain.BroadcastV2TaskFile;
|
import com.sandu.ximon.dao.domain.BroadcastV2TaskTerminal;
|
import com.sandu.ximon.dao.domain.IpVolumeFile;
|
import com.sandu.ximon.dao.domain.IpVolumeMission;
|
import com.sandu.ximon.dao.enums.OrderByEnums;
|
import com.sandu.ximon.dao.mapper.IpVolumeMissionMapper;
|
import lombok.AllArgsConstructor;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.stereotype.Service;
|
|
import java.math.BigInteger;
|
import java.util.ArrayList;
|
import java.util.HashSet;
|
import java.util.List;
|
|
/**
|
* @Author liuhaonan
|
* @Date 2021/12/16 10:03
|
* @Version 1.0
|
*/
|
@Service
|
@AllArgsConstructor
|
public class IpVolumeMissionService extends BaseServiceImpl<IpVolumeMissionMapper, IpVolumeMission> {
|
private final IpVolumeMissionMapper ipVolumeMissionMapper;
|
private final ClientService clientService;
|
private final IpVolumeService ipVolumeService;
|
private final IpVolumeFileService ipVolumeFileService;
|
private final BroadcastV2TaskFileService broadcastV2TaskFileService;
|
private final BroadcastV2TaskTerminalService broadcastV2TaskTerminalService;
|
|
|
public boolean addMission(IpVolumeMissionParam missionparam) {
|
|
String taskName = missionparam.getMissionName();
|
|
if (null == taskName || "".equals(taskName)) {
|
throw new BusinessException("任务名称不可为空");
|
//return 1;
|
}
|
|
if (missionparam.getFileIds().size() <= 0) {
|
throw new BusinessException("播放文件不可为空");
|
//return 2;
|
}
|
|
if (missionparam.getTerminalIds().size() <= 0) {
|
throw new BusinessException("播放终端不可为空");
|
// return 3;
|
}
|
|
// 封装播放终端
|
List<TaskTerminalVO> taskTerminalVOList = new ArrayList<>();
|
// 封装数据库中任务终端绑定
|
List<BroadcastV2TaskTerminal> taskTerminalEntityList = new ArrayList<>();
|
for (Integer id : new HashSet<>(missionparam.getTerminalIds())) {
|
TaskTerminalVO taskTerminalVO = new TaskTerminalVO();
|
BroadcastV2TaskTerminal taskTerminalEntity = new BroadcastV2TaskTerminal();
|
|
taskTerminalVO.setI(id);
|
taskTerminalEntity.setTerminalId(id);
|
|
taskTerminalVOList.add(taskTerminalVO);
|
taskTerminalEntityList.add(taskTerminalEntity);
|
}
|
|
// 封装播放文件列表
|
List<TaskMediaFileVO> taskMediaFileVOS = new ArrayList<>();
|
List<BroadcastV2TaskFile> taskFileEntityList = new ArrayList<>();
|
int i = 1;
|
for (Integer fileId : new HashSet<>(missionparam.getFileIds())) {
|
TaskMediaFileVO taskMediaFileVO = new TaskMediaFileVO();
|
BroadcastV2TaskFile taskFileEntity = new BroadcastV2TaskFile();
|
|
taskFileEntity.setFileId(fileId);
|
|
IpVolumeFile fileEntity = ipVolumeFileService.getById(fileId);
|
if (fileEntity == null) {
|
throw new BusinessException("fileId为" + fileId + "的文件不存在");
|
}
|
if (fileEntity.getUserId() == null && fileEntity.getClientId() != null) {
|
fileEntity.setUserId(fileEntity.getClientId());
|
}
|
String absolutePath;
|
absolutePath = MinIoConstant.getAbsolutePath(
|
MinIoConstant.BROADCAST_FILE.getBucketName() + fileEntity.getUserId(),
|
fileEntity.getFileName()
|
);
|
if (fileEntity.getUserId() == null && fileEntity.getClientId() == null) {
|
absolutePath = MinIoConstant.getAbsolutePath(
|
MinIoConstant.ADMIN_BROADCAST_FILE.getBucketName(),
|
fileEntity.getFileName()
|
);
|
}
|
taskMediaFileVO.setI(i);
|
i++;
|
taskMediaFileVO.setT(0);
|
taskMediaFileVO.setN(absolutePath);
|
taskMediaFileVO.setS(BigInteger.valueOf(fileEntity.getOriginSize()));
|
|
taskMediaFileVOS.add(taskMediaFileVO);
|
taskFileEntityList.add(taskFileEntity);
|
}
|
|
|
missionparam.setFiles(taskMediaFileVOS.toArray(new TaskMediaFileVO[taskMediaFileVOS.size()]));
|
missionparam.setTerminals(taskTerminalVOList.toArray(new TaskTerminalVO[taskTerminalVOList.size()]));
|
System.out.println("---------------------------");
|
// 向IP音柱服务器添加任务
|
Integer taskId = TaskAPIUtils.addTask(missionparam);
|
// Integer taskId = 1111;
|
|
boolean flag;
|
if (null != taskId && taskId != 0) {
|
IpVolumeMission byId = getById(taskId);
|
for (BroadcastV2TaskTerminal v2TaskTerminal : taskTerminalEntityList) {
|
v2TaskTerminal.setTaskId(taskId);
|
}
|
for (BroadcastV2TaskFile v2TaskFile : taskFileEntityList) {
|
v2TaskFile.setTaskId(taskId);
|
}
|
if (byId == null) {
|
// 向数据库添加该任务记录
|
|
IpVolumeMission mission = new IpVolumeMission();
|
mission.setTaskId(taskId);
|
mission.setUserId(SecurityUtils.getClientId());
|
if (SecurityUtils.getClientId() != null) {
|
mission.setUserName(SecurityUtils.getUsername());
|
}
|
mission.setClientId(clientService.getClientId());
|
mission.setMissionName(missionparam.getMissionName());
|
mission.setOnDate(missionparam.getOnDate());
|
mission.setOffDate(missionparam.getOffDate());
|
mission.setWeek(Integer.parseInt(missionparam.getWeek(), 2));//时间由二进制字符串转换为十进制
|
mission.setMissionVolume(missionparam.getMissionVolume());
|
mission.setNumberInPlay(missionparam.getTerminals().length);
|
|
|
System.out.println(save(mission));
|
System.out.println("----------------------------------------------------------");
|
|
|
} else {//[Lcom.sandu.ximon.admin.vo.TaskMediaFileVO;@b5558c3
|
|
IpVolumeMission mission = new IpVolumeMission();
|
mission.setTaskId(taskId);
|
mission.setMissionName(missionparam.getMissionName());
|
mission.setOnDate(missionparam.getOnDate());
|
mission.setOffDate(missionparam.getOffDate());
|
mission.setWeek(Integer.parseInt(missionparam.getWeek(), 2));//时间由二进制字符串转换为十进制
|
mission.setMissionVolume(missionparam.getMissionVolume());
|
mission.setMissionFileUrl(missionparam.getFiles().toString());
|
mission.setNumberInPlay(missionparam.getTerminals().length);
|
}
|
broadcastV2TaskFileService.deleteByTaskId(taskId);
|
broadcastV2TaskTerminalService.deleteByTaskId(taskId);
|
broadcastV2TaskTerminalService.saveTaskTerminal(taskTerminalEntityList);
|
broadcastV2TaskFileService.saveBatch(taskFileEntityList);
|
flag = true;
|
} else {
|
flag = false;
|
}
|
|
/**
|
* IP音柱任务添加日志记录开始
|
*/
|
String content = "{任务ID:" + taskId
|
+ ",任务名:" + taskName
|
+ ",设备ID集合:" + missionparam.getTerminalIds()
|
+ " }";
|
StoreOperationRecordsUtils.storeOperationData(missionparam.getTerminalIds(), null, "IP音柱任务添加", content);
|
/**
|
* IP音柱任务添加日志记录结束
|
*/
|
|
|
return flag;
|
}
|
|
public Integer updateMission(Integer taskId, IpVolumeMissionParam missionparam) {
|
|
String taskName = missionparam.getMissionName();
|
|
if (null == taskName || "".equals(taskName)) {
|
return 4;
|
}
|
|
if (missionparam.getFileIds().size() <= 0) {
|
return 5;
|
}
|
|
if (missionparam.getTerminalIds().size() <= 0) {
|
return 6;
|
}
|
|
|
// 封装播放终端
|
List<TaskTerminalVO> taskTerminalVOList = new ArrayList<>();
|
// 封装数据库中任务终端绑定
|
List<BroadcastV2TaskTerminal> taskTerminalEntityList = new ArrayList<>();
|
for (Integer id : new HashSet<>(missionparam.getTerminalIds())) {
|
TaskTerminalVO taskTerminalVO = new TaskTerminalVO();
|
BroadcastV2TaskTerminal taskTerminalEntity = new BroadcastV2TaskTerminal();
|
|
taskTerminalVO.setI(id);
|
taskTerminalEntity.setTerminalId(id);
|
|
taskTerminalVOList.add(taskTerminalVO);
|
taskTerminalEntityList.add(taskTerminalEntity);
|
}
|
|
// 封装播放文件列表
|
List<TaskMediaFileVO> taskMediaFileVOS = new ArrayList<>();
|
List<BroadcastV2TaskFile> taskFileEntityList = new ArrayList<>();
|
int i = 1;
|
for (Integer fileId : new HashSet<>(missionparam.getFileIds())) {
|
TaskMediaFileVO taskMediaFileVO = new TaskMediaFileVO();
|
BroadcastV2TaskFile taskFileEntity = new BroadcastV2TaskFile();
|
|
taskFileEntity.setFileId(fileId);
|
|
IpVolumeFile fileEntity = ipVolumeFileService.getById(fileId);
|
String absolutePath;
|
absolutePath = MinIoConstant.getAbsolutePath(
|
MinIoConstant.BROADCAST_FILE.getBucketName() + fileEntity.getUserId(),
|
fileEntity.getFileName()
|
);
|
if (fileEntity.getUserId() == null && fileEntity.getClientId() == null) {
|
absolutePath = MinIoConstant.getAbsolutePath(
|
MinIoConstant.ADMIN_BROADCAST_FILE.getBucketName(),
|
fileEntity.getFileName()
|
);
|
}
|
|
taskMediaFileVO.setI(i);
|
i++;
|
taskMediaFileVO.setT(0);
|
taskMediaFileVO.setN(absolutePath);
|
taskMediaFileVO.setS(BigInteger.valueOf(fileEntity.getOriginSize()));
|
|
taskMediaFileVOS.add(taskMediaFileVO);
|
taskFileEntityList.add(taskFileEntity);
|
}
|
|
|
missionparam.setFiles(taskMediaFileVOS.toArray(new TaskMediaFileVO[taskMediaFileVOS.size()]));
|
missionparam.setTerminals(taskTerminalVOList.toArray(new TaskTerminalVO[taskTerminalVOList.size()]));
|
|
// 向IP音柱服务器更新任务
|
Integer result = TaskAPIUtils.updateTask(taskId, missionparam);
|
|
if (result == 0) {
|
IpVolumeMission byId = getById(taskId);
|
for (BroadcastV2TaskTerminal v2TaskTerminal : taskTerminalEntityList) {
|
v2TaskTerminal.setTaskId(taskId);
|
}
|
for (BroadcastV2TaskFile v2TaskFile : taskFileEntityList) {
|
v2TaskFile.setTaskId(taskId);
|
}
|
if (null == byId) {
|
// 向数据库添加该任务记录
|
|
IpVolumeMission mission = new IpVolumeMission();
|
mission.setTaskId(taskId);
|
mission.setUserId(SecurityUtils.getUserId());
|
if (SecurityUtils.getUserId() != null) {
|
mission.setUserName(SecurityUtils.getUsername());
|
}
|
mission.setClientId(clientService.getClientId());
|
mission.setMissionName(missionparam.getMissionName());
|
mission.setOnDate(missionparam.getOnDate());
|
mission.setOffDate(missionparam.getOffDate());
|
mission.setWeek(Integer.parseInt(missionparam.getWeek(), 2));//时间由二进制字符串转换为十进制
|
mission.setMissionVolume(missionparam.getMissionVolume());
|
// mission.setMissionFileUrl(missionparam.getFiles().toString());
|
mission.setNumberInPlay(missionparam.getTerminals().length);
|
/*TaskTerminalVO[] terminals = missionparam.getTerminals();*/
|
|
System.out.println(save(mission));
|
System.out.println("----------------------------------------------------------");
|
} else {//[Lcom.sandu.ximon.admin.vo.TaskMediaFileVO;@b5558c3
|
|
IpVolumeMission mission = new IpVolumeMission();
|
mission.setTaskId(taskId);
|
mission.setMissionName(missionparam.getMissionName());
|
mission.setOnDate(missionparam.getOnDate());
|
mission.setOffDate(missionparam.getOffDate());
|
mission.setWeek(Integer.parseInt(missionparam.getWeek(), 2));//时间由二进制字符串转换为十进制
|
mission.setMissionVolume(missionparam.getMissionVolume());
|
// mission.setMissionFileUrl(missionparam.getFiles().toString());
|
mission.setNumberInPlay(missionparam.getTerminals().length);
|
System.out.println(updateById(mission));
|
System.out.println("----------------------------------------------------------");
|
}
|
broadcastV2TaskFileService.deleteByTaskId(taskId);
|
broadcastV2TaskTerminalService.deleteByTaskId(taskId);
|
broadcastV2TaskTerminalService.saveBatch(taskTerminalEntityList);
|
broadcastV2TaskFileService.saveBatch(taskFileEntityList);
|
}
|
/**
|
* IP音柱任务修改 日志记录开始
|
*/
|
String content = "{任务ID:" + taskId
|
+ ",任务名:" + taskName
|
+ ",设备ID集合:" + missionparam.getTerminalIds()
|
+ ",任务编辑结果:" + result
|
+ " }";
|
StoreOperationRecordsUtils.storeOperationData(missionparam.getTerminalIds(), null, "IP音柱任务修改", content);
|
/**
|
* IP音柱任务修改 日志记录结束
|
*/
|
return result;
|
|
}
|
|
/**
|
* 删除任务
|
*
|
* @param taskId
|
* @return0:成功 1:任务不处于空闲状态 2:服务器删除失败
|
*/
|
public Integer deleteMission(Integer taskId) {
|
Integer del = TaskAPIUtils.delTask(taskId);
|
if (del == 0) {
|
IpVolumeMission byId = getById(taskId);
|
if (byId == null) {
|
return -1;
|
}
|
removeById(taskId);
|
broadcastV2TaskFileService.deleteByTaskId(taskId);
|
broadcastV2TaskTerminalService.deleteByTaskId(taskId);
|
// broadcastV2TaskTerminalService.removeById(taskId);
|
}
|
|
/**
|
* IP音柱任务删除 日志记录开始
|
*/
|
String content = "{删除的任务ID:" + taskId
|
+ ",任务删除结果:" + del
|
+ " }";
|
StoreOperationRecordsUtils.storeOperationData(null, null, "IP音柱任务删除", content);
|
/**
|
* IP音柱任务删除 日志记录结束
|
*/
|
|
|
return del;
|
}
|
|
|
public List<IpVolumeMissionBo> missionList(BaseConditionVO baseConditionVO, String keyword, Integer order, Integer seq) {
|
|
|
//排序字段
|
String orderByResult = "task_id";
|
//正序、倒叙
|
String orderBySeq = "ASC";
|
if (order != null) {
|
switch (order) {
|
case 1:
|
orderByResult = OrderByEnums.IP_VOLUME_MISSION_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 (baseConditionVO != null) {
|
PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize(), orderBy);
|
}
|
|
List<IpVolumeMissionBo> ipVolumeMissionBos = new ArrayList<>();
|
LambdaQueryWrapper<IpVolumeMission> eq = Wrappers.lambdaQuery(IpVolumeMission.class);
|
|
|
//不是超管
|
if (SecurityUtils.getClientId() != null) {
|
eq = eq.eq(IpVolumeMission::getUserId, SecurityUtils.getUserId()).or(w -> {
|
w.eq(IpVolumeMission::getClientId, SecurityUtils.getUserId());
|
});
|
}
|
if (keyword != null && !keyword.isEmpty()) {
|
eq.like(IpVolumeMission::getMissionName, keyword);
|
}
|
List<IpVolumeMission> list = list(eq);
|
|
for (IpVolumeMission mission : list) {
|
List<String> fileName = broadcastV2TaskFileService.findByTaskid(mission.getTaskId());
|
IpVolumeMissionBo bo = new IpVolumeMissionBo();
|
BeanUtils.copyProperties(mission, bo);
|
bo.setFileNames(fileName);
|
ipVolumeMissionBos.add(bo);
|
}
|
|
return ipVolumeMissionBos;
|
}
|
|
public TaskVO getByTaskId(Integer taskId) {
|
TaskVO task = TaskAPIUtils.getTask(taskId);
|
if (task == null) {
|
throw new BusinessException("服务器未找到该任务");
|
}
|
|
IpVolumeMission byId = getById(taskId);
|
if (byId == null) {
|
throw new BusinessException("本地未找到该任务");
|
}
|
if (SecurityUtils.getClientId() != null) {
|
if (clientService.findClientId()) {
|
if (byId.getUserId().equals(SecurityUtils.getUserId())) {
|
throw new BusinessException("任务归属错误");
|
}
|
|
} else {
|
if (byId.getClientId().equals(SecurityUtils.getUserId())) {
|
throw new BusinessException("任务归属错误");
|
}
|
}
|
|
|
}
|
task.setWeeks("0" + Integer.toBinaryString(task.getWeek()));
|
// byId.setWeeks("0" + Integer.toBinaryString(byId.getWeek()));
|
|
List<BroadcastV2TaskFile> taskFiles = broadcastV2TaskFileService.list(Wrappers.lambdaQuery(BroadcastV2TaskFile.class)
|
.eq(BroadcastV2TaskFile::getTaskId, taskId));
|
List<BroadcastV2TaskTerminal> taskTerminals = broadcastV2TaskTerminalService.list(Wrappers.lambdaQuery(BroadcastV2TaskTerminal.class)
|
.eq(BroadcastV2TaskTerminal::getTaskId, taskId));
|
|
|
if (!taskFiles.isEmpty()) {
|
taskFiles.forEach(
|
fileId -> {
|
// IpVolumeFile volumeFile = ipVolumeFileService.getById(fileId.getFileId());
|
// if(volumeFile==null){
|
// throw new BusinessException("任务文件不存在");
|
// }
|
task.getFileIds().add(fileId.getFileId());
|
// byId.getFileIds().add(fileId.getFileId());
|
}
|
);
|
|
}
|
if (!taskTerminals.isEmpty()) {
|
taskTerminals.forEach(
|
terminalId -> {
|
// BroadcastTerminalV2Entity v2Entity = ipVolumeService.getById(terminalId.getTerminalId());
|
// if(v2Entity==null){
|
// throw new BusinessException("该任务暂无设备使用");
|
// }
|
task.getTerminalIds().add(terminalId.getTerminalId());
|
// byId.getTerminalIds().add(terminalId.getTerminalId());
|
}
|
);
|
}
|
|
|
System.out.println(JSON.toJSONString(task));
|
System.out.println(task);
|
return task;
|
|
|
}
|
|
/**
|
* 推送
|
*
|
* @param taskId
|
* @return
|
*/
|
public boolean playTask(Integer taskId) {
|
return TaskAPIUtils.playTask(taskId);
|
}
|
|
|
/**
|
* 停止
|
*
|
* @param taskId
|
* @return
|
*/
|
public boolean stopTask(Integer taskId) {
|
return TaskAPIUtils.stopTask(taskId);
|
}
|
|
/**
|
* 暂停
|
*
|
* @param taskId
|
* @return
|
*/
|
public boolean pauseTask(Integer taskId) {
|
return TaskAPIUtils.pauseTask(taskId);
|
}
|
|
/**
|
* 继续
|
*
|
* @param taskId
|
* @return
|
*/
|
public boolean continueTask(Integer taskId) {
|
return TaskAPIUtils.continueTask(taskId);
|
}
|
}
|