监测点稳态指标越限次数统计

终端数据统计
This commit is contained in:
wr
2025-03-10 18:14:08 +08:00
parent bdc582224b
commit 7b6fd159c0
28 changed files with 2413 additions and 752 deletions

View File

@@ -192,45 +192,45 @@ public class ExecutionCenter extends BaseController {
}
}
// @OperateInfo(info = LogEnum.BUSINESS_COMMON)
// @ApiOperation("装置算法执行链")
// @PostMapping("/deviceExecutor")
// @Async("asyncExecutor")
// public void deviceExecutor(@RequestBody BaseParam baseParam) {
// String methodDescribe = getMethodDescribe("deviceExecutor");
// //手动判断参数是否合法,
// CalculatedParam calculatedParam = judgeExecuteParam(baseParam);
// DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
// // 设备索引
// if (CollectionUtils.isEmpty(calculatedParam.getIdList())) {
// Dept data = deptFeignClient.getRootDept().getData();
// deptGetLineParam.setDeptId(data.getId());
// List<DeptGetDeviceDTO> list = commTerminalGeneralClient.deptGetDevice(deptGetLineParam).getData();
// DeptGetDeviceDTO dto = list.stream().filter(po -> Objects.equals(po.getUnitId(), data.getId())).collect(Collectors.toList()).get(0);
// List<LineDevGetDTO> devList = dto.getDeviceList();
// calculatedParam.setIdList(devList.stream().map(LineDevGetDTO::getDevId).distinct().collect(Collectors.toList()));
// }
// LiteflowResponse liteflowResponse;
// if (baseParam.isRepair()) {
// //补招时,起始日期、截止日期必填
// DateTime startDate = DateUtil.parse(baseParam.getBeginTime(), DatePattern.NORM_DATE_FORMAT);
// DateTime endDate = DateUtil.parse(baseParam.getEndTime(), DatePattern.NORM_DATE_FORMAT);
// long betweenDay = DateUtil.betweenDay(startDate, endDate, true);
// //递增日期执行算法链
// for (int i = 0; i < betweenDay; i++) {
// if (i != 0) {
// startDate = DateUtil.offsetDay(startDate, 1);
// }
// calculatedParam.setDataDate(DateUtil.format(startDate, DatePattern.NORM_DATE_PATTERN));
// liteflowResponse = flowExecutor.execute2Resp("device", calculatedParam);
// dealResponse(calculatedParam, liteflowResponse, methodDescribe);
// }
// } else {
// //非补招
// liteflowResponse = flowExecutor.execute2Resp("device", calculatedParam);
// dealResponse(calculatedParam, liteflowResponse, methodDescribe);
// }
// }
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@ApiOperation("装置算法执行链")
@PostMapping("/deviceExecutor")
@Async("asyncExecutor")
public void deviceExecutor(@RequestBody BaseParam baseParam) {
String methodDescribe = getMethodDescribe("deviceExecutor");
//手动判断参数是否合法,
CalculatedParam calculatedParam = judgeExecuteParam(baseParam);
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
// 设备索引
if (CollectionUtils.isEmpty(calculatedParam.getIdList())) {
Dept data = deptFeignClient.getRootDept().getData();
deptGetLineParam.setDeptId(data.getId());
List<DeptGetDeviceDTO> list = commTerminalGeneralClient.deptGetDevice(deptGetLineParam).getData();
DeptGetDeviceDTO dto = list.stream().filter(po -> Objects.equals(po.getUnitId(), data.getId())).collect(Collectors.toList()).get(0);
List<LineDevGetDTO> devList = dto.getDeviceList();
calculatedParam.setIdList(devList.stream().map(LineDevGetDTO::getDevId).distinct().collect(Collectors.toList()));
}
LiteflowResponse liteflowResponse;
if (baseParam.isRepair()) {
//补招时,起始日期、截止日期必填
DateTime startDate = DateUtil.parse(baseParam.getBeginTime(), DatePattern.NORM_DATE_FORMAT);
DateTime endDate = DateUtil.parse(baseParam.getEndTime(), DatePattern.NORM_DATE_FORMAT);
long betweenDay = DateUtil.betweenDay(startDate, endDate, true);
//递增日期执行算法链
for (int i = 0; i < betweenDay; i++) {
if (i != 0) {
startDate = DateUtil.offsetDay(startDate, 1);
}
calculatedParam.setDataDate(DateUtil.format(startDate, DatePattern.NORM_DATE_PATTERN));
liteflowResponse = flowExecutor.execute2Resp("device", calculatedParam);
dealResponse(calculatedParam, liteflowResponse, methodDescribe);
}
} else {
//非补招
liteflowResponse = flowExecutor.execute2Resp("device", calculatedParam);
dealResponse(calculatedParam, liteflowResponse, methodDescribe);
}
}
//
// @OperateInfo(info = LogEnum.BUSINESS_COMMON)
// @ApiOperation("单位监测点算法执行链")

