feat:上传时抽取报告内容

This commit is contained in:
2023-05-25 10:52:21 +08:00
parent 5d9c442cc2
commit 6aed66b1ca
4 changed files with 44 additions and 27 deletions
@@ -3,7 +3,6 @@ package com.adc.da.report.service;
import com.adc.da.report.eo.ReportContentEntity; import com.adc.da.report.eo.ReportContentEntity;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
/** /**
@@ -18,7 +17,6 @@ public interface IReportContentService extends IService<ReportContentEntity> {
* 插入报告内容表 * 插入报告内容表
* *
* @param reportId 报告id * @param reportId 报告id
* @param fileId 文件id
*/ */
void insertReportContent(String reportId, String fileId) throws IOException; void insertReportContent(String reportId) throws IOException;
} }
@@ -1,19 +1,22 @@
package com.adc.da.report.service.impl; package com.adc.da.report.service.impl;
import com.adc.da.report.dao.mysql.FileDao; import com.adc.da.report.dao.mysql.FileDao;
import com.adc.da.report.dao.mysql.ReportFileDao;
import com.adc.da.report.eo.FileEntity; import com.adc.da.report.eo.FileEntity;
import com.adc.da.report.eo.ReportFile;
import com.adc.da.report.util.FileContentUtil; import com.adc.da.report.util.FileContentUtil;
import com.adc.da.report.util.LocalFileUtil; import com.adc.da.report.util.LocalFileUtil;
import com.adc.da.report.util.OSSClientUtil; import com.adc.da.report.util.OSSClientUtil;
import com.adc.da.report.util.ObsBootUtil; import com.adc.da.report.util.ObsBootUtil;
import com.adc.da.util.utils.CollectionUtils;
import com.adc.da.util.utils.FileUtil; import com.adc.da.util.utils.FileUtil;
import com.adc.da.util.utils.UUID; import com.adc.da.util.utils.UUID;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.adc.da.report.eo.ReportContentEntity; import com.adc.da.report.eo.ReportContentEntity;
import com.adc.da.report.service.IReportContentService; import com.adc.da.report.service.IReportContentService;
import com.adc.da.report.dao.mysql.ReportContentDao; import com.adc.da.report.dao.mysql.ReportContentDao;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -22,6 +25,9 @@ import javax.annotation.Resource;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/** /**
* @author Caihaohan * @author Caihaohan
@@ -51,36 +57,50 @@ public class IReportContentServiceImpl extends ServiceImpl<ReportContentDao, Rep
@Resource @Resource
private FileDao fileDao; private FileDao fileDao;
@Resource
private ReportFileDao reportFileDao;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void insertReportContent(String reportId, String fileId) throws IOException { public void insertReportContent(String reportId) throws IOException {
//获取文件 LambdaQueryWrapper<ReportFile> reportFileLambdaQueryWrapper = new LambdaQueryWrapper<>();
FileEntity fileEntity = fileDao.selectById(fileId); reportFileLambdaQueryWrapper.eq(ReportFile::getReportId, reportId);
String path = uploadFile + fileEntity.getSavePath(); List<ReportFile> reportFiles = reportFileDao.selectList(reportFileLambdaQueryWrapper);
FileOutputStream outputStream = new FileOutputStream(path); List<String> fileIds = new ArrayList<>();
// 上传方式:阿里云:alioss 华为云:hwobs if (CollectionUtils.isNotEmpty(reportFiles)) {
if ("hwobs".equals(uploadType)) { fileIds = reportFiles.stream().map(ReportFile::getFileId).collect(Collectors.toList());
obsBootUtil.getFileFromOBS(fileEntity.getSavePath(), outputStream); }
} else if ("alioss".equals(uploadType)) { StringBuilder content = new StringBuilder();
ossClientUtil.getFileFromOSS(fileEntity.getSavePath(), outputStream); for (String fileId : fileIds) {
} else if ("local".equals(uploadType)) { //获取文件
localFileUtil.getFileFromLocal(fileEntity.getSavePath(), outputStream); FileEntity fileEntity = fileDao.selectById(fileId);
String path = uploadFile + fileEntity.getSavePath();
FileOutputStream outputStream = new FileOutputStream(path);
// 上传方式:阿里云:alioss 华为云:hwobs
if ("hwobs".equals(uploadType)) {
obsBootUtil.getFileFromOBS(fileEntity.getSavePath(), outputStream);
} else if ("alioss".equals(uploadType)) {
ossClientUtil.getFileFromOSS(fileEntity.getSavePath(), outputStream);
} else if ("local".equals(uploadType)) {
localFileUtil.getFileFromLocal(fileEntity.getSavePath(), outputStream);
}
File file = new File(path);
//解析出内容
content.append(FileContentUtil.readFileContent(file));
//将文件删除
outputStream.close();
FileUtil.deleteFile(path);
} }
File file = new File(path);
//解析出内容
String content = FileContentUtil.readFileContent(file);
//将内容存入 //将内容存入
ReportContentEntity reportContent = query().eq("report_id", reportId).one(); ReportContentEntity reportContent = query().eq("report_id", reportId).one();
if (reportContent == null) { if (reportContent == null) {
ReportContentEntity reportContentEntity = new ReportContentEntity(UUID.randomUUID10(), reportId, content); ReportContentEntity reportContentEntity = new ReportContentEntity(UUID.randomUUID10(), reportId, content.toString());
save(reportContentEntity); save(reportContentEntity);
} else { } else {
reportContent.setReportContent(content); reportContent.setReportContent(content.toString());
saveOrUpdate(reportContent); saveOrUpdate(reportContent);
} }
//将文件删除
outputStream.close();
FileUtil.deleteFile(path);
} }
} }
@@ -177,8 +177,7 @@ public class IReportServiceImpl extends ServiceImpl<ReportDao, ReportEntity>
} }
//插入报表内容表 //插入报表内容表
try { try {
//TODO FILE iReportContentService.insertReportContent(reportId);
iReportContentService.insertReportContent(reportId, reportEntity.getFileId());
log.info("抽取报告内容"); log.info("抽取报告内容");
} catch (IOException e) { } catch (IOException e) {
log.error("获取报告内容失败", e); log.error("获取报告内容失败", e);
@@ -163,7 +163,7 @@ public class ITtReportManageActServiceImpl extends ServiceImpl<TtReportManageAct
reportFileDao.actEndDelReport(ttReportManageAct.getDataId()); reportFileDao.actEndDelReport(ttReportManageAct.getDataId());
reportFileDao.updateState(ttReportManageAct.getDataId()); reportFileDao.updateState(ttReportManageAct.getDataId());
try { try {
iReportContentService.insertReportContent(ttReportManageAct.getDataId(), ttReportManageAct.getFileId()); iReportContentService.insertReportContent(ttReportManageAct.getDataId());
log.info("抽取报告内容"); log.info("抽取报告内容");
} catch (IOException e) { } catch (IOException e) {
log.error("获取报告内容失败", e); log.error("获取报告内容失败", e);