From 38018153b5f7c7588cecadea49a71948cbc1db79 Mon Sep 17 00:00:00 2001 From: huangzj <826100833@qq.com> Date: Mon, 18 Sep 2023 09:13:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../newalgorithm/RStatLoadTypeController.java | 74 +++ .../area/RStatHarmonicVoltageServiceImpl.java | 72 ++- .../newalgorithm/RStatLoadTypeService.java | 16 + .../impl/RStatLoadTypeServiceImpl.java | 464 ++++++++++++++++++ 4 files changed, 625 insertions(+), 1 deletion(-) create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatLoadTypeController.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/RStatLoadTypeService.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatLoadTypeServiceImpl.java diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatLoadTypeController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatLoadTypeController.java new file mode 100644 index 000000000..5bb7a7e6c --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatLoadTypeController.java @@ -0,0 +1,74 @@ +package com.njcn.prepare.harmonic.controller.newalgorithm; + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.device.biz.commApi.CommTerminalGeneralClient; +import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; +import com.njcn.device.biz.pojo.param.DeptGetLineParam; +import com.njcn.prepare.harmonic.pojo.param.OrgParam; +import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicService; +import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatLoadTypeService; +import com.njcn.user.api.DeptFeignClient; +import com.njcn.user.pojo.po.Dept; +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 lombok.extern.slf4j.Slf4j; +import org.springframework.util.StringUtils; +import org.springframework.validation.annotation.Validated; +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.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * 接口文档访问地址:http://serverIP:port/swagger-ui.html + * Date: 2022/12/28 13:47【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Slf4j +@Api(tags = "单位监测点稳态指标统计") +@RestController +@RequestMapping("/rstatLoad") +@RequiredArgsConstructor +public class RStatLoadTypeController extends BaseController { + + + private final RStatLoadTypeService service; + private final DeptFeignClient deptFeignClient; + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/Handler") + @ApiOperation("单位监测点稳态指标统计") + @ApiImplicitParam(name = "orgParam", value = "参数", required = true) + public HttpResult handler(@RequestBody @Validated OrgParam orgParam ){ + log.info(LocalDateTime.now()+"dayHandler始执行"); + String methodDescribe = getMethodDescribe("dayHandler"); + /** + * 支持补录 + */ + DeptGetLineParam deptGetLineParam = new DeptGetLineParam(); + List deptList = new ArrayList<>(); + + if(StringUtils.isEmpty(orgParam.getOrgId())){ + Dept data = deptFeignClient.getRootDept().getData(); + deptList= deptFeignClient.getDirectSonSelf(data.getId()).getData(); + }else { + deptList = deptFeignClient.getDirectSonSelf(orgParam.getOrgId()).getData(); + } + service.handler (deptList,orgParam.getDataDate(),orgParam.getType()); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicVoltageServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicVoltageServiceImpl.java index c4995575d..51a6374cc 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicVoltageServiceImpl.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicVoltageServiceImpl.java @@ -187,8 +187,78 @@ public class RStatHarmonicVoltageServiceImpl implements RStatHarmonicVoltageServ List pwMonitorIds = deptGetChildrenMoreDTO.getPwMonitorIds(); Map> collect = pwMonitorIds.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType)); collect.forEach((k, v) -> { - List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); + { + List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); + Map> collect2 = v.stream().collect(Collectors.groupingBy(LineDevGetDTO::getVoltageLevel)); + collect2.forEach((k1, v1) -> { + queryWrapper.clear(); + queryWrapper.select("freq_over_day", "v_dev_over_day", "v_over_day", "i_over_day", "unbalance_over_day", "i_neg_over_day"). + in("measurement_point_id", collect1). + eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7)); + List rMpPartHarmonicDetailMS = rMpPartHarmonicDetailMMapper.selectList(queryWrapper); + rMpSurplusHarmonicDetailMQueryWrapper.clear(); + rMpSurplusHarmonicDetailMQueryWrapper.select("flicker_over_day", "inuharm_over_day"). + in("measurement_point_id", collect1). + eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7)); + List rMpSurplusHarmonicDetailMS = rMpSurplusHarmonicDetailMMapper.selectList(rMpSurplusHarmonicDetailMQueryWrapper); + + rStatOrgMPOQueryWrapper.clear(); + rStatOrgMPOQueryWrapper.select("effective_measurement_accrued"). + eq("org_no", deptGetChildrenMoreDTO.getUnitId()). + eq("measurement_type_class", k). + eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()). + eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7)); + RStatOrgMPO rStatOrgMPO = rStatOrgMMapper.selectOne(rStatOrgMPOQueryWrapper); + + + + steadyStatis.forEach(dictData -> { + if (Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATOR.getCode())) { + return; + } + RStatHarmonicVoltageMPO rStatHarmonicVoltageMPO = new RStatHarmonicVoltageMPO(); + rStatHarmonicVoltageMPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId()); + rStatHarmonicVoltageMPO.setDataDate(date); + rStatHarmonicVoltageMPO.setHarmonicType(dictData.getId()); + rStatHarmonicVoltageMPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()); + rStatHarmonicVoltageMPO.setMeasurementTypeClass(getmeasurementType(k,lineSortMap)); + rStatHarmonicVoltageMPO.setVoltageType(k1); + + /**4、累计超标监测点数*/ + rStatHarmonicVoltageMPO.setOverLimitMeasurementAccrued(getOverLimitMeasurementAccruedTime(dictData, rMpPartHarmonicDetailMS, rMpSurplusHarmonicDetailMS)); + /*3、日均超标监测点数,6、日均超标监测点数占比*/ + harmonicVoltageDPOQueryWrapper.clear(); + harmonicVoltageDPOQueryWrapper.eq("org_no", deptGetChildrenMoreDTO.getUnitId()). + eq("measurement_type_class", k). + eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()). + eq("harmonic_type", dictData.getId()). + eq("voltageType",k1). + eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7)); + List list = rStatHarmonicVoltageDPOService.list(harmonicVoltageDPOQueryWrapper); + double asDouble = list.stream().mapToDouble(RStatHarmonicVoltageDPO::getOverLimitMeasurementAverage).average().getAsDouble(); + asDouble = BigDecimal.valueOf(asDouble).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + rStatHarmonicVoltageMPO.setOverLimitMeasurementAverage(asDouble); + double asDouble1 = list.stream().mapToDouble(RStatHarmonicVoltageDPO::getOverLimitMeasurementRatioAverage).average().getAsDouble(); + asDouble1 = BigDecimal.valueOf(asDouble1).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + rStatHarmonicVoltageMPO.setOverLimitMeasurementRatioAccrued(asDouble); + int sum = list.stream().mapToInt(RStatHarmonicVoltageDPO::getOverLimitMeasurementAverage).sum(); + rStatHarmonicVoltageMPO.setOverDay(sum); + + + if (rStatOrgMPO.getEffectiveMeasurementAccrued() == 0) { + //todo为0时如何设值 + rStatHarmonicVoltageMPO.setOverLimitMeasurementRatioAccrued(0.00); + + } else { + String value = df.format((float) rStatHarmonicVoltageMPO.getOverLimitMeasurementAccrued() / rStatOrgMPO.getEffectiveMeasurementAccrued()); + rStatHarmonicVoltageMPO.setOverLimitMeasurementRatioAccrued(Double.parseDouble(value)); + } + rStatHarmonicVoltageMPOList.add(rStatHarmonicVoltageMPO); + }); + + }); + } }); diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/RStatLoadTypeService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/RStatLoadTypeService.java new file mode 100644 index 000000000..9ab244b03 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/RStatLoadTypeService.java @@ -0,0 +1,16 @@ +package com.njcn.prepare.harmonic.service.mysql.newalgorithm; + +import com.njcn.user.pojo.po.Dept; + +import java.util.List; + +/** + * Description: + * Date: 2023/8/14 10:13【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +public interface RStatLoadTypeService { + void handler(List deptList, String dataDate, Integer type); +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatLoadTypeServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatLoadTypeServiceImpl.java new file mode 100644 index 000000000..a2f56749a --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatLoadTypeServiceImpl.java @@ -0,0 +1,464 @@ +package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.njcn.device.pms.pojo.po.RStatOrgPO; +import com.njcn.harmonic.pojo.po.RStatOrgMPO; +import com.njcn.prepare.harmonic.mapper.mysql.area.*; +import com.njcn.prepare.harmonic.pojo.mysql.po.*; +import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicDPOService; +import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicMPOService; +import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicQPOService; +import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicYPOService; +import com.njcn.prepare.harmonic.service.mysql.newalgorithm.*; +import com.njcn.prepare.harmonic.utils.PublicUtil; +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 com.njcn.user.pojo.po.Dept; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * Description: + * Date: 2023/8/14 10:14【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Service +@RequiredArgsConstructor +public class RStatLoadTypeServiceImpl implements RStatLoadTypeService { + + private final RStatLoadTypeDPOService rStatLoadTypeDPOService; + private final RStatLoadTypeMPOService rStatLoadTypeMPOService; + private final RStatLoadTypeQPOService rStatLoadTypeQPOService; + private final RStatLoadTypeYPOService rStatLoadTypeYPOService; + + + + private final + DicDataFeignClient dicDataFeignClient; + private final RStatHarmonicDPOService rStatHarmonicDPOService; + private final RStatHarmonicMPOMapper rStatHarmonicMPOMapper; + private final RStatHarmonicQPOMapper rStatHarmonicQPOMapper; + private final RStatHarmonicYPOMapper rStatHarmonicYPOMapper; + + + private final RStatOrgMMapper rStatOrgMMapper; + private final RStatOrgQMapper rStatOrgQMapper; + private final RStatOrgYMapper rStatOrgYMapper; + @Override + public void handler(List deptList, String dataDate, Integer type) { + switch (type) { + case 1: + this.hanlderYear (deptList, dataDate, type); + break; + case 2: + this.hanlderQtr (deptList, dataDate, type); + break; + case 3: + this.hanlderMonth (deptList, dataDate, type); + break; + case 5: + this.hanlderDay ( deptList, dataDate, type); + break; + default: + break; + } + } + @Transactional(rollbackFor = {Exception.class}) + @Async("asyncExecutor") + @SneakyThrows + private void hanlderYear(List deptList, String dataDate, Integer type) { + Date date = DateUtil.parse(dataDate); + List result = new ArrayList<>(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + QueryWrapper rStatOrgYPOQueryWrapper = new QueryWrapper<>(); + QueryWrapper rStatLoadTypeMPOQueryWrapper = new QueryWrapper<>(); + + List dataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.MONITORING_LABELS.getCode()).getData(); + //过滤监测对象类型(陆上风电、分布式光伏、电气化铁路、其他非线性负荷) + Map collect = dataList.stream().filter(temp -> Objects.equals(temp.getLevel(), 1)).collect(Collectors.toMap(DictData::getId, dictData -> dictData)); + + List dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData(); + Map dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData)); + ; + /*获取稳态统计指标*/ + List steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData(); + Map steadyStatisMap = steadyStatis.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData)); + deptList.forEach(dept -> { + + + collect.forEach((m,n)->{ + rStatOrgYPOQueryWrapper.clear(); + rStatOrgYPOQueryWrapper.eq("measurement_type_class",m). + eq("org_no",dept.getId()). + eq("YEAR( data_date)", dataDate.substring(0,4)); + List rStatOrgYPOS = rStatOrgYMapper.selectList(rStatOrgYPOQueryWrapper); + + queryWrapper.clear(); + queryWrapper.eq("org_no",dept.getId()). + eq("YEAR( data_date)", dataDate.substring(0,4)); + List rStatHarmonicYPOS = rStatHarmonicYPOMapper.selectList(queryWrapper); + rStatLoadTypeMPOQueryWrapper.clear(); + rStatLoadTypeMPOQueryWrapper.eq("org_no",dept.getId()). + eq("load_type",m). + eq("YEAR( data_date)", dataDate.substring(0,4)); + List rStatLoadTypeMPOS = rStatLoadTypeMPOService.getBaseMapper().selectList(rStatLoadTypeMPOQueryWrapper); + + RStatLoadTypeYPO rStatLoadTypeYPO = new RStatLoadTypeYPO(); + rStatLoadTypeYPO.setDataDate(date); + rStatLoadTypeYPO.setOrgNo(dept.getId()); + rStatLoadTypeYPO.setLoadType(m); + /*2、有效接入监测点数*/ + if(CollectionUtils.isEmpty(rStatOrgYPOS)){ + rStatLoadTypeYPO.setEffectiveMeasurement(0); + }else { + rStatLoadTypeYPO.setEffectiveMeasurement(rStatOrgYPOS.get(0).getEffectiveMeasurementAccrued()); + } + /*4、谐波电压超标点数6、谐波电流超标点数*/ + if(CollectionUtils.isEmpty(rStatHarmonicYPOS)){ + rStatLoadTypeYPO.setVCount(0); + rStatLoadTypeYPO.setICount(0); + rStatLoadTypeYPO.setINegCount(0); + rStatLoadTypeYPO.setUnbalanceCount(0); + rStatLoadTypeYPO.setFlickerCount(0); + }else { + Optional vfirst = rStatHarmonicYPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.HARMONIC_VOLTAGE).getId())).findFirst(); + rStatLoadTypeYPO.setVCount(vfirst.isPresent() ? vfirst.get().getOverLimitMeasurementAccrued(): 0); + Optional ifirst = rStatHarmonicYPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.HARMONIC_CURRENT).getId())).findFirst(); + rStatLoadTypeYPO.setVCount(ifirst.isPresent() ? ifirst.get().getOverLimitMeasurementAccrued(): 0); + Optional pfirst = rStatHarmonicYPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.PHASE_VOLTAGE).getId())).findFirst(); + Optional nfirst = rStatHarmonicYPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.NEG_CURRENT).getId())).findFirst(); + Optional ffirst = rStatHarmonicYPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.FLICKER).getId())).findFirst(); + + rStatLoadTypeYPO.setINegCount(nfirst.isPresent() ? nfirst.get().getOverLimitMeasurementAccrued(): 0); + rStatLoadTypeYPO.setUnbalanceCount(pfirst.isPresent() ? pfirst.get().getOverLimitMeasurementAccrued(): 0); + rStatLoadTypeYPO.setFlickerCount(ffirst.isPresent() ? ffirst.get().getOverLimitMeasurementAccrued(): 0); + + } + /*3、日均谐波电压超标点占比5、日均谐波电流超标点占比,7、日均三相电压不平衡度超标点占比9、日均负序电流超标点占比11、日均闪变超标点占比*/ + if(CollectionUtils.isEmpty(rStatLoadTypeMPOS)){ + rStatLoadTypeYPO.setVAverage(0.00); + rStatLoadTypeYPO.setIAverage(0.00); + rStatLoadTypeYPO.setUnbalanceAverage(0.00); + rStatLoadTypeYPO.setFlickerAverage(0.00); + rStatLoadTypeYPO.setINegAverage(0.00); + }else { + double vavg = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getVAverage).average().getAsDouble(); + rStatLoadTypeYPO.setVAverage(vavg); + double iavge = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getIAverage).average().getAsDouble(); + rStatLoadTypeYPO.setIAverage(iavge); + double uavge = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getUnbalanceAverage).average().getAsDouble(); + rStatLoadTypeYPO.setUnbalanceAverage(uavge); + double inavge = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getINegAverage).average().getAsDouble(); + double favg = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getFlickerAverage).average().getAsDouble(); + rStatLoadTypeYPO.setFlickerAverage(favg); + rStatLoadTypeYPO.setINegAverage(inavge); + + } + result.add(rStatLoadTypeYPO); + }); + }); + if(CollectionUtil.isNotEmpty(result)){ + rStatLoadTypeYPOService.saveOrUpdateBatchByMultiId(result,500); + } + } + @Transactional(rollbackFor = {Exception.class}) + @Async("asyncExecutor") + @SneakyThrows + private void hanlderQtr(List deptList, String dataDate, Integer type) { + Date date = DateUtil.parse(dataDate); + List result = new ArrayList<>(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + QueryWrapper rStatOrgQPOQueryWrapper = new QueryWrapper<>(); + QueryWrapper rStatLoadTypeMPOQueryWrapper = new QueryWrapper<>(); + + List dataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.MONITORING_LABELS.getCode()).getData(); + //过滤监测对象类型(陆上风电、分布式光伏、电气化铁路、其他非线性负荷) + Map collect = dataList.stream().filter(temp -> Objects.equals(temp.getLevel(), 1)).collect(Collectors.toMap(DictData::getId, dictData -> dictData)); + + List dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData(); + Map dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData)); + ; + /*获取稳态统计指标*/ + List steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData(); + Map steadyStatisMap = steadyStatis.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData)); + deptList.forEach(dept -> { + + + collect.forEach((m,n)->{ + rStatOrgQPOQueryWrapper.clear(); + rStatOrgQPOQueryWrapper.eq("measurement_type_class",m). + eq("org_no",dept.getId()). + eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate)); + List rStatOrgQPOS = rStatOrgQMapper.selectList(rStatOrgQPOQueryWrapper); + + queryWrapper.clear(); + queryWrapper.eq("org_no",dept.getId()). + eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate)); + List rStatHarmonicQPOS = rStatHarmonicQPOMapper.selectList(queryWrapper); + rStatLoadTypeMPOQueryWrapper.clear(); + rStatLoadTypeMPOQueryWrapper.eq("org_no",dept.getId()). + eq("load_type",m). + eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate)); + List rStatLoadTypeMPOS = rStatLoadTypeMPOService.getBaseMapper().selectList(rStatLoadTypeMPOQueryWrapper); + + RStatLoadTypeQPO rStatLoadTypeQPO = new RStatLoadTypeQPO(); + rStatLoadTypeQPO.setDataDate(date); + rStatLoadTypeQPO.setOrgNo(dept.getId()); + rStatLoadTypeQPO.setLoadType(m); + /*2、有效接入监测点数*/ + if(CollectionUtils.isEmpty(rStatOrgQPOS)){ + rStatLoadTypeQPO.setEffectiveMeasurement(0); + }else { + rStatLoadTypeQPO.setEffectiveMeasurement(rStatOrgQPOS.get(0).getEffectiveMeasurementAccrued()); + } + /*4、谐波电压超标点数6、谐波电流超标点数*/ + if(CollectionUtils.isEmpty(rStatHarmonicQPOS)){ + rStatLoadTypeQPO.setVCount(0); + rStatLoadTypeQPO.setICount(0); + rStatLoadTypeQPO.setINegCount(0); + rStatLoadTypeQPO.setUnbalanceCount(0); + rStatLoadTypeQPO.setFlickerCount(0); + }else { + Optional vfirst = rStatHarmonicQPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.HARMONIC_VOLTAGE).getId())).findFirst(); + rStatLoadTypeQPO.setVCount(vfirst.isPresent() ? vfirst.get().getOverLimitMeasurementAccrued(): 0); + Optional ifirst = rStatHarmonicQPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.HARMONIC_CURRENT).getId())).findFirst(); + rStatLoadTypeQPO.setVCount(ifirst.isPresent() ? ifirst.get().getOverLimitMeasurementAccrued(): 0); + Optional pfirst = rStatHarmonicQPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.PHASE_VOLTAGE).getId())).findFirst(); + Optional nfirst = rStatHarmonicQPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.NEG_CURRENT).getId())).findFirst(); + Optional ffirst = rStatHarmonicQPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.FLICKER).getId())).findFirst(); + + rStatLoadTypeQPO.setINegCount(nfirst.isPresent() ? nfirst.get().getOverLimitMeasurementAccrued(): 0); + rStatLoadTypeQPO.setUnbalanceCount(pfirst.isPresent() ? pfirst.get().getOverLimitMeasurementAccrued(): 0); + rStatLoadTypeQPO.setFlickerCount(ffirst.isPresent() ? ffirst.get().getOverLimitMeasurementAccrued(): 0); + + } + /*3、日均谐波电压超标点占比5、日均谐波电流超标点占比,7、日均三相电压不平衡度超标点占比9、日均负序电流超标点占比11、日均闪变超标点占比*/ + if(CollectionUtils.isEmpty(rStatLoadTypeMPOS)){ + rStatLoadTypeQPO.setVAverage(0.00); + rStatLoadTypeQPO.setIAverage(0.00); + rStatLoadTypeQPO.setUnbalanceAverage(0.00); + rStatLoadTypeQPO.setFlickerAverage(0.00); + rStatLoadTypeQPO.setINegAverage(0.00); + }else { + double vavg = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getVAverage).average().getAsDouble(); + rStatLoadTypeQPO.setVAverage(vavg); + double iavge = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getIAverage).average().getAsDouble(); + rStatLoadTypeQPO.setIAverage(iavge); + double uavge = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getUnbalanceAverage).average().getAsDouble(); + rStatLoadTypeQPO.setUnbalanceAverage(uavge); + double inavge = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getINegAverage).average().getAsDouble(); + double favg = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getFlickerAverage).average().getAsDouble(); + rStatLoadTypeQPO.setFlickerAverage(favg); + rStatLoadTypeQPO.setINegAverage(inavge); + + } + result.add(rStatLoadTypeQPO); + }); + }); + if(CollectionUtil.isNotEmpty(result)){ + rStatLoadTypeQPOService.saveOrUpdateBatchByMultiId(result,500); + } + + } + + @Transactional(rollbackFor = {Exception.class}) + @Async("asyncExecutor") + @SneakyThrows + private void hanlderMonth(List deptList, String dataDate, Integer type) { + Date date = DateUtil.parse(dataDate); + List result = new ArrayList<>(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + QueryWrapper rStatOrgMPOQueryWrapper = new QueryWrapper<>(); + QueryWrapper rStatLoadTypeDPOQueryWrapper = new QueryWrapper<>(); + + List dataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.MONITORING_LABELS.getCode()).getData(); + //过滤监测对象类型(陆上风电、分布式光伏、电气化铁路、其他非线性负荷) + Map collect = dataList.stream().filter(temp -> Objects.equals(temp.getLevel(), 1)).collect(Collectors.toMap(DictData::getId, dictData -> dictData)); + + List dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData(); + Map dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData)); + ; + /*获取稳态统计指标*/ + List steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData(); + Map steadyStatisMap = steadyStatis.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData)); + deptList.forEach(dept -> { + + + collect.forEach((m,n)->{ + rStatOrgMPOQueryWrapper.clear(); + rStatOrgMPOQueryWrapper.eq("measurement_type_class",m). + eq("org_no",dept.getId()). + eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7)); + List rStatOrgMPOS = rStatOrgMMapper.selectList(rStatOrgMPOQueryWrapper); + + queryWrapper.clear(); + queryWrapper.eq("org_no",dept.getId()). + eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7)); + List rStatHarmonicMPOS = rStatHarmonicMPOMapper.selectList(queryWrapper); + rStatLoadTypeDPOQueryWrapper.clear(); + rStatLoadTypeDPOQueryWrapper.eq("org_no",dept.getId()). + eq("load_type",m). + eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7)); + List rStatLoadTypeDPOS = rStatLoadTypeDPOService.getBaseMapper().selectList(rStatLoadTypeDPOQueryWrapper); + + RStatLoadTypeMPO rStatLoadTypeMPO = new RStatLoadTypeMPO(); + rStatLoadTypeMPO.setDataDate(date); + rStatLoadTypeMPO.setOrgNo(dept.getId()); + rStatLoadTypeMPO.setLoadType(m); + /*2、有效接入监测点数*/ + if(CollectionUtils.isEmpty(rStatOrgMPOS)){ + rStatLoadTypeMPO.setEffectiveMeasurement(0); + }else { + rStatLoadTypeMPO.setEffectiveMeasurement(rStatOrgMPOS.get(0).getEffectiveMeasurementAccrued()); + } + /*4、谐波电压超标点数6、谐波电流超标点数*/ + if(CollectionUtils.isEmpty(rStatHarmonicMPOS)){ + rStatLoadTypeMPO.setVCount(0); + rStatLoadTypeMPO.setICount(0); + rStatLoadTypeMPO.setINegCount(0); + rStatLoadTypeMPO.setUnbalanceCount(0); + rStatLoadTypeMPO.setFlickerCount(0); + }else { + Optional vfirst = rStatHarmonicMPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.HARMONIC_VOLTAGE).getId())).findFirst(); + rStatLoadTypeMPO.setVCount(vfirst.isPresent() ? vfirst.get().getOverLimitMeasurementAccrued(): 0); + Optional ifirst = rStatHarmonicMPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.HARMONIC_CURRENT).getId())).findFirst(); + rStatLoadTypeMPO.setVCount(ifirst.isPresent() ? ifirst.get().getOverLimitMeasurementAccrued(): 0); + Optional pfirst = rStatHarmonicMPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.PHASE_VOLTAGE).getId())).findFirst(); + Optional nfirst = rStatHarmonicMPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.NEG_CURRENT).getId())).findFirst(); + Optional ffirst = rStatHarmonicMPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.FLICKER).getId())).findFirst(); + + rStatLoadTypeMPO.setINegCount(nfirst.isPresent() ? nfirst.get().getOverLimitMeasurementAccrued(): 0); + rStatLoadTypeMPO.setUnbalanceCount(pfirst.isPresent() ? pfirst.get().getOverLimitMeasurementAccrued(): 0); + rStatLoadTypeMPO.setFlickerCount(ffirst.isPresent() ? ffirst.get().getOverLimitMeasurementAccrued(): 0); + + } + /*3、日均谐波电压超标点占比5、日均谐波电流超标点占比,7、日均三相电压不平衡度超标点占比9、日均负序电流超标点占比11、日均闪变超标点占比*/ + if(CollectionUtils.isEmpty(rStatLoadTypeDPOS)){ + rStatLoadTypeMPO.setVAverage(0.00); + rStatLoadTypeMPO.setIAverage(0.00); + rStatLoadTypeMPO.setUnbalanceAverage(0.00); + rStatLoadTypeMPO.setFlickerAverage(0.00); + rStatLoadTypeMPO.setINegAverage(0.00); + }else { + double vavg = rStatLoadTypeDPOS.stream().mapToDouble(RStatLoadTypeDPO::getVRatio).average().getAsDouble(); + rStatLoadTypeMPO.setVAverage(vavg); + double iavge = rStatLoadTypeDPOS.stream().mapToDouble(RStatLoadTypeDPO::getIRatio).average().getAsDouble(); + rStatLoadTypeMPO.setIAverage(iavge); + double uavge = rStatLoadTypeDPOS.stream().mapToDouble(RStatLoadTypeDPO::getUnbalanceRatio).average().getAsDouble(); + rStatLoadTypeMPO.setUnbalanceAverage(uavge); + double inavge = rStatLoadTypeDPOS.stream().mapToDouble(RStatLoadTypeDPO::getINegRatio).average().getAsDouble(); + double favg = rStatLoadTypeDPOS.stream().mapToDouble(RStatLoadTypeDPO::getFlickerRatio).average().getAsDouble(); + rStatLoadTypeMPO.setFlickerAverage(favg); + rStatLoadTypeMPO.setINegAverage(inavge); + + } + result.add(rStatLoadTypeMPO); + }); + }); + if(CollectionUtil.isNotEmpty(result)){ + rStatLoadTypeMPOService.saveOrUpdateBatchByMultiId(result,500); + } + + + } + + @Transactional(rollbackFor = {Exception.class}) + @Async("asyncExecutor") + @SneakyThrows + private void hanlderDay(List deptList, String dataDate, Integer type) { + Date date = DateUtil.parse(dataDate); + List result = new ArrayList<>(); + List dataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.MONITORING_LABELS.getCode()).getData(); + //过滤监测对象类型(陆上风电、分布式光伏、电气化铁路、其他非线性负荷) + Map collect = dataList.stream().filter(temp -> Objects.equals(temp.getLevel(), 1)).collect(Collectors.toMap(DictData::getId, dictData -> dictData)); + + List dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData(); + Map dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData)); + ; + /*获取稳态统计指标*/ + List steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData(); + Map steadyStatisMap = steadyStatis.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData)); + deptList.forEach(dept -> { + + + collect.forEach((m,n)->{ + RStatLoadTypeDPO rStatLoadTypeDPO = new RStatLoadTypeDPO(); + rStatLoadTypeDPO.setDataDate(date); + rStatLoadTypeDPO.setOrgNo(dept.getId()); + rStatLoadTypeDPO.setLoadType(m); + /*只计算谐波电压、谐波电流、三相电压不平衡度、负序电流/闪变*/ + RStatHarmonicDPO one = rStatHarmonicDPOService.lambdaQuery().eq(RStatHarmonicDPO::getOrgNo, dept.getId()). + eq(RStatHarmonicDPO::getDataDate, date). + eq(RStatHarmonicDPO::getMeasurementTypeClass, m). + eq(RStatHarmonicDPO::getDataType, dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()). + eq(RStatHarmonicDPO::getHarmonicType, steadyStatisMap.get(DicDataEnum.HARMONIC_VOLTAGE).getId()).one(); + if(Objects.nonNull(one)){ + rStatLoadTypeDPO.setVRatio(one.getOverLimitMeasurementRatio()); + }else { + rStatLoadTypeDPO.setVRatio(0.00); + } + RStatHarmonicDPO two = rStatHarmonicDPOService.lambdaQuery().eq(RStatHarmonicDPO::getOrgNo, dept.getId()). + eq(RStatHarmonicDPO::getDataDate, date). + eq(RStatHarmonicDPO::getMeasurementTypeClass, m). + eq(RStatHarmonicDPO::getDataType, dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()). + eq(RStatHarmonicDPO::getHarmonicType, steadyStatisMap.get(DicDataEnum.HARMONIC_CURRENT).getId()).one(); + if(Objects.nonNull(two)){ + rStatLoadTypeDPO.setIRatio(two.getOverLimitMeasurementRatio()); + }else { + rStatLoadTypeDPO.setIRatio(0.00); + } + RStatHarmonicDPO three = rStatHarmonicDPOService.lambdaQuery().eq(RStatHarmonicDPO::getOrgNo, dept.getId()). + eq(RStatHarmonicDPO::getDataDate, date). + eq(RStatHarmonicDPO::getMeasurementTypeClass, m). + eq(RStatHarmonicDPO::getDataType, dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()). + eq(RStatHarmonicDPO::getHarmonicType, steadyStatisMap.get(DicDataEnum.PHASE_VOLTAGE).getId()).one(); + if(Objects.nonNull(three)){ + rStatLoadTypeDPO.setUnbalanceRatio(three.getOverLimitMeasurementRatio()); + }else { + rStatLoadTypeDPO.setUnbalanceRatio(0.00); + } + RStatHarmonicDPO four = rStatHarmonicDPOService.lambdaQuery().eq(RStatHarmonicDPO::getOrgNo, dept.getId()). + eq(RStatHarmonicDPO::getDataDate, date). + eq(RStatHarmonicDPO::getMeasurementTypeClass, m). + eq(RStatHarmonicDPO::getDataType, dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()). + eq(RStatHarmonicDPO::getHarmonicType, steadyStatisMap.get(DicDataEnum.NEG_CURRENT).getId()).one(); + if(Objects.nonNull(four)){ + rStatLoadTypeDPO.setINegRatio(four.getOverLimitMeasurementRatio()); + }else { + rStatLoadTypeDPO.setINegRatio(0.00); + } + RStatHarmonicDPO five = rStatHarmonicDPOService.lambdaQuery().eq(RStatHarmonicDPO::getOrgNo, dept.getId()). + eq(RStatHarmonicDPO::getDataDate, date). + eq(RStatHarmonicDPO::getMeasurementTypeClass, m). + eq(RStatHarmonicDPO::getDataType, dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()). + eq(RStatHarmonicDPO::getHarmonicType, steadyStatisMap.get(DicDataEnum.FLICKER).getId()).one(); + if(Objects.nonNull(five)){ + rStatLoadTypeDPO.setFlickerRatio(five.getOverLimitMeasurementRatio()); + }else { + rStatLoadTypeDPO.setFlickerRatio(0.00); + } + result.add(rStatLoadTypeDPO); + }); + }); + + if(CollectionUtil.isNotEmpty(result)){ + rStatLoadTypeDPOService.saveOrUpdateBatchByMultiId(result,500); + } + + + } + +}