package com.sandu.ximon.admin.service;
|
|
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.config.MinIoConstant;
|
import com.sandu.ximon.admin.param.IpVolumeMissionParam;
|
import com.sandu.ximon.admin.security.SecurityUtils;
|
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.*;
|
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.Collections;
|
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 add1() {
|
return broadcastV2TaskTerminalService.save();
|
}*/
|
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 + "的文件不存在");
|
}
|
// String absolutePath = MinIoConstant.getAbsolutePath(
|
// MinIoConstant.BROADCAST_FILE.getBucketName() + fileEntity.getUserId(),
|
// fileEntity.getFileName()
|
// );
|
|
taskMediaFileVO.setI(i);
|
i++;
|
taskMediaFileVO.setT(0);
|
taskMediaFileVO.setN(fileEntity.getFileUrl());
|
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;
|
|
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);
|
return true;
|
} else {
|
return false;
|
}
|
|
}
|
|
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 = MinIoConstant.getAbsolutePath(
|
MinIoConstant.BROADCAST_FILE.getBucketName() + fileEntity.getUserId(),
|
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 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);
|
return 0;
|
|
} else {
|
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);
|
return 0;
|
} else {
|
return del;
|
}
|
|
}
|
|
|
public List<IpVolumeMissionBo> missionList(BaseConditionVO baseConditionVO, String keyword) {
|
// PageHelper.startPage(baseConditionVO.getPageNo(),baseConditionVO.getPageSize());
|
boolean r = clientService.findClientId(); //ture代表有上级客户 查询通过userID
|
|
List<IpVolumeMissionBo> ipVolumeMissionBos = new ArrayList<>();
|
LambdaQueryWrapper<IpVolumeMission> eq = new LambdaQueryWrapper<>();
|
|
PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
|
if (r) {
|
eq = Wrappers.lambdaQuery(IpVolumeMission.class).eq(IpVolumeMission::getUserId, SecurityUtils.getUserId());
|
} else {
|
eq = Wrappers.lambdaQuery(IpVolumeMission.class).eq(IpVolumeMission::getClientId, SecurityUtils.getUserId());
|
}
|
if (!keyword.isEmpty()) {
|
eq.like(IpVolumeMission::getMissionName, keyword);
|
}
|
List<IpVolumeMission> list = list(eq);
|
|
|
// ipVolumeMissionBos = ipVolumeMissionMapper.listAllByClientId();
|
|
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);
|
|
}
|
|
// for (IpVolumeMissionBo missionBo: ipVolumeMissionBos) {
|
// missionBo.setFileNames(broadcastV2TaskFileService.findByTaskid(missionBo.getTaskId()));
|
//
|
// }
|
|
return ipVolumeMissionBos;
|
//return new ArrayList<>();
|
}
|
|
public IpVolumeMission 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() != SecurityUtils.getUserId()) {
|
throw new BusinessException("任务归属错误");
|
}
|
|
} else {
|
if (byId.getClientId() != SecurityUtils.getUserId()) {
|
throw new BusinessException("任务归属错误");
|
}
|
}
|
|
|
}
|
|
byId.setWeeks("0" + Integer.toBinaryString(byId.getWeek()));
|
|
// IpVolumeMissionBo bo = new IpVolumeMissionBo();
|
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()||taskTerminals.isEmpty()){
|
// throw new BusinessException("");
|
// }
|
if(!taskFiles.isEmpty()){
|
taskFiles.forEach(
|
fileId->{
|
// IpVolumeFile volumeFile = ipVolumeFileService.getById(fileId.getFileId());
|
// if(volumeFile==null){
|
// throw new BusinessException("任务文件不存在");
|
// }
|
byId.getFileIds().add(fileId.getFileId());
|
}
|
);
|
|
}
|
if(!taskTerminals.isEmpty()){
|
taskTerminals.forEach(
|
terminalId->{
|
// BroadcastTerminalV2Entity v2Entity = ipVolumeService.getById(terminalId.getTerminalId());
|
// if(v2Entity==null){
|
// throw new BusinessException("该任务暂无设备使用");
|
// }
|
byId.getTerminalIds().add(terminalId.getTerminalId());
|
}
|
);
|
}
|
|
return byId;
|
|
|
}
|
|
public boolean playTask(Integer taskId) {
|
return TaskAPIUtils.playTask(taskId);
|
}
|
|
|
}
|