算法改造
This commit is contained in:
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
@@ -24,10 +25,10 @@ import java.util.Date;
|
||||
@TableName(value = "r_mp_dev_evaluate_detail")
|
||||
public class RMpDevEvaluateDetailPO {
|
||||
/**
|
||||
* 生成数据的时间,每月统计一次
|
||||
* 生成数据的时间,每日统计一次
|
||||
*/
|
||||
@MppMultiId(value = "data_date")
|
||||
private Date dataDate;
|
||||
private LocalDate dataDate;
|
||||
|
||||
/**
|
||||
* 终端id
|
||||
|
||||
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Date;
|
||||
|
||||
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
|
||||
@@ -23,7 +25,7 @@ public class RStatDevSignalDPO {
|
||||
* 更新时间
|
||||
*/
|
||||
@MppMultiId(value = "data_date")
|
||||
private Date dataDate;
|
||||
private LocalDate dataDate;
|
||||
|
||||
/**
|
||||
* 终端Id
|
||||
|
||||
@@ -2,7 +2,9 @@ package com.njcn.prepare.executor;
|
||||
|
||||
import com.njcn.prepare.bo.CalculatedParam;
|
||||
import com.njcn.prepare.harmonic.service.mysql.area.IRMpMonitorAlarmCountMService;
|
||||
import com.njcn.prepare.harmonic.service.mysql.area.RMpDevEvaluateDetailPOService;
|
||||
import com.njcn.prepare.harmonic.service.mysql.area.RMpTargetWarnDService;
|
||||
import com.njcn.prepare.harmonic.service.mysql.device.RStatDevSignalDPOService;
|
||||
import com.njcn.prepare.harmonic.service.mysql.line.DayDataService;
|
||||
import com.njcn.prepare.harmonic.service.mysql.line.RMpEventDetailDService;
|
||||
import com.njcn.prepare.harmonic.service.mysql.line.RMpEventDetailService;
|
||||
@@ -49,6 +51,9 @@ public class MeasurementExecutor extends BaseExecutor {
|
||||
private final IRMpMonitorAlarmCountMService rMpMonitorAlarmCountMService;
|
||||
|
||||
private final PollutionService pollutionService;
|
||||
private final RStatDevSignalDPOService rStatDevSignalDPOService;
|
||||
private final RMpDevEvaluateDetailPOService rMpDevEvaluateDetailPOService;
|
||||
private final NormalLimitService normLimitService;
|
||||
|
||||
/**
|
||||
* 算法名: 3.3.1.1-----监测点评价
|
||||
@@ -343,6 +348,36 @@ public class MeasurementExecutor extends BaseExecutor {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 算法名: 3.3.3.1-----终端通信管理_日统计(r_stat_dev_signal_d)
|
||||
*
|
||||
* @author xuyang
|
||||
* @date 2023年11月14日 13:51
|
||||
*/
|
||||
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "rStatDevSignal", nodeType = NodeTypeEnum.COMMON)
|
||||
public boolean rStatDevSignalAccess(NodeComponent bindCmp) {
|
||||
return isAccess(bindCmp);
|
||||
}
|
||||
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "rStatDevSignal", nodeType = NodeTypeEnum.COMMON)
|
||||
public void rStatDevSignalProcess(NodeComponent bindCmp) {
|
||||
rStatDevSignalDPOService.devSignalD(bindCmp.getRequestData());
|
||||
}
|
||||
|
||||
/**
|
||||
* 算法名: 3.3.3.2-----终端数据评价_日统计(r_mp_dev_evaluate_detail)
|
||||
*
|
||||
* @author xuyang
|
||||
* @date 2023年11月14日 16:06
|
||||
*/
|
||||
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "rMpDevEvaluateDetail", nodeType = NodeTypeEnum.COMMON)
|
||||
public boolean rMpDevEvaluateDetailAccess(NodeComponent bindCmp) {
|
||||
return isAccess(bindCmp);
|
||||
}
|
||||
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "rMpDevEvaluateDetail", nodeType = NodeTypeEnum.COMMON)
|
||||
public void rMpDevEvaluateDetailProcess(NodeComponent bindCmp) {
|
||||
rMpDevEvaluateDetailPOService.devEvaluateDetail(bindCmp.getRequestData());
|
||||
}
|
||||
|
||||
/********************************************算法负责人:xy结束***********************************************************/
|
||||
|
||||
|
||||
|
||||
@@ -97,10 +97,10 @@ public class RMpDevEvaluateDetailController extends BaseController {
|
||||
deviceParam.setDataDate(item);
|
||||
deviceParam.setBeginTime(item + " " + "00:00:00");
|
||||
deviceParam.setEndTime(item + " " + "23:59:59");
|
||||
rMpDevEvaluateDetailPOService.handler(deviceParam);
|
||||
// rMpDevEvaluateDetailPOService.handler(deviceParam);
|
||||
}
|
||||
} else {
|
||||
rMpDevEvaluateDetailPOService.handler(deviceParam);
|
||||
// rMpDevEvaluateDetailPOService.handler(deviceParam);
|
||||
}
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
|
||||
}
|
||||
|
||||
@@ -98,10 +98,10 @@ public class RStatDevSignalController extends BaseController {
|
||||
deviceParam.setDataDate(item);
|
||||
deviceParam.setBeginTime(item + " " + "00:00:00");
|
||||
deviceParam.setEndTime(item + " " + "23:59:59");
|
||||
rStatDevSignalDPOService.eventdetailHandler(deviceParam);
|
||||
// rStatDevSignalDPOService.eventdetailHandler(deviceParam);
|
||||
}
|
||||
} else {
|
||||
rStatDevSignalDPOService.eventdetailHandler(deviceParam);
|
||||
// rStatDevSignalDPOService.eventdetailHandler(deviceParam);
|
||||
}
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.njcn.prepare.harmonic.service.mysql.Impl.area;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.njcn.common.pojo.exception.BusinessException;
|
||||
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
|
||||
@@ -117,9 +119,6 @@ public class PrimaryGridDataServiceImpl implements PrimaryGridDataService {
|
||||
List<String> deviceIds = primaryGridDataIntegrityParam.getDeviceId();
|
||||
String dataDate = primaryGridDataIntegrityParam.getDataDate();
|
||||
List<RMpDevEvaluateDetailPO> rMpDevEvaluateDetailPOList = new ArrayList<>();
|
||||
|
||||
final Date tempDate = new SimpleDateFormat("yyyy-MM-dd").parse(dataDate);
|
||||
|
||||
deviceIds.forEach(deviceId -> {
|
||||
double dev_data_rate = 0.00;
|
||||
/*获取终端下的监测点集合*/
|
||||
@@ -144,7 +143,7 @@ public class PrimaryGridDataServiceImpl implements PrimaryGridDataService {
|
||||
}
|
||||
RMpDevEvaluateDetailPO rMpDevEvaluateDetailPO = new RMpDevEvaluateDetailPO();
|
||||
rMpDevEvaluateDetailPO.setDeviceId(deviceId);
|
||||
rMpDevEvaluateDetailPO.setDataDate(tempDate);
|
||||
rMpDevEvaluateDetailPO.setDataDate(LocalDateTimeUtil.parseDate(dataDate, DatePattern.NORM_DATE_FORMATTER));
|
||||
rMpDevEvaluateDetailPO.setDevDataRate(dev_data_rate);
|
||||
rMpDevEvaluateDetailPOList.add(rMpDevEvaluateDetailPO);
|
||||
});
|
||||
|
||||
@@ -1,29 +1,45 @@
|
||||
package com.njcn.prepare.harmonic.service.mysql.Impl.area;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
|
||||
import com.github.jknack.handlebars.internal.antlr.misc.Array2DHashSet;
|
||||
import com.njcn.common.utils.PubUtils;
|
||||
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
|
||||
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
|
||||
import com.njcn.harmonic.pojo.po.RMpDevEvaluateDetailPO;
|
||||
import com.njcn.prepare.bo.CalculatedParam;
|
||||
import com.njcn.prepare.harmonic.mapper.mysql.area.RMpDevEvaluateDetailPOMapper;
|
||||
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpMonitorEvaluateDMapper;
|
||||
import com.njcn.prepare.harmonic.mapper.mysql.line.ROperatingMonitorDMapper;
|
||||
import com.njcn.prepare.harmonic.pojo.mysql.RMpMonitorEvaluateDPO;
|
||||
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorDPO;
|
||||
import com.njcn.prepare.harmonic.pojo.param.DeviceParam;
|
||||
import com.njcn.prepare.harmonic.pojo.po.RMpDevSolveDetailPO;
|
||||
import com.njcn.prepare.harmonic.pojo.po.RStatDevSignalDPO;
|
||||
import com.njcn.prepare.harmonic.service.mysql.area.RMpDevEvaluateDetailPOService;
|
||||
import com.njcn.prepare.harmonic.service.mysql.device.RMpDevSolveDetailPOService;
|
||||
import com.njcn.system.enums.DicDataEnum;
|
||||
import com.njcn.system.pojo.po.DictData;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.ListUtils;
|
||||
import org.apache.commons.collections4.SetUtils;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -36,60 +52,128 @@ import java.util.List;
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class RMpDevEvaluateDetailPOServiceImpl extends MppServiceImpl<RMpDevEvaluateDetailPOMapper, RMpDevEvaluateDetailPO> implements RMpDevEvaluateDetailPOService{
|
||||
|
||||
private final ROperatingMonitorDMapper rOperatingMonitorDMapper;
|
||||
private final RMpDevSolveDetailPOService rMpDevSolveDetailPOService;
|
||||
private final DecimalFormat df = new DecimalFormat("#.00");
|
||||
|
||||
private final RMpMonitorEvaluateDMapper revaluateDMapper;
|
||||
private final CommTerminalGeneralClient commTerminalGeneralClient;
|
||||
|
||||
// @Override
|
||||
// @Transactional(rollbackFor = {Exception.class})
|
||||
// @Async("asyncExecutor")
|
||||
// @SneakyThrows
|
||||
// public void handler(DeviceParam deviceParam) {
|
||||
//
|
||||
// List<RMpDevEvaluateDetailPO> rMpDevEvaluateDetailPOList = new ArrayList<>();
|
||||
// Date date = DateUtil.parse(deviceParam.getDataDate());
|
||||
// QueryWrapper<ROperatingMonitorDPO> wrapper = new QueryWrapper<>();
|
||||
// QueryWrapper<RMpDevSolveDetailPO> wrapper1 = new QueryWrapper<>();
|
||||
//
|
||||
// deviceParam.getDetailList().forEach(temp -> {
|
||||
//
|
||||
// RMpDevEvaluateDetailPO rMpDevEvaluateDetailPO = new RMpDevEvaluateDetailPO();
|
||||
// rMpDevEvaluateDetailPO.setDeviceId(temp.getDevId());
|
||||
// rMpDevEvaluateDetailPO.setDataDate(date);
|
||||
//
|
||||
// wrapper.clear();
|
||||
// wrapper1.clear();
|
||||
// wrapper1.select(RMpDevSolveDetailPO.COL_DEFECT_SEVERITY).
|
||||
// eq(RMpDevSolveDetailPO.COL_DEVICE_ID,temp.getDevId()).
|
||||
// eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",deviceParam.getDataDate());
|
||||
// RMpDevSolveDetailPO one = rMpDevSolveDetailPOService.getOne(wrapper1);
|
||||
// Double defectSeverity = PubUtils.getDefectSeverity(one.getDefectSeverity());
|
||||
// rMpDevEvaluateDetailPO.setDevScore(Double.valueOf(df.format(defectSeverity/3)));
|
||||
//
|
||||
// List<ROperatingMonitorDPO> rOperatingMonitorDPOS = new ArrayList<>();
|
||||
//
|
||||
// List<String> lineIds = temp.getLineIds();
|
||||
// if(CollUtil.isNotEmpty(lineIds)){
|
||||
// wrapper.in("measurement_point_id", lineIds);
|
||||
// rOperatingMonitorDPOS = rOperatingMonitorDMapper.selectList(wrapper);
|
||||
// }
|
||||
// double asDouble1=0.00 ,asDouble2=0.00,aDouble=0.00;
|
||||
// if(rOperatingMonitorDPOS.size()>0){
|
||||
// asDouble1= rOperatingMonitorDPOS.stream().mapToDouble(po -> po.getDataIntegrityRate().doubleValue()).average().getAsDouble();
|
||||
// asDouble2 = rOperatingMonitorDPOS.stream().mapToDouble(po -> po.getIndexIntegrityRate().doubleValue()).average().getAsDouble();
|
||||
// long count = rOperatingMonitorDPOS.stream().filter(po -> po.getIsUnusual() == 1 && po.getDataIntegrityRate().compareTo(new BigDecimal(0.95)) == 1).count();
|
||||
// aDouble = Double.valueOf(count) / rOperatingMonitorDPOS.size();
|
||||
// }
|
||||
// rMpDevEvaluateDetailPO.setDevDataRate(Double.valueOf(df.format(asDouble1)));
|
||||
// rMpDevEvaluateDetailPO.setDevTargetRate(Double.valueOf(df.format(asDouble2)));
|
||||
// rMpDevEvaluateDetailPO.setDevEffectiveRate(Double.valueOf(df.format(aDouble)));
|
||||
// rMpDevEvaluateDetailPOList.add(rMpDevEvaluateDetailPO);
|
||||
//
|
||||
// });
|
||||
// this.saveOrUpdateBatchByMultiId(rMpDevEvaluateDetailPOList,500);
|
||||
// }
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = {Exception.class})
|
||||
@Async("asyncExecutor")
|
||||
@SneakyThrows
|
||||
public void handler(DeviceParam deviceParam) {
|
||||
|
||||
public void devEvaluateDetail(CalculatedParam calculatedParam) {
|
||||
log.info(LocalDateTime.now()+"===>终端评价详情-日统计算法开始");
|
||||
List<RMpDevEvaluateDetailPO> rMpDevEvaluateDetailPOList = new ArrayList<>();
|
||||
Date date = DateUtil.parse(deviceParam.getDataDate());
|
||||
QueryWrapper<ROperatingMonitorDPO> wrapper = new QueryWrapper<>();
|
||||
QueryWrapper<RMpDevSolveDetailPO> wrapper1 = new QueryWrapper<>();
|
||||
|
||||
deviceParam.getDetailList().forEach(temp -> {
|
||||
|
||||
RMpDevEvaluateDetailPO rMpDevEvaluateDetailPO = new RMpDevEvaluateDetailPO();
|
||||
rMpDevEvaluateDetailPO.setDeviceId(temp.getDevId());
|
||||
rMpDevEvaluateDetailPO.setDataDate(date);
|
||||
|
||||
wrapper.clear();
|
||||
wrapper1.clear();
|
||||
wrapper1.select(RMpDevSolveDetailPO.COL_DEFECT_SEVERITY).
|
||||
eq(RMpDevSolveDetailPO.COL_DEVICE_ID,temp.getDevId()).
|
||||
eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",deviceParam.getDataDate());
|
||||
RMpDevSolveDetailPO one = rMpDevSolveDetailPOService.getOne(wrapper1);
|
||||
Double defectSeverity = PubUtils.getDefectSeverity(one.getDefectSeverity());
|
||||
rMpDevEvaluateDetailPO.setDevScore(Double.valueOf(df.format(defectSeverity/3)));
|
||||
|
||||
List<ROperatingMonitorDPO> rOperatingMonitorDPOS = new ArrayList<>();
|
||||
|
||||
List<String> lineIds = temp.getLineIds();
|
||||
if(CollUtil.isNotEmpty(lineIds)){
|
||||
wrapper.in("measurement_point_id", lineIds);
|
||||
rOperatingMonitorDPOS = rOperatingMonitorDMapper.selectList(wrapper);
|
||||
List<ROperatingMonitorDPO> operatingMonitorList = new ArrayList<>();
|
||||
List<RMpDevSolveDetailPO> devSolveDetailList = new ArrayList<>();
|
||||
List<LineDevGetDTO> lineDevGetList = new ArrayList<>();
|
||||
List<String> deviceList = new ArrayList<>();
|
||||
List<String> lineIds = calculatedParam.getIdList();
|
||||
//以尺寸100分片,查询数据
|
||||
List<List<String>> pendingIds = ListUtils.partition(lineIds,100);
|
||||
for (List<String> pendingId : pendingIds) {
|
||||
//获取监测点评价详情
|
||||
LambdaQueryWrapper<ROperatingMonitorDPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.in(ROperatingMonitorDPO::getMeasurementPointId,pendingId)
|
||||
.eq(ROperatingMonitorDPO::getDataDate,calculatedParam.getDataDate());
|
||||
List<ROperatingMonitorDPO> ls = rOperatingMonitorDMapper.selectList(lambdaQueryWrapper);
|
||||
operatingMonitorList.addAll(ls);
|
||||
//监测点详情
|
||||
lineDevGetList.addAll(commTerminalGeneralClient.getMonitorDetailList(pendingId).getData());
|
||||
}
|
||||
double asDouble1=0.00 ,asDouble2=0.00,aDouble=0.00;
|
||||
if(rOperatingMonitorDPOS.size()>0){
|
||||
asDouble1= rOperatingMonitorDPOS.stream().mapToDouble(po -> po.getDataIntegrityRate().doubleValue()).average().getAsDouble();
|
||||
asDouble2 = rOperatingMonitorDPOS.stream().mapToDouble(po -> po.getIndexIntegrityRate().doubleValue()).average().getAsDouble();
|
||||
long count = rOperatingMonitorDPOS.stream().filter(po -> po.getIsUnusual() == 1 && po.getDataIntegrityRate().compareTo(new BigDecimal(0.95)) == 1).count();
|
||||
aDouble = Double.valueOf(count) / rOperatingMonitorDPOS.size();
|
||||
Map<String,List<ROperatingMonitorDPO>> map1 = operatingMonitorList.stream().collect(Collectors.groupingBy(ROperatingMonitorDPO::getDevId));
|
||||
Map<String,List<LineDevGetDTO>> map2 = lineDevGetList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getDevId));
|
||||
//获取装置集合
|
||||
map2.forEach((k,v)->{
|
||||
if (!deviceList.contains(k)){
|
||||
deviceList.add(k);
|
||||
}
|
||||
rMpDevEvaluateDetailPO.setDevDataRate(Double.valueOf(df.format(asDouble1)));
|
||||
rMpDevEvaluateDetailPO.setDevTargetRate(Double.valueOf(df.format(asDouble2)));
|
||||
rMpDevEvaluateDetailPO.setDevEffectiveRate(Double.valueOf(df.format(aDouble)));
|
||||
rMpDevEvaluateDetailPOList.add(rMpDevEvaluateDetailPO);
|
||||
|
||||
});
|
||||
this.saveOrUpdateBatchByMultiId(rMpDevEvaluateDetailPOList,500);
|
||||
//以尺寸100分片,查询装置数据
|
||||
List<List<String>> devIds = ListUtils.partition(deviceList,100);
|
||||
for (List<String> devId : devIds) {
|
||||
//获取终端消缺明细数据
|
||||
LambdaQueryWrapper<RMpDevSolveDetailPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.in(RMpDevSolveDetailPO::getDeviceId,devId)
|
||||
.eq(RMpDevSolveDetailPO::getDataDate,calculatedParam.getDataDate());
|
||||
List<RMpDevSolveDetailPO> ls = rMpDevSolveDetailPOService.list(lambdaQueryWrapper);
|
||||
devSolveDetailList.addAll(ls);
|
||||
}
|
||||
Map<String,List<RMpDevSolveDetailPO>> map3 = devSolveDetailList.stream().collect(Collectors.groupingBy(RMpDevSolveDetailPO::getDeviceId));
|
||||
map2.forEach((k,v)->{
|
||||
RMpDevEvaluateDetailPO rMpDevEvaluateDetailPO = new RMpDevEvaluateDetailPO();
|
||||
rMpDevEvaluateDetailPO.setDeviceId(k);
|
||||
rMpDevEvaluateDetailPO.setDataDate(LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(),DatePattern.NORM_DATE_FORMATTER));
|
||||
rMpDevEvaluateDetailPO.setDevScore(Objects.isNull(map3.get(k)) ? null: PubUtils.getDefectSeverity(map3.get(k).get(0).getDefectSeverity()));
|
||||
if (!Objects.isNull(map1.get(k))){
|
||||
List<ROperatingMonitorDPO> ls = map1.get(k);
|
||||
double d1 = ls.stream().mapToDouble(po -> po.getDataIntegrityRate().doubleValue()).average().getAsDouble();
|
||||
double d2 = ls.stream().mapToDouble(po -> po.getIndexIntegrityRate().doubleValue()).average().getAsDouble();
|
||||
rMpDevEvaluateDetailPO.setDevDataRate(d1);
|
||||
rMpDevEvaluateDetailPO.setDevTargetRate(d2);
|
||||
long count = ls.stream().filter(po -> po.getIsUnusual() == 1 && po.getDataIntegrityRate().compareTo(new BigDecimal(0.95)) == 1).count();
|
||||
double d3 = (double) count / ls.size();
|
||||
rMpDevEvaluateDetailPO.setDevEffectiveRate(d3);
|
||||
}
|
||||
rMpDevEvaluateDetailPOList.add(rMpDevEvaluateDetailPO);
|
||||
});
|
||||
if (CollectionUtil.isNotEmpty(rMpDevEvaluateDetailPOList)){
|
||||
this.saveOrUpdateBatchByMultiId(rMpDevEvaluateDetailPOList,100);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
package com.njcn.prepare.harmonic.service.mysql.Impl.device;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
|
||||
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
|
||||
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
|
||||
import com.njcn.prepare.bo.CalculatedParam;
|
||||
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpMonitorEvaluateDMapper;
|
||||
import com.njcn.prepare.harmonic.pojo.mysql.RMpMonitorEvaluateDPO;
|
||||
import com.njcn.prepare.harmonic.pojo.param.DeviceParam;
|
||||
@@ -12,6 +19,10 @@ import com.njcn.system.enums.DicDataEnum;
|
||||
import com.njcn.system.pojo.po.DictData;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.collections4.ListUtils;
|
||||
import org.apache.commons.collections4.MapUtils;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -20,9 +31,10 @@ import com.njcn.prepare.harmonic.pojo.po.RStatDevSignalDPO;
|
||||
import com.njcn.prepare.harmonic.service.mysql.device.RStatDevSignalDPOService;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Description:
|
||||
@@ -33,49 +45,99 @@ import java.util.List;
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class RStatDevSignalDPOServiceImpl extends MppServiceImpl<RStatDevSignalDPOMapper, RStatDevSignalDPO> implements RStatDevSignalDPOService {
|
||||
|
||||
private final RMpMonitorEvaluateDMapper revaluateDMapper;
|
||||
private final
|
||||
DicDataFeignClient dicDataFeignClient;
|
||||
|
||||
private final CommTerminalGeneralClient commTerminalGeneralClient;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = {Exception.class})
|
||||
@Async("asyncExecutor")
|
||||
@SneakyThrows
|
||||
public void eventdetailHandler(DeviceParam deviceParam) {
|
||||
List<RStatDevSignalDPO> rStatDevSignalDPOList = new ArrayList<>();
|
||||
Date date = DateUtil.parse(deviceParam.getDataDate());
|
||||
QueryWrapper<RMpMonitorEvaluateDPO> wrapper = new QueryWrapper<>();
|
||||
public void devSignalD(CalculatedParam calculatedParam) {
|
||||
log.info(LocalDateTime.now()+"===>终端通信管理日统计算法开始");
|
||||
List<LineDevGetDTO> lineDevGetList = new ArrayList<>();
|
||||
List<RStatDevSignalDPO> rStatDevSignalList = new ArrayList<>();
|
||||
List<RMpMonitorEvaluateDPO> evaluateList = new ArrayList<>();
|
||||
DictData data = dicDataFeignClient.getDicDataByCode(DicDataEnum.RUNNING.getCode()).getData();
|
||||
deviceParam.getDetailList().forEach(temp -> {
|
||||
|
||||
RStatDevSignalDPO rStatDevSignalDPO = new RStatDevSignalDPO();
|
||||
rStatDevSignalDPO.setDeviceId(temp.getDevId());
|
||||
rStatDevSignalDPO.setDeviceStatus(data.getId());
|
||||
rStatDevSignalDPO.setUpdateTime(temp.getUpdateTime());
|
||||
rStatDevSignalDPO.setDataDate(date);
|
||||
/**
|
||||
* 1、运行状态:设备下任意一个监测点有效接入分钟数(effective_minute_count > 0)为在线状态,反之离线状态
|
||||
*/
|
||||
Integer effective_minute_count = 0;
|
||||
List<String> lineIds = temp.getLineIds();
|
||||
if (CollUtil.isNotEmpty(lineIds)) {
|
||||
wrapper.clear();
|
||||
wrapper.select("sum(effective_minute_count) as effective_minute_count ");
|
||||
wrapper.eq("device_id", temp.getDevId());
|
||||
wrapper.in("measurement_point_id", lineIds);
|
||||
RMpMonitorEvaluateDPO rMpMonitorEvaluateDPO = revaluateDMapper.selectOne(wrapper);
|
||||
effective_minute_count = rMpMonitorEvaluateDPO.getEffectiveMinuteCount();
|
||||
List<String> lineIds = calculatedParam.getIdList();
|
||||
//以尺寸100分片,查询数据
|
||||
List<List<String>> pendingIds = ListUtils.partition(lineIds,100);
|
||||
for (List<String> pendingId : pendingIds) {
|
||||
//获取监测点评价详情
|
||||
LambdaQueryWrapper<RMpMonitorEvaluateDPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.in(RMpMonitorEvaluateDPO::getMeasurementPointId,pendingId)
|
||||
.eq(RMpMonitorEvaluateDPO::getDataDate,calculatedParam.getDataDate());
|
||||
List<RMpMonitorEvaluateDPO> ls = revaluateDMapper.selectList(lambdaQueryWrapper);
|
||||
evaluateList.addAll(ls);
|
||||
//监测点详情
|
||||
lineDevGetList.addAll(commTerminalGeneralClient.getMonitorDetailList(pendingId).getData());
|
||||
}
|
||||
String runStatus = "0";
|
||||
if (effective_minute_count > 0 && temp.getDeviceStatus().equals("1")) {
|
||||
runStatus = "1";
|
||||
}
|
||||
rStatDevSignalDPO.setRunStatus(runStatus);
|
||||
rStatDevSignalDPOList.add(rStatDevSignalDPO);
|
||||
Map<String,List<RMpMonitorEvaluateDPO>> map1 = evaluateList.stream().collect(Collectors.groupingBy(RMpMonitorEvaluateDPO::getDeviceId));
|
||||
Map<String,List<LineDevGetDTO>> map2 = lineDevGetList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getDevId));
|
||||
|
||||
map2.forEach((k,v)->{
|
||||
RStatDevSignalDPO rStatDevSignal = new RStatDevSignalDPO();
|
||||
rStatDevSignal.setDeviceId(k);
|
||||
rStatDevSignal.setDeviceStatus(data.getId());
|
||||
if (!Objects.isNull(v.get(0).getUpdateTime())){
|
||||
rStatDevSignal.setUpdateTime(v.get(0).getUpdateTime().format(DatePattern.NORM_DATETIME_FORMATTER));
|
||||
}
|
||||
rStatDevSignal.setDataDate(LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(),DatePattern.NORM_DATE_FORMATTER));
|
||||
if (CollectionUtil.isNotEmpty(map1.get(k))){
|
||||
int count = map1.get(k).stream().mapToInt(RMpMonitorEvaluateDPO::getEffectiveMinuteCount).sum();
|
||||
if (count > 0){
|
||||
rStatDevSignal.setRunStatus("1");
|
||||
} else {
|
||||
rStatDevSignal.setRunStatus("0");
|
||||
}
|
||||
} else {
|
||||
rStatDevSignal.setRunStatus("0");
|
||||
}
|
||||
rStatDevSignalList.add(rStatDevSignal);
|
||||
});
|
||||
this.saveOrUpdateBatchByMultiId(rStatDevSignalDPOList, 500);
|
||||
if (CollectionUtil.isNotEmpty(rStatDevSignalList)){
|
||||
this.saveOrUpdateBatchByMultiId(rStatDevSignalList, 100);
|
||||
}
|
||||
}
|
||||
|
||||
// public void eventdetailHandler(DeviceParam deviceParam) {
|
||||
// List<RStatDevSignalDPO> rStatDevSignalDPOList = new ArrayList<>();
|
||||
// Date date = DateUtil.parse(deviceParam.getDataDate());
|
||||
// QueryWrapper<RMpMonitorEvaluateDPO> wrapper = new QueryWrapper<>();
|
||||
// DictData data = dicDataFeignClient.getDicDataByCode(DicDataEnum.RUNNING.getCode()).getData();
|
||||
// deviceParam.getDetailList().forEach(temp -> {
|
||||
//
|
||||
// RStatDevSignalDPO rStatDevSignalDPO = new RStatDevSignalDPO();
|
||||
// rStatDevSignalDPO.setDeviceId(temp.getDevId());
|
||||
// rStatDevSignalDPO.setDeviceStatus(data.getId());
|
||||
// rStatDevSignalDPO.setUpdateTime(temp.getUpdateTime());
|
||||
// rStatDevSignalDPO.setDataDate(date);
|
||||
// /**
|
||||
// * 1、运行状态:设备下任意一个监测点有效接入分钟数(effective_minute_count > 0)为在线状态,反之离线状态
|
||||
// */
|
||||
// Integer effective_minute_count = 0;
|
||||
// List<String> lineIds = temp.getLineIds();
|
||||
// if (CollUtil.isNotEmpty(lineIds)) {
|
||||
// wrapper.clear();
|
||||
// wrapper.select("sum(effective_minute_count) as effective_minute_count ");
|
||||
// wrapper.eq("device_id", temp.getDevId());
|
||||
// wrapper.in("measurement_point_id", lineIds);
|
||||
// RMpMonitorEvaluateDPO rMpMonitorEvaluateDPO = revaluateDMapper.selectOne(wrapper);
|
||||
// effective_minute_count = rMpMonitorEvaluateDPO.getEffectiveMinuteCount();
|
||||
// }
|
||||
// String runStatus = "0";
|
||||
// if (effective_minute_count > 0 && temp.getDeviceStatus().equals("1")) {
|
||||
// runStatus = "1";
|
||||
// }
|
||||
// rStatDevSignalDPO.setRunStatus(runStatus);
|
||||
// rStatDevSignalDPOList.add(rStatDevSignalDPO);
|
||||
//
|
||||
// });
|
||||
// this.saveOrUpdateBatchByMultiId(rStatDevSignalDPOList, 500);
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -264,7 +264,7 @@ public class NormalLimitServiceImpl extends ServiceImpl<AbnormalMapper, MpSurplu
|
||||
|
||||
log.info("运行时长:"+timeInterval.intervalSecond());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.njcn.prepare.harmonic.service.mysql.area;
|
||||
|
||||
import com.njcn.prepare.bo.CalculatedParam;
|
||||
import com.njcn.prepare.harmonic.pojo.param.LineParam;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.njcn.prepare.harmonic.service.mysql.area;
|
||||
|
||||
import com.github.jeffreyning.mybatisplus.service.IMppService;
|
||||
import com.njcn.harmonic.pojo.po.RMpDevEvaluateDetailPO;
|
||||
import com.njcn.prepare.bo.CalculatedParam;
|
||||
import com.njcn.prepare.harmonic.pojo.param.DeviceParam;
|
||||
|
||||
|
||||
@@ -16,6 +17,11 @@ import com.njcn.prepare.harmonic.pojo.param.DeviceParam;
|
||||
*/
|
||||
public interface RMpDevEvaluateDetailPOService extends IMppService<RMpDevEvaluateDetailPO> {
|
||||
|
||||
// void handler(DeviceParam deviceParam);
|
||||
|
||||
void handler(DeviceParam deviceParam);
|
||||
/**
|
||||
* 终端评价详情表_日统计
|
||||
* @param calculatedParam
|
||||
*/
|
||||
void devEvaluateDetail(CalculatedParam calculatedParam);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.njcn.prepare.harmonic.service.mysql.device;
|
||||
|
||||
import com.github.jeffreyning.mybatisplus.service.IMppService;
|
||||
import com.njcn.prepare.bo.CalculatedParam;
|
||||
import com.njcn.prepare.harmonic.pojo.param.DeviceParam;
|
||||
import com.njcn.prepare.harmonic.pojo.po.RStatDevSignalDPO;
|
||||
|
||||
@@ -13,6 +14,12 @@ import com.njcn.prepare.harmonic.pojo.po.RStatDevSignalDPO;
|
||||
*/
|
||||
public interface RStatDevSignalDPOService extends IMppService<RStatDevSignalDPO> {
|
||||
|
||||
void eventdetailHandler(DeviceParam deviceParam);
|
||||
// void eventdetailHandler(DeviceParam deviceParam);
|
||||
|
||||
/**
|
||||
* 终端通信管理_日统计
|
||||
* @param calculatedParam
|
||||
*/
|
||||
void devSignalD(CalculatedParam calculatedParam);
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user