新算法25、26提交

This commit is contained in:
2023-11-23 20:16:19 +08:00
parent 67b738e5b3
commit 6efcee0dcb
9 changed files with 320 additions and 11 deletions

View File

@@ -0,0 +1,25 @@
package com.njcn.prepare.harmonic.pojo.param;
import lombok.Data;
/**
* 类的介绍:
*
* @author xuyang
* @version 1.0.0
* @createTime 2023/11/23 19:14
*/
@Data
public class EventParam {
/**
* 暂态监测点个数
*/
private Integer eventLineCount;
/**
* 发生暂态时间次数
*/
private Float eventCount;
}

View File

@@ -7,6 +7,8 @@ import com.njcn.device.biz.pojo.param.DeptGetLineParam;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam; import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimBusGlobalDService; import com.njcn.prepare.harmonic.service.mysql.dim.IRDimBusGlobalDService;
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjEventDService; import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjEventDService;
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjEventMService;
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjEventYService;
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 com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.annotation.LiteflowComponent;
@@ -33,6 +35,8 @@ public class PmsDimExecutor extends BaseExecutor{
private final CommTerminalGeneralClient commTerminalGeneralClient; private final CommTerminalGeneralClient commTerminalGeneralClient;
private final IRDimObjEventDService irDimObjEventDService; private final IRDimObjEventDService irDimObjEventDService;
private final IRDimObjEventMService irDimObjEventMService;
private final IRDimObjEventYService irDimObjEventYService;
private final IRDimBusGlobalDService irDimBusGlobalDService; private final IRDimBusGlobalDService irDimBusGlobalDService;
@@ -79,12 +83,13 @@ public class PmsDimExecutor extends BaseExecutor{
//数据补招不执行非日表算法 //数据补招不执行非日表算法
if (!calculatedParam.isRepair()) { if (!calculatedParam.isRepair()) {
//月表 //月表
irDimObjEventMService.eventUserRatioM(calculatedParam);
} }
}else if (tag.equalsIgnoreCase("r_dim_obj_event_y")) { }else if (tag.equalsIgnoreCase("r_dim_obj_event_y")) {
//数据补招不执行非日表算法 //数据补招不执行非日表算法
if (!calculatedParam.isRepair()) { if (!calculatedParam.isRepair()) {
//年表 //年表
irDimObjEventYService.eventUserRatioY(calculatedParam);
} }
} }
} }

View File

@@ -1,6 +1,7 @@
package com.njcn.prepare.harmonic.mapper.mysql.dim; package com.njcn.prepare.harmonic.mapper.mysql.dim;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.prepare.harmonic.pojo.po.RDimObjEventM; import com.njcn.prepare.harmonic.pojo.po.RDimObjEventM;
/** /**
@@ -11,6 +12,6 @@ import com.njcn.prepare.harmonic.pojo.po.RDimObjEventM;
* @author xuyang * @author xuyang
* @since 2023-11-23 * @since 2023-11-23
*/ */
public interface RDimObjEventMMapper extends BaseMapper<RDimObjEventM> { public interface RDimObjEventMMapper extends MppBaseMapper<RDimObjEventM> {
} }

View File

@@ -1,6 +1,7 @@
package com.njcn.prepare.harmonic.mapper.mysql.dim; package com.njcn.prepare.harmonic.mapper.mysql.dim;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.prepare.harmonic.pojo.po.RDimObjEventY; import com.njcn.prepare.harmonic.pojo.po.RDimObjEventY;
/** /**
@@ -11,6 +12,6 @@ import com.njcn.prepare.harmonic.pojo.po.RDimObjEventY;
* @author xuyang * @author xuyang
* @since 2023-11-23 * @since 2023-11-23
*/ */
public interface RDimObjEventYMapper extends BaseMapper<RDimObjEventY> { public interface RDimObjEventYMapper extends MppBaseMapper<RDimObjEventY> {
} }

View File

