定版bug修改

This commit is contained in:
2025-07-10 16:48:01 +08:00
parent 8a353ac9a4
commit bc5abdae14
10 changed files with 310 additions and 394 deletions

View File

@@ -6,9 +6,13 @@ import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.njcn.db.handler.AutoFillValueHandler; import com.njcn.db.handler.AutoFillValueHandler;
import com.njcn.db.handler.BatchInjector; import com.njcn.db.handler.BatchInjector;
import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import java.util.Properties;
/** /**
* @author hongawen * @author hongawen
* @version 1.0.0 * @version 1.0.0
@@ -48,5 +52,14 @@ public class MybatisConfig {
return new BatchInjector(); return new BatchInjector();
} }
@Bean
public DatabaseIdProvider databaseIdProvider() {
VendorDatabaseIdProvider provider = new VendorDatabaseIdProvider();
Properties properties = new Properties();
properties.setProperty("MySQL", "mysql"); // MySQL 驱动返回的数据库产品名
properties.setProperty("DM", "dm"); // 达梦驱动返回的数据库产品名
properties.setProperty("ORACLE", "oracle");
provider.setProperties(properties);
return provider;
}
} }

View File

@@ -60,7 +60,9 @@ import org.springframework.util.CollectionUtils;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -194,26 +196,38 @@ public class LineServiceImpl extends ServiceImpl<LineMapper, Line> implements Li
@Override @Override
public CommunicateVO getComFlagInfoData(String id, String searchBeginTime, String searchEndTime) { public CommunicateVO getComFlagInfoData(String id, String searchBeginTime, String searchEndTime) {
CommunicateVO communicateVOList = new CommunicateVO();
String devId = lineMapper.getDevIndex(id); String devId = lineMapper.getDevIndex(id);
Device device = deviceMapper.selectById(devId); Device device = deviceMapper.selectById(devId);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); DateTime begin = DateUtil.beginOfDay(DateUtil.parse(searchBeginTime));
List<PqsCommunicate> communicateList = getCommunicate(devId, searchBeginTime, searchEndTime); DateTime end = DateUtil.endOfDay(DateUtil.parse(searchEndTime));
CommunicateVO communicateVOList = new CommunicateVO(); DateTime login = DateUtil.parse(device.getLoginTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
if (end.isBefore(login)) {
//结束时间比终端投运时间前,则直接返回空
return communicateVOList;
}
if(begin.isBefore(login)){
//开始时间大于投运时间,取投运时间
begin = login;
}
List<PqsCommunicate> communicateList = getCommunicate(devId, begin, end);
List<String> updateTime = new ArrayList<>(); List<String> updateTime = new ArrayList<>();
List<Integer> comType = new ArrayList<>(); List<Integer> comType = new ArrayList<>();
//开始时间 //开始时间
Boolean beginFly = false; boolean beginFly = false;
if (CollUtil.isNotEmpty(communicateList)) { if (CollUtil.isNotEmpty(communicateList)) {
if (!communicateList.get(0).getTime().equals(DateUtil.beginOfDay(DateUtil.parse(searchBeginTime)).toInstant())) { if (!communicateList.get(0).getTime().equals(begin.toInstant())) {
beginFly = true; beginFly = true;
} }
} else { } else {
beginFly = true; beginFly = true;
} }
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (beginFly) { if (beginFly) {
Instant instant = DateUtil.beginOfDay(DateUtil.parse(searchBeginTime)).toInstant(); Instant instant = begin.toInstant();
Long time = instant.toEpochMilli(); Long time = instant.toEpochMilli();
String timeText = df.format(time); String timeText = df.format(time);
updateTime.add(timeText); updateTime.add(timeText);
//取反(正常来时,有变动才会有数据) //取反(正常来时,有变动才会有数据)
@@ -242,7 +256,7 @@ public class LineServiceImpl extends ServiceImpl<LineMapper, Line> implements Li
String format = times.format(date); String format = times.format(date);
Instant endTime = DateUtil.parse(searchEndTime + " " + format).toInstant(); Instant endTime = DateUtil.parse(searchEndTime + " " + format).toInstant();
Boolean endFly = false; boolean endFly = false;
if (CollUtil.isNotEmpty(communicateList)) { if (CollUtil.isNotEmpty(communicateList)) {
if (!communicateList.get(communicateList.size() - 1).getTime().equals(endTime)) { if (!communicateList.get(communicateList.size() - 1).getTime().equals(endTime)) {
endFly = true; endFly = true;
@@ -751,7 +765,7 @@ public class LineServiceImpl extends ServiceImpl<LineMapper, Line> implements Li
List<String> ids = result.stream().map(LineDetail::getId).distinct().collect(Collectors.toList()); List<String> ids = result.stream().map(LineDetail::getId).distinct().collect(Collectors.toList());
List<Line> lineList = lineMapper.selectList(new LambdaQueryWrapper<Line>().in(Line::getId, ids).eq(Line::getState, DataStateEnum.ENABLE.getCode())); List<Line> lineList = lineMapper.selectList(new LambdaQueryWrapper<Line>().in(Line::getId, ids).eq(Line::getState, DataStateEnum.ENABLE.getCode()));
Map<String, Line> lineMap = lineList.stream().collect(Collectors.toMap(Line::getId, Function.identity())); Map<String, Line> lineMap = lineList.stream().collect(Collectors.toMap(Line::getId, Function.identity()));
result.forEach(item->item.setMonitorName(lineMap.getOrDefault(item.getId(),new Line()).getName())); result.forEach(item -> item.setMonitorName(lineMap.getOrDefault(item.getId(), new Line()).getName()));
} }
return result; return result;
} }
@@ -760,17 +774,17 @@ public class LineServiceImpl extends ServiceImpl<LineMapper, Line> implements Li
public List<PollutionSubstationDTO> getPowerStationByMonitorIds(List<String> ids) { public List<PollutionSubstationDTO> getPowerStationByMonitorIds(List<String> ids) {
List<PollutionSubstationDTO> result = new ArrayList<>(); List<PollutionSubstationDTO> result = new ArrayList<>();
List<LineDetail> lineDetailList = lineDetailMapper.selectList(new LambdaQueryWrapper<LineDetail>().in(LineDetail::getId, ids)); List<LineDetail> lineDetailList = lineDetailMapper.selectList(new LambdaQueryWrapper<LineDetail>().in(LineDetail::getId, ids));
List<LineDetail> userLedgerList = lineDetailList.stream().filter(it->StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList()); List<LineDetail> userLedgerList = lineDetailList.stream().filter(it -> StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList());
List<LineDetail> powerLedgerList = lineDetailList.stream().filter(it->StrUtil.isBlank(it.getObjId())).collect(Collectors.toList()); List<LineDetail> powerLedgerList = lineDetailList.stream().filter(it -> StrUtil.isBlank(it.getObjId())).collect(Collectors.toList());
if(CollUtil.isNotEmpty(userLedgerList)){ if (CollUtil.isNotEmpty(userLedgerList)) {
List<String> objIds = userLedgerList.stream().map(LineDetail::getObjId).distinct().collect(Collectors.toList()); List<String> objIds = userLedgerList.stream().map(LineDetail::getObjId).distinct().collect(Collectors.toList());
List<NewUserReportVO> newUserReportVOList = userLedgerFeignClient.getUserReportByIds(objIds).getData(); List<NewUserReportVO> newUserReportVOList = userLedgerFeignClient.getUserReportByIds(objIds).getData();
Map<String,NewUserReportVO> map = newUserReportVOList.stream().collect(Collectors.toMap(NewUserReportVO::getId,Function.identity())); Map<String, NewUserReportVO> map = newUserReportVOList.stream().collect(Collectors.toMap(NewUserReportVO::getId, Function.identity()));
List<DictData> dictDataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_VOLTAGE_STAND.getCode()).getData(); List<DictData> dictDataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_VOLTAGE_STAND.getCode()).getData();
Map<String,DictData> dictDataMap = dictDataList.stream().collect(Collectors.toMap(DictData::getId,Function.identity())); Map<String, DictData> dictDataMap = dictDataList.stream().collect(Collectors.toMap(DictData::getId, Function.identity()));
map.forEach((objId,item)->{ map.forEach((objId, item) -> {
PollutionSubstationDTO pollutionSubstationDTO = new PollutionSubstationDTO(); PollutionSubstationDTO pollutionSubstationDTO = new PollutionSubstationDTO();
pollutionSubstationDTO.setPowerFlag(PowerFlagEnum.NO_GRID_SIDE.getCode()); pollutionSubstationDTO.setPowerFlag(PowerFlagEnum.NO_GRID_SIDE.getCode());
pollutionSubstationDTO.setId(objId); pollutionSubstationDTO.setId(objId);
@@ -782,11 +796,11 @@ public class LineServiceImpl extends ServiceImpl<LineMapper, Line> implements Li
}); });
} }
if(CollUtil.isNotEmpty(powerLedgerList)){ if (CollUtil.isNotEmpty(powerLedgerList)) {
List<Line> lineList = lineMapper.selectList(new LambdaQueryWrapper<Line>().in(Line::getId, powerLedgerList.stream().map(LineDetail::getId).distinct().collect(Collectors.toList())).eq(Line::getState, DataStateEnum.ENABLE.getCode())); List<Line> lineList = lineMapper.selectList(new LambdaQueryWrapper<Line>().in(Line::getId, powerLedgerList.stream().map(LineDetail::getId).distinct().collect(Collectors.toList())).eq(Line::getState, DataStateEnum.ENABLE.getCode()));
List<String> stationIds = lineList.stream().map(it->it.getPids().split(StrUtil.COMMA)[LineBaseEnum.SUB_LEVEL.getCode()]).collect(Collectors.toList()); List<String> stationIds = lineList.stream().map(it -> it.getPids().split(StrUtil.COMMA)[LineBaseEnum.SUB_LEVEL.getCode()]).collect(Collectors.toList());
List<SubstationDTO> stationList = substationMapper.getSubstationById(stationIds); List<SubstationDTO> stationList = substationMapper.getSubstationById(stationIds);
stationList.forEach(item->{ stationList.forEach(item -> {
PollutionSubstationDTO pollutionSubstationDTO = new PollutionSubstationDTO(); PollutionSubstationDTO pollutionSubstationDTO = new PollutionSubstationDTO();
pollutionSubstationDTO.setPowerFlag(PowerFlagEnum.GRID_SIDE.getCode()); pollutionSubstationDTO.setPowerFlag(PowerFlagEnum.GRID_SIDE.getCode());
pollutionSubstationDTO.setId(item.getId()); pollutionSubstationDTO.setId(item.getId());
@@ -881,10 +895,9 @@ public class LineServiceImpl extends ServiceImpl<LineMapper, Line> implements Li
return child.stream().filter(allItem -> allItem.getPid().equals(item.getId())).collect(Collectors.toList()); return child.stream().filter(allItem -> allItem.getPid().equals(item.getId())).collect(Collectors.toList());
} }
public List<PqsCommunicate> getCommunicate(String devId, String startTime, String endTime) { public List<PqsCommunicate> getCommunicate(String devId, DateTime startTime, DateTime endTime) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(PqsCommunicate.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(PqsCommunicate.class);
influxQueryWrapper.between(InfluxDbSqlConstant.TIME, DateUtil.beginOfDay(DateUtil.parse(startTime)).toString(), DateUtil.endOfDay(DateUtil.parse(endTime)).toString()) influxQueryWrapper.eq(PqsCommunicate::getDevId, devId).between(InfluxDbSqlConstant.TIME, startTime.toString(), endTime.toString());
.eq(PqsCommunicate::getDevId, devId);
return pqsCommunicateMapper.selectByQueryWrapper(influxQueryWrapper); return pqsCommunicateMapper.selectByQueryWrapper(influxQueryWrapper);
} }
@@ -901,8 +914,8 @@ public class LineServiceImpl extends ServiceImpl<LineMapper, Line> implements Li
} }
NewUserReportVO newUserReportVO; NewUserReportVO newUserReportVO;
for (AreaLineInfoVO areaLineInfoVO : resList) { for (AreaLineInfoVO areaLineInfoVO : resList) {
if(StrUtil.isNotBlank(areaLineInfoVO.getObjId())){ if (StrUtil.isNotBlank(areaLineInfoVO.getObjId())) {
if(userReportVOMap.containsKey(areaLineInfoVO.getObjId())){ if (userReportVOMap.containsKey(areaLineInfoVO.getObjId())) {
newUserReportVO = userReportVOMap.get(areaLineInfoVO.getObjId()); newUserReportVO = userReportVOMap.get(areaLineInfoVO.getObjId());
areaLineInfoVO.setSubId(newUserReportVO.getId()); areaLineInfoVO.setSubId(newUserReportVO.getId());
areaLineInfoVO.setSubName(newUserReportVO.getProjectName()); areaLineInfoVO.setSubName(newUserReportVO.getProjectName());

View File

@@ -55,6 +55,14 @@ import java.util.zip.ZipOutputStream;
@RequiredArgsConstructor @RequiredArgsConstructor
public class EventAnalysisServiceImpl implements EventAnalysisService { public class EventAnalysisServiceImpl implements EventAnalysisService {
// 定义阈值常量(单位:百分比)
final double[] EVENT_VALUE_THRESHOLDS = {90, 85, 70, 40, 10};
// 定义持续时间阈值(单位:毫秒)
final double[] DURATION_THRESHOLDS = {0.02, 0.1, 0.5, 1, 3, 20, 60, 180};
String[] labels = {"90%", "85%", "70%", "40%", "10%"};
private final InfluxDbUtils influxDbUtils; private final InfluxDbUtils influxDbUtils;
private final LineFeignClient lineFeignClient; private final LineFeignClient lineFeignClient;
@@ -66,76 +74,6 @@ public class EventAnalysisServiceImpl implements EventAnalysisService {
private final DicDataFeignClient dicDataFeignClient; private final DicDataFeignClient dicDataFeignClient;
/*@Override
public Page<EventDetail> getEventAnalyse(EventBaseParam eventBaseParam) {
//查询sql语句
StringBuilder stringResult = new StringBuilder(Param.SELECT).append(Param.EVENT_DETAIL).append(Param.WHERE).
append("time >= '").append(DateUtil.beginOfDay(DateUtil.parse(eventBaseParam.getSearchBeginTime()))).append("' and ").append("time <= '").append(DateUtil.endOfDay(DateUtil.parse(eventBaseParam.getSearchEndTime()))).append("' and ")
.append("line_id= '").append(eventBaseParam.getLineId()).append("'");
int i = (eventBaseParam.getPageNum() - 1) * eventBaseParam.getPageSize();
stringResult.append("LIMIT ").append(eventBaseParam.getPageSize()).append(" OFFSET ").append(i).append(" tz('Asia/Shanghai')");
//查询sql语句总条数
StringBuilder stringTotal = new StringBuilder("SELECT COUNT(num) as aa FROM ").append(Param.EVENT_DETAIL).append(" WHERE ").append("time >= '").append(DateUtil.beginOfDay(DateUtil.parse(eventBaseParam.getSearchBeginTime()))).append("' and ")
.append("time <= '").append(DateUtil.endOfDay(DateUtil.parse(eventBaseParam.getSearchEndTime()))).append("' and ");
stringTotal.append("line_id= '").append(eventBaseParam.getLineId()).append("' tz('Asia/Shanghai')");
//结果集
QueryResult result = influxDbUtils.query(stringResult.toString());
//总条数
QueryResult resultTotal = influxDbUtils.query(stringTotal.toString());
//结果集映射到对象中
InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper();
List<EventDetail> eventDetailList = influxDBResultMapper.toPOJO(result, EventDetail.class);
Page<EventDetail> page = new Page<>();
long total = new BigDecimal(resultTotal.getResults().get(0).getSeries().get(0).getValues().get(0).get(1).toString()).longValue();
page.setTotal(total);
page.setRecords(eventDetailList);
page.setCurrent(eventBaseParam.getPageNum());
page.setSize(eventBaseParam.getPageSize());
return page;
}*/
/**
* 时间无ID全查询
*
* @param startTime
* @param endTime
* @return
* @author xxy
*/
public QueryResult TimeQuery(String startTime, String endTime) {
//构建sql语句
String stringResult = Param.SELECT + Param.EVENT_DETAIL + Param.WHERE + "time >= '" +
DateUtil.beginOfDay(DateUtil.parse(startTime)) +
"' and " + "time <= '" +
DateUtil.endOfDay(DateUtil.parse(endTime)) + "'" + Param.TZ_ASIA_SHANGHAI;
//结果集映射到对象中
return influxDbUtils.query(stringResult);
}
/**
* @return
* @author xxy
* 时间区间查询监测点抽取
*/
public QueryResult MonitorQuery(StatisticsParam statisticsParam) {
//构建sql语句
String stringResult = Param.SELECT + Param.EVENT_DETAIL + Param.WHERE + "" + "time >= '" +
DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime().toString())) +
"' and " + "time <= '" +
DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getEndTime().toString())) +
"' and " + "line_id= '" +
statisticsParam.getLineIndex() + "' " +
Param.TZ_ASIA_SHANGHAI;
//结果集映射到对象中
return influxDbUtils.query(stringResult);
}
/** /**
* 获取电压暂态表及密度坐标图 * 获取电压暂态表及密度坐标图
* *
@@ -377,139 +315,76 @@ public class EventAnalysisServiceImpl implements EventAnalysisService {
@Override @Override
public List<DISDIPVO> eventDisdip(StatisticsParam statisticsParam) { public List<DISDIPVO> eventDisdip(StatisticsParam statisticsParam) {
List<DISDIPVO> result = new ArrayList<>(); // 初始化结果数组默认值为0
int[][] arr = new int[5][8];
/*List<EventDetail> info = new ArrayList<>(); // 查询事件数据
QueryResult query = MonitorQuery(statisticsParam); List<RmpEventDetailPO> events = eventDetailService.list(
InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper(); new LambdaQueryWrapper<RmpEventDetailPO>()
info = influxDBResultMapper.toPOJO(query, EventDetail.class);*/ .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex())
.ge(StringUtils.isNotBlank(statisticsParam.getStartTime()),
//查询监测点未处理暂态事件 RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime())))
List<RmpEventDetailPO> info = eventDetailService.list(new LambdaQueryWrapper<RmpEventDetailPO>() .le(StringUtils.isNotBlank(statisticsParam.getEndTime()),
.eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime())))
.ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime,DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime())))
.le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime())))
); );
int[][] arr = new int[5][8]; // 分类统计事件
for (int i = 0; i < 5; i++) { for (RmpEventDetailPO event : events) {
for (int j = 0; j < 8; j++) { double eventValue = event.getFeatureAmplitude() * 100; // 转换为百分比
arr[i][j] = 0; double duration = event.getDuration();
// 确定事件等级0=90%, 1=85%, ..., 4=10%
int level = getEventLevel(eventValue, EVENT_VALUE_THRESHOLDS);
// 确定持续时间区间索引
int durationIndex = getDurationIndex(duration, DURATION_THRESHOLDS);
if (level != -1 && durationIndex != -1) {
arr[level][durationIndex]++;
} }
} }
for (int i = 0; i < info.size(); i++) {
Double eventvalue = info.get(i).getFeatureAmplitude(); // 构建结果列表
double persisttime = info.get(i).getDuration(); List<DISDIPVO> result = new ArrayList<>();
if (eventvalue * 100 < 10) { for (int i = 0; i < labels.length; i++) {
if (persisttime < 20) { result.add(new DISDIPVO(
arr[4][0]++; labels[i],
} else if (persisttime < 100) { String.valueOf(arr[i][0]), String.valueOf(arr[i][1]), String.valueOf(arr[i][2]), String.valueOf(arr[i][3]),
arr[4][1]++; String.valueOf(arr[i][4]), String.valueOf(arr[i][5]), String.valueOf(arr[i][6]), String.valueOf(arr[i][7])
} else if (persisttime < 500) { ));
arr[4][2]++;
} else if (persisttime < 1000) {
arr[4][3]++;
} else if (persisttime < 3000) {
arr[4][4]++;
} else if (persisttime < 20000) {
arr[4][5]++;
} else if (persisttime < 60000) {
arr[4][6]++;
} else if (persisttime < 180000) {
arr[4][7]++;
}
} else if (eventvalue * 100 < 40) {
if (persisttime < 20) {
arr[3][0]++;
} else if (persisttime < 100) {
arr[3][1]++;
} else if (persisttime < 500) {
arr[3][2]++;
} else if (persisttime < 1000) {
arr[3][3]++;
} else if (persisttime < 3000) {
arr[3][4]++;
} else if (persisttime < 20000) {
arr[3][5]++;
} else if (persisttime < 60000) {
arr[3][6]++;
} else if (persisttime < 180000) {
arr[3][7]++;
}
} else if (eventvalue * 100 < 70) {
if (persisttime < 20) {
arr[2][0]++;
} else if (persisttime < 100) {
arr[2][1]++;
} else if (persisttime < 500) {
arr[2][2]++;
} else if (persisttime < 1000) {
arr[2][3]++;
} else if (persisttime < 3000) {
arr[2][4]++;
} else if (persisttime < 20000) {
arr[2][5]++;
} else if (persisttime < 60000) {
arr[2][6]++;
} else if (persisttime < 180000) {
arr[2][7]++;
}
} else if (eventvalue * 100 < 85) {
if (persisttime < 20) {
arr[1][0]++;
} else if (persisttime < 100) {
arr[1][1]++;
} else if (persisttime < 500) {
arr[1][2]++;
} else if (persisttime < 1000) {
arr[1][3]++;
} else if (persisttime < 3000) {
arr[1][4]++;
} else if (persisttime < 20000) {
arr[1][5]++;
} else if (persisttime < 60000) {
arr[1][6]++;
} else if (persisttime < 180000) {
arr[1][7]++;
}
} else if (eventvalue * 100 <= 90) {
if (persisttime < 20) {
arr[0][0]++;
} else if (persisttime < 100) {
arr[0][1]++;
} else if (persisttime < 500) {
arr[0][2]++;
} else if (persisttime < 1000) {
arr[0][3]++;
} else if (persisttime < 3000) {
arr[0][4]++;
} else if (persisttime < 20000) {
arr[0][5]++;
} else if (persisttime < 60000) {
arr[0][6]++;
} else if (persisttime < 180000) {
arr[0][7]++;
}
}
} }
result.add(new DISDIPVO("90%", String.valueOf(arr[0][0]), String.valueOf(arr[0][1]), String.valueOf(arr[0][2]), String.valueOf(arr[0][3]), String.valueOf(arr[0][4]), String.valueOf(arr[0][5]), String.valueOf(arr[0][6]), String.valueOf(arr[0][7])));
result.add(new DISDIPVO("85%", String.valueOf(arr[1][0]), String.valueOf(arr[1][1]), String.valueOf(arr[1][2]), String.valueOf(arr[1][3]), String.valueOf(arr[1][4]), String.valueOf(arr[1][5]), String.valueOf(arr[1][6]), String.valueOf(arr[1][7])));
result.add(new DISDIPVO("70%", String.valueOf(arr[2][0]), String.valueOf(arr[2][1]), String.valueOf(arr[2][2]), String.valueOf(arr[2][3]), String.valueOf(arr[2][4]), String.valueOf(arr[2][5]), String.valueOf(arr[2][6]), String.valueOf(arr[2][7])));
result.add(new DISDIPVO("40%", String.valueOf(arr[3][0]), String.valueOf(arr[3][1]), String.valueOf(arr[3][2]), String.valueOf(arr[3][3]), String.valueOf(arr[3][4]), String.valueOf(arr[3][5]), String.valueOf(arr[3][6]), String.valueOf(arr[3][7])));
result.add(new DISDIPVO("10%", String.valueOf(arr[4][0]), String.valueOf(arr[4][1]), String.valueOf(arr[4][2]), String.valueOf(arr[4][3]), String.valueOf(arr[4][4]), String.valueOf(arr[4][5]), String.valueOf(arr[4][6]), String.valueOf(arr[4][7])));
return result; return result;
} }
/**
* 根据事件值获取等级索引(从高到低匹配)
*/
private int getEventLevel(double eventValue, double[] thresholds) {
for (int i = 0; i < thresholds.length; i++) {
if (eventValue >= thresholds[i]) {
return i; // 返回匹配的等级索引
}
}
return thresholds.length - 1; // 默认最低等级
}
/**
* 根据持续时间获取区间索引
*/
private int getDurationIndex(double duration, double[] thresholds) {
for (int i = 0; i < thresholds.length; i++) {
if (duration < thresholds[i]) {
return i;
}
}
return thresholds.length - 1; // 超过最大阈值时返回最后一个区间
}
@Override @Override
public List<IEC411VO> IEC411(StatisticsParam statisticsParam) { public List<IEC411VO> IEC411(StatisticsParam statisticsParam) {
List<IEC411VO> result = new ArrayList<>(); List<IEC411VO> result = new ArrayList<>();
// List<EventDetail> info = new ArrayList<>();
// QueryResult query = MonitorQuery(statisticsParam);
// InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper();
// info = influxDBResultMapper.toPOJO(query, EventDetail.class);
//查询监测点未处理暂态事件 //查询监测点未处理暂态事件
List<RmpEventDetailPO> info = eventDetailService.list(new LambdaQueryWrapper<RmpEventDetailPO>() List<RmpEventDetailPO> events = eventDetailService.list(new LambdaQueryWrapper<RmpEventDetailPO>()
.eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex())
.ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime()))) .ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime())))
.le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime()))) .le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime())))
@@ -520,51 +395,18 @@ public class EventAnalysisServiceImpl implements EventAnalysisService {
arr[i][j] = 0; arr[i][j] = 0;
} }
} }
for (int i = 0; i < info.size(); i++) { // 分类统计事件
Double eventvalue = info.get(i).getFeatureAmplitude(); for (RmpEventDetailPO event : events) {
double persisttime = info.get(i).getDuration(); double eventValue = event.getFeatureAmplitude(); // 转换为百分比
if (eventvalue * 100 < 1) { double duration = event.getDuration();
if (persisttime < 20 && persisttime >= 10) {
arr[2][0]++; // 确定事件等级0=90%, 1=85%, ..., 4=10%
} else if (persisttime < 100) { int level = getIEC411_EventLevel(eventValue);
arr[2][1]++; // 确定持续时间区间索引
} else if (persisttime < 200) { int durationIndex = getDurationIndex(duration, DURATION_THRESHOLDS);
arr[2][2]++;
} else if (persisttime < 400) { if (level != -1 && durationIndex != -1) {
arr[2][3]++; arr[level][durationIndex]++;
} else if (persisttime < 1000) {
arr[2][4]++;
} else {
arr[2][5]++;
}
} else if (eventvalue * 100 < 40) {
if (persisttime < 20 && persisttime >= 10) {
arr[1][0]++;
} else if (persisttime < 100) {
arr[1][1]++;
} else if (persisttime < 200) {
arr[1][2]++;
} else if (persisttime < 400) {
arr[1][3]++;
} else if (persisttime < 1000) {
arr[1][4]++;
} else {
arr[1][5]++;
}
} else if (eventvalue * 100 <= 70) {
if (persisttime < 20 && persisttime >= 10) {
arr[0][0]++;
} else if (persisttime < 100) {
arr[0][1]++;
} else if (persisttime < 200) {
arr[0][2]++;
} else if (persisttime < 400) {
arr[0][3]++;
} else if (persisttime < 1000) {
arr[0][4]++;
} else {
arr[0][5]++;
}
} }
} }
result.add(new IEC411VO("40~70%", String.valueOf(arr[0][0]), String.valueOf(arr[0][1]), String.valueOf(arr[0][2]), String.valueOf(arr[0][3]), String.valueOf(arr[0][4]), String.valueOf(arr[0][5]))); result.add(new IEC411VO("40~70%", String.valueOf(arr[0][0]), String.valueOf(arr[0][1]), String.valueOf(arr[0][2]), String.valueOf(arr[0][3]), String.valueOf(arr[0][4]), String.valueOf(arr[0][5])));
@@ -573,15 +415,25 @@ public class EventAnalysisServiceImpl implements EventAnalysisService {
return result; return result;
} }
/**
* 根据事件值获取等级索引(从高到低匹配)
*/
private int getIEC411_EventLevel(double eventValue) {
if (eventValue >= 0.1 && eventValue < 0.4) {
return 1;
} else if (eventValue >= 0.4 && eventValue < 0.7) {
return 0;
} else if (eventValue >= 0.7 && eventValue < 1) {
return 2;
}
return -1;
}
@Override @Override
public List<IEC28VO> IEC28(StatisticsParam statisticsParam) { public List<IEC28VO> IEC28(StatisticsParam statisticsParam) {
List<IEC28VO> result = new ArrayList<>(); List<IEC28VO> result = new ArrayList<>();
/*QueryResult query = MonitorQuery(statisticsParam);
InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper();
List<EventDetail> info = influxDBResultMapper.toPOJO(query, EventDetail.class);*/
//查询监测点未处理暂态事件 //查询监测点未处理暂态事件
List<RmpEventDetailPO> info = eventDetailService.list(new LambdaQueryWrapper<RmpEventDetailPO>() List<RmpEventDetailPO> info = eventDetailService.list(new LambdaQueryWrapper<RmpEventDetailPO>()
.eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex())
@@ -951,7 +803,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService {
Integer endMonth = Integer.parseInt(endTime.substring(5, 7)); Integer endMonth = Integer.parseInt(endTime.substring(5, 7));
Integer startYear = Integer.parseInt(startTime.substring(0, 4)); Integer startYear = Integer.parseInt(startTime.substring(0, 4));
Integer endYear = Integer.parseInt(endTime.substring(0, 4)); Integer endYear = Integer.parseInt(endTime.substring(0, 4));
if (statisticsParam.getFlag()==0) { if (statisticsParam.getFlag() == 0) {
while (startYear != endYear && startMonth != endMonth) { while (startYear != endYear && startMonth != endMonth) {
builder1.delete(0, builder1.length()); builder1.delete(0, builder1.length());
builder2.delete(0, builder2.length()); builder2.delete(0, builder2.length());
@@ -968,7 +820,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService {
// long count = eventDetailList.stream().filter(x -> x.getWaveType() == 1).count(); // long count = eventDetailList.stream().filter(x -> x.getWaveType() == 1).count();
List<RmpEventDetailPO> eventDetailList = eventDetailService.list(new LambdaQueryWrapper<RmpEventDetailPO>() List<RmpEventDetailPO> eventDetailList = eventDetailService.list(new LambdaQueryWrapper<RmpEventDetailPO>()
.eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex())
.eq(StringUtils.isNotBlank(dataDto.getId()),RmpEventDetailPO::getEventType, dataDto.getId()) .eq(StringUtils.isNotBlank(dataDto.getId()), RmpEventDetailPO::getEventType, dataDto.getId())
.ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime()))) .ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime())))
.le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime()))) .le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime())))
); );
@@ -994,7 +846,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService {
// long count1 = eventDetailList.stream().filter(x -> x.getWaveType() == 1).count(); // long count1 = eventDetailList.stream().filter(x -> x.getWaveType() == 1).count();
List<RmpEventDetailPO> eventDetailList = eventDetailService.list(new LambdaQueryWrapper<RmpEventDetailPO>() List<RmpEventDetailPO> eventDetailList = eventDetailService.list(new LambdaQueryWrapper<RmpEventDetailPO>()
.eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex())
.eq(StringUtils.isNotBlank(dataDto.getId()),RmpEventDetailPO::getEventType, dataDto.getId()) .eq(StringUtils.isNotBlank(dataDto.getId()), RmpEventDetailPO::getEventType, dataDto.getId())
.ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime()))) .ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime())))
.le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime()))) .le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime())))
); );
@@ -1013,18 +865,18 @@ public class EventAnalysisServiceImpl implements EventAnalysisService {
List<RmpEventDetailPO> eventDetailList = eventDetailService.list(new LambdaQueryWrapper<RmpEventDetailPO>() List<RmpEventDetailPO> eventDetailList = eventDetailService.list(new LambdaQueryWrapper<RmpEventDetailPO>()
.eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex())
.eq(StringUtils.isNotBlank(dataDto.getId()),RmpEventDetailPO::getEventType, dataDto.getId()) .eq(StringUtils.isNotBlank(dataDto.getId()), RmpEventDetailPO::getEventType, dataDto.getId())
.ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime()))) .ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime())))
.le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime()))) .le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime())))
); );
Map<String, List<RmpEventDetailPO>> map = eventDetailList.stream().filter(x -> dataDto.getId().equals(x.getEventType())) Map<String, List<RmpEventDetailPO>> map = eventDetailList.stream().filter(x -> dataDto.getId().equals(x.getEventType()))
.peek(t ->t.setFormatTime(t.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))) .peek(t -> t.setFormatTime(t.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))))
.collect(Collectors.groupingBy(RmpEventDetailPO::getFormatTime)); .collect(Collectors.groupingBy(RmpEventDetailPO::getFormatTime));
Set<String> keySet = map.keySet(); Set<String> keySet = map.keySet();
LocalDate parse1 = LocalDate.parse(startTime); LocalDate parse1 = LocalDate.parse(startTime);
LocalDate parse2 = LocalDate.parse(endTime); LocalDate parse2 = LocalDate.parse(endTime);
while (!parse1.equals(parse2.plus(1, ChronoUnit.DAYS))){ while (!parse1.equals(parse2.plus(1, ChronoUnit.DAYS))) {
if (keySet.contains(parse1.toString())) { if (keySet.contains(parse1.toString())) {
// List<EventDetailNew> eventDetailNews = map.get(parse1.toString()); // List<EventDetailNew> eventDetailNews = map.get(parse1.toString());
List<RmpEventDetailPO> eventDetailNews = map.get(parse1.toString()); List<RmpEventDetailPO> eventDetailNews = map.get(parse1.toString());
@@ -1067,21 +919,17 @@ public class EventAnalysisServiceImpl implements EventAnalysisService {
} }
@Override @Override
public StatisticVO getStatistic (StatisticsParam statisticsParam) { public StatisticVO getStatistic(StatisticsParam statisticsParam) {
StatisticVO result = new StatisticVO(); StatisticVO result = new StatisticVO();
List<EventDetail> list = new ArrayList<>(); List<EventDetail> list = new ArrayList<>();
List<ReasonsVO> reasonsVOS = new ArrayList<>(); List<ReasonsVO> reasonsVOS = new ArrayList<>();
List<TypesVO> typesVOS = new ArrayList<>(); List<TypesVO> typesVOS = new ArrayList<>();
// List<EventDetail> info = new ArrayList<>();
// QueryResult query = MonitorQuery(statisticsParam);
// InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper();
// info = influxDBResultMapper.toPOJO(query, EventDetail.class);
//获取暂降字典信息 //获取暂降字典信息
DictData dataDto = dicDataFeignClient.getDicDataByCode(DicDataEnum.VOLTAGE_DIP.getCode()).getData(); DictData dataDto = dicDataFeignClient.getDicDataByCode(DicDataEnum.VOLTAGE_DIP.getCode()).getData();
//数据暂降查询 //数据暂降查询
List<RmpEventDetailPO> info = eventDetailService.list(new LambdaQueryWrapper<RmpEventDetailPO>() List<RmpEventDetailPO> info = eventDetailService.list(new LambdaQueryWrapper<RmpEventDetailPO>()
.eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex())
.eq(StringUtils.isNotBlank(dataDto.getId()),RmpEventDetailPO::getEventType, dataDto.getId()) .eq(StringUtils.isNotBlank(dataDto.getId()), RmpEventDetailPO::getEventType, dataDto.getId())
.ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime()))) .ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime())))
.le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime()))) .le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime())))
); );
@@ -1155,9 +1003,6 @@ public class EventAnalysisServiceImpl implements EventAnalysisService {
ProbabilityVO result = new ProbabilityVO(); ProbabilityVO result = new ProbabilityVO();
List<EventDetail> info = new ArrayList<>(); List<EventDetail> info = new ArrayList<>();
// QueryResult query = MonitorQuery(statisticsParam);
// InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper();
// List<EventDetail> info2 = influxDBResultMapper.toPOJO(query, EventDetail.class);
//数据暂降查询 //数据暂降查询
List<RmpEventDetailPO> infos = eventDetailService.list(new LambdaQueryWrapper<RmpEventDetailPO>() List<RmpEventDetailPO> infos = eventDetailService.list(new LambdaQueryWrapper<RmpEventDetailPO>()
.eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex())
@@ -1265,7 +1110,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService {
for (String s : subsectionSet) { for (String s : subsectionSet) {
if (strings1.get(i).equals(s)) { if (strings1.get(i).equals(s)) {
if (subsectionMap.get(s) == 0) { if (subsectionMap.get(s) == 0) {
pereventvalue.add(".00"); pereventvalue.add("0.00");
break; break;
} }
if (subsectionMap.get(s) / count.doubleValue() == 1.0) { if (subsectionMap.get(s) / count.doubleValue() == 1.0) {
@@ -1296,7 +1141,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService {
for (String s : countSet) { for (String s : countSet) {
if (strings.get(i).equals(s)) { if (strings.get(i).equals(s)) {
if (countMap.get(s) == 0) { if (countMap.get(s) == 0) {
eventvalue.add(".00"); eventvalue.add("0.00");
break; break;
} }
if (countMap.get(s) / count.floatValue() == 1.0) { if (countMap.get(s) / count.floatValue() == 1.0) {
@@ -1357,7 +1202,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService {
for (String s : timeSet) { for (String s : timeSet) {
if (strings2.get(i).equals(s)) { if (strings2.get(i).equals(s)) {
if (timeMap.get(s) == 0) { if (timeMap.get(s) == 0) {
persisttime.add(".00"); persisttime.add("0.00");
break; break;
} }
if (timeMap.get(s) / count.floatValue() == 1.0) { if (timeMap.get(s) / count.floatValue() == 1.0) {
@@ -1414,7 +1259,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService {
for (String s : time2Set) { for (String s : time2Set) {
if (strings2.get(i).equals(s)) { if (strings2.get(i).equals(s)) {
if (timeMap2.get(s) == 0) { if (timeMap2.get(s) == 0) {
sisttime.add(".00"); sisttime.add("0.00");
break; break;
} }
if (timeMap2.get(s) / count.floatValue() == 1.0) { if (timeMap2.get(s) / count.floatValue() == 1.0) {
@@ -1464,7 +1309,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService {
//查询监测点未处理暂态事件 //查询监测点未处理暂态事件
List<RmpEventDetailPO> eventDetails = eventDetailService.list(new LambdaQueryWrapper<RmpEventDetailPO>() List<RmpEventDetailPO> eventDetails = eventDetailService.list(new LambdaQueryWrapper<RmpEventDetailPO>()
.eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex())
.eq(StrUtil.isNotBlank(data.getId()),RmpEventDetailPO::getEventType, data.getId()) .eq(StrUtil.isNotBlank(data.getId()), RmpEventDetailPO::getEventType, data.getId())
.ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime()))) .ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime())))
.le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime()))) .le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime())))
); );
@@ -1524,7 +1369,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService {
voltageToleranceCurve.setLineId(dto.getLineId()); voltageToleranceCurve.setLineId(dto.getLineId());
voltageToleranceCurve.setEventId(dto.getEventId()); voltageToleranceCurve.setEventId(dto.getEventId());
voltageToleranceCurve.setPersistTime(dto.getDuration()); voltageToleranceCurve.setPersistTime(dto.getDuration());
voltageToleranceCurve.setEventValue(dto.getFeatureAmplitude()*100); voltageToleranceCurve.setEventValue(dto.getFeatureAmplitude() * 100);
voltageToleranceCurve.setTime(dto.getStartTime()); voltageToleranceCurve.setTime(dto.getStartTime());
voltageToleranceCurve.setGdName(info.getGdName()); voltageToleranceCurve.setGdName(info.getGdName());
voltageToleranceCurve.setSubName(info.getSubName()); voltageToleranceCurve.setSubName(info.getSubName());

View File

@@ -39,7 +39,7 @@ import java.util.regex.Pattern;
@RequestMapping("/qualifiedReport") @RequestMapping("/qualifiedReport")
@Api(tags = "报告-合格率报告") @Api(tags = "报告-合格率报告")
@RequiredArgsConstructor @RequiredArgsConstructor
public class QualifiedReport extends BaseController { public class QualifiedReportController extends BaseController {
private final QualifiedReportService qualifiedReportService; private final QualifiedReportService qualifiedReportService;
@@ -56,7 +56,7 @@ public class QualifiedReport extends BaseController {
TimeInterval timeInterval = new TimeInterval(); TimeInterval timeInterval = new TimeInterval();
String searchValue = qualifiedReportParam.getSearchValue(); String searchValue = qualifiedReportParam.getSearchValue();
Pattern pattern = Pattern.compile(PatternRegex.SPECIAL_REGEX); Pattern pattern = Pattern.compile(PatternRegex.SPECIAL_REGEX);
if(pattern.matcher(searchValue).find()){ if(!pattern.matcher(searchValue).find()){
throw new BusinessException(ValidMessage.SPECIAL_REGEX); throw new BusinessException(ValidMessage.SPECIAL_REGEX);
} }
String methodDescribe = getMethodDescribe("pageTable"); String methodDescribe = getMethodDescribe("pageTable");

View File

@@ -185,34 +185,78 @@
</select> </select>
<select id="getPercentages" resultType="com.njcn.harmonic.pojo.vo.MonitorOverLimitVO$DataVO"> <select id="getPercentages" resultType="com.njcn.harmonic.pojo.vo.MonitorOverLimitVO$DataVO">
SELECT SELECT
TO_CHAR(time_id, 'YYYY-MM-DD') AS time, <choose>
NVL(TRUNCATE( <when test="_databaseId == 'mysql'">
CASE DATE_FORMAT(time_id, '%Y-%m-%d')
WHEN SUM(all_time) = 0 THEN 0 </when>
ELSE (1 - ( <otherwise>
sum( flicker_overtime )+ sum( flicker_all_time )+ sum( freq_dev_overtime )+ sum( voltage_dev_overtime )+ sum( ubalance_overtime )+ sum( uaberrance_overtime )+ sum( i_neg_overtime )+ sum( uharm_2_overtime )+ sum( uharm_3_overtime )+ sum( uharm_4_overtime )+ sum( uharm_5_overtime )+ sum( uharm_6_overtime )+ sum( uharm_7_overtime )+ sum( uharm_8_overtime )+ sum( uharm_9_overtime )+ sum( uharm_10_overtime )+ sum( uharm_11_overtime )+ sum( uharm_12_overtime )+ sum( uharm_13_overtime )+ sum( uharm_14_overtime )+ sum( uharm_15_overtime )+ sum( uharm_16_overtime )+ sum( uharm_17_overtime )+ sum( uharm_18_overtime )+ sum( uharm_19_overtime )+ sum( uharm_20_overtime )+ sum( uharm_21_overtime )+ sum( uharm_22_overtime )+ sum( uharm_23_overtime )+ sum( uharm_24_overtime )+ sum( uharm_25_overtime )+ sum( iharm_2_overtime )+ sum( iharm_3_overtime )+ sum( iharm_4_overtime )+ sum( iharm_5_overtime )+ sum( iharm_6_overtime )+ sum( iharm_7_overtime )+ sum( iharm_8_overtime )+ sum( iharm_9_overtime )+ sum( iharm_10_overtime )+ sum( iharm_11_overtime )+ sum( iharm_12_overtime )+ sum( iharm_13_overtime )+ sum( iharm_14_overtime )+ sum( iharm_15_overtime )+ sum( iharm_16_overtime )+ sum( iharm_17_overtime )+ sum( iharm_18_overtime )+ sum( iharm_19_overtime )+ sum( iharm_20_overtime )+ sum( iharm_21_overtime )+ sum( iharm_22_overtime )+ sum( iharm_23_overtime )+ sum( iharm_24_overtime )+ sum( iharm_25_overtime )+ sum( inuharm_1_overtime )+ sum( inuharm_2_overtime )+ sum( inuharm_3_overtime )+ sum( inuharm_4_overtime )+ sum( inuharm_5_overtime )+ sum( inuharm_6_overtime )+ sum( inuharm_7_overtime )+ sum( inuharm_8_overtime )+ sum( inuharm_9_overtime )+ sum( inuharm_10_overtime )+ sum( inuharm_11_overtime )+ sum( inuharm_12_overtime )+ sum( inuharm_13_overtime )+ sum( inuharm_14_overtime )+ sum( inuharm_15_overtime )+ sum( inuharm_16_overtime )) TO_CHAR(time_id, 'YYYY-MM-DD')
/ NULLIF(SUM(all_time) * 71, 0)) * 100 </otherwise>
END, 2), 0) AS data </choose> AS time,
FROM <choose>
r_stat_limit_rate_d <when test="_databaseId == 'mysql'">
<where> IFNULL(ROUND(
phasic_type = 'T' </when>
<if test=" ids != null and ids.size > 0"> <otherwise>
AND my_index IN NVL(TRUNC(
<foreach collection='ids' item='item' index="index" open='(' separator=',' close=')'> </otherwise>
#{item} </choose>
</foreach> CASE
</if> WHEN SUM(all_time) = 0 THEN 0
<if test=" statTime != null and statTime !=''"> ELSE (1 - (
AND time_id >= #{statTime} -- 各类指标求和(保持原有逻辑不变)
</if> SUM(flicker_overtime) + SUM(flicker_all_time) + SUM(freq_dev_overtime) +
<if test="endTime != null and endTime != ''"> SUM(voltage_dev_overtime) + SUM(ubalance_overtime) + SUM(uaberrance_overtime) +
AND time_id &lt;= #{endTime} SUM(i_neg_overtime) +
</if> -- 电压谐波 (2-25)
</where> SUM(uharm_2_overtime) + SUM(uharm_3_overtime) + SUM(uharm_4_overtime) + SUM(uharm_5_overtime) +
GROUP BY SUM(uharm_6_overtime) + SUM(uharm_7_overtime) + SUM(uharm_8_overtime) + SUM(uharm_9_overtime) +
TO_CHAR(time_id, 'YYYY-MM-DD') SUM(uharm_10_overtime) + SUM(uharm_11_overtime) + SUM(uharm_12_overtime) + SUM(uharm_13_overtime) +
SUM(uharm_14_overtime) + SUM(uharm_15_overtime) + SUM(uharm_16_overtime) + SUM(uharm_17_overtime) +
SUM(uharm_18_overtime) + SUM(uharm_19_overtime) + SUM(uharm_20_overtime) + SUM(uharm_21_overtime) +
SUM(uharm_22_overtime) + SUM(uharm_23_overtime) + SUM(uharm_24_overtime) + SUM(uharm_25_overtime) +
-- 电流谐波 (2-25)
SUM(iharm_2_overtime) + SUM(iharm_3_overtime) + SUM(iharm_4_overtime) + SUM(iharm_5_overtime) +
SUM(iharm_6_overtime) + SUM(iharm_7_overtime) + SUM(iharm_8_overtime) + SUM(iharm_9_overtime) +
SUM(iharm_10_overtime) + SUM(iharm_11_overtime) + SUM(iharm_12_overtime) + SUM(iharm_13_overtime) +
SUM(iharm_14_overtime) + SUM(iharm_15_overtime) + SUM(iharm_16_overtime) + SUM(iharm_17_overtime) +
SUM(iharm_18_overtime) + SUM(iharm_19_overtime) + SUM(iharm_20_overtime) + SUM(iharm_21_overtime) +
SUM(iharm_22_overtime) + SUM(iharm_23_overtime) + SUM(iharm_24_overtime) + SUM(iharm_25_overtime) +
-- 间谐波 (1-16)
SUM(inuharm_1_overtime) + SUM(inuharm_2_overtime) + SUM(inuharm_3_overtime) + SUM(inuharm_4_overtime) +
SUM(inuharm_5_overtime) + SUM(inuharm_6_overtime) + SUM(inuharm_7_overtime) + SUM(inuharm_8_overtime) +
SUM(inuharm_9_overtime) + SUM(inuharm_10_overtime) + SUM(inuharm_11_overtime) + SUM(inuharm_12_overtime) +
SUM(inuharm_13_overtime) + SUM(inuharm_14_overtime) + SUM(inuharm_15_overtime) + SUM(inuharm_16_overtime)
) / NULLIF(SUM(all_time) * 71, 0)) * 100
END, 2), 0) AS data
FROM
r_stat_limit_rate_d
<where>
phasic_type = 'T'
<if test="ids != null and ids.size > 0">
AND my_index IN
<foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="statTime != null and statTime != ''">
AND time_id >= #{statTime}
</if>
<if test="endTime != null and endTime != ''">
AND time_id &lt;= #{endTime}
</if>
</where>
GROUP BY
<choose>
<when test="_databaseId == 'mysql'">
DATE_FORMAT(time_id, '%Y-%m-%d')
</when>
<otherwise>
TO_CHAR(time_id, 'YYYY-MM-DD')
</otherwise>
</choose>
ORDER BY time
</select> </select>

View File

@@ -78,29 +78,37 @@ public class HarmInHarmServiceImpl implements HarmInHarmService {
if (StrUtil.isNotBlank(lineId)) { if (StrUtil.isNotBlank(lineId)) {
if (harmState == 0) { if (harmState == 0) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmRateV.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmRateV.class);
influxQueryWrapper.meanSamePrefixAndSuffix("v_","", HarmonicTimesUtil.harmonicTimesList(2,50,1)) influxQueryWrapper.meanSamePrefixAndSuffix("v_", "", HarmonicTimesUtil.harmonicTimesList(2, 50, 1))
.between(DataHarmRateV::getTime,startTime,endTime) .between(DataHarmRateV::getTime, startTime, endTime)
.eq(DataHarmRateV::getLineId,lineId) .eq(DataHarmRateV::getLineId, lineId)
.eq(DataHarmRateV::getValueType, InfluxDBTableConstant.CP95) .eq(DataHarmRateV::getValueType, InfluxDBTableConstant.CP95)
.ne(DataHarmRateV::getPhaseType,InfluxDBTableConstant.PHASE_TYPE_T); .ne(DataHarmRateV::getPhaseType, InfluxDBTableConstant.PHASE_TYPE_T);
DataHarmRateV dataHarmRateV = dataHarmRateVService.getMeanAllTimesData(influxQueryWrapper); DataHarmRateV dataHarmRateV = dataHarmRateVService.getMeanAllTimesData(influxQueryWrapper);
if(Objects.nonNull(dataHarmRateV)){ if (Objects.nonNull(dataHarmRateV)) {
for (int i = 2; i < 51; i++) { for (int i = 2; i < 51; i++) {
floatList.add(PubUtils.getValueByMethodDouble(dataHarmRateV, "getV", i).floatValue()); floatList.add(PubUtils.getValueByMethodDouble(dataHarmRateV, "getV", i).floatValue());
} }
}else {
for (int i = 2; i < 51; i++) {
floatList.add(null);
}
} }
} else { } else {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataI.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataI.class);
influxQueryWrapper.meanSamePrefixAndSuffix("i_","", HarmonicTimesUtil.harmonicTimesList(2,50,1)) influxQueryWrapper.meanSamePrefixAndSuffix("i_", "", HarmonicTimesUtil.harmonicTimesList(2, 50, 1))
.between(DataHarmRateV::getTime,startTime,endTime) .between(DataHarmRateV::getTime, startTime, endTime)
.eq(DataHarmRateV::getLineId,lineId) .eq(DataHarmRateV::getLineId, lineId)
.eq(DataHarmRateV::getValueType, InfluxDBTableConstant.CP95) .eq(DataHarmRateV::getValueType, InfluxDBTableConstant.CP95)
.ne(DataHarmRateV::getPhaseType,InfluxDBTableConstant.PHASE_TYPE_T); .ne(DataHarmRateV::getPhaseType, InfluxDBTableConstant.PHASE_TYPE_T);
DataI dataI = dataIService.getMeanAllTimesData(influxQueryWrapper); DataI dataI = dataIService.getMeanAllTimesData(influxQueryWrapper);
if(Objects.nonNull(dataI)){ if (Objects.nonNull(dataI)) {
for (int i = 2; i < 51; i++) { for (int i = 2; i < 51; i++) {
floatList.add(PubUtils.getValueByMethodDouble(dataI, "getI", i).floatValue()); floatList.add(PubUtils.getValueByMethodDouble(dataI, "getI", i).floatValue());
} }
}else {
for (int i = 2; i < 51; i++) {
floatList.add(null);
}
} }
} }
} }

View File

@@ -72,7 +72,6 @@ public class HarmonicServiceImpl implements IHarmonicService {
public List<PollutionVO> getDeptSubstationRelations(HarmonicPublicParam harmonicPublicParam) { public List<PollutionVO> getDeptSubstationRelations(HarmonicPublicParam harmonicPublicParam) {
harmonicPublicParam.setServerName(generalInfo.getMicroServiceName()); harmonicPublicParam.setServerName(generalInfo.getMicroServiceName());
List<PollutionVO> list = new ArrayList<>(); List<PollutionVO> list = new ArrayList<>();
List<String> lineList = new ArrayList<>();
if (StringUtils.isBlank(RequestUtil.getDeptIndex())) { if (StringUtils.isBlank(RequestUtil.getDeptIndex())) {
return list; return list;
} }
@@ -83,25 +82,23 @@ public class HarmonicServiceImpl implements IHarmonicService {
} else { } else {
userLedgerVOMap = new HashMap<>(); userLedgerVOMap = new HashMap<>();
} }
List<GeneralDeviceDTO> deptList = generalDeviceInfoClient.getPracticalRunDeviceInfo(harmonicPublicParam).getData(); List<GeneralDeviceDTO> deptList = generalDeviceInfoClient.getPracticalRunDeviceInfo(harmonicPublicParam).getData();
deptList.forEach(dept -> lineList.addAll(dept.getLineIndexes()));
//获取所有的数据信息
List<RStatLimitTargetDPO> limitTargetNew = getLimitTargetNew(lineList, harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime());
//聚合查询
List<RStatLimitTargetDPO> finalAllData;
if (Objects.equals(harmonicPublicParam.getStatisticalType().getCode(), DicDataEnum.XBDY_ENUM.getCode())) {
finalAllData = getAllDataV(lineList, harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime());
} else if (Objects.equals(harmonicPublicParam.getStatisticalType().getCode(), DicDataEnum.XBDL_ENUM.getCode())) {
finalAllData = getAllDataI(lineList, harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime());
} else {
finalAllData = new ArrayList<>();
}
for (GeneralDeviceDTO dept : deptList) { for (GeneralDeviceDTO dept : deptList) {
if (CollUtil.isEmpty(dept.getLineIndexes())) { if (CollUtil.isEmpty(dept.getLineIndexes())) {
continue; continue;
} }
//获取所有的数据信息
List<RStatLimitTargetDPO> limitTargetNew = getLimitTargetNew(dept.getLineIndexes(), harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime());
//聚合查询
List<RStatLimitTargetDPO> finalAllData;
if (Objects.equals(harmonicPublicParam.getStatisticalType().getCode(), DicDataEnum.XBDY_ENUM.getCode())) {
finalAllData = getAllDataV(dept.getLineIndexes(), harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime());
} else if (Objects.equals(harmonicPublicParam.getStatisticalType().getCode(), DicDataEnum.XBDL_ENUM.getCode())) {
finalAllData = getAllDataI(dept.getLineIndexes(), harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime());
} else {
finalAllData = new ArrayList<>();
}
PollutionParamDTO paramDTO = new PollutionParamDTO(); PollutionParamDTO paramDTO = new PollutionParamDTO();
paramDTO.setLineList(dept.getLineIndexes()); paramDTO.setLineList(dept.getLineIndexes());
List<PollutionLineDTO> pollutionLineDTOList = lineFeignClient.getLineInfo(paramDTO).getData(); List<PollutionLineDTO> pollutionLineDTOList = lineFeignClient.getLineInfo(paramDTO).getData();
@@ -127,10 +124,7 @@ public class HarmonicServiceImpl implements IHarmonicService {
children.setPowerFlag(PowerFlagEnum.GRID_SIDE.getCode()); children.setPowerFlag(PowerFlagEnum.GRID_SIDE.getCode());
children.setName(monitList.get(0).getSubstation()); children.setName(monitList.get(0).getSubstation());
//监测点id //监测点id
List<String> lineIds = monitList.stream().map(PollutionLineDTO::getId).collect(Collectors.toList()); children.setData(handleDataNew(limitTargetNew, finalAllData, harmonicPublicParam.getStatisticalType().getCode()).getRatio());
List<RStatLimitTargetDPO> collect = limitTargetNew.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
List<RStatLimitTargetDPO> sumList = finalAllData.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
children.setData(handleDataNew(collect, sumList, harmonicPublicParam.getStatisticalType().getCode()).getRatio());
childrenList.add(children); childrenList.add(children);
}); });
@@ -144,10 +138,7 @@ public class HarmonicServiceImpl implements IHarmonicService {
children.setName(StrUtil.isNotBlank(userLedgerVO.getProjectName()) ? userLedgerVO.getProjectName() : "异常数据"); children.setName(StrUtil.isNotBlank(userLedgerVO.getProjectName()) ? userLedgerVO.getProjectName() : "异常数据");
children.setPowerFlag(PowerFlagEnum.NO_GRID_SIDE.getCode()); children.setPowerFlag(PowerFlagEnum.NO_GRID_SIDE.getCode());
//监测点id //监测点id
List<String> lineIds = mList.stream().map(PollutionLineDTO::getId).collect(Collectors.toList()); children.setData(handleDataNew(limitTargetNew, finalAllData, harmonicPublicParam.getStatisticalType().getCode()).getRatio());
List<RStatLimitTargetDPO> collect = limitTargetNew.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
List<RStatLimitTargetDPO> sumList = finalAllData.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
children.setData(handleDataNew(collect, sumList, harmonicPublicParam.getStatisticalType().getCode()).getRatio());
childrenList.add(children); childrenList.add(children);
}); });
} }
@@ -173,33 +164,26 @@ public class HarmonicServiceImpl implements IHarmonicService {
param.setServerName(generalInfo.getMicroServiceName()); param.setServerName(generalInfo.getMicroServiceName());
List<HarmonicDeptVO> list = new ArrayList<>(); List<HarmonicDeptVO> list = new ArrayList<>();
List<GeneralDeviceDTO> deptList = generalDeviceInfoClient.getPracticalRunDeviceInfo(param).getData(); List<GeneralDeviceDTO> deptList = generalDeviceInfoClient.getPracticalRunDeviceInfo(param).getData();
for(GeneralDeviceDTO dept : deptList){
//获取所有监测点 if (!CollectionUtils.isEmpty(dept.getLineIndexes())) {
List<String> lineIds = deptList.stream().flatMap(dto -> dto.getLineIndexes().stream()).collect(Collectors.toList());
//获取所有的数据信息
List<RStatLimitTargetDPO> limitTargetNew = getLimitTargetNew(lineIds, param.getSearchBeginTime(), param.getSearchEndTime());
//聚合查询
List<RStatLimitTargetDPO> allData = new ArrayList<>();
if (Objects.equals(param.getStatisticalType().getCode(), DicDataEnum.XBDY_ENUM.getCode())) {
allData = getAllDataV(lineIds, param.getSearchBeginTime(), param.getSearchEndTime());
} else if (Objects.equals(param.getStatisticalType().getCode(), DicDataEnum.XBDL_ENUM.getCode())) {
allData = getAllDataI(lineIds, param.getSearchBeginTime(), param.getSearchEndTime());
}
List<RStatLimitTargetDPO> finalAllData = allData;
deptList.forEach(item -> {
List<String> lineList = item.getLineIndexes();
if (!CollectionUtils.isEmpty(lineList)) {
HarmonicDeptVO harmonicDeptVO = new HarmonicDeptVO(); HarmonicDeptVO harmonicDeptVO = new HarmonicDeptVO();
List<RStatLimitTargetDPO> collect = limitTargetNew.stream().filter(x -> lineList.contains(x.getLineId())).collect(Collectors.toList()); harmonicDeptVO.setId(dept.getIndex());
List<RStatLimitTargetDPO> sumList = finalAllData.stream().filter(x -> lineList.contains(x.getLineId())).collect(Collectors.toList()); harmonicDeptVO.setName(dept.getName());
AreaDTO areaDTO = handleDataNew(collect, sumList, param.getStatisticalType().getCode()); //获取所有的数据信息
List<RStatLimitTargetDPO> limitTargetNew = getLimitTargetNew(dept.getLineIndexes(), param.getSearchBeginTime(), param.getSearchEndTime());
//聚合查询
List<RStatLimitTargetDPO> allData = new ArrayList<>();
if (Objects.equals(param.getStatisticalType().getCode(), DicDataEnum.XBDY_ENUM.getCode())) {
allData = getAllDataV(dept.getLineIndexes(), param.getSearchBeginTime(), param.getSearchEndTime());
} else if (Objects.equals(param.getStatisticalType().getCode(), DicDataEnum.XBDL_ENUM.getCode())) {
allData = getAllDataI(dept.getLineIndexes(), param.getSearchBeginTime(), param.getSearchEndTime());
}
AreaDTO areaDTO = handleDataNew(limitTargetNew, allData, param.getStatisticalType().getCode());
BeanUtil.copyProperties(areaDTO, harmonicDeptVO); BeanUtil.copyProperties(areaDTO, harmonicDeptVO);
harmonicDeptVO.setId(item.getIndex());
harmonicDeptVO.setName(item.getName());
list.add(harmonicDeptVO); list.add(harmonicDeptVO);
} }
}); }
if (!CollectionUtils.isEmpty(list)) { if (!CollectionUtils.isEmpty(list)) {
List<HarmonicDeptVO> collect = list.stream().filter(x -> x.getRatio() != 3.14159 && x.getOnlineCount() != 0 && x.getOverLineCount() != 0) List<HarmonicDeptVO> collect = list.stream().filter(x -> x.getRatio() != 3.14159 && x.getOnlineCount() != 0 && x.getOverLineCount() != 0)
.sorted(Comparator.comparing(HarmonicDeptVO::getRatio).reversed().thenComparing(HarmonicDeptVO::getOnlineCount).thenComparing(HarmonicDeptVO::getOverLineCount)).collect(Collectors.toList()); .sorted(Comparator.comparing(HarmonicDeptVO::getRatio).reversed().thenComparing(HarmonicDeptVO::getOnlineCount).thenComparing(HarmonicDeptVO::getOverLineCount)).collect(Collectors.toList());
@@ -352,26 +336,31 @@ public class HarmonicServiceImpl implements IHarmonicService {
} }
} }
} }
}
Map<LocalDate, List<RStatLimitTargetDPO>> map = list.stream().collect(Collectors.groupingBy(RStatLimitTargetDPO::getTime)); Map<LocalDate, List<RStatLimitTargetDPO>> map = list.stream().collect(Collectors.groupingBy(RStatLimitTargetDPO::getTime));
for (LocalDate key : map.keySet()) { for (LocalDate key : map.keySet()) {
int overDay = 0; int overDay = 0;
List<RStatLimitTargetDPO> l = map.get(key); List<RStatLimitTargetDPO> l = map.get(key);
for (RStatLimitTargetDPO pojo : l) { for (RStatLimitTargetDPO pojo : l) {
if (Objects.equals(type, DicDataEnum.XBDY_ENUM.getCode())) { if (Objects.equals(type, DicDataEnum.XBDY_ENUM.getCode())) {
if (pojo.getUaberranceOvertime() > 0 || pojo.getUharm20Overtime() > 0 || pojo.getUharm3Overtime() > 0 || pojo.getUharm4Overtime() > 0 || pojo.getUharm5Overtime() > 0 || pojo.getUharm6Overtime() > 0 || pojo.getUharm7Overtime() > 0 || pojo.getUharm8Overtime() > 0 || pojo.getUharm9Overtime() > 0 || pojo.getUharm10Overtime() > 0 || pojo.getUharm11Overtime() > 0 || pojo.getUharm12Overtime() > 0 || pojo.getUharm13Overtime() > 0 || pojo.getUharm14Overtime() > 0 || pojo.getUharm15Overtime() > 0 || pojo.getUharm16Overtime() > 0 || pojo.getUharm17Overtime() > 0 || pojo.getUharm18Overtime() > 0 || pojo.getUharm19Overtime() > 0 || pojo.getUharm20Overtime() > 0 || pojo.getUharm21Overtime() > 0 || pojo.getUharm22Overtime() > 0 || pojo.getUharm23Overtime() > 0 || pojo.getUharm24Overtime() > 0 || pojo.getUharm25Overtime() > 0) { if (pojo.getUaberranceOvertime() > 0 || pojo.getUharm20Overtime() > 0 || pojo.getUharm3Overtime() > 0 || pojo.getUharm4Overtime() > 0 || pojo.getUharm5Overtime() > 0 || pojo.getUharm6Overtime() > 0 || pojo.getUharm7Overtime() > 0 || pojo.getUharm8Overtime() > 0 || pojo.getUharm9Overtime() > 0 || pojo.getUharm10Overtime() > 0 || pojo.getUharm11Overtime() > 0 || pojo.getUharm12Overtime() > 0 || pojo.getUharm13Overtime() > 0 || pojo.getUharm14Overtime() > 0 || pojo.getUharm15Overtime() > 0 || pojo.getUharm16Overtime() > 0 || pojo.getUharm17Overtime() > 0 || pojo.getUharm18Overtime() > 0 || pojo.getUharm19Overtime() > 0 || pojo.getUharm20Overtime() > 0 || pojo.getUharm21Overtime() > 0 || pojo.getUharm22Overtime() > 0 || pojo.getUharm23Overtime() > 0 || pojo.getUharm24Overtime() > 0 || pojo.getUharm25Overtime() > 0) {
overCountByDay = overCountByDay + 1; overCountByDay = overCountByDay + 1;
overDay = overDay + 1; overDay = overDay + 1;
} }
} else if (Objects.equals(type, DicDataEnum.XBDL_ENUM.getCode())) { } else if (Objects.equals(type, DicDataEnum.XBDL_ENUM.getCode())) {
if (pojo.getIharm2Overtime() > 0 || pojo.getIharm3Overtime() > 0 || pojo.getIharm4Overtime() > 0 || pojo.getIharm5Overtime() > 0 || pojo.getIharm6Overtime() > 0 || pojo.getIharm7Overtime() > 0 || pojo.getIharm8Overtime() > 0 || pojo.getIharm9Overtime() > 0 || pojo.getIharm10Overtime() > 0 || pojo.getIharm11Overtime() > 0 || pojo.getIharm12Overtime() > 0 || pojo.getIharm13Overtime() > 0 || pojo.getIharm14Overtime() > 0 || pojo.getIharm15Overtime() > 0 || pojo.getIharm16Overtime() > 0 || pojo.getIharm17Overtime() > 0 || pojo.getIharm18Overtime() > 0 || pojo.getIharm19Overtime() > 0 || pojo.getIharm20Overtime() > 0 || pojo.getIharm21Overtime() > 0 || pojo.getIharm22Overtime() > 0 || pojo.getIharm23Overtime() > 0 || pojo.getIharm24Overtime() > 0 || pojo.getIharm25Overtime() > 0) { if (pojo.getIharm2Overtime() > 0 || pojo.getIharm3Overtime() > 0 || pojo.getIharm4Overtime() > 0 || pojo.getIharm5Overtime() > 0 || pojo.getIharm6Overtime() > 0 || pojo.getIharm7Overtime() > 0 || pojo.getIharm8Overtime() > 0 || pojo.getIharm9Overtime() > 0 || pojo.getIharm10Overtime() > 0 || pojo.getIharm11Overtime() > 0 || pojo.getIharm12Overtime() > 0 || pojo.getIharm13Overtime() > 0 || pojo.getIharm14Overtime() > 0 || pojo.getIharm15Overtime() > 0 || pojo.getIharm16Overtime() > 0 || pojo.getIharm17Overtime() > 0 || pojo.getIharm18Overtime() > 0 || pojo.getIharm19Overtime() > 0 || pojo.getIharm20Overtime() > 0 || pojo.getIharm21Overtime() > 0 || pojo.getIharm22Overtime() > 0 || pojo.getIharm23Overtime() > 0 || pojo.getIharm24Overtime() > 0 || pojo.getIharm25Overtime() > 0) {
overCountByDay = overCountByDay + 1; overCountByDay = overCountByDay + 1;
overDay = overDay + 1; overDay = overDay + 1;
}
} }
} }
ratio = ratio + overDay * 1.0 / l.size();
} }
ratio = ratio + overDay * 1.0 / l.size(); ratio = map.isEmpty() ? 0 : BigDecimal.valueOf(ratio * 100.0 / map.size()).setScale(2, RoundingMode.HALF_UP).doubleValue();
}else {
ratio = 3.14159;
} }
//平均超标天数 //平均超标天数
if (CollectionUtils.isEmpty(list)) { if (CollectionUtils.isEmpty(list)) {
avgOverDay = 0; avgOverDay = 0;
@@ -379,7 +368,6 @@ public class HarmonicServiceImpl implements IHarmonicService {
avgOverDay = overLineCount == 0 ? 0.0 : BigDecimal.valueOf(overCountByDay * 1.0 / overLineCount).setScale(2, RoundingMode.HALF_UP).doubleValue(); avgOverDay = overLineCount == 0 ? 0.0 : BigDecimal.valueOf(overCountByDay * 1.0 / overLineCount).setScale(2, RoundingMode.HALF_UP).doubleValue();
} }
//月监测点符合性超标占比 //月监测点符合性超标占比
ratio = map.size() == 0 ? 0 : BigDecimal.valueOf(ratio * 100.0 / map.size()).setScale(2, RoundingMode.HALF_UP).doubleValue();
areaDTO.setOnlineCount(onlineCount); areaDTO.setOnlineCount(onlineCount);
areaDTO.setOverLineCount(overLineCount); areaDTO.setOverLineCount(overLineCount);
//平均超标天数 //平均超标天数

View File

@@ -282,7 +282,6 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
List<PollutionVO> subPollutionVO = new ArrayList<>(); List<PollutionVO> subPollutionVO = new ArrayList<>();
List<LineDetail> lineDetailList = lineFeignClient.getLineDetail(temp.getLineIndexes()).getData(); List<LineDetail> lineDetailList = lineFeignClient.getLineDetail(temp.getLineIndexes()).getData();
if (CollUtil.isNotEmpty(lineDetailList)) { if (CollUtil.isNotEmpty(lineDetailList)) {
List<LineDetail> userLedgerList = lineDetailList.stream().filter(it -> StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList()); List<LineDetail> userLedgerList = lineDetailList.stream().filter(it -> StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList());
@@ -323,6 +322,8 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
} }
} }
double exe = subPollutionVO.stream().mapToDouble(PollutionVO::getData).filter(it->it != 3.14159).max().orElse(3.14159);
pollutionVO.setData(exe);
pollutionVO.setChildren(subPollutionVO); pollutionVO.setChildren(subPollutionVO);
list.add(pollutionVO); list.add(pollutionVO);
} }

View File

@@ -80,8 +80,12 @@ public class SteadyExceedRateServiceImpl implements SteadyExceedRateService {
//组装子集数据树 //组装子集数据树
List<SteadyExceedRateVO> treeList = getTreeData(lineIndexes, steadyExceedParam,userLedgerVOMap,steadyExceedParam.getPowerFlag()); List<SteadyExceedRateVO> treeList = getTreeData(lineIndexes, steadyExceedParam,userLedgerVOMap,steadyExceedParam.getPowerFlag());
//父级数据 //父级数据
steadyExceedRateVO.setSteadyExceedRate(PubUtils.dataLimits(NumberUtil.round(treeList.stream().mapToDouble(SteadyExceedRateVO::getSteadyExceedRate).average().orElse(0), 2).doubleValue())); double parentRate = treeList.stream().mapToDouble(SteadyExceedRateVO::getSteadyExceedRate).average().orElse(0);
if(parentRate == 3.14159){
steadyExceedRateVO.setSteadyExceedRate(parentRate);
}else {
steadyExceedRateVO.setSteadyExceedRate(PubUtils.dataLimits(NumberUtil.round(parentRate, 2).doubleValue()));
}
steadyExceedRateVO.setChildren(treeList); steadyExceedRateVO.setChildren(treeList);
steadyExceedRateVOS.add(steadyExceedRateVO); steadyExceedRateVOS.add(steadyExceedRateVO);
} }

View File

@@ -44,7 +44,7 @@ public class TerminalServiceImpl implements TerminalService {
public List<TerminalVO> getTerminalData(DeviceInfoParam.BusinessParam terminalParam) { public List<TerminalVO> getTerminalData(DeviceInfoParam.BusinessParam terminalParam) {
List<TerminalVO> terminalList = new ArrayList<>(); List<TerminalVO> terminalList = new ArrayList<>();
//按照条件获取所有终端综合信息 //按照条件获取所有终端综合信息
List<GeneralDeviceDTO> deviceDataList = generalDeviceInfoClient.getPracticalRunDeviceInfo(new DeviceInfoParam(terminalParam.getStatisticalType(), terminalParam.getDeptIndex(), generalInfo.getMicroServiceName(), null, terminalParam.getManufacturer(), null)).getData(); List<GeneralDeviceDTO> deviceDataList = generalDeviceInfoClient.getPracticalAllDeviceInfo(new DeviceInfoParam(terminalParam.getStatisticalType(), terminalParam.getDeptIndex(), generalInfo.getMicroServiceName(), null, terminalParam.getManufacturer(), null)).getData();
//组装终端Top层集合 //组装终端Top层集合
for (GeneralDeviceDTO generalDeviceDTO : deviceDataList) { for (GeneralDeviceDTO generalDeviceDTO : deviceDataList) {
List<String> deviceIndexes = generalDeviceDTO.getDeviceIndexes(); List<String> deviceIndexes = generalDeviceDTO.getDeviceIndexes();
@@ -85,7 +85,7 @@ public class TerminalServiceImpl implements TerminalService {
if (CollectionUtils.isEmpty(generalDeviceDTO.getDeviceIndexes())) { if (CollectionUtils.isEmpty(generalDeviceDTO.getDeviceIndexes())) {
continue; continue;
} }
type.add(generalDeviceDTO.getName()+"\n("+generalDeviceDTO.getLineIndexes().size()+")"); type.add(generalDeviceDTO.getName()+"\n("+generalDeviceDTO.getDeviceIndexes().size()+")");
List<String> deviceIndexes = generalDeviceDTO.getDeviceIndexes(); List<String> deviceIndexes = generalDeviceDTO.getDeviceIndexes();
//根据终端查询在线率 //根据终端查询在线率
List<PublicDTO> condition = getCondition(deviceIndexes, terminalCensusParam.getSearchBeginTime(), terminalCensusParam.getSearchEndTime()); List<PublicDTO> condition = getCondition(deviceIndexes, terminalCensusParam.getSearchBeginTime(), terminalCensusParam.getSearchEndTime());