修改自定义报表适配分钟/统计数据查询
This commit is contained in:
@@ -36,6 +36,9 @@ public class ReportSearchParam {
|
|||||||
//目前用于区分不同系统资源,null默认 1.无线系统,配合cs-device
|
//目前用于区分不同系统资源,null默认 1.无线系统,配合cs-device
|
||||||
private Integer resourceType;
|
private Integer resourceType;
|
||||||
|
|
||||||
|
//区分统计数据还是分钟数据,null默认统计数据 0.统计数据 1.分钟数据
|
||||||
|
private Integer isStatisticData;
|
||||||
|
|
||||||
//浙江无线报表特殊标识 null为通用报表 1.浙江无线报表
|
//浙江无线报表特殊标识 null为通用报表 1.浙江无线报表
|
||||||
private Integer customType;
|
private Integer customType;
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import lombok.Data;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* pqs
|
* pqs
|
||||||
*
|
* 装置数据单位配置类
|
||||||
* @author cdf
|
* @author cdf
|
||||||
* @date 2026/1/17
|
* @date 2026/1/17
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import com.njcn.harmonic.pojo.param.ReportSearchParam;
|
|||||||
import com.njcn.harmonic.pojo.po.ExcelRptTemp;
|
import com.njcn.harmonic.pojo.po.ExcelRptTemp;
|
||||||
import com.njcn.influx.constant.InfluxDbSqlConstant;
|
import com.njcn.influx.constant.InfluxDbSqlConstant;
|
||||||
import com.njcn.influx.pojo.constant.InfluxDBTableConstant;
|
import com.njcn.influx.pojo.constant.InfluxDBTableConstant;
|
||||||
|
import com.njcn.influx.utils.InfluxDbUtils;
|
||||||
import com.njcn.oss.constant.OssPath;
|
import com.njcn.oss.constant.OssPath;
|
||||||
import com.njcn.oss.enums.OssResponseEnum;
|
import com.njcn.oss.enums.OssResponseEnum;
|
||||||
import com.njcn.oss.utils.FileStorageUtil;
|
import com.njcn.oss.utils.FileStorageUtil;
|
||||||
@@ -44,7 +45,7 @@ import org.apache.poi.ss.util.CellRangeAddress;
|
|||||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
import org.apache.tomcat.util.http.fileupload.IOUtils;
|
import org.apache.tomcat.util.http.fileupload.IOUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import javax.annotation.PreDestroy;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
@@ -72,6 +73,7 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
|||||||
private final EpdFeignClient epdFeignClient;
|
private final EpdFeignClient epdFeignClient;
|
||||||
private final FileStorageUtil fileStorageUtil;
|
private final FileStorageUtil fileStorageUtil;
|
||||||
private final DicDataFeignClient dicDataFeignClient;
|
private final DicDataFeignClient dicDataFeignClient;
|
||||||
|
private final InfluxDbUtils influxDbUtils;
|
||||||
private final ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1);
|
private final ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1);
|
||||||
|
|
||||||
private final String CELL_DATA = "celldata";
|
private final String CELL_DATA = "celldata";
|
||||||
@@ -310,7 +312,6 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private String saveReport(JSONArray jsonArray, Map<String, Object> dataMap) {
|
private String saveReport(JSONArray jsonArray, Map<String, Object> dataMap) {
|
||||||
String filePath = "";
|
String filePath = "";
|
||||||
Workbook workbook = new XSSFWorkbook();
|
Workbook workbook = new XSSFWorkbook();
|
||||||
@@ -589,9 +590,9 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
|||||||
if (Objects.isNull(dictData)) {
|
if (Objects.isNull(dictData)) {
|
||||||
throw new BusinessException(CommonResponseEnum.FAIL, "字典类型模板缺少!");
|
throw new BusinessException(CommonResponseEnum.FAIL, "字典类型模板缺少!");
|
||||||
}
|
}
|
||||||
|
List<EleEpdPqd> eleEpdPqdList = epdFeignClient.dictMarkByDataType(dictData.getId()).getData();
|
||||||
|
Map<String, String> tableMap = eleEpdPqdList.stream().collect(Collectors.toMap(EleEpdPqd::getResourcesId, EleEpdPqd::getClassId, (oldValue, newValue) -> oldValue));
|
||||||
|
|
||||||
DictData epdDic = dicDataFeignClient.getDicDataByCodeAndType(DicDataEnum.EPD.getCode(),DicDataTypeEnum.CS_DATA_TYPE.getCode()).getData();
|
|
||||||
List<EleEpdPqd> eleEpdPqdList= epdFeignClient.dictMarkByDataType(epdDic.getId()).getData();
|
|
||||||
|
|
||||||
Map<String, String> tMap = new HashMap<>();
|
Map<String, String> tMap = new HashMap<>();
|
||||||
eleEpdPqdList.forEach(item -> {
|
eleEpdPqdList.forEach(item -> {
|
||||||
@@ -610,7 +611,7 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
eleEpdPqdList = eleEpdPqdList.stream().filter(it->"T".equals(it.getPhase())||"M".equals(it.getPhase())).collect(Collectors.toList());
|
eleEpdPqdList = eleEpdPqdList.stream().filter(it -> "M".equals(it.getPhase())).collect(Collectors.toList());
|
||||||
List<String> noPhaseList = eleEpdPqdList.stream().filter(it -> StrUtil.isNotBlank(it.getOtherName())).map(it -> it.getOtherName().toUpperCase()).collect(Collectors.toList());
|
List<String> noPhaseList = eleEpdPqdList.stream().filter(it -> StrUtil.isNotBlank(it.getOtherName())).map(it -> it.getOtherName().toUpperCase()).collect(Collectors.toList());
|
||||||
|
|
||||||
//处理指标是否合格
|
//处理指标是否合格
|
||||||
@@ -639,13 +640,13 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
|||||||
phaseMap.forEach((phaseKey, phaseVal) -> {
|
phaseMap.forEach((phaseKey, phaseVal) -> {
|
||||||
StringBuilder sql = new StringBuilder(InfluxDbSqlConstant.SELECT);
|
StringBuilder sql = new StringBuilder(InfluxDbSqlConstant.SELECT);
|
||||||
if (InfluxDbSqlConstant.MAX.equalsIgnoreCase(valueTypeKey)) {
|
if (InfluxDbSqlConstant.MAX.equalsIgnoreCase(valueTypeKey)) {
|
||||||
assSqlByMysql(tMap,newMap.get("LEVEL"),newMap.get("PT"),newMap.get("CT"),phaseVal, sql, endList, InfluxDbSqlConstant.MAX, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap,noPhaseList);
|
assembleSqlAndQuery(tMap, newMap.get("LEVEL"), newMap.get("PT"), newMap.get("CT"), phaseVal, sql, endList, InfluxDbSqlConstant.MAX, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap, noPhaseList, tableMap);
|
||||||
} else if (InfluxDbSqlConstant.MIN.equalsIgnoreCase(valueTypeKey)) {
|
} else if (InfluxDbSqlConstant.MIN.equalsIgnoreCase(valueTypeKey)) {
|
||||||
assSqlByMysql(tMap,newMap.get("LEVEL"),newMap.get("PT"),newMap.get("CT"),phaseVal, sql, endList, InfluxDbSqlConstant.MIN, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap,noPhaseList);
|
assembleSqlAndQuery(tMap, newMap.get("LEVEL"), newMap.get("PT"), newMap.get("CT"), phaseVal, sql, endList, InfluxDbSqlConstant.MIN, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap, noPhaseList, tableMap);
|
||||||
} else if (InfluxDbSqlConstant.AVG_WEB.equalsIgnoreCase(valueTypeKey)) {
|
} else if (InfluxDbSqlConstant.AVG_WEB.equalsIgnoreCase(valueTypeKey)) {
|
||||||
assSqlByMysql(tMap,newMap.get("LEVEL"),newMap.get("PT"),newMap.get("CT"),phaseVal, sql, endList, InfluxDbSqlConstant.AVG_WEB, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap,noPhaseList);
|
assembleSqlAndQuery(tMap, newMap.get("LEVEL"), newMap.get("PT"), newMap.get("CT"), phaseVal, sql, endList, InfluxDbSqlConstant.AVG_WEB, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap, noPhaseList,tableMap);
|
||||||
} else if (InfluxDbSqlConstant.CP95.equalsIgnoreCase(valueTypeKey)) {
|
} else if (InfluxDbSqlConstant.CP95.equalsIgnoreCase(valueTypeKey)) {
|
||||||
assSqlByMysql(tMap,newMap.get("LEVEL"),newMap.get("PT"),newMap.get("CT"),phaseVal, sql, endList, InfluxDbSqlConstant.CP95, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap,noPhaseList);
|
assembleSqlAndQuery(tMap, newMap.get("LEVEL"), newMap.get("PT"), newMap.get("CT"), phaseVal, sql, endList, InfluxDbSqlConstant.CP95, reportSearchParam, limitTargetMapX, limitMap, assNoPassMap, noPhaseList,tableMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
@@ -675,9 +676,9 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 解析模板
|
* 解析模板
|
||||||
|
*
|
||||||
* @author cdf
|
* @author cdf
|
||||||
* @date 2023/10/20
|
* @date 2023/10/20
|
||||||
*/
|
*/
|
||||||
@@ -815,6 +816,7 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 对多测点数据进行计算求出一组数据
|
* 对多测点数据进行计算求出一组数据
|
||||||
|
*
|
||||||
* @param method
|
* @param method
|
||||||
* @param allList
|
* @param allList
|
||||||
* @return
|
* @return
|
||||||
@@ -884,7 +886,6 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理指标超标结论
|
* 处理指标超标结论
|
||||||
*/
|
*/
|
||||||
@@ -1035,9 +1036,6 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
|||||||
|
|
||||||
//频率和频率偏差仅统计T相
|
//频率和频率偏差仅统计T相
|
||||||
if (noPhaseList.contains(data.get(0).getTemplateName())) {
|
if (noPhaseList.contains(data.get(0).getTemplateName())) {
|
||||||
if(data.get(0).getTemplateName().equalsIgnoreCase("v_unbalance")){
|
|
||||||
System.out.println(44);
|
|
||||||
}
|
|
||||||
sql.append(InfluxDbSqlConstant.AND)
|
sql.append(InfluxDbSqlConstant.AND)
|
||||||
.append(InfluxDBTableConstant.PHASIC_TYPE)
|
.append(InfluxDBTableConstant.PHASIC_TYPE)
|
||||||
.append(InfluxDbSqlConstant.EQ)
|
.append(InfluxDbSqlConstant.EQ)
|
||||||
@@ -1050,9 +1048,7 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
|||||||
.append(InfluxDbSqlConstant.TIME).append(InfluxDbSqlConstant.GE).append(InfluxDbSqlConstant.QM).append(reportSearchParam.getStartTime()).append(InfluxDbSqlConstant.START_TIME).append(InfluxDbSqlConstant.QM)
|
.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(InfluxDbSqlConstant.TIME).append(InfluxDbSqlConstant.LT).append(InfluxDbSqlConstant.QM).append(reportSearchParam.getEndTime()).append(InfluxDbSqlConstant.END_TIME).append(InfluxDbSqlConstant.QM);
|
.append(InfluxDbSqlConstant.TIME).append(InfluxDbSqlConstant.LT).append(InfluxDbSqlConstant.QM).append(reportSearchParam.getEndTime()).append(InfluxDbSqlConstant.END_TIME).append(InfluxDbSqlConstant.QM);
|
||||||
|
|
||||||
System.out.println(sql);
|
System.out.println(sql);
|
||||||
|
|
||||||
List<Map<String, Object>> mapList = SqlRunner.DEFAULT.selectList(sql.toString());
|
List<Map<String, Object>> mapList = SqlRunner.DEFAULT.selectList(sql.toString());
|
||||||
if (CollUtil.isEmpty(mapList) || Objects.isNull(mapList.get(0))) {
|
if (CollUtil.isEmpty(mapList) || Objects.isNull(mapList.get(0))) {
|
||||||
data = data.stream().peek(item -> item.setValue("/")).collect(Collectors.toList());
|
data = data.stream().peek(item -> item.setValue("/")).collect(Collectors.toList());
|
||||||
@@ -1123,6 +1119,251 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void assembleSqlAndQuery(Map<String, String> tMap, String dataLevel, String pt, String ct,
|
||||||
|
List<ReportTemplateDTO> data, StringBuilder sql,
|
||||||
|
List<ReportTemplateDTO> endList, String method,
|
||||||
|
ReportSearchParam reportSearchParam,
|
||||||
|
Map<String, ReportTemplateDTO> limitMap,
|
||||||
|
Map<String, Float> overLimitMap,
|
||||||
|
Map<String, ReportTemplateDTO> assNoPassMap,
|
||||||
|
List<String> noPhaseList,
|
||||||
|
Map<String, String> tableMap) {
|
||||||
|
// 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特殊情况
|
||||||
|
boolean isCp95 = InfluxDbSqlConstant.CP95.equals(method);
|
||||||
|
boolean isAvg = InfluxDbSqlConstant.AVG_WEB.equals(method);
|
||||||
|
String aggregateFunc;
|
||||||
|
// 执行查询
|
||||||
|
List<Map<String, Object>> mapList = new ArrayList<>();
|
||||||
|
if (Objects.isNull(reportSearchParam.getIsStatisticData()) || reportSearchParam.getIsStatisticData() == 0) {
|
||||||
|
aggregateFunc = isCp95 ? InfluxDbSqlConstant.MAX : method;
|
||||||
|
for (int i = 0; i < data.size(); i++) {
|
||||||
|
sql.append(aggregateFunc)
|
||||||
|
.append(InfluxDbSqlConstant.LBK)
|
||||||
|
.append(data.get(i).getTemplateName())
|
||||||
|
.append(InfluxDbSqlConstant.RBK)
|
||||||
|
.append(Objects.equals(dataLevel, "Secondary") ? " " + appendData(tMap, data.get(i).getTemplateName() + data.get(i).getPhase() + data.get(0).getResourceId(), getData(pt), getData(ct)) : "");
|
||||||
|
if (i == data.size() - 1) {
|
||||||
|
sql.append(InfluxDbSqlConstant.AS).append("\"").append(data.get(i).getItemName()).append("\"");
|
||||||
|
} else {
|
||||||
|
sql.append(InfluxDbSqlConstant.AS).append("\"").append(data.get(i).getItemName()).append("\"").append(StrUtil.COMMA);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//拼接表名
|
||||||
|
sql.append(StrPool.C_SPACE).append(InfluxDbSqlConstant.FROM).append(data.get(0).getResourceId());
|
||||||
|
|
||||||
|
sql.append(InfluxDbSqlConstant.WHERE)
|
||||||
|
.append(InfluxDBTableConstant.LINE_ID)
|
||||||
|
.append(InfluxDbSqlConstant.EQ)
|
||||||
|
.append(InfluxDbSqlConstant.QM)
|
||||||
|
.append(reportSearchParam.getLineId())
|
||||||
|
.append(InfluxDbSqlConstant.QM);
|
||||||
|
|
||||||
|
|
||||||
|
sql.append(InfluxDbSqlConstant.AND)
|
||||||
|
.append(InfluxDBTableConstant.VALUE_TYPE)
|
||||||
|
.append(InfluxDbSqlConstant.EQ)
|
||||||
|
.append(InfluxDbSqlConstant.QM)
|
||||||
|
.append(data.get(0).getStatMethod())
|
||||||
|
.append(InfluxDbSqlConstant.QM);
|
||||||
|
|
||||||
|
|
||||||
|
//相别特殊处理
|
||||||
|
if (noPhaseList.contains(data.get(0).getTemplateName())) {
|
||||||
|
sql.append(InfluxDbSqlConstant.AND)
|
||||||
|
.append(InfluxDBTableConstant.PHASIC_TYPE)
|
||||||
|
.append(InfluxDbSqlConstant.EQ)
|
||||||
|
.append(InfluxDbSqlConstant.QM)
|
||||||
|
.append(InfluxDBTableConstant.PHASE_TYPE_T)
|
||||||
|
.append(InfluxDbSqlConstant.QM);
|
||||||
|
}else {
|
||||||
|
sql.append(InfluxDbSqlConstant.AND)
|
||||||
|
.append(InfluxDBTableConstant.PHASIC_TYPE)
|
||||||
|
.append(InfluxDbSqlConstant.EQ)
|
||||||
|
.append(InfluxDbSqlConstant.QM)
|
||||||
|
.append(data.get(0).getPhase())
|
||||||
|
.append(InfluxDbSqlConstant.QM);
|
||||||
|
}
|
||||||
|
//时间范围处理
|
||||||
|
sql.append(InfluxDbSqlConstant.AND)
|
||||||
|
.append(InfluxDbSqlConstant.TIME).append(InfluxDbSqlConstant.GE).append(InfluxDbSqlConstant.QM).append(reportSearchParam.getStartTime()).append(InfluxDbSqlConstant.START_TIME).append(InfluxDbSqlConstant.QM)
|
||||||
|
.append(InfluxDbSqlConstant.AND)
|
||||||
|
.append(InfluxDbSqlConstant.TIME).append(InfluxDbSqlConstant.LT).append(InfluxDbSqlConstant.QM).append(reportSearchParam.getEndTime()).append(InfluxDbSqlConstant.END_TIME).append(InfluxDbSqlConstant.QM);
|
||||||
|
System.out.println(sql);
|
||||||
|
mapList = SqlRunner.DEFAULT.selectList(sql.toString());
|
||||||
|
} else if (reportSearchParam.getIsStatisticData() == 1) {
|
||||||
|
//查分钟数据
|
||||||
|
if (isCp95) {
|
||||||
|
// InfluxDB的PERCENTILE特殊处理
|
||||||
|
for (int i = 0; i < data.size(); i++) {
|
||||||
|
sql.append(method)
|
||||||
|
.append(InfluxDbSqlConstant.LBK)
|
||||||
|
.append(data.get(i).getTemplateName().toLowerCase())
|
||||||
|
.append(InfluxDbSqlConstant.NUM_95)
|
||||||
|
.append(InfluxDbSqlConstant.RBK)
|
||||||
|
.append(InfluxDbSqlConstant.AS).append(InfluxDbSqlConstant.DQM)
|
||||||
|
.append(data.get(i).getItemName()).append(InfluxDbSqlConstant.DQM);
|
||||||
|
if (i != data.size() - 1) {
|
||||||
|
sql.append(StrUtil.COMMA);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
aggregateFunc = isAvg ? InfluxDbSqlConstant.AVG:method;
|
||||||
|
for (int i = 0; i < data.size(); i++) {
|
||||||
|
sql.append(aggregateFunc)
|
||||||
|
.append(InfluxDbSqlConstant.LBK)
|
||||||
|
.append(data.get(i).getTemplateName().toLowerCase())
|
||||||
|
.append(InfluxDbSqlConstant.RBK)
|
||||||
|
.append(Objects.equals(dataLevel, "Secondary") ? " " + appendData(tMap, data.get(i).getTemplateName() + data.get(i).getPhase() + data.get(0).getResourceId(), getData(pt), getData(ct)) : "")
|
||||||
|
.append(InfluxDbSqlConstant.AS).append("\"").append(data.get(i).getItemName()).append("\"");
|
||||||
|
if (i != data.size() - 1) {
|
||||||
|
sql.append(StrUtil.COMMA);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 拼接表名
|
||||||
|
sql.append(StrPool.C_SPACE).append(InfluxDbSqlConstant.FROM).append(StrPool.C_SPACE);
|
||||||
|
if (Objects.nonNull(reportSearchParam.getResourceType()) && reportSearchParam.getResourceType() == 1) {
|
||||||
|
sql.append(data.get(0).getClassId().replace("data", "day"));
|
||||||
|
} else {
|
||||||
|
sql.append(tableMap.get(data.get(0).getResourceId().toLowerCase()).toLowerCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 拼接WHERE条件
|
||||||
|
sql.append(InfluxDbSqlConstant.WHERE)
|
||||||
|
.append(InfluxDBTableConstant.LINE_ID)
|
||||||
|
.append(InfluxDbSqlConstant.EQ)
|
||||||
|
.append(InfluxDbSqlConstant.QM)
|
||||||
|
.append(reportSearchParam.getLineId())
|
||||||
|
.append(InfluxDbSqlConstant.QM);
|
||||||
|
|
||||||
|
// InfluxDB特殊处理:data_flicker、data_fluc、data_plt 无 value_type
|
||||||
|
String classTable = tableMap.get(data.get(0).getResourceId().toLowerCase());
|
||||||
|
if (!InfluxDBTableConstant.DATA_FLICKER.equals(classTable)
|
||||||
|
&& !InfluxDBTableConstant.DATA_FLUC.equals(classTable)
|
||||||
|
&& !InfluxDBTableConstant.DATA_PLT.equals(classTable)) {
|
||||||
|
sql.append(InfluxDbSqlConstant.AND)
|
||||||
|
.append(InfluxDBTableConstant.VALUE_TYPE)
|
||||||
|
.append(InfluxDbSqlConstant.EQ)
|
||||||
|
.append(InfluxDbSqlConstant.QM)
|
||||||
|
.append(data.get(0).getStatMethod())
|
||||||
|
.append(InfluxDbSqlConstant.QM);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 相别特殊处理
|
||||||
|
if (!noPhaseList.contains(data.get(0).getPhase())) {
|
||||||
|
sql.append(InfluxDbSqlConstant.AND)
|
||||||
|
.append(InfluxDBTableConstant.PHASIC_TYPE)
|
||||||
|
.append(InfluxDbSqlConstant.EQ)
|
||||||
|
.append(InfluxDbSqlConstant.QM)
|
||||||
|
.append(data.get(0).getPhase())
|
||||||
|
.append(InfluxDbSqlConstant.QM);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 时间范围处理
|
||||||
|
sql.append(InfluxDbSqlConstant.AND)
|
||||||
|
.append(InfluxDbSqlConstant.TIME).append(InfluxDbSqlConstant.GE)
|
||||||
|
.append(InfluxDbSqlConstant.QM).append(reportSearchParam.getStartTime())
|
||||||
|
.append(InfluxDbSqlConstant.QM)
|
||||||
|
.append(InfluxDbSqlConstant.AND)
|
||||||
|
.append(InfluxDbSqlConstant.TIME).append(InfluxDbSqlConstant.LT)
|
||||||
|
.append(InfluxDbSqlConstant.QM).append(reportSearchParam.getEndTime())
|
||||||
|
.append(InfluxDbSqlConstant.QM);
|
||||||
|
|
||||||
|
// InfluxDB需要添加时区
|
||||||
|
sql.append(InfluxDbSqlConstant.TZ);
|
||||||
|
System.out.println(sql);
|
||||||
|
mapList = influxDbUtils.getMapResult(sql.toString());
|
||||||
|
}
|
||||||
|
// 处理查询结果
|
||||||
|
fetchData(mapList, data, limitMap, overLimitMap, assNoPassMap, endList);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void fetchData(List<Map<String, Object>> mapList,
|
||||||
|
List<ReportTemplateDTO> data, Map<String,
|
||||||
|
ReportTemplateDTO> limitMap,
|
||||||
|
Map<String, Float> overLimitMap,
|
||||||
|
Map<String, ReportTemplateDTO> assNoPassMap,
|
||||||
|
List<ReportTemplateDTO> endList) {
|
||||||
|
// 处理查询结果
|
||||||
|
if (CollUtil.isEmpty(mapList)) {
|
||||||
|
data = data.stream().peek(item -> item.setValue("/")).collect(Collectors.toList());
|
||||||
|
} else {
|
||||||
|
// 兼容达梦数据库方法
|
||||||
|
Map<String, Object> map = convertKeysToUpperCase(mapList.get(0));
|
||||||
|
for (ReportTemplateDTO item : data) {
|
||||||
|
if (map.containsKey(item.getItemName())) {
|
||||||
|
double v = Double.parseDouble(map.get(item.getItemName()).toString());
|
||||||
|
item.setValue(String.format("%.3f", v));
|
||||||
|
|
||||||
|
// 处理overLimitMap越限判断
|
||||||
|
if (overLimitMap != null && overLimitMap.containsKey(item.getLimitName())) {
|
||||||
|
Float tagVal = overLimitMap.get(item.getLimitName());
|
||||||
|
|
||||||
|
if (item.getLimitName() != null && item.getLimitName().equalsIgnoreCase(UVOLTAGE_DEV)) {
|
||||||
|
// 对电压偏差特殊处理
|
||||||
|
Float tagVal_U = overLimitMap.get(UVOLTAGE_DEV);
|
||||||
|
if (v > tagVal || v < tagVal_U) {
|
||||||
|
item.setOverLimitFlag(1);
|
||||||
|
} else {
|
||||||
|
item.setOverLimitFlag(0);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (v > tagVal) {
|
||||||
|
item.setOverLimitFlag(1);
|
||||||
|
} else {
|
||||||
|
item.setOverLimitFlag(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断是否越限(limitMap处理)
|
||||||
|
if (limitMap != null && !limitMap.isEmpty()) {
|
||||||
|
String key = item.getLimitName() + STR_ONE + item.getStatMethod() + "#PQ_OVERLIMIT";
|
||||||
|
if (limitMap.containsKey(key)) {
|
||||||
|
ReportTemplateDTO tem = limitMap.get(key);
|
||||||
|
double limitVal = Double.parseDouble(tem.getValue());
|
||||||
|
|
||||||
|
if (VOLTAGE_DEV.equalsIgnoreCase(tem.getLimitName())) {
|
||||||
|
// 针对电压偏差特殊处理
|
||||||
|
double limitLowVal = Double.parseDouble(tem.getLowValue());
|
||||||
|
if (v > limitVal || v < limitLowVal) {
|
||||||
|
tem.setOverLimitFlag(1);
|
||||||
|
if (assNoPassMap != null) {
|
||||||
|
assNoPassMap.put(key, tem);
|
||||||
|
}
|
||||||
|
} else if (assNoPassMap != null && !assNoPassMap.containsKey(key)) {
|
||||||
|
tem.setOverLimitFlag(0);
|
||||||
|
assNoPassMap.put(key, tem);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 其他指标
|
||||||
|
if (v > limitVal) {
|
||||||
|
tem.setOverLimitFlag(1);
|
||||||
|
if (assNoPassMap != null) {
|
||||||
|
assNoPassMap.put(key, tem);
|
||||||
|
}
|
||||||
|
} else if (assNoPassMap != null && !assNoPassMap.containsKey(key)) {
|
||||||
|
tem.setOverLimitFlag(0);
|
||||||
|
assNoPassMap.put(key, tem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
item.setValue("/");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (endList != null) {
|
||||||
|
endList.addAll(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据单位信息
|
* 数据单位信息
|
||||||
*/
|
*/
|
||||||
@@ -1179,6 +1420,7 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理最终结果
|
* 处理最终结果
|
||||||
|
*
|
||||||
* @author cdf
|
* @author cdf
|
||||||
* @date 2026/1/16
|
* @date 2026/1/16
|
||||||
*/
|
*/
|
||||||
@@ -1275,4 +1517,9 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
|||||||
return newMap;
|
return newMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 5. 添加线程池销毁方法
|
||||||
|
@PreDestroy
|
||||||
|
public void destroy() {
|
||||||
|
executorService.shutdown();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user