package cn.huge.module.xylink.service;
|
|
import cn.huge.base.common.exception.ServiceException;
|
import cn.huge.base.common.utils.DateUtils;
|
import cn.huge.base.common.utils.IdUtils;
|
import cn.huge.base.common.utils.ObjectUtils;
|
import cn.huge.module.client.api.impl.UtilsClientImpl;
|
import cn.huge.module.xylink.constant.XylinkConsts;
|
import cn.huge.module.xylink.dao.mapper.XylinkVideoMapper;
|
import cn.huge.module.xylink.domain.dto.XylinkVedioDTO;
|
import cn.huge.module.xylink.domain.po.XylinkSys;
|
import cn.huge.module.xylink.domain.po.XylinkVideo;
|
import cn.huge.module.xylink.utils.XylinkUtils;
|
import com.alibaba.fastjson.JSON;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import org.apache.commons.io.FileUtils;
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
import org.apache.http.client.methods.HttpGet;
|
import org.apache.http.client.utils.URIBuilder;
|
import org.apache.http.impl.client.CloseableHttpClient;
|
import org.apache.http.impl.client.HttpClients;
|
import org.apache.http.util.EntityUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.PageImpl;
|
import org.springframework.data.domain.PageRequest;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.PostConstruct;
|
import java.io.File;
|
import java.io.FileOutputStream;
|
import java.io.InputStream;
|
import java.io.OutputStream;
|
import java.net.HttpURLConnection;
|
import java.net.URISyntaxException;
|
import java.net.URL;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* @title: 小鱼云会议录制视频记录表业务逻辑处理
|
* @Description JPA的单表数据查询以由BaseService完成
|
* @company hugeinfo
|
* @author liyj
|
* @Time 2023-08-18 14:12:24
|
* @version 1.0.0
|
*/
|
@Slf4j
|
@Service
|
@Transactional(rollbackFor = Exception.class)
|
public class XylinkVideoService extends ServiceImpl<XylinkVideoMapper, XylinkVideo>{
|
|
@Autowired
|
private XylinkVideoMapper mapper;
|
|
@Autowired
|
private XylinkSysService xylinkSysService;
|
|
@Autowired
|
private UtilsClientImpl utilsClient;
|
|
/**
|
* 更新对象
|
* @param entity 对象
|
*/
|
public void updateXylinkVideo(XylinkVideo entity){
|
try{
|
mapper.updateXylinkVideo(entity);
|
}catch (Exception e){
|
log.error("service方法[XylinkVideoService.updateXylinkVideo]调用异常:"+e, e);
|
throw new ServiceException("XylinkVideoService.updateXylinkVideo", e);
|
}
|
}
|
|
/**
|
* 条件更新对象
|
* @param entity 对象
|
* @param terms 条件
|
*/
|
public void updateXylinkVideoTerms(XylinkVideo entity, Map<String, Object> terms){
|
try{
|
mapper.updateXylinkVideoTerms(entity, terms);
|
}catch (Exception e){
|
log.error("service方法[XylinkVideoService.updateXylinkVideoTerms]调用异常:"+e, e);
|
throw new ServiceException("XylinkVideoService.updateXylinkVideoTerms", e);
|
}
|
}
|
|
/**
|
* 根据编号物理删除
|
* @param id 查询条件集合
|
*/
|
public void deleteXylinkVideo(String id){
|
try{
|
mapper.deleteXylinkVideo(id);
|
}catch (Exception e){
|
log.error("service方法[XylinkVideoService.deleteXylinkVideo]调用异常:"+e, e);
|
throw new ServiceException("XylinkVideoService.deleteXylinkVideo", e);
|
}
|
}
|
|
/**
|
* 按条件查询
|
* @param terms 条件
|
* @return List
|
*/
|
public List<XylinkVideo> listTerms(Map<String, Object> terms){
|
return mapper.listTerms(terms);
|
}
|
|
/**
|
* 按条件统计
|
* @param terms 条件
|
* @return long
|
*/
|
public long countTerms(Map<String, Object> terms){
|
return mapper.countTerms(terms);
|
}
|
|
/**
|
* 按条件分页查询
|
* @param page 分页对象
|
* @param terms 条件
|
* @return Page
|
*/
|
public Page<XylinkVideo> pageQuery(PageRequest page, Map<String, Object> terms){
|
long total = mapper.countTerms(terms);
|
List<XylinkVideo> content = mapper.pageTerms(page, terms);
|
return new PageImpl<XylinkVideo>(content, page, total);
|
}
|
|
/**
|
* 新增或更新对象
|
* @param xylinkVideo 实体对象
|
*/
|
public void saveXylinkVideo(XylinkVideo xylinkVideo){
|
try{
|
Date nowDate = DateUtils.getNowDate();
|
// 判断是否新增
|
if (IdUtils.checkNewId(xylinkVideo.getId())){
|
xylinkVideo.setId(utilsClient.getNewTimeId());
|
xylinkVideo.setCreateTime(nowDate);
|
}
|
xylinkVideo.setUpdateTime(nowDate);
|
this.saveOrUpdate(xylinkVideo);
|
}catch (Exception e){
|
log.error("service方法[XylinkVideoService.saveXylinkVideo]调用异常:"+e, e);
|
throw new ServiceException("XylinkVideoService.saveXylinkVideo", e);
|
}
|
}
|
|
/**
|
* 小鱼云会议录制视频转存到平台服务器
|
* @param vodId
|
*/
|
public String saveVideoToDyh(String vodId, String fileName){
|
try{
|
log.info("start saveVideoToDyh fileName {}",fileName);
|
String url = XylinkUtils.getDownloadUrl(vodId);
|
// 下载文件保存路径
|
XylinkSys dyhSavenSys = xylinkSysService.getByTypeAndCode(XylinkConsts.SYS_TYPE_1, XylinkConsts.SYS_CODE_1);
|
if(ObjectUtils.isNotEmpty(dyhSavenSys)){
|
log.info("start saveVideoToDyh dyhSavenSys {}", JSON.toJSONString(dyhSavenSys));
|
}
|
|
// 路径不存在创建路径
|
File sf = new File(dyhSavenSys.getSysValue());
|
if(!sf.exists()){
|
sf.mkdirs();
|
}
|
String savePath = dyhSavenSys.getSysValue() + fileName;
|
log.info("saveVideoToDyh savePath {}, DownloadUrl {}",savePath,url);
|
CloseableHttpClient httpclient = HttpClients.createDefault();
|
// URIBuilder urlBuilder = new URIBuilder(url);
|
// urlBuilder.addParameter("fileName", fileName);
|
HttpGet httpGet = new HttpGet(url);
|
try (CloseableHttpResponse response = httpclient.execute(httpGet)) {
|
log.info("finish saveVideoToDyh response {}",response);
|
if (response.getStatusLine().getStatusCode() == 200) {
|
try (InputStream inputStream = response.getEntity().getContent();
|
FileOutputStream outputStream = new FileOutputStream(new File(savePath))) {
|
byte[] buffer = new byte[1024];
|
int bytesRead;
|
while ((bytesRead = inputStream.read(buffer)) != -1) {
|
outputStream.write(buffer, 0, bytesRead);
|
}
|
}
|
// 删除小鱼服务器上的视频
|
XylinkUtils.deleteVideo(vodId);
|
// 返回多元化访问url
|
XylinkSys dyhPlayUrlSys = xylinkSysService.getByTypeAndCode(XylinkConsts.SYS_TYPE_1, XylinkConsts.SYS_CODE_2);
|
String dyhPlayUrl = dyhPlayUrlSys.getSysValue()+fileName;
|
log.info("finish saveVideoToDyh dyhPlayUrl {}",dyhPlayUrl);
|
return dyhPlayUrl;
|
} else {
|
log.error("Failed to download video, status code: {}", response.getStatusLine().getStatusCode());
|
return null;
|
}
|
}
|
}catch (Exception e){
|
log.error("service方法[XylinkVideoService.saveVideoToDyh]调用异常:"+e, e);
|
return null;
|
}
|
}
|
|
|
/**
|
* 根据url下载文件流 todo
|
* @param urlStr
|
* @return
|
*/
|
public String getInputStreamByUrl(String urlStr, String name) {
|
try {
|
//url解码
|
URL url = new URL(java.net.URLDecoder.decode(urlStr, "UTF-8"));
|
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
//设置超时间为3秒
|
conn.setConnectTimeout(3 * 1000);
|
//防止屏蔽程序抓取而返回403错误
|
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
|
//得到输入流
|
InputStream is = conn.getInputStream();
|
byte[] bs = new byte[1024];
|
int len;
|
XylinkSys downUrlSys = xylinkSysService.getByTypeAndCode(XylinkConsts.SYS_TYPE_1, XylinkConsts.SYS_CODE_1);
|
String downPath = downUrlSys.getSysValue();
|
File sf = new File(downPath);
|
if(!sf.exists()){
|
sf.mkdirs();
|
}
|
OutputStream os = new FileOutputStream(downPath+name);
|
while ((len = is.read(bs)) != -1) {
|
os.write(bs, 0, len);
|
}
|
os.close();
|
is.close();
|
XylinkSys showUrlSys = xylinkSysService.getByTypeAndCode(XylinkConsts.SYS_TYPE_1, XylinkConsts.SYS_CODE_1);
|
String showUrl = showUrlSys+name;
|
return showUrl;
|
} catch (Exception e) {
|
log.error("获取失败!");
|
return null;
|
}
|
}
|
|
}
|