feat(rstatlimitrate): 新增电网侧指标越限统计数据和列表接口

This commit is contained in:
贾同学
2025-11-20 08:50:13 +08:00
parent be899a262b
commit 2dd67f9e3a
6 changed files with 406 additions and 57 deletions

View File

@@ -17,8 +17,6 @@ public class LimitProbabilityVO {
private String indexName;
@ApiModelProperty("指标编码")
private String indexCode;
@ApiModelProperty("占比")
private double proportion;
@ApiModelProperty("越限程度档级对应次数")
private List<Map<Integer, Integer>> extentGrades;
}

View File

@@ -1,9 +1,207 @@
package com.njcn.harmonic.pojo.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
import java.time.LocalDate;
@Data
public class TotalLimitStatisticsDetailsVO extends MainLineStatLimitRateDetailsVO {
public class TotalLimitStatisticsDetailsVO {
@ApiModelProperty("监测点名称")
private String lineName;
@ApiModelProperty(value = "监测点ID合格率的变电站/装置/母线/线路序号")
private String lineId;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@ApiModelProperty(value = "合格率时间")
private LocalDate time;
@ApiModelProperty(value = "总计算次数")
private Integer allTime;
@ApiModelProperty(value = "闪变越限次数")
private Integer flickerOvertime;
@ApiModelProperty(value = "频率偏差越限")
private double freqDevOvertime;
@ApiModelProperty(value = "电压偏差越限")
private double voltageDevOvertime;
@ApiModelProperty(value = "三相电压不平衡度越限")
private double ubalanceOvertime;
@ApiModelProperty(value = "电压谐波畸变率越限")
private double uaberranceOvertime;
@ApiModelProperty(value = "负序电流限值")
private double iNegOvertime;
@ApiModelProperty(value = "2次电压谐波含有率越限")
private double uharm2Overtime;
@ApiModelProperty(value = "3次电压谐波含有率越限")
private double uharm3Overtime;
@ApiModelProperty(value = "4次电压谐波含有率越限")
private double uharm4Overtime;
@ApiModelProperty(value = "5次电压谐波含有率越限")
private double uharm5Overtime;
@ApiModelProperty(value = "6次电压谐波含有率越限")
private double uharm6Overtime;
@ApiModelProperty(value = "7次电压谐波含有率越限")
private double uharm7Overtime;
@ApiModelProperty(value = "8次电压谐波含有率越限")
private double uharm8Overtime;
@ApiModelProperty(value = "9次电压谐波含有率越限")
private double uharm9Overtime;
@ApiModelProperty(value = "10次电压谐波含有率越限")
private double uharm10Overtime;
@ApiModelProperty(value = "11次电压谐波含有率越限")
private double uharm11Overtime;
@ApiModelProperty(value = "12次电压谐波含有率越限")
private double uharm12Overtime;
@ApiModelProperty(value = "13次电压谐波含有率越限")
private double uharm13Overtime;
@ApiModelProperty(value = "14次电压谐波含有率越限")
private double uharm14Overtime;
@ApiModelProperty(value = "15次电压谐波含有率越限")
private double uharm15Overtime;
@ApiModelProperty(value = "16次电压谐波含有率越限")
private double uharm16Overtime;
@ApiModelProperty(value = "17次电压谐波含有率越限")
private double uharm17Overtime;
@ApiModelProperty(value = "18次电压谐波含有率越限")
private double uharm18Overtime;
@ApiModelProperty(value = "19次电压谐波含有率越限")
private double uharm19Overtime;
@ApiModelProperty(value = "20次电压谐波含有率越限")
private double uharm20Overtime;
@ApiModelProperty(value = "21次电压谐波含有率越限")
private double uharm21Overtime;
@ApiModelProperty(value = "22次电压谐波含有率越限")
private double uharm22Overtime;
@ApiModelProperty(value = "23次电压谐波含有率越限")
private double uharm23Overtime;
@ApiModelProperty(value = "24次电压谐波含有率越限")
private double uharm24Overtime;
@ApiModelProperty(value = "25次电压谐波含有率越限")
private double uharm25Overtime;
@ApiModelProperty(value = "2次电流谐波幅值越限")
private double iharm2Overtime;
@ApiModelProperty(value = "3次电流谐波幅值越限")
private double iharm3Overtime;
@ApiModelProperty(value = "4次电流谐波幅值越限")
private double iharm4Overtime;
@ApiModelProperty(value = "5次电流谐波幅值越限")
private double iharm5Overtime;
@ApiModelProperty(value = "6次电流谐波幅值越限")
private double iharm6Overtime;
@ApiModelProperty(value = "7次电流谐波幅值越限")
private double iharm7Overtime;
@ApiModelProperty(value = "8次电流谐波幅值越限")
private double iharm8Overtime;
@ApiModelProperty(value = "9次电流谐波幅值越限")
private double iharm9Overtime;
@ApiModelProperty(value = "10次电流谐波幅值越限")
private double iharm10Overtime;
@ApiModelProperty(value = "11次电流谐波幅值越限")
private double iharm11Overtime;
@ApiModelProperty(value = "12次电流谐波幅值越限")
private double iharm12Overtime;
@ApiModelProperty(value = "13次电流谐波幅值越限")
private double iharm13Overtime;
@ApiModelProperty(value = "14次电流谐波幅值越限")
private double iharm14Overtime;
@ApiModelProperty(value = "15次电流谐波幅值越限")
private double iharm15Overtime;
@ApiModelProperty(value = "16次电流谐波幅值越限")
private double iharm16Overtime;
@ApiModelProperty(value = "17次电流谐波幅值越限")
private double iharm17Overtime;
@ApiModelProperty(value = "18次电流谐波幅值越限")
private double iharm18Overtime;
@ApiModelProperty(value = "19次电流谐波幅值越限")
private double iharm19Overtime;
@ApiModelProperty(value = "20次电流谐波幅值越限")
private double iharm20Overtime;
@ApiModelProperty(value = "21次电流谐波幅值越限")
private double iharm21Overtime;
@ApiModelProperty(value = "22次电流谐波幅值越限")
private double iharm22Overtime;
@ApiModelProperty(value = "23次电流谐波幅值越限")
private double iharm23Overtime;
@ApiModelProperty(value = "24次电流谐波幅值越限")
private double iharm24Overtime;
@ApiModelProperty(value = "25次电流谐波幅值越限")
private double iharm25Overtime;
}

View File

@@ -135,4 +135,25 @@ public class RStatLimitRateDController extends BaseController {
List<TotalLimitStatisticsDetailsVO> list = limitRateDService.totalLimitStatisticsDetails(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@PostMapping("/gridSideLimitStatistics/data")
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@ApiOperation("电网侧指标越限统计数据")
public HttpResult<TotalLimitTotalStatisticsVO> gridSideLimitTotalStatisticsData(@RequestBody TotalLimitStatisticsParam mainLineQueryParam) {
String methodDescribe = getMethodDescribe("gridSideLimitTotalStatisticsData");
TotalLimitTotalStatisticsVO data = limitRateDService.gridSideLimitTotalStatisticsData(mainLineQueryParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, data, methodDescribe);
}
@PostMapping("/gridSideLimitStatistics/list")
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@ApiOperation("电网侧指标越限统计列表")
public HttpResult<List<TotalLimitStatisticsVO>> gridSideLimitStatisticsList(@RequestBody TotalLimitStatisticsParam mainLineQueryParam) {
String methodDescribe = getMethodDescribe("gridSideLimitStatisticsList");
List<TotalLimitStatisticsVO> list = limitRateDService.gridSideLimitStatisticsList(mainLineQueryParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
}

View File

@@ -40,4 +40,9 @@ public interface IRStatLimitRateDService extends IService<RStatLimitRateDPO> {
List<TotalLimitStatisticsVO> totalLimitStatisticsList(TotalLimitStatisticsParam param);
List<TotalLimitStatisticsDetailsVO> totalLimitStatisticsDetails(TotalLimitStatisticsDetailsQueryParam param);
TotalLimitTotalStatisticsVO gridSideLimitTotalStatisticsData(TotalLimitStatisticsParam param);
List<TotalLimitStatisticsVO> gridSideLimitStatisticsList(TotalLimitStatisticsParam param);
}

View File

@@ -50,6 +50,8 @@ public class RStatLimitRateDServiceImpl extends ServiceImpl<RStatLimitRateDMappe
private final DicDataFeignClient dicDataFeignClient;
private final DecimalFormat df = new DecimalFormat("#0.00");
private final String GRID_SIDE_DICT_CODE = "Grid_Side";
@Override
public List<RStatLimitRateDPO> monitorIdsGetLimitRateInfo(String date, List<String> monitorIds) {
return this.baseMapper.selectList(new LambdaQueryWrapper<RStatLimitRateDPO>()
@@ -286,7 +288,7 @@ public class RStatLimitRateDServiceImpl extends ServiceImpl<RStatLimitRateDMappe
String key = entry.getKey();
if (key.endsWith("Overtime")) {
String value = entry.getValue().toString();
Integer intValue = new Integer(value);
int intValue = new Integer(value);
if (key.startsWith("uharm")) {
uharmTotalTime += intValue;
}
@@ -301,11 +303,11 @@ public class RStatLimitRateDServiceImpl extends ServiceImpl<RStatLimitRateDMappe
if (totalTime == 0) {
return statisticsVO;
}
statisticsVO.setFlicker(flickerTotalTime / totalTime * 100);
statisticsVO.setUharm(uharmTotalTime / totalTime * 100);
statisticsVO.setIharm(iharmTotalTime / totalTime * 100);
statisticsVO.setVoltageDev(voltageDevTotalTime / totalTime * 100);
statisticsVO.setUbalance(ubalanceTotalTime / totalTime * 100);
statisticsVO.setFlicker(calculatePercentage(flickerTotalTime, totalTime));
statisticsVO.setUharm(calculatePercentage(uharmTotalTime, totalTime));
statisticsVO.setIharm(calculatePercentage(iharmTotalTime, totalTime));
statisticsVO.setVoltageDev(calculatePercentage(voltageDevTotalTime, totalTime));
statisticsVO.setUbalance(calculatePercentage(ubalanceTotalTime, totalTime));
return statisticsVO;
}
@@ -360,15 +362,21 @@ public class RStatLimitRateDServiceImpl extends ServiceImpl<RStatLimitRateDMappe
}
}
// 取最大值
uharm += uharmList.stream().max(Integer::compareTo).get();
iharm += iharmList.stream().max(Integer::compareTo).get();
uharm += uharmList.stream().max(Integer::compareTo).orElse(0);
iharm += iharmList.stream().max(Integer::compareTo).orElse(0);
}
if (totalTime != 0) {
statisticsVO.setFlicker(Double.parseDouble(df.format(BigDecimal.valueOf(flickerTotalTime / totalTime * 100L).setScale(2, RoundingMode.HALF_UP).doubleValue())));
statisticsVO.setVoltageDev(Double.parseDouble(df.format(BigDecimal.valueOf(voltageDevTotalTime / totalTime * 100L).setScale(2, RoundingMode.HALF_UP).doubleValue())));
statisticsVO.setUbalance(Double.parseDouble(df.format(BigDecimal.valueOf(ubalanceTotalTime / totalTime * 100L).setScale(2, RoundingMode.HALF_UP).doubleValue())));
statisticsVO.setUharm(Double.parseDouble(df.format(BigDecimal.valueOf(uharm / totalTime * 100L).setScale(2, RoundingMode.HALF_UP).doubleValue())));
statisticsVO.setIharm(Double.parseDouble(df.format(BigDecimal.valueOf(iharm / totalTime * 100L).setScale(2, RoundingMode.HALF_UP).doubleValue())));
if (totalTime == 0) {
statisticsVO.setFlicker(0.0);
statisticsVO.setVoltageDev(0.0);
statisticsVO.setUbalance(0.0);
statisticsVO.setUharm(0.0);
statisticsVO.setIharm(0.0);
} else {
statisticsVO.setFlicker(calculatePercentage(flickerTotalTime, totalTime));
statisticsVO.setVoltageDev(calculatePercentage(voltageDevTotalTime, totalTime));
statisticsVO.setUbalance(calculatePercentage(ubalanceTotalTime, totalTime));
statisticsVO.setUharm(calculatePercentage(uharm, totalTime));
statisticsVO.setIharm(calculatePercentage(iharm, totalTime));
}
result.add(statisticsVO);
@@ -400,9 +408,9 @@ public class RStatLimitRateDServiceImpl extends ServiceImpl<RStatLimitRateDMappe
String key = entry.getKey();
if (key.endsWith("Overtime") && allTime != 0) {
String value = entry.getValue().toString();
Integer intValue = new Integer(value);
int intValue = new Integer(value);
// 占比 = 越限次数 / 总次数 * 100
int proportion = intValue / allTime * 100;
double proportion = calculatePercentage(intValue, allTime);
entries.putOpt(key, proportion);
}
}
@@ -410,6 +418,149 @@ public class RStatLimitRateDServiceImpl extends ServiceImpl<RStatLimitRateDMappe
}).collect(Collectors.toList());
}
@Override
public TotalLimitTotalStatisticsVO gridSideLimitTotalStatisticsData(TotalLimitStatisticsParam param) {
TotalLimitTotalStatisticsVO statisticsVO = new TotalLimitTotalStatisticsVO();
// 获取电网侧监测点
DictData dictData = dicDataFeignClient.getDicDataByCode(GRID_SIDE_DICT_CODE).getData();
CsLinePO queryParam = new CsLinePO();
queryParam.setPosition(dictData.getId());
List<CsLinePO> linePOList = csLineFeignClient.list(queryParam).getData();
List<String> lineIds = linePOList.stream().map(CsLinePO::getLineId).collect(Collectors.toList());
if (CollUtil.isEmpty(lineIds)) {
return statisticsVO;
}
List<RStatLimitRateDPO> rateList = this.list(new LambdaQueryWrapper<RStatLimitRateDPO>()
.in(RStatLimitRateDPO::getLineId, lineIds)
.eq(RStatLimitRateDPO::getPhasicType, "T")
.ge(StrUtil.isNotBlank(param.getSearchBeginTime()), RStatLimitRateDPO::getTime, param.getSearchBeginTime())
.le(StrUtil.isNotBlank(param.getSearchEndTime()), RStatLimitRateDPO::getTime, param.getSearchEndTime())
.orderByAsc(RStatLimitRateDPO::getTime)
);
int flickerTotalTime = rateList.stream().mapToInt(RStatLimitRateDPO::getFlickerOvertime).sum();
int voltageDevTotalTime = rateList.stream().mapToInt(RStatLimitRateDPO::getVoltageDevOvertime).sum();
int ubalanceTotalTime = rateList.stream().mapToInt(RStatLimitRateDPO::getUbalanceOvertime).sum();
int iharmTotalTime = 0;
int uharmTotalTime = 0;
for (RStatLimitRateDPO rate : rateList) {
JSONObject entries = JSONUtil.parseObj(rate);
for (Map.Entry<String, Object> entry : entries.entrySet()) {
String key = entry.getKey();
if (key.endsWith("Overtime")) {
String value = entry.getValue().toString();
int intValue = new Integer(value);
if (key.startsWith("uharm")) {
uharmTotalTime += intValue;
}
if (key.startsWith("iharm")) {
iharmTotalTime += intValue;
}
}
}
}
int totalTime = flickerTotalTime + voltageDevTotalTime + ubalanceTotalTime + iharmTotalTime + uharmTotalTime;
if (totalTime == 0) {
return statisticsVO;
}
statisticsVO.setFlicker(calculatePercentage(flickerTotalTime, totalTime));
statisticsVO.setUharm(calculatePercentage(uharmTotalTime, totalTime));
statisticsVO.setIharm(calculatePercentage(iharmTotalTime, totalTime));
statisticsVO.setVoltageDev(calculatePercentage(voltageDevTotalTime, totalTime));
statisticsVO.setUbalance(calculatePercentage(ubalanceTotalTime, totalTime));
return statisticsVO;
}
@Override
public List<TotalLimitStatisticsVO> gridSideLimitStatisticsList(TotalLimitStatisticsParam param) {
List<TotalLimitStatisticsVO> result = new ArrayList<>();
// 获取电网侧监测点
DictData dictData = dicDataFeignClient.getDicDataByCode(GRID_SIDE_DICT_CODE).getData();
CsLinePO queryParam = new CsLinePO();
queryParam.setPosition(dictData.getId());
List<CsLinePO> linePOList = csLineFeignClient.list(queryParam).getData();
List<String> lineIds = linePOList.stream().map(CsLinePO::getLineId).collect(Collectors.toList());
if (CollUtil.isEmpty(lineIds)) {
return result;
}
List<RStatLimitRateDPO> rateList = this.list(new LambdaQueryWrapper<RStatLimitRateDPO>()
.in(RStatLimitRateDPO::getLineId, lineIds)
.eq(RStatLimitRateDPO::getPhasicType, "T")
.ge(StrUtil.isNotBlank(param.getSearchBeginTime()), RStatLimitRateDPO::getTime, param.getSearchBeginTime())
.le(StrUtil.isNotBlank(param.getSearchEndTime()), RStatLimitRateDPO::getTime, param.getSearchEndTime())
.orderByAsc(RStatLimitRateDPO::getTime)
);
if (CollUtil.isEmpty(rateList)) {
return result;
}
Map<String, List<RStatLimitRateDPO>> lineMap = rateList.stream().collect(Collectors.groupingBy(RStatLimitRateDPO::getLineId));
Map<String, CsLinePO> linePOMap = linePOList.stream().collect(Collectors.toMap(CsLinePO::getLineId, csLinePO -> csLinePO));
List<CsLinePO> lineList = new ArrayList<>();
for (String lineId : lineMap.keySet()) {
CsLinePO linePO = linePOMap.getOrDefault(lineId, null);
if (linePO != null) {
lineList.add(linePO);
}
}
if (CollUtil.isEmpty(lineList)) {
return result;
}
TotalLimitStatisticsVO statisticsVO;
for (CsLinePO linePO : lineList) {
statisticsVO = new TotalLimitStatisticsVO();
statisticsVO.setLineId(linePO.getLineId());
statisticsVO.setLineName(linePO.getName());
List<RStatLimitRateDPO> lineRateList = lineMap.get(linePO.getLineId());
int totalTime = lineRateList.stream().mapToInt(RStatLimitRateDPO::getAllTime).sum();
int flickerTotalTime = lineRateList.stream().mapToInt(RStatLimitRateDPO::getFlickerOvertime).sum();
int voltageDevTotalTime = lineRateList.stream().mapToInt(RStatLimitRateDPO::getVoltageDevOvertime).sum();
int ubalanceTotalTime = lineRateList.stream().mapToInt(RStatLimitRateDPO::getUbalanceOvertime).sum();
int uharm = 0;
int iharm = 0;
for (RStatLimitRateDPO item : lineRateList) {
JSONObject entries = JSONUtil.parseObj(item);
List<Integer> uharmList = new ArrayList<>();
List<Integer> iharmList = new ArrayList<>();
for (Map.Entry<String, Object> entry : entries.entrySet()) {
String key = entry.getKey();
if (key.endsWith("Overtime")) {
if (key.startsWith("uharm")) {
String value = entry.getValue().toString();
Integer intValue = new Integer(value);
uharmList.add(intValue);
}
if (key.startsWith("iharm")) {
String value = entry.getValue().toString();
Integer intValue = new Integer(value);
iharmList.add(intValue);
}
}
}
// 取最大值
uharm += uharmList.stream().max(Integer::compareTo).orElse(0);
iharm += iharmList.stream().max(Integer::compareTo).orElse(0);
}
if (totalTime == 0) {
statisticsVO.setFlicker(0.0);
statisticsVO.setVoltageDev(0.0);
statisticsVO.setUbalance(0.0);
statisticsVO.setUharm(0.0);
statisticsVO.setIharm(0.0);
} else {
statisticsVO.setFlicker(calculatePercentage(flickerTotalTime, totalTime));
statisticsVO.setVoltageDev(calculatePercentage(voltageDevTotalTime, totalTime));
statisticsVO.setUbalance(calculatePercentage(ubalanceTotalTime, totalTime));
statisticsVO.setUharm(calculatePercentage(uharm, totalTime));
statisticsVO.setIharm(calculatePercentage(iharm, totalTime));
}
result.add(statisticsVO);
}
return result;
}
private String getDescription(String key) {
if (StrUtil.equals(key, "flickerOvertime")) {
return "闪变越限超标";
@@ -438,4 +589,10 @@ public class RStatLimitRateDServiceImpl extends ServiceImpl<RStatLimitRateDMappe
return null;
}
private double calculatePercentage(double part, double total) {
return Double.parseDouble(df.format(BigDecimal.valueOf(part / total * 100.0)
.setScale(2, RoundingMode.HALF_UP).doubleValue()));
}
}

