代码调整
This commit is contained in:
@@ -0,0 +1,60 @@
|
|||||||
|
package com.njcn.common.utils;
|
||||||
|
|
||||||
|
import cn.hutool.core.text.StrPool;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author hongawen
|
||||||
|
* @version 1.0.0
|
||||||
|
* @date 2023年04月19日 16:02
|
||||||
|
*/
|
||||||
|
public class FileUtil {
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 随机生成文件名
|
||||||
|
* @author hongawen
|
||||||
|
* @date 2023/4/19 16:02
|
||||||
|
* @param originalFileName 原文件名
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public static String generateFileName(String originalFileName) {
|
||||||
|
String suffix;
|
||||||
|
if (originalFileName.contains(StrPool.DOT)) {
|
||||||
|
suffix = originalFileName.substring(originalFileName.lastIndexOf(StrPool.DOT));
|
||||||
|
} else {
|
||||||
|
suffix = StrPool.DOT + originalFileName;
|
||||||
|
}
|
||||||
|
return UUID.randomUUID().toString().replace("-", "").toUpperCase() + suffix;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MultipartFile 转 String
|
||||||
|
*
|
||||||
|
* @param multipartFile 原字符串
|
||||||
|
* @return 成功标记
|
||||||
|
*/
|
||||||
|
public static String multipartFileToString(MultipartFile multipartFile) {
|
||||||
|
StringBuilder txtResult = new StringBuilder();
|
||||||
|
try (
|
||||||
|
InputStreamReader isr = new InputStreamReader(multipartFile.getInputStream(), StandardCharsets.UTF_8);
|
||||||
|
BufferedReader br = new BufferedReader(isr)
|
||||||
|
) {
|
||||||
|
String lineTxt;
|
||||||
|
while ((lineTxt = br.readLine()) != null) {
|
||||||
|
txtResult.append(lineTxt);
|
||||||
|
}
|
||||||
|
return txtResult.toString();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -59,7 +59,7 @@ public interface InfluxDBSqlConstant {
|
|||||||
/**
|
/**
|
||||||
* " as value "
|
* " as value "
|
||||||
*/
|
*/
|
||||||
String AS_VALUE = StrPool.C_SPACE+"as value"+StrPool.C_SPACE;
|
String AS_VALUE = StrPool.C_SPACE + "as value" + StrPool.C_SPACE;
|
||||||
|
|
||||||
String EQ = "=";
|
String EQ = "=";
|
||||||
String QM = "'";
|
String QM = "'";
|
||||||
@@ -99,7 +99,7 @@ public interface InfluxDBSqlConstant {
|
|||||||
/**
|
/**
|
||||||
* 时间
|
* 时间
|
||||||
*/
|
*/
|
||||||
String TIME = "time";
|
String TIME = "time" + StrPool.C_SPACE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 每天固定时间分钟
|
* 每天固定时间分钟
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package com.njcn.oss.utils;
|
package com.njcn.oss.utils;
|
||||||
|
|
||||||
|
import cn.hutool.core.text.CharPool;
|
||||||
|
import cn.hutool.core.text.StrPool;
|
||||||
import com.njcn.common.config.GeneralInfo;
|
import com.njcn.common.config.GeneralInfo;
|
||||||
import com.njcn.common.pojo.exception.BusinessException;
|
import com.njcn.common.pojo.exception.BusinessException;
|
||||||
import com.njcn.huawei.obs.util.OBSUtil;
|
import com.njcn.huawei.obs.util.OBSUtil;
|
||||||
@@ -17,6 +19,7 @@ import org.springframework.web.multipart.MultipartFile;
|
|||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author hongawen
|
* @author hongawen
|
||||||
@@ -75,19 +78,19 @@ public class FileStorageUtil {
|
|||||||
* 上传InputStream流,
|
* 上传InputStream流,
|
||||||
* @author hongawen
|
* @author hongawen
|
||||||
* @date 2023/3/7 22:48
|
* @date 2023/3/7 22:48
|
||||||
* @param fileStream 文件源
|
* @param inputStream 文件源
|
||||||
* @param dir 服务器文件存放路径
|
* @param dir 服务器文件存放路径
|
||||||
* @param fileName 原始文件名
|
* @param fileName 原始文件名
|
||||||
*/
|
*/
|
||||||
public String uploadStream(FileInputStream fileStream, String dir, String fileName) {
|
public String uploadStream(InputStream inputStream, String dir, String fileName) {
|
||||||
String filePath;
|
String filePath;
|
||||||
if (generalInfo.getBusinessFileStorage() == GeneralConstant.HUAWEI_OBS) {
|
if (generalInfo.getBusinessFileStorage() == GeneralConstant.HUAWEI_OBS) {
|
||||||
filePath = dir + minIoUtils.minFileName(fileName);
|
filePath = dir + minIoUtils.minFileName(fileName);
|
||||||
obsUtil.uploadStream(fileStream, filePath);
|
obsUtil.uploadStream(inputStream, filePath);
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
//把名称存入数据
|
//把名称存入数据
|
||||||
MinIoUploadResDTO minIoUploadResDTO = minIoUtils.uploadStream(fileStream, minIossProperties.getBucket(), dir, minIoUtils.minFileName(fileName));
|
MinIoUploadResDTO minIoUploadResDTO = minIoUtils.uploadStream(inputStream, minIossProperties.getBucket(), dir, minIoUtils.minFileName(fileName));
|
||||||
filePath = minIoUploadResDTO.getMinFileName();
|
filePath = minIoUploadResDTO.getMinFileName();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new BusinessException(OssResponseEnum.UPLOAD_FILE_ERROR);
|
throw new BusinessException(OssResponseEnum.UPLOAD_FILE_ERROR);
|
||||||
@@ -218,4 +221,6 @@ public class FileStorageUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,13 +2,16 @@ package com.njcn.harmonic.service.impl;
|
|||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.io.IoUtil;
|
||||||
import cn.hutool.core.text.StrPool;
|
import cn.hutool.core.text.StrPool;
|
||||||
|
import cn.hutool.core.util.CharsetUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.*;
|
import cn.hutool.json.*;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.njcn.common.config.GeneralInfo;
|
import com.njcn.common.config.GeneralInfo;
|
||||||
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
||||||
import com.njcn.common.pojo.exception.BusinessException;
|
import com.njcn.common.pojo.exception.BusinessException;
|
||||||
|
import com.njcn.common.utils.FileUtil;
|
||||||
import com.njcn.harmonic.enums.HarmonicResponseEnum;
|
import com.njcn.harmonic.enums.HarmonicResponseEnum;
|
||||||
import com.njcn.harmonic.mapper.DeptTempMapper;
|
import com.njcn.harmonic.mapper.DeptTempMapper;
|
||||||
import com.njcn.harmonic.mapper.EleEpdMapper;
|
import com.njcn.harmonic.mapper.EleEpdMapper;
|
||||||
@@ -94,10 +97,9 @@ public class CustomReportServiceImpl implements CustomReportService {
|
|||||||
public boolean addCustomReportTemplate(ReportTemplateParam reportTemplateParam) {
|
public boolean addCustomReportTemplate(ReportTemplateParam reportTemplateParam) {
|
||||||
checkName(reportTemplateParam, false);
|
checkName(reportTemplateParam, false);
|
||||||
MultipartFile fileContent = reportTemplateParam.getFileContent();
|
MultipartFile fileContent = reportTemplateParam.getFileContent();
|
||||||
String fileName = fileContent.getName();
|
|
||||||
//检验模板json数据规范
|
//检验模板json数据规范
|
||||||
try {
|
try {
|
||||||
String content = MultipartFileToString(fileContent);
|
String content = FileUtil.multipartFileToString(fileContent);
|
||||||
new JSONArray(content);
|
new JSONArray(content);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
|
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
|
||||||
@@ -129,7 +131,7 @@ public class CustomReportServiceImpl implements CustomReportService {
|
|||||||
MultipartFile fileContent = reportTemplateParam.getFileContent();
|
MultipartFile fileContent = reportTemplateParam.getFileContent();
|
||||||
//检验模板json数据规范
|
//检验模板json数据规范
|
||||||
try {
|
try {
|
||||||
String content = MultipartFileToString(fileContent);
|
String content = FileUtil.multipartFileToString(fileContent);
|
||||||
new JSONArray(content);
|
new JSONArray(content);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
|
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
|
||||||
@@ -366,10 +368,8 @@ public class CustomReportServiceImpl implements CustomReportService {
|
|||||||
//根据content,获取v值并进行处理
|
//根据content,获取v值并进行处理
|
||||||
List<ReportTemplateDTO> reportTemplateDTOList = new ArrayList<>();
|
List<ReportTemplateDTO> reportTemplateDTOList = new ArrayList<>();
|
||||||
JSONArray jsonArray;
|
JSONArray jsonArray;
|
||||||
InputStream fileStream = null;
|
try(InputStream fileStream = fileStorageUtil.getFileStream(excelRptTemp.getContent())) {
|
||||||
try {
|
|
||||||
//通过文件服务器获取
|
//通过文件服务器获取
|
||||||
fileStream = fileStorageUtil.getFileStream(excelRptTemp.getContent());
|
|
||||||
jsonArray = new JSONArray(new JSONTokener(fileStream, new JSONConfig()));
|
jsonArray = new JSONArray(new JSONTokener(fileStream, new JSONConfig()));
|
||||||
jsonArray.forEach(item -> {
|
jsonArray.forEach(item -> {
|
||||||
JSONObject jsonObject = (JSONObject) item;
|
JSONObject jsonObject = (JSONObject) item;
|
||||||
@@ -412,8 +412,6 @@ public class CustomReportServiceImpl implements CustomReportService {
|
|||||||
});
|
});
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
|
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
|
||||||
} finally {
|
|
||||||
IOUtils.closeQuietly(fileStream);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ReportTemplateDTO> endList = new ArrayList<>();
|
List<ReportTemplateDTO> endList = new ArrayList<>();
|
||||||
@@ -421,13 +419,13 @@ public class CustomReportServiceImpl implements CustomReportService {
|
|||||||
//开始组织sql
|
//开始组织sql
|
||||||
reportTemplateDTOList.stream().forEach(data -> {
|
reportTemplateDTOList.stream().forEach(data -> {
|
||||||
StringBuilder sql = new StringBuilder(InfluxDBSqlConstant.SELECT);
|
StringBuilder sql = new StringBuilder(InfluxDBSqlConstant.SELECT);
|
||||||
if (InfluxDBTableConstant.MAX.equals(data.getStatMethod())) {
|
if (InfluxDBTableConstant.MAX.equalsIgnoreCase(data.getStatMethod())) {
|
||||||
assSql(data, sql, endList, InfluxDBSqlConstant.MAX, reportSearchParam);
|
assSql(data, sql, endList, InfluxDBSqlConstant.MAX, reportSearchParam);
|
||||||
} else if (InfluxDBTableConstant.MIN.equals(data.getStatMethod())) {
|
} else if (InfluxDBTableConstant.MIN.equalsIgnoreCase(data.getStatMethod())) {
|
||||||
assSql(data, sql, endList, InfluxDBSqlConstant.MIN, reportSearchParam);
|
assSql(data, sql, endList, InfluxDBSqlConstant.MIN, reportSearchParam);
|
||||||
} else if (InfluxDBTableConstant.AVG.equals(data.getStatMethod())) {
|
} else if (InfluxDBTableConstant.AVG.equalsIgnoreCase(data.getStatMethod())) {
|
||||||
assSql(data, sql, endList, InfluxDBSqlConstant.AVG, reportSearchParam);
|
assSql(data, sql, endList, InfluxDBSqlConstant.AVG, reportSearchParam);
|
||||||
} else if (InfluxDBTableConstant.CP95.equals(data.getStatMethod())) {
|
} else if (InfluxDBTableConstant.CP95.equalsIgnoreCase(data.getStatMethod())) {
|
||||||
assSql(data, sql, endList, InfluxDBSqlConstant.CP95, reportSearchParam);
|
assSql(data, sql, endList, InfluxDBSqlConstant.CP95, reportSearchParam);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -463,9 +461,8 @@ public class CustomReportServiceImpl implements CustomReportService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
File newFile = stringToFile(jsonArray.toString());
|
InputStream reportStream = IoUtil.toStream(jsonArray.toString(), CharsetUtil.UTF_8);
|
||||||
MultipartFile newMultipartFile = getMultipartFile(newFile);
|
String newContent = fileStorageUtil.uploadStream(reportStream, OssPath.HARMONIC_EXCEL_REPORT, FileUtil.generateFileName("json"));
|
||||||
String newContent = fileStorageUtil.uploadMultipart(newMultipartFile, OssPath.HARMONIC_EXCEL_REPORT);
|
|
||||||
|
|
||||||
//存入报表库
|
//存入报表库
|
||||||
ExcelRpt excelRpt = new ExcelRpt();
|
ExcelRpt excelRpt = new ExcelRpt();
|
||||||
@@ -475,12 +472,8 @@ public class CustomReportServiceImpl implements CustomReportService {
|
|||||||
excelRpt.setTempId(excelRptTemp.getId());
|
excelRpt.setTempId(excelRptTemp.getId());
|
||||||
excelRpt.setContent(newContent);
|
excelRpt.setContent(newContent);
|
||||||
excelRpt.setType(reportSearchParam.getType());
|
excelRpt.setType(reportSearchParam.getType());
|
||||||
//根据模板激活状态,判断是否进库(修改State字段:0未进库 1已进库)
|
excelRpt.setState(DataStateEnum.ENABLE.getCode());
|
||||||
if (DataStateEnum.ENABLE.getCode().equals(reportSearchParam.getActivation())) {
|
|
||||||
excelRpt.setState(DataStateEnum.ENABLE.getCode());
|
|
||||||
} else {
|
|
||||||
excelRpt.setState(DataStateEnum.DELETED.getCode());
|
|
||||||
}
|
|
||||||
excelRptMapper.insert(excelRpt);
|
excelRptMapper.insert(excelRpt);
|
||||||
|
|
||||||
return newContent;
|
return newContent;
|
||||||
@@ -497,30 +490,54 @@ public class CustomReportServiceImpl implements CustomReportService {
|
|||||||
|
|
||||||
//cp95函数特殊处理 PERCENTILE(field_key, N)
|
//cp95函数特殊处理 PERCENTILE(field_key, N)
|
||||||
if (InfluxDBSqlConstant.CP95.equals(method)) {
|
if (InfluxDBSqlConstant.CP95.equals(method)) {
|
||||||
sql.append(method).append(InfluxDBSqlConstant.LBK).append(data.getTemplateName()).append(InfluxDBSqlConstant.NUM_95).append(InfluxDBSqlConstant.RBK).append(InfluxDBSqlConstant.AS_VALUE);
|
sql.append(method)
|
||||||
|
.append(InfluxDBSqlConstant.LBK)
|
||||||
|
.append(data.getTemplateName())
|
||||||
|
.append(InfluxDBSqlConstant.NUM_95)
|
||||||
|
.append(InfluxDBSqlConstant.RBK)
|
||||||
|
.append(InfluxDBSqlConstant.AS_VALUE);
|
||||||
} else {
|
} else {
|
||||||
sql.append(method).append(InfluxDBSqlConstant.LBK).append(data.getTemplateName()).append(InfluxDBSqlConstant.RBK).append(InfluxDBSqlConstant.AS_VALUE);
|
sql.append(method)
|
||||||
|
.append(InfluxDBSqlConstant.LBK)
|
||||||
|
.append(data.getTemplateName())
|
||||||
|
.append(InfluxDBSqlConstant.RBK)
|
||||||
|
.append(InfluxDBSqlConstant.AS_VALUE);
|
||||||
}
|
}
|
||||||
sql.append(InfluxDBSqlConstant.FROM).append(data.getClassId()).append(InfluxDBSqlConstant.WHERE).append(InfluxDBTableConstant.LINE_ID).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(reportSearchParam.getLineId()).append(InfluxDBSqlConstant.QM);
|
sql.append(InfluxDBSqlConstant.FROM)
|
||||||
|
.append(data.getClassId())
|
||||||
|
.append(InfluxDBSqlConstant.WHERE)
|
||||||
|
.append(InfluxDBTableConstant.LINE_ID)
|
||||||
|
.append(InfluxDBSqlConstant.EQ)
|
||||||
|
.append(InfluxDBSqlConstant.QM)
|
||||||
|
.append(reportSearchParam.getLineId())
|
||||||
|
.append(InfluxDBSqlConstant.QM);
|
||||||
//相别特殊处理
|
//相别特殊处理
|
||||||
if (!InfluxDBTableConstant.NO_PHASE.equals(data.getPhase())) {
|
if (!InfluxDBTableConstant.NO_PHASE.equals(data.getPhase())) {
|
||||||
sql.append(InfluxDBSqlConstant.AND).append(InfluxDBTableConstant.PHASIC_TYPE).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(data.getPhase()).append(InfluxDBSqlConstant.QM);
|
sql.append(InfluxDBSqlConstant.AND)
|
||||||
|
.append(InfluxDBTableConstant.PHASIC_TYPE)
|
||||||
|
.append(InfluxDBSqlConstant.EQ)
|
||||||
|
.append(InfluxDBSqlConstant.QM)
|
||||||
|
.append(data.getPhase())
|
||||||
|
.append(InfluxDBSqlConstant.QM);
|
||||||
}
|
}
|
||||||
|
|
||||||
//data_flicker、data_fluc、data_plt 无 value_type
|
//data_flicker、data_fluc、data_plt 无 value_type
|
||||||
if (!InfluxDBTableConstant.DATA_FLICKER.equals(data.getClassId()) && !InfluxDBTableConstant.DATA_FLUC.equals(data.getClassId()) && !InfluxDBTableConstant.DATA_PLT.equals(data.getClassId())) {
|
if (!InfluxDBTableConstant.DATA_FLICKER.equals(data.getClassId()) && !InfluxDBTableConstant.DATA_FLUC.equals(data.getClassId()) && !InfluxDBTableConstant.DATA_PLT.equals(data.getClassId())) {
|
||||||
sql.append(InfluxDBSqlConstant.AND).append(InfluxDBTableConstant.VALUE_TYPE).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(data.getStatMethod()).append(InfluxDBSqlConstant.QM);
|
sql.append(InfluxDBSqlConstant.AND)
|
||||||
|
.append(InfluxDBTableConstant.VALUE_TYPE)
|
||||||
|
.append(InfluxDBSqlConstant.EQ)
|
||||||
|
.append(InfluxDBSqlConstant.QM)
|
||||||
|
.append(data.getStatMethod())
|
||||||
|
.append(InfluxDBSqlConstant.QM);
|
||||||
}
|
}
|
||||||
//时间范围处理
|
//时间范围处理
|
||||||
sql
|
sql
|
||||||
.append(InfluxDBSqlConstant.AND)
|
.append(InfluxDBSqlConstant.AND)
|
||||||
.append("time ").append(InfluxDBSqlConstant.GE).append("'").append(reportSearchParam.getStartTime()).append(InfluxDBSqlConstant.START_TIME).append("'")
|
.append(InfluxDBSqlConstant.TIME).append(InfluxDBSqlConstant.GE).append(InfluxDBSqlConstant.QM).append(reportSearchParam.getStartTime()).append(InfluxDBSqlConstant.START_TIME).append(InfluxDBSqlConstant.QM)
|
||||||
.append(InfluxDBSqlConstant.AND)
|
.append(InfluxDBSqlConstant.AND)
|
||||||
.append("time ").append(InfluxDBSqlConstant.LT).append("'").append(reportSearchParam.getEndTime()).append(InfluxDBSqlConstant.END_TIME).append("'");
|
.append(InfluxDBSqlConstant.TIME).append(InfluxDBSqlConstant.LT).append(InfluxDBSqlConstant.QM).append(reportSearchParam.getEndTime()).append(InfluxDBSqlConstant.END_TIME).append(InfluxDBSqlConstant.QM);
|
||||||
|
|
||||||
|
|
||||||
sql.append(InfluxDBSqlConstant.TZ);
|
sql.append(InfluxDBSqlConstant.TZ);
|
||||||
System.out.println(sql);
|
|
||||||
//根据不同的库表赋值
|
//根据不同的库表赋值
|
||||||
QueryResult queryResult = influxDbUtils.query(String.valueOf(sql));
|
QueryResult queryResult = influxDbUtils.query(String.valueOf(sql));
|
||||||
|
|
||||||
@@ -548,109 +565,5 @@ public class CustomReportServiceImpl implements CustomReportService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 文件Url 转 String
|
|
||||||
*
|
|
||||||
* @param objectUrl 文件url
|
|
||||||
* @return 成功标记
|
|
||||||
*/
|
|
||||||
private String urlToString(String objectUrl) throws IOException {
|
|
||||||
URL url = new URL(objectUrl);
|
|
||||||
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
|
|
||||||
StringBuffer buffer = new StringBuffer();
|
|
||||||
String line = " ";
|
|
||||||
while ((line = in.readLine()) != null) {
|
|
||||||
buffer.append(line);
|
|
||||||
}
|
|
||||||
return buffer.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 字符串写入指定文件
|
|
||||||
*
|
|
||||||
* @param res 原字符串
|
|
||||||
* @return 成功标记
|
|
||||||
*/
|
|
||||||
public File stringToFile(String res) {
|
|
||||||
BufferedReader bufferedReader = null;
|
|
||||||
BufferedWriter bufferedWriter = null;
|
|
||||||
String businessTempPath = generalInfo.getBusinessTempPath();
|
|
||||||
File distFile = new File(businessTempPath + File.separator + "temp.json");
|
|
||||||
try {
|
|
||||||
if (!distFile.getParentFile().exists()) {
|
|
||||||
distFile.getParentFile().mkdirs();
|
|
||||||
}
|
|
||||||
bufferedReader = new BufferedReader(new StringReader(res));
|
|
||||||
bufferedWriter = new BufferedWriter(new FileWriter(distFile));
|
|
||||||
bufferedWriter.write("");
|
|
||||||
char buf[] = new char[1024]; //字符缓冲区
|
|
||||||
int len;
|
|
||||||
while ((len = bufferedReader.read(buf)) != -1) {
|
|
||||||
bufferedWriter.write(buf, 0, len);
|
|
||||||
}
|
|
||||||
bufferedWriter.flush();
|
|
||||||
bufferedReader.close();
|
|
||||||
bufferedWriter.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
} finally {
|
|
||||||
if (bufferedReader != null) {
|
|
||||||
try {
|
|
||||||
bufferedReader.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return distFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* MultipartFile 转 String
|
|
||||||
*
|
|
||||||
* @param multipartFile 原字符串
|
|
||||||
* @return 成功标记
|
|
||||||
*/
|
|
||||||
private String MultipartFileToString(MultipartFile multipartFile) {
|
|
||||||
InputStreamReader isr;
|
|
||||||
BufferedReader br;
|
|
||||||
StringBuilder txtResult = new StringBuilder();
|
|
||||||
try {
|
|
||||||
isr = new InputStreamReader(multipartFile.getInputStream(), StandardCharsets.UTF_8);
|
|
||||||
br = new BufferedReader(isr);
|
|
||||||
String lineTxt;
|
|
||||||
while ((lineTxt = br.readLine()) != null) {
|
|
||||||
txtResult.append(lineTxt);
|
|
||||||
}
|
|
||||||
isr.close();
|
|
||||||
br.close();
|
|
||||||
return txtResult.toString();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* File 转 MultipartFile
|
|
||||||
*
|
|
||||||
* @param file 原字符串
|
|
||||||
* @return 成功标记
|
|
||||||
*/
|
|
||||||
public static MultipartFile getMultipartFile(File file) {
|
|
||||||
FileItem item = new DiskFileItemFactory().createItem("file"
|
|
||||||
, MediaType.MULTIPART_FORM_DATA_VALUE
|
|
||||||
, true
|
|
||||||
, file.getName());
|
|
||||||
try (InputStream input = new FileInputStream(file);
|
|
||||||
OutputStream os = item.getOutputStream()) {
|
|
||||||
// 流转移
|
|
||||||
IOUtils.copy(input, os);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new IllegalArgumentException("Invalid file: " + e, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new CommonsMultipartFile(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil;
|
|||||||
import cn.hutool.core.date.DatePattern;
|
import cn.hutool.core.date.DatePattern;
|
||||||
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateTime;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.io.IoUtil;
|
||||||
|
import cn.hutool.core.util.CharsetUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.*;
|
import cn.hutool.json.*;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
@@ -11,6 +13,7 @@ import com.njcn.common.config.GeneralInfo;
|
|||||||
import com.njcn.common.pojo.constant.BizParamConstant;
|
import com.njcn.common.pojo.constant.BizParamConstant;
|
||||||
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
||||||
import com.njcn.common.pojo.exception.BusinessException;
|
import com.njcn.common.pojo.exception.BusinessException;
|
||||||
|
import com.njcn.common.utils.FileUtil;
|
||||||
import com.njcn.device.pq.api.DeptLineFeignClient;
|
import com.njcn.device.pq.api.DeptLineFeignClient;
|
||||||
import com.njcn.harmonic.enums.HarmonicResponseEnum;
|
import com.njcn.harmonic.enums.HarmonicResponseEnum;
|
||||||
import com.njcn.harmonic.pojo.dto.ReportTemplateDTO;
|
import com.njcn.harmonic.pojo.dto.ReportTemplateDTO;
|
||||||
@@ -30,7 +33,7 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.fileupload.FileItem;
|
import org.apache.commons.fileupload.FileItem;
|
||||||
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
|
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.tomcat.util.http.fileupload.IOUtils;
|
||||||
import org.influxdb.dto.QueryResult;
|
import org.influxdb.dto.QueryResult;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.scheduling.annotation.Async;
|
||||||
@@ -39,8 +42,6 @@ import org.springframework.web.multipart.MultipartFile;
|
|||||||
import org.springframework.web.multipart.commons.CommonsMultipartFile;
|
import org.springframework.web.multipart.commons.CommonsMultipartFile;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.net.URL;
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -63,8 +64,6 @@ public class ReportServiceImpl implements ReportService {
|
|||||||
|
|
||||||
private final ExcelRptMapper excelRptMapper;
|
private final ExcelRptMapper excelRptMapper;
|
||||||
|
|
||||||
private final GeneralInfo generalInfo;
|
|
||||||
|
|
||||||
private final FileStorageUtil fileStorageUtil;
|
private final FileStorageUtil fileStorageUtil;
|
||||||
|
|
||||||
|
|
||||||
@@ -94,20 +93,12 @@ public class ReportServiceImpl implements ReportService {
|
|||||||
List<ReportTemplateDTO> dataList;
|
List<ReportTemplateDTO> dataList;
|
||||||
JSONArray jsonArray;
|
JSONArray jsonArray;
|
||||||
for (ExcelRptTemp excelRptTemp : reportTemplateList) {
|
for (ExcelRptTemp excelRptTemp : reportTemplateList) {
|
||||||
InputStream fileStream = null;
|
try (InputStream fileStream = fileStorageUtil.getFileStream(excelRptTemp.getContent())) {
|
||||||
try {
|
|
||||||
//获取content解析数据
|
//获取content解析数据
|
||||||
fileStream = fileStorageUtil.getFileStream(excelRptTemp.getContent());
|
|
||||||
jsonArray = new JSONArray(new JSONTokener(fileStream, new JSONConfig()));
|
jsonArray = new JSONArray(new JSONTokener(fileStream, new JSONConfig()));
|
||||||
dataList = getDataList(jsonArray);
|
dataList = getDataList(jsonArray);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
|
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
|
||||||
}finally {
|
|
||||||
try {
|
|
||||||
fileStream.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//查询influxDB数据
|
//查询influxDB数据
|
||||||
@@ -115,7 +106,6 @@ public class ReportServiceImpl implements ReportService {
|
|||||||
for (String lineId : list) {
|
for (String lineId : list) {
|
||||||
//先判断该模板是否是当前监测点部门的
|
//先判断该模板是否是当前监测点部门的
|
||||||
|
|
||||||
|
|
||||||
if (CollUtil.isNotEmpty(dataList)) {
|
if (CollUtil.isNotEmpty(dataList)) {
|
||||||
//开始组织sql
|
//开始组织sql
|
||||||
dataList.stream().forEach(data -> {
|
dataList.stream().forEach(data -> {
|
||||||
@@ -315,7 +305,7 @@ public class ReportServiceImpl implements ReportService {
|
|||||||
String endTime;
|
String endTime;
|
||||||
DateTime dateTime = new DateTime(reportParam.getDataDate(), DatePattern.NORM_DATE_PATTERN);
|
DateTime dateTime = new DateTime(reportParam.getDataDate(), DatePattern.NORM_DATE_PATTERN);
|
||||||
//时间范围需要处理下
|
//时间范围需要处理下
|
||||||
switch (reportParam.getType()){
|
switch (reportParam.getType()) {
|
||||||
case 1:
|
case 1:
|
||||||
startTime = DateUtil.beginOfYear(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN);
|
startTime = DateUtil.beginOfYear(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN);
|
||||||
endTime = DateUtil.endOfYear(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN);
|
endTime = DateUtil.endOfYear(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN);
|
||||||
@@ -339,13 +329,11 @@ public class ReportServiceImpl implements ReportService {
|
|||||||
}
|
}
|
||||||
sql
|
sql
|
||||||
.append(InfluxDBSqlConstant.AND)
|
.append(InfluxDBSqlConstant.AND)
|
||||||
.append("time ").append(InfluxDBSqlConstant.GE).append("'").append(startTime).append("'")
|
.append(InfluxDBSqlConstant.TIME).append(InfluxDBSqlConstant.GE).append(InfluxDBSqlConstant.QM).append(startTime).append(InfluxDBSqlConstant.QM)
|
||||||
.append(InfluxDBSqlConstant.AND)
|
.append(InfluxDBSqlConstant.AND)
|
||||||
.append("time ").append(InfluxDBSqlConstant.LT).append("'").append(endTime).append("'");
|
.append(InfluxDBSqlConstant.TIME).append(InfluxDBSqlConstant.LT).append(InfluxDBSqlConstant.QM).append(endTime).append(InfluxDBSqlConstant.QM);
|
||||||
|
|
||||||
sql.append(InfluxDBSqlConstant.TZ);
|
sql.append(InfluxDBSqlConstant.TZ);
|
||||||
|
|
||||||
System.out.println(sql);
|
|
||||||
//根据不同的库表赋值
|
//根据不同的库表赋值
|
||||||
QueryResult queryResult = influxDbUtils.query(String.valueOf(sql));
|
QueryResult queryResult = influxDbUtils.query(String.valueOf(sql));
|
||||||
|
|
||||||
@@ -380,92 +368,8 @@ public class ReportServiceImpl implements ReportService {
|
|||||||
* @return 成功标记
|
* @return 成功标记
|
||||||
*/
|
*/
|
||||||
private String contentToOss(String content) {
|
private String contentToOss(String content) {
|
||||||
//上传到minio
|
InputStream reportStream = IoUtil.toStream(content, CharsetUtil.UTF_8);
|
||||||
String businessTempPath = generalInfo.getBusinessTempPath();
|
return fileStorageUtil.uploadStream(reportStream, OssPath.HARMONIC_EXCEL_REPORT, FileUtil.generateFileName("json"));
|
||||||
File file = stringToFile(content, businessTempPath + File.separator + "temp.json");
|
|
||||||
MultipartFile multiFile = getMultipartFile(file);
|
|
||||||
return fileStorageUtil.uploadMultipart(multiFile, OssPath.HARMONIC_EXCEL_REPORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将字符串写入指定文件
|
|
||||||
*
|
|
||||||
* @param res 原字符串
|
|
||||||
* @param filePath 文件路径
|
|
||||||
* @return 成功标记
|
|
||||||
*/
|
|
||||||
public File stringToFile(String res, String filePath) {
|
|
||||||
boolean flag = true;
|
|
||||||
BufferedReader bufferedReader = null;
|
|
||||||
BufferedWriter bufferedWriter = null;
|
|
||||||
File distFile = new File(filePath);
|
|
||||||
try {
|
|
||||||
if (!distFile.getParentFile().exists()) {
|
|
||||||
distFile.getParentFile().mkdirs();
|
|
||||||
}
|
|
||||||
bufferedReader = new BufferedReader(new StringReader(res));
|
|
||||||
bufferedWriter = new BufferedWriter(new FileWriter(distFile));
|
|
||||||
//先清空
|
|
||||||
bufferedWriter.write("");
|
|
||||||
char buf[] = new char[1024]; //字符缓冲区
|
|
||||||
int len;
|
|
||||||
while ((len = bufferedReader.read(buf)) != -1) {
|
|
||||||
bufferedWriter.write(buf, 0, len);
|
|
||||||
}
|
|
||||||
bufferedWriter.flush();
|
|
||||||
bufferedReader.close();
|
|
||||||
bufferedWriter.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
} finally {
|
|
||||||
if (bufferedReader != null) {
|
|
||||||
try {
|
|
||||||
bufferedReader.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return distFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将文件转成Multipart
|
|
||||||
*
|
|
||||||
* @param file 文件
|
|
||||||
* @return 成功标记
|
|
||||||
*/
|
|
||||||
private MultipartFile getMultipartFile(File file) {
|
|
||||||
FileItem item = new DiskFileItemFactory().createItem("file"
|
|
||||||
, MediaType.MULTIPART_FORM_DATA_VALUE
|
|
||||||
, true
|
|
||||||
, file.getName());
|
|
||||||
try (InputStream input = new FileInputStream(file);
|
|
||||||
OutputStream os = item.getOutputStream()) {
|
|
||||||
// 流转移
|
|
||||||
IOUtils.copy(input, os);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new IllegalArgumentException("Invalid file: " + e, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new CommonsMultipartFile(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将文件Url读取,转为String
|
|
||||||
*
|
|
||||||
* @param objectUrl 文件url
|
|
||||||
* @return 成功标记
|
|
||||||
*/
|
|
||||||
private String urlToString(String objectUrl) throws IOException {
|
|
||||||
URL url = new URL(objectUrl);
|
|
||||||
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
|
|
||||||
StringBuffer buffer = new StringBuffer();
|
|
||||||
String line = " ";
|
|
||||||
while ((line = in.readLine()) != null) {
|
|
||||||
buffer.append(line);
|
|
||||||
}
|
|
||||||
return buffer.toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user