1.新能源场站统计

This commit is contained in:
wr
2024-04-01 09:34:18 +08:00
parent 0275cba0ed
commit b834fc8a40
9 changed files with 169 additions and 17 deletions

View File

@@ -27,9 +27,9 @@ public class MonitorEnergy {
private String objType;
@ApiModelProperty(value = "接入线路电压等级为110kV及以上变电站数量(座)")
private String num;
private Long num;
@ApiModelProperty(value = "接入线路电压等级为110kV及以上变电站数量(座)")
@ApiModelProperty(value = "各类电压等级新能源场站监测信息")
List<VoltageInfo> voltageInfo;
}
@@ -37,22 +37,22 @@ public class MonitorEnergy {
public static class VoltageInfo {
@ApiModelProperty(value = "已监测数量")
private Integer monitorNum;
private Long monitorNum;
@ApiModelProperty(value = "新能源场站总数")
private Integer totalNum;
private Long totalNum;
@ApiModelProperty(value = "监测率")
private Float monitorRate;
private Double monitorRate;
@ApiModelProperty(value = "装置数量(台)")
private Integer deviceNum;
private Long deviceNum;
@ApiModelProperty(value = "覆盖变电站数量(座)")
private Integer substationsNum;
private Long substationsNum;
@ApiModelProperty(value = "电站覆盖率(%)")
private Float substationsRate;
private Double substationsRate;
}

View File

@@ -5,6 +5,7 @@ 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.pms.pojo.vo.gw.MonitorEnergy;
import com.njcn.device.pms.service.gwPush.MonitorStatisticsService;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
@@ -34,5 +35,12 @@ public class MonitorStatisticsController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, gwMonitorStatistics, methodDescribe);
}
@PostMapping("/energy")
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@ApiOperation("新能源场站监测率")
public HttpResult<List<MonitorEnergy>> energy(String deptId){
String methodDescribe = getMethodDescribe("energy");
List<MonitorEnergy> gwMonitorEnergy = monitorStatisticsService.getGwMonitorEnergy(deptId);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, gwMonitorEnergy, methodDescribe);
}
}

View File