View File

@@ -0,0 +1,40 @@
package com.njcn.algorithm.executor;
import com.njcn.algorithm.service.line.IDataOnlineRateService;
import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.annotation.LiteflowMethod;
import com.yomahub.liteflow.core.NodeComponent;
import com.yomahub.liteflow.enums.LiteFlowMethodEnum;
import com.yomahub.liteflow.enums.NodeTypeEnum;
import lombok.RequiredArgsConstructor;
/**
* @author hongawen
* @version 1.0.0
* @date 2023年11月06日 15:59
*/
@LiteflowComponent
@RequiredArgsConstructor
public class DeviceExecutor extends BaseExecutor {
private final IDataOnlineRateService onlineRateService;
/**
* 算法名: 暂无-----终端在线率_日表(r_stat_onlinerate_d)
*
* @author xuyang
* @date 2023年11月30日 10:25
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "deviceOnlineRate", nodeType = NodeTypeEnum.COMMON)
public boolean deviceOnlineRateAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "deviceOnlineRate", nodeType = NodeTypeEnum.COMMON)
public void deviceOnlineRateProcess(NodeComponent bindCmp) {
onlineRateService.dataOnlineRate(bindCmp.getRequestData());
}
}

View File

@@ -0,0 +1,20 @@
package com.njcn.algorithm.service.line;
import com.njcn.algorithm.pojo.bo.CalculatedParam;
/**
* @Description:
* @Author: wr
* @Date: 2025/3/10 11:19
*/
public interface IDataOnlineRateService {
/***
* 装置数据在线率_日表
* @author xuyang
* @date 2023/11/09 10:08
* @param calculatedParam 查询条件
*/
void dataOnlineRate(CalculatedParam<String> calculatedParam);
}

View File

@@ -0,0 +1,150 @@
package com.njcn.algorithm.serviceimpl.line;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.algorithm.service.line.IDataOnlineRateService;
import com.njcn.dataProcess.api.PqsCommunicateFeignClient;
import com.njcn.dataProcess.param.LineCountEvaluateParam;
import com.njcn.dataProcess.pojo.dto.PqsCommunicateDto;
import com.njcn.dataProcess.pojo.dto.RStatOnlineRateDto;
import com.njcn.dataProcess.util.TimeUtils;
import com.njcn.device.pq.pojo.po.RStatOnlinerateD;
import com.njcn.influx.deprecated.InfluxDBPublicParam;
import com.njcn.influx.pojo.po.PqsCommunicate;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.ListUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
* @Description:
* @Author: wr
* @Date: 2025/3/10 11:19
*/
@Service
@RequiredArgsConstructor
public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
private final static Integer NUM = 100;
private final Integer online = 1;
private final Integer offline = 0;
@Resource
private PqsCommunicateFeignClient communicateFeignClient;
@Override
public void dataOnlineRate(CalculatedParam<String> calculatedParam) {
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
List<String> devList = calculatedParam.getIdList();
List<List<String>> pendingIds = ListUtils.partition(devList, 1);
List<PqsCommunicateDto> outCommunicateData = new ArrayList<>();
for (List<String> dev : pendingIds) {
lineParam.setLineId(dev);
List<PqsCommunicateDto> data = communicateFeignClient.getRawDataLatest(lineParam).getData();
outCommunicateData.addAll(data);
}
List<RStatOnlineRateDto.Detail> list = new ArrayList<>();
Date dateOut = DateUtil.parse(calculatedParam.getDataDate());
for (PqsCommunicateDto pqsCommunicate : outCommunicateData) {
RStatOnlineRateDto.Detail onlineRateDpo = new RStatOnlineRateDto.Detail();
Date newDate = DateUtil.parse(pqsCommunicate.getTime());
lineParam.setLineId(Arrays.asList(pqsCommunicate.getDevId()));
RStatOnlineRateDto onLineRate = onLineMinute(newDate, dateOut, pqsCommunicate.getType(), lineParam);
onlineRateDpo.setTimeId(calculatedParam.getDataDate());
onlineRateDpo.setDevIndex(pqsCommunicate.getDevId());
onlineRateDpo.setOnlineMin(onLineRate.getOnlineMin());
onlineRateDpo.setOfflineMin(onLineRate.getOfflineMin());
list.add(onlineRateDpo);
}
if (CollectionUtil.isNotEmpty(list)) {
System.out.println();
}
}
/**
* new的时间和当前统计时间 不是/是 同一天
*/
private RStatOnlineRateDto onLineMinute(Date newDate, Date date, Integer type, LineCountEvaluateParam lineParam) {
RStatOnlineRateDto onLineRate = new RStatOnlineRateDto();
Integer minute = 0;
/*new的时间和当前统计时间是同一天*/
if (DateUtil.isSameDay(newDate, date)) {
minute = processData(newDate, date, type, lineParam);
} else {
/*new的时间和当前统计时间不是同一天*/
Date nowDate = new Date();
/*数据补招的情况下*/
if (DateUtil.between(date, nowDate, DateUnit.DAY) > DateUtil.between(newDate, nowDate, DateUnit.DAY)) {
minute = processData(newDate, date, null, lineParam);
} else {
if (online.equals(type)) {
minute = InfluxDBPublicParam.DAY_MINUTE;
}
}
}
onLineRate.setOnlineMin(minute);
onLineRate.setOfflineMin(InfluxDBPublicParam.DAY_MINUTE - minute);
return onLineRate;
}
private Integer processData(Date newDate, Date date, Integer type,LineCountEvaluateParam lineParam) {
int minute = 0;
List<PqsCommunicateDto> communicateData = communicateFeignClient.getRawData(lineParam).getData();
/*当前统计时间内存在多条数据*/
if (communicateData.size() > 1) {
Date lastTime = null;
long onlineTime = 0;
long offlineTime = 0;
for (int i = 0; i < communicateData.size(); i++) {
long differ;
if (i == 0) {
/*首次比较取统计时间*/
differ = DateUtil.between(date, DateUtil.parse(communicateData.get(i).getTime()), DateUnit.MINUTE);
} else {
/*后续取上一次数据时间*/
differ = DateUtil.between(lastTime, DateUtil.parse(communicateData.get(i).getTime()), DateUnit.MINUTE);
}
if (online.equals(communicateData.get(i).getType())) {
offlineTime = offlineTime + differ;
} else {
onlineTime = onlineTime + differ;
}
lastTime = DateUtil.parse(communicateData.get(i).getTime());
}
if (online.equals(communicateData.get(communicateData.size() - 1).getType())) {
minute = InfluxDBPublicParam.DAY_MINUTE - (int) offlineTime;
} else {
minute = (int) onlineTime;
}
} else {
if (type != null) {
/*当前统计时间内仅有一条数据*/
long differ = DateUtil.between(date, newDate, DateUnit.MINUTE);
if (online.equals(type)) {
minute = InfluxDBPublicParam.DAY_MINUTE - (int) differ;
}
} else {
List<PqsCommunicateDto> communicateDataOld = communicateFeignClient.getRawDataEnd(lineParam).getData();
if (communicateDataOld.size() > 0) {
if (online.equals(communicateDataOld.get(0).getType())) {
minute = InfluxDBPublicParam.DAY_MINUTE;
}
}
}
}
return minute;
}
}