@@ -1,6 +1,8 @@
package com.njcn.prepare.harmonic.service.mysql.dim; package com.njcn.prepare.harmonic.service.mysql.dim;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenDTO;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.pojo.po.RDimObjEventM; import com.njcn.prepare.harmonic.pojo.po.RDimObjEventM;
/** /**
@@ -13,4 +15,10 @@ import com.njcn.prepare.harmonic.pojo.po.RDimObjEventM;
*/ */
public interface IRDimObjEventMService extends IService<RDimObjEventM> { public interface IRDimObjEventMService extends IService<RDimObjEventM> {
/**
* 监测到暂态指标的用户-月表
* @param calculatedParam
*/
void eventUserRatioM(CalculatedParam<DeptGetChildrenDTO> calculatedParam);
} }

View File

@@ -1,6 +1,8 @@
package com.njcn.prepare.harmonic.service.mysql.dim; package com.njcn.prepare.harmonic.service.mysql.dim;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenDTO;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.pojo.po.RDimObjEventY; import com.njcn.prepare.harmonic.pojo.po.RDimObjEventY;
/** /**
@@ -13,4 +15,9 @@ import com.njcn.prepare.harmonic.pojo.po.RDimObjEventY;
*/ */
public interface IRDimObjEventYService extends IService<RDimObjEventY> { public interface IRDimObjEventYService extends IService<RDimObjEventY> {
/**
* 监测到暂态指标的用户-年表
* @param calculatedParam
*/
void eventUserRatioY(CalculatedParam<DeptGetChildrenDTO> calculatedParam);
} }

View File

@@ -14,6 +14,7 @@ import com.njcn.prepare.harmonic.mapper.mysql.area.RMpTargetWarnDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjEventDMapper; import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjEventDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpEventDetailDMapper; import com.njcn.prepare.harmonic.mapper.mysql.line.RMpEventDetailDMapper;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam; import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.pojo.param.EventParam;
import com.njcn.prepare.harmonic.pojo.po.RDimObjEventD; import com.njcn.prepare.harmonic.pojo.po.RDimObjEventD;
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjEventDService; import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjEventDService;
import com.njcn.system.api.DicDataFeignClient; import com.njcn.system.api.DicDataFeignClient;
@@ -69,11 +70,12 @@ public class RDimObjEventDServiceImpl extends MppServiceImpl<RDimObjEventDMapper
//获取当前单位下的有效接入重要、敏感用户监测点信息 //获取当前单位下的有效接入重要、敏感用户监测点信息
List<RMpTargetWarnDPO> effectiveList = getEffective(userList,calculatedParam.getDataDate()); List<RMpTargetWarnDPO> effectiveList = getEffective(userList,calculatedParam.getDataDate());
if (CollectionUtil.isNotEmpty(effectiveList)){ if (CollectionUtil.isNotEmpty(effectiveList)){
rDimObjEventD.setMonitorRate((float)monitorList.size()/effectiveList.size()*100); EventParam param = getEventTimes(userList,calculatedParam.getDataDate());
//获取发生暂态的监测点数
rDimObjEventD.setMonitorRate((float)param.getEventLineCount()/effectiveList.size()*100);
//获取重要用户、敏感用户监测点发生的暂态次数之和 //获取重要用户、敏感用户监测点发生的暂态次数之和
float times = getEventTimes(userList,calculatedParam.getDataDate()); if (!Objects.equals(3.1415926f,param.getEventCount())){
if (!Objects.equals(3.1415926f,times)){ rDimObjEventD.setLimitFreqRate(param.getEventCount()/effectiveList.size());
rDimObjEventD.setLimitFreqRate(times/effectiveList.size());
} }
} else { } else {
rDimObjEventD.setMonitorRate(-1.0f); rDimObjEventD.setMonitorRate(-1.0f);
@@ -106,9 +108,11 @@ public class RDimObjEventDServiceImpl extends MppServiceImpl<RDimObjEventDMapper
return rMpTargetWarnDMapper.selectList(lambdaQueryWrapper); return rMpTargetWarnDMapper.selectList(lambdaQueryWrapper);
} }
public float getEventTimes(List<String> lineList, String time) { public EventParam getEventTimes(List<String> lineList, String time) {
EventParam eventParam = new EventParam();
float result = 3.1415926f; float result = 3.1415926f;
int data = 0; int data = 0;
int count = 0;
LambdaQueryWrapper<RMpEventDetailDPO> lambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<RMpEventDetailDPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.select(RMpEventDetailDPO::getSwellTimes,RMpEventDetailDPO::getSagTimes,RMpEventDetailDPO::getInterruptTimes) lambdaQueryWrapper.select(RMpEventDetailDPO::getSwellTimes,RMpEventDetailDPO::getSagTimes,RMpEventDetailDPO::getInterruptTimes)
.in(RMpEventDetailDPO::getMeasurementPointId,lineList) .in(RMpEventDetailDPO::getMeasurementPointId,lineList)
@@ -117,11 +121,16 @@ public class RDimObjEventDServiceImpl extends MppServiceImpl<RDimObjEventDMapper
if (CollectionUtil.isNotEmpty(eventDay)){ if (CollectionUtil.isNotEmpty(eventDay)){
for (RMpEventDetailDPO item : eventDay) { for (RMpEventDetailDPO item : eventDay) {
int times = item.getSwellTimes() + item.getSagTimes() + item.getInterruptTimes(); int times = item.getSwellTimes() + item.getSagTimes() + item.getInterruptTimes();
if (times == 0){
count++;
}
data = data + times; data = data + times;
} }
result = (float) data; result = (float) data;
} }
return result; eventParam.setEventLineCount(count);
eventParam.setEventCount(result);
return eventParam;
} }
} }

View File

@@ -1,10 +1,38 @@
package com.njcn.prepare.harmonic.service.mysql.dim.impl; package com.njcn.prepare.harmonic.service.mysql.dim.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenDTO;
import com.njcn.device.pms.pojo.po.Monitor;
import com.njcn.harmonic.pojo.po.RMpEventDetailMPO;
import com.njcn.prepare.harmonic.mapper.mysql.area.PmsMonitorPOMapper;
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjEventMMapper; import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjEventMMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpEventDetailMMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.ROperatingMonitorMMapper;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorMPO;
import com.njcn.prepare.harmonic.pojo.param.EventParam;
import com.njcn.prepare.harmonic.pojo.po.RDimObjEventM; import com.njcn.prepare.harmonic.pojo.po.RDimObjEventM;
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjEventMService; import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjEventMService;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/** /**
* <p> * <p>
@@ -15,6 +43,102 @@ import org.springframework.stereotype.Service;
* @since 2023-11-23 * @since 2023-11-23
*/ */
@Service @Service
public class RDimObjEventMServiceImpl extends ServiceImpl<RDimObjEventMMapper, RDimObjEventM> implements IRDimObjEventMService { @RequiredArgsConstructor
@Slf4j
public class RDimObjEventMServiceImpl extends MppServiceImpl<RDimObjEventMMapper, RDimObjEventM> implements IRDimObjEventMService {
private final DicDataFeignClient dicDataFeignClient;
private final RMpEventDetailMMapper rMpEventDetailMMapper;
private final PmsMonitorPOMapper pmsMonitorPOMapper;
private final ROperatingMonitorMMapper rOperatingMonitorMMapper;
@Override
@Transactional(rollbackFor = {Exception.class})
public void eventUserRatioM(CalculatedParam<DeptGetChildrenDTO> calculatedParam) {
log.info(LocalDateTime.now()+"===>监测点指标数据质量月表开始");
List<RDimObjEventM> result = new ArrayList<>();
List<DeptGetChildrenDTO> deptList = calculatedParam.getIdList();
String beginMonth = DateUtil.format(DateUtil.beginOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)), DatePattern.NORM_DATE_PATTERN);
//获取敏感用户、重要用户字典id
String sensitiveUserId = dicDataFeignClient.getDicDataByCode(DicDataEnum.SENSITIVE_USERS.getCode()).getData().getId();
String importantUserId = dicDataFeignClient.getDicDataByCode(DicDataEnum.IMPORTANT_USERS.getCode()).getData().getId();
deptList.forEach(item->{
RDimObjEventM rDimObjEventM = new RDimObjEventM();
rDimObjEventM.setOrgId(item.getDeptId());
rDimObjEventM.setStatisDate(LocalDate.parse(beginMonth, DatePattern.NORM_DATE_FORMATTER));
rDimObjEventM.setMonitorRate(3.1415926f);
rDimObjEventM.setLimitFreqRate(3.1415926f);
List<String> lineList = item.getLineIds();
if (CollectionUtil.isNotEmpty(lineList)){
//获取当前单位下的重要用户、敏感用户监测点信息
List<Monitor> monitorList = getUser(lineList, Arrays.asList(sensitiveUserId,importantUserId));
if(CollectionUtil.isNotEmpty(monitorList)){
List<String> userList = monitorList.stream().map(Monitor::getId).collect(Collectors.toList());
//获取当前单位下的有效接入重要、敏感用户监测点信息
List<ROperatingMonitorMPO> effectiveList = getEffective(userList,beginMonth);
if (CollectionUtil.isNotEmpty(effectiveList)){
EventParam param = getEventTimes(userList,beginMonth);
//获取发生暂态的监测点数
rDimObjEventM.setMonitorRate((float)param.getEventLineCount()/effectiveList.size()*100);
//获取重要用户、敏感用户监测点发生的暂态次数之和
if (!Objects.equals(3.1415926f,param.getEventCount())){
rDimObjEventM.setLimitFreqRate(param.getEventCount()/effectiveList.size());
}
} else {
rDimObjEventM.setMonitorRate(-1.0f);
rDimObjEventM.setLimitFreqRate(-1.0f);
}
}
}
result.add(rDimObjEventM);
});
if (CollectionUtil.isNotEmpty(result)){
this.saveOrUpdateBatchByMultiId(result,100);
}
}
public List<Monitor> getUser(List<String> lineList, List<String> monitorTag) {
LambdaQueryWrapper<Monitor> monitorLambdaQueryWrapper = new LambdaQueryWrapper<>();
monitorLambdaQueryWrapper.select(Monitor::getId, Monitor::getMonitorTag)
.in(Monitor::getId, lineList)
.in(Monitor::getMonitorTag, monitorTag)
.eq(Monitor::getStatus, DataStateEnum.ENABLE.getCode());
return pmsMonitorPOMapper.selectList(monitorLambdaQueryWrapper);
}
public List<ROperatingMonitorMPO> getEffective(List<String> lineList, String time) {
LambdaQueryWrapper<ROperatingMonitorMPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.select(ROperatingMonitorMPO::getMeasurementPointId)
.in(ROperatingMonitorMPO::getMeasurementPointId,lineList)
.eq(ROperatingMonitorMPO::getDataDate,time)
.ge(ROperatingMonitorMPO::getDataIntegrityRate,0.95)
.eq(ROperatingMonitorMPO::getIsUnusual,DataStateEnum.ENABLE.getCode());
return rOperatingMonitorMMapper.selectList(lambdaQueryWrapper);
}
public EventParam getEventTimes(List<String> lineList, String time) {
EventParam eventParam = new EventParam();
float result = 3.1415926f;
int data = 0;
int count = 0;
LambdaQueryWrapper<RMpEventDetailMPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.select(RMpEventDetailMPO::getSwellTimes,RMpEventDetailMPO::getSagTimes,RMpEventDetailMPO::getInterruptTimes)
.in(RMpEventDetailMPO::getMeasurementPointId,lineList)
.eq(RMpEventDetailMPO::getDataDate,time);
List<RMpEventDetailMPO> eventDay = rMpEventDetailMMapper.selectList(lambdaQueryWrapper);
if (CollectionUtil.isNotEmpty(eventDay)){
for (RMpEventDetailMPO item : eventDay) {
int times = item.getSwellTimes() + item.getSagTimes() + item.getInterruptTimes();
if (times == 0){
count++;
}
data = data + times;
}
result = (float) data;
}
eventParam.setEventLineCount(count);
eventParam.setEventCount(result);
return eventParam;
}
} }

View File

@@ -1,10 +1,36 @@
package com.njcn.prepare.harmonic.service.mysql.dim.impl; package com.njcn.prepare.harmonic.service.mysql.dim.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenDTO;
import com.njcn.device.pms.pojo.po.Monitor;
import com.njcn.harmonic.pojo.po.RMpEventDetailMPO;
import com.njcn.prepare.harmonic.mapper.mysql.area.PmsMonitorPOMapper;
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjEventYMapper; import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjEventYMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpEventDetailMMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.ROperatingMonitorMMapper;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorMPO;
import com.njcn.prepare.harmonic.pojo.param.EventParam;
import com.njcn.prepare.harmonic.pojo.po.RDimObjEventM;
import com.njcn.prepare.harmonic.pojo.po.RDimObjEventY; import com.njcn.prepare.harmonic.pojo.po.RDimObjEventY;
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjEventYService; import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjEventYService;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
/** /**
* <p> * <p>
@@ -15,6 +41,109 @@ import org.springframework.stereotype.Service;
* @since 2023-11-23 * @since 2023-11-23
*/ */
@Service @Service
public class RDimObjEventYServiceImpl extends ServiceImpl<RDimObjEventYMapper, RDimObjEventY> implements IRDimObjEventYService { @RequiredArgsConstructor
@Slf4j
public class RDimObjEventYServiceImpl extends MppServiceImpl<RDimObjEventYMapper, RDimObjEventY> implements IRDimObjEventYService {
private final DicDataFeignClient dicDataFeignClient;
private final RMpEventDetailMMapper rMpEventDetailMMapper;
private final PmsMonitorPOMapper pmsMonitorPOMapper;
private final ROperatingMonitorMMapper rOperatingMonitorMMapper;
@Override
@Transactional(rollbackFor = {Exception.class})
public void eventUserRatioY(CalculatedParam<DeptGetChildrenDTO> calculatedParam) {
log.info(LocalDateTime.now()+"===>监测点指标数据质量年表开始");
List<RDimObjEventY> result = new ArrayList<>();
List<DeptGetChildrenDTO> deptList = calculatedParam.getIdList();
String beginYear = DateUtil.format(DateUtil.beginOfYear(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)), DatePattern.NORM_DATE_PATTERN);
String endYear = DateUtil.format(DateUtil.endOfYear(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)), DatePattern.NORM_DATE_PATTERN);
//获取敏感用户、重要用户字典id
String sensitiveUserId = dicDataFeignClient.getDicDataByCode(DicDataEnum.SENSITIVE_USERS.getCode()).getData().getId();
String importantUserId = dicDataFeignClient.getDicDataByCode(DicDataEnum.IMPORTANT_USERS.getCode()).getData().getId();
deptList.forEach(item->{
RDimObjEventY rDimObjEventY = new RDimObjEventY();
rDimObjEventY.setOrgId(item.getDeptId());
rDimObjEventY.setStatisDate(LocalDate.parse(beginYear, DatePattern.NORM_DATE_FORMATTER));
rDimObjEventY.setMonitorRate(3.1415926f);
rDimObjEventY.setLimitFreqRate(3.1415926f);
List<String> lineList = item.getLineIds();
if (CollectionUtil.isNotEmpty(lineList)){
//获取当前单位下的重要用户、敏感用户监测点信息
List<Monitor> monitorList = getUser(lineList, Arrays.asList(sensitiveUserId,importantUserId));
if(CollectionUtil.isNotEmpty(monitorList)){
List<String> userList = monitorList.stream().map(Monitor::getId).collect(Collectors.toList());
//获取当前单位下的有效接入重要、敏感用户监测点信息,年按照月来统计,只要一个月是有效接入,当年就算有效接入
List<ROperatingMonitorMPO> effectiveList = getEffective(userList,beginYear,endYear);
if (CollectionUtil.isNotEmpty(effectiveList)){
EventParam param = getEventTimes(userList,beginYear,endYear);
//获取发生暂态的监测点数
rDimObjEventY.setMonitorRate((float)param.getEventLineCount()/effectiveList.size()*100);
//获取重要用户、敏感用户监测点发生的暂态次数之和
if (!Objects.equals(3.1415926f,param.getEventCount())){
rDimObjEventY.setLimitFreqRate(param.getEventCount()/effectiveList.size());
}
} else {
rDimObjEventY.setMonitorRate(-1.0f);
rDimObjEventY.setLimitFreqRate(-1.0f);
}
}
}
result.add(rDimObjEventY);
});
if (CollectionUtil.isNotEmpty(result)){
this.saveOrUpdateBatchByMultiId(result,100);
}
}
public List<Monitor> getUser(List<String> lineList, List<String> monitorTag) {
LambdaQueryWrapper<Monitor> monitorLambdaQueryWrapper = new LambdaQueryWrapper<>();
monitorLambdaQueryWrapper.select(Monitor::getId, Monitor::getMonitorTag)
.in(Monitor::getId, lineList)
.in(Monitor::getMonitorTag, monitorTag)
.eq(Monitor::getStatus, DataStateEnum.ENABLE.getCode());
return pmsMonitorPOMapper.selectList(monitorLambdaQueryWrapper);
}
public List<ROperatingMonitorMPO> getEffective(List<String> lineList, String startTime, String endTime) {
List<ROperatingMonitorMPO> result = new ArrayList<>();
LambdaQueryWrapper<ROperatingMonitorMPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.select(ROperatingMonitorMPO::getMeasurementPointId)
.in(ROperatingMonitorMPO::getMeasurementPointId,lineList)
.between(ROperatingMonitorMPO::getDataDate,startTime,endTime)
.ge(ROperatingMonitorMPO::getDataIntegrityRate,0.95)
.eq(ROperatingMonitorMPO::getIsUnusual,DataStateEnum.ENABLE.getCode());
List<ROperatingMonitorMPO> list = rOperatingMonitorMMapper.selectList(lambdaQueryWrapper);
if (CollectionUtil.isNotEmpty(list)){
result = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(ROperatingMonitorMPO :: getMeasurementPointId))), ArrayList::new));
}
return result;
}
public EventParam getEventTimes(List<String> lineList, String startTime, String endTime) {
EventParam eventParam = new EventParam();
float result = 3.1415926f;
int data = 0;
int count = 0;
LambdaQueryWrapper<RMpEventDetailMPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.select(RMpEventDetailMPO::getSwellTimes,RMpEventDetailMPO::getSagTimes,RMpEventDetailMPO::getInterruptTimes)
.in(RMpEventDetailMPO::getMeasurementPointId,lineList)
.between(RMpEventDetailMPO::getDataDate,startTime,endTime);
List<RMpEventDetailMPO> eventDay = rMpEventDetailMMapper.selectList(lambdaQueryWrapper);
if (CollectionUtil.isNotEmpty(eventDay)){
Map<String,List<RMpEventDetailMPO>> map = eventDay.stream().collect(Collectors.groupingBy(RMpEventDetailMPO::getMeasurementPointId));
for(String key : map.keySet()){
for (RMpEventDetailMPO item : map.get(key)) {
int times = item.getSwellTimes() + item.getSagTimes() + item.getInterruptTimes();
data = data + times;
}
if (data > 0){
count++;
}
}
}
eventParam.setEventLineCount(count);
eventParam.setEventCount(result);
return eventParam;
}
} }