1.解决监测点超标问题

2.解决监测点终端md3加密显示
3.解决全景技术监督问题数量问题
This commit is contained in:
wr
2024-11-25 12:09:48 +08:00
parent 92ddbd34a8
commit ca32a4e3c6
8 changed files with 154 additions and 65 deletions

View File

@@ -225,6 +225,9 @@ public class OracleTerminalExcel implements Serializable {
@Excel(name = "监测点对象名称", width = 15)
private String objName;
@Excel(name = "电网侧变电站", width = 15)
private String powerSubstationName;
@Excel(name = "人为干预统计", replace = {"不参与统计_0", "参与统计_1"}, width = 15)
@NotNull(message = "统计标志不为空")
private Integer statFlag;

View File

@@ -43,11 +43,13 @@ import com.njcn.device.pq.pojo.param.oracle.*;
import com.njcn.device.pq.pojo.po.*;
import com.njcn.device.pq.pojo.vo.*;
import com.njcn.device.pq.service.*;
import com.njcn.device.pq.utils.DeviceUtil;
import com.njcn.device.pq.utils.ExcelStyleUtil;
import com.njcn.oss.constant.OssPath;
import com.njcn.oss.utils.FileStorageUtil;
import com.njcn.poi.excel.ExcelUtil;
import com.njcn.poi.util.PoiUtil;
import com.njcn.redis.utils.RedisUtil;
import com.njcn.system.api.AreaFeignClient;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
@@ -103,6 +105,7 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
private final LineBakService lineBakService;
private final DeviceBakService deviceBakService;
private final FileStorageUtil fileStorageUtil;
private final RedisUtil redisUtil;
@Value("${oracle.isSync}")
@@ -266,7 +269,7 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
deviceDetail.setUpdateTime(LocalDateTime.now());
//处理装置识别码秘钥
coderM3d(deviceDetail);
deviceMapper.insert(deviceDetail);
//装置功能
List<DictData> funList = dicDataFeignClient.getDicDataByTypeName(DicDataTypeEnum.DEV_FUN.getName()).getData();
@@ -625,6 +628,7 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
Device deviceDetail = new Device();
BeanUtils.copyProperties(updateDeviceParam, deviceDetail);
deviceDetail.setId(updateDeviceParam.getDevIndex());
coderM3d(deviceDetail);
this.updateById(device);
deviceMapper.updateById(deviceDetail);
}
@@ -804,6 +808,23 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
return true;
}
private void coderM3d(Device deviceDetail){
if(StrUtil.isNotBlank(deviceDetail.getDevKey())){
deviceDetail.setDevKey(DeviceUtil.encodeString(1,deviceDetail.getDevKey()));
}
if(StrUtil.isNotBlank(deviceDetail.getSeries())){
deviceDetail.setSeries(DeviceUtil.encodeString(1,deviceDetail.getSeries()));
}
}
private void decoderM3d(Device deviceDetail){
if(StrUtil.isNotBlank(deviceDetail.getDevKey())){
deviceDetail.setDevKey(DeviceUtil.decoderString(1,deviceDetail.getDevKey()));
}
if(StrUtil.isNotBlank(deviceDetail.getSeries())){
deviceDetail.setSeries(DeviceUtil.decoderString(1,deviceDetail.getSeries()));
}
}
/**
* 查询监测点信息修改处,并新增日志
*
@@ -924,6 +945,8 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
Device deviceDetail = deviceMapper.selectById(device.getId());
//解密
decoderM3d(deviceDetail);
BeanUtils.copyProperties(deviceDetail, deviceVO);
deviceVO.setDevIndex(device.getId());
//母线
@@ -982,6 +1005,8 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
deviceVO.setSort(obj.getSort());
Device deviceDetail = deviceMapper.selectById(obj.getId());
//解密
decoderM3d(deviceDetail);
BeanUtils.copyProperties(deviceDetail, deviceVO);
deviceVO.setDevIndex(obj.getId());
@@ -1076,6 +1101,8 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
deviceVO.setName(device.getName());
deviceVO.setSort(device.getSort());
Device deviceDetail = deviceMapper.selectById(device.getId());
//解密
decoderM3d(deviceDetail);
BeanUtils.copyProperties(deviceDetail, deviceVO);
deviceVO.setDevIndex(device.getId());
@@ -1125,6 +1152,8 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
BeanUtils.copyProperties(device, deviceVO);
Device deviceDetail = deviceMapper.selectById(device.getId());
//解密
decoderM3d(deviceDetail);
BeanUtils.copyProperties(deviceDetail, deviceVO);
deviceVO.setDevIndex(device.getId());
@@ -1861,6 +1890,23 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
Integer oracleDevId = Integer.valueOf(body.get("oracleDevId").toString());
syncTerminalParam.setOracleLineId(oracleLineId);
syncTerminalParam.setOracleDevId(oracleDevId);
Map<String, String> DevIdMapping = new HashMap<>();
Map<String, String> LineIdMapping = new HashMap<>();
List<LineBak> resultList = lineBakService.list();
for (LineBak row : resultList) {
String id = row.getId();
String lineId = row.getLineId()+"";
LineIdMapping.put(lineId,id );
}
redisUtil.saveByKey("LineIdMapping",LineIdMapping);
List<DeviceBak> list = deviceBakService.list();
for (DeviceBak row : list) {
String id = row.getId();
String devId = row.getDevId()+"";
DevIdMapping.put(devId,id );
}
redisUtil.saveByKey("DevIdMapping",DevIdMapping);
}
}
String projectIndex = null;

View File

@@ -1,5 +1,6 @@
package com.njcn.device.pq.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
@@ -330,21 +331,23 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
List<TerminalTree> subInfoList = new ArrayList<>();
lineObjNameMap.forEach((key, value)->{
final List<TerminalTree> subVLine = collect1;
List<TerminalTree> terminalTrees = Collections.unmodifiableList(collect1);
//获取变电信息
List<TerminalTree> collect = subList.stream().filter(x -> x.getName().equals(key)).collect(Collectors.toList());
//电网侧监测点
List<TerminalTree> powerFlag = value.stream().filter(x -> x.getPowerFlag().equals(LineBaseEnum.POWER_FLAG.getCode())).collect(Collectors.toList());
if(CollUtil.isEmpty(collect)){
if(CollUtil.isEmpty(powerFlag)){
//解决变电站下没有监测点显示问题(变电站-》终端-》母线)
powerFlag.addAll(collect);
}
List<TerminalTree> subChildren = getRecursionChildren(powerFlag, subVLine);
List<TerminalTree> subChildren = new ArrayList<>();
getRecursionChildren(powerFlag,subChildren, terminalTrees);
//非电网侧监测点
List<TerminalTree> powerFlagNot = value.stream().filter(x -> x.getPowerFlag().equals(LineBaseEnum.POWER_FLAG_NOT.getCode())).collect(Collectors.toList());
List<TerminalTree> notSubChildren = getRecursionChildren(powerFlagNot,subVLine);
List<TerminalTree> notSubChildren = new ArrayList<>();
getRecursionChildren(powerFlagNot,notSubChildren,terminalTrees);
if(CollUtil.isNotEmpty(collect)){
List<TerminalTree> valueList = new ArrayList<>();
@@ -434,15 +437,19 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
//todo 变电站层级处理不存在下面信息的监测点信息(默认信息就是给他当成电网侧)
List<TerminalTree> dw = new ArrayList<>();
dw.addAll(subInfoList.stream().collect(Collectors.toList()));
//暂时解决跨部门不显示电站问题(风光储)
dw.addAll(subInfoList.stream().flatMap(x -> x.getChildren().get(0).getChildren().stream()).collect(Collectors.toList()));
dw.addAll(subInfoList.stream().flatMap(x -> x.getChildren().get(1).getChildren().stream()).collect(Collectors.toList()));
List<TerminalTree> collect = subList.stream().filter(x -> !dw.stream().map(TerminalTree::getId).collect(Collectors.toList()).contains(x.getId()))
List<TerminalTree> collect = subList.stream().filter(x -> !dw.stream().map(TerminalTree::getId).collect(Collectors.toList()).contains(x.getId()) ||
x.getName().equals("220kV金阳变电站"))
.distinct().collect(Collectors.toList());
for (TerminalTree notSub : collect) {
//只显示变电站下有装置的
TerminalTree notSub1 = findParents(collect1, notSub);
if(CollUtil.isNotEmpty(notSub1.getChildren())){
List<TerminalTree> valueList = new ArrayList<>();
TerminalTree sub = new TerminalTree();
sub.setId(notSub.getId());
sub.setName(notSub.getName());
@@ -461,6 +468,8 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
sub.setChildren(valueList);
subInfoList.add(sub);
dw.add(sub);
}
}
gdList.forEach(gd -> gd.setChildren(getChildren(gd, subInfoList)));
@@ -497,26 +506,25 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
* @param all 检测对象
* @return
*/
public List<TerminalTree> getRecursionChildren(List<TerminalTree> line, List<TerminalTree> all) {
List<TerminalTree> info=new ArrayList<>();
public void getRecursionChildren(List<TerminalTree> line, List<TerminalTree> info,List<TerminalTree> all) {
List<TerminalTree> aa=new ArrayList<>();
for (TerminalTree lineTree : line) {
findParentsRecursive(lineTree, all,aa);
aa.add(lineTree);
}
List<TerminalTree> distinctList =new ArrayList<>();
distinctList.addAll(aa.stream().distinct().collect(Collectors.toList()));
List<TerminalTree> distinctList =new ArrayList<>(aa.stream().distinct().collect(Collectors.toList()));
long count = line.stream().filter(x -> !x.getLevel().equals(LineBaseEnum.LINE_LEVEL.getCode())).count();
if(count>0){
aa.addAll(all);
}
List<TerminalTree> lines = aa.stream().distinct().sorted(Comparator.comparing(TerminalTree::getSort)).collect(Collectors.toList());
List<TerminalTree> collect = distinctList.stream().filter(x -> x.getLevel() == LineBaseEnum.SUB_LEVEL.getCode()).collect(Collectors.toList());
if(CollUtil.isNotEmpty(collect)){
for (TerminalTree tree : collect) {
info.add(findParents(lines,tree));
TerminalTree terminalTree = BeanUtil.copyProperties(tree, TerminalTree.class);
info.add(findParents(lines,terminalTree));
}
}
return info;
}
private static void findParentsRecursive(TerminalTree tree, List<TerminalTree> all,List<TerminalTree> newParents) {

View File

@@ -494,7 +494,9 @@ public class GridServiceImpl implements IGridService {
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(lineList)) {
//获取监测点越限集合
List<RStatLimitTargetVO> overLimitList = rStatLimitTargetDMapper.getSumTargetDetails(lineList,param.getStartTime(),param.getEndTime());
List<RStatLimitTargetVO> overLimitList = rStatLimitTargetDMapper.getSumTargetDetails(lineList,
param.getStartTime(),
param.getEndTime());
//获取部门
List<DeptDTO> deptList = deptFeignClient.getDepSonDetailByDeptId(param.getDeptIndex()).getData();
deptList.forEach(item->{

View File

@@ -100,14 +100,12 @@ public class RStatLimitServiceImpl implements RStatLimitService {
//监测点总数量
List<String> lineIds = list.stream().flatMap(x -> x.getLineIndexes().stream()).distinct().collect(Collectors.toList());
//超标监测点信息
List<RStatLimitTargetDPO> limitTargetList =new ArrayList<>();
List<RStatLimitTargetVO> limitTargetList =new ArrayList<>();
List<RStatIntegrityD> integrityList =new ArrayList<>();
if(CollUtil.isNotEmpty(lineIds)){
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()))));
limitTargetList = rStatLimitTargetDMapper.getSumTargetDetails(lineIds,
DateUtil.beginOfDay(DateUtil.parse(deviceInfoParam.getSearchBeginTime())).toString(),
DateUtil.endOfDay(DateUtil.parse(deviceInfoParam.getSearchEndTime())).toString());
integrityList = lineIntegrityClient.getIntegrityByLineIds(lineIds, deviceInfoParam.getSearchBeginTime(), deviceInfoParam.getSearchEndTime()).getData();
}
//终端在线率
@@ -675,7 +673,7 @@ public class RStatLimitServiceImpl implements RStatLimitService {
}
private void onLineAndIntegrity(List<String> lineIds, List<RStatIntegrityD> onIntegrityByIds, List<String> devIds, List<RStatOnlinerateVO> onlineRateByDevIds,List<RStatLimitTargetDPO> limitTargetList, GridDiagramVO.LineData lineData) {
private void onLineAndIntegrity(List<String> lineIds, List<RStatIntegrityD> onIntegrityByIds, List<String> devIds, List<RStatOnlinerateVO> onlineRateByDevIds,List<RStatLimitTargetVO> limitTargetList, GridDiagramVO.LineData lineData) {
//监测完整率
List<RStatIntegrityD> integrityDS = onIntegrityByIds.stream().filter(x -> lineIds.contains(x.getLineIndex())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(integrityDS)) {
@@ -695,11 +693,9 @@ public class RStatLimitServiceImpl implements RStatLimitService {
lineData.setOnLineRate(0.0f);
}
//监测点超标占比
List<RStatLimitTargetDPO> limitTarget = limitTargetList.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
List<RStatLimitTargetVO> 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)
.map(RStatLimitTargetDPO::getLineId).distinct().count();
long count = limitTarget.stream().filter(o->o.getAllOvertime() > 0 || o.getFlickerAllTime()>0).count();
lineData.setOutOfStandardRate(NumberUtil.round(count * 100.0 / lineIds.size(), 2).floatValue());
} else {
lineData.setOutOfStandardRate(0.0f);

View File

@@ -13,13 +13,21 @@
INNER JOIN supervision_temp_line_run_test b ON a.id = b.id
INNER JOIN supervision_temp_line_run_test_warning c ON c.line_run_id = b.id
<where>
c.create_time BETWEEN #{param.startTime} AND #{param.endTime}
(c.create_time BETWEEN #{param.startTime} AND #{param.endTime}
<if test="orgIds != null and orgIds.size() > 0">
AND a.org_id IN
<foreach collection="orgIds" item="orgId" separator="," open="(" close=")">
#{orgId}
</foreach>
</if>)
or (c.deal_State = 0
<if test="orgIds != null and orgIds.size() > 0">
AND a.org_id IN
<foreach collection="orgIds" item="orgId" separator="," open="(" close=")">
#{orgId}
</foreach>
</if>
)
</where>
</select>
</mapper>

View File

@@ -7,7 +7,9 @@ import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.param.StatisticsBizBaseParam;
import com.njcn.supervision.enums.FlowStatusEnum;
import com.njcn.supervision.mapper.device.TempLineRunTestWarningMapper;
import com.njcn.supervision.pojo.po.device.LineWarning;
import com.njcn.supervision.pojo.po.leaflet.WarningLeaflet;
@@ -47,7 +49,7 @@ public class GridDiagramServiceImpl implements GridDiagramService {
@Override
public GridDiagramVO.Info getSupervisionData(StatisticsBizBaseParam param) {
List<String> deptIds = deptFeignClient.getDepSonIdByDeptId(param.getId()).getData();
List<String> deptIds = deptFeignClient.getDepSonIdtByDeptId(param.getId()).getData();
return supervisionDetailsAdd(null, deptIds, param);
}
@@ -96,18 +98,30 @@ public class GridDiagramServiceImpl implements GridDiagramService {
);
//用户投诉问题(添加出来就是有问题的)
List<SupervisionUserComplaintPO> userComplaintList = userComplaintPOService.list(new LambdaQueryWrapper<SupervisionUserComplaintPO>()
.in(SupervisionUserComplaintPO::getDutyOrgId, deptIds)
.eq(SupervisionUserComplaintPO::getState, 1)
.and(x->x .in(SupervisionUserComplaintPO::getDutyOrgId, deptIds)
.eq(SupervisionUserComplaintPO::getState, DataStateEnum.ENABLE.getCode())
.ge(StrUtil.isNotBlank(param.getStartTime()), SupervisionUserComplaintPO::getCreateTime, DateUtil.beginOfDay(DateUtil.parse(param.getStartTime())))
.le(StrUtil.isNotBlank(param.getEndTime()), SupervisionUserComplaintPO::getCreateTime, DateUtil.endOfDay(DateUtil.parse(param.getEndTime())))
.le(StrUtil.isNotBlank(param.getEndTime()), SupervisionUserComplaintPO::getCreateTime, DateUtil.endOfDay(DateUtil.parse(param.getEndTime()))))
.or(x->x.eq(SupervisionUserComplaintPO::getDealState,0)
.eq(SupervisionUserComplaintPO::getState, DataStateEnum.ENABLE.getCode())
)
);
//计划问题(有问题的单子)
List<SurveyTest> surveyTestList = surveyTestService.list(new LambdaQueryWrapper<SurveyTest>()
.in(SurveyTest::getDeptId, deptIds)
.eq(SurveyTest::getState, 1)
.and(x->x.in(SurveyTest::getDeptId, deptIds)
.eq(SurveyTest::getState, DataStateEnum.ENABLE.getCode())
.eq(SurveyTest::getStatus, FlowStatusEnum.APPROVE.getCode())
.eq(SurveyTest::getProblemFlag, 1)
.ge(StrUtil.isNotBlank(param.getStartTime()), SurveyTest::getCreateTime, DateUtil.beginOfDay(DateUtil.parse(param.getStartTime())))
.le(StrUtil.isNotBlank(param.getEndTime()), SurveyTest::getCreateTime, DateUtil.endOfDay(DateUtil.parse(param.getEndTime())))
.le(StrUtil.isNotBlank(param.getEndTime()), SurveyTest::getCreateTime, DateUtil.endOfDay(DateUtil.parse(param.getEndTime()))))
.or(x->x.eq(SurveyTest::getDealState,0)
.in(SurveyTest::getDeptId, deptIds)
.eq(SurveyTest::getState, DataStateEnum.ENABLE.getCode())
.eq(SurveyTest::getStatus, FlowStatusEnum.APPROVE.getCode())
.eq(SurveyTest::getProblemFlag, 1)
)
);
//试运行问题单子
List<String> runWarningsIds = warningsMapper.selectWarningsIds(deptIds, param);
@@ -201,19 +215,31 @@ public class GridDiagramServiceImpl implements GridDiagramService {
gridDiagramVO.setOnLineNum(lineWarningList.size());
//用户投诉问题(添加出来就是有问题的)
List<SupervisionUserComplaintPO> userComplaintList = userComplaintPOService.list(new LambdaQueryWrapper<SupervisionUserComplaintPO>()
.in(SupervisionUserComplaintPO::getDutyOrgId, ids)
.and(x->x.in(SupervisionUserComplaintPO::getDutyOrgId, ids)
.eq(SupervisionUserComplaintPO::getState, 1)
.ge(StrUtil.isNotBlank(baseParam.getStartTime()), SupervisionUserComplaintPO::getCreateTime, DateUtil.beginOfDay(DateUtil.parse(baseParam.getStartTime())))
.le(StrUtil.isNotBlank(baseParam.getEndTime()), SupervisionUserComplaintPO::getCreateTime, DateUtil.endOfDay(DateUtil.parse(baseParam.getEndTime())))
.le(StrUtil.isNotBlank(baseParam.getEndTime()), SupervisionUserComplaintPO::getCreateTime, DateUtil.endOfDay(DateUtil.parse(baseParam.getEndTime()))))
.or(x->x.eq(SupervisionUserComplaintPO::getDealState,0)
.in(SupervisionUserComplaintPO::getDutyOrgId, ids)
.eq(SupervisionUserComplaintPO::getState, 1)
)
);
gridDiagramVO.setUserNum(userComplaintList.size());
//计划问题(有问题的单子)
List<SurveyTest> surveyTestList = surveyTestService.list(new LambdaQueryWrapper<SurveyTest>()
.in(SurveyTest::getDeptId, ids)
.eq(SurveyTest::getState, 1)
.and(x->x.in(SurveyTest::getDeptId, ids)
.eq(SurveyTest::getState, DataStateEnum.ENABLE.getCode())
.eq(SurveyTest::getStatus, FlowStatusEnum.APPROVE.getCode())
.eq(SurveyTest::getProblemFlag, 1)
.ge(StrUtil.isNotBlank(baseParam.getStartTime()), SurveyTest::getCreateTime, DateUtil.beginOfDay(DateUtil.parse(baseParam.getStartTime())))
.le(StrUtil.isNotBlank(baseParam.getEndTime()), SurveyTest::getCreateTime, DateUtil.endOfDay(DateUtil.parse(baseParam.getEndTime())))
.le(StrUtil.isNotBlank(baseParam.getEndTime()), SurveyTest::getCreateTime, DateUtil.endOfDay(DateUtil.parse(baseParam.getEndTime()))))
.or(x->x.eq(SurveyTest::getDealState,0)
.in(SurveyTest::getDeptId, ids)
.eq(SurveyTest::getState, DataStateEnum.ENABLE.getCode())
.eq(SurveyTest::getStatus, FlowStatusEnum.APPROVE.getCode())
.eq(SurveyTest::getProblemFlag, 1)
)
);
gridDiagramVO.setSurveyNum(surveyTestList.size());