谐波监测-详细分析:谐波统计代码优化

This commit is contained in:
wr
2023-04-24 11:09:07 +08:00
parent 8e6c94c58d
commit dc360a5a1f
6 changed files with 441 additions and 140 deletions

View File

@@ -9,7 +9,6 @@ import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.common.utils.LogUtil;
import com.njcn.device.pq.pojo.dto.PollutionLineDTO;
import com.njcn.device.pq.pojo.dto.PollutionSubstationDTO;
import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
import com.njcn.harmonic.pojo.vo.*;
import com.njcn.harmonic.service.IAnalyzeService;

View File

@@ -0,0 +1,30 @@
package com.njcn.harmonic.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 合格率统计日表(是否越限) Mapper 接口
* </p>
*
* @author wr
* @since 2023-04-23
*/
public interface RStatLimitTargetDMapper extends BaseMapper<RStatLimitTargetDPO> {
/**
* 谐波查询
* @return
*/
List<RStatLimitTargetDPO> getSumV(@Param("ids") List<String> list,
@Param("startTime") String startTime,
@Param("endTime") String endTime);
List<RStatLimitTargetDPO> getSumI(@Param("ids") List<String> list,
@Param("startTime") String startTime,
@Param("endTime") String endTime);
}

View File

@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.harmonic.mapper.RStatLimitTargetDMapper">
<select id="getSumV" resultType="com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO">
SELECT
my_index as lineId,
sum(all_time) allTime,
sum( uaberrance_overtime ) AS uaberrance_overtime,
sum( uharm_2_overtime ) AS uharm_2_overtime,
sum( uharm_3_overtime ) AS uharm_3_overtime,
sum( uharm_4_overtime ) AS uharm_4_overtime,
sum( uharm_5_overtime ) AS uharm_5_overtime,
sum( uharm_6_overtime ) AS uharm_6_overtime,
sum( uharm_7_overtime ) AS uharm_7_overtime,
sum( uharm_8_overtime ) AS uharm_8_overtime,
sum( uharm_9_overtime ) AS uharm_9_overtime,
sum( uharm_10_overtime ) AS uharm_10_overtime,
sum( uharm_11_overtime ) AS uharm_11_overtime,
sum( uharm_12_overtime ) AS uharm_12_overtime,
sum( uharm_13_overtime ) AS uharm_13_overtime,
sum( uharm_14_overtime ) AS uharm_14_overtime,
sum( uharm_15_overtime ) AS uharm_15_overtime,
sum( uharm_16_overtime ) AS uharm_16_overtime,
sum( uharm_17_overtime ) AS uharm_17_overtime,
sum( uharm_18_overtime ) AS uharm_18_overtime,
sum( uharm_19_overtime ) AS uharm_19_overtime,
sum( uharm_20_overtime ) AS uharm_20_overtime,
sum( uharm_21_overtime ) AS uharm_21_overtime,
sum( uharm_22_overtime ) AS uharm_22_overtime,
sum( uharm_23_overtime ) AS uharm_23_overtime,
sum( uharm_24_overtime ) AS uharm_24_overtime,
sum( uharm_25_overtime ) AS uharm_25_overtime
FROM
r_stat_limit_target_d
<where>
<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=" startTime != null and startTime !=''">
AND time_id >= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
AND time_id &lt;= #{endTime}
</if>
</where>
GROUP BY
my_index
</select>
<select id="getSumI" resultType="com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO">
SELECT
my_index as lineId,
sum(all_time) allTime,
sum( iharm_2_overtime ) AS iharm_2_overtime,
sum( iharm_3_overtime ) AS iharm_3_overtime,
sum( iharm_4_overtime ) AS iharm_4_overtime,
sum( iharm_5_overtime ) AS iharm_5_overtime,
sum( iharm_6_overtime ) AS iharm_6_overtime,
sum( iharm_7_overtime ) AS iharm_7_overtime,
sum( iharm_8_overtime ) AS iharm_8_overtime,
sum( iharm_9_overtime ) AS iharm_9_overtime,
sum( iharm_10_overtime ) AS iharm_10_overtime,
sum( iharm_11_overtime ) AS iharm_11_overtime,
sum( iharm_12_overtime ) AS iharm_12_overtime,
sum( iharm_13_overtime ) AS iharm_13_overtime,
sum( iharm_14_overtime ) AS iharm_14_overtime,
sum( iharm_15_overtime ) AS iharm_15_overtime,
sum( iharm_16_overtime ) AS iharm_16_overtime,
sum( iharm_17_overtime ) AS iharm_17_overtime,
sum( iharm_18_overtime ) AS iharm_18_overtime,
sum( iharm_19_overtime ) AS iharm_19_overtime,
sum( iharm_20_overtime ) AS iharm_20_overtime,
sum( iharm_21_overtime ) AS iharm_21_overtime,
sum( iharm_22_overtime ) AS iharm_22_overtime,
sum( iharm_23_overtime ) AS iharm_23_overtime,
sum( iharm_24_overtime ) AS iharm_24_overtime,
sum( iharm_25_overtime ) AS iharm_25_overtime
FROM
r_stat_limit_target_d
<where>
<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=" startTime != null and startTime !=''">
AND time_id >= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
AND time_id &lt;= #{endTime}
</if>
</where>
GROUP BY
my_index
</select>
</mapper>

