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.param.ReceiveParam; 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.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.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 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 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 taskId = TaskAPIUtils.addTask(missionparam); // System.out.println("---------------------------"); //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 (null == byId) { // 向数据库添加该任务记录 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.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 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.removeById(taskId); broadcastV2TaskTerminalService.removeById(taskId); return 0; } else { return del; } } public List listMission(ReceiveParam receiveParam) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(IpVolumeMission.class).eq(IpVolumeMission::getClientId, SecurityUtils.getUserId()).like(IpVolumeMission::getMissionName, receiveParam.getKeyWord()); return list(wrapper); } public List missionList(BaseConditionVO baseConditionVO,String keyword) { PageHelper.startPage(baseConditionVO.getPageNo(),baseConditionVO.getPageSize()); List ipVolumeMissionBos = ipVolumeMissionMapper.listAllByClientId(); for (IpVolumeMissionBo missionBo: ipVolumeMissionBos) { missionBo.setFileNames(broadcastV2TaskFileService.findByTaskid(missionBo.getTaskId())); } return ipVolumeMissionBos; //return new ArrayList<>(); } public void setMissionToData(Long missionId, List dateIds) { // tudo } }