指标差值日统计算法提交
This commit is contained in:
@@ -48,4 +48,17 @@ public class AlarmDetailController extends BaseController {
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @author xuyang
|
||||
*/
|
||||
@OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.ADD)
|
||||
@PostMapping("/targetDiff")
|
||||
@ApiOperation("监测点稳态指标差值日统计")
|
||||
@ApiImplicitParam(name = "lineParam", value = "算法通用查询参数", required = true)
|
||||
public HttpResult<Boolean> targetDiff(@RequestBody @Validated LineParam lineParam) {
|
||||
String methodDescribe = getMethodDescribe("targetDiff");
|
||||
alarmDetailService.targetDiff(lineParam);
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.njcn.prepare.harmonic.mapper.mysql.line;
|
||||
|
||||
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
|
||||
import com.njcn.prepare.harmonic.pojo.mysql.po.line.RMpTargetDiffDPO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author xuyang
|
||||
* @date 2023/05/08
|
||||
*/
|
||||
public interface AlarmMapper extends MppBaseMapper<RMpTargetDiffDPO> {
|
||||
|
||||
/**
|
||||
* 获取监测点每日指标数据
|
||||
* @param time 时间
|
||||
* @return 集合
|
||||
*/
|
||||
List<RMpTargetDiffDPO> getDayData(@Param("time") String time);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.njcn.prepare.harmonic.mapper.mysql.line.AlarmMapper">
|
||||
|
||||
<select id="getDayData" resultType="com.njcn.prepare.harmonic.pojo.mysql.po.line.RMpTargetDiffDPO">
|
||||
select
|
||||
A.time,
|
||||
A.lineId,
|
||||
coalesce(A.vUnbalance, 0) vUnbalance,
|
||||
coalesce(A.v, 0) vHarmonic,
|
||||
coalesce(B.vlDev, 0) vlDev,
|
||||
coalesce(B.freqDev, 0) freqDev,
|
||||
coalesce(C.plt, 0) plt,
|
||||
coalesce(D.sagTimes, 0) sagTimes,
|
||||
coalesce(D.interruptTimes, 0) interruptTimes
|
||||
from
|
||||
(
|
||||
select
|
||||
`time`,
|
||||
line_id lineId,
|
||||
max(abs(v_unbalance)) vUnbalance,
|
||||
max(greatest(abs(v_thd), v_1, v_2, v_3, v_4, v_5, v_6, v_7, v_8, v_9, v_10, v_11, v_12, v_13, v_14, v_15, v_16, v_17, v_18, v_19, v_20, v_21, v_22, v_23, v_24, v_25, v_26, v_27, v_28, v_29, v_30, v_31, v_32, v_33, v_34, v_35, v_36, v_37, v_38, v_39, v_40, v_41, v_42, v_43, v_44, v_45, v_46, v_47, v_48, v_49, v_50)) v
|
||||
from
|
||||
r_stat_data_v_d t0
|
||||
where
|
||||
`time` = #{time}
|
||||
and value_type = 'CP95'
|
||||
group by
|
||||
`time`,
|
||||
line_id
|
||||
) A
|
||||
left join
|
||||
(
|
||||
select
|
||||
`time`,
|
||||
line_id lineId,
|
||||
max(abs(vl_dev)) vlDev,
|
||||
max(abs(freq_dev)) freqDev
|
||||
from
|
||||
r_stat_data_v_d t0
|
||||
where
|
||||
`time` = #{time}
|
||||
and value_type = 'MAX'
|
||||
group by
|
||||
`time`,
|
||||
line_id
|
||||
) B
|
||||
on A.time = B.time and A.lineId = B.lineId
|
||||
left join
|
||||
(
|
||||
select
|
||||
`time` ,
|
||||
line_id lineId,
|
||||
max(plt) plt
|
||||
from
|
||||
r_stat_data_plt_d
|
||||
where
|
||||
`time` = #{time}
|
||||
and value_type = 'MAX'
|
||||
group by
|
||||
`time`,
|
||||
line_id
|
||||
) C
|
||||
on A.time = C.time and A.lineId = C.lineId
|
||||
left join
|
||||
(
|
||||
select
|
||||
measurement_point_id lineId,
|
||||
data_date dataDate,
|
||||
sag_times sagTimes,
|
||||
interrupt_times interruptTimes
|
||||
from
|
||||
r_mp_event_detail_d
|
||||
where
|
||||
data_date = #{time}
|
||||
) D
|
||||
on A.time = D.dataDate and A.lineId = D.lineId
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -3,6 +3,7 @@ package com.njcn.prepare.harmonic.service.mysql.Impl.line;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
|
||||
import com.njcn.device.pms.api.DistributionMonitorClient;
|
||||
import com.njcn.device.pms.api.MonitorClient;
|
||||
import com.njcn.device.pms.pojo.po.DistributionMonitor;
|
||||
@@ -10,17 +11,25 @@ import com.njcn.device.pms.pojo.po.Monitor;
|
||||
import com.njcn.harmonic.pojo.po.RMpTargetWarnDPO;
|
||||
import com.njcn.prepare.harmonic.mapper.mysql.area.RMpTargetWarnDMapper;
|
||||
import com.njcn.prepare.harmonic.mapper.mysql.line.*;
|
||||
import com.njcn.prepare.harmonic.pojo.mysql.po.line.RMpTargetDiffDPO;
|
||||
import com.njcn.prepare.harmonic.pojo.param.LineParam;
|
||||
import com.njcn.prepare.harmonic.service.mysql.line.AlarmDetailService;
|
||||
import com.njcn.prepare.harmonic.utils.PublicUtil;
|
||||
import com.njcn.system.api.DicDataFeignClient;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 数据是否异常
|
||||
@@ -32,7 +41,7 @@ import java.util.Objects;
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class AlarmDetailServiceImpl implements AlarmDetailService {
|
||||
public class AlarmDetailServiceImpl extends MppServiceImpl<AlarmMapper, RMpTargetDiffDPO> implements AlarmDetailService {
|
||||
|
||||
private final DistributionMonitorClient distributionMonitorClient;
|
||||
|
||||
@@ -104,6 +113,55 @@ public class AlarmDetailServiceImpl implements AlarmDetailService {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = {Exception.class})
|
||||
@Async("asyncExecutor")
|
||||
public void targetDiff(LineParam lineParam) {
|
||||
String startTime,endTime;
|
||||
//月处理
|
||||
if (lineParam.getType() == 3){
|
||||
int year = Integer.parseInt(lineParam.getDataDate().split("-")[0]);
|
||||
int month = Integer.parseInt(lineParam.getDataDate().split("-")[1]);
|
||||
List<String> dayList = PublicUtil.getDayByMonth(year,month);
|
||||
for (String item : dayList) {
|
||||
log.info(item+"-->开始执行");
|
||||
startTime = item + " 00:00:00";
|
||||
endTime = PublicUtil.getYesterday(item) + " 00:00:00";
|
||||
diffData(startTime,endTime);
|
||||
}
|
||||
}
|
||||
//日处理
|
||||
else {
|
||||
startTime = lineParam.getDataDate() + " 00:00:00";
|
||||
endTime = PublicUtil.getYesterday(lineParam.getDataDate()) + " 00:00:00";
|
||||
diffData(startTime,endTime);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成指标差值日统计
|
||||
*/
|
||||
public void diffData(String startTime, String endTime) {
|
||||
List<RMpTargetDiffDPO> localData = this.baseMapper.getDayData(startTime);
|
||||
List<RMpTargetDiffDPO> yesterdayData = this.baseMapper.getDayData(endTime);
|
||||
if (!CollectionUtils.isEmpty(localData) && !CollectionUtils.isEmpty(yesterdayData)){
|
||||
//取两个集合的交集,做算法处理取绝对值
|
||||
List<RMpTargetDiffDPO> intersectionList = localData.stream().map(map->yesterdayData.stream().filter(m->Objects.equals(m.getLineId(),map.getLineId())).findFirst().map(m->{
|
||||
map.setVlDev(Math.abs(map.getVlDev()-m.getVlDev()));
|
||||
map.setFreqDev(Math.abs(map.getFreqDev()-m.getFreqDev()));
|
||||
map.setVUnbalance(Math.abs(map.getVUnbalance()-m.getVUnbalance()));
|
||||
map.setVHarmonic(Math.abs(map.getVHarmonic()-m.getVHarmonic()));
|
||||
map.setPlt(Math.abs(map.getPlt()-m.getPlt()));
|
||||
map.setSagTimes(Math.abs(map.getSagTimes()-m.getSagTimes()));
|
||||
map.setInterruptTimes(Math.abs(map.getInterruptTimes()-m.getInterruptTimes()));
|
||||
return map;
|
||||
}).orElse(null)).filter(Objects::nonNull).collect(Collectors.toList());
|
||||
if (!CollectionUtils.isEmpty(intersectionList)){
|
||||
this.saveOrUpdateBatchByMultiId(intersectionList,50);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理数据(电压偏差告警日统计)
|
||||
* @author qijian
|
||||
|
||||
@@ -18,4 +18,6 @@ public interface AlarmDetailService {
|
||||
* @return
|
||||
*/
|
||||
boolean alarmDetailAlarm(LineParam lineParam);
|
||||
|
||||
void targetDiff(LineParam lineParam);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user