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.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 { 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) { List fileIds = missionparam.getFileIds(); List ipVolumeFiles = ipVolumeFileService.listByIds(fileIds); ipVolumeFiles.forEach(file -> { if (SecurityUtils.getClientId() != null) { //非超管用户 if (!SecurityUtils.getUserId().equals(file.getClientId()) && !SecurityUtils.getUserId().equals(file.getUserId())) { //用户id和客户id都不匹配 throw new BusinessException("文件归属异常,创建任务失败"); } } }); 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 + "的文件不存在"); } 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; 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 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); 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()])); // 向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 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 ipVolumeMissionBos = new ArrayList<>(); LambdaQueryWrapper 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 list = list(eq); for (IpVolumeMission mission : list) { List 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()) && !byId.getUserId().equals(SecurityUtils.getUserId())) { throw new BusinessException("任务归属错误"); } } } task.setWeeks("0" + Integer.toBinaryString(task.getWeek())); // byId.setWeeks("0" + Integer.toBinaryString(byId.getWeek())); 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()); } ); } 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); } }