代码调整
This commit is contained in:
@@ -2,6 +2,7 @@ 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.text.StrPool;
|
||||||
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;
|
||||||
@@ -228,11 +229,17 @@ public class CustomReportServiceImpl implements CustomReportService {
|
|||||||
}
|
}
|
||||||
//先查询库里是否存在已解析的报表数据,存在直接返回/不存在解析数据
|
//先查询库里是否存在已解析的报表数据,存在直接返回/不存在解析数据
|
||||||
LambdaQueryWrapper<ExcelRpt> lambdaQuery = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ExcelRpt> lambdaQuery = new LambdaQueryWrapper<>();
|
||||||
lambdaQuery.eq(ExcelRpt::getLineId, reportSearchParam.getLineId()).eq(ExcelRpt::getTempId, reportSearchParam.getTempId());
|
lambdaQuery
|
||||||
List<ExcelRpt> excelRpts = excelRptMapper.selectList(lambdaQuery);
|
.eq(ExcelRpt::getLineId, reportSearchParam.getLineId())
|
||||||
|
.eq(ExcelRpt::getTempId, reportSearchParam.getTempId())
|
||||||
|
//年季月周日
|
||||||
|
.eq(ExcelRpt::getType, reportSearchParam.getType())
|
||||||
|
//报表日期
|
||||||
|
.eq(ExcelRpt::getDataDate, reportSearchParam.getStartTime());
|
||||||
|
ExcelRpt excelRpts = excelRptMapper.selectOne(lambdaQuery);
|
||||||
try {
|
try {
|
||||||
if (excelRpts.size() > 0) {
|
if (Objects.nonNull(excelRpts)) {
|
||||||
fileStorageUtil.downloadStream(response, excelRpts.get(0).getContent());
|
fileStorageUtil.downloadStream(response, excelRpts.getContent());
|
||||||
} else {
|
} else {
|
||||||
fileStorageUtil.downloadStream(response, analyzeReport(reportSearchParam, excelRptTemp));
|
fileStorageUtil.downloadStream(response, analyzeReport(reportSearchParam, excelRptTemp));
|
||||||
}
|
}
|
||||||
@@ -351,18 +358,18 @@ public class CustomReportServiceImpl implements CustomReportService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 解析报表数据
|
* 解析报表数据
|
||||||
*/
|
*/
|
||||||
private String analyzeReport(ReportSearchParam reportSearchParam, ExcelRptTemp excelRptTemp) {
|
private String analyzeReport(ReportSearchParam reportSearchParam, ExcelRptTemp excelRptTemp) {
|
||||||
//根据content,获取v值并进行处理
|
//根据content,获取v值并进行处理
|
||||||
List<ReportTemplateDTO> reportTemplateDTOList = new ArrayList<>();
|
List<ReportTemplateDTO> reportTemplateDTOList = new ArrayList<>();
|
||||||
JSONArray jsonArray = null;
|
JSONArray jsonArray ;
|
||||||
|
InputStream fileStream = null;
|
||||||
try {
|
try {
|
||||||
//通过文件服务器获取
|
//通过文件服务器获取
|
||||||
// String objectUrl = fileStorageUtil.getFileUrl(excelRptTemp.getContent());
|
fileStream = fileStorageUtil.getFileStream(excelRptTemp.getContent());
|
||||||
// jsonArray = JSONUtil.parseArray(urlToString(objectUrl));
|
|
||||||
InputStream 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;
|
||||||
@@ -405,6 +412,12 @@ 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 {
|
||||||
|
try {
|
||||||
|
fileStream.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ReportTemplateDTO> endList = new ArrayList<>();
|
List<ReportTemplateDTO> endList = new ArrayList<>();
|
||||||
@@ -502,8 +515,16 @@ public class CustomReportServiceImpl implements CustomReportService {
|
|||||||
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.append(InfluxDBSqlConstant.TZ);
|
//时间范围处理
|
||||||
|
sql
|
||||||
|
.append(InfluxDBSqlConstant.AND)
|
||||||
|
.append("time ").append(InfluxDBSqlConstant.GE).append("'").append(reportSearchParam.getStartTime()).append(InfluxDBSqlConstant.START_TIME).append("'")
|
||||||
|
.append(InfluxDBSqlConstant.AND)
|
||||||
|
.append("time ").append(InfluxDBSqlConstant.LT).append("'").append(reportSearchParam.getEndTime()).append(InfluxDBSqlConstant.END_TIME).append("'");
|
||||||
|
|
||||||
|
|
||||||
|
sql.append(InfluxDBSqlConstant.TZ);
|
||||||
|
System.out.println(sql);
|
||||||
//根据不同的库表赋值
|
//根据不同的库表赋值
|
||||||
QueryResult queryResult = influxDbUtils.query(String.valueOf(sql));
|
QueryResult queryResult = influxDbUtils.query(String.valueOf(sql));
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package com.njcn.prepare.harmonic.service.mysql.Impl.line;
|
package com.njcn.prepare.harmonic.service.mysql.Impl.line;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.date.DatePattern;
|
||||||
|
import cn.hutool.core.date.DateTime;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.*;
|
import cn.hutool.json.*;
|
||||||
@@ -17,7 +19,6 @@ import com.njcn.harmonic.pojo.po.ExcelRptTemp;
|
|||||||
import com.njcn.influxdb.param.InfluxDBSqlConstant;
|
import com.njcn.influxdb.param.InfluxDBSqlConstant;
|
||||||
import com.njcn.influxdb.param.InfluxDBTableConstant;
|
import com.njcn.influxdb.param.InfluxDBTableConstant;
|
||||||
import com.njcn.influxdb.utils.InfluxDbUtils;
|
import com.njcn.influxdb.utils.InfluxDbUtils;
|
||||||
import com.njcn.minioss.bo.MinIoUploadResDTO;
|
|
||||||
import com.njcn.oss.constant.OssPath;
|
import com.njcn.oss.constant.OssPath;
|
||||||
import com.njcn.oss.utils.FileStorageUtil;
|
import com.njcn.oss.utils.FileStorageUtil;
|
||||||
import com.njcn.prepare.harmonic.constant.AlgorithmParam;
|
import com.njcn.prepare.harmonic.constant.AlgorithmParam;
|
||||||
@@ -37,14 +38,15 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
import org.springframework.web.multipart.commons.CommonsMultipartFile;
|
import org.springframework.web.multipart.commons.CommonsMultipartFile;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 自定义报表
|
* 自定义报表
|
||||||
|
*
|
||||||
* @author qijian
|
* @author qijian
|
||||||
* @date 2022/10/20
|
* @date 2022/10/20
|
||||||
*/
|
*/
|
||||||
@@ -89,39 +91,47 @@ public class ReportServiceImpl implements ReportService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//根据content进行处理
|
//根据content进行处理
|
||||||
List<ReportTemplateDTO> dataList = new ArrayList<>();
|
List<ReportTemplateDTO> dataList;
|
||||||
JSONArray jsonArray = null;
|
JSONArray jsonArray;
|
||||||
for (ExcelRptTemp excelRptTemp : reportTemplateList) {
|
for (ExcelRptTemp excelRptTemp : reportTemplateList) {
|
||||||
|
InputStream fileStream = null;
|
||||||
try {
|
try {
|
||||||
//获取content解析数据
|
//获取content解析数据
|
||||||
// String objectUrl = fileStorageUtil.getFileUrl(excelRptTemp.getContent());
|
fileStream = fileStorageUtil.getFileStream(excelRptTemp.getContent());
|
||||||
// jsonArray = JSONUtil.parseArray(urlToString(objectUrl));
|
|
||||||
InputStream 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数据
|
||||||
List<ReportTemplateDTO> endList = new ArrayList<>();
|
List<ReportTemplateDTO> endList = new ArrayList<>();
|
||||||
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 -> {
|
||||||
StringBuilder sql = new StringBuilder(InfluxDBSqlConstant.SELECT);
|
StringBuilder sql = new StringBuilder(InfluxDBSqlConstant.SELECT);
|
||||||
switch (data.getStatMethod()) {
|
switch (data.getStatMethod()) {
|
||||||
case InfluxDBTableConstant.MAX:
|
case InfluxDBTableConstant.MAX:
|
||||||
assSql(data, sql, endList, InfluxDBSqlConstant.MAX, lineId);
|
assSql(data, sql, endList, InfluxDBSqlConstant.MAX, lineId, reportParam);
|
||||||
break;
|
break;
|
||||||
case InfluxDBTableConstant.MIN:
|
case InfluxDBTableConstant.MIN:
|
||||||
assSql(data, sql, endList, InfluxDBSqlConstant.MIN, lineId);
|
assSql(data, sql, endList, InfluxDBSqlConstant.MIN, lineId, reportParam);
|
||||||
break;
|
break;
|
||||||
case InfluxDBTableConstant.AVG:
|
case InfluxDBTableConstant.AVG:
|
||||||
assSql(data, sql, endList, InfluxDBSqlConstant.AVG, lineId);
|
assSql(data, sql, endList, InfluxDBSqlConstant.AVG, lineId, reportParam);
|
||||||
break;
|
break;
|
||||||
case InfluxDBTableConstant.CP95:
|
case InfluxDBTableConstant.CP95:
|
||||||
assSql(data, sql, endList, InfluxDBSqlConstant.CP95, lineId);
|
assSql(data, sql, endList, InfluxDBSqlConstant.CP95, lineId, reportParam);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -154,6 +164,7 @@ public class ReportServiceImpl implements ReportService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* rpt业务方法
|
* rpt业务方法
|
||||||
|
*
|
||||||
* @param reportParam,lineId,excelRptTemp,afterContent 参数
|
* @param reportParam,lineId,excelRptTemp,afterContent 参数
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
@@ -171,6 +182,7 @@ public class ReportServiceImpl implements ReportService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增rpt方法
|
* 新增rpt方法
|
||||||
|
*
|
||||||
* @param reportParam,lineId,excelRptTemp,afterContent 参数
|
* @param reportParam,lineId,excelRptTemp,afterContent 参数
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
@@ -190,6 +202,7 @@ public class ReportServiceImpl implements ReportService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据数据填充content
|
* 根据数据填充content
|
||||||
|
*
|
||||||
* @param jsonArray 参数
|
* @param jsonArray 参数
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
@@ -225,6 +238,7 @@ public class ReportServiceImpl implements ReportService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取content解析数据
|
* 获取content解析数据
|
||||||
|
*
|
||||||
* @param jsonArray 参数
|
* @param jsonArray 参数
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
@@ -274,10 +288,12 @@ public class ReportServiceImpl implements ReportService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 组装influxDB查询sql,查询value并封装endlist
|
* 组装influxDB查询sql,查询value并封装endlist
|
||||||
|
*
|
||||||
* @param data,sql,endList,method,reportSearchParam 参数
|
* @param data,sql,endList,method,reportSearchParam 参数
|
||||||
|
* @param reportParam
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
private void assSql(ReportTemplateDTO data, StringBuilder sql, List<ReportTemplateDTO> endList, String method, String lineId) {
|
private void assSql(ReportTemplateDTO data, StringBuilder sql, List<ReportTemplateDTO> endList, String method, String lineId, LineParam reportParam) {
|
||||||
//sql拼接示例:select MAX(IHA2) as IHA2 from power_quality_data where Phase = 'A' and LineId='1324564568' and Stat_Method='max' tz('Asia/Shanghai')
|
//sql拼接示例:select MAX(IHA2) as IHA2 from power_quality_data where Phase = 'A' and LineId='1324564568' and Stat_Method='max' tz('Asia/Shanghai')
|
||||||
//cp95函数特殊处理 PERCENTILE(field_key, N)
|
//cp95函数特殊处理 PERCENTILE(field_key, N)
|
||||||
if (InfluxDBSqlConstant.CP95.equals(method)) {
|
if (InfluxDBSqlConstant.CP95.equals(method)) {
|
||||||
@@ -295,8 +311,41 @@ public class ReportServiceImpl implements ReportService {
|
|||||||
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);
|
||||||
}
|
}
|
||||||
|
String startTime;
|
||||||
|
String endTime;
|
||||||
|
DateTime dateTime = new DateTime(reportParam.getDataDate(), DatePattern.NORM_DATE_PATTERN);
|
||||||
|
//时间范围需要处理下
|
||||||
|
switch (reportParam.getType()){
|
||||||
|
case 1:
|
||||||
|
startTime = DateUtil.beginOfYear(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
endTime = DateUtil.endOfYear(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
startTime = DateUtil.beginOfQuarter(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
endTime = DateUtil.endOfQuarter(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
startTime = DateUtil.beginOfMonth(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
endTime = DateUtil.endOfMonth(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
startTime = DateUtil.beginOfWeek(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
endTime = DateUtil.endOfWeek(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
startTime = DateUtil.beginOfDay(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
endTime = DateUtil.endOfDay(dateTime).toString(DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sql
|
||||||
|
.append(InfluxDBSqlConstant.AND)
|
||||||
|
.append("time ").append(InfluxDBSqlConstant.GE).append("'").append(startTime).append("'")
|
||||||
|
.append(InfluxDBSqlConstant.AND)
|
||||||
|
.append("time ").append(InfluxDBSqlConstant.LT).append("'").append(endTime).append("'");
|
||||||
|
|
||||||
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));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user