算法改造

This commit is contained in:
2023-11-14 20:17:28 +08:00
parent f934dc8336
commit 8bef9db9c8
12 changed files with 289 additions and 94 deletions

View File

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId; import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import lombok.Data; import lombok.Data;
import java.time.LocalDate;
import java.util.Date; import java.util.Date;
/** /**
@@ -24,10 +25,10 @@ import java.util.Date;
@TableName(value = "r_mp_dev_evaluate_detail") @TableName(value = "r_mp_dev_evaluate_detail")
public class RMpDevEvaluateDetailPO { public class RMpDevEvaluateDetailPO {
/** /**
* 生成数据的时间,每统计一次 * 生成数据的时间,每统计一次
*/ */
@MppMultiId(value = "data_date") @MppMultiId(value = "data_date")
private Date dataDate; private LocalDate dataDate;
/** /**
* 终端id * 终端id

View File

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import java.time.LocalDate;
import java.util.Date; import java.util.Date;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId; import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
@@ -23,7 +25,7 @@ public class RStatDevSignalDPO {
* 更新时间 * 更新时间
*/ */
@MppMultiId(value = "data_date") @MppMultiId(value = "data_date")
private Date dataDate; private LocalDate dataDate;
/** /**
* 终端Id * 终端Id

View File

@@ -2,7 +2,9 @@ package com.njcn.prepare.executor;
import com.njcn.prepare.bo.CalculatedParam; import com.njcn.prepare.bo.CalculatedParam;
import com.njcn.prepare.harmonic.service.mysql.area.IRMpMonitorAlarmCountMService; 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.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.DayDataService;
import com.njcn.prepare.harmonic.service.mysql.line.RMpEventDetailDService; import com.njcn.prepare.harmonic.service.mysql.line.RMpEventDetailDService;
import com.njcn.prepare.harmonic.service.mysql.line.RMpEventDetailService; import com.njcn.prepare.harmonic.service.mysql.line.RMpEventDetailService;
@@ -49,6 +51,9 @@ public class MeasurementExecutor extends BaseExecutor {
private final IRMpMonitorAlarmCountMService rMpMonitorAlarmCountMService; private final IRMpMonitorAlarmCountMService rMpMonitorAlarmCountMService;
private final PollutionService pollutionService; private final PollutionService pollutionService;
private final RStatDevSignalDPOService rStatDevSignalDPOService;
private final RMpDevEvaluateDetailPOService rMpDevEvaluateDetailPOService;
private final NormalLimitService normLimitService;
/** /**
* 算法名: 3.3.1.1-----监测点评价 * 算法名: 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结束***********************************************************/ /********************************************算法负责人:xy结束***********************************************************/

View File

@@ -97,10 +97,10 @@ public class RMpDevEvaluateDetailController extends BaseController {
deviceParam.setDataDate(item); deviceParam.setDataDate(item);
deviceParam.setBeginTime(item + " " + "00:00:00"); deviceParam.setBeginTime(item + " " + "00:00:00");
deviceParam.setEndTime(item + " " + "23:59:59"); deviceParam.setEndTime(item + " " + "23:59:59");
rMpDevEvaluateDetailPOService.handler(deviceParam); // rMpDevEvaluateDetailPOService.handler(deviceParam);
} }
} else { } else {
rMpDevEvaluateDetailPOService.handler(deviceParam); // rMpDevEvaluateDetailPOService.handler(deviceParam);
} }
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
} }

View File

@@ -98,10 +98,10 @@ public class RStatDevSignalController extends BaseController {
deviceParam.setDataDate(item); deviceParam.setDataDate(item);
deviceParam.setBeginTime(item + " " + "00:00:00"); deviceParam.setBeginTime(item + " " + "00:00:00");
deviceParam.setEndTime(item + " " + "23:59:59"); deviceParam.setEndTime(item + " " + "23:59:59");
rStatDevSignalDPOService.eventdetailHandler(deviceParam); // rStatDevSignalDPOService.eventdetailHandler(deviceParam);
} }
} else { } else {
rStatDevSignalDPOService.eventdetailHandler(deviceParam); // rStatDevSignalDPOService.eventdetailHandler(deviceParam);
} }
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
} }

