电能质量问题监测点超标新增需求

This commit is contained in:
hzj
2024-04-08 15:12:24 +08:00
parent 2512a861bb
commit 3e8b420db8
14 changed files with 558 additions and 8 deletions

View File

@@ -0,0 +1,50 @@
package com.njcn.harmonic.controller.dataquality;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.harmonic.pojo.dto.RMpPartHarmonicDetailDTO;
import com.njcn.harmonic.pojo.param.RMpPartHarmonicDetailQueryParam;
import com.njcn.harmonic.service.majornetwork.RMpPartHarmonicDetailDService;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* Description:
* Date: 2024/4/3 15:58【需求编号】
*
* @author clam
* @version V1.0.0
*/
@RestController
@RequiredArgsConstructor
@Api(tags = "稳态指标超标警告统计")
@RequestMapping("/rmppartharmonicdetail")
public class RMpPartHarmonicDetailController extends BaseController {
private final RMpPartHarmonicDetailDService rMpPartHarmonicDetailDService;
/**
* 稳态指标超标明细表-月表统计
*
* @param param
* @return
*/
@PostMapping("/getRMpPartHarmonicDetail")
@ApiOperation("稳态指标超标在线监测超标问题详情")
@ApiImplicitParam(name = "param", value = "参数", required = true)
public HttpResult<List<RMpPartHarmonicDetailDTO>> getRMpPartHarmonicDetail(@RequestBody RMpPartHarmonicDetailQueryParam param) {
String methodDescribe = getMethodDescribe("getRMpPartHarmonicDetail");
List<RMpPartHarmonicDetailDTO> list = rMpPartHarmonicDetailDService.getRMpPartHarmonicDetail(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
}

View File

@@ -1,6 +1,8 @@
package com.njcn.harmonic.service.majornetwork;
import com.njcn.common.pojo.param.StatisticsBizBaseParam;
import com.njcn.harmonic.pojo.dto.RMpPartHarmonicDetailDTO;
import com.njcn.harmonic.pojo.param.RMpPartHarmonicDetailQueryParam;
import com.njcn.harmonic.pojo.po.RMpPartHarmonicDetailD;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.harmonic.pojo.vo.RMpPartHarmonicDetailIconVO;
@@ -24,4 +26,6 @@ public interface RMpPartHarmonicDetailDService extends IService<RMpPartHarmonicD
* @return
*/
List<RMpPartHarmonicDetailIconVO> getRMpPartHarmonicDetailIcon(StatisticsBizBaseParam param);
List<RMpPartHarmonicDetailDTO> getRMpPartHarmonicDetail(RMpPartHarmonicDetailQueryParam param);
}

View File

@@ -1,15 +1,31 @@
package com.njcn.harmonic.service.majornetwork.impl;
import com.njcn.common.pojo.param.StatisticsBizBaseParam;
import com.njcn.harmonic.pojo.po.RMpPartHarmonicDetailD;
import com.njcn.harmonic.mapper.majornetwork.RMpPartHarmonicDetailDMapper;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.param.StatisticsBizBaseParam;
import com.njcn.device.biz.commApi.CommLineClient;
import com.njcn.device.biz.pojo.dto.LineALLInfoDTO;
import com.njcn.harmonic.mapper.majornetwork.RMpPartHarmonicDetailDMapper;
import com.njcn.harmonic.pojo.dto.RMpPartHarmonicDetailDTO;
import com.njcn.harmonic.pojo.param.RMpPartHarmonicDetailQueryParam;
import com.njcn.harmonic.pojo.po.RMpPartHarmonicDetailD;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
import com.njcn.harmonic.pojo.vo.RMpPartHarmonicDetailIconVO;
import com.njcn.harmonic.service.IRStatLimitRateDService;
import com.njcn.harmonic.service.majornetwork.RMpPartHarmonicDetailDService;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.enums.DicDataTypeEnum;
import com.njcn.system.pojo.po.DictData;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.YearMonth;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* <p>
@@ -24,10 +40,165 @@ import java.util.List;
public class RMpPartHarmonicDetailDServiceImpl extends ServiceImpl<RMpPartHarmonicDetailDMapper, RMpPartHarmonicDetailD> implements RMpPartHarmonicDetailDService {
private final RMpPartHarmonicDetailDMapper rMpPartHarmonicDetailDMapper;
private final DicDataFeignClient dicDataFeignClient;
private final IRStatLimitRateDService irStatLimitRateDService;
private final CommLineClient commLineClient;
@Override
public List<RMpPartHarmonicDetailIconVO> getRMpPartHarmonicDetailIcon(StatisticsBizBaseParam param) {
return rMpPartHarmonicDetailDMapper.getRMpPartHarmonicDetailIcon(param);
}
@Override
public List<RMpPartHarmonicDetailDTO> getRMpPartHarmonicDetail(RMpPartHarmonicDetailQueryParam param) {
List<RStatLimitRateDPO> rStatLimitRateDPOs = irStatLimitRateDService.lambdaQuery().between(RStatLimitRateDPO::getTime, param.getStartTime()+" 00:00:00", param.getEndTime()+" 23:59:59").list();
List<RMpPartHarmonicDetailDTO> rMpPartHarmonicDetailDTOS = new ArrayList<>();
LocalDate date = LocalDate.parse(param.getStartTime());
YearMonth yearMonth = YearMonth.from(date);
int daysInMonth = yearMonth.lengthOfMonth();
/*获取稳态统计指标*/
List<DictData> steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
rStatLimitRateDPOs.stream().collect(Collectors.groupingBy(RStatLimitRateDPO::getLineId)).forEach((k, v) -> {
LineALLInfoDTO lineALLInfoDTO = commLineClient.getLineAllDetail(k);
steadyStatis.forEach(dictData -> {
if(Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATOR.getCode())||
Objects.equals(dictData.getCode(), DicDataEnum.phase_Voltage.getCode())){
return;
}
RMpPartHarmonicDetailDTO rMpPartHarmonicDetailDTO = new RMpPartHarmonicDetailDTO();
rMpPartHarmonicDetailDTO.setHarmonicType(dictData.getId());
List<LocalDate> localDates = overLimitCount(dictData, v);
rMpPartHarmonicDetailDTO.setDateList(localDates);
rMpPartHarmonicDetailDTO.setOverLimitrate(Double.parseDouble(localDates.size()+"")/daysInMonth);
rMpPartHarmonicDetailDTO.setMeasurementPointId(k);
rMpPartHarmonicDetailDTO.setMeasurementPointName(lineALLInfoDTO.getLineLineDTO().getLinename());
rMpPartHarmonicDetailDTO.setBarId(lineALLInfoDTO.getLineBusbarDTO().getBusBarId());
rMpPartHarmonicDetailDTO.setBarName(lineALLInfoDTO.getLineBusbarDTO().getBusBarName());
rMpPartHarmonicDetailDTO.setSustationId(lineALLInfoDTO.getLineSubStationDTO().getSubStationId());
rMpPartHarmonicDetailDTO.setSustationName(lineALLInfoDTO.getLineSubStationDTO().getSubStationName());
rMpPartHarmonicDetailDTO.setObjName(lineALLInfoDTO.getLineLineDTO().getObjName());
rMpPartHarmonicDetailDTO.setLoadType(lineALLInfoDTO.getLineLineDTO().getLoadType());
rMpPartHarmonicDetailDTO.setVoltageLevel(lineALLInfoDTO.getLineLineDTO().getVoltageLevel());
// rMpPartHarmonicDetailDTO.setSustationName(data.getSubName());
//todo 增加母线信息
rMpPartHarmonicDetailDTOS.add(rMpPartHarmonicDetailDTO);
});
});
List<RMpPartHarmonicDetailDTO> result = rMpPartHarmonicDetailDTOS.stream().
filter(temp -> CollectionUtil.isEmpty(param.getHarmonicTypes()) ||param.getHarmonicTypes().contains(temp.getHarmonicType())).
filter(temp -> temp.getOverLimitrate() > param.getRate()).collect(Collectors.toList());
return result;
}
private List<LocalDate> overLimitCount(DictData temp,List<RStatLimitRateDPO> rStatLimitRateDPOs ) {
List<LocalDate> localDetails = new ArrayList<>();
if (Objects.equals(temp.getCode(), DicDataEnum.VOLTAGE_DEV.getCode())) {
localDetails = rStatLimitRateDPOs.stream().filter(rStatLimitRateDPO -> rStatLimitRateDPO.getVoltageDevOvertime() > 0)
.map(RStatLimitRateDPO::getTime).collect(Collectors.toList());
} else if ( Objects.equals(temp.getCode(), DicDataEnum.FLICKER.getCode())) {
localDetails = rStatLimitRateDPOs.stream().filter(rStatLimitRateDPO -> rStatLimitRateDPO.getFlickerOvertime() > 0)
.map(RStatLimitRateDPO::getTime).collect(Collectors.toList());
} else if ( Objects.equals(temp.getCode(), DicDataEnum.PHASE_VOLTAGE.getCode())) {
localDetails = rStatLimitRateDPOs.stream().filter(rStatLimitRateDPO -> rStatLimitRateDPO.getUbalanceOvertime() > 0)
.map(RStatLimitRateDPO::getTime).collect(Collectors.toList());
} else if (Objects.equals(temp.getCode(), DicDataEnum.THD_V.getCode())){
localDetails = rStatLimitRateDPOs.stream().filter(rStatLimitRateDPO -> rStatLimitRateDPO.getUaberranceOvertime() > 0)
.map(RStatLimitRateDPO::getTime).collect(Collectors.toList());
}else if ( Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_VOLTAGE.getCode())) {
localDetails = rStatLimitRateDPOs.stream().filter(rStatLimitRateDPO ->
rStatLimitRateDPO.getUharm2Overtime()+
rStatLimitRateDPO.getUharm3Overtime()+
rStatLimitRateDPO.getUharm4Overtime()+
rStatLimitRateDPO.getUharm5Overtime()+
rStatLimitRateDPO.getUharm6Overtime()+
rStatLimitRateDPO.getUharm7Overtime()+
rStatLimitRateDPO.getUharm8Overtime()+
rStatLimitRateDPO.getUharm9Overtime()+
rStatLimitRateDPO.getUharm10Overtime()+
rStatLimitRateDPO.getUharm11Overtime()+
rStatLimitRateDPO.getUharm12Overtime()+
rStatLimitRateDPO.getUharm13Overtime()+
rStatLimitRateDPO.getUharm14Overtime()+
rStatLimitRateDPO.getUharm15Overtime()+
rStatLimitRateDPO.getUharm16Overtime()+
rStatLimitRateDPO.getUharm17Overtime()+
rStatLimitRateDPO.getUharm18Overtime()+
rStatLimitRateDPO.getUharm19Overtime()+
rStatLimitRateDPO.getUharm20Overtime()+
rStatLimitRateDPO.getUharm21Overtime()+
rStatLimitRateDPO.getUharm22Overtime()+
rStatLimitRateDPO.getUharm23Overtime()+
rStatLimitRateDPO.getUharm24Overtime()+
rStatLimitRateDPO.getUharm25Overtime() > 0)
.map(RStatLimitRateDPO::getTime).collect(Collectors.toList());
} else if ( Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_CURRENT.getCode())) {
localDetails = rStatLimitRateDPOs.stream().filter(rStatLimitRateDPO ->
rStatLimitRateDPO.getIharm2Overtime()+
rStatLimitRateDPO.getIharm4Overtime()+
rStatLimitRateDPO.getIharm5Overtime()+
rStatLimitRateDPO.getIharm6Overtime()+
rStatLimitRateDPO.getIharm7Overtime()+
rStatLimitRateDPO.getIharm8Overtime()+
rStatLimitRateDPO.getIharm9Overtime()+
rStatLimitRateDPO.getIharm10Overtime()+
rStatLimitRateDPO.getIharm11Overtime()+
rStatLimitRateDPO.getIharm12Overtime()+
rStatLimitRateDPO.getIharm13Overtime()+
rStatLimitRateDPO.getIharm14Overtime()+
rStatLimitRateDPO.getIharm15Overtime()+
rStatLimitRateDPO.getIharm16Overtime()+
rStatLimitRateDPO.getIharm17Overtime()+
rStatLimitRateDPO.getIharm18Overtime()+
rStatLimitRateDPO.getIharm19Overtime()+
rStatLimitRateDPO.getIharm20Overtime()+
rStatLimitRateDPO.getIharm21Overtime()+
rStatLimitRateDPO.getIharm22Overtime()+
rStatLimitRateDPO.getIharm23Overtime()+
rStatLimitRateDPO.getIharm24Overtime()+
rStatLimitRateDPO.getIharm25Overtime()
> 0)
.map(RStatLimitRateDPO::getTime).collect(Collectors.toList());
} else if (Objects.equals(temp.getCode(), DicDataEnum.INTERHARMONIC_VOLTAGE.getCode())){
localDetails = rStatLimitRateDPOs.stream().filter(rStatLimitRateDPO ->
rStatLimitRateDPO.getInuharm1Overtime()+
rStatLimitRateDPO.getInuharm2Overtime()+
rStatLimitRateDPO.getInuharm3Overtime()+
rStatLimitRateDPO.getInuharm4Overtime()+
rStatLimitRateDPO.getInuharm5Overtime()+
rStatLimitRateDPO.getInuharm6Overtime()+
rStatLimitRateDPO.getInuharm7Overtime()+
rStatLimitRateDPO.getInuharm8Overtime()+
rStatLimitRateDPO.getInuharm9Overtime()+
rStatLimitRateDPO.getInuharm10Overtime()+
rStatLimitRateDPO.getInuharm11Overtime()+
rStatLimitRateDPO.getInuharm12Overtime()+
rStatLimitRateDPO.getInuharm13Overtime()+
rStatLimitRateDPO.getInuharm14Overtime()+
rStatLimitRateDPO.getInuharm15Overtime()+
rStatLimitRateDPO.getInuharm16Overtime()
> 0)
.map(RStatLimitRateDPO::getTime).collect(Collectors.toList());
}else if ( Objects.equals(temp.getCode(), DicDataEnum.FREQUENCY_DEV.getCode())) {
localDetails = rStatLimitRateDPOs.stream().filter(rStatLimitRateDPO -> rStatLimitRateDPO.getFreqDevOvertime() > 0)
.map(RStatLimitRateDPO::getTime).collect(Collectors.toList());
} else if (Objects.equals(temp.getCode(), DicDataEnum.NEG_CURRENT.getCode())){
localDetails = rStatLimitRateDPOs.stream().filter(rStatLimitRateDPO -> rStatLimitRateDPO.getINegOvertime() > 0)
.map(RStatLimitRateDPO::getTime).collect(Collectors.toList());
}
return localDetails.stream().distinct().collect(Collectors.toList());
}
}