package com.sandu.ximon.admin.newnova.program; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.sandu.common.execption.BusinessException; import com.sandu.common.file.config.NovaFileConfig; import com.sandu.common.object.BaseConditionVO; import com.sandu.common.service.impl.BaseServiceImpl; import com.sandu.common.util.SpringContextHolder; import com.sandu.ximon.admin.newnova.conf.ProgramPathConfig; import com.sandu.ximon.admin.newnova.file.NewNovaFileService; import com.sandu.ximon.admin.newnova.param.ProgramPrarm; import com.sandu.ximon.admin.newnova.utils.NovaAPIUtil; import com.sandu.ximon.admin.newnova.vo.StatusVO; import com.sandu.ximon.admin.newnova.vo.TrasfromStatusVO; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.dao.bo.NewNovaProgramBo; import com.sandu.ximon.dao.domain.NewNovaFile; import com.sandu.ximon.dao.domain.NewNovaProFileRelation; import com.sandu.ximon.dao.domain.NewNovaProgram; import com.sandu.ximon.dao.mapper.NewNovaProgramMapper; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @author LiuHaoNan * @date 2022/11/16 */ @Service @AllArgsConstructor public class NewNovaProgramService extends BaseServiceImpl { private NewNovaProFileRelationService fileRelationService; private NewNovaFileService fileService; private ProgramPathConfig filePathConfig; /** * 节目新增 * * @param programPrarm * @return */ public List addProgram(ProgramPrarm programPrarm) throws InterruptedException { NovaAPIUtil instanceUtil = NovaAPIUtil.getInstanceUtil(); NewNovaProgram newNovaProgram = new NewNovaProgram(); newNovaProgram.setName(programPrarm.getProgramMsg().getName()); newNovaProgram.setWidth(programPrarm.getProgramMsg().getWidth()); newNovaProgram.setHeight(programPrarm.getProgramMsg().getHeight()); newNovaProgram.setScreenShot(programPrarm.getScreenShot()); if (programPrarm.getInsertPlay()) { newNovaProgram.setInsertPlay(1); } else { newNovaProgram.setInsertPlay(0); } if (programPrarm.getStartPlayAfterTransferred()) { newNovaProgram.setStartPlayAfterTransferred(1); } else { newNovaProgram.setStartPlayAfterTransferred(0); } Integer pid = null; //创建节目 if (programPrarm.getProgramID() == null) { StatusVO createPro = instanceUtil.createPro(programPrarm.getProgramMsg()); pid = Integer.valueOf(createPro.getStatusData()); checkProgram(createPro); } else { NewNovaProgram byId = getById(programPrarm.getProgramID()); if (byId == null) { throw new BusinessException("未找到节目"); } pid = byId.getPid(); newNovaProgram.setId(byId.getId()); } System.out.println("pid = " + pid); programPrarm.setProgramID(pid); newNovaProgram.setPid(pid); //编辑节目 StatusVO editProgram = instanceUtil.editPrograms(pid, programPrarm.getSceneItems()); checkProgram(editProgram); newNovaProgram.setPageInfoJsonStr(JSON.toJSONString(programPrarm.getSceneItems())); //生成节目 StatusVO genrateProgram = instanceUtil.genrateProgram(pid); checkProgram(genrateProgram); //发布节目 List trasfromStatusVOS = new ArrayList<>(); if (programPrarm.getFileIds().size() > 0) { Map proFile = getProFile(programPrarm); programPrarm.setFileMap(proFile); } trasfromStatusVOS = instanceUtil.trasfromProgram(programPrarm); newNovaProgram.setUserId(SecurityUtils.getUserId()); saveOrUpdate(newNovaProgram); fileRelationService.saveRelation(newNovaProgram.getId(), programPrarm.getFileIds()); return trasfromStatusVOS; } /** * 校验是否执行成功 */ public void checkProgram(StatusVO statusVO) { if (statusVO.getStatusCode() != 0) { throw new BusinessException("节目新增失败 : " + statusVO.getStatusData()); } } /** * 获取节目文件 * * @return */ public Map getProFile(ProgramPrarm programPrarm) { List novaFiles = fileService.listByIds(programPrarm.getFileIds()); if (novaFiles == null || novaFiles.size() == 0) { return new HashMap(); } Map fileMap = new HashMap(); novaFiles.forEach(file -> { fileMap.put(file.getRealUrl(), file.getRealName()); }); return fileMap; } /** * 删除节目 * * @param pids * @return */ public Boolean delProgram(List pids) { if (pids.isEmpty()) { throw new BusinessException("节目id不能为空"); } List newNovaPrograms = listByIds(pids); if (newNovaPrograms.isEmpty()) { throw new BusinessException("未找到节目"); } newNovaPrograms.forEach(newNovaProgram -> { if (SecurityUtils.getClientId() != null) { if (!newNovaProgram.getUserId().equals(SecurityUtils.getUserId())) { throw new BusinessException("不能操作不属于你的节目"); } } File file = new File(filePathConfig.getOutPutPath() + "/program" + newNovaProgram.getPid()); deleteFile(file); }); return removeByIds(pids); } /** * . * 删除本地文件内容 * * @param file * @return */ public Boolean deleteFile(File file) { //判断文件不为null或文件目录存在 if (file == null || !file.exists()) { System.out.println("文件删除失败,请检查文件是否存在以及文件路径是否正确"); return false; } //获取目录下子文件 File[] files = file.listFiles(); //遍历该目录下的文件对象 for (File f : files) { //判断子目录是否存在子目录,如果是文件则删除 if (f.isDirectory()) { //递归删除目录下的文件 deleteFile(f); } else { //文件删除 f.delete(); //打印文件名 System.out.println("文件名:" + f.getName()); } } //文件夹删除 file.delete(); System.out.println("目录名:" + file.getName()); return true; } /** * 节目详情 * * @param id * @return */ public NewNovaProgram programInfo(Long id) { NewNovaProgram byId = getById(id); if (byId == null) { throw new BusinessException("未找到节目 ! "); } List fileRelations = fileRelationService.list(Wrappers.lambdaQuery(NewNovaProFileRelation.class).eq(NewNovaProFileRelation::getNewNovaProgramId, id)); if (!fileRelations.isEmpty()) { List fileIds = fileRelations.stream().map(NewNovaProFileRelation::getNewNovaFileId).collect(Collectors.toList()); List newNovaFiles = fileService.listByIds(fileIds); List fileUrls = new ArrayList<>(); NovaFileConfig config = SpringContextHolder.getBean(NovaFileConfig.class); for (NewNovaFile newNovaFile : newNovaFiles) { fileUrls.add(config.getFileUrl() + newNovaFile.getFileUrl()); } byId.setFiles(fileUrls); } byId.setPageInfo(JSON.parseObject(byId.getPageInfoJsonStr(), List.class)); return byId; } public List listProgram(BaseConditionVO baseConditionVO, String keyword) { PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize()); List list = baseMapper.listProgram(keyword, SecurityUtils.getClientId()); return list; } }