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

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

@@ -128,7 +128,9 @@ public class CommTerminalController extends BaseController {
List<DeptGetSubStationDTO> result = commTerminalService.deptSubStation(deptGetLineParam);
log.info("运行时长" + timer.intervalSecond());
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
} /**
}
/**
* 根据单位获取所有变电站详细信息
* @param deptGetLineParam
* @return

View File

@@ -0,0 +1,89 @@
package com.njcn.device.pq.controller;
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.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.device.pq.pojo.param.AlarmStrategyParam;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.GridDiagramParam;
import com.njcn.device.pq.pojo.vo.AlarmStrategyVO;
import com.njcn.device.pq.pojo.vo.GridDiagramVO;
import com.njcn.device.pq.service.AlarmStrategyService;
import com.njcn.device.pq.service.GridDiagramService;
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.*;
import java.util.List;
import java.util.Map;
@Validated
@Slf4j
@RestController
@RequestMapping("/gridDiagram")
@Api(tags = "冀北电网一张图信息展示")
@AllArgsConstructor
public class GridDiagramController extends BaseController {
private final GridDiagramService gridDiagramService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getGridDiagramMonitor")
@ApiOperation("监测点统计(总数/在线)")
public HttpResult<GridDiagramVO> getGridDiagramMonitor(@RequestBody GridDiagramParam param){
String methodDescribe = getMethodDescribe("getGridDiagramMonitor");
GridDiagramVO gridDiagramMonitor = gridDiagramService.getGridDiagramMonitor(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, gridDiagramMonitor, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getGridDiagramDev")
@ApiOperation("终端统计(在运/在线)")
public HttpResult<GridDiagramVO> getGridDiagramDev(@RequestBody GridDiagramParam param){
String methodDescribe = getMethodDescribe("getGridDiagramDev");
GridDiagramVO gridDiagramMonitor = gridDiagramService.getGridDiagramDev(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, gridDiagramMonitor, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getGridDiagramSubTendency")
@ApiOperation("变电站趋势分析")
public HttpResult<Map<String, Long>> getGridDiagramSubTendency(@RequestBody GridDiagramParam param){
String methodDescribe = getMethodDescribe("getGridDiagramSubTendency");
Map<String, Long> gridDiagramDevTendency = gridDiagramService.getGridDiagramDevTendency(param,3);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, gridDiagramDevTendency, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getGridDiagramDevTendency")
@ApiOperation("终端趋势分析")
public HttpResult<Map<String, Long>> getGridDiagramDevTendency(@RequestBody GridDiagramParam param){
String methodDescribe = getMethodDescribe("getGridDiagramDevTendency");
Map<String, Long> gridDiagramDevTendency = gridDiagramService.getGridDiagramDevTendency(param,4);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, gridDiagramDevTendency, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getGridDiagramDevData")
@ApiOperation("终端分布统计")
public HttpResult<List<GridDiagramVO.DeviceData>> getGridDiagramDevData(@RequestBody GridDiagramParam param){
String methodDescribe = getMethodDescribe("getGridDiagramDevData");
List<GridDiagramVO.DeviceData> gridDiagramDevData = gridDiagramService.getGridDiagramDevData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, gridDiagramDevData, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getGridDiagramLineTendency")
@ApiOperation("监测点趋势分析")
public HttpResult<Map<String, Long>> getGridDiagramLineTendency(@RequestBody GridDiagramParam param){
String methodDescribe = getMethodDescribe("getGridDiagramLineTendency");
Map<String, Long> gridDiagramDevTendency = gridDiagramService.getGridDiagramDevTendency(param,6);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, gridDiagramDevTendency, methodDescribe);
}
}

View File

@@ -83,7 +83,7 @@ public class LineIntegrityDataController extends BaseController {
public HttpResult<List<RStatIntegrityD>> getIntegrityByLineIds(@RequestBody List<String> lineIds, @RequestParam("startTime")String startTime, @RequestParam("endTime")String endTime) {
String methodDescribe = getMethodDescribe("getIntegrityByLineIds");
QueryWrapper<RStatIntegrityD> queryWrapper = new QueryWrapper<>();
queryWrapper.select("sum(real_time)/sum(due_time) as integrityData","line_index").in("line_index",lineIds).between("time_id",startTime,endTime).groupBy("line_index");
queryWrapper.select("sum(real_time) as realTime,sum(due_time) as dueTime,sum(real_time)/sum(due_time) as integrityData","line_index").in("line_index",lineIds).between("time_id",startTime,endTime).groupBy("line_index");
List<RStatIntegrityD> rStatIntegrityDList = irStatIntegrityDService.list(queryWrapper);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rStatIntegrityDList, methodDescribe);
}

View File

@@ -514,7 +514,7 @@ public interface LineMapper extends BaseMapper<Line> {
* @Author: wr
* @Date: 2023/8/29 12:50
*/
Page<HalfReportVO> selectHalfReport(Page page,@Param("param") TerminalMainQueryParam param);
Page<HalfReportVO> selectHalfReport(Page page,@Param("param") TerminalMainQueryParam param,@Param("deptIdList") List<String> deptIdList);
/**
* @Description: 根据监测点id获取监测点信息

View File

@@ -30,7 +30,8 @@
dev.id devId,
device.com_flag comFlag,
1 as lineType,
0 as type
0 as type,
lineDetail.Monitor_Flag as isUpToGrid
</if>
<!--母线-->
<if test="type == 2">
@@ -97,7 +98,8 @@
substation.id ledgerId,
substation.name subName,
sub.Scale voltageLevel,
point.id lineId
point.id lineId,
lineDetail.Monitor_Flag as monitorFlag
from pq_dept_line pq_dept_line
inner join pq_line point on pq_dept_line.line_id = point.id
inner join pq_line_detail lineDetail on point.id = lineDetail.id

View File

@@ -1262,10 +1262,12 @@
<select id="selectHalfReport" resultType="com.njcn.device.pq.pojo.vo.HalfReportVO">
select * from
( SELECT
dept.Id,
sys.NAME AS areaName,
gd.NAME AS gbName,
sub.NAME AS subName,
line.NAME AS lineName,
voltage.Scale AS voltageScale,
pd.Run_Flag AS runFlag,
pd.Com_Flag AS comFlag,
pld.Line_Grade AS lineGrade,
@@ -1282,9 +1284,11 @@
pd.Sim AS sim ,
pld.Remark AS remark
FROM
pq_line line
pq_line line
INNER JOIN pq_dept_line dept ON dept.Line_Id = line.Id
INNER JOIN pq_line_detail pld ON line.Id = pld.Id
INNER JOIN pq_line vol ON vol.Id = line.Pid
INNER JOIN pq_voltage voltage ON vol.Id = voltage.Id
INNER JOIN pq_line dev ON dev.Id = vol.Pid
INNER JOIN pq_device pd ON pd.Id = dev.Id
INNER JOIN pq_line sub ON sub.Id = dev.Pid
@@ -1311,6 +1315,15 @@
<if test="param.lineGrade != null and param.lineGrade !=''">
and pld.Line_Grade = #{param.lineGrade}
</if>
<if test="param.monitorFlag != null and param.monitorFlag !=''">
and pld.Monitor_Flag = #{param.monitorFlag}
</if>
<if test="deptIdList!=null and deptIdList.size()!=0">
and dept.Id IN
<foreach collection="deptIdList" item="orgId" open="(" close=")" separator=",">
#{orgId}
</foreach>
</if>
</where>
) x
<where>

View File

@@ -69,7 +69,7 @@
from
r_stat_integrity_d
<where>
<if test="param!=null and param.lineIds != null and param.ids.lineIds > 0">
<if test="param!=null and param.lineIds != null and param.lineIds.size > 0">
AND line_index IN
<foreach collection='param.lineIds' item='item' index="index" open='(' separator=',' close=')'>
#{item}

View File

@@ -4,6 +4,8 @@
<select id="getOnlineRateByDevIds" resultType="com.njcn.device.pq.pojo.vo.RStatOnlinerateVO">
select
dev_index,
sum(online_min) as onlineMin,
sum(offline_min) as offlineMin,
ROUND( sum(online_min)/(sum(online_min) + sum(offline_min))*100,2) as online_rate
from r_stat_onlinerate_d
<where>

View File

@@ -0,0 +1,51 @@
package com.njcn.device.pq.service;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.GridDiagramParam;
import com.njcn.device.pq.pojo.vo.GridDiagramVO;
import java.util.List;
import java.util.Map;
/**
* @author wr
* @description 冀北电网一张图
* @date 2024/4/16 13:11
*/
public interface GridDiagramService {
/**
* @Description: 监测点统计(在线数/在线率/完整率)
* @param
* @Author: wr
*/
GridDiagramVO getGridDiagramMonitor(GridDiagramParam param);
/**
* @Description: 终端统计(在运/在线)
* @param
* @Author: wr
*/
GridDiagramVO getGridDiagramDev(GridDiagramParam param);
/**
* @Description: 终端趋势分析
* @param
* @Author: wr
*/
Map<String,Long> getGridDiagramDevTendency(GridDiagramParam param,Integer type);
/**
* @Description: 终端分布统计
* @param
* @Author: wr
*/
List<GridDiagramVO.DeviceData> getGridDiagramDevData(GridDiagramParam param);
}