View File

@@ -1,6 +1,8 @@
package com.njcn.prepare.harmonic.service.mysql.Impl.area; 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.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient; import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
@@ -117,9 +119,6 @@ public class PrimaryGridDataServiceImpl implements PrimaryGridDataService {
List<String> deviceIds = primaryGridDataIntegrityParam.getDeviceId(); List<String> deviceIds = primaryGridDataIntegrityParam.getDeviceId();
String dataDate = primaryGridDataIntegrityParam.getDataDate(); String dataDate = primaryGridDataIntegrityParam.getDataDate();
List<RMpDevEvaluateDetailPO> rMpDevEvaluateDetailPOList = new ArrayList<>(); List<RMpDevEvaluateDetailPO> rMpDevEvaluateDetailPOList = new ArrayList<>();
final Date tempDate = new SimpleDateFormat("yyyy-MM-dd").parse(dataDate);
deviceIds.forEach(deviceId -> { deviceIds.forEach(deviceId -> {
double dev_data_rate = 0.00; double dev_data_rate = 0.00;
/*获取终端下的监测点集合*/ /*获取终端下的监测点集合*/
@@ -144,7 +143,7 @@ public class PrimaryGridDataServiceImpl implements PrimaryGridDataService {
} }
RMpDevEvaluateDetailPO rMpDevEvaluateDetailPO = new RMpDevEvaluateDetailPO(); RMpDevEvaluateDetailPO rMpDevEvaluateDetailPO = new RMpDevEvaluateDetailPO();
rMpDevEvaluateDetailPO.setDeviceId(deviceId); rMpDevEvaluateDetailPO.setDeviceId(deviceId);
rMpDevEvaluateDetailPO.setDataDate(tempDate); rMpDevEvaluateDetailPO.setDataDate(LocalDateTimeUtil.parseDate(dataDate, DatePattern.NORM_DATE_FORMATTER));
rMpDevEvaluateDetailPO.setDevDataRate(dev_data_rate); rMpDevEvaluateDetailPO.setDevDataRate(dev_data_rate);
rMpDevEvaluateDetailPOList.add(rMpDevEvaluateDetailPO); rMpDevEvaluateDetailPOList.add(rMpDevEvaluateDetailPO);
}); });

View File