View File

@@ -18,7 +18,6 @@ import com.njcn.harmonic.pojo.param.LimitCalendarQueryParam;
import com.njcn.harmonic.pojo.param.LimitExtentDayQueryParam;
import com.njcn.harmonic.pojo.param.LimitExtentQueryParam;
import com.njcn.harmonic.pojo.param.LimitProbabilityQueryParam;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDetailDPO;
import com.njcn.harmonic.pojo.vo.LimitCalendarVO;
import com.njcn.harmonic.pojo.vo.LimitExtentVO;
@@ -231,7 +230,7 @@ public class RStatLimitRateDetailDServiceImpl extends ServiceImpl<RStatLimitRate
String itemKey = StrUtil.sub(key, 0, key.length() - 8);
float limitValue = overlimitJSON.getFloat(itemKey);
if (limitValue != 0) {
double overlimitPercent = Double.parseDouble(df.format(BigDecimal.valueOf((maxValue - limitValue) / limitValue * 100).setScale(2, RoundingMode.HALF_UP).doubleValue()));
double overlimitPercent = calculatePercentage(maxValue - limitValue, limitValue);
if (overlimitPercent >= 80) {
status = 2;
}
@@ -258,17 +257,6 @@ public class RStatLimitRateDetailDServiceImpl extends ServiceImpl<RStatLimitRate
.le(StrUtil.isNotBlank(param.getSearchEndTime()), RStatLimitRateDetailDPO::getTime, param.getSearchEndTime())
.orderByAsc(RStatLimitRateDetailDPO::getTime)
);
List<RStatLimitRateDPO> lineRateList = rStatLimitRateDService
.list(new LambdaQueryWrapper<RStatLimitRateDPO>()
.eq(RStatLimitRateDPO::getLineId, param.getLineId())
.eq(RStatLimitRateDPO::getPhasicType, "T")
.ge(StrUtil.isNotBlank(param.getSearchBeginTime()), RStatLimitRateDPO::getTime, param.getSearchBeginTime())
.le(StrUtil.isNotBlank(param.getSearchEndTime()), RStatLimitRateDPO::getTime, param.getSearchEndTime())
.orderByAsc(RStatLimitRateDPO::getTime)
);
// 总次数
int totalTimes = lineRateList.stream().mapToInt(RStatLimitRateDPO::getAllTime).sum();
CsLinePO linePO = csLineFeignClient.getById(param.getLineId()).getData();
List<Overlimit> overlimitList = overLimitClient.getOverLimitByLineIds(Collections.singletonList(linePO.getLineId())).getData();
JSONObject overlimitJSON = null;
@@ -283,28 +271,6 @@ public class RStatLimitRateDetailDServiceImpl extends ServiceImpl<RStatLimitRate
probabilityVO.setIndexCode(indexCode);
probabilityVO.setLineId(linePO.getLineId());
probabilityVO.setLineName(linePO.getName());
// 计算占比
int limitTimes = 0;
for (RStatLimitRateDPO item : lineRateList) {
JSONObject entries = JSONUtil.parseObj(item);
List<Integer> valueList = new ArrayList<>();
for (Map.Entry<String, Object> entry : entries.entrySet()) {
String key = entry.getKey();
if (key.endsWith("Overtime")) {
if (key.startsWith(indexCode)) {
String value = entry.getValue().toString();
Integer intValue = new Integer(value);
valueList.add(intValue);
}
}
}
limitTimes += valueList.stream().max(Integer::compareTo).orElse(0);
}
if (totalTimes != 0) {
probabilityVO.setProportion(Double.parseDouble(df.format(BigDecimal.valueOf(limitTimes / totalTimes * 100L).setScale(2, RoundingMode.HALF_UP).doubleValue())));
} else {
probabilityVO.setProportion(0f);
}
// 计算越限程度
List<Double> extentValuesList = new ArrayList<>();
for (RStatLimitRateDetailDPO detail : detailList) {
@@ -321,7 +287,7 @@ public class RStatLimitRateDetailDServiceImpl extends ServiceImpl<RStatLimitRate
String itemKey = StrUtil.sub(key, 0, key.length() - 8);
double limitValue = overlimitJSON.getDouble(itemKey);
if (limitValue != 0) {
extentValue = Double.parseDouble(df.format(BigDecimal.valueOf((maxValue - limitValue) / limitValue * 100).setScale(2, RoundingMode.HALF_UP).doubleValue()));
extentValue = calculatePercentage(maxValue - limitValue, limitValue);
}
}
@@ -577,4 +543,8 @@ public class RStatLimitRateDetailDServiceImpl extends ServiceImpl<RStatLimitRate
return null;
}
private double calculatePercentage(double part, double total) {
return Double.parseDouble(df.format(BigDecimal.valueOf(part / total * 100.0)
.setScale(2, RoundingMode.HALF_UP).doubleValue()));
}
}