冀北电网一张图,变电站、终端和监测点信息接口编写

This commit is contained in:
wr
2024-04-23 18:16:12 +08:00
parent 9492365d0d
commit 02e1b8d42a
37 changed files with 1412 additions and 26 deletions

View File

@@ -15,7 +15,16 @@ import java.util.List;
@Data
public class StatSubstationBizBaseParam extends StatisticsBizBaseParam {
@ApiModelProperty(value = "ids集合",required = true)
List<String> ids;
@ApiModelProperty(value = "ids集合", required = true)
private List<String> ids;
@ApiModelProperty(value = "是否是国网监测点信息", required = true)
private Integer isUpToGrid;
@ApiModelProperty("页码")
private Integer pageNum;
@ApiModelProperty("页面尺寸")
private Integer pageSize;
}

View File

@@ -0,0 +1,78 @@
package com.njcn.harmonic.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.device.pq.pojo.dto.PollutionGridDiagramDTO;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.vo.GridDiagramVO;
import com.njcn.harmonic.pojo.param.StatSubstationBizBaseParam;
import com.njcn.harmonic.service.IRMpTargetWarnDService;
import com.njcn.harmonic.service.PollutionSubstationService;
import com.njcn.harmonic.service.majornetwork.RStatLimitService;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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.util.List;
@Validated
@Slf4j
@RestController
@RequestMapping("/gridDiagram")
@Api(tags = "冀北电网一张图信息展示")
@AllArgsConstructor
public class GridDiagramHarmController extends BaseController {
private final IRMpTargetWarnDService irMpTargetWarnDService;
private final PollutionSubstationService pollutionSubstationService;
private final RStatLimitService rStatLimitService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getSubLineGiveAnAlarm")
@ApiOperation("区域变电站下告警监测点数量")
@ApiImplicitParam(name = "param", value = "变电站下监测点是否超标", required = true)
public HttpResult<GridDiagramVO> getSubLineGiveAnAlarm(@RequestBody StatSubstationBizBaseParam param) {
String methodDescribe = getMethodDescribe("getSubLineGiveAnAlarm");
GridDiagramVO subLineGiveAnAlarm = irMpTargetWarnDService.getSubLineGiveAnAlarm(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, subLineGiveAnAlarm, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getPollutionAlarmData")
@ApiOperation("变电站污染告警占比")
public HttpResult<GridDiagramVO> getPollutionAlarmData(@RequestBody StatSubstationBizBaseParam param) {
String methodDescribe = getMethodDescribe("getSubLineGiveAnAlarm");
GridDiagramVO subLineGiveAnAlarm = pollutionSubstationService.getPollutionAlarmData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, subLineGiveAnAlarm, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getPollutionAlarmPageData")
@ApiOperation("变电站详细列表")
public HttpResult<Page<PollutionGridDiagramDTO>> getPollutionAlarmPageData(@RequestBody StatSubstationBizBaseParam param) {
String methodDescribe = getMethodDescribe("getPollutionAlarmPageData");
Page<PollutionGridDiagramDTO> subLineGiveAnAlarm = pollutionSubstationService.getPollutionAlarmPageData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, subLineGiveAnAlarm, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getGridDiagramLineData")
@ApiOperation("监测点分布统计")
public HttpResult<List<GridDiagramVO.LineData>> getGridDiagramLineData(@RequestBody DeviceInfoParam.BusinessParam param) {
String methodDescribe = getMethodDescribe("getGridDiagramLineData");
List<GridDiagramVO.LineData> gridDiagramDevData = rStatLimitService.getGridDiagramLineData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, gridDiagramDevData, methodDescribe);
}
}

View File

@@ -0,0 +1,16 @@
package com.njcn.harmonic.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.harmonic.pojo.po.RMpTargetWarnDPO;
/**
* <p>
* Mapper 接口
* </p>
*
* @author wr
* @since 2024-04-19
*/
public interface RMpTargetWarnDMapper extends BaseMapper<RMpTargetWarnDPO> {
}

View File

@@ -1,10 +1,13 @@
package com.njcn.harmonic.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.device.pq.pojo.dto.PollutionGridDiagramDTO;
import com.njcn.harmonic.pojo.po.RStatPollutionSubstationM;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* Description:
@@ -22,4 +25,11 @@ public interface RStatPollutionSubstationMMapper extends BaseMapper<RStatPolluti
int insertOrUpdate(RStatPollutionSubstationM record);
int insertOrUpdateSelective(RStatPollutionSubstationM record);
Page<PollutionGridDiagramDTO> selectBySubstationPage(Page page,
@Param("ids") List<String> ids,
@Param("typeMapId") Map<String,String> typeMapId,
@Param("startTime") String startTime,
@Param("endTime") String endTime
);
}

View File

@@ -0,0 +1,5 @@
<?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.RMpTargetWarnDMapper">
</mapper>

View File

@@ -104,4 +104,31 @@
</if>
</trim>
</insert>
<select id="selectBySubstationPage" resultType="com.njcn.device.pq.pojo.dto.PollutionGridDiagramDTO">
SELECT
substation_id as id,
IF(`pollution_type`=#{typeMapId.I,javaType=string},value,3.14159) as `data`,
IF(`pollution_type`=#{typeMapId.V,javaType=string},value,3.14159) as `dataV`
FROM
r_stat_pollution_substation_m
<where>
<if test="ids != null and ids.size > 0">
AND substation_id IN
<foreach collection='ids' item='item' index="index" open='(' separator=',' close=')'>
#{item}
</foreach>
</if>
<if test="startTime != null and startTime !=''">
AND data_date >= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
AND data_date &lt;= #{endTime}
</if>
</where>
GROUP BY
substation_id
ORDER BY `data` DESC,dataV DESC
</select>
</mapper>

View File

@@ -0,0 +1,23 @@
package com.njcn.harmonic.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.device.pq.pojo.vo.GridDiagramVO;
import com.njcn.harmonic.pojo.param.StatSubstationBizBaseParam;
import com.njcn.harmonic.pojo.po.RMpTargetWarnDPO;
import java.util.Map;
/**
* <p>
* 服务类
* </p>
*
* @author wr
* @since 2024-04-19
*/
public interface IRMpTargetWarnDService extends IService<RMpTargetWarnDPO> {
GridDiagramVO getSubLineGiveAnAlarm(StatSubstationBizBaseParam param);
}

View File

@@ -1,10 +1,14 @@
package com.njcn.harmonic.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.device.pq.pojo.dto.PollutionGridDiagramDTO;
import com.njcn.device.pq.pojo.dto.PollutionLineDTO;
import com.njcn.device.pq.pojo.dto.PollutionSubstationDTO;
import com.njcn.device.pq.pojo.vo.GridDiagramVO;
import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
import com.njcn.harmonic.pojo.param.PollutionSubstationQuryParam;
import com.njcn.harmonic.pojo.param.StatSubstationBizBaseParam;
import com.njcn.harmonic.pojo.po.RStatPollutionSubstationM;
import com.njcn.harmonic.pojo.vo.PollutionSubstationVO;
import com.njcn.harmonic.pojo.vo.PollutionVO;
@@ -59,4 +63,21 @@ public interface PollutionSubstationService extends IService<RStatPollutionSubst
List<PollutionLineDTO> getLineRankTop10(HarmonicPublicParam param);
/**
* @Description: 污染告警信息
* @param param
* @return: java.util.List<java.lang.String>
* @Author: wr
* @Date: 2024/4/22 11:00
*/
GridDiagramVO getPollutionAlarmData(StatSubstationBizBaseParam param);
/**
* @Description: 污染告警信息
* @param param
* @return: java.util.List<java.lang.String>
* @Author: wr
* @Date: 2024/4/22 11:00
*/
Page<PollutionGridDiagramDTO> getPollutionAlarmPageData(StatSubstationBizBaseParam param);
}

View File

@@ -1,14 +1,23 @@
package com.njcn.harmonic.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
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.service.impl.ServiceImpl;
import com.njcn.common.config.GeneralInfo;
import com.njcn.common.pojo.constant.BizParamConstant;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
import com.njcn.device.biz.pojo.dto.DeptGetSubStationDTO;
import com.njcn.device.biz.pojo.dto.SubGetBase;
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
import com.njcn.device.pms.api.MonitorClient;
import com.njcn.device.pms.api.PmsGeneralDeviceInfoClient;
import com.njcn.device.pms.api.StatationStatClient;
@@ -21,17 +30,22 @@ import com.njcn.device.pq.api.GeneralDeviceInfoClient;
import com.njcn.device.pq.api.LineFeignClient;
import com.njcn.device.pq.api.SubstationFeignClient;
import com.njcn.device.pq.pojo.dto.*;
import com.njcn.device.pq.pojo.vo.GridDiagramVO;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.mapper.*;
import com.njcn.harmonic.pojo.dto.PublicDTO;
import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
import com.njcn.harmonic.pojo.param.PollutionSubstationQuryParam;
import com.njcn.harmonic.pojo.param.StatSubstationBizBaseParam;
import com.njcn.harmonic.pojo.po.*;
import com.njcn.harmonic.pojo.vo.PollutionSubstationVO;
import com.njcn.harmonic.pojo.vo.PollutionVO;
import com.njcn.harmonic.service.PollutionSubstationService;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept;
import com.njcn.web.factory.PageFactory;
import com.njcn.web.utils.RequestUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -88,6 +102,8 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
private final RMpPollutionDPOMapper rMpPollutionDPOMapper;
private final CommTerminalGeneralClient commTerminalGeneralClient;
private final DicDataFeignClient dicDataFeignClient;
/**
* @param pollutionSubstationQuryParam
* @Description: getPollutionSubstationData
@@ -636,4 +652,123 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
return list;
}
@Override
public GridDiagramVO getPollutionAlarmData(StatSubstationBizBaseParam param) {
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
deptGetLineParam.setDeptId(param.getId());
List<DeptGetSubStationDTO.Info> deptGetChildrenMoreDTOS = commTerminalGeneralClient.deptGetSubStationInfo(deptGetLineParam).getData();
//获取全部变电站信息
List<SubGetBase> collect = deptGetChildrenMoreDTOS.stream().flatMap(x -> x.getStationIds().stream()).collect(Collectors.toList());
//全部变电站
List<String> subAll = collect.stream().map(SubGetBase::getId).distinct().collect(Collectors.toList());
//国网变电站
List<String> subGw = collect.stream().filter(x -> 1==x.getIsUpToGrid()).map(SubGetBase::getId).distinct().collect(Collectors.toList());
GridDiagramVO vo=new GridDiagramVO();
List<Double> info = new ArrayList<>();
List<Double> gwInfo = new ArrayList<>();
if(CollUtil.isNotEmpty(subAll)){
switch (param.getType()){
case 1:
List<RStatPollutionSubstationYPO> substationYlist = pollutionSubstationYPOMapper.selectList(new LambdaQueryWrapper<RStatPollutionSubstationYPO>()
.select(RStatPollutionSubstationYPO::getSubstationId,RStatPollutionSubstationYPO::getValue)
.in(CollUtil.isNotEmpty(subAll), RStatPollutionSubstationYPO::getSubstationId, subAll)
.in(CollUtil.isNotEmpty(param.getIds()), RStatPollutionSubstationYPO::getPollutionType, param.getIds())
.ge(StrUtil.isNotBlank(param.getStartTime()), RStatPollutionSubstationYPO::getDataDate, DateUtil.beginOfDay(DateUtil.parse(param.getStartTime())))
.le(StrUtil.isNotBlank(param.getEndTime()), RStatPollutionSubstationYPO::getDataDate, DateUtil.endOfDay(DateUtil.parse(param.getEndTime())))
);
info.addAll(substationYlist.stream().map(RStatPollutionSubstationYPO::getValue).collect(Collectors.toList()));
gwInfo.addAll(substationYlist.stream()
.filter(x->subGw.contains(x.getSubstationId()))
.map(RStatPollutionSubstationYPO::getValue).collect(Collectors.toList()));
break;
case 2:
List<RStatPollutionSubstationQPO> substationQlist = pollutionSubstationQPOMapper.selectList(new LambdaQueryWrapper<RStatPollutionSubstationQPO>()
.select(RStatPollutionSubstationQPO::getSubstationId,RStatPollutionSubstationQPO::getValue)
.in(CollUtil.isNotEmpty(subAll), RStatPollutionSubstationQPO::getSubstationId, subAll)
.in(CollUtil.isNotEmpty(param.getIds()), RStatPollutionSubstationQPO::getPollutionType, param.getIds())
.ge(StrUtil.isNotBlank(param.getStartTime()), RStatPollutionSubstationQPO::getDataDate, DateUtil.beginOfDay(DateUtil.parse(param.getStartTime())))
.le(StrUtil.isNotBlank(param.getEndTime()), RStatPollutionSubstationQPO::getDataDate, DateUtil.endOfDay(DateUtil.parse(param.getEndTime())))
);
info.addAll(substationQlist.stream().map(RStatPollutionSubstationQPO::getValue).collect(Collectors.toList()));
gwInfo.addAll(substationQlist.stream()
.filter(x->subGw.contains(x.getSubstationId()))
.map(RStatPollutionSubstationQPO::getValue).collect(Collectors.toList()));
break;
case 3:
List<RStatPollutionSubstationM> substationMlist = pollutionSubstationMMapper.selectList(new LambdaQueryWrapper<RStatPollutionSubstationM>()
.select(RStatPollutionSubstationM::getSubstationId,RStatPollutionSubstationM::getValue)
.in(CollUtil.isNotEmpty(subAll), RStatPollutionSubstationM::getSubstationId, subAll)
.in(CollUtil.isNotEmpty(param.getIds()), RStatPollutionSubstationM::getPollutionType, param.getIds())
.ge(StrUtil.isNotBlank(param.getStartTime()), RStatPollutionSubstationM::getDataDate, DateUtil.beginOfDay(DateUtil.parse(param.getStartTime())))
.le(StrUtil.isNotBlank(param.getEndTime()), RStatPollutionSubstationM::getDataDate, DateUtil.endOfDay(DateUtil.parse(param.getEndTime())))
);
info.addAll(substationMlist.stream().map(RStatPollutionSubstationM::getValue).collect(Collectors.toList()));
gwInfo.addAll(substationMlist.stream()
.filter(x->subGw.contains(x.getSubstationId()))
.map(RStatPollutionSubstationM::getValue).collect(Collectors.toList()));
break;
case 4:
List<RStatPollutionSubstationDPO> substationDlist = pollutionSubstationDPOMapper.selectList(new LambdaQueryWrapper<RStatPollutionSubstationDPO>()
.select(RStatPollutionSubstationDPO::getSubstationId,RStatPollutionSubstationDPO::getValue)
.in(CollUtil.isNotEmpty(subAll), RStatPollutionSubstationDPO::getSubstationId, subAll)
.in(CollUtil.isNotEmpty(param.getIds()), RStatPollutionSubstationDPO::getPollutionType, param.getIds())
.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())))
);
info.addAll(substationDlist.stream().map(RStatPollutionSubstationDPO::getValue).collect(Collectors.toList()));
gwInfo.addAll(substationDlist.stream()
.filter(x->subGw.contains(x.getSubstationId()))
.map(RStatPollutionSubstationDPO::getValue).collect(Collectors.toList()));
break;
}
}
vo.setInfo(info);
vo.setGwInfo(gwInfo);
return vo;
}
@Override
public Page<PollutionGridDiagramDTO> getPollutionAlarmPageData(StatSubstationBizBaseParam param) {
Map<String,String> map=new HashMap<>();
map.put("V",dicDataFeignClient.getDicDataByCode(DicDataEnum.V_HARMONIC.getCode()).getData().getId());
map.put("I",dicDataFeignClient.getDicDataByCode(DicDataEnum.I_ALL.getCode()).getData().getId());
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
deptGetLineParam.setDeptId(param.getId());
List<DeptGetSubStationDTO.Info> deptGetChildrenMoreDTOS = commTerminalGeneralClient.deptGetSubStationInfo(deptGetLineParam).getData();
//获取全部变电站信息
List<SubGetBase> collect = deptGetChildrenMoreDTOS.stream().flatMap(x -> x.getStationIds().stream()).collect(Collectors.toList());
ArrayList<SubGetBase> substationList = collect.stream().collect(Collectors.collectingAndThen
(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(o -> o.getId()))), ArrayList::new));
//根据部门统计有多少干扰源(设备数量)
Map<String, SubGetBase> substationMap = substationList.stream().collect(Collectors.toMap(SubGetBase::getId, Function.identity()));
List<String> subIDS=new ArrayList<>();
if(0==param.getType()){
//全部变电站
subIDS.addAll(collect.stream().map(SubGetBase::getId).distinct().collect(Collectors.toList()));
}else{
//国网变电站
subIDS.addAll(collect.stream().filter(x -> 1==x.getIsUpToGrid()).map(SubGetBase::getId).distinct().collect(Collectors.toList()));
}
Page<PollutionGridDiagramDTO> pollutionPage = pollutionSubstationMMapper.selectBySubstationPage(new Page<>(param.getPageNum(), param.getPageSize())
, subIDS, map, param.getStartTime(), param.getEndTime());
List<PollutionGridDiagramDTO> records = pollutionPage.getRecords();
if(CollUtil.isNotEmpty(records)){
records.forEach(x->{
if(substationMap.containsKey(x.getId())){
SubGetBase subGetBase = substationMap.get(x.getId());
x.setName(subGetBase.getName());
x.setPowerCompany(subGetBase.getOrgName());
x.setVoltageLevel(subGetBase.getVoltageLevel());
}
});
}
return pollutionPage;
}
}

View File

@@ -0,0 +1,179 @@
package com.njcn.harmonic.service.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.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
import com.njcn.device.biz.pojo.dto.DeptGetSubStationDTO;
import com.njcn.device.biz.pojo.dto.SubGetBase;
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
import com.njcn.device.pq.pojo.vo.GridDiagramVO;
import com.njcn.harmonic.mapper.RMpTargetWarnDMapper;
import com.njcn.harmonic.pojo.param.StatSubstationBizBaseParam;
import com.njcn.harmonic.pojo.po.RMpTargetWarnDPO;
import com.njcn.harmonic.service.IRMpTargetWarnDService;
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.pojo.po.Dept;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* <p>
* 服务实现类
* </p>
*
* @author wr
* @since 2024-04-19
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class RMpTargetWarnDServiceImpl extends ServiceImpl<RMpTargetWarnDMapper, RMpTargetWarnDPO> implements IRMpTargetWarnDService {
private final DeptFeignClient deptFeignClient;
private final DicDataFeignClient dicDataFeignClient;
private final CommTerminalGeneralClient commTerminalGeneralClient;
@Override
public GridDiagramVO getSubLineGiveAnAlarm(StatSubstationBizBaseParam param) {
//获取电压等级
List<DictData> dictDataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_VOLTAGE_STAND.getCode()).getData();
//获取电压等级550 220 110 35
List<String> voltageIds = dictDataList.stream().filter(item ->
Objects.equals(DicDataEnum.DY_500KV.getCode(), item.getCode()) ||
Objects.equals(DicDataEnum.DY_220KV.getCode(), item.getCode()) ||
Objects.equals(DicDataEnum.DY_110KV.getCode(), item.getCode()) ||
Objects.equals(DicDataEnum.DY_35KV.getCode(), item.getCode())
).sorted(Comparator.comparing(DictData::getSort).reversed()).map(DictData::getId).collect(Collectors.toList());
GridDiagramVO gridDiagramVO = new GridDiagramVO();
List<GridDiagramVO.LineStatistics> info = new ArrayList<>();
List<GridDiagramVO.LineStatistics> gwInfo = new ArrayList<>();
//获取部门数据关系
List<Dept> data = deptFeignClient.getDirectSonSelf(param.getId()).getData();
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
deptGetLineParam.setDeptId(param.getId());
List<DeptGetSubStationDTO.Info> deptGetChildrenMoreDTOS = commTerminalGeneralClient.deptGetSubStationInfo(deptGetLineParam).getData();
List<String> lineIDS = deptGetChildrenMoreDTOS.stream()
.flatMap(x -> x.getStationIds().stream().flatMap(l -> l.getUnitChildrenList().stream()))
.collect(Collectors.toList());
List<RMpTargetWarnDPO> list = this.list(new QueryWrapper<RMpTargetWarnDPO>()
.select("measurement_point_id,sum(is_warn) as isWarn")
.in(CollUtil.isNotEmpty(lineIDS), "measurement_point_id", lineIDS)
.ge(StrUtil.isNotBlank(param.getStartTime()), "data_date", DateUtil.beginOfDay(DateUtil.parse(param.getStartTime())))
.le(StrUtil.isNotBlank(param.getEndTime()), "data_date", DateUtil.endOfDay(DateUtil.parse(param.getEndTime())))
.groupBy("measurement_point_id")
);
Map<String, DeptGetSubStationDTO.Info> deptLineMap = deptGetChildrenMoreDTOS.stream().collect(Collectors.toMap(DeptGetSubStationDTO.Info::getUnitId, Function.identity()));
GridDiagramVO.LineStatistics lineStatistics;
GridDiagramVO.LineStatistics gwLineStatistics;
for (Dept datum : data) {
if (deptLineMap.containsKey(datum.getId())) {
lineStatistics = new GridDiagramVO.LineStatistics();
lineStatistics.setOrgId(datum.getId());
lineStatistics.setOrgName(datum.getName());
gwLineStatistics = new GridDiagramVO.LineStatistics();
gwLineStatistics.setOrgId(datum.getId());
gwLineStatistics.setOrgName(datum.getName());
List<SubGetBase> subBaseList = deptLineMap.get(datum.getId()).getStationIds();
List<GridDiagramVO.StatisticsData> statisticsData = new ArrayList<>();
List<GridDiagramVO.StatisticsData> gwStatisticsData = new ArrayList<>();
getSubStationStatisticsData(statisticsData, gwStatisticsData, subBaseList, voltageIds, list);
lineStatistics.setData(statisticsData);
gwLineStatistics.setData(gwStatisticsData);
info.add(lineStatistics);
gwInfo.add(gwLineStatistics);
}
}
gridDiagramVO.setInfo(info);
gridDiagramVO.setGwInfo(gwInfo);
return gridDiagramVO;
}
private void getSubStationStatisticsData(List<GridDiagramVO.StatisticsData> statisticsData,
List<GridDiagramVO.StatisticsData> gwStatisticsData,
List<SubGetBase> subBaseList,
List<String> voltageIds,
List<RMpTargetWarnDPO> list
) {
long countOne= 0;
long countTow= 0;
long gwCountOne= 0;
long gwCountTow= 0;
GridDiagramVO.StatisticsData data;
for (String voltageId : voltageIds) {
for (int i = 0; i < 2; i++) {
data=new GridDiagramVO.StatisticsData();
int finalI = i;
long count = subBaseList.stream()
.filter(x -> getIsUpToGrid(finalI,x,voltageId))
.distinct()
.count();
data.setNumOne(count);
AtomicLong num= new AtomicLong();
subBaseList.stream().filter(x -> getIsUpToGrid(finalI, x, voltageId)).forEach(x -> {
List<String> line=new ArrayList<>();
if(finalI==0){
line.addAll(x.getUnitChildrenList());
}else{
line.addAll(x.getGwUnitChildrenList());
}
int sum = list.stream().filter(d -> line.contains(d.getMeasurementPointId())).mapToInt(RMpTargetWarnDPO::getIsWarn).sum();
if (sum > 0) {
num.getAndIncrement();
}
});
data.setNumTwo(num.get());
if(i==0){
countOne+=count;
countTow+=num.get();
statisticsData.add(data);
}else{
gwCountOne+=count;
gwCountTow+=num.get();
gwStatisticsData.add(data);
}
}
}
data=new GridDiagramVO.StatisticsData();
data.setNumOne(countOne);
data.setNumTwo(countTow);
statisticsData.add(data);
data=new GridDiagramVO.StatisticsData();
data.setNumOne(gwCountOne);
data.setNumTwo(gwCountTow);
gwStatisticsData.add(data);
}
private Boolean getIsUpToGrid(Integer type, SubGetBase subGetBase, String voltageId) {
//0全部 1国网上送监测点
if(type == 0){
return voltageId.equals(subGetBase.getVoltageLevel());
}else{
return voltageId.equals(subGetBase.getVoltageLevel()) && 1 == subGetBase.getIsUpToGrid();
}
}
}

View File

@@ -0,0 +1,17 @@
package com.njcn.harmonic.service.majornetwork;
import java.util.List;
/**
* @author wr
* @description 冀北电网一张图
* @date 2024/4/16 13:11
*/
public interface GridDiagramService {
List<?> getGridDiagramList();
}

View File

@@ -1,5 +1,7 @@
package com.njcn.harmonic.service.majornetwork;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.vo.GridDiagramVO;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO;
@@ -23,5 +25,5 @@ public interface RStatLimitService {
List<RStatLimitTargetDPO> monitorIdsGetLimitTargetInfo(String date, List<String> monitorIds);
List<GridDiagramVO.LineData> getGridDiagramLineData(DeviceInfoParam.BusinessParam deviceInfoParam);
}

View File

@@ -1,6 +1,20 @@
package com.njcn.harmonic.service.majornetwork.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.njcn.device.pq.api.GeneralDeviceInfoClient;
import com.njcn.device.pq.api.LineIntegrityClient;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.po.RStatIntegrityD;
import com.njcn.device.pq.pojo.po.RStatOnlinerateD;
import com.njcn.device.pq.pojo.vo.GridDiagramVO;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.TerminalTree;
import com.njcn.harmonic.mapper.RStatLimitRateDMapper;
import com.njcn.harmonic.mapper.RStatLimitTargetDMapper;
import com.njcn.harmonic.mapper.RStatLimitTargetMapper;
@@ -10,7 +24,11 @@ import com.njcn.harmonic.service.majornetwork.RStatLimitService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* pqs
@@ -22,15 +40,10 @@ import java.util.List;
@RequiredArgsConstructor
public class RStatLimitServiceImpl implements RStatLimitService {
private final RStatLimitRateDMapper rStatLimitRateDMapper;
private final RStatLimitTargetDMapper rStatLimitTargetDMapper;
private final GeneralDeviceInfoClient generalDeviceInfoClient;
private final LineIntegrityClient lineIntegrityClient;
@Override
public List<RStatLimitRateDPO> monitorIdsGetLimitRateInfo(String date, List<String> monitorIds) {
@@ -43,4 +56,99 @@ public class RStatLimitServiceImpl implements RStatLimitService {
return rStatLimitTargetDMapper.selectList(new LambdaQueryWrapper<RStatLimitTargetDPO>().in(RStatLimitTargetDPO::getLineId,monitorIds)
.eq(RStatLimitTargetDPO::getTime,date).gt(RStatLimitTargetDPO::getAllTime,0));
}
@Override
public List<GridDiagramVO.LineData> getGridDiagramLineData(DeviceInfoParam.BusinessParam deviceInfoParam) {
List<GridDiagramVO.LineData> info=new ArrayList<>();
List<GeneralDeviceDTO> data = generalDeviceInfoClient.getPracticalRunDeviceInfo(deviceInfoParam).getData();
List<GeneralDeviceDTO> list = data.stream().sorted(Comparator.comparing(x -> x.getLineIndexes().size(),Comparator.reverseOrder())).collect(Collectors.toList());
//终端总数量
List<String> devIds = list.stream().flatMap(x -> x.getDeviceIndexes().stream()).distinct().collect(Collectors.toList());
//监测点总数量
List<String> lineIds = list.stream().flatMap(x -> x.getLineIndexes().stream()).distinct().collect(Collectors.toList());
//超标监测点信息
List<RStatLimitTargetDPO> limitTargetList = rStatLimitTargetDMapper.selectList(new LambdaQueryWrapper<RStatLimitTargetDPO>()
.select(RStatLimitTargetDPO::getLineId, RStatLimitTargetDPO::getAllTime, RStatLimitTargetDPO::getFlickerAllTime)
.in(RStatLimitTargetDPO::getLineId, lineIds)
.ge(StrUtil.isNotBlank(deviceInfoParam.getSearchBeginTime()), RStatLimitTargetDPO::getTime, DateUtil.beginOfDay(DateUtil.parse(deviceInfoParam.getSearchBeginTime())))
.le(StrUtil.isNotBlank(deviceInfoParam.getSearchEndTime()), RStatLimitTargetDPO::getTime, DateUtil.endOfDay(DateUtil.parse(deviceInfoParam.getSearchEndTime()))));
//终端在线率
OnlineRateParam param=new OnlineRateParam();
param.setIds(devIds);
param.setStartTime(deviceInfoParam.getSearchBeginTime());
param.setEndTime(deviceInfoParam.getSearchEndTime());
List<RStatOnlinerateVO> onlineRateList = generalDeviceInfoClient.getOnlineRateByDevIds(param).getData();
List<RStatIntegrityD> integrityList = lineIntegrityClient.getIntegrityByLineIds(lineIds, deviceInfoParam.getSearchBeginTime(), deviceInfoParam.getSearchEndTime()).getData();
List<GeneralDeviceDTO> topList=new ArrayList<>();
List<GeneralDeviceDTO> otherList=new ArrayList<>();
if(list.size()>4){
topList.addAll(list.subList(0, 4));
otherList.addAll(list.subList(4, list.size()));
}else{
if(list.size()>3){
topList.addAll(list.subList(0, 3));
otherList.addAll(list.subList(3, list.size()));
}else{
if(list.size()>2){
topList.addAll(list.subList(0, 2));
otherList.addAll(list.subList(2, list.size()));
}else{
topList.addAll(list.subList(0, 1));
otherList.addAll(list.subList(1, list.size()));
}
}
}
GridDiagramVO.LineData lineData;
for (GeneralDeviceDTO dto : topList) {
lineData=new GridDiagramVO.LineData();
lineData.setOrgId(dto.getIndex());
lineData.setOrgName(dto.getName()+"("+dto.getLineIndexes().size()+")");
onLineAndIntegrity(dto.getLineIndexes(), integrityList, dto.getDeviceIndexes(), onlineRateList,limitTargetList, lineData);
info.add(lineData);
}
List<String> otherDevIds = otherList.stream().flatMap(x -> x.getDeviceIndexes().stream()).distinct().collect(Collectors.toList());
List<String> otherLineIds = otherList.stream().flatMap(x -> x.getLineIndexes().stream()).distinct().collect(Collectors.toList());
lineData=new GridDiagramVO.LineData();
lineData.setOrgId("123456");
lineData.setOrgName("其他("+otherLineIds.size()+")");
onLineAndIntegrity(otherLineIds, integrityList, otherDevIds, onlineRateList,limitTargetList, lineData);
info.add(lineData);
return info;
}
private void onLineAndIntegrity(List<String> lineIds, List<RStatIntegrityD> onIntegrityByIds, List<String> devIds, List<RStatOnlinerateVO> onlineRateByDevIds,List<RStatLimitTargetDPO> limitTargetList, GridDiagramVO.LineData lineData) {
//监测完整率
List<RStatIntegrityD> integrityDS = onIntegrityByIds.stream().filter(x -> lineIds.contains(x.getLineIndex())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(integrityDS)) {
double realTime = integrityDS.stream().mapToDouble(RStatIntegrityD::getRealTime).sum();
double dueTime = integrityDS.stream().mapToDouble(RStatIntegrityD::getDueTime).sum();
lineData.setIntegrityRate(NumberUtil.round(realTime * 100 / dueTime, 2).floatValue());
} else {
lineData.setIntegrityRate(0.0f);
}
//终端在线率
List<RStatOnlinerateVO> onlineRateDS = onlineRateByDevIds.stream().filter(x -> devIds.contains(x.getDevIndex())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(onlineRateDS)) {
double onlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateVO::getOnlineMin).sum();
double offlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateVO::getOfflineMin).sum();
lineData.setOnLineRate(NumberUtil.round(onlineTime * 100 / onlineTime + offlineTime, 2).floatValue());
} else {
lineData.setOnLineRate(0.0f);
}
//监测点超标占比
List<RStatLimitTargetDPO> limitTarget = limitTargetList.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(limitTarget)) {
long count = limitTarget.stream()
.filter(x -> x.getAllTime() > 0 || x.getFlickerAllTime() > 0)
.distinct()
.map(RStatLimitTargetDPO::getLineId).count();
lineData.setOutOfStandardRate(NumberUtil.round(count * 100.0 / limitTarget.size(), 2).floatValue());
} else {
lineData.setOutOfStandardRate(0.0f);
}
}
}