View File

@@ -1,6 +1,7 @@
package com.njcn.device.pq.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.device.biz.pojo.dto.LineDTO;
import com.njcn.device.biz.pojo.dto.LineALLInfoDTO;
import com.njcn.device.pq.pojo.dto.PollutionLineDTO;
@@ -22,7 +23,7 @@ import java.util.Map;
* @date 2022/2/23
*
*/
public interface LineService {
public interface LineService extends IService<Line> {
/**
* 获取监测点详情
* @param id 监测点id

View File

@@ -81,7 +81,8 @@ public class CommTerminalServiceImpl implements CommTerminalService {
public List<DeptGetChildrenMoreDTO> deptGetLine(DeptGetLineParam deptGetLineParam) {
List<DeptGetChildrenMoreDTO> result = new ArrayList<>();
List<DeptGetBase> temDept = getDeptChildrenByParent(deptGetLineParam);
Map<String, List<LineDevGetDTO>> map = deptLineService.lineDevGet(filterDataTypeNew(deptGetLineParam.getServerName()),1);
Map<String, String> deptMap = temDept.stream().collect(Collectors.toMap(DeptGetBase::getUnitId, DeptGetBase::getUnitName));
Map<String, List<LineDevGetDTO>> map = deptLineService.lineDevGet(filterDataTypeNew(deptGetLineParam.getServerName()),1);
temDept.forEach(item -> {
DeptGetChildrenMoreDTO deptGetChildrenMoreDTO = new DeptGetChildrenMoreDTO();
deptGetChildrenMoreDTO.setUnitId(item.getUnitId());
@@ -93,6 +94,11 @@ public class CommTerminalServiceImpl implements CommTerminalService {
List<LineDevGetDTO> lineList = new ArrayList<>();
deptIds.forEach(i -> {
if (map.containsKey(i)) {
map.get(i).stream().forEach(x->{
if(deptMap.containsKey(x.getUnitId())){
x.setUnitName(deptMap.get(x.getUnitId()));
}
});
lineList.addAll(map.get(i));
}
});
@@ -216,7 +222,7 @@ public class CommTerminalServiceImpl implements CommTerminalService {
List<DeptGetBase> temDept = getDeptChildrenByParent(deptGetLineParam);
List<TerminalGetBase.Extend> anExtends = deptLineService.orgSubStationInfoGet(filterDataTypeNew(deptGetLineParam.getServerName()));
Map<String, List<TerminalGetBase.Extend>> orgSub = anExtends.stream().collect(Collectors.groupingBy(TerminalGetBase::getUnitId));
Map<String, String> deptNameMap = temDept.stream().collect(Collectors.toMap(DeptGetBase::getUnitId, DeptGetBase::getUnitName));
temDept.forEach(item -> {
DeptGetSubStationDTO.Info deptGetSubStationDTO = new DeptGetSubStationDTO.Info();
deptGetSubStationDTO.setUnitId(item.getUnitId());
@@ -239,8 +245,18 @@ public class CommTerminalServiceImpl implements CommTerminalService {
subGetBase.setId(split[0]);
subGetBase.setName(split[1]);
subGetBase.setVoltageLevel(split[2]);
subGetBase.setOrgId(deptId);
if(deptNameMap.containsKey(deptId)){
subGetBase.setOrgName(deptNameMap.get(deptId));
}
//国网监测点
List<String> gwMonitor = stringListEntry.getValue().stream().filter(x -> 1 == x.getMonitorFlag())
.map(TerminalGetBase.Extend::getLineId)
.distinct().collect(Collectors.toList());
subGetBase.setIsUpToGrid(gwMonitor.size() > 0 ? 1 : 0);
List<String> monitorIds = stringListEntry.getValue().stream().map(TerminalGetBase.Extend::getLineId).distinct().collect(Collectors.toList());
subGetBase.setUnitChildrenList(monitorIds);
subGetBase.setGwUnitChildrenList(gwMonitor);
subList.add(subGetBase);
}
}

View File

@@ -0,0 +1,398 @@
package com.njcn.device.pq.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
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.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.njcn.common.pojo.dto.SimpleDTO;
import com.njcn.common.pojo.enums.common.DataStateEnum;
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.pq.mapper.RStatIntegrityDMapper;
import com.njcn.device.pq.mapper.RStatOnlinerateDMapper;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.GridDiagramParam;
import com.njcn.device.pq.pojo.po.Device;
import com.njcn.device.pq.pojo.po.Line;
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.service.CommTerminalService;
import com.njcn.device.pq.service.GridDiagramService;
import com.njcn.device.pq.service.IDeviceService;
import com.njcn.device.pq.service.LineService;
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.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author wr
* @description
* @date 2024/4/16 13:57
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class GridDiagramServiceImpl implements GridDiagramService {
private final CommTerminalService commTerminalService;
private final DeptFeignClient deptFeignClient;
private final DicDataFeignClient dicDataFeignClient;
private final RStatOnlinerateDMapper onLineRateDMapper;
private final RStatIntegrityDMapper integrityDMapper;
private final IDeviceService deviceService;
private final GeneralDeviceService generalDeviceService;
private final LineService lineService;
@Override
public GridDiagramVO getGridDiagramMonitor(GridDiagramParam 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.getOrgId()).getData();
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
deptGetLineParam.setDeptId(param.getOrgId());
List<DeptGetChildrenMoreDTO> deptGetChildrenMoreDTOS = commTerminalService.deptGetLine(deptGetLineParam);
//监测点id集合
List<String> lineIdsAll = deptGetChildrenMoreDTOS.stream().flatMap(x -> x.getLineBaseList().stream().map(LineDevGetDTO::getPointId)).distinct().collect(Collectors.toList());
//终端id集合
List<String> devIdsAll = deptGetChildrenMoreDTOS.stream().flatMap(x -> x.getLineBaseList().stream().map(LineDevGetDTO::getDevId)).distinct().collect(Collectors.toList());
List<RStatOnlinerateD> onlineRateByDevIds = new ArrayList<>();
List<RStatIntegrityD> onIntegrityByIds = new ArrayList<>();
if (CollUtil.isNotEmpty(lineIdsAll)) {
//监测点完整性
onIntegrityByIds.addAll(integrityDMapper.selectList(new QueryWrapper<RStatIntegrityD>().select("sum(real_time) as `realTime`,sum(due_time) as dueTime,line_index as lineIndex").in(CollUtil.isNotEmpty(lineIdsAll), "line_index", lineIdsAll).ge(StrUtil.isNotBlank(param.getSearchBeginTime()), "time_id", DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime()))).le(StrUtil.isNotBlank(param.getSearchEndTime()), "time_id", DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime()))).groupBy("line_index")));
//终端在线率
onlineRateByDevIds.addAll(onLineRateDMapper.selectList(new QueryWrapper<RStatOnlinerateD>().select("sum(online_min) as `onlineMin`,sum(offline_min) as offlineMin,dev_index as devIndex").in(CollUtil.isNotEmpty(devIdsAll), "dev_index", devIdsAll).ge(StrUtil.isNotBlank(param.getSearchBeginTime()), "time_id", DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime()))).le(StrUtil.isNotBlank(param.getSearchEndTime()), "time_id", DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime()))).groupBy("dev_index")));
}
Map<String, DeptGetChildrenMoreDTO> deptLineMap = deptGetChildrenMoreDTOS.stream().collect(Collectors.toMap(DeptGetChildrenMoreDTO::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<LineDevGetDTO> lineBaseList = deptLineMap.get(datum.getId()).getLineBaseList();
List<GridDiagramVO.LineStatisticsData> statisticsData = new ArrayList<>();
List<GridDiagramVO.LineStatisticsData> gwStatisticsData = new ArrayList<>();
getLineStatisticsData(statisticsData, gwStatisticsData, lineBaseList, voltageIds, onlineRateByDevIds, onIntegrityByIds);
lineStatistics.setData(statisticsData);
gwLineStatistics.setData(gwStatisticsData);
info.add(lineStatistics);
gwInfo.add(gwLineStatistics);
}
}
gridDiagramVO.setInfo(info);
gridDiagramVO.setGwInfo(gwInfo);
return gridDiagramVO;
}
/**
* @param statisticsData 全部监测点数据
* @param gwStatisticsData 国网监测点数据
* @param lineBaseList 监测点信息
* @param voltageIds 电压等级
* @param onlineRateByDevIds 在线率
* @param onIntegrityByIds 完整率
* @Description: 在线率,完整率赋值
* @Author: wr
* @Date: 2024/4/18 15:38
*/
private void getLineStatisticsData(List<GridDiagramVO.LineStatisticsData> statisticsData, List<GridDiagramVO.LineStatisticsData> gwStatisticsData, List<LineDevGetDTO> lineBaseList, List<String> voltageIds, List<RStatOnlinerateD> onlineRateByDevIds, List<RStatIntegrityD> onIntegrityByIds) {
voltageIds.forEach((key) -> {
statisticsDataList(statisticsData, lineBaseList, key, onlineRateByDevIds, onIntegrityByIds);
gwStatisticsDataList(gwStatisticsData, lineBaseList, key, onlineRateByDevIds, onIntegrityByIds);
});
statisticsDataOtherList(statisticsData, lineBaseList, onlineRateByDevIds, onIntegrityByIds);
gwStatisticsDataOtherList(gwStatisticsData, lineBaseList, onlineRateByDevIds, onIntegrityByIds);
}
/**
* @param statisticsData
* @param lineBaseList
* @param value
* @param onlineRateByDevIds
* @param onIntegrityByIds
* @Description: 全部监测点数据赋值
* @Author: wr
* @Date: 2024/4/18 15:40
*/
private void statisticsDataList(List<GridDiagramVO.LineStatisticsData> statisticsData, List<LineDevGetDTO> lineBaseList, String value, List<RStatOnlinerateD> onlineRateByDevIds, List<RStatIntegrityD> onIntegrityByIds) {
//监测点集合
List<String> lineIds = lineBaseList.stream().filter(x -> value.equals(x.getVoltageLevel())).map(LineDevGetDTO::getPointId).distinct().collect(Collectors.toList());
List<String> onLineNumIds = lineBaseList.stream().filter(x -> value.equals(x.getVoltageLevel())&&1==x.getComFlag()).map(LineDevGetDTO::getPointId).distinct().collect(Collectors.toList());
//终端id集合
List<String> devIds = lineBaseList.stream().filter(x -> value.equals(x.getVoltageLevel())).map(LineDevGetDTO::getDevId).distinct().collect(Collectors.toList());
GridDiagramVO.LineStatisticsData lineStatisticsData = new GridDiagramVO.LineStatisticsData();
lineStatisticsData.setNum(lineIds.size());
lineStatisticsData.setOnLineNum(onLineNumIds.size());
onLineAndIntegrity(lineIds, onIntegrityByIds, devIds, onlineRateByDevIds, lineStatisticsData);
statisticsData.add(lineStatisticsData);
}
private void statisticsDataOtherList(List<GridDiagramVO.LineStatisticsData> statisticsData, List<LineDevGetDTO> lineBaseList, List<RStatOnlinerateD> onlineRateByDevIds, List<RStatIntegrityD> onIntegrityByIds) {
//终端id集合
List<String> devIdsAll = lineBaseList.stream().map(LineDevGetDTO::getDevId).distinct().collect(Collectors.toList());
//监测点集合
List<String> lineIdsAll = lineBaseList.stream().map(LineDevGetDTO::getPointId).distinct().collect(Collectors.toList());
List<String> onLineNumAll = lineBaseList.stream().filter(x -> 1 == x.getComFlag()).map(LineDevGetDTO::getPointId).distinct().collect(Collectors.toList());
GridDiagramVO.LineStatisticsData lineStatisticsData = new GridDiagramVO.LineStatisticsData();
lineStatisticsData.setNum(lineIdsAll.size());
lineStatisticsData.setOnLineNum(onLineNumAll.size());
onLineAndIntegrity(lineIdsAll, onIntegrityByIds, devIdsAll, onlineRateByDevIds, lineStatisticsData);
statisticsData.add(lineStatisticsData);
}
private void gwStatisticsDataList(List<GridDiagramVO.LineStatisticsData> statisticsData, List<LineDevGetDTO> lineBaseList, String value, List<RStatOnlinerateD> onlineRateByDevIds, List<RStatIntegrityD> onIntegrityByIds) {
//监测点集合
List<String> lineIds = lineBaseList.stream().filter(x -> value.equals(x.getVoltageLevel())).filter(x -> 1 == x.getIsUpToGrid()).map(LineDevGetDTO::getPointId).distinct().collect(Collectors.toList());
List<String> onLineNumIds = lineBaseList.stream().filter(x -> value.equals(x.getVoltageLevel())&&1==x.getComFlag()).map(LineDevGetDTO::getPointId).distinct().collect(Collectors.toList());
//终端id集合
List<String> devIds = lineBaseList.stream().filter(x -> value.equals(x.getVoltageLevel())).filter(x -> 1 == x.getIsUpToGrid()).map(LineDevGetDTO::getDevId).distinct().collect(Collectors.toList());
GridDiagramVO.LineStatisticsData lineStatisticsData = new GridDiagramVO.LineStatisticsData();
lineStatisticsData.setNum(lineIds.size());
lineStatisticsData.setOnLineNum(onLineNumIds.size());
onLineAndIntegrity(lineIds, onIntegrityByIds, devIds, onlineRateByDevIds, lineStatisticsData);
statisticsData.add(lineStatisticsData);
}
private void gwStatisticsDataOtherList(List<GridDiagramVO.LineStatisticsData> statisticsData, List<LineDevGetDTO> lineBaseList, List<RStatOnlinerateD> onlineRateByDevIds, List<RStatIntegrityD> onIntegrityByIds) {
//终端id集合
List<String> devIdsAll = lineBaseList.stream().filter(x -> 1 == x.getIsUpToGrid()).map(LineDevGetDTO::getDevId).distinct().collect(Collectors.toList());
//监测点集合
List<String> lineIdsAll = lineBaseList.stream().filter(x -> 1 == x.getIsUpToGrid()).map(LineDevGetDTO::getPointId).distinct().collect(Collectors.toList());
List<String> onLineNumAll = lineBaseList.stream().filter(x -> 1 == x.getComFlag()&&1 == x.getIsUpToGrid()).map(LineDevGetDTO::getPointId).distinct().collect(Collectors.toList());
GridDiagramVO.LineStatisticsData lineStatisticsData = new GridDiagramVO.LineStatisticsData();
lineStatisticsData.setNum(lineIdsAll.size());
lineStatisticsData.setOnLineNum(onLineNumAll.size());
onLineAndIntegrity(lineIdsAll, onIntegrityByIds, devIdsAll, onlineRateByDevIds, lineStatisticsData);
statisticsData.add(lineStatisticsData);
}
private void onLineAndIntegrity(List<String> lineIds, List<RStatIntegrityD> onIntegrityByIds, List<String> devIds, List<RStatOnlinerateD> onlineRateByDevIds, GridDiagramVO.LineStatisticsData lineStatisticsData) {
//监测完整率
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();
lineStatisticsData.setIntegrityRate(NumberUtil.round(realTime * 100 / dueTime, 2).floatValue());
} else {
lineStatisticsData.setIntegrityRate(0.0f);
}
//终端在线率
List<RStatOnlinerateD> onlineRateDS = onlineRateByDevIds.stream().filter(x -> devIds.contains(x.getDevIndex())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(onlineRateDS)) {
double onlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateD::getOnlineMin).sum();
double offlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateD::getOfflineMin).sum();
lineStatisticsData.setOnLineRate(NumberUtil.round(onlineTime * 100 / onlineTime + offlineTime, 2).floatValue());
} else {
lineStatisticsData.setOnLineRate(0.0f);
}
}
@Override
public GridDiagramVO getGridDiagramDev(GridDiagramParam 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.getOrgId()).getData();
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
deptGetLineParam.setDeptId(param.getOrgId());
List<DeptGetChildrenMoreDTO> deptGetChildrenMoreDTOS = commTerminalService.deptGetLine(deptGetLineParam);
Map<String, DeptGetChildrenMoreDTO> deptLineMap = deptGetChildrenMoreDTOS.stream().collect(Collectors.toMap(DeptGetChildrenMoreDTO::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<LineDevGetDTO> lineBaseList = deptLineMap.get(datum.getId()).getLineBaseList();
List<GridDiagramVO.StatisticsData> statisticsData = new ArrayList<>();
List<GridDiagramVO.StatisticsData> gwStatisticsData = new ArrayList<>();
getDevStatisticsData(statisticsData, gwStatisticsData, lineBaseList, voltageIds);
lineStatistics.setData(statisticsData);
gwLineStatistics.setData(gwStatisticsData);
info.add(lineStatistics);
gwInfo.add(gwLineStatistics);
}
}
gridDiagramVO.setInfo(info);
gridDiagramVO.setGwInfo(gwInfo);
return gridDiagramVO;
}
@Override
public Map<String, Long> getGridDiagramDevTendency(GridDiagramParam param, Integer type) {
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(param.getDeviceInfoParam(), Stream.of(0).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList()));
Map<String, Long> map = new LinkedHashMap<>();
DateField dateField;
if (1 == param.getType()) {
dateField = DateField.YEAR;
} else {
dateField = DateField.MONTH;
}
//根据步进单位获取起始日期时间和结束日期时间的时间区间集合
List<DateTime> dateTimes = DateUtil.rangeToList(DateUtil.parse(param.getSearchBeginTime()), DateUtil.parse(param.getSearchEndTime()), dateField);
List<Date> times;
if (4 == type) {
List<String> devIDs = generalDeviceDTOList.stream().flatMap(x -> x.getDeviceIndexes().stream()).distinct().collect(Collectors.toList());
List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>().select(Device::getLoginTime).in(CollUtil.isNotEmpty(devIDs), Device::getId, devIDs).eq(Device::getRunFlag, 0));
times = list.stream().map(x -> Date.from(x.getLoginTime().atStartOfDay(ZoneId.systemDefault()).toInstant())).collect(Collectors.toList());
} else {
List<String> ids;
if (type == 3) {
ids = generalDeviceDTOList.stream().flatMap(x -> x.getSubIndexes().stream()).distinct().collect(Collectors.toList());
} else {
ids = generalDeviceDTOList.stream().flatMap(x -> x.getLineIndexes().stream()).distinct().collect(Collectors.toList());
}
List<Line> list = lineService.list(new LambdaQueryWrapper<Line>().in(CollUtil.isNotEmpty(ids), Line::getId, ids).eq(Line::getState, DataStateEnum.ENABLE.getCode()).eq(Line::getLevel, type));
times = list.stream().map(x -> Date.from(x.getCreateTime().atZone(ZoneId.systemDefault()).toInstant())).collect(Collectors.toList());
}
for (DateTime dateTime : dateTimes) {
if (1 == param.getType()) {
long count = times.stream().filter(x -> DateUtil.isIn(x, DateUtil.beginOfYear(dateTime), DateUtil.endOfYear(dateTime))).count();
map.put(dateTime.toString().substring(0, 4), count);
} else {
long count = times.stream().filter(x -> DateUtil.isIn(x, DateUtil.beginOfMonth(dateTime), DateUtil.endOfMonth(dateTime))).count();
map.put(dateTime.toString().substring(0, 7), count);
}
}
return map;
}
@Override
public List<GridDiagramVO.DeviceData> getGridDiagramDevData(GridDiagramParam param) {
// 获取所有数据
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(param.getDeviceInfoParam(), Stream.of(0).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList()));
List<String> devIDs = generalDeviceDTOList.stream().flatMap(x -> x.getDeviceIndexes().stream()).distinct().collect(Collectors.toList());
List<RStatOnlinerateD> onlinerateDS = onLineRateDMapper.selectList(new QueryWrapper<RStatOnlinerateD>()
.select("sum(online_min) as `onlineMin`,sum(offline_min) as offlineMin,dev_index as devIndex")
.in(CollUtil.isNotEmpty(devIDs), "dev_index", devIDs)
.ge(StrUtil.isNotBlank(param.getSearchBeginTime()), "time_id", DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime())))
.le(StrUtil.isNotBlank(param.getSearchEndTime()), "time_id", DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime())))
.groupBy("dev_index"));
List<GridDiagramVO.DeviceData> info=new ArrayList<>();
GridDiagramVO.DeviceData data;
for (GeneralDeviceDTO generalDeviceDTO : generalDeviceDTOList) {
data=new GridDiagramVO.DeviceData();
data.setOrgId(generalDeviceDTO.getIndex());
data.setOrgName(generalDeviceDTO.getName());
data.setDevCount(generalDeviceDTO.getDeviceIndexes().stream().distinct().count());
List<RStatOnlinerateD> onlineRateDS = onlinerateDS.stream().filter(x -> generalDeviceDTO.getDeviceIndexes().contains(x.getDevIndex())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(onlineRateDS)) {
double onlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateD::getOnlineMin).sum();
double offlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateD::getOfflineMin).sum();
data.setOnlineEvaluate(NumberUtil.round(onlineTime * 100 / onlineTime + offlineTime, 2).doubleValue());
} else {
data.setOnlineEvaluate(0.0);
}
info.add(data);
}
return info;
}
private void getDevStatisticsData(List<GridDiagramVO.StatisticsData> statisticsData, List<GridDiagramVO.StatisticsData> gwStatisticsData, List<LineDevGetDTO> lineBaseList, List<String> voltageIds) {
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;
//todo 0
long count = lineBaseList.stream().filter(x -> getIsUpToGrid(finalI, x, voltageId)).distinct().count();
data.setNumOne(count);
long count1 = lineBaseList.stream().filter(x -> getIsUpToGrid(finalI, x, voltageId)).filter(x -> 1 == x.getComFlag()).map(LineDevGetDTO::getDevId).distinct().count();
data.setNumTwo(count1);
if (i == 0) {
countOne += count;
countTow += count1;
statisticsData.add(data);
} else {
gwCountOne += count;
gwCountTow += count1;
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, LineDevGetDTO lineDevGetDTO, String voltageId) {
//0全部 1国网上送监测点
if (type == 0) {
return voltageId.equals(lineDevGetDTO.getVoltageLevel());
} else {
return voltageId.equals(lineDevGetDTO.getVoltageLevel()) && 1 == lineDevGetDTO.getIsUpToGrid();
}
}
}

View File

@@ -40,9 +40,12 @@ import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataTypeEnum;
import com.njcn.system.pojo.po.Area;
import com.njcn.system.pojo.po.DictData;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.dto.DeptDTO;
import com.njcn.web.pojo.vo.LineDataVO;
import com.njcn.web.utils.GeneralUtil;
import com.njcn.web.utils.RequestUtil;
import com.njcn.web.utils.WebUtil;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@@ -90,6 +93,7 @@ public class LineServiceImpl extends ServiceImpl<LineMapper, Line> implements Li
private final PqsCommunicateMapper pqsCommunicateMapper;
private final TerminalMaintainMapper terminalMaintainMapper;
private final DeptFeignClient deptFeignClient;
@Override
public LineDetailDataVO getLineDetailData(String id) {
@@ -471,10 +475,15 @@ public class LineServiceImpl extends ServiceImpl<LineMapper, Line> implements Li
@Override
public Page<HalfReportVO> halfReport(TerminalMainQueryParam param) {
List<String> ids=new ArrayList<>();
if(StrUtil.isNotBlank(param.getOrgId())){
List<DeptDTO> data = deptFeignClient.getDeptDescendantIndexes(param.getOrgId(), WebUtil.filterDeptType()).getData();
ids.addAll(data.stream().map(DeptDTO::getId).collect(Collectors.toList()));
}
Page<LineMarkVO> page = new Page<>(param.getPageNum(), param.getPageSize());
param.setSearchBeginTime(DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime())).toString());
param.setSearchEndTime(DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime())).toString());
return this.baseMapper.selectHalfReport(page,param);
return this.baseMapper.selectHalfReport(page,param,ids);
}
@Override