@@ -1,29 +1,45 @@
package com.njcn.prepare.harmonic.service.mysql.Impl.area; package com.njcn.prepare.harmonic.service.mysql.Impl.area;
import cn.hutool.core.collection.CollUtil; 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.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.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; 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.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.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.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.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.mysql.ROperatingMonitorDPO;
import com.njcn.prepare.harmonic.pojo.param.DeviceParam; import com.njcn.prepare.harmonic.pojo.param.DeviceParam;
import com.njcn.prepare.harmonic.pojo.po.RMpDevSolveDetailPO; 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.area.RMpDevEvaluateDetailPOService;
import com.njcn.prepare.harmonic.service.mysql.device.RMpDevSolveDetailPOService; 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.RequiredArgsConstructor;
import lombok.SneakyThrows; 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.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.ArrayList; import java.time.LocalDateTime;
import java.util.Date; import java.util.*;
import java.util.List; import java.util.stream.Collectors;
/** /**
* *
@@ -36,60 +52,128 @@ import java.util.List;
*/ */
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j
public class RMpDevEvaluateDetailPOServiceImpl extends MppServiceImpl<RMpDevEvaluateDetailPOMapper, RMpDevEvaluateDetailPO> implements RMpDevEvaluateDetailPOService{ public class RMpDevEvaluateDetailPOServiceImpl extends MppServiceImpl<RMpDevEvaluateDetailPOMapper, RMpDevEvaluateDetailPO> implements RMpDevEvaluateDetailPOService{
private final ROperatingMonitorDMapper rOperatingMonitorDMapper; private final ROperatingMonitorDMapper rOperatingMonitorDMapper;
private final RMpDevSolveDetailPOService rMpDevSolveDetailPOService; private final RMpDevSolveDetailPOService rMpDevSolveDetailPOService;
private final DecimalFormat df = new DecimalFormat("#.00"); 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 @Override
@Transactional(rollbackFor = {Exception.class}) @Transactional(rollbackFor = {Exception.class})
@Async("asyncExecutor") @Async("asyncExecutor")
@SneakyThrows @SneakyThrows
public void handler(DeviceParam deviceParam) { public void devEvaluateDetail(CalculatedParam calculatedParam) {
log.info(LocalDateTime.now()+"===>终端评价详情-日统计算法开始");
List<RMpDevEvaluateDetailPO> rMpDevEvaluateDetailPOList = new ArrayList<>(); List<RMpDevEvaluateDetailPO> rMpDevEvaluateDetailPOList = new ArrayList<>();
Date date = DateUtil.parse(deviceParam.getDataDate()); List<ROperatingMonitorDPO> operatingMonitorList = new ArrayList<>();
QueryWrapper<ROperatingMonitorDPO> wrapper = new QueryWrapper<>(); List<RMpDevSolveDetailPO> devSolveDetailList = new ArrayList<>();
QueryWrapper<RMpDevSolveDetailPO> wrapper1 = new QueryWrapper<>(); List<LineDevGetDTO> lineDevGetList = new ArrayList<>();
List<String> deviceList = new ArrayList<>();
deviceParam.getDetailList().forEach(temp -> { List<String> lineIds = calculatedParam.getIdList();
//以尺寸100分片,查询数据
RMpDevEvaluateDetailPO rMpDevEvaluateDetailPO = new RMpDevEvaluateDetailPO(); List<List<String>> pendingIds = ListUtils.partition(lineIds,100);
rMpDevEvaluateDetailPO.setDeviceId(temp.getDevId()); for (List<String> pendingId : pendingIds) {
rMpDevEvaluateDetailPO.setDataDate(date); //获取监测点评价详情
LambdaQueryWrapper<ROperatingMonitorDPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
wrapper.clear(); lambdaQueryWrapper.in(ROperatingMonitorDPO::getMeasurementPointId,pendingId)
wrapper1.clear(); .eq(ROperatingMonitorDPO::getDataDate,calculatedParam.getDataDate());
wrapper1.select(RMpDevSolveDetailPO.COL_DEFECT_SEVERITY). List<ROperatingMonitorDPO> ls = rOperatingMonitorDMapper.selectList(lambdaQueryWrapper);
eq(RMpDevSolveDetailPO.COL_DEVICE_ID,temp.getDevId()). operatingMonitorList.addAll(ls);
eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",deviceParam.getDataDate()); //监测点详情
RMpDevSolveDetailPO one = rMpDevSolveDetailPOService.getOne(wrapper1); lineDevGetList.addAll(commTerminalGeneralClient.getMonitorDetailList(pendingId).getData());
Double defectSeverity = PubUtils.getDefectSeverity(one.getDefectSeverity()); }
rMpDevEvaluateDetailPO.setDevScore(Double.valueOf(df.format(defectSeverity/3))); Map<String,List<ROperatingMonitorDPO>> map1 = operatingMonitorList.stream().collect(Collectors.groupingBy(ROperatingMonitorDPO::getDevId));
Map<String,List<LineDevGetDTO>> map2 = lineDevGetList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getDevId));
List<ROperatingMonitorDPO> rOperatingMonitorDPOS = new ArrayList<>(); //获取装置集合
map2.forEach((k,v)->{
List<String> lineIds = temp.getLineIds(); if (!deviceList.contains(k)){
if(CollUtil.isNotEmpty(lineIds)){ deviceList.add(k);
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); //以尺寸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);
}
} }
} }

View File

@@ -1,9 +1,16 @@
package com.njcn.prepare.harmonic.service.mysql.Impl.device; package com.njcn.prepare.harmonic.service.mysql.Impl.device;
import cn.hutool.core.collection.CollUtil; 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.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.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; 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.mapper.mysql.line.RMpMonitorEvaluateDMapper;
import com.njcn.prepare.harmonic.pojo.mysql.RMpMonitorEvaluateDPO; import com.njcn.prepare.harmonic.pojo.mysql.RMpMonitorEvaluateDPO;
import com.njcn.prepare.harmonic.pojo.param.DeviceParam; 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 com.njcn.system.pojo.po.DictData;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows; 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.scheduling.annotation.Async;
import org.springframework.stereotype.Service; 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 com.njcn.prepare.harmonic.service.mysql.device.RStatDevSignalDPOService;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.time.LocalDate;
import java.util.Date; import java.time.LocalDateTime;
import java.util.List; import java.util.*;
import java.util.stream.Collectors;
/** /**
* Description: * Description:
@@ -33,49 +45,99 @@ import java.util.List;
*/ */
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j
public class RStatDevSignalDPOServiceImpl extends MppServiceImpl<RStatDevSignalDPOMapper, RStatDevSignalDPO> implements RStatDevSignalDPOService { public class RStatDevSignalDPOServiceImpl extends MppServiceImpl<RStatDevSignalDPOMapper, RStatDevSignalDPO> implements RStatDevSignalDPOService {
private final RMpMonitorEvaluateDMapper revaluateDMapper; private final RMpMonitorEvaluateDMapper revaluateDMapper;
private final private final
DicDataFeignClient dicDataFeignClient; DicDataFeignClient dicDataFeignClient;
private final CommTerminalGeneralClient commTerminalGeneralClient;
@Override @Override
@Transactional(rollbackFor = {Exception.class}) @Transactional(rollbackFor = {Exception.class})
@Async("asyncExecutor") @Async("asyncExecutor")
@SneakyThrows @SneakyThrows
public void eventdetailHandler(DeviceParam deviceParam) { public void devSignalD(CalculatedParam calculatedParam) {
List<RStatDevSignalDPO> rStatDevSignalDPOList = new ArrayList<>(); log.info(LocalDateTime.now()+"===>终端通信管理日统计算法开始");
Date date = DateUtil.parse(deviceParam.getDataDate()); List<LineDevGetDTO> lineDevGetList = new ArrayList<>();
QueryWrapper<RMpMonitorEvaluateDPO> wrapper = new QueryWrapper<>(); List<RStatDevSignalDPO> rStatDevSignalList = new ArrayList<>();
List<RMpMonitorEvaluateDPO> evaluateList = new ArrayList<>();
DictData data = dicDataFeignClient.getDicDataByCode(DicDataEnum.RUNNING.getCode()).getData(); DictData data = dicDataFeignClient.getDicDataByCode(DicDataEnum.RUNNING.getCode()).getData();
deviceParam.getDetailList().forEach(temp -> { 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());
}
Map<String,List<RMpMonitorEvaluateDPO>> map1 = evaluateList.stream().collect(Collectors.groupingBy(RMpMonitorEvaluateDPO::getDeviceId));
Map<String,List<LineDevGetDTO>> map2 = lineDevGetList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getDevId));
RStatDevSignalDPO rStatDevSignalDPO = new RStatDevSignalDPO(); map2.forEach((k,v)->{
rStatDevSignalDPO.setDeviceId(temp.getDevId()); RStatDevSignalDPO rStatDevSignal = new RStatDevSignalDPO();
rStatDevSignalDPO.setDeviceStatus(data.getId()); rStatDevSignal.setDeviceId(k);
rStatDevSignalDPO.setUpdateTime(temp.getUpdateTime()); rStatDevSignal.setDeviceStatus(data.getId());
rStatDevSignalDPO.setDataDate(date); if (!Objects.isNull(v.get(0).getUpdateTime())){
/** rStatDevSignal.setUpdateTime(v.get(0).getUpdateTime().format(DatePattern.NORM_DATETIME_FORMATTER));
* 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"; rStatDevSignal.setDataDate(LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(),DatePattern.NORM_DATE_FORMATTER));
if (effective_minute_count > 0 && temp.getDeviceStatus().equals("1")) { if (CollectionUtil.isNotEmpty(map1.get(k))){
runStatus = "1"; int count = map1.get(k).stream().mapToInt(RMpMonitorEvaluateDPO::getEffectiveMinuteCount).sum();
if (count > 0){
rStatDevSignal.setRunStatus("1");
} else {
rStatDevSignal.setRunStatus("0");
}
} else {
rStatDevSignal.setRunStatus("0");
} }
rStatDevSignalDPO.setRunStatus(runStatus); rStatDevSignalList.add(rStatDevSignal);
rStatDevSignalDPOList.add(rStatDevSignalDPO);
}); });
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);
// }
} }

View File

@@ -259,12 +259,12 @@ public class NormalLimitServiceImpl extends ServiceImpl<AbnormalMapper, MpSurplu
if (CollUtil.isNotEmpty(all)) { if (CollUtil.isNotEmpty(all)) {
//入库操作 //入库操作
this.saveBatch(all,1000); this.saveBatch(all,1000);
} }
log.info("运行时长:"+timeInterval.intervalSecond()); log.info("运行时长:"+timeInterval.intervalSecond());
return true; return true;
} }
/** /**
@@ -513,7 +513,7 @@ public class NormalLimitServiceImpl extends ServiceImpl<AbnormalMapper, MpSurplu
private void dealData(Map<String, List<Map<String, Object>>> inMap, private void dealData(Map<String, List<Map<String, Object>>> inMap,
String phasic,Map<String, Object> overLimit, String phasic,Map<String, Object> overLimit,
Boolean flag,MpSurplusAbnormalD mpSurplusAbnormalCp95,MpSurplusAbnormalD mpSurplusAbnormalAvg,MpSurplusAbnormalD mpSurplusAbnormalMax,MpSurplusAbnormalD mpSurplusAbnormalMin Boolean flag,MpSurplusAbnormalD mpSurplusAbnormalCp95,MpSurplusAbnormalD mpSurplusAbnormalAvg,MpSurplusAbnormalD mpSurplusAbnormalMax,MpSurplusAbnormalD mpSurplusAbnormalMin
,int start,int count,int type,String overTag,String temTag){ ,int start,int count,int type,String overTag,String temTag){
if (inMap.containsKey(phasic)) { if (inMap.containsKey(phasic)) {
List<Map<String, Object>> mapList = inMap.get(phasic); List<Map<String, Object>> mapList = inMap.get(phasic);

View File

@@ -1,7 +1,6 @@
package com.njcn.prepare.harmonic.service.mysql.area; package com.njcn.prepare.harmonic.service.mysql.area;
import com.njcn.prepare.bo.CalculatedParam; import com.njcn.prepare.bo.CalculatedParam;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
/** /**
* <p> * <p>

View File

@@ -2,6 +2,7 @@ package com.njcn.prepare.harmonic.service.mysql.area;
import com.github.jeffreyning.mybatisplus.service.IMppService; import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.harmonic.pojo.po.RMpDevEvaluateDetailPO; import com.njcn.harmonic.pojo.po.RMpDevEvaluateDetailPO;
import com.njcn.prepare.bo.CalculatedParam;
import com.njcn.prepare.harmonic.pojo.param.DeviceParam; 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> { public interface RMpDevEvaluateDetailPOService extends IMppService<RMpDevEvaluateDetailPO> {
// void handler(DeviceParam deviceParam);
void handler(DeviceParam deviceParam); /**
* 终端评价详情表_日统计
* @param calculatedParam
*/
void devEvaluateDetail(CalculatedParam calculatedParam);
} }

View File

@@ -1,6 +1,7 @@
package com.njcn.prepare.harmonic.service.mysql.device; package com.njcn.prepare.harmonic.service.mysql.device;
import com.github.jeffreyning.mybatisplus.service.IMppService; 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.param.DeviceParam;
import com.njcn.prepare.harmonic.pojo.po.RStatDevSignalDPO; 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> { public interface RStatDevSignalDPOService extends IMppService<RStatDevSignalDPO> {
void eventdetailHandler(DeviceParam deviceParam); // void eventdetailHandler(DeviceParam deviceParam);
/**
* 终端通信管理_日统计
* @param calculatedParam
*/
void devSignalD(CalculatedParam calculatedParam);
} }