冀北电网一张图,变电站、终端和监测点信息接口编写
This commit is contained in:
@@ -40,9 +40,19 @@ public class SubGetBase implements Serializable {
|
||||
*/
|
||||
private String orgName;
|
||||
|
||||
/**
|
||||
* 是否上送国网是否是上送国网监测点,0-否 1-是
|
||||
*/
|
||||
private Integer isUpToGrid;
|
||||
|
||||
/**
|
||||
* 所有子级监测点信息
|
||||
*/
|
||||
private List<String> unitChildrenList;
|
||||
|
||||
/**
|
||||
* 所有子级国网监测点信息
|
||||
*/
|
||||
private List<String> gwUnitChildrenList;
|
||||
|
||||
}
|
||||
|
||||
@@ -29,5 +29,7 @@ public class TerminalGetBase {
|
||||
private String subName;
|
||||
|
||||
private String voltageLevel;
|
||||
|
||||
private Integer monitorFlag;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,9 @@
|
||||
#{item.id}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="pmsDeviceInfoParam.upToGrid!=null">
|
||||
AND pms_monitor.Is_Up_To_Grid = #{pmsDeviceInfoParam.upToGrid}
|
||||
</if>
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
/**
|
||||
* 监测点数据完整性
|
||||
* 数据单位
|
||||
* @author cdf
|
||||
* @date 2023/6/7
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.njcn.device.pq.pojo.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 类的介绍:
|
||||
*
|
||||
* @author xuyang
|
||||
* @version 1.0.0
|
||||
* @createTime 2022/4/25 10:40
|
||||
*/
|
||||
@Data
|
||||
public class PollutionGridDiagramDTO extends PollutionSubstationDTO{
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("供电公司")
|
||||
private String powerCompany;
|
||||
|
||||
@ApiModelProperty("数据")
|
||||
private Double dataV = 3.14159;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.njcn.device.pq.pojo.param;
|
||||
|
||||
import com.njcn.web.pojo.param.BaseParam;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author wr
|
||||
* @description 冀北电网一张图入参
|
||||
* @date 2024/4/16 13:54
|
||||
*/
|
||||
@Data
|
||||
public class GridDiagramParam extends BaseParam {
|
||||
|
||||
|
||||
@ApiModelProperty(value = "单位id")
|
||||
private String orgId;
|
||||
|
||||
@ApiModelProperty(name="type",value="类型(1年 2季度 3月份 4周 5日)")
|
||||
private Integer type;
|
||||
|
||||
@ApiModelProperty(name="deviceInfoParam",value="")
|
||||
private DeviceInfoParam deviceInfoParam;
|
||||
}
|
||||
@@ -26,4 +26,8 @@ public class TerminalMainQueryParam extends BaseParam {
|
||||
private String lineGrade;
|
||||
@ApiModelProperty(name = "装置id")
|
||||
private String devId;
|
||||
@ApiModelProperty(name = "是否是国网上送监测点 1:是 0:否")
|
||||
private Integer monitorFlag;
|
||||
@ApiModelProperty(name = "单位id")
|
||||
private String orgId;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.njcn.device.pq.pojo.po;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
|
||||
import com.njcn.db.bo.BaseEntity;
|
||||
@@ -32,5 +33,6 @@ public class RStatOnlinerateD {
|
||||
|
||||
private Integer offlineMin;
|
||||
|
||||
|
||||
@TableField(exist = false)
|
||||
private Float onlineRate;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
package com.njcn.device.pq.pojo.vo;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author wr
|
||||
* @description
|
||||
* @date 2024/4/16 14:55
|
||||
*/
|
||||
@Data
|
||||
public class GridDiagramVO {
|
||||
|
||||
|
||||
@ApiModelProperty(name = "info", value = "全部监测点信息")
|
||||
private List<?> info;
|
||||
|
||||
@ApiModelProperty(name = "gwInfo", value = "国网监测点信息信息")
|
||||
private List<?> gwInfo;
|
||||
|
||||
@Data
|
||||
public static class LineStatistics {
|
||||
@ApiModelProperty(name = "orgId", value = "单位id")
|
||||
private String orgId;
|
||||
|
||||
@ApiModelProperty(name = "orgName", value = "单位名称")
|
||||
private String orgName;
|
||||
|
||||
@ApiModelProperty(name = "data", value = "数据")
|
||||
private List<?> data;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class LineStatisticsData {
|
||||
|
||||
@ApiModelProperty(name = "num", value = "监测点个数")
|
||||
private Integer num;
|
||||
|
||||
@ApiModelProperty(name = "num", value = "在线监测点数")
|
||||
private Integer onLineNum;
|
||||
|
||||
@ApiModelProperty(name = "onLineRate", value = "数据在线率")
|
||||
private Float onLineRate;
|
||||
|
||||
@ApiModelProperty(name = "integrityRate", value = "数据完整率")
|
||||
private Float integrityRate;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class StatisticsData {
|
||||
|
||||
@ApiModelProperty(name = "numOne", value = "数据")
|
||||
private Long numOne;
|
||||
|
||||
@ApiModelProperty(name = "numTwo", value = "数据")
|
||||
private Long numTwo;
|
||||
|
||||
}
|
||||
@Data
|
||||
public static class DeviceData {
|
||||
|
||||
@ApiModelProperty(name = "orgId", value = "单位id")
|
||||
private String orgId;
|
||||
|
||||
@ApiModelProperty(name = "orgName", value = "单位名称")
|
||||
private String orgName;
|
||||
|
||||
@ApiModelProperty(name = "devCount", value = "终端数量")
|
||||
private Long devCount;
|
||||
|
||||
@ApiModelProperty(name = "onlineEvaluate", value = "终端在线率评价")
|
||||
private Double onlineEvaluate;
|
||||
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class LineData {
|
||||
|
||||
@ApiModelProperty(name = "orgId", value = "单位id")
|
||||
private String orgId;
|
||||
|
||||
@ApiModelProperty(name = "orgName", value = "单位名称")
|
||||
private String orgName;
|
||||
|
||||
@ApiModelProperty(name = "onLineRate", value = "数据在线率")
|
||||
private Float onLineRate;
|
||||
|
||||
@ApiModelProperty(name = "integrityRate", value = "数据完整率")
|
||||
private Float integrityRate;
|
||||
|
||||
@ApiModelProperty(name = "outOfStandardRate", value = "超标监测点占比")
|
||||
private Float outOfStandardRate;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -41,6 +41,9 @@ public class HalfReportVO implements Serializable {
|
||||
@ApiModelProperty("监测点通讯状态")
|
||||
private String comFlag;
|
||||
|
||||
@ApiModelProperty("监测点电压等级")
|
||||
private String voltageScale;
|
||||
|
||||
@ApiModelProperty("投运时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime loginTime;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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获取监测点信息
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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> {
|
||||
|
||||
}
|
||||
@@ -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
|
||||
);
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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 <= #{endTime}
|
||||
</if>
|
||||
</where>
|
||||
GROUP BY
|
||||
substation_id
|
||||
ORDER BY `data` DESC,dataV DESC
|
||||
|
||||
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -576,9 +576,12 @@ public enum DicDataEnum {
|
||||
SPECIAL_USER("专变用户","special_user"),//专变用户
|
||||
PUBLIC_USER("公变用户","public_user"),// ,公变用户
|
||||
|
||||
/**pms******************************end*/
|
||||
|
||||
|
||||
/**pms******************************end*/
|
||||
//pq干扰源类型
|
||||
PQ_ELE_RAILWAYS("电气化铁路","Ele_Railways"),
|
||||
PQ_POWER_STATION("光伏电站","Power_Station"),
|
||||
PQ_WIND_FARMS("风电场","Electrolytic_Load"),
|
||||
;
|
||||
|
||||
private final String name;
|
||||
|
||||
Reference in New Issue
Block a user