View File

@@ -0,0 +1,16 @@
package com.njcn.harmonic.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO;
/**
* <p>
* 合格率统计日表(是否越限) 服务类
* </p>
*
* @author wr
* @since 2023-04-23
*/
public interface IRStatLimitTargetDService extends IService<RStatLimitTargetDPO> {
}

View File

@@ -1,6 +1,11 @@
package com.njcn.harmonic.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.njcn.common.config.GeneralInfo;
import com.njcn.device.pq.api.GeneralDeviceInfoClient;
import com.njcn.device.pq.api.LineFeignClient;
@@ -9,21 +14,20 @@ import com.njcn.device.pq.pojo.dto.PollutionLineDTO;
import com.njcn.device.pq.pojo.dto.PollutionParamDTO;
import com.njcn.device.pq.pojo.vo.LineDeviceStateVO;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.mapper.RStatLimitTargetDMapper;
import com.njcn.harmonic.pojo.dto.AreaDTO;
import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
import com.njcn.harmonic.pojo.po.LimitTarget;
import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO;
import com.njcn.harmonic.pojo.vo.HarmonicDeptVO;
import com.njcn.harmonic.pojo.vo.HarmonicLineVO;
import com.njcn.harmonic.pojo.vo.HarmonicSubstationVO;
import com.njcn.harmonic.pojo.vo.PollutionVO;
import com.njcn.harmonic.service.IHarmonicService;
import com.njcn.influxdb.utils.InfluxDbUtils;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.web.utils.RequestUtil;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.influxdb.dto.QueryResult;
import org.influxdb.impl.InfluxDBResultMapper;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -47,12 +51,11 @@ public class HarmonicServiceImpl implements IHarmonicService {
private final GeneralDeviceInfoClient generalDeviceInfoClient;
private final InfluxDbUtils influxDbUtils;
private final GeneralInfo generalInfo;
private final LineFeignClient lineFeignClient;
private final RStatLimitTargetDMapper targetDMapper;
@Override
public List<PollutionVO> getDeptSubstationRelations(HarmonicPublicParam harmonicPublicParam) {
harmonicPublicParam.setServerName(generalInfo.getMicroServiceName());
@@ -72,6 +75,18 @@ public class HarmonicServiceImpl implements IHarmonicService {
lineInfo = lineFeignClient.getLineInfo(paramDTO).getData();
}
Map<String,List<PollutionLineDTO>> map = lineInfo.stream().collect(Collectors.groupingBy(PollutionLineDTO::getSubstationId));
//获取所有的数据信息
List<RStatLimitTargetDPO> limitTargetNew = getLimitTargetNew(lineList, harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime());
//聚合查询
List<RStatLimitTargetDPO> allData = new ArrayList<>();
if (Objects.equals(harmonicPublicParam.getStatisticalType().getCode(), DicDataEnum.XBDY_ENUM.getCode())){
allData = getAllDataV(lineList, harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime());
} else if (Objects.equals(harmonicPublicParam.getStatisticalType().getCode(), DicDataEnum.XBDL_ENUM.getCode())){
allData = getAllDataI(lineList, harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime());
}
List<RStatLimitTargetDPO> finalAllData = allData;
deptList.forEach(dept->{
List<PollutionVO> childrenList = new ArrayList<>();
PollutionVO pollutionVO = new PollutionVO();
@@ -84,7 +99,13 @@ public class HarmonicServiceImpl implements IHarmonicService {
children.setId(sub);
children.setPid(dept.getIndex());
children.setName(l1.get(0).getSubstation());
children.setData(handleData(getLimitTarget(l1.stream().map(PollutionLineDTO::getId).collect(Collectors.toList()), harmonicPublicParam.getSearchBeginTime(),harmonicPublicParam.getSearchEndTime()),harmonicPublicParam.getStatisticalType().getCode(),l1.stream().map(PollutionLineDTO::getId).collect(Collectors.toList()), harmonicPublicParam.getSearchBeginTime(),harmonicPublicParam.getSearchEndTime()).getRatio());
//监测点id
List<String> lineIds = l1.stream().map(PollutionLineDTO::getId).collect(Collectors.toList());
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(),l1.stream().map(PollutionLineDTO::getId).collect(Collectors.toList()), harmonicPublicParam.getSearchBeginTime(),harmonicPublicParam.getSearchEndTime()).getRatio());
childrenList.add(children);
});
}
@@ -92,7 +113,8 @@ public class HarmonicServiceImpl implements IHarmonicService {
pollutionVO.setChildren(childrenList.stream().sorted(Comparator.comparing(PollutionVO::getData).reversed().thenComparing(PollutionVO::getName)).collect(Collectors.toList()));
}
if (!CollectionUtils.isEmpty(dept.getLineIndexes())){
pollutionVO.setData(handleData(getLimitTarget(lineList, harmonicPublicParam.getSearchBeginTime(),harmonicPublicParam.getSearchEndTime()),harmonicPublicParam.getStatisticalType().getCode(),lineList, harmonicPublicParam.getSearchBeginTime(),harmonicPublicParam.getSearchEndTime()).getRatio());
// pollutionVO.setData(handleData(getLimitTarget(lineList, harmonicPublicParam.getSearchBeginTime(),harmonicPublicParam.getSearchEndTime()),harmonicPublicParam.getStatisticalType().getCode(),lineList, harmonicPublicParam.getSearchBeginTime(),harmonicPublicParam.getSearchEndTime()).getRatio());
pollutionVO.setData(NumberUtil.round(childrenList.stream().mapToDouble(PollutionVO::getData).average().orElse(3.14159),2).doubleValue());
}
list.add(pollutionVO);
});
@@ -110,20 +132,20 @@ public class HarmonicServiceImpl implements IHarmonicService {
deptList.forEach(item->{
List<String> lineList = item.getLineIndexes();
HarmonicDeptVO harmonicDeptVO = new HarmonicDeptVO();
if (!CollectionUtils.isEmpty(lineList)){
List<LimitTarget> limitTargetList = getLimitTarget(lineList,param.getSearchBeginTime(),param.getSearchEndTime());
AreaDTO areaDTO = handleData(limitTargetList,param.getStatisticalType().getCode(),lineList,param.getSearchBeginTime(),param.getSearchEndTime());
BeanUtil.copyProperties(areaDTO,harmonicDeptVO);
}
harmonicDeptVO.setId(item.getIndex());
harmonicDeptVO.setName(item.getName());
list.add(harmonicDeptVO);
});
if (!CollectionUtils.isEmpty(list)){
return list.stream().sorted(Comparator.comparing(HarmonicDeptVO::getRatio).reversed().thenComparing(HarmonicDeptVO::getOnlineCount).thenComparing(HarmonicDeptVO::getOverLineCount)).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(lineList)){
List<LimitTarget> limitTargetList = getLimitTarget(lineList,param.getSearchBeginTime(),param.getSearchEndTime());
AreaDTO areaDTO = handleData(limitTargetList,param.getStatisticalType().getCode(),lineList,param.getSearchBeginTime(),param.getSearchEndTime());
BeanUtil.copyProperties(areaDTO,harmonicDeptVO);
}
return list;
harmonicDeptVO.setId(item.getIndex());
harmonicDeptVO.setName(item.getName());
list.add(harmonicDeptVO);
});
if (!CollectionUtils.isEmpty(list)){
return list.stream().sorted(Comparator.comparing(HarmonicDeptVO::getRatio).reversed().thenComparing(HarmonicDeptVO::getOnlineCount).thenComparing(HarmonicDeptVO::getOverLineCount)).collect(Collectors.toList());
}
return list;
}
@Override
public List<HarmonicSubstationVO> getSubstationInfoById(HarmonicPublicParam param) {
@@ -235,6 +257,14 @@ public class HarmonicServiceImpl implements IHarmonicService {
return list;
}
public List<RStatLimitTargetDPO> getLimitTargetNew(List<String> lineList, String startTime, String endTime){
List<RStatLimitTargetDPO> limitRates = targetDMapper.selectList(new LambdaQueryWrapper<RStatLimitTargetDPO>()
.in(RStatLimitTargetDPO::getLineId, lineList)
.ge(StrUtil.isNotBlank(startTime), RStatLimitTargetDPO::getTime, DateUtil.beginOfDay(DateUtil.parse(startTime)))
.le(StrUtil.isNotBlank(endTime), RStatLimitTargetDPO::getTime, DateUtil.endOfDay(DateUtil.parse(endTime)))
);
return limitRates;
}
/**
* 功能描述: 获取limitTarget数据
* @param lineList 部门列表
@@ -245,23 +275,141 @@ public class HarmonicServiceImpl implements IHarmonicService {
* @date 2022/2/25 15:05
*/
public List<LimitTarget> getLimitTarget(List<String> lineList, String startTime, String endTime){
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (");
for (int i=0;i<lineList.size();i++){
if (lineList.size() - i != 1){
stringBuilder.append(Param.LINE_ID + "='").append(lineList.get(i)).append("' or ");
} else {
stringBuilder.append(Param.LINE_ID + "='").append(lineList.get(i)).append("')");
}
List<LimitTarget> listInfo = new ArrayList<>();
List<RStatLimitTargetDPO> limitRates = targetDMapper.selectList(new LambdaQueryWrapper<RStatLimitTargetDPO>()
.in(RStatLimitTargetDPO::getLineId, lineList)
.ge(StrUtil.isNotBlank(startTime), RStatLimitTargetDPO::getTime, DateUtil.beginOfDay(DateUtil.parse(startTime)))
.le(StrUtil.isNotBlank(endTime), RStatLimitTargetDPO::getTime, DateUtil.endOfDay(DateUtil.parse(endTime)))
);
if(CollUtil.isNotEmpty(limitRates)){
limitRates.forEach(list ->{
LimitTarget limitRatePO = BeanUtil.copyProperties(list,LimitTarget.class);
limitRatePO.setTime(list.getTime().toInstant());
limitRatePO.setLineId(list.getLineId());
limitRatePO.setPhasicType(list.getPhasicType());
limitRatePO.setAllTime(list.getAllTime());
limitRatePO.setFlickerAllTime(list.getFlickerAllTime());
limitRatePO.setFlickerOverTime(list.getFlickerOvertime());
limitRatePO.setFreqDevOverTime(list.getFreqDevOvertime());
limitRatePO.setIHarm2OverTime(list.getIharm2Overtime());
limitRatePO.setIHarm3OverTime(list.getIharm3Overtime());
limitRatePO.setIHarm4OverTime(list.getIharm4Overtime());
limitRatePO.setIHarm5OverTime(list.getIharm5Overtime());
limitRatePO.setIHarm6OverTime(list.getIharm6Overtime());
limitRatePO.setIHarm7OverTime(list.getIharm7Overtime());
limitRatePO.setIHarm8OverTime(list.getIharm8Overtime());
limitRatePO.setIHarm9OverTime(list.getIharm9Overtime());
limitRatePO.setIHarm10OverTime(list.getIharm10Overtime());
limitRatePO.setIHarm11OverTime(list.getIharm11Overtime());
limitRatePO.setIHarm12OverTime(list.getIharm12Overtime());
limitRatePO.setIHarm13OverTime(list.getIharm13Overtime());
limitRatePO.setIHarm14OverTime(list.getIharm14Overtime());
limitRatePO.setIHarm15OverTime(list.getIharm15Overtime());
limitRatePO.setIHarm16OverTime(list.getIharm16Overtime());
limitRatePO.setIHarm17OverTime(list.getIharm17Overtime());
limitRatePO.setIHarm18OverTime(list.getIharm18Overtime());
limitRatePO.setIHarm19OverTime(list.getIharm19Overtime());
limitRatePO.setIHarm20OverTime(list.getIharm20Overtime());
limitRatePO.setIHarm21OverTime(list.getIharm21Overtime());
limitRatePO.setIHarm22OverTime(list.getIharm22Overtime());
limitRatePO.setIHarm23OverTime(list.getIharm23Overtime());
limitRatePO.setIHarm24OverTime(list.getIharm24Overtime());
limitRatePO.setIHarm25OverTime(list.getIharm25Overtime());
limitRatePO.setINegOverTime(list.getINegOvertime());
limitRatePO.setUAberranceOverTime(list.getUaberranceOvertime());
limitRatePO.setUBalanceOverTime(list.getUbalanceOvertime());
limitRatePO.setUHarm2OverTime(list.getUharm2Overtime());
limitRatePO.setUHarm3OverTime(list.getUharm3Overtime());
limitRatePO.setUHarm4OverTime(list.getUharm4Overtime());
limitRatePO.setUHarm5OverTime(list.getUharm5Overtime());
limitRatePO.setUHarm6OverTime(list.getUharm6Overtime());
limitRatePO.setUHarm7OverTime(list.getUharm7Overtime());
limitRatePO.setUHarm8OverTime(list.getUharm8Overtime());
limitRatePO.setUHarm9OverTime(list.getUharm9Overtime());
limitRatePO.setUHarm10OverTime(list.getUharm10Overtime());
limitRatePO.setUHarm11OverTime(list.getUharm11Overtime());
limitRatePO.setUHarm12OverTime(list.getUharm12Overtime());
limitRatePO.setUHarm13OverTime(list.getUharm13Overtime());
limitRatePO.setUHarm14OverTime(list.getUharm14Overtime());
limitRatePO.setUHarm15OverTime(list.getUharm15Overtime());
limitRatePO.setUHarm16OverTime(list.getUharm16Overtime());
limitRatePO.setUHarm17OverTime(list.getUharm17Overtime());
limitRatePO.setUHarm18OverTime(list.getUharm18Overtime());
limitRatePO.setUHarm19OverTime(list.getUharm19Overtime());
limitRatePO.setUHarm20OverTime(list.getUharm20Overtime());
limitRatePO.setUHarm21OverTime(list.getUharm21Overtime());
limitRatePO.setUHarm22OverTime(list.getUharm22Overtime());
limitRatePO.setUHarm23OverTime(list.getUharm23Overtime());
limitRatePO.setUHarm24OverTime(list.getUharm24Overtime());
limitRatePO.setUHarm25OverTime(list.getUharm25Overtime());
limitRatePO.setVoltageDevOverTime(list.getVoltageDevOvertime());
listInfo.add(limitRatePO);
});
}
stringBuilder.append(" tz('Asia/Shanghai')");
String sql = "select * from limit_target where " + stringBuilder;
QueryResult sqlResult = influxDbUtils.query(sql);
InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
return resultMapper.toPOJO(sqlResult,LimitTarget.class);
return listInfo;
}
/**
public AreaDTO handleDataNew(List<RStatLimitTargetDPO> list, List<RStatLimitTargetDPO> sumList,String type,List<String> lineList,String startTime,String endTime) {
int onlineCount = 0,overLineCount = 0,overCountByDay = 0;
double avgOverDay = 0.0,ratio = 0.0;
AreaDTO areaDTO = new AreaDTO();
if (!CollectionUtils.isEmpty(list)){
List<RStatLimitTargetDPO> data=sumList;
if (!CollectionUtils.isEmpty(sumList)) {
onlineCount = data.size();
//在线监测点个数
areaDTO.setOnlineCount(onlineCount);
//超标监测点数
for (RStatLimitTargetDPO pojo : data) {
if (pojo.getAllTime()>0){
overLineCount = overLineCount + 1;
}
}
}
}
Map<Date, List<RStatLimitTargetDPO>> map = list.stream().collect(Collectors.groupingBy(RStatLimitTargetDPO::getTime));
for (Date key : map.keySet()) {
int overDay = 0;
List<RStatLimitTargetDPO> l = map.get(key);
for (RStatLimitTargetDPO pojo : l) {
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){
overCountByDay = overCountByDay + 1;
overDay = overDay + 1;
}
} 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){
overCountByDay = overCountByDay + 1;
overDay = overDay + 1;
}
}
}
ratio = ratio + overDay*1.0/l.size();
}
//平均超标天数
if (CollectionUtils.isEmpty(list)){
avgOverDay = -1.0;
} else {
avgOverDay = overLineCount == 0?0.0:BigDecimal.valueOf(overCountByDay*1.0/overLineCount).setScale(2, RoundingMode.HALF_UP).doubleValue();
}
//月监测点超标占比
ratio = map.size() == 0?-1.0:BigDecimal.valueOf(ratio*100/map.size()).setScale(2, RoundingMode.HALF_UP).doubleValue();
areaDTO.setOnlineCount(onlineCount);
areaDTO.setOverLineCount(overLineCount);
//平均超标天数
areaDTO.setAverageOverDay(avgOverDay);
areaDTO.setRatio(Math.min(ratio,100.0));
return areaDTO;
}
/** todo
* 功能描述: 处理区域(变电站)在线监测点数、超标监测点数、平均超标天数、占比
* @param list 集合
* type 类型
@@ -274,19 +422,24 @@ public class HarmonicServiceImpl implements IHarmonicService {
double avgOverDay = 0.0,ratio = 0.0;
AreaDTO areaDTO = new AreaDTO();
if (!CollectionUtils.isEmpty(list)){
List<LimitTarget> data = getAllData(lineList,startTime,endTime);
List<RStatLimitTargetDPO> data = new ArrayList<>();
if (Objects.equals(type, DicDataEnum.XBDY_ENUM.getCode())){
data = getAllDataV(lineList,startTime,endTime);
} else if (Objects.equals(type, DicDataEnum.XBDL_ENUM.getCode())){
data = getAllDataI(lineList,startTime,endTime);
}
if (!CollectionUtils.isEmpty(data)) {
onlineCount = data.size();
//在线监测点个数
areaDTO.setOnlineCount(onlineCount);
//超标监测点数
for (LimitTarget pojo : data) {
for (RStatLimitTargetDPO pojo : data) {
if (Objects.equals(type, DicDataEnum.XBDY_ENUM.getCode())){
if (pojo.getUHarm2OverTime()>0){
if (pojo.getAllTime()>0){
overLineCount = overLineCount + 1;
}
} else if (Objects.equals(type, DicDataEnum.XBDL_ENUM.getCode())){
if (pojo.getIHarm2OverTime()>0){
if (pojo.getAllTime()>0){
overLineCount = overLineCount + 1;
}
}
@@ -334,37 +487,11 @@ public class HarmonicServiceImpl implements IHarmonicService {
* @author xy
* @date 2022/2/25 15:05
*/
private List<LimitTarget> getAllData(List<String> list, String startTime, String endTime){
StringBuilder stringBuilder = new StringBuilder();
StringBuilder stringBuilder1 = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (");
for (int i=0;i<list.size();i++){
if (list.size() - i != 1){
stringBuilder.append(Param.LINE_ID + "='").append(list.get(i)).append("' or ");
} else {
stringBuilder.append(Param.LINE_ID + "='").append(list.get(i)).append("')");
}
}
stringBuilder.append(" group by line_id tz('Asia/Shanghai')");
stringBuilder1.append("sum(uaberrance_overtime)+");
for (int i = 2; i <= 25; i++) {
if (i==25){
stringBuilder1.append("sum(uharm_").append(i).append("_overtime) AS ").append("uharm_2").append("_overtime,");
} else {
stringBuilder1.append("sum(uharm_").append(i).append("_overtime)+");
}
}
for (int i = 2; i <= 25; i++) {
if (i==25){
stringBuilder1.append("sum(iharm_").append(i).append("_overtime) AS ").append("iharm_2").append("_overtime");
} else {
stringBuilder1.append("sum(iharm_").append(i).append("_overtime)+");
}
}
String sql = "select "+stringBuilder1+" from limit_target where " + stringBuilder;
QueryResult sqlResult = influxDbUtils.query(sql);
InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
return resultMapper.toPOJO(sqlResult,LimitTarget.class);
private List<RStatLimitTargetDPO> getAllDataV(List<String> list, String startTime, String endTime){
return targetDMapper.getSumV(list,startTime,endTime);
}
private List<RStatLimitTargetDPO> getAllDataI(List<String> list, String startTime, String endTime){
return targetDMapper.getSumI(list,startTime,endTime);
}
@@ -379,51 +506,21 @@ public class HarmonicServiceImpl implements IHarmonicService {
* @return
*/
private Integer getWarningInfo(List<String> lineList, String startTime, String endTime, String type) {
int result = 0;
StringBuilder stringBuilder = new StringBuilder();
StringBuilder stringBuilder1 = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (");
for (int i=0;i<lineList.size();i++){
if (lineList.size() - i != 1){
stringBuilder.append(Param.LINE_ID + "='").append(lineList.get(i)).append("' or ");
} else {
stringBuilder.append(Param.LINE_ID + "='").append(lineList.get(i)).append("')");
}
}
stringBuilder.append(" tz('Asia/Shanghai')");
List<RStatLimitTargetDPO> sum=new ArrayList<>();
if (Objects.equals(type, DicDataEnum.XBDY_ENUM.getCode())){
stringBuilder1.append("sum(uaberrance_overtime)+");
for (int i = 2; i <= 25; i++) {
if (i==25){
stringBuilder1.append("sum(uharm_").append(i).append("_overtime)");;
} else {
stringBuilder1.append("sum(uharm_").append(i).append("_overtime)+");
}
}
sum = targetDMapper.getSumV(lineList, startTime, endTime);
} else if (Objects.equals(type, DicDataEnum.XBDL_ENUM.getCode())){
for (int i = 2; i <= 25; i++) {
if (i==25){
stringBuilder1.append("sum(iharm_").append(i).append("_overtime)");;
} else {
stringBuilder1.append("sum(iharm_").append(i).append("_overtime)+");
}
}
sum = targetDMapper.getSumV(lineList, startTime, endTime);
}
String sql = "select "+stringBuilder1+" from limit_rate where " + stringBuilder;
QueryResult sqlResult = influxDbUtils.query(sql);
List<QueryResult.Series> list = sqlResult.getResults().get(0).getSeries();
if (!CollectionUtils.isEmpty(list)) {
for (QueryResult.Series series : list) {
List<List<Object>> valueList = series.getValues();
if (!CollectionUtils.isEmpty(valueList)) {
for (List<Object> value : valueList) {
result = (int)Double.parseDouble(value.get(1).toString());
}
}
}
} else {
result = -1;
int result = 0;
if(CollUtil.isNotEmpty(sum)){
result=sum.get(0).getUharm2Overtime();
}else{
result=-1;
}
return result;
}
@@ -440,39 +537,78 @@ public class HarmonicServiceImpl implements IHarmonicService {
* @return
*/
private List<LimitTarget> getLineOverDays(List<String> lineList, String startTime, String endTime, String type) {
StringBuilder stringBuilder = new StringBuilder();
StringBuilder stringBuilder1 = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (");
for (int i=0;i<lineList.size();i++){
if (lineList.size() - i != 1){
stringBuilder.append(Param.LINE_ID + "='").append(lineList.get(i)).append("' or ");
} else {
stringBuilder.append(Param.LINE_ID + "='").append(lineList.get(i)).append("')");
}
}
stringBuilder.append(" group by line_id tz('Asia/Shanghai')");
List<LimitTarget> listInfo=new ArrayList<>();
List<RStatLimitTargetDPO> sum=new ArrayList<>();
if (Objects.equals(type, DicDataEnum.XBDY_ENUM.getCode())){
stringBuilder1.append("sum(uaberrance_overtime) AS uaberrance_overtime,");
for (int i = 2; i <= 25; i++) {
if (i==25){
stringBuilder1.append("sum(uharm_").append(i).append("_overtime) AS ").append("uharm_").append(i).append("_overtime ");;
} else {
stringBuilder1.append("sum(uharm_").append(i).append("_overtime) AS ").append("uharm_").append(i).append("_overtime,");
}
}
sum = targetDMapper.getSumV(lineList, startTime, endTime);
} else if (Objects.equals(type, DicDataEnum.XBDL_ENUM.getCode())){
for (int i = 2; i <= 25; i++) {
if (i==25){
stringBuilder1.append("sum(iharm_").append(i).append("_overtime) AS ").append("iharm_").append(i).append("_overtime ");;
} else {
stringBuilder1.append("sum(iharm_").append(i).append("_overtime) AS ").append("iharm_").append(i).append("_overtime,");
}
}
sum = targetDMapper.getSumV(lineList, startTime, endTime);
}
String sql = "select "+stringBuilder1+" from limit_target where " + stringBuilder;
QueryResult sqlResult = influxDbUtils.query(sql);
InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
return resultMapper.toPOJO(sqlResult,LimitTarget.class);
if(CollUtil.isNotEmpty(sum)){
sum.forEach(list ->{
LimitTarget limitRatePO = BeanUtil.copyProperties(list,LimitTarget.class);
limitRatePO.setLineId(list.getLineId());
limitRatePO.setFlickerAllTime(list.getFlickerAllTime());
limitRatePO.setFlickerOverTime(list.getFlickerOvertime());
limitRatePO.setFreqDevOverTime(list.getFreqDevOvertime());
limitRatePO.setIHarm2OverTime(list.getIharm2Overtime());
limitRatePO.setIHarm3OverTime(list.getIharm3Overtime());
limitRatePO.setIHarm4OverTime(list.getIharm4Overtime());
limitRatePO.setIHarm5OverTime(list.getIharm5Overtime());
limitRatePO.setIHarm6OverTime(list.getIharm6Overtime());
limitRatePO.setIHarm7OverTime(list.getIharm7Overtime());
limitRatePO.setIHarm8OverTime(list.getIharm8Overtime());
limitRatePO.setIHarm9OverTime(list.getIharm9Overtime());
limitRatePO.setIHarm10OverTime(list.getIharm10Overtime());
limitRatePO.setIHarm11OverTime(list.getIharm11Overtime());
limitRatePO.setIHarm12OverTime(list.getIharm12Overtime());
limitRatePO.setIHarm13OverTime(list.getIharm13Overtime());
limitRatePO.setIHarm14OverTime(list.getIharm14Overtime());
limitRatePO.setIHarm15OverTime(list.getIharm15Overtime());
limitRatePO.setIHarm16OverTime(list.getIharm16Overtime());
limitRatePO.setIHarm17OverTime(list.getIharm17Overtime());
limitRatePO.setIHarm18OverTime(list.getIharm18Overtime());
limitRatePO.setIHarm19OverTime(list.getIharm19Overtime());
limitRatePO.setIHarm20OverTime(list.getIharm20Overtime());
limitRatePO.setIHarm21OverTime(list.getIharm21Overtime());
limitRatePO.setIHarm22OverTime(list.getIharm22Overtime());
limitRatePO.setIHarm23OverTime(list.getIharm23Overtime());
limitRatePO.setIHarm24OverTime(list.getIharm24Overtime());
limitRatePO.setIHarm25OverTime(list.getIharm25Overtime());
limitRatePO.setINegOverTime(list.getINegOvertime());
limitRatePO.setUAberranceOverTime(list.getUaberranceOvertime());
limitRatePO.setUBalanceOverTime(list.getUbalanceOvertime());
limitRatePO.setUHarm2OverTime(list.getUharm2Overtime());
limitRatePO.setUHarm3OverTime(list.getUharm3Overtime());
limitRatePO.setUHarm4OverTime(list.getUharm4Overtime());
limitRatePO.setUHarm5OverTime(list.getUharm5Overtime());
limitRatePO.setUHarm6OverTime(list.getUharm6Overtime());
limitRatePO.setUHarm7OverTime(list.getUharm7Overtime());
limitRatePO.setUHarm8OverTime(list.getUharm8Overtime());
limitRatePO.setUHarm9OverTime(list.getUharm9Overtime());
limitRatePO.setUHarm10OverTime(list.getUharm10Overtime());
limitRatePO.setUHarm11OverTime(list.getUharm11Overtime());
limitRatePO.setUHarm12OverTime(list.getUharm12Overtime());
limitRatePO.setUHarm13OverTime(list.getUharm13Overtime());
limitRatePO.setUHarm14OverTime(list.getUharm14Overtime());
limitRatePO.setUHarm15OverTime(list.getUharm15Overtime());
limitRatePO.setUHarm16OverTime(list.getUharm16Overtime());
limitRatePO.setUHarm17OverTime(list.getUharm17Overtime());
limitRatePO.setUHarm18OverTime(list.getUharm18Overtime());
limitRatePO.setUHarm19OverTime(list.getUharm19Overtime());
limitRatePO.setUHarm20OverTime(list.getUharm20Overtime());
limitRatePO.setUHarm21OverTime(list.getUharm21Overtime());
limitRatePO.setUHarm22OverTime(list.getUharm22Overtime());
limitRatePO.setUHarm23OverTime(list.getUharm23Overtime());
limitRatePO.setUHarm24OverTime(list.getUharm24Overtime());
limitRatePO.setUHarm25OverTime(list.getUharm25Overtime());
limitRatePO.setVoltageDevOverTime(list.getVoltageDevOvertime());
listInfo.add(limitRatePO);
});
}
return listInfo;
}
/**

View File

@@ -0,0 +1,20 @@
package com.njcn.harmonic.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.harmonic.mapper.RStatLimitTargetDMapper;
import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO;
import com.njcn.harmonic.service.IRStatLimitTargetDService;
import org.springframework.stereotype.Service;
/**
* <p>
* 合格率统计日表(是否越限) 服务实现类
* </p>
*
* @author wr
* @since 2023-04-23
*/
@Service
public class RStatLimitTargetDServiceImpl extends ServiceImpl<RStatLimitTargetDMapper, RStatLimitTargetDPO> implements IRStatLimitTargetDService {
}