@@ -11,6 +11,7 @@ import com.njcn.common.utils.HttpResultUtil;
import com.njcn.device.pms.pojo.param.NewEnergyQueryParam;
import com.njcn.device.pms.pojo.po.PmsNewEnergy;
import com.njcn.device.pms.service.gwPush.IPmsNewEnergyService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
@@ -31,6 +32,7 @@ import java.util.List;
*/
@RestController
@RequestMapping("/pmsNewEnergy")
@Api(tags = "新能源场站信息管理")
@RequiredArgsConstructor
public class PmsNewEnergyController extends BaseController {
@@ -48,9 +50,9 @@ public class PmsNewEnergyController extends BaseController {
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("getNewEnergySelectList")
@ApiOperation("查询场站台账所有信息")
public HttpResult<List<PmsNewEnergy>> getNewEnergySelectList(String orgId){
public HttpResult<List<PmsNewEnergy>> getNewEnergySelectList(String orgId,String type){
String methodDescribe = getMethodDescribe("getNewEnergySelectList");
List<PmsNewEnergy> res = newEnergyService.getNewEnergySelectList(orgId);
List<PmsNewEnergy> res = newEnergyService.getNewEnergySelectList(orgId,type);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,res,methodDescribe);
}

View File

@@ -106,5 +106,6 @@ public interface MonitorMapper extends BaseMapper<Monitor> {
Map<String, String> getCustomDetailByLineId(@Param("lineId")String lineId);
List<Monitor> selectMonitorAndNewEnergy(@Param("orgIds")List<String> orgIds,
@Param("objIds")List<String> objIds);
}

View File

@@ -232,5 +232,27 @@
left join sys_dict_data dic on monitor.Voltage_Level = dic.id
WHERE monitor.id = #{lineId}
</select>
<select id="selectMonitorAndNewEnergy" resultType="com.njcn.device.pms.pojo.po.Monitor">
SELECT
pm.*
FROM
pms_monitor pm
INNER JOIN pms_new_energy pne ON pne.Id = pm.traction_Id
<where>
<if test="orgIds != null and orgIds.size() != 0">
and pm.Org_Id IN
<foreach collection="orgIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="objIds != null and objIds.size() != 0">
and pm.Obj_Type IN
<foreach collection="objIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
</where>
</select>
</mapper>

View File

@@ -29,7 +29,7 @@ public interface IPmsNewEnergyService extends IService<PmsNewEnergy> {
* @param
* @return
*/
List<PmsNewEnergy> getNewEnergySelectList(String orgId);
List<PmsNewEnergy> getNewEnergySelectList(String orgId,String type);
/**

View File

@@ -15,4 +15,11 @@ public interface MonitorStatisticsService {
* @Date: 2024/3/22 9:49
*/
List<List<String>> getGwMonitorStatistics(String deptId);
/**
* @Description: 国网上送新能源场站统计
* @Author: wr
* @Date: 2024/3/22 9:49
*/
List<MonitorEnergy> getGwMonitorEnergy(String deptId);
}

View File

@@ -1,23 +1,36 @@
package com.njcn.device.pms.service.gwPush.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.device.biz.pojo.dto.DeptGetBase;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
import com.njcn.device.pms.mapper.majornetwork.MonitorMapper;
import com.njcn.device.pms.pojo.po.Monitor;
import com.njcn.device.pms.pojo.po.PmsNewEnergy;
import com.njcn.device.pms.pojo.vo.gw.MonitorEnergy;
import com.njcn.device.pms.service.gwPush.IPmsNewEnergyService;
import com.njcn.device.pms.service.gwPush.MonitorStatisticsService;
import com.njcn.device.pms.service.ledgerManger.CommTerminalService;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.api.DictTreeFeignClient;
import com.njcn.system.enums.DicDataTypeEnum;
import com.njcn.system.enums.DicTreeEnum;
import com.njcn.system.pojo.po.DictData;
import com.njcn.system.pojo.po.SysDicTreePO;
import com.njcn.system.pojo.vo.DictTreeVO;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept;
import com.njcn.user.pojo.dto.DeptDTO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* pqs
@@ -31,7 +44,10 @@ public class MonitorStatisticsServiceImpl implements MonitorStatisticsService {
private final CommTerminalService commTerminalService;
private final DictTreeFeignClient dictTreeFeignClient;
private final IPmsNewEnergyService pmsNewEnergyService;
private final MonitorMapper monitorIdList;
private final DeptFeignClient deptFeignClient;
private final DicDataFeignClient dicDataFeignClient;
@Override
public List<List<String>> getGwMonitorStatistics(String deptId) {
List<List<String>> info = new ArrayList<>();
@@ -90,6 +106,86 @@ public class MonitorStatisticsServiceImpl implements MonitorStatisticsService {
return info;
}
@Override
public List<MonitorEnergy> getGwMonitorEnergy(String deptId) {
List<DictData> data = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_VOLTAGE.getCode()).getData();
List<List<String>> voltage=new ArrayList<>();
//220kv电压等级
List<String> than220kv = data.stream().filter(x -> Double.valueOf(x.getValue()) == 220).map(DictData::getId).collect(Collectors.toList());
//110kv电压等级
List<String> than110kv = data.stream().filter(x -> Double.valueOf(x.getValue()) == 110).map(DictData::getId).collect(Collectors.toList());
//大于110kv电压等级
List<String> greaterThan110kv = data.stream().filter(x -> Double.valueOf(x.getValue()) >= 110).map(DictData::getId).collect(Collectors.toList());
//小于于110kv电压等级
List<String> lessThan110kv = data.stream().filter(x -> Double.valueOf(x.getValue()) < 110).map(DictData::getId).collect(Collectors.toList());
voltage.add(than220kv);
voltage.add(than110kv);
voltage.add(lessThan110kv);
List<String> totalVoltage=new ArrayList<>();
totalVoltage.addAll(than220kv);
totalVoltage.addAll(than110kv);
totalVoltage.addAll(lessThan110kv);
voltage.add(totalVoltage);
List<MonitorEnergy> monitorEnergyList = new ArrayList<>();
//根据部门进行分组
List<DeptGetBase> deptChildrenByParent = getDeptChildrenByParent(deptId);
MonitorEnergy monitorEnergy;
List<MonitorEnergy.Details> list;
//查询所有一级树字典
List<DictTreeVO> dictTreeVOS = new ArrayList<>();
DictTreeVO powerStation = dictTreeFeignClient.queryByCode(DicTreeEnum.Power_Station.getCode()).getData();
DictTreeVO windFarms = dictTreeFeignClient.queryByCode(DicTreeEnum.Wind_Farms.getCode()).getData();
dictTreeVOS.add(powerStation);
dictTreeVOS.add(windFarms);
for (DeptGetBase pmsGeneralDeviceDTO : deptChildrenByParent) {
monitorEnergy = new MonitorEnergy();
list=new ArrayList<>();
monitorEnergy.setOrgName(pmsGeneralDeviceDTO.getUnitName());
List<Monitor> monitors = monitorIdList.selectMonitorAndNewEnergy(pmsGeneralDeviceDTO.getUnitChildrenList(), Arrays.asList(powerStation.getId(), windFarms.getId()));
//获取场站台账信息
List<PmsNewEnergy> newEnergies = pmsNewEnergyService.list(new LambdaQueryWrapper<PmsNewEnergy>()
.in(PmsNewEnergy::getObjType, Arrays.asList(powerStation.getId(), windFarms.getId()))
.in(PmsNewEnergy::getOrgId, pmsGeneralDeviceDTO.getUnitChildrenList())
);
for (DictTreeVO dictTreeVO : dictTreeVOS) {
List<Monitor> powerStationMonitors = monitors.stream().filter(x -> x.getObjType().equals(dictTreeVO.getId())).collect(Collectors.toList());
List<PmsNewEnergy> powerStationEnergies = newEnergies.stream().filter(x -> x.getObjType().equals(dictTreeVO.getId())).collect(Collectors.toList());
MonitorEnergy.Details details = new MonitorEnergy.Details();
details.setObjType(dictTreeVO.getName());
long count = powerStationMonitors.stream().filter(x -> greaterThan110kv.contains(x.getVoltageLevel())).map(Monitor::getPowerrId).distinct().count();
details.setNum(count);
List<MonitorEnergy.VoltageInfo> voltageInfos = new ArrayList<>();
for (List<String> strings : voltage) {
MonitorEnergy.VoltageInfo info=new MonitorEnergy.VoltageInfo();
long monitorNum = powerStationMonitors.stream().filter(x -> strings.contains(x.getVoltageLevel())).map(Monitor::getTractionId).distinct().count();
info.setMonitorNum(monitorNum);
long totalNum = powerStationEnergies.stream().filter(x -> strings.contains(x.getVoltageLevel())).map(PmsNewEnergy::getId).distinct().count();
info.setTotalNum(totalNum);
info.setMonitorRate(totalNum==0?0:NumberUtil.div(monitorNum*100.0, totalNum, 2));
long deviceNum = powerStationMonitors.stream().filter(x -> strings.contains(x.getVoltageLevel())).map(Monitor::getTerminalId).distinct().count();
info.setDeviceNum(deviceNum);
long SubsNum = powerStationMonitors.stream().filter(x -> strings.contains(x.getVoltageLevel())).map(Monitor::getPowerrId).distinct().count();
long SubstationsNum = powerStationEnergies.stream().filter(x -> strings.contains(x.getVoltageLevel())).map(PmsNewEnergy::getPowerrName).distinct().count();
info.setSubstationsNum(SubstationsNum);
info.setSubstationsRate(SubstationsNum==0?0:NumberUtil.div(SubsNum*100.0, SubstationsNum, 2));
voltageInfos.add(info);
}
details.setVoltageInfo(voltageInfos);
list.add(details);
monitorEnergy.setInfo(list);
}
monitorEnergyList.add(monitorEnergy);
}
return monitorEnergyList;
}
private List<String> addmetWorkList(Map<String, List<String>> mapSourceLoad, List<LineDevGetDTO> upToGridList, List<String> line) {
long total = 0;
for (String s : mapSourceLoad.keySet()) {
@@ -138,6 +234,21 @@ public class MonitorStatisticsServiceImpl implements MonitorStatisticsService {
}
return mapKey;
}
public List<DeptGetBase> getDeptChildrenByParent(String deptId) {
List<DeptGetBase> result = new ArrayList<>();
List<DeptDTO> deptDTOList = deptFeignClient.getDepSonDetailByDeptId(deptId).getData();
List<DeptDTO> deptList = deptFeignClient.getDeptDescendantIndexes(deptId, Stream.of(0, 1).collect(Collectors.toList())).getData();
deptDTOList.forEach(it -> {
DeptGetBase deptGetBase = new DeptGetBase();
deptGetBase.setUnitId(it.getCode());
deptGetBase.setUnitName(it.getName());
List<String> deptChildren = deptList.stream().filter(deptDTO -> deptDTO.getPids().contains(it.getId())).map(DeptDTO::getCode).collect(Collectors.toList());
deptChildren.add(it.getCode());
deptGetBase.setUnitChildrenList(deptChildren);
deptGetBase.setDeptLevel(it.getPids().split(StrUtil.COMMA).length);
result.add(deptGetBase);
});
return result;
}
}

View File

@@ -63,9 +63,10 @@ public class PmsNewEnergyServiceImpl extends ServiceImpl<PmsNewEnergyMapper, Pms
}
@Override
public List<PmsNewEnergy> getNewEnergySelectList(String orgId) {
public List<PmsNewEnergy> getNewEnergySelectList(String orgId,String type) {
LambdaQueryWrapper<PmsNewEnergy> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(PmsNewEnergy::getState,DataStateEnum.ENABLE.getCode());
lambdaQueryWrapper.eq(PmsNewEnergy::getObjType,type);
if(StrUtil.isNotBlank(orgId)){
List<String> deptCodes = deptFeignClient.getDepSonSelfCodetByDeptId(orgId).getData();
lambdaQueryWrapper.in(PmsNewEnergy::getOrgId,deptCodes);