1.调整pms国网主配网监测点功能

This commit is contained in:
2024-02-23 14:52:59 +08:00
parent 6ab679caf2
commit dcdc23feea
8 changed files with 233 additions and 60 deletions

View File

@@ -60,6 +60,11 @@ public class LineDevGetDTO {
*/ */
private String lineTag; private String lineTag;
/**
* 监测点对象类型
*/
private String objType;
/** /**
* 装置通讯状态 * 装置通讯状态
*/ */

View File

@@ -157,6 +157,7 @@ public class CommTerminalServiceImpl implements CommTerminalService {
lineDevGetDTO.setType(1); lineDevGetDTO.setType(1);
lineDevGetDTO.setLineType(1); lineDevGetDTO.setLineType(1);
lineDevGetDTO.setLineTag(it.getMonitorTag()); lineDevGetDTO.setLineTag(it.getMonitorTag());
lineDevGetDTO.setObjType(it.getObjType());
//预处理模块需要的id修改value为id //预处理模块需要的id修改value为id
lineDevGetDTO.setVoltageLevel(it.getVoltageLevel()); lineDevGetDTO.setVoltageLevel(it.getVoltageLevel());
lineDevGetDTO.setIsUpToGrid(it.getIsUpToGrid()); lineDevGetDTO.setIsUpToGrid(it.getIsUpToGrid());

View File

@@ -94,6 +94,7 @@ public class RUploadPointStatisticalDataD {
/** /**
* 所属站别 * 所属站别
*/ */
@MppMultiId
private String stationType; private String stationType;
/** /**

View File

@@ -16,6 +16,14 @@ import com.njcn.prepare.harmonic.mapper.mysql.upload.RUploadPointStatisticalData
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam; import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.pojo.dto.UploadPointStatisticalParam; import com.njcn.prepare.harmonic.pojo.dto.UploadPointStatisticalParam;
import com.njcn.prepare.harmonic.service.mysql.upload.IRUploadPointStatisticalDataDService; import com.njcn.prepare.harmonic.service.mysql.upload.IRUploadPointStatisticalDataDService;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.api.DictTreeFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.enums.DicDataTypeEnum;
import com.njcn.system.enums.DicTreeEnum;
import com.njcn.system.pojo.po.DictData;
import com.njcn.system.pojo.po.SysDicTreePO;
import com.njcn.system.pojo.vo.DictTreeVO;
import com.njcn.user.api.DeptFeignClient; import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept; import com.njcn.user.pojo.po.Dept;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -24,6 +32,7 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -42,6 +51,10 @@ public class RUploadPointStatisticalDataDServiceImpl extends MppServiceImpl<RUpl
private final ROperatingIndexDPOMapper rOperatingIndexDPOMapper; private final ROperatingIndexDPOMapper rOperatingIndexDPOMapper;
private final RStatIntegrityDMapper rStatIntegrityDMapper; private final RStatIntegrityDMapper rStatIntegrityDMapper;
private final DictTreeFeignClient dictTreeFeignClient;
private final DicDataFeignClient dicDataFeignClient;
/** /**
* 此算法用于计算底层数据,方便国网数据上送 * 此算法用于计算底层数据,方便国网数据上送
* 1.表中存储所有单位没有数据的暂时设置为0 * 1.表中存储所有单位没有数据的暂时设置为0
@@ -56,30 +69,86 @@ public class RUploadPointStatisticalDataDServiceImpl extends MppServiceImpl<RUpl
Dept data = deptFeignClient.getRootDept().getData(); Dept data = deptFeignClient.getRootDept().getData();
String provinceId = deptFeignClient.getDepSonIdByDeptId(data.getId()).getData().get(0); String provinceId = deptFeignClient.getDepSonIdByDeptId(data.getId()).getData().get(0);
Dept dept = deptFeignClient.getDeptById(provinceId).getData(); Dept dept = deptFeignClient.getDeptById(provinceId).getData();
//筛选国网上送监测点
List<DeptGetChildrenMoreDTO> l1 = calculatedParam.getIdList(); //查询所有一级树字典
l1.forEach(item->{ List<SysDicTreePO> sysDicTreePOList = dictTreeFeignClient.queryAll().getData();
List<LineDevGetDTO> newList = item.getLineBaseList().stream().filter(o ->Objects.equals(o.getIsUpToGrid(),1)).collect(Collectors.toList());
item.setLineBaseList(newList);
UploadPointStatisticalParam uploadPointStatisticalParam = new UploadPointStatisticalParam(); List<SysDicTreePO> temTreeList = sysDicTreePOList.stream().filter(item -> Objects.equals(item.getCode(), DicTreeEnum.Trans_Sub.getCode())
uploadPointStatisticalParam.setOrgId(item.getUnitId()); || Objects.equals(item.getCode(), DicTreeEnum.Converter.getCode()) || Objects.equals(item.getCode(), DicTreeEnum.Ele_Railways.getCode())
List<LineDevGetDTO> lineInfo = item.getLineBaseList(); || Objects.equals(item.getCode(), DicTreeEnum.Wind_Farms.getCode()) || Objects.equals(item.getCode(), DicTreeEnum.Power_Station.getCode())
uploadPointStatisticalParam.setOnlineMonitorNum(lineInfo.size()); || Objects.equals(item.getCode(), DicTreeEnum.Smelting_Load.getCode()) || Objects.equals(item.getCode(), DicTreeEnum.Imp_Users.getCode())
uploadPointStatisticalParam.setRunMonitorNum(lineInfo.size()); ).collect(Collectors.toList());
uploadPointStatisticalParam.setRunTerminalNum((int)lineInfo.stream().map(LineDevGetDTO::getDevId).distinct().count());
paramList.add(uploadPointStatisticalParam); Map<String,List<String>> mapKey = new HashMap<>();
}); List<String> otherIds = new ArrayList<>();
Map<String,List<UploadPointStatisticalParam>> devMap = paramList.stream().collect(Collectors.groupingBy(UploadPointStatisticalParam::getOrgId)); for(SysDicTreePO sysDicTreePO : temTreeList){
//获取数据个数 List<SysDicTreePO> temList = sysDicTreePOList.stream().filter(item->item.getPid().equals(sysDicTreePO.getId())).collect(Collectors.toList());
List<RStatIntegrityD> dataList = getStatIntegrityData(calculatedParam.getDataDate()); List<String> ids = temList.stream().map(SysDicTreePO::getId).distinct().collect(Collectors.toList());
ids.add(sysDicTreePO.getId());
mapKey.put(sysDicTreePO.getCode(),ids);
otherIds.addAll(ids);
}
List<DictData> dictDataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.Station_Type.getCode()).getData();
Map<String,DictData> dictDataMap = dictDataList.stream().collect(Collectors.toMap(DictData::getCode,Function.identity()));
//获取所有单位 //获取所有单位
List<Dept> deptList = deptFeignClient.getAllDept().getData(); List<Dept> deptList = deptFeignClient.getAllDept().getData();
Map<String, List<Dept>> deptMap = deptList.stream().collect(Collectors.groupingBy(Dept::getCode)); Map<String, List<Dept>> deptMap = deptList.stream().collect(Collectors.groupingBy(Dept::getCode));
//筛选国网上送监测点
List<DeptGetChildrenMoreDTO> l1 = calculatedParam.getIdList();
//获取数据个数
List<RStatIntegrityD> dataList = getStatIntegrityData(calculatedParam.getDataDate());
l1.forEach(item -> { l1.forEach(item -> {
if (Objects.equals(Integer.parseInt(UploadEnum.NJCN_DEPT_LEVEL_1.getCode()), item.getDeptLevel())) { if (Objects.equals(Integer.parseInt(UploadEnum.NJCN_DEPT_LEVEL_1.getCode()), item.getDeptLevel())) {
return; return;
} }
List<LineDevGetDTO> newList = item.getLineBaseList().stream().filter(o -> Objects.equals(o.getIsUpToGrid(), 1)).collect(Collectors.toList());
item.setLineBaseList(newList);
List<LineDevGetDTO> otherMonitor = item.getLineBaseList().stream().filter(me->!otherIds.contains(me.getObjType())).collect(Collectors.toList());
mapKey.forEach((key, val) -> {
List<LineDevGetDTO> keyItem = item.getLineBaseList().stream().filter(o -> val.contains(o.getObjType())).collect(Collectors.toList());
RUploadPointStatisticalDataD rUploadPointStatisticalDataD = new RUploadPointStatisticalDataD(); RUploadPointStatisticalDataD rUploadPointStatisticalDataD = new RUploadPointStatisticalDataD();
switch (key){
case "2100":
rUploadPointStatisticalDataD.setStationType(dictDataMap.get(DicDataEnum.Trans_Sub.getCode()).getId());
break;
case "1200":
rUploadPointStatisticalDataD.setStationType(dictDataMap.get(DicDataEnum.Converter.getCode()).getId());
break;
case "1300":
rUploadPointStatisticalDataD.setStationType(dictDataMap.get(DicDataEnum.Ele_Railways.getCode()).getId());
break;
case "1401":
rUploadPointStatisticalDataD.setStationType(dictDataMap.get(DicDataEnum.Wind_Farms.getCode()).getId());
break;
case "1402":
rUploadPointStatisticalDataD.setStationType(dictDataMap.get(DicDataEnum.Power_Station.getCode()).getId());
break;
case "2600":
rUploadPointStatisticalDataD.setStationType(dictDataMap.get(DicDataEnum.Smelting_Load.getCode()).getId());
break;
case "2400":
rUploadPointStatisticalDataD.setStationType(dictDataMap.get(DicDataEnum.Imp_Users.getCode()).getId());
break;
}
rUploadPointStatisticalDataD.setId(IdUtil.simpleUUID()); rUploadPointStatisticalDataD.setId(IdUtil.simpleUUID());
rUploadPointStatisticalDataD.setProvinceId(dept.getCode()); rUploadPointStatisticalDataD.setProvinceId(dept.getCode());
rUploadPointStatisticalDataD.setProvinceName(dept.getName()); rUploadPointStatisticalDataD.setProvinceName(dept.getName());
@@ -90,18 +159,17 @@ public class RUploadPointStatisticalDataDServiceImpl extends MppServiceImpl<RUpl
rUploadPointStatisticalDataD.setDistributionFlag(UploadEnum.DISTRIBUTION_FLAG_01.getCode()); rUploadPointStatisticalDataD.setDistributionFlag(UploadEnum.DISTRIBUTION_FLAG_01.getCode());
//fixme over //fixme over
judgeLevel(item.getDeptLevel(), rUploadPointStatisticalDataD, item.getUnitId(), item.getUnitName(), deptList, deptMap); judgeLevel(item.getDeptLevel(), rUploadPointStatisticalDataD, item.getUnitId(), item.getUnitName(), deptList, deptMap);
List<UploadPointStatisticalParam> l11 = devMap.get(item.getUnitId());
if (CollectionUtil.isNotEmpty(l11)){
UploadPointStatisticalParam po = l11.get(0); long pointCount = keyItem.stream().map(LineDevGetDTO::getPointId).distinct().count();
rUploadPointStatisticalDataD.setRunTerminalNum(po.getRunTerminalNum()); long devCount = keyItem.stream().map(LineDevGetDTO::getDevId).distinct().count();
rUploadPointStatisticalDataD.setOnlineMonitorNum(po.getOnlineMonitorNum()); rUploadPointStatisticalDataD.setRunTerminalNum((int) devCount);
rUploadPointStatisticalDataD.setRunMonitorNum(po.getRunMonitorNum()); rUploadPointStatisticalDataD.setOnlineMonitorNum((int) pointCount);
rUploadPointStatisticalDataD.setOnlineMonitorRate(po.getOnlineMonitorNum()==0?0d:BigDecimal.valueOf(po.getOnlineMonitorNum()*100.0/po.getRunMonitorNum()).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue()); rUploadPointStatisticalDataD.setRunMonitorNum((int) pointCount);
} rUploadPointStatisticalDataD.setOnlineMonitorRate(pointCount == 0 ? 0d : BigDecimal.valueOf(rUploadPointStatisticalDataD.getOnlineMonitorNum() * 100.0 / rUploadPointStatisticalDataD.getRunMonitorNum()).setScale(4, RoundingMode.HALF_UP).doubleValue());
//获取当前单位下所有的监测点,匹配监测点数据
List<LineDevGetDTO> l2 = item.getLineBaseList();
if (CollectionUtil.isNotEmpty(l2)){ List<RStatIntegrityD> l3 = dataList.stream().filter(it -> keyItem.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()).contains(it.getLineIndex())).collect(Collectors.toList());
List<RStatIntegrityD> l3 = dataList.stream().filter(it -> l2.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()).contains(it.getLineIndex())).collect(Collectors.toList());
int due = l3.stream().mapToInt(RStatIntegrityD::getDueTime).sum(); int due = l3.stream().mapToInt(RStatIntegrityD::getDueTime).sum();
int real = l3.stream().mapToInt(RStatIntegrityD::getRealTime).sum(); int real = l3.stream().mapToInt(RStatIntegrityD::getRealTime).sum();
rUploadPointStatisticalDataD.setExpectCollectNum(due); rUploadPointStatisticalDataD.setExpectCollectNum(due);
@@ -113,30 +181,70 @@ public class RUploadPointStatisticalDataDServiceImpl extends MppServiceImpl<RUpl
rUploadPointStatisticalDataD.setDataFullRate(BigDecimal.valueOf(real * 100.0 / due).setScale(4, RoundingMode.HALF_UP).doubleValue()); rUploadPointStatisticalDataD.setDataFullRate(BigDecimal.valueOf(real * 100.0 / due).setScale(4, RoundingMode.HALF_UP).doubleValue());
} }
rUploadPointStatisticalDataD.setStationMonitorNum(l3.size()); rUploadPointStatisticalDataD.setStationMonitorNum(l3.size());
}
result.add(rUploadPointStatisticalDataD); result.add(rUploadPointStatisticalDataD);
}); });
//其他
RUploadPointStatisticalDataD rUploadPointStatisticalDataD = new RUploadPointStatisticalDataD();
rUploadPointStatisticalDataD.setStationType(dictDataMap.get(DicDataEnum.Station_Other.getCode()).getId());
rUploadPointStatisticalDataD.setId(IdUtil.simpleUUID());
rUploadPointStatisticalDataD.setProvinceId(dept.getCode());
rUploadPointStatisticalDataD.setProvinceName(dept.getName());
rUploadPointStatisticalDataD.setStatisticalDate(calculatedParam.getDataDate());
rUploadPointStatisticalDataD.setStatisticalType(UploadEnum.STATISTICAL_TYPE_03.getCode());
rUploadPointStatisticalDataD.setUploadStatus(Integer.parseInt(UploadEnum.UPLOAD_STATUS_0.getCode()));
//fixme 主配网标识文档中没有,先随便定义一个,后期调整
rUploadPointStatisticalDataD.setDistributionFlag(UploadEnum.DISTRIBUTION_FLAG_01.getCode());
//fixme over
judgeLevel(item.getDeptLevel(), rUploadPointStatisticalDataD, item.getUnitId(), item.getUnitName(), deptList, deptMap);
long pointCount = otherMonitor.stream().map(LineDevGetDTO::getPointId).distinct().count();
long devCount = otherMonitor.stream().map(LineDevGetDTO::getDevId).distinct().count();
rUploadPointStatisticalDataD.setRunTerminalNum((int) devCount);
rUploadPointStatisticalDataD.setOnlineMonitorNum((int) pointCount);
rUploadPointStatisticalDataD.setRunMonitorNum((int) pointCount);
rUploadPointStatisticalDataD.setOnlineMonitorRate(pointCount == 0 ? 0d : BigDecimal.valueOf(rUploadPointStatisticalDataD.getOnlineMonitorNum() * 100.0 / rUploadPointStatisticalDataD.getRunMonitorNum()).setScale(4, RoundingMode.HALF_UP).doubleValue());
List<RStatIntegrityD> l3 = dataList.stream().filter(it -> otherMonitor.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()).contains(it.getLineIndex())).collect(Collectors.toList());
int due = l3.stream().mapToInt(RStatIntegrityD::getDueTime).sum();
int real = l3.stream().mapToInt(RStatIntegrityD::getRealTime).sum();
rUploadPointStatisticalDataD.setExpectCollectNum(due);
rUploadPointStatisticalDataD.setActualCollectNum(real);
if (due == 0 || real == 0) {
rUploadPointStatisticalDataD.setDataFullRate(BigDecimal.valueOf(0).setScale(4, RoundingMode.HALF_UP).doubleValue());
} else {
rUploadPointStatisticalDataD.setDataFullRate(BigDecimal.valueOf(real * 100.0 / due).setScale(4, RoundingMode.HALF_UP).doubleValue());
}
rUploadPointStatisticalDataD.setStationMonitorNum(l3.size());
result.add(rUploadPointStatisticalDataD);
});
if (CollectionUtil.isNotEmpty(result)) { if (CollectionUtil.isNotEmpty(result)) {
//查询数据如果有数据,将data_id置为null,这样就保留之前的唯一id //查询数据如果有数据,将data_id置为null,这样就保留之前的唯一id
LambdaQueryWrapper<RUploadPointStatisticalDataD> lambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<RUploadPointStatisticalDataD> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(RUploadPointStatisticalDataD::getStatisticalDate, calculatedParam.getDataDate()); lambdaQueryWrapper.eq(RUploadPointStatisticalDataD::getStatisticalDate, calculatedParam.getDataDate());
List<RUploadPointStatisticalDataD> oldData = this.list(lambdaQueryWrapper); List<RUploadPointStatisticalDataD> oldData = this.list(lambdaQueryWrapper);
if (CollectionUtil.isNotEmpty(oldData)) { if (CollectionUtil.isNotEmpty(oldData)) {
result.forEach(item->{ result.forEach(it -> it.setId(null));
item.setId(null);
});
} }
this.saveOrUpdateBatchByMultiId(result); this.saveOrUpdateBatchByMultiId(result);
}
}
/** }
* r_operating_index_d表中获取终端、监测点个数
*/
public List<ROperatingIndexDPO> getOperatingIndexData(String time) {
LambdaQueryWrapper<ROperatingIndexDPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ROperatingIndexDPO::getDataDate,time);
return rOperatingIndexDPOMapper.selectList(lambdaQueryWrapper);
} }
/** /**
@@ -148,6 +256,7 @@ public class RUploadPointStatisticalDataDServiceImpl extends MppServiceImpl<RUpl
return rStatIntegrityDMapper.selectList(lambdaQueryWrapper); return rStatIntegrityDMapper.selectList(lambdaQueryWrapper);
} }
/** /**
* 判断单位层级 * 判断单位层级
*/ */

View File

@@ -540,6 +540,17 @@ public enum DicDataEnum {
ELECTRIFIED_RAILWAY("电气化铁路","1300"), ELECTRIFIED_RAILWAY("电气化铁路","1300"),
/**
* 所属站别类型
*/
Trans_Sub("变电站","Trans_Sub"),
Converter("换流站","Converter"),
Ele_Railways("电气化铁路","Ele_Railways"),
Wind_Farms("风电场","Wind_Farms"),
Power_Station("光伏电站","Power_Station"),
Smelting_Load("冶炼负荷","Smelting_Load"),
Imp_Users("重要敏感用户","Imp_Users"),
Station_Other("其他","Other"),
@@ -562,7 +573,8 @@ public enum DicDataEnum {
DicDataEnum(String name, String code) { DicDataEnum(String name, String code) {
this.name = name; this.name = name;
this.code = code; this.code = code;
this.value = null; this.value =
null;
} }
public static DicDataEnum getDicDataEnumValue(String code) { public static DicDataEnum getDicDataEnumValue(String code) {

View File

@@ -105,6 +105,8 @@ public enum DicDataTypeEnum {
file_type("附件分类"," file_type"), file_type("附件分类"," file_type"),
problem_level_type("问题等级"," problem_level_type"), problem_level_type("问题等级"," problem_level_type"),
Station_Type("所属站别类型","Station_Type"),
APP_BASE_INFORMATION_TYPE("app基础信息类型","appInformationType"), APP_BASE_INFORMATION_TYPE("app基础信息类型","appInformationType"),

View File

@@ -0,0 +1,43 @@
package com.njcn.system.enums;
import lombok.Getter;
/**
*
* @author cdf
* @date 2024/2/23
*/
@Getter
public enum DicTreeEnum {
/**
* 字典树
*/
Trans_Sub("各类重要变电站","2100"),
Converter("换流站","1200"),
Ele_Railways("电气化铁路","1300"),
Wind_Farms("风电场","1401"),
Power_Station("光伏电站","1402"),
Smelting_Load("冶炼负荷","2600"),
Imp_Users("敏感/重要/高危用户","2400"),
;
private final String name;
private final String code;
DicTreeEnum(String name, String code){
this.name=name;
this.code=code;
}
}

View File

@@ -67,7 +67,7 @@ public class SysDicTreePOServiceImpl extends ServiceImpl<SysDicTreePOMapper, Sys
collect = resultList.stream().map(temp -> { collect = resultList.stream().map(temp -> {
DictTreeVO resultVO = new DictTreeVO(); DictTreeVO resultVO = new DictTreeVO();
BeanUtils.copyProperties(temp, resultVO); BeanUtils.copyProperties(temp, resultVO);
resultVO.setPname(byId.getName()); resultVO.setPname(Objects.nonNull(byId)?byId.getName():"最高级");
return resultVO; return resultVO;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }