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<NewNovaProgramMapper, NewNovaProgram> {
|
|
private NewNovaProFileRelationService fileRelationService;
|
private NewNovaFileService fileService;
|
private ProgramPathConfig filePathConfig;
|
|
/**
|
* 节目新增
|
*
|
* @param programPrarm
|
* @return
|
*/
|
public List<TrasfromStatusVO> 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<TrasfromStatusVO> trasfromStatusVOS = new ArrayList<>();
|
if (!programPrarm.getSnList().isEmpty()) {
|
Map<String, String> 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<String, String> getProFile(ProgramPrarm programPrarm) {
|
List<NewNovaFile> novaFiles = fileService.listByIds(programPrarm.getFileIds());
|
if (novaFiles == null || novaFiles.size() == 0) {
|
return new HashMap<String, String>();
|
}
|
Map<String, String> fileMap = new HashMap<String, String>();
|
novaFiles.forEach(file -> {
|
fileMap.put(file.getRealUrl(), file.getRealName());
|
});
|
return fileMap;
|
}
|
|
/**
|
* 删除节目
|
*
|
* @param pids
|
* @return
|
*/
|
public Boolean delProgram(List<Long> pids) {
|
if (pids.isEmpty()) {
|
throw new BusinessException("节目id不能为空");
|
}
|
List<NewNovaProgram> 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<NewNovaProFileRelation> fileRelations = fileRelationService.list(Wrappers.lambdaQuery(NewNovaProFileRelation.class).eq(NewNovaProFileRelation::getNewNovaProgramId, id));
|
if (!fileRelations.isEmpty()) {
|
List<Long> fileIds = fileRelations.stream().map(NewNovaProFileRelation::getNewNovaFileId).collect(Collectors.toList());
|
List<NewNovaFile> newNovaFiles = fileService.listByIds(fileIds);
|
List<String> 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<NewNovaProgramBo> listProgram(BaseConditionVO baseConditionVO, String keyword) {
|
PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
|
List<NewNovaProgramBo> list = baseMapper.listProgram(keyword, SecurityUtils.getClientId());
|
return list;
|
}
|
}
|