新算法25、26提交
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user