diff --git a/pqs-common/common-oss/pom.xml b/pqs-common/common-oss/pom.xml
index 128a2d112..64bb047e2 100644
--- a/pqs-common/common-oss/pom.xml
+++ b/pqs-common/common-oss/pom.xml
@@ -27,6 +27,12 @@
1.0.0
+
+ com.njcn
+ common-web
+ 1.0.0
+
+
com.njcn
minioss-springboot-starter
diff --git a/pqs-common/common-oss/src/main/java/com/njcn/oss/enums/OssResponseEnum.java b/pqs-common/common-oss/src/main/java/com/njcn/oss/enums/OssResponseEnum.java
index c26740e26..03af0291f 100644
--- a/pqs-common/common-oss/src/main/java/com/njcn/oss/enums/OssResponseEnum.java
+++ b/pqs-common/common-oss/src/main/java/com/njcn/oss/enums/OssResponseEnum.java
@@ -14,7 +14,9 @@ public enum OssResponseEnum {
* A00550 ~ A00649
*/
UPLOAD_FILE_ERROR("A00551","上传文件服务器错误,请检查数据"),
- DOWNLOAD_FILE_ERROR("A00554","下载文件URL不存在,请检查数据")
+ DOWNLOAD_FILE_URL_ERROR("A00554","下载文件URL不存在,请检查数据"),
+ DOWNLOAD_FILE_STREAM_ERROR("A00555","文件服务器下载文件流异常"),
+ DOWNLOAD_FILE_ERROR("A00556","文件服务器下载异常")
;
diff --git a/pqs-common/common-oss/src/main/java/com/njcn/oss/utils/FileStorageUtil.java b/pqs-common/common-oss/src/main/java/com/njcn/oss/utils/FileStorageUtil.java
index 008e11bae..ccdc51a75 100644
--- a/pqs-common/common-oss/src/main/java/com/njcn/oss/utils/FileStorageUtil.java
+++ b/pqs-common/common-oss/src/main/java/com/njcn/oss/utils/FileStorageUtil.java
@@ -1,5 +1,7 @@
package com.njcn.oss.utils;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.http.HttpUtil;
import com.njcn.common.config.GeneralInfo;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.huawei.obs.util.OBSUtil;
@@ -10,10 +12,14 @@ import com.njcn.oss.constant.GeneralConstant;
import com.njcn.oss.enums.OssResponseEnum;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.tomcat.util.http.fileupload.IOUtils;
+import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
-import java.io.FileInputStream;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
/**
* @author hongawen
@@ -111,6 +117,79 @@ public class FileStorageUtil {
}
+
+ /***
+ * 根据文件路径获取文件流
+ * @author hongawen
+ * @date 2023/3/7 23:04
+ * @param filePath 文件在服务器的路径
+ */
+ public InputStream getFileStream(String filePath){
+ InputStream inputStream;
+ try {
+ if (generalInfo.getBusinessFileStorage() == GeneralConstant.HUAWEI_OBS) {
+ inputStream = obsUtil.downloadStream(filePath);
+ } else {
+ inputStream = minIoUtils.downloadStream(minIossProperties.getBucket(), filePath);
+ }
+ }catch (Exception exception){
+ throw new BusinessException(OssResponseEnum.DOWNLOAD_FILE_STREAM_ERROR);
+ }
+ return inputStream;
+ }
+
+ /***
+ * 根据文件路径获取文件流并下载
+ * @author hongawen
+ * @date 2023/3/7 23:04
+ * @param filePath 文件在服务器的路径
+ */
+ public void downloadStream(HttpServletResponse response, String filePath) throws IOException {
+ InputStream inputStream;
+ OutputStream toClient = null;
+ try{
+ if (generalInfo.getBusinessFileStorage() == GeneralConstant.HUAWEI_OBS) {
+ inputStream = obsUtil.downloadStream(filePath);
+ } else {
+ inputStream = minIoUtils.downloadStream(minIossProperties.getBucket(), filePath);
+ }
+ }catch (Exception exception){
+ throw new BusinessException(OssResponseEnum.DOWNLOAD_FILE_STREAM_ERROR);
+ }
+ String fileType = filePath.substring(filePath.lastIndexOf('.')).toLowerCase();
+ switch (fileType){
+ case "jpg":
+ case "jpeg":
+ case "png":
+ case "gif":
+ response.setContentType(MediaType.IMAGE_PNG_VALUE);
+ break;
+ case "pdf":
+ response.setContentType("application/pdf");
+ response.setHeader("Content-Disposition", "attachment;filename=" + filePath);
+ break;
+ default:
+ response.setContentType("application/octet-stream;charset=UTF-8");
+ response.setHeader("Content-Disposition", "attachment;filename=" + filePath);
+ break;
+ }
+ try {
+ toClient = new BufferedOutputStream(response.getOutputStream());
+ //通过IOUtils对接输入输出流,实现文件下载
+ IOUtils.copy(inputStream, toClient);
+ toClient.flush();
+ } catch (Exception e) {
+ throw new BusinessException(OssResponseEnum.DOWNLOAD_FILE_STREAM_ERROR);
+ } finally {
+ IOUtils.closeQuietly(inputStream);
+ IOUtils.closeQuietly(toClient);
+ }
+
+ }
+
+
+
+
/***
* 根据文件路径删除指定文件对象
* @author hongawen
diff --git a/pqs-event/event-boot/src/test/java/com/njcn/event/EventBootApplicationTest.java b/pqs-event/event-boot/src/test/java/com/njcn/event/EventBootApplicationTest.java
index aa4e69c66..b42944989 100644
--- a/pqs-event/event-boot/src/test/java/com/njcn/event/EventBootApplicationTest.java
+++ b/pqs-event/event-boot/src/test/java/com/njcn/event/EventBootApplicationTest.java
@@ -141,8 +141,8 @@ public class EventBootApplicationTest {
String cfgPath = OssPath.WAVE_DIR+"192.168.1.190/PQMonitor_PQM1_002438_20210508_092859_938.CFG";
String datPath = OssPath.WAVE_DIR+"192.168.1.190/PQMonitor_PQM1_002438_20210508_092859_938.DAT";
- InputStream cfgStream =obsUtil.fileDownload(cfgPath);
- InputStream datStream =obsUtil.fileDownload(datPath);
+ InputStream cfgStream =obsUtil.downloadStream(cfgPath);
+ InputStream datStream =obsUtil.downloadStream(datPath);
if(Objects.isNull(cfgStream) || Objects.isNull(datStream)){
throw new FileNotFoundException(EventResponseEnum.ANALYSEWAVE_NOT_FOUND.getMessage());
diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/enums/HarmonicResponseEnum.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/enums/HarmonicResponseEnum.java
index ad4859128..bd60e8316 100644
--- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/enums/HarmonicResponseEnum.java
+++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/enums/HarmonicResponseEnum.java
@@ -27,6 +27,9 @@ public enum HarmonicResponseEnum {
CUSTOM_REPORT_ACTIVE("A00556","不存在激活的自定义报告模板"),
CUSTOM_REPORT_EMPTY("A00557","自定义报表模板异常,模板数据为空"),
CUSTOM_REPORT_FILE("A00558","上传文件服务器错误,请检查数据"),
+
+ REPORT_DOWNLOAD_ERROR("A00559","报表文件下载异常"),
+ REPORT_TEMPLATE_DOWNLOAD_ERROR("A00560","报表模板下载异常"),
;
private final String code;
diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/CustomReportController.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/CustomReportController.java
index eb5704bbc..7cb5bc2e4 100644
--- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/CustomReportController.java
+++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/CustomReportController.java
@@ -23,6 +23,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
import java.util.List;
/**
@@ -124,6 +126,19 @@ public class CustomReportController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, excelRptTemp, methodDescribe);
}
+ /**
+ * 根据id回显模板
+ * @author qijian
+ * @date 2022/10/14
+ */
+ @OperateInfo(info = LogEnum.BUSINESS_COMMON)
+ @GetMapping("/viewCustomReportTemplateById")
+ @ApiOperation("根据id查询模板详情")
+ @ApiImplicitParam(name = "id", value = "id", required = true)
+ public void viewCustomReportTemplateById(@RequestParam("id") String id,HttpServletResponse response){
+ customReportService.viewCustomReportTemplateById(id,response);
+ }
+
/**
* 修改自定义报表模板
* @author qijian
@@ -219,10 +234,10 @@ public class CustomReportController extends BaseController {
@PostMapping("/getCustomReport")
@ApiOperation("获取报表")
@ApiImplicitParam(name = "reportSearchParam", value = "查询体", required = false)
- public HttpResult> getCustomReport(@RequestBody ReportSearchParam reportSearchParam){
+ public void getCustomReport(@RequestBody ReportSearchParam reportSearchParam, HttpServletResponse response) {
String methodDescribe = getMethodDescribe("getCustomReport");
- List res = customReportService.getCustomReport(reportSearchParam);
- return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, res, methodDescribe);
+ customReportService.getCustomReport(reportSearchParam,response);
+// return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, res, methodDescribe);
}
diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/CustomReportService.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/CustomReportService.java
index 3a8f728bc..5efeafee0 100644
--- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/CustomReportService.java
+++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/CustomReportService.java
@@ -7,6 +7,8 @@ import com.njcn.harmonic.pojo.vo.ReportTemplateVO;
import com.njcn.harmonic.pojo.vo.ReportTreeVO;
import com.njcn.harmonic.pojo.vo.SysDeptTempVO;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
import java.util.List;
/**
@@ -66,11 +68,13 @@ public interface CustomReportService {
/**
* 替换报表数据并返回
+ *
* @param reportSearchParam 请求参数
+ * @param response
* @author qijian
* @date 2022/10/18
*/
- List getCustomReport(ReportSearchParam reportSearchParam);
+ void getCustomReport(ReportSearchParam reportSearchParam, HttpServletResponse response);
/**
@@ -100,4 +104,6 @@ public interface CustomReportService {
* @date 2022/10/18
*/
List getTemplateByDept(String id);
+
+ void viewCustomReportTemplateById(String id, HttpServletResponse response);
}
diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/CustomReportServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/CustomReportServiceImpl.java
index 144a4dd2d..1b9f7f35e 100644
--- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/CustomReportServiceImpl.java
+++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/CustomReportServiceImpl.java
@@ -1,12 +1,9 @@
package com.njcn.harmonic.service.impl;
-import ch.qos.logback.core.rolling.helper.FileStoreUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
-import cn.hutool.json.JSONArray;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
+import cn.hutool.json.*;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.njcn.common.config.GeneralInfo;
import com.njcn.common.pojo.enums.common.DataStateEnum;
@@ -31,6 +28,7 @@ import com.njcn.influxdb.param.InfluxDBSqlConstant;
import com.njcn.influxdb.param.InfluxDBTableConstant;
import com.njcn.influxdb.utils.InfluxDbUtils;
import com.njcn.oss.constant.OssPath;
+import com.njcn.oss.enums.OssResponseEnum;
import com.njcn.oss.utils.FileStorageUtil;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.user.api.DeptFeignClient;
@@ -50,7 +48,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
-import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URL;
import java.nio.charset.StandardCharsets;
@@ -180,11 +178,20 @@ public class CustomReportServiceImpl implements CustomReportService {
@Override
public ExcelRptTemp getCustomReportTemplateById(String id) {
ExcelRptTemp excelRptTemp = excelRptTempMapper.selectById(id);
- String contentUrl = fileStorageUtil.getFileUrl(excelRptTemp.getContent());
- excelRptTemp.setContent(contentUrl);
return excelRptTemp;
}
+ @Override
+ public void viewCustomReportTemplateById(String id,HttpServletResponse response){
+ ExcelRptTemp excelRptTemp = excelRptTempMapper.selectById(id);
+ try{
+ fileStorageUtil.downloadStream(response,excelRptTemp.getContent());
+ }catch (Exception exception){
+ throw new BusinessException(HarmonicResponseEnum.REPORT_TEMPLATE_DOWNLOAD_ERROR);
+ }
+
+ }
+
@Override
public List getTemplateList(ReportSearchParam reportSearchParam) {
return excelRptTempMapper.getReportTemplateList(reportSearchParam);
@@ -214,28 +221,25 @@ public class CustomReportServiceImpl implements CustomReportService {
@Override
- public List getCustomReport(ReportSearchParam reportSearchParam) {
- List results = new ArrayList<>();
+ public void getCustomReport(ReportSearchParam reportSearchParam, HttpServletResponse response) {
ExcelRptTemp excelRptTemp = excelRptTempMapper.selectById(reportSearchParam.getTempId());
if (Objects.isNull(excelRptTemp)) {
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_ACTIVE);
}
-
//先查询库里是否存在已解析的报表数据,存在直接返回/不存在解析数据
LambdaQueryWrapper lambdaQuery = new LambdaQueryWrapper<>();
lambdaQuery.eq(ExcelRpt::getLineId, reportSearchParam.getLineId()).eq(ExcelRpt::getTempId, reportSearchParam.getTempId());
List excelRpts = excelRptMapper.selectList(lambdaQuery);
- String content;
- if (excelRpts.size() > 0) {
- content = fileStorageUtil.getFileUrl(excelRpts.get(0).getContent());
- } else {
- content = fileStorageUtil.getFileUrl(analyzeReport(reportSearchParam, excelRptTemp));
+ try{
+ if (excelRpts.size() > 0) {
+ fileStorageUtil.downloadStream(response, excelRpts.get(0).getContent());
+ } else {
+ fileStorageUtil.downloadStream(response, analyzeReport(reportSearchParam, excelRptTemp));
+ }
+ }catch (Exception exception){
+ throw new BusinessException(HarmonicResponseEnum.REPORT_DOWNLOAD_ERROR);
}
- //拼接数据
- results.add(excelRptTemp.getReportForm());
- results.add(content);
- return results;
}
@@ -356,8 +360,10 @@ public class CustomReportServiceImpl implements CustomReportService {
JSONArray jsonArray = null;
try {
//通过文件服务器获取
- String objectUrl = fileStorageUtil.getFileUrl(excelRptTemp.getContent());
- jsonArray = JSONUtil.parseArray(urlToString(objectUrl));
+// String objectUrl = fileStorageUtil.getFileUrl(excelRptTemp.getContent());
+// jsonArray = JSONUtil.parseArray(urlToString(objectUrl));
+ InputStream fileStream = fileStorageUtil.getFileStream(excelRptTemp.getContent());
+ jsonArray = new JSONArray(new JSONTokener(fileStream, new JSONConfig()));
jsonArray.forEach(item -> {
JSONObject jsonObject = (JSONObject) item;
JSONArray itemArr = (JSONArray) jsonObject.get("celldata");
@@ -471,6 +477,7 @@ public class CustomReportServiceImpl implements CustomReportService {
return newContent;
}
+
/**
* 组装influxDB查询sql,查询value并封装endlist
*
diff --git a/pqs-prepare/harmonic-prepare/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/ReportServiceImpl.java b/pqs-prepare/harmonic-prepare/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/ReportServiceImpl.java
index 76167cec2..387d6ec35 100644
--- a/pqs-prepare/harmonic-prepare/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/ReportServiceImpl.java
+++ b/pqs-prepare/harmonic-prepare/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/ReportServiceImpl.java
@@ -3,9 +3,7 @@ package com.njcn.prepare.harmonic.service.mysql.Impl.line;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
-import cn.hutool.json.JSONArray;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
+import cn.hutool.json.*;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.njcn.common.config.GeneralInfo;
import com.njcn.common.pojo.constant.BizParamConstant;
@@ -96,8 +94,10 @@ public class ReportServiceImpl implements ReportService {
for (ExcelRptTemp excelRptTemp : reportTemplateList) {
try {
//获取content解析数据
- String objectUrl = fileStorageUtil.getFileUrl(excelRptTemp.getContent());
- jsonArray = JSONUtil.parseArray(urlToString(objectUrl));
+// String objectUrl = fileStorageUtil.getFileUrl(excelRptTemp.getContent());
+// jsonArray = JSONUtil.parseArray(urlToString(objectUrl));
+ InputStream fileStream = fileStorageUtil.getFileStream(excelRptTemp.getContent());
+ jsonArray = new JSONArray(new JSONTokener(fileStream, new JSONConfig()));
dataList = getDataList(jsonArray);
} catch (Exception e) {
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);