1.pms谐波模块保留俩位小数

2.冀北分布式光伏概览代码提交
This commit is contained in:
wr
2023-05-11 09:26:52 +08:00
parent 2e71088c8d
commit 0e4bdb62fd
28 changed files with 688 additions and 92 deletions

View File

@@ -123,13 +123,13 @@ public class PwPmsMonitorDTO implements Serializable {
/** /**
* 关联的监测终端编号(外键) * 关联的监测终端编号(外键)
*/ */
@ApiModelProperty(name = "terminalId", value = "更新时间") @ApiModelProperty(name = "terminalId", value = "关联的监测终端编号")
private String terminalId; private String terminalId;
/** /**
* 监测终端接线方式(字典) * 监测终端接线方式(字典)
*/ */
@ApiModelProperty(name = "terminalWiringMethod", value = "更新时间") @ApiModelProperty(name = "terminalWiringMethod", value = "监测终端接线方式")
private String terminalWiringMethod; private String terminalWiringMethod;
} }

View File

@@ -0,0 +1,55 @@
package com.njcn.device.pms.pojo.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @author wr
* @description
* @date 2023/5/8 14:58
*/
@Data
public class PVCapacity implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(name = "sumCount", value = "光伏总容量")
private Float sumCount;
@ApiModelProperty(name = "sumOrgCount", value = "已安装容量")
private Float sumOrgCount;
@ApiModelProperty(name = "sumOrgTheYear", value = "当年接入容量")
private Float sumOrgTheYear;
@Data
public static class PVCapacityCount{
@ApiModelProperty(name = "num1", value = "0-25")
private Integer num1;
@ApiModelProperty(name = "num2;", value = "25-50")
private Integer num2;
@ApiModelProperty(name = "num3", value = "50-75")
private Integer num3;
@ApiModelProperty(name = "num4", value = "75-100")
private Integer num4;
@ApiModelProperty(name = "num5", value = ">100")
private Integer num5;
}
@Data
public static class Absorptive{
@ApiModelProperty(name = "org", value = "部门")
private String org;
@ApiModelProperty(name = "capacity;", value = "已安装容量")
private Double capacity;
@ApiModelProperty(name = "consumption", value = "可安装容量")
private Double consumption;
}
}

View File

@@ -4,18 +4,15 @@ import cn.hutool.core.collection.CollectionUtil;
import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.param.StatisticsBizBaseParam;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil; import com.njcn.common.utils.HttpResultUtil;
import com.njcn.device.pms.pojo.dto.PmsGeneralDeviceDTO;
import com.njcn.device.pms.pojo.dto.PwPmsMonitorDTO; import com.njcn.device.pms.pojo.dto.PwPmsMonitorDTO;
import com.njcn.device.pms.pojo.param.PmsDeviceInfoParam;
import com.njcn.device.pms.pojo.param.PwPmsMonitorParam; import com.njcn.device.pms.pojo.param.PwPmsMonitorParam;
import com.njcn.device.pms.pojo.vo.DoubleUserVO;
import com.njcn.device.pms.service.distribution.IPwMonitorService; import com.njcn.device.pms.service.distribution.IPwMonitorService;
import com.njcn.web.controller.BaseController; import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -100,6 +97,15 @@ public class PwMonitorController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, monitorList, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, monitorList, methodDescribe);
} }
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getPVCompositeIndicators")
@ApiOperation("冀北分布式光伏获取综合指标")
public HttpResult<List<List<Integer>>> getPVCompositeIndicators(@RequestBody StatisticsBizBaseParam param) {
String methodDescribe = getMethodDescribe("getPVCompositeIndicators");
List<List<Integer>> compositeIndicators = iPwMonitorService.getCompositeIndicators(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, compositeIndicators, methodDescribe);
}
} }

View File

@@ -6,14 +6,14 @@ import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.constant.OperateType; import com.njcn.common.pojo.constant.OperateType;
import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.param.StatisticsBizBaseParam;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil; import com.njcn.common.utils.HttpResultUtil;
import com.njcn.common.utils.LogUtil; import com.njcn.common.utils.LogUtil;
import com.njcn.device.pms.annotation.TerminalOperationLogDesc; import com.njcn.device.pms.annotation.TerminalOperationLogDesc;
import com.njcn.device.pms.pojo.param.PmsBaseParam;
import com.njcn.device.pms.pojo.param.PowerDistributionareaParam; import com.njcn.device.pms.pojo.param.PowerDistributionareaParam;
import com.njcn.device.pms.pojo.po.PowerDistributionarea; import com.njcn.device.pms.pojo.po.PowerDistributionarea;
import com.njcn.device.pms.pojo.vo.PowerDistributionareaVO; import com.njcn.device.pms.pojo.vo.PVCapacity;
import com.njcn.device.pms.service.majornetwork.IPowerDistributionareaService; import com.njcn.device.pms.service.majornetwork.IPowerDistributionareaService;
import com.njcn.web.pojo.param.BaseParam; import com.njcn.web.pojo.param.BaseParam;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@@ -143,5 +143,30 @@ public class PmsPowerDistributionareaController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe);
} }
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getPVCapacity")
@ApiOperation("冀北分布式光伏获取分布式光伏容量")
public HttpResult<PVCapacity> getPVCapacity(@RequestBody StatisticsBizBaseParam param) {
String methodDescribe = getMethodDescribe("getPVCapacity");
PVCapacity pvCapacity = iPowerDistributionareaService.getPVCapacity(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, pvCapacity, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getPVPermeability")
@ApiOperation("冀北分布式光伏获取分布式光伏渗透率")
public HttpResult<PVCapacity.PVCapacityCount> getPVPermeability(@RequestBody StatisticsBizBaseParam param) {
String methodDescribe = getMethodDescribe("getPVPermeability");
PVCapacity.PVCapacityCount pvCapacityCount = iPowerDistributionareaService.getPVPermeability(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, pvCapacityCount, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getPVAbsorptiveCapacity")
@ApiOperation("冀北分布式光伏获取消纳能力")
public HttpResult<List<PVCapacity.Absorptive>> getPVAbsorptiveCapacity(@RequestBody StatisticsBizBaseParam param) {
String methodDescribe = getMethodDescribe("getPVAbsorptiveCapacity");
List<PVCapacity.Absorptive> absorptiveCapacity = iPowerDistributionareaService.getAbsorptiveCapacity(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, absorptiveCapacity, methodDescribe);
}
} }

View File

@@ -45,7 +45,7 @@ public class SubstationRelationController extends BaseController {
@OperateInfo(info = LogEnum.BUSINESS_COMMON) @OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/saveSubstationRelation") @PostMapping("/saveSubstationRelation")
@ApiOperation("配置变电站拓扑图") @ApiOperation("配置变电站拓扑图")
@ApiImplicitParam(name = "saveSubstationRelation", value = "配置变电站拓扑图", required = true) @ApiImplicitParam(name = "param", value = "配置变电站拓扑图", required = true)
public HttpResult<Boolean> saveSubstationRelation(@RequestBody SubstationRelation param) { public HttpResult<Boolean> saveSubstationRelation(@RequestBody SubstationRelation param) {
String methodDescribe = getMethodDescribe("saveSubstationRelation"); String methodDescribe = getMethodDescribe("saveSubstationRelation");
Boolean result = substationRelationService.saveSubstationRelation(param); Boolean result = substationRelationService.saveSubstationRelation(param);

View File

@@ -1,14 +1,13 @@
package com.njcn.device.pms.mapper.majornetwork; package com.njcn.device.pms.mapper.majornetwork;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.device.pms.pojo.po.GeneratrixWire;
import com.njcn.device.pms.pojo.po.PowerDistributionarea; import com.njcn.device.pms.pojo.po.PowerDistributionarea;
import com.njcn.device.pms.pojo.vo.PowerDistributionareaVO; import com.njcn.device.pms.pojo.vo.PVCapacity;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* <p> * <p>
* Mapper 台区 * Mapper 台区
@@ -20,5 +19,24 @@ import org.apache.ibatis.annotations.Param;
public interface PowerDistributionareaMapper extends BaseMapper<PowerDistributionarea> { public interface PowerDistributionareaMapper extends BaseMapper<PowerDistributionarea> {
/**
* 冀北分布式光伏获取分布式光伏容量
* @param orgId
* @return
*/
PVCapacity selectPVCapacity(@Param("orgIds") List<String> orgId);
/**
* 冀北分布式光伏获取分布式光伏渗透率
* @param deptCode
* @return
*/
PVCapacity.PVCapacityCount selectPPVPermeability(@Param("orgIds")List<String> deptCode);
/**
* 冀北分布式光伏获取消纳能力
* @param deptCode
* @return
*/
List<PVCapacity.Absorptive> selectAbsorptiveCapacity(@Param("orgIds")List<String> deptCode);
} }

View File

@@ -3,6 +3,63 @@
<mapper namespace="com.njcn.device.pms.mapper.majornetwork.PowerDistributionareaMapper"> <mapper namespace="com.njcn.device.pms.mapper.majornetwork.PowerDistributionareaMapper">
<select id="selectPVCapacity" resultType="com.njcn.device.pms.pojo.vo.PVCapacity">
SELECT
sum( P_Capacity ) AS sumCount,
( SELECT sum( `Photovoltaic_Capacity` ) FROM pms_power_distributionarea
<where>
org_id IN
<foreach collection="orgIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
AND STATUS = 1
</where>
) AS sumOrgCount,
( SELECT sum( `Photovoltaic_Capacity` ) FROM pms_power_distributionarea
<where>
org_id IN
<foreach collection="orgIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
AND Year(Create_Time)=Year(now())
AND STATUS = 1
</where>
) AS sumOrgTheYear
FROM
pms_power_distributionarea
</select>
<select id="selectPPVPermeability" resultType="com.njcn.device.pms.pojo.vo.PVCapacity$PVCapacityCount">
SELECT
COALESCE( sum( CASE WHEN 0&lt;=num and num&lt;=25 THEN 1 ELSE 0 END ), 0 ) "num_1",
COALESCE ( sum( CASE WHEN 25&lt;num and num&lt;=50 THEN 1 ELSE 0 END ), 0 ) "num_2",
COALESCE ( sum( CASE WHEN 50&lt;num and num&lt;=75 THEN 1 ELSE 0 END ), 0 ) "num_3",
COALESCE ( sum( CASE WHEN 75&lt;num and num&lt;=100 THEN 1 ELSE 0 END ), 0 ) "num_4" ,
COALESCE ( sum( CASE WHEN 100&lt;num THEN 1 ELSE 0 END ), 0 ) "num_5"
FROM
( SELECT round( Photovoltaic_Capacity / P_Capacity, 4 )* 100 AS num FROM pms_power_distributionarea
<where>
org_id IN
<foreach collection="orgIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
AND STATUS = 1
</where>
) x
</select>
<select id="selectAbsorptiveCapacity" resultType="com.njcn.device.pms.pojo.vo.PVCapacity$Absorptive">
SELECT
Org_Id as org,
Photovoltaic_Capacity as capacity,
CASE WHEN 0&lt;=P_Capacity * 0.8 - Photovoltaic_Capacity THEN P_Capacity * 0.8 - Photovoltaic_Capacity ELSE 0 END as Consumption
FROM
pms_power_distributionarea
<where>
org_id IN
<foreach collection="orgIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
AND STATUS = 1
</where>
</select>
</mapper> </mapper>

View File

@@ -1,5 +1,6 @@
package com.njcn.device.pms.service.distribution; package com.njcn.device.pms.service.distribution;
import com.njcn.common.pojo.param.StatisticsBizBaseParam;
import com.njcn.device.pms.pojo.dto.PwPmsMonitorDTO; import com.njcn.device.pms.pojo.dto.PwPmsMonitorDTO;
import com.njcn.device.pms.pojo.param.PwPmsMonitorParam; import com.njcn.device.pms.pojo.param.PwPmsMonitorParam;
@@ -33,4 +34,11 @@ public interface IPwMonitorService {
* @return * @return
*/ */
List<PwPmsMonitorDTO> getPwSubsetMonitorList(PwPmsMonitorParam pwPmsMonitorParam); List<PwPmsMonitorDTO> getPwSubsetMonitorList(PwPmsMonitorParam pwPmsMonitorParam);
/**
* 冀北分布式光伏获取综合指标
* @return
*/
List<List<Integer>> getCompositeIndicators(StatisticsBizBaseParam param);
} }

View File

@@ -1,21 +1,25 @@
package com.njcn.device.pms.service.distribution.impl; package com.njcn.device.pms.service.distribution.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.njcn.common.pojo.param.StatisticsBizBaseParam;
import com.njcn.device.pms.mapper.distribution.PwMonitorMapper; import com.njcn.device.pms.mapper.distribution.PwMonitorMapper;
import com.njcn.device.pms.pojo.dto.PwPmsMonitorDTO; import com.njcn.device.pms.pojo.dto.PwPmsMonitorDTO;
import com.njcn.device.pms.pojo.param.PwPmsMonitorParam; import com.njcn.device.pms.pojo.param.PwPmsMonitorParam;
import com.njcn.device.pms.service.distribution.IPwMonitorService; import com.njcn.device.pms.service.distribution.IPwMonitorService;
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.api.DeptFeignClient; import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.dto.DeptDTO; import com.njcn.user.pojo.dto.DeptDTO;
import com.njcn.user.pojo.po.Dept;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.*;
import java.util.Collections; import java.util.function.Function;
import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
@@ -35,6 +39,8 @@ public class IPwMonitorServiceImpl implements IPwMonitorService {
private final PwMonitorMapper pwMonitorMapper; private final PwMonitorMapper pwMonitorMapper;
private final DicDataFeignClient dicDataFeignClient;
/** /**
* 获取配网所有监测点信息 * 获取配网所有监测点信息
* *
@@ -130,5 +136,46 @@ public class IPwMonitorServiceImpl implements IPwMonitorService {
} }
return pwPmsMonitorDTOS; return pwPmsMonitorDTOS;
} }
@Override
public List<List<Integer>> getCompositeIndicators(StatisticsBizBaseParam param) {
List<List<Integer>> info=new ArrayList<>(2);
List<DictData> monitorType = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_SORT.getCode()).getData();
Map<String, DictData> dictDataMap = monitorType.stream()
.collect(Collectors.toMap(DictData::getId, Function.identity()));
PwPmsMonitorParam pwPmsMonitorParam = new PwPmsMonitorParam();
pwPmsMonitorParam.setOrgId(param.getId()); //单位id
List<PwPmsMonitorDTO> pwMonitorList = this.getPwMonitorList(pwPmsMonitorParam);
Map<String, List<PwPmsMonitorDTO>> collect = pwMonitorList.stream().collect(Collectors.groupingBy(PwPmsMonitorDTO::getMonitorSort));
//初始化对象
List<Integer> monitorList=new ArrayList<>(3);
monitorList.add(0);
monitorList.add(0);
monitorList.add(0);
List<Integer> terminalList= BeanUtil.copyToList(monitorList,Integer.class);
collect.forEach((key,value)->{
if (dictDataMap.containsKey(key)) {
DictData dictData = dictDataMap.get(key);
//一类监测点
if(DicDataEnum.ONE_LINE.getCode().equals(dictData.getCode())){
monitorList.set(0,value.size());
terminalList.set(0,value.stream().map(PwPmsMonitorDTO::getTerminalId).distinct().collect(Collectors.toList()).size());
}
//二类监测点
if(DicDataEnum.TWO_LINE.getCode().equals(dictData.getCode())){
monitorList.set(1,value.size());
terminalList.set(1,value.stream().map(PwPmsMonitorDTO::getTerminalId).distinct().collect(Collectors.toList()).size());
}
//三类监测点
if(DicDataEnum.THREE_LINE.getCode().equals(dictData.getCode())){
monitorList.set(2,value.size());
terminalList.set(2,value.stream().map(PwPmsMonitorDTO::getTerminalId).distinct().collect(Collectors.toList()).size());
}
}
});
info.add(monitorList);
info.add(terminalList);
return info;
}
} }

View File

@@ -2,13 +2,10 @@ package com.njcn.device.pms.service.majornetwork;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.device.pms.pojo.param.PmsBaseParam; import com.njcn.common.pojo.param.StatisticsBizBaseParam;
import com.njcn.device.pms.pojo.param.PowerDistributionareaParam; import com.njcn.device.pms.pojo.param.PowerDistributionareaParam;
import com.njcn.device.pms.pojo.po.PowerDistributionarea; import com.njcn.device.pms.pojo.po.PowerDistributionarea;
import com.njcn.device.pms.pojo.vo.PowerDistributionareaVO; import com.njcn.device.pms.pojo.vo.PVCapacity;
import com.njcn.system.pojo.param.EventTemplateParam;
import com.njcn.system.pojo.po.EventTemplate;
import com.njcn.system.pojo.vo.EventTemplateVO;
import com.njcn.web.pojo.param.BaseParam; import com.njcn.web.pojo.param.BaseParam;
import java.util.List; import java.util.List;
@@ -58,4 +55,25 @@ public interface IPowerDistributionareaService extends IService<PowerDistributio
* @param ids ids * @param ids ids
*/ */
boolean delete(List<String> ids); boolean delete(List<String> ids);
/**
* 冀北分布式光伏获取分布式光伏容量
* @param param
* @return
*/
PVCapacity getPVCapacity(StatisticsBizBaseParam param);
/**
* 冀北分布式光伏获取分布式光伏渗透率
* @param param
* @return
*/
PVCapacity.PVCapacityCount getPVPermeability(StatisticsBizBaseParam param);
/**
* 冀北分布式光伏获取消纳能力
* @param param
* @return
*/
List<PVCapacity.Absorptive> getAbsorptiveCapacity(StatisticsBizBaseParam param);
} }

View File

@@ -1,38 +1,40 @@
package com.njcn.device.pms.service.majornetwork.impl; package com.njcn.device.pms.service.majornetwork.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.db.bo.BaseEntity; import com.njcn.common.pojo.param.StatisticsBizBaseParam;
import com.njcn.device.pms.enums.PmsDeviceResponseEnum; import com.njcn.device.pms.enums.PmsDeviceResponseEnum;
import com.njcn.device.pms.mapper.majornetwork.PowerDistributionareaMapper; import com.njcn.device.pms.mapper.majornetwork.PowerDistributionareaMapper;
import com.njcn.device.pms.pojo.param.PmsBaseParam;
import com.njcn.device.pms.pojo.param.PowerDistributionareaParam; import com.njcn.device.pms.pojo.param.PowerDistributionareaParam;
import com.njcn.device.pms.pojo.po.PowerClient;
import com.njcn.device.pms.pojo.po.PowerDistributionarea; import com.njcn.device.pms.pojo.po.PowerDistributionarea;
import com.njcn.device.pms.pojo.po.PowerGenerationUser;
import com.njcn.device.pms.pojo.po.StatationStat; import com.njcn.device.pms.pojo.po.StatationStat;
import com.njcn.device.pms.pojo.vo.PowerDistributionareaVO; import com.njcn.device.pms.pojo.vo.PVCapacity;
import com.njcn.device.pms.service.majornetwork.IDistributionMonitorService; import com.njcn.device.pms.service.majornetwork.IDistributionMonitorService;
import com.njcn.device.pms.service.majornetwork.IGeneratrixWireService;
import com.njcn.device.pms.service.majornetwork.IPowerDistributionareaService; import com.njcn.device.pms.service.majornetwork.IPowerDistributionareaService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.device.pms.service.majornetwork.IStatationStatService; import com.njcn.device.pms.service.majornetwork.IStatationStatService;
import com.njcn.system.api.DicDataFeignClient; import com.njcn.event.pojo.vo.DeptLevelVO;
import com.njcn.event.utils.DeptUtil;
import com.njcn.user.api.DeptFeignClient; import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.dto.DeptDTO;
import com.njcn.user.pojo.po.Dept; import com.njcn.user.pojo.po.Dept;
import com.njcn.web.factory.PageFactory; import com.njcn.web.factory.PageFactory;
import com.njcn.web.pojo.param.BaseParam; import com.njcn.web.pojo.param.BaseParam;
import com.njcn.web.utils.WebUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors;
/** /**
* <p> * <p>
@@ -163,6 +165,47 @@ public class PowerDistributionareaServiceImpl extends ServiceImpl<PowerDistribut
return this.removeByIds(ids); return this.removeByIds(ids);
} }
@Override
public PVCapacity getPVCapacity(StatisticsBizBaseParam param) {
List<DeptDTO> data = deptFeignClient.getDeptDescendantIndexes(param.getId(), WebUtil.filterDeptType()).getData();
List<String> deptCode = data.stream().map(DeptDTO::getCode).collect(Collectors.toList());
return this.baseMapper.selectPVCapacity(deptCode);
}
@Override
public PVCapacity.PVCapacityCount getPVPermeability(StatisticsBizBaseParam param) {
List<DeptDTO> data = deptFeignClient.getDeptDescendantIndexes(param.getId(), WebUtil.filterDeptType()).getData();
List<String> deptCode = data.stream().map(DeptDTO::getCode).collect(Collectors.toList());
return this.baseMapper.selectPPVPermeability(deptCode);
}
@Override
public List<PVCapacity.Absorptive> getAbsorptiveCapacity(StatisticsBizBaseParam param) {
List<PVCapacity.Absorptive> info=new ArrayList<>();
List<DeptDTO> data = deptFeignClient.getDeptDescendantIndexes(param.getId(), WebUtil.filterDeptType()).getData();
List<String> deptCode = data.stream().map(DeptDTO::getCode).collect(Collectors.toList());
//获取所有的数据信息
List<PVCapacity.Absorptive> list= this.baseMapper.selectAbsorptiveCapacity(deptCode);
List<DeptLevelVO> deptLevelVOList = DeptUtil.getDeptLevelVOList(data, param.getId());
PVCapacity.Absorptive absorptive;
for (DeptLevelVO deptLevelVO : deptLevelVOList) {
absorptive=new PVCapacity.Absorptive();
absorptive.setOrg(deptLevelVO.getName());
if(CollUtil.isNotEmpty(list)){
List<String> subsetDept= deptLevelVO.getDeptList().stream().map(DeptLevelVO::getCode).collect(Collectors.toList());
List<PVCapacity.Absorptive> collect = list.stream().filter(x -> x.getOrg().equals(deptLevelVO.getCode()) ||
subsetDept.contains(x.getOrg())).collect(Collectors.toList());
absorptive.setCapacity(NumberUtil.round(collect.stream().mapToDouble(PVCapacity.Absorptive::getCapacity).sum(),2).doubleValue());
absorptive.setConsumption(NumberUtil.round(collect.stream().mapToDouble(PVCapacity.Absorptive::getConsumption).sum(),2).doubleValue());
}else{
absorptive.setCapacity(0.0);
absorptive.setConsumption(0.0);
}
info.add(absorptive);
}
return info;
}
/** /**
* 名称重复校验 * 名称重复校验
*/ */

View File

@@ -35,4 +35,11 @@ public class PollutionLineDTO {
@ApiModelProperty("数据") @ApiModelProperty("数据")
private Double data = -1.0; private Double data = -1.0;
@Data
public static class PVPollution extends PollutionLineDTO{
@ApiModelProperty("变电站电压等级")
private String powerVoltageLevel;
}
} }

View File

@@ -299,6 +299,9 @@ public class TransientServiceImpl implements TransientService {
} }
// 获取按终端分类的监测点索引集合 // 获取按终端分类的监测点索引集合
List<String> lineList = generalDeviceDTOList.stream().flatMap(dto -> dto.getLineIndexes().stream()).collect(Collectors.toList()); List<String> lineList = generalDeviceDTOList.stream().flatMap(dto -> dto.getLineIndexes().stream()).collect(Collectors.toList());
if(CollUtil.isEmpty(lineList)){
return new Page<>();
}
List<AreaLineInfoVO> lineInfoVOList = lineFeignClient.getBaseLineAreaInfo(lineList).getData(); List<AreaLineInfoVO> lineInfoVOList = lineFeignClient.getBaseLineAreaInfo(lineList).getData();
List<AreaLineInfoVO> filteredLines = lineInfoVOList.stream().filter(item -> filterSearchValue(item, transientParam.getSearchValue())).collect(Collectors.toList()); List<AreaLineInfoVO> filteredLines = lineInfoVOList.stream().filter(item -> filterSearchValue(item, transientParam.getSearchValue())).collect(Collectors.toList());
List<String> lines = filteredLines.stream().map(AreaLineInfoVO::getLineId).collect(Collectors.toList()); List<String> lines = filteredLines.stream().map(AreaLineInfoVO::getLineId).collect(Collectors.toList());

View File

@@ -0,0 +1,20 @@
package com.njcn.harmonic.pojo.param;
import com.njcn.common.pojo.param.StatisticsBizBaseParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 冀北自定义条数
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PVOverviewParam extends StatisticsBizBaseParam {
@ApiModelProperty(name = "sum", value = "自定义条数")
private Integer sum;
@ApiModelProperty(name = "steadyStatis", value = "稳态指标类型")
private String steadyStatis;
}

View File

@@ -27,20 +27,20 @@
<groupId>com.njcn</groupId> <groupId>com.njcn</groupId>
<artifactId>common-web</artifactId> <artifactId>common-web</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
<exclusions> <!-- <exclusions>-->
<exclusion> <!-- <exclusion>-->
<groupId>org.apache.logging.log4j</groupId> <!-- <groupId>org.apache.logging.log4j</groupId>-->
<artifactId>log4j-to-slf4j</artifactId> <!-- <artifactId>log4j-to-slf4j</artifactId>-->
</exclusion> <!-- </exclusion>-->
<exclusion> <!-- <exclusion>-->
<groupId>org.slf4j</groupId> <!-- <groupId>org.slf4j</groupId>-->
<artifactId>jul-to-slf4j</artifactId> <!-- <artifactId>jul-to-slf4j</artifactId>-->
</exclusion> <!-- </exclusion>-->
<exclusion> <!-- <exclusion>-->
<groupId>ch.qos.logback</groupId> <!-- <groupId>ch.qos.logback</groupId>-->
<artifactId>logback-classic</artifactId> <!-- <artifactId>logback-classic</artifactId>-->
</exclusion> <!-- </exclusion>-->
</exclusions> <!-- </exclusions>-->
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.njcn</groupId> <groupId>com.njcn</groupId>

View File

@@ -0,0 +1,56 @@
package com.njcn.harmonic.controller.majornetwork;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.param.StatisticsBizBaseParam;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.device.pq.pojo.dto.PollutionLineDTO;
import com.njcn.harmonic.pojo.param.PVOverviewParam;
import com.njcn.harmonic.service.majornetwork.PVOverviewService;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
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;
/**
* @author wr
* @description
* @date 2023/5/10 9:25
*/
@RestController
@RequiredArgsConstructor
@Api(tags = "冀北分布式光伏-主网监测点")
@RequestMapping("/JbOverview")
public class PVOverviewController extends BaseController {
private final PVOverviewService pvOverviewService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getPVSynthesisCount")
@ApiOperation("冀北分布式光伏获取综合统计")
public HttpResult<List<Integer>> getPVSynthesisCount(@RequestBody StatisticsBizBaseParam param) {
String methodDescribe = getMethodDescribe("getPVSynthesisCount");
List<Integer> pvSynthesisCount = pvOverviewService.getPVSynthesisCount(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, pvSynthesisCount, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getPVPollution")
@ApiOperation("冀北分布式光伏获取污染指数统计")
public HttpResult<List<PollutionLineDTO.PVPollution>> getPVPollution(@RequestBody PVOverviewParam param) {
String methodDescribe = getMethodDescribe("getPVPollution");
List<PollutionLineDTO.PVPollution> pvPollution = pvOverviewService.getPVPollution(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, pvPollution, methodDescribe);
}
}

View File

@@ -0,0 +1,17 @@
package com.njcn.harmonic.mapper.majornetwork;
import com.njcn.common.pojo.param.StatisticsBizBaseParam;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @version 1.0.0
* @author: wr
* @date: 2023/05/10
*/
public interface PVOverviewMapper {
List<Integer> selectPVSynthesisCount(@Param("param") StatisticsBizBaseParam param,
@Param("id") List<String> id);
}

View File

@@ -0,0 +1,69 @@
<?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.majornetwork.PVOverviewMapper">
<select id="selectPVSynthesisCount" resultType="java.lang.Integer">
SELECT
count(*)
FROM
(
SELECT
measurement_point_id,
data_date,
sum( is_v_dev_warn + is_freq_warn + is_unbalance_warn + is_v_warn + is_flicker_warn + is_sag_warn + is_interrupt_warn + is_swell_warn ) AS num
FROM
r_mp_target_warn_d
<where>
is_effective = 1 AND is_warn = 1
<if test="param!=null and param.startTime != null and param.startTime !=''">
AND rmphd.data_date >= #{param.startTime} AND rmshd.data_date >= #{param.startTime}
</if>
<if test="param!=null and param.endTime != null and param.endTime != ''">
AND rmphd.data_date &lt;= #{param.endTime} AND rmshd.data_date &lt;= #{param.endTime}
</if>
<if test="id != null and id.size > 0">
AND measurement_point_id IN
<foreach collection='id' item='item' index="index" open='(' separator=',' close=')'>
#{item}
</foreach>
</if>
</where>
GROUP BY
measurement_point_id,
data_date
HAVING
num > 1
) x UNION ALL
SELECT
count(*)
FROM
(
SELECT
measurement_point_id,
data_date,
sum( is_v_dev_warn + is_freq_warn + is_unbalance_warn + is_v_warn + is_flicker_warn + is_sag_warn + is_interrupt_warn + is_swell_warn ) AS num
FROM
r_mp_target_warn_d
<where>
is_effective = 1 AND is_harmonic = 1
<if test="param!=null and param.startTime != null and param.startTime !=''">
AND rmphd.data_date >= #{param.startTime} AND rmshd.data_date >= #{param.startTime}
</if>
<if test="param!=null and param.endTime != null and param.endTime != ''">
AND rmphd.data_date &lt;= #{param.endTime} AND rmshd.data_date &lt;= #{param.endTime}
</if>
<if test="id != null and id.size > 0">
AND measurement_point_id IN
<foreach collection='id' item='item' index="index" open='(' separator=',' close=')'>
#{item}
</foreach>
</if>
</where>
GROUP BY
measurement_point_id,
data_date
HAVING
num > 1
) x
</select>
</mapper>

View File

@@ -17,15 +17,15 @@
</resultMap> </resultMap>
<select id="selectInfoList" resultType="com.njcn.harmonic.pojo.po.RStatHarmonicM"> <select id="selectInfoList" resultType="com.njcn.harmonic.pojo.po.RStatHarmonicM">
SELECT SELECT
measurement_type_class, measurement_type_class,
harmonic_type, harmonic_type,
sum(over_limit_measurement_average)/count(*) as overLimitMeasurementAverage , ROUND( sum( over_limit_measurement_average )/ count(*), 2 ) AS overLimitMeasurementAverage,
sum(over_limit_measurement_accrued) as overLimitMeasurementAccrued, sum( over_limit_measurement_accrued ) AS overLimitMeasurementAccrued,
sum(over_Day) as overDay, sum( over_Day ) AS overDay,
sum(over_limit_measurement_ratio_average)/count(*) as overLimitMeasurementRatioAverage, ROUND( sum( over_limit_measurement_ratio_average )/ count(*), 2 ) AS overLimitMeasurementRatioAverage,
sum(over_limit_measurement_ratio_accrued) as overLimitMeasurementRatioAccrued sum( over_limit_measurement_ratio_accrued ) AS overLimitMeasurementRatioAccrued
FROM FROM
r_stat_harmonic_m r_stat_harmonic_m
<where> <where>
and data_Type=#{dataType} and data_Type=#{dataType}
<if test="param != null and param.ids != null and param.ids.size > 0"> <if test="param != null and param.ids != null and param.ids.size > 0">

View File

@@ -19,13 +19,13 @@
SELECT SELECT
measurement_type_class, measurement_type_class,
harmonic_type, harmonic_type,
sum(over_limit_measurement_average)/count(*) as overLimitMeasurementAverage , ROUND( sum( over_limit_measurement_average )/ count(*), 2 ) AS overLimitMeasurementAverage,
sum(over_limit_measurement_accrued) as overLimitMeasurementAccrued, sum( over_limit_measurement_accrued ) AS overLimitMeasurementAccrued,
sum(average_over_day)/count(*) as averageOverDay, ROUND( sum( average_over_day )/ count(*), 2 ) AS averageOverDay,
sum(over_limit_measurement_ratio_average)/count(*) as overLimitMeasurementRatioAverage, ROUND( sum( over_limit_measurement_ratio_average )/ count(*), 2 ) AS overLimitMeasurementRatioAverage,
sum(over_limit_measurement_ratio_accrued) as overLimitMeasurementRatioAccrued sum( over_limit_measurement_ratio_accrued ) AS overLimitMeasurementRatioAccrued
FROM FROM
r_stat_harmonic_q r_stat_harmonic_q
<where> <where>
and data_Type=#{dataType} and data_Type=#{dataType}
<if test="param != null and param.ids != null and param.ids.size > 0"> <if test="param != null and param.ids != null and param.ids.size > 0">

View File

@@ -21,11 +21,11 @@
measurement_type_class, measurement_type_class,
harmonic_type, harmonic_type,
voltage_type, voltage_type,
sum(over_limit_measurement_average)/count(*) as overLimitMeasurementAverage , ROUND( sum( over_limit_measurement_average )/ count(*), 2 ) AS overLimitMeasurementAverage,
sum(over_limit_measurement_accrued) as overLimitMeasurementAccrued, sum( over_limit_measurement_accrued ) AS overLimitMeasurementAccrued,
sum(over_Day) as overDay, sum( over_Day ) AS overDay,
sum(over_limit_measurement_ratio_average)/count(*) as overLimitMeasurementRatioAverage, ROUND( sum( over_limit_measurement_ratio_average )/ count(*), 2 ) AS overLimitMeasurementRatioAverage,
sum(over_limit_measurement_ratio_accrued) as overLimitMeasurementRatioAccrued sum( over_limit_measurement_ratio_accrued ) AS overLimitMeasurementRatioAccrued
FROM FROM
r_stat_harmonic_voltage_m r_stat_harmonic_voltage_m
<where> <where>

View File

@@ -19,11 +19,11 @@
SELECT SELECT
measurement_type_class, measurement_type_class,
harmonic_type, harmonic_type,
sum(over_limit_measurement_average)/count(*) as overLimitMeasurementAverage , ROUND( sum( over_limit_measurement_average )/ count(*), 2 ) AS overLimitMeasurementAverage,
sum(over_limit_measurement_accrued) as overLimitMeasurementAccrued, sum( over_limit_measurement_accrued ) AS overLimitMeasurementAccrued,
sum(average_over_day)/count(*) as averageOverDay, ROUND( sum( average_over_day )/ count(*), 2 ) AS averageOverDay,
sum(over_limit_measurement_ratio_average)/count(*) as overLimitMeasurementRatioAverage, ROUND( sum( over_limit_measurement_ratio_average )/ count(*), 2 ) AS overLimitMeasurementRatioAverage,
sum(over_limit_measurement_ratio_accrued) as overLimitMeasurementRatioAccrued sum( over_limit_measurement_ratio_accrued ) AS overLimitMeasurementRatioAccrued
FROM FROM
r_stat_harmonic_y r_stat_harmonic_y
<where> <where>

View File

@@ -24,15 +24,15 @@
org_no, org_no,
load_type, load_type,
v_average, v_average,
v_count/effective_measurement as vAccrued, ROUND( v_count / effective_measurement, 2 ) AS vAccrued,
i_average, i_average,
i_count/effective_measurement as iAccrued, ROUND( i_count / effective_measurement, 2 ) AS iAccrued,
unbalance_average, unbalance_average,
unbalance_count/effective_measurement as unbalanceAccrued, ROUND( unbalance_count / effective_measurement, 2 ) AS unbalanceAccrued,
i_neg_average, i_neg_average,
i_neg_count/effective_measurement as iNegAccrued, ROUND( i_neg_count / effective_measurement, 2 ) AS iNegAccrued,
flicker_average, flicker_average,
flicker_count/effective_measurement as flickerAccrued ROUND( flicker_count / effective_measurement, 2 ) AS flickerAccrued
from from
r_stat_load_type_m r_stat_load_type_m
<where> <where>

View File

@@ -24,15 +24,15 @@
org_no, org_no,
load_type, load_type,
v_average, v_average,
v_count/effective_measurement as vAccrued, ROUND( v_count / effective_measurement, 2 ) AS vAccrued,
i_average, i_average,
i_count/effective_measurement as iAccrued, ROUND( i_count / effective_measurement, 2 ) AS iAccrued,
unbalance_average, unbalance_average,
unbalance_count/effective_measurement as unbalanceAccrued, ROUND( unbalance_count / effective_measurement, 2 ) AS unbalanceAccrued,
i_neg_average, i_neg_average,
i_neg_count/effective_measurement as iNegAccrued, ROUND( i_neg_count / effective_measurement, 2 ) AS iNegAccrued,
flicker_average, flicker_average,
flicker_count/effective_measurement as flickerAccrued ROUND( flicker_count / effective_measurement, 2 ) AS flickerAccrued
from from
r_stat_load_type_q r_stat_load_type_q
<where> <where>

View File

@@ -24,15 +24,15 @@
org_no, org_no,
load_type, load_type,
v_average, v_average,
v_count/effective_measurement as vAccrued, ROUND( v_count / effective_measurement, 2 ) AS vAccrued,
i_average, i_average,
i_count/effective_measurement as iAccrued, ROUND( i_count / effective_measurement, 2 ) AS iAccrued,
unbalance_average, unbalance_average,
unbalance_count/effective_measurement as unbalanceAccrued, ROUND( unbalance_count / effective_measurement, 2 ) AS unbalanceAccrued,
i_neg_average, i_neg_average,
i_neg_count/effective_measurement as iNegAccrued, ROUND( i_neg_count / effective_measurement, 2 ) AS iNegAccrued,
flicker_average, flicker_average,
flicker_count/effective_measurement as flickerAccrued ROUND( flicker_count / effective_measurement, 2 ) AS flickerAccrued
from from
r_stat_load_type_y r_stat_load_type_y
<where> <where>

View File

@@ -84,14 +84,14 @@
SELECT SELECT
substation_id, substation_id,
effective_measurement_accrued, effective_measurement_accrued,
freq_over_day / freq_count as 'freqAverageOverDay', ROUND(freq_over_day / freq_count,2) AS 'freqAverageOverDay',
v_dev_over_day / v_dev_count as 'vDevAverageOverDay', ROUND(v_dev_over_day / v_dev_count,2) AS 'vDevAverageOverDay',
v_over_day / v_count as 'vAverageOverDay', ROUND(v_over_day / v_count,2) AS 'vAverageOverDay',
i_over_day / i_count as 'iAverageOverDay', ROUND(i_over_day / i_count,2) AS 'iAverageOverDay',
unbalance_over_day / unbalance_count as 'unbalanceAverageOverDay', ROUND(unbalance_over_day / unbalance_count,2) AS 'unbalanceAverageOverDay',
i_neg_over_day / i_neg_count as 'iNegAverageOverDay', ROUND(i_neg_over_day / i_neg_count,2) AS 'iNegAverageOverDay',
flicker_over_day / flicker_count as 'flickerAverageOverDay', ROUND(flicker_over_day / flicker_count,2) AS 'flickerAverageOverDay',
inuharm_over_day / inuharm_count as 'inuharmAverageOverDay' ROUND(inuharm_over_day / inuharm_count,2) AS 'inuharmAverageOverDay'
FROM FROM
r_stat_substation_m r_stat_substation_m
<where> <where>

View File

@@ -0,0 +1,30 @@
package com.njcn.harmonic.service.majornetwork;
import com.njcn.common.pojo.param.StatisticsBizBaseParam;
import com.njcn.device.pq.pojo.dto.PollutionLineDTO;
import com.njcn.harmonic.pojo.param.PVOverviewParam;
import java.util.List;
/**
* @author wr
* @description
* @date 2023/5/10 9:30
*/
public interface PVOverviewService {
/**
* 冀北分布式光伏获取综合统计
* @param param
* @return
*/
List<Integer> getPVSynthesisCount(StatisticsBizBaseParam param);
/**
* 冀北分布式光伏获取污染指数统计
* @param param
* @return
*/
List<PollutionLineDTO.PVPollution> getPVPollution(PVOverviewParam param);
}

View File

@@ -0,0 +1,117 @@
package com.njcn.harmonic.service.majornetwork.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.njcn.common.pojo.dto.SimpleDTO;
import com.njcn.common.pojo.param.StatisticsBizBaseParam;
import com.njcn.device.biz.commApi.DeptLineGeneralClient;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenDTO;
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
import com.njcn.device.pms.api.PmsGeneralDeviceInfoClient;
import com.njcn.device.pms.api.StatationStatClient;
import com.njcn.device.pms.pojo.dto.PmsGeneralDeviceDTO;
import com.njcn.device.pms.pojo.dto.PmsStatationStatInfoDTO;
import com.njcn.device.pms.pojo.param.PmsDeviceInfoParam;
import com.njcn.device.pms.pojo.param.PmsStatationStatInfoParam;
import com.njcn.device.pq.pojo.dto.PollutionLineDTO;
import com.njcn.harmonic.mapper.RStatPollutionSubstationDPOMapper;
import com.njcn.harmonic.mapper.majornetwork.PVOverviewMapper;
import com.njcn.harmonic.pojo.param.PVOverviewParam;
import com.njcn.harmonic.pojo.po.RStatPollutionSubstationDPO;
import com.njcn.harmonic.service.majornetwork.PVOverviewService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author wr
* @description
* @date 2023/5/10 9:30
*/
@Service
@RequiredArgsConstructor
public class PVOverviewServiceImpl implements PVOverviewService {
private final PVOverviewMapper pvOverviewMapper;
private final DeptLineGeneralClient deptLineGeneralClient;
private final RStatPollutionSubstationDPOMapper pollutionSubstationDPOMapper;
private final StatationStatClient statationStatClient;
private final PmsGeneralDeviceInfoClient pmsGeneralDeviceInfoClient;
@Override
public List<Integer> getPVSynthesisCount(StatisticsBizBaseParam param) {
DeptGetLineParam deptGetLineParam=new DeptGetLineParam();
deptGetLineParam.setDeptId(param.getId());
List<DeptGetChildrenDTO> data = deptLineGeneralClient.deptGetLineList(deptGetLineParam).getData();
if(CollUtil.isNotEmpty(data)){
List<String> monitorIds = data.stream().flatMap(dto -> dto.getLineIds().stream()).collect(Collectors.toList());
return pvOverviewMapper.selectPVSynthesisCount(param, monitorIds);
}
return new ArrayList<Integer>(2){{add(0);add(0);}};
}
@Override
public List<PollutionLineDTO.PVPollution> getPVPollution(PVOverviewParam param) {
List<PollutionLineDTO.PVPollution> info=new ArrayList<>();
//查询主网台账信息获取遍变电站信息
PmsDeviceInfoParam pmsDeviceInfoParam = new PmsDeviceInfoParam();
pmsDeviceInfoParam.setStatisticalType(new SimpleDTO());
pmsDeviceInfoParam.setDeptIndex(param.getId());
List<PmsGeneralDeviceDTO> data = pmsGeneralDeviceInfoClient.getPmsDeviceInfoWithInOrg(pmsDeviceInfoParam).getData();
List<String> powers= data.stream().flatMap(dto -> dto.getPowerrIdList().stream()).collect(Collectors.toList());
if(CollUtil.isEmpty(powers)){
return info;
}
//数据查询
List<RStatPollutionSubstationDPO> substationDPOS = pollutionSubstationDPOMapper.selectList(new LambdaQueryWrapper<RStatPollutionSubstationDPO>()
.in(RStatPollutionSubstationDPO::getSubstationId,powers)
.eq(StrUtil.isNotBlank(param.getSteadyStatis()), RStatPollutionSubstationDPO::getPollutionType, param.getSteadyStatis())
.ge(StrUtil.isNotBlank(param.getStartTime()), RStatPollutionSubstationDPO::getDataDate,DateUtil.beginOfDay(DateUtil.parse(param.getStartTime())))
.le(StrUtil.isNotBlank(param.getEndTime()), RStatPollutionSubstationDPO::getDataDate, DateUtil.endOfDay(DateUtil.parse(param.getEndTime())))
.orderByDesc(RStatPollutionSubstationDPO::getValue)
.last("limit "+param.getSum()));
if(CollUtil.isNotEmpty(substationDPOS)){
List<String> powerIds = substationDPOS.stream().map(RStatPollutionSubstationDPO::getSubstationId).collect(Collectors.toList());
PmsStatationStatInfoParam statInfoParam=new PmsStatationStatInfoParam();
statInfoParam.setPowerIds(powerIds);
List<PmsStatationStatInfoDTO> powerList = statationStatClient.getStatationStatInfo(statInfoParam).getData();
if(CollUtil.isNotEmpty(powerList)){
Map<String, PmsStatationStatInfoDTO> powerDetail = powerList.stream().collect(Collectors.toMap(PmsStatationStatInfoDTO::getPowerId, Function.identity(), (key1, key2) -> key1));
for (RStatPollutionSubstationDPO substationDPO : substationDPOS) {
if(powerDetail.containsKey(substationDPO.getSubstationId())){
PmsStatationStatInfoDTO power = powerDetail.get((substationDPO.getSubstationId()));
info.add (getPollutionLineDTO(substationDPO,power)) ;
}
}
}
}
return info;
}
/**
* 属性赋值
* @param substationDPO
* @param power
* @return
*/
public PollutionLineDTO.PVPollution getPollutionLineDTO(RStatPollutionSubstationDPO substationDPO,PmsStatationStatInfoDTO power) {
PollutionLineDTO.PVPollution dto=new PollutionLineDTO.PVPollution();
dto.setId(power.getMonitorId());
dto.setName(power.getMonitorName());
dto.setPowerCompany(power.getOrgName());
dto.setSubstation(power.getPowerName());
dto.setSubstationId(power.getPowerId());
dto.setBusBar(power.getGeneratrixName());
dto.setPowerVoltageLevel(power.getPowerVoltageLevel());
dto.setData(substationDPO.getValue());
return dto;
}
}