监测点稳态指标越限次数统计
终端数据统计
This commit is contained in:
@@ -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("单位监测点算法执行链")
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user