Merge remote-tracking branch 'origin/liaoning' into liaoning

This commit is contained in:
wr
2025-04-27 15:53:53 +08:00
20 changed files with 364 additions and 87 deletions

View File

@@ -20,7 +20,7 @@ public enum LineBaseEnum {
PROVINCE_LEVEL(1, "省份"),
GD_LEVEL(2, "供电公司"),
SUB_LEVEL(3, "变电站"),
DEVICE_LEVEL(4, "设备"),
DEVICE_LEVEL(4, "终端"),
SUB_V_LEVEL(5, "母线"),
LINE_LEVEL(6, "监测点"),
USER_LEVEL(7,"用户"),

View File

@@ -0,0 +1,48 @@
package com.njcn.device.pq.pojo.dto;
import lombok.Data;
import java.util.List;
/**
* @Author: cdf
* @CreateTime: 2025-04-25
* @Description: 区分电网侧非电网侧信息台账信息
*/
@Data
public class MonitorPowerDTO {
private List<MonitorBase> userMonitorList;
private List<MonitorBase> powerMonitorList;
private List<MonitorBase> userStationList;
private List<MonitorBase> powerStationList;
@Data
public static class MonitorBase{
private String id;
private String pid;
private String pids;
private String name;
private Integer sort;
private String objId;
private String bigObjType;
private String smallObjType;
}
}

View File

@@ -24,6 +24,8 @@ public class OverLimitLineDTO {
private String lineObjectName;
private String objId;
private String monitorNumber;
private String subName;

View File

@@ -56,6 +56,10 @@ public class DeviceParam {
@NotNull(message = "前置机索引不能为空")
private String nodeId;
@ApiModelProperty(name = "nodeId",value = "所属前置机机进程",required = true)
@NotNull(message = "所属前置机机进程不能为空")
private Integer processNum;
@ApiModelProperty(name = "series",value = "装置识别码采用3ds加密")
private String series;

View File

@@ -59,6 +59,13 @@ public class NodeParam {
@NotNull(message = "前置机支持最大装置数不可为空")
private Integer nodeDevNum;
/**
* 前置机支持最大进程数量
*/
@ApiModelProperty(name = "nodeDevNum",value = "前置机支持最大进程数量")
@NotNull(message = "前置机支持最大进程数量")
private Integer maxProcessNum;
/**
* 排序
*/

View File

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -131,6 +132,8 @@ public class DeviceVO implements Serializable {
@ApiModelProperty(name = "sort",value = "排序",required = true)
private Integer sort;
@ApiModelProperty(value = "所属前置机机进程")
private Integer processNum;
@ApiModelProperty(name = "subVoltageVOList",value = "母线集合")

View File

@@ -738,7 +738,7 @@
A1.Name lineName,
C1.Name lineScale,
C2.Name loadType,
D.Obj_Name lineObjectName,
D.Obj_Id objId,
D.Monitor_Id monitorNumber,
A4.Name subName,
C3.Name subScale,

View File

@@ -25,6 +25,7 @@ import com.njcn.device.pq.enums.LineBaseEnum;
import com.njcn.device.pq.mapper.*;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.biz.pojo.dto.PollutionLineDTO;
import com.njcn.device.pq.pojo.dto.MonitorPowerDTO;
import com.njcn.device.pq.pojo.dto.PollutionParamDTO;
import com.njcn.device.pq.pojo.dto.PollutionSubstationDTO;
import com.njcn.device.pq.pojo.param.*;
@@ -772,6 +773,8 @@ public class LineServiceImpl extends ServiceImpl<LineMapper, Line> implements Li
return pollutionLineInfoDTOList;
}
@Override
public List<Overlimit> getOverLimitByList(PollutionParamDTO pollutionParamDTO) {
return overlimitMapper.selectBatchIds(pollutionParamDTO.getLineList());

View File

@@ -290,37 +290,37 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
coderM3d(deviceDetail, false);
deviceMapper.insert(deviceDetail);
//添加装置进程号
Node nodeById = nodeService.getNodeById(deviceDetail.getNodeId());
List<Device> devices = deviceMapper.selectList(new QueryWrapper<Device>().lambda().eq(Device::getNodeId, deviceDetail.getNodeId()));
Integer maxNodeDevNum = nodeById.getNodeDevNum();
Integer maxProcessNum = nodeById.getMaxProcessNum();
if (devices.size() >= maxNodeDevNum) {
throw new BusinessException(PvDeviceResponseEnum.OVER_LIMIT);
}
List<String> deviceIdList = devices.stream().map(Device::getId).collect(Collectors.toList());
List<DeviceProcess> deviceProcessList = deviceProcessService.lambdaQuery().in(DeviceProcess::getId, deviceIdList).list();
Map<Integer, Integer> processCountMap = null;
if (Objects.nonNull(maxProcessNum)) {
processCountMap = new HashMap<>();
for (int i = 0; i < maxProcessNum; i++) {
Integer processNum = i + 1;
long count = deviceProcessList.stream().filter(temp -> Objects.equals(temp.getProcessNo(), processNum)).count();
Integer processCount = Math.toIntExact(count);
processCountMap.put(processNum, processCount);
}
}else{
processCountMap = new HashMap<>();
}
//获取数量最少的线程号
Optional<Integer> minKey = processCountMap.entrySet()
.stream()
.min(Comparator.comparingInt(e -> e.getValue()))
.map(Map.Entry::getKey);
// Node nodeById = nodeService.getNodeById(deviceDetail.getNodeId());
// List<Device> devices = deviceMapper.selectList(new QueryWrapper<Device>().lambda().eq(Device::getNodeId, deviceDetail.getNodeId()));
// Integer maxNodeDevNum = nodeById.getNodeDevNum();
// Integer maxProcessNum = nodeById.getMaxProcessNum();
// if (devices.size() >= maxNodeDevNum) {
// throw new BusinessException(PvDeviceResponseEnum.OVER_LIMIT);
// }
// List<String> deviceIdList = devices.stream().map(Device::getId).collect(Collectors.toList());
// List<DeviceProcess> deviceProcessList = deviceProcessService.lambdaQuery().in(DeviceProcess::getId, deviceIdList).list();
// Map<Integer, Integer> processCountMap = null;
// if (Objects.nonNull(maxProcessNum)) {
// processCountMap = new HashMap<>();
// for (int i = 0; i < maxProcessNum; i++) {
// Integer processNum = i + 1;
// long count = deviceProcessList.stream().filter(temp -> Objects.equals(temp.getProcessNo(), processNum)).count();
// Integer processCount = Math.toIntExact(count);
// processCountMap.put(processNum, processCount);
// }
//
// }else{
// processCountMap = new HashMap<>();
// }
//
// //获取数量最少的线程号
// Optional<Integer> minKey = processCountMap.entrySet()
// .stream()
// .min(Comparator.comparingInt(e -> e.getValue()))
// .map(Map.Entry::getKey);
DeviceProcess deviceProcess = new DeviceProcess();
deviceProcess.setId(device.getId());
deviceProcess.setProcessNo(minKey.orElse(1));
deviceProcess.setProcessNo(deviceParam.getProcessNum());
deviceProcessService.saveOrUpdate(deviceProcess);
//装置功能
List<DictData> funList = dicDataFeignClient.getDicDataByTypeName(DicDataTypeEnum.DEV_FUN.getName()).getData();
@@ -469,8 +469,7 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
LineDetail lineDetail = new LineDetail();
BeanUtils.copyProperties(lineParam, lineDetail);
lineDetail.setId(line.getId());
//判断国网监测点id
//判断国网监测点id
if (StrUtil.isNotBlank(lineDetail.getMonitorId())) {
lineDetail.setMonitorFlag(1);
} else {
@@ -1224,6 +1223,10 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
//decoderM3d(deviceDetail);
BeanUtils.copyProperties(deviceDetail, deviceVO);
deviceVO.setDevIndex(obj.getId());
DeviceProcess deviceProcess = deviceProcessService.lambdaQuery().eq(DeviceProcess::getId, obj.getId()).one();
if(Objects.nonNull(deviceProcess)){
deviceVO.setProcessNum(deviceProcess.getProcessNo());
}
lineLambdaQueryWrapper.clear();
lineLambdaQueryWrapper.eq(Line::getPid, obj.getId())
@@ -1320,6 +1323,11 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
//decoderM3d(deviceDetail);
BeanUtils.copyProperties(deviceDetail, deviceVO);
deviceVO.setDevIndex(device.getId());
DeviceProcess deviceProcess = deviceProcessService.lambdaQuery().eq(DeviceProcess::getId, device.getId()).one();
if(Objects.nonNull(deviceProcess)){
deviceVO.setProcessNum(deviceProcess.getProcessNo());
}
deviceVO.setSubVoltageVOList(subvList);
deviceVOList.add(deviceVO);
@@ -1371,6 +1379,11 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
//decoderM3d(deviceDetail);
BeanUtils.copyProperties(deviceDetail, deviceVO);
deviceVO.setDevIndex(device.getId());
DeviceProcess deviceProcess = deviceProcessService.lambdaQuery().eq(DeviceProcess::getId, device.getId()).one();
if(Objects.nonNull(deviceProcess)){
deviceVO.setProcessNum(deviceProcess.getProcessNo());
}
deviceVO.setSubVoltageVOList(subVoltageVOS);
deviceVOList.add(deviceVO);
@@ -1508,10 +1521,6 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
deleteMonitoringPoints(pointIds,logsList);
// 2. 通知设备重启
/* String[] pids = getById(busbarId).getPids().split(",");
if (pids.length > 4) {
askRestartDevice(pids[4], DeviceRebootType.LEDGER_MODIFY);
}*/
}
private void deleteMonitoringPoints(List<String> pointIds,List<Line> logsList) {

View File

@@ -230,6 +230,12 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
if (CollectionUtil.isNotEmpty(generalDeviceDTOList)) {
// 创建集合
List<TerminalTree> taiZhang = new ArrayList<>();
// 获取用户
UserReportParam userReportParam = new UserReportParam();
List<UserLedgerVO> userReportPOList = userLedgerFeignClient.selectUserList(userReportParam).getData();
userReportPOList = userReportPOList.stream().filter(it -> StrUtil.isNotBlank(it.getStationId())).collect(Collectors.toList());
Map<String, UserLedgerVO> userMap = userReportPOList.stream().collect(Collectors.toMap(UserLedgerVO::getId, Function.identity()));
// 遍历集合
for (GeneralDeviceDTO generalDeviceDTO : generalDeviceDTOList) {
// 创建实体类
@@ -253,10 +259,6 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
Map<String,List<TerminalTree>> temMap = new HashMap<>();
if(CollUtil.isNotEmpty(userLineList)) {
Map<String, List<TerminalTree>> objMap = userLineList.stream().collect(Collectors.groupingBy(TerminalTree::getObjId));
UserReportParam userReportParam = new UserReportParam();
List<UserLedgerVO> userReportPOList = userLedgerFeignClient.selectUserList(userReportParam).getData();
userReportPOList = userReportPOList.stream().filter(it -> StrUtil.isNotBlank(it.getStationId())).collect(Collectors.toList());
Map<String, UserLedgerVO> userMap = userReportPOList.stream().collect(Collectors.toMap(UserLedgerVO::getId, Function.identity()));
List<TerminalTree> temList = new ArrayList<>();
objMap.forEach((objId, monitorList) -> {
UserLedgerVO userLedgerVO = userMap.get(objId);
@@ -275,7 +277,6 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
tree.setPids(String.valueOf(devSize));
temList.add(tree);
});
temMap = temList.stream().collect(Collectors.groupingBy(TerminalTree::getPid));
}

View File

@@ -20,4 +20,7 @@ public class HarmonicPublicParam extends DeviceInfoParam.BusinessParam{
@ApiModelProperty(name = "type", value = "区分(0:pq 1:pms)")
private Integer type=0;
@ApiModelProperty(name = "stationType", value = "(0:变电站 1:非变电站场站)")
private Integer stationType;
}

View File

@@ -35,7 +35,13 @@ public class SteadyQualifyVO implements Serializable {
* 父级id集合
*/
@ApiModelProperty("父级id集合")
private String pidS;
private String pids;
@ApiModelProperty("排序")
private Integer sort;
@ApiModelProperty("监测对象id")
private String objId;
/**
* 电压等级
*/

View File

@@ -112,12 +112,20 @@
<artifactId>cs-device-api</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.njcn.platform</groupId>
<artifactId>data-processing-api</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>supervision-api</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

View File

@@ -50,7 +50,19 @@ public class PollutionSubstationController extends BaseController {
public HttpResult<List<PollutionSubstationVO>> getPollutionSubstationData(@RequestBody @Validated PollutionSubstationQuryParam pollutionSubstationQuryParam) {
String methodDescribe = getMethodDescribe ("getPollutionSubstationData");
LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, pollutionSubstationQuryParam);
List<PollutionSubstationVO> list = pollutionSubstationService.getPollutionSubstationData (pollutionSubstationQuryParam);
List<PollutionSubstationVO> list = pollutionSubstationService.getPollutionSubstationData(pollutionSubstationQuryParam);
return HttpResultUtil.assembleCommonResponseResult (CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getEnergyStationPollution")
@ApiOperation("新能源场站污区图")
@ApiImplicitParam(name = "pollutionSubstationQuryParam", value = "污染指标查询参数", required = true)
public HttpResult<List<PollutionSubstationVO>> getEnergyStationPollution(@RequestBody @Validated PollutionSubstationQuryParam pollutionSubstationQuryParam) {
String methodDescribe = getMethodDescribe ("getEnergyStationPollution");
List<PollutionSubstationVO> list = pollutionSubstationService.getEnergyStationPollution(pollutionSubstationQuryParam);
return HttpResultUtil.assembleCommonResponseResult (CommonResponseEnum.SUCCESS, list, methodDescribe);
}

View File

@@ -9,12 +9,15 @@
A.Pid,
A.Pids,
A.Name name,
A.sort,
C.Name voltageLevel,
D.IP networkParam,
C1.Name factoryName,
A.Name lineName
A.Name lineName,
detail.obj_id
FROM
pq_line A,
pq_line_detail detail,
pq_voltage B,
sys_dict_data C,
pq_device D,
@@ -25,6 +28,7 @@
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
AND A.id = detail.id
AND A.Pid = B.Id
AND B.Scale = C.Id
AND A.Pid = A1.Id
@@ -37,7 +41,8 @@
Id,
Pid,
Pids,
Name
Name,
sort
FROM
pq_line
WHERE

View File

@@ -36,6 +36,10 @@ public interface PollutionSubstationService extends IService<RStatPollutionSubst
* @Date: 2022/10/13
*/
List<PollutionSubstationVO> getPollutionSubstationData(PollutionSubstationQuryParam pollutionSubstationQuryParam);
List<PollutionSubstationVO> getEnergyStationPollution(PollutionSubstationQuryParam pollutionSubstationQuryParam);
/**
* @Description: getDeptSubstationRelations
* @Param: [param]

View File

@@ -37,6 +37,9 @@ import com.njcn.harmonic.pojo.vo.OverAreaVO;
import com.njcn.harmonic.pojo.vo.WarningSubstationVO;
import com.njcn.harmonic.service.IAnalyzeService;
import com.njcn.poi.excel.ExcelUtil;
import com.njcn.supervision.api.UserLedgerFeignClient;
import com.njcn.supervision.pojo.param.user.UserReportParam;
import com.njcn.supervision.pojo.vo.user.UserLedgerVO;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.enums.DicDataTypeEnum;
@@ -83,6 +86,8 @@ public class AnalyzeServiceImpl implements IAnalyzeService {
private final EventDetailFeignClient eventDetailFeignClient;
private final DicDataFeignClient dicDataFeignClient;
private final UserLedgerFeignClient userLedgerFeignClient;
@Override
public Page<OverAreaLimitVO> getAreaData(OverAreaVO param) {
Page<OverAreaLimitVO> page = new Page<>();
@@ -317,10 +322,17 @@ public class AnalyzeServiceImpl implements IAnalyzeService {
.in("r_stat_limit_target_d.my_index", list).between("r_stat_limit_target_d.time_id", DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime())),
DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime()))));
Map<String, List<RStatLimitTargetDPO>> rsMap = rStatLimitTargetDPOS.stream().collect(Collectors.groupingBy(RStatLimitTargetDPO::getLineId));
List<UserLedgerVO> userLedgerVOList = userLedgerFeignClient.selectUserList(new UserReportParam()).getData();
Map<String,UserLedgerVO> userLedgerVOMap = userLedgerVOList.stream().collect(Collectors.toMap(UserLedgerVO::getId,Function.identity()));
for (OverLimitLineDTO vo : overLimitLineList) {
MonitorOverLimitVO monitorOverLimitVO = new MonitorOverLimitVO();
BeanUtil.copyProperties(vo, monitorOverLimitVO);
MonitorOverLimitVO source = monMap.get(vo.getId()).get(0);
UserLedgerVO userLedgerVO = userLedgerVOMap.getOrDefault(vo.getObjId(),null);
monitorOverLimitVO.setLineObjectName(Objects.nonNull(userLedgerVO)?userLedgerVO.getProjectName():"/");
monitorOverLimitVO.setOverDay(source.getOverDay());
monitorOverLimitVO.setVolDevOverDay(source.getVolDevOverDay());
monitorOverLimitVO.setFreqOverDay(source.getFreqOverDay());

View File

@@ -15,6 +15,7 @@ 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.enums.RunFlagEnum;
import com.njcn.device.biz.pojo.dto.*;
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
import com.njcn.device.pms.api.MonitorClient;
@@ -28,9 +29,11 @@ import com.njcn.device.pms.pojo.po.Monitor;
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.enums.LineBaseEnum;
import com.njcn.device.pq.pojo.dto.*;
import com.njcn.device.pq.pojo.param.GridDiagramParam;
import com.njcn.device.pq.pojo.param.LineBaseQueryParam;
import com.njcn.device.pq.pojo.po.Line;
import com.njcn.device.pq.pojo.po.LineDetail;
import com.njcn.device.pq.pojo.vo.GridDiagramVO;
import com.njcn.harmonic.constant.Param;
@@ -45,6 +48,10 @@ import com.njcn.harmonic.pojo.vo.PollutionSubstationVO;
import com.njcn.harmonic.pojo.vo.PollutionVO;
import com.njcn.harmonic.pojo.vo.SubstationVo;
import com.njcn.harmonic.service.PollutionSubstationService;
import com.njcn.supervision.api.UserLedgerFeignClient;
import com.njcn.supervision.pojo.param.user.UserReportParam;
import com.njcn.supervision.pojo.vo.user.NewUserReportVO;
import com.njcn.supervision.pojo.vo.user.UserLedgerVO;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.user.api.DeptFeignClient;
@@ -111,6 +118,8 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
private final DicDataFeignClient dicDataFeignClient;
private final RStatLimitRateDMapper rStatLimitRateDMapper;
private final UserLedgerFeignClient userLedgerFeignClient;
/**
* @param pollutionSubstationQuryParam
* @Description: getPollutionSubstationData
@@ -186,6 +195,32 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
return result;
}
@Override
public List<PollutionSubstationVO> getEnergyStationPollution(PollutionSubstationQuryParam pollutionSubstationQuryParam) {
List<PollutionSubstationVO> result = new ArrayList<>();
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
deptGetLineParam.setDeptId(pollutionSubstationQuryParam.getDeptIndex());
deptGetLineParam.setLineRunFlag(RunFlagEnum.RUNNING.getStatus());
List<DeptGetChildrenMoreDTO> deptLineList = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData();
if(CollUtil.isNotEmpty(deptLineList)){
UserReportParam userReportParam = new UserReportParam();
List<UserLedgerVO> userLedgerList = userLedgerFeignClient.selectUserList(userReportParam).getData();
Map<String,UserLedgerVO> userMap = userLedgerList.stream().collect(Collectors.toMap(UserLedgerVO::getId,Function.identity()));
for(DeptGetChildrenMoreDTO dto : deptLineList){
List<LineDevGetDTO> monitorList = dto.getLineBaseList();
if(CollUtil.isEmpty(monitorList)){
continue;
}
List<String> objIds = monitorList.stream().map(LineDevGetDTO::getObjId).distinct().collect(Collectors.toList());
//List<UserLedgerVO>userLedgerList.stream().filter(it->objIds.contains(it.getId())).collect(Collectors.toList());
}
}
return result;
}
/**
* @Description: getDeptSubstationRelations
* @Param: [param]
@@ -201,8 +236,12 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
if (StringUtils.isBlank(RequestUtil.getDeptIndex())) {
return list;
}
List<UserLedgerVO> userLedgerVOList = userLedgerFeignClient.selectUserList(new UserReportParam()).getData();
Map<String,UserLedgerVO> userLedgerVOMap = userLedgerVOList.stream().collect(Collectors.toMap(UserLedgerVO::getId,Function.identity()));
if (harmonicPublicParam.getType() != 0) {
PmsDeviceInfoParam pmsDeviceInfoParam = new PmsDeviceInfoParam();
/* PmsDeviceInfoParam pmsDeviceInfoParam = new PmsDeviceInfoParam();
pmsDeviceInfoParam.setDeptIndex(harmonicPublicParam.getDeptIndex());
//获取统计类型
pmsDeviceInfoParam.setStatisticalType(harmonicPublicParam.getStatisticalType());
@@ -246,7 +285,7 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
pollutionVO.setChildren(powersVO);
}
list.add(pollutionVO);
});
});*/
} else {
harmonicPublicParam.setServerName(generalInfo.getMicroServiceName());
@@ -264,18 +303,48 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
pollutionVO.setName(name + "\n(" + temp.getLineIndexes().size() + ")");
pollutionVO.setData(3.14159);
setData(harmonicPublicParam, pollutionType, searchBeginTime, harmonicPublicParam.getSearchEndTime(), pollutionVO, detpid);
List<PollutionVO> subPollutionVO = new ArrayList<>();
subIndexes.forEach(subIndex -> {
PollutionVO pollutionsubVO = new PollutionVO();
PollutionSubstationDTO pollutionSubstationDTO = lineFeignClient.getSubstationInfo(subIndex).getData();
String id = pollutionSubstationDTO.getId();
pollutionsubVO.setId(id);
pollutionsubVO.setName(pollutionSubstationDTO.getName());
pollutionsubVO.setPid(temp.getIndex());
pollutionsubVO.setData(3.14159);
setSubData(harmonicPublicParam, pollutionType, searchBeginTime, harmonicPublicParam.getSearchEndTime(), pollutionsubVO, id);
subPollutionVO.add(pollutionsubVO);
});
List<LineDetail> lineDetailList = lineFeignClient.getLineDetail(temp.getLineIndexes()).getData();
if(CollUtil.isNotEmpty(lineDetailList)){
List<LineDetail> userLedgerList = lineDetailList.stream().filter(it->StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList());
List<LineDetail> powerLedgerList = lineDetailList.stream().filter(it->StrUtil.isBlank(it.getObjId())).collect(Collectors.toList());
if(CollUtil.isNotEmpty(userLedgerList)){
List<String> objIds = userLedgerList.stream().map(LineDetail::getObjId).distinct().collect(Collectors.toList());
objIds.forEach(obj->{
PollutionVO pollutionsubVO = new PollutionVO();
if(userLedgerVOMap.containsKey(obj)){
UserLedgerVO userLedgerVO = userLedgerVOMap.get(obj);
pollutionsubVO.setId(userLedgerVO.getId());
pollutionsubVO.setName(userLedgerVO.getProjectName());
pollutionsubVO.setPid(temp.getIndex());
pollutionsubVO.setData(3.14159);
setSubData(harmonicPublicParam, pollutionType, searchBeginTime, harmonicPublicParam.getSearchEndTime(), pollutionsubVO, userLedgerVO.getId());
subPollutionVO.add(pollutionsubVO);
}
});
}
if(CollUtil.isNotEmpty(powerLedgerList)){
List<String> ids = powerLedgerList.stream().map(LineDetail::getId).collect(Collectors.toList());
List<Line> lineList = lineFeignClient.getBaseLineList(ids).getData();
List<String> subIds = lineList.stream().map(it->it.getPids().split(StrUtil.COMMA)[LineBaseEnum.SUB_LEVEL.getCode()]).distinct().collect(Collectors.toList());
List<Line> subList = lineFeignClient.getBaseLineList(subIds).getData();
subList.forEach(station->{
PollutionVO pollutionsubVO = new PollutionVO();
pollutionsubVO.setId(station.getId());
pollutionsubVO.setName(station.getName());
pollutionsubVO.setPid(temp.getIndex());
pollutionsubVO.setData(3.14159);
setSubData(harmonicPublicParam, pollutionType, searchBeginTime, harmonicPublicParam.getSearchEndTime(), pollutionsubVO, station.getId());
subPollutionVO.add(pollutionsubVO);
});
}
}
pollutionVO.setChildren(subPollutionVO);
list.add(pollutionVO);
}

View File

@@ -10,6 +10,7 @@ import com.njcn.device.pq.api.GeneralDeviceInfoClient;
import com.njcn.device.pq.enums.LineBaseEnum;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.vo.TerminalTree;
import com.njcn.harmonic.mapper.SteadyQualifyMapper;
import com.njcn.harmonic.pojo.dto.SteadyQualifyDTO;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
@@ -18,12 +19,16 @@ import com.njcn.harmonic.pojo.vo.SteadyQualifyVO;
import com.njcn.harmonic.service.IRStatLimitRateDService;
import com.njcn.harmonic.service.SteadyQualifyService;
import com.njcn.harmonic.utils.PubUtils;
import com.njcn.supervision.api.UserLedgerFeignClient;
import com.njcn.supervision.pojo.param.user.UserReportParam;
import com.njcn.supervision.pojo.vo.user.UserLedgerVO;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@@ -41,25 +46,29 @@ public class SteadyQualifyServiceImpl implements SteadyQualifyService {
private final IRStatLimitRateDService rateDService;
private final UserLedgerFeignClient userLedgerFeignClient;
@Override
public List<SteadyQualifyVO> getSteadyQualifyData(DeviceInfoParam.BusinessParam steadyParam) {
List<SteadyQualifyVO> steadyQualifyList = new ArrayList<>();
UserReportParam userReportParam = new UserReportParam();
List<UserLedgerVO> userLedgerList = userLedgerFeignClient.selectUserList(userReportParam).getData();
Map<String, UserLedgerVO> userMap = userLedgerList.stream().collect(Collectors.toMap(UserLedgerVO::getId, Function.identity()));
//按照条件获取实际运行终端综合信息
List<GeneralDeviceDTO> deviceDataList = generalDeviceInfoClient.getPracticalRunDeviceInfo(steadyParam).getData();
//组装监测点Top层集合
for (GeneralDeviceDTO generalDeviceDTO : deviceDataList) {
List<String> lineIndexes = generalDeviceDTO.getLineIndexes();
if (CollectionUtils.isEmpty(lineIndexes)) {
if (CollectionUtils.isEmpty(generalDeviceDTO.getLineIndexes())) {
continue;
}
SteadyQualifyVO steadyQualifyVO = new SteadyQualifyVO();
steadyQualifyVO.setId(generalDeviceDTO.getIndex());
steadyQualifyVO.setName(generalDeviceDTO.getName());
// List<SteadyQualifyVO> lineData = steadyQualifyMapper.getSteadyQualifyData(lineIndexes);
List<SteadyQualifyDTO> qualifiesRate = getQualifiesRate(lineIndexes, steadyParam.getSearchBeginTime(), steadyParam.getSearchEndTime());
List<SteadyQualifyDTO> qualifiesRate = getQualifiesRate(generalDeviceDTO.getLineIndexes(), steadyParam.getSearchBeginTime(), steadyParam.getSearchEndTime());
//组装子集级数据树
List<SteadyQualifyVO> treeList = getTreeData(qualifiesRate, lineIndexes);
List<SteadyQualifyVO> treeList = getTreeData(qualifiesRate, generalDeviceDTO,userMap);
if (CollectionUtil.isNotEmpty(treeList)) {
List<SteadyQualifyVO> flicker = treeList.stream().filter(s -> s.getFlicker() != 3.14159).collect(Collectors.toList());
List<SteadyQualifyVO> freqOffset = treeList.stream().filter(s -> s.getFreqOffset() != 3.14159).collect(Collectors.toList());
@@ -205,20 +214,10 @@ public class SteadyQualifyServiceImpl implements SteadyQualifyService {
/**
* 获取父级每层数据
*/
private List<SteadyQualifyVO> getTreeData(List<SteadyQualifyDTO> qualifiesRate, List<String> lineIndexes) {
private List<SteadyQualifyVO> getTreeData(List<SteadyQualifyDTO> qualifiesRate, GeneralDeviceDTO generalDeviceDTO,Map<String, UserLedgerVO> userMap) {
//监测点集合
List<SteadyQualifyVO> monitorList = steadyQualifyMapper.getSteadyQualifyData(lineIndexes);
//母线集合
List<SteadyQualifyVO> busBarList = steadyQualifyMapper.getLineInfoByList(monitorList.stream().map(SteadyQualifyVO::getPid).distinct().collect(Collectors.toList()));
//终端集合
List<SteadyQualifyVO> deviceList = steadyQualifyMapper.getLineInfoByList(busBarList.stream().map(SteadyQualifyVO::getPid).distinct().collect(Collectors.toList()));
//变电站集合
List<SteadyQualifyVO> substationList = steadyQualifyMapper.getLineInfoByList(deviceList.stream().map(SteadyQualifyVO::getPid).distinct().collect(Collectors.toList()));
//供电公司集合
List<SteadyQualifyVO> powerCompanyList = steadyQualifyMapper.getLineInfoByList(substationList.stream().map(SteadyQualifyVO::getPid).distinct().collect(Collectors.toList()));
// List<SteadyQualifyDTO> qualifiesRate = getQualifiesRate(lineIndexes, steadyParam.getSearchBeginTime(), steadyParam.getSearchEndTime());
monitorList.forEach(steadyQualifyVO -> {
List<SteadyQualifyVO> treeMonitorList = steadyQualifyMapper.getSteadyQualifyData(generalDeviceDTO.getLineIndexes());
treeMonitorList.forEach(steadyQualifyVO -> {
SteadyQualifyVO dataSingleMonitorMoreDay = getDataSingleMonitorMoreDay(qualifiesRate, steadyQualifyVO.getId());
steadyQualifyVO.setFlicker(PubUtils.dataLimits(dataSingleMonitorMoreDay.getFlicker()));
steadyQualifyVO.setFreqOffset(PubUtils.dataLimits(dataSingleMonitorMoreDay.getFreqOffset()));
@@ -229,21 +228,85 @@ public class SteadyQualifyServiceImpl implements SteadyQualifyService {
steadyQualifyVO.setHarmonicCurrent(PubUtils.dataLimits(dataSingleMonitorMoreDay.getHarmonicCurrent()));
steadyQualifyVO.setInterHarmonic(PubUtils.dataLimits(dataSingleMonitorMoreDay.getInterHarmonic()));
});
setChildesList(substationList, monitorList);
setFatherDistortion(substationList);
powerCompanyList.stream().peek(item -> item.setChildren(getChildCategoryList(item, substationList))).collect(Collectors.toList());
setFatherDistortion(powerCompanyList);
List<SteadyQualifyVO> userLineList = treeMonitorList.stream().filter(it->StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList());
List<SteadyQualifyVO> otherLineList = treeMonitorList.stream().filter(it->StrUtil.isBlank(it.getObjId())).collect(Collectors.toList());
Map<String,List<SteadyQualifyVO>> temMap = new HashMap<>();
if(CollUtil.isNotEmpty(userLineList)) {
Map<String, List<SteadyQualifyVO>> objMap = userLineList.stream().collect(Collectors.groupingBy(SteadyQualifyVO::getObjId));
List<SteadyQualifyVO> temList = new ArrayList<>();
objMap.forEach((objId, monitorList) -> {
UserLedgerVO userLedgerVO = userMap.get(objId);
SteadyQualifyVO tree = new SteadyQualifyVO();
tree.setPid(userLedgerVO.getStationId());
tree.setId(userLedgerVO.getId());
tree.setChildren(monitorList);
tree.setName(userLedgerVO.getProjectName());
setFatherDistortion(tree,monitorList);
temList.add(tree);
});
temMap = temList.stream().collect(Collectors.groupingBy(SteadyQualifyVO::getPid));
}
//变电站集合
List<SteadyQualifyVO> substationList = steadyQualifyMapper.getLineInfoByList(generalDeviceDTO.getSubIndexes());
//供电公司集合
List<SteadyQualifyVO> powerCompanyList = steadyQualifyMapper.getLineInfoByList(generalDeviceDTO.getGdIndexes());
dealChildrenData(substationList,otherLineList,temMap,true);
dealChildrenData(powerCompanyList,substationList,temMap,false);
return powerCompanyList;
}
/**
* 处理变电站
*
* @param targetData
* @param childrenData
* @param isLine
*/
private void dealChildrenData(List<SteadyQualifyVO> targetData, List<SteadyQualifyVO> childrenData, Map<String,List<SteadyQualifyVO>> userLineMap, boolean isLine) {
// 创建一个map集合用于封装对象
Map<String, List<SteadyQualifyVO>> groupLine;
if (isLine) {
// 通过stream流分组
groupLine = childrenData.stream().collect(Collectors.groupingBy(terminalTree -> {
// 获取父id字符串通过 逗号 分割 成一个数组
String[] pid = terminalTree.getPids().split(StrUtil.COMMA);
return pid[LineBaseEnum.SUB_LEVEL.getCode()];
}));
} else {
groupLine = childrenData.stream().collect(Collectors.groupingBy(SteadyQualifyVO::getPid));
}
//变电站
targetData.forEach(terminalTree -> {
List<SteadyQualifyVO> terminalTrees = new ArrayList<>();
if(groupLine.containsKey(terminalTree.getId())) {
terminalTrees.addAll(groupLine.get(terminalTree.getId()).stream().sorted(Comparator.comparing(SteadyQualifyVO::getSort)).collect(Collectors.toList()));
}
if (isLine) {
//变电站集合
if(userLineMap.containsKey(terminalTree.getId())){
List<SteadyQualifyVO> userList = userLineMap.get(terminalTree.getId());
terminalTrees.addAll(userList);
}
terminalTree.setChildren(terminalTrees);
} else {
terminalTree.setChildren(terminalTrees);
}
setFatherDistortion(terminalTree,terminalTrees);
});
}
/**
* 计算父级合格率
*/
private void setFatherDistortion(List<SteadyQualifyVO> list) {
list.forEach(steadyQualifyVO -> {
List<SteadyQualifyVO> children = steadyQualifyVO.getChildren();
private void setFatherDistortion(SteadyQualifyVO steadyQualifyVO,List<SteadyQualifyVO> children) {
List<SteadyQualifyVO> flicker = children.stream().filter(child -> !Objects.equals(child.getFlicker(), 3.14159)).collect(Collectors.toList());
List<SteadyQualifyVO> freqOffset = children.stream().filter(child -> !Objects.equals(child.getFreqOffset(), 3.14159)).collect(Collectors.toList());
List<SteadyQualifyVO> voltageOffset = children.stream().filter(child -> !Objects.equals(child.getVoltageOffset(), 3.14159)).collect(Collectors.toList());
@@ -276,7 +339,6 @@ public class SteadyQualifyServiceImpl implements SteadyQualifyService {
if (!CollectionUtils.isEmpty(InterHarmonic)) {
steadyQualifyVO.setInterHarmonic(PubUtils.dataLimits(NumberUtil.round(InterHarmonic.stream().mapToDouble(SteadyQualifyVO::getInterHarmonic).average().orElse(100), 2).doubleValue()));
}
});
}
/**
@@ -289,12 +351,14 @@ public class SteadyQualifyServiceImpl implements SteadyQualifyService {
private void setChildesList(List<SteadyQualifyVO> item, List<SteadyQualifyVO> childes) {
Map<String, List<SteadyQualifyVO>> groupLine;
groupLine = childes.stream().collect(Collectors.groupingBy(steadyQualifyVO -> {
String[] pid = steadyQualifyVO.getPidS().split(",");
String[] pid = steadyQualifyVO.getPids().split(",");
return pid[LineBaseEnum.SUB_LEVEL.getCode()];
}));
item.stream().peek(steadyQualifyVO -> {
if (!CollectionUtils.isEmpty(groupLine.get(steadyQualifyVO.getId()))) {
steadyQualifyVO.setChildren(groupLine.get(steadyQualifyVO.getId()));
setFatherDistortion(steadyQualifyVO,steadyQualifyVO.getChildren());
}
}).collect(Collectors.toList());
}
@@ -671,7 +735,6 @@ public class SteadyQualifyServiceImpl implements SteadyQualifyService {
steadyQualifyVO.setInterHarmonic(PubUtils.dataLimits(dataSingleMonitorMoreDay.getInterHarmonic()));
});
setChildesList(substationList, monitorList);
setFatherDistortion(substationList);
return substationList;

View File

@@ -0,0 +1,18 @@
package com.njcn.harmonic.service.report;
import com.njcn.harmonic.pojo.param.ReportSearchParam;
import com.njcn.harmonic.pojo.po.ExcelRptTemp;
import javax.servlet.http.HttpServletResponse;
public interface CnCustomReportService {
/**
* 根据id获取模板
* @author qijian
* @date 2022/10/18
*/
void getCustomReport(ReportSearchParam reportSearchParam, HttpServletResponse response);
}