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.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.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 { 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 taskTerminalVOList = new ArrayList<>(); // 封装数据库中任务终端绑定 List 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 taskMediaFileVOS = new ArrayList<>(); List 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 taskTerminalVOList = new ArrayList<>(); // 封装数据库中任务终端绑定 List 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 taskMediaFileVOS = new ArrayList<>(); List 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 missionList(BaseConditionVO baseConditionVO, String keyword) { // PageHelper.startPage(baseConditionVO.getPageNo(),baseConditionVO.getPageSize()); boolean r = clientService.findClientId(); //ture代表有上级客户 查询通过userID List ipVolumeMissionBos = new ArrayList<>(); LambdaQueryWrapper 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 list = list(eq); // ipVolumeMissionBos = ipVolumeMissionMapper.listAllByClientId(); for (IpVolumeMission mission : list) { List 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 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() != SecurityUtils.getUserId()) { throw new BusinessException("任务归属错误"); } } else { if (byId.getClientId() != SecurityUtils.getUserId()) { throw new BusinessException("任务归属错误"); } } } task.setWeeks("0" + Integer.toBinaryString(byId.getWeek())); // byId.setWeeks("0" + Integer.toBinaryString(byId.getWeek())); task.setBdate(byId.getOnDate()); task.setEdate(byId.getOffDate()); List taskFiles = broadcastV2TaskFileService.list(Wrappers.lambdaQuery(BroadcastV2TaskFile.class) .eq(BroadcastV2TaskFile::getTaskId, taskId)); List 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()); } ); } return task; } public boolean playTask(Integer taskId) { return TaskAPIUtils.playTask(taskId); } }