diff --git a/algorithm/algorithm-api/src/main/java/com/njcn/algorithm/pojo/bo/CalculatedParam.java b/algorithm/algorithm-api/src/main/java/com/njcn/algorithm/pojo/bo/CalculatedParam.java index 341e37d..2bf74ef 100644 --- a/algorithm/algorithm-api/src/main/java/com/njcn/algorithm/pojo/bo/CalculatedParam.java +++ b/algorithm/algorithm-api/src/main/java/com/njcn/algorithm/pojo/bo/CalculatedParam.java @@ -48,4 +48,7 @@ public class CalculatedParam implements Serializable { */ @ApiModelProperty(name = "idList",value = "索引集合") private List idList; + + @ApiModelProperty(name = "type",value = "0:通用 1:省级平台 ") + private Integer type; } diff --git a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/ExecutionCenter.java b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/ExecutionCenter.java index 5061eda..59d2e04 100644 --- a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/ExecutionCenter.java +++ b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/ExecutionCenter.java @@ -205,10 +205,10 @@ public class ExecutionCenter extends BaseController { if (CollectionUtils.isEmpty(calculatedParam.getIdList())) { Dept data = deptFeignClient.getRootDept().getData(); deptGetLineParam.setDeptId(data.getId()); - List list = commTerminalGeneralClient.deptGetDevice(deptGetLineParam).getData(); + List list = commTerminalGeneralClient.deptGetDeviceAndMonitor(deptGetLineParam).getData(); DeptGetDeviceDTO dto = list.stream().filter(po -> Objects.equals(po.getUnitId(), data.getId())).collect(Collectors.toList()).get(0); List devList = dto.getDeviceList(); - calculatedParam.setIdList(devList.stream().map(LineDevGetDTO::getDevId).distinct().collect(Collectors.toList())); + calculatedParam.setIdList(devList.stream().distinct().collect(Collectors.toList())); } LiteflowResponse liteflowResponse; if (baseParam.isRepair()) { diff --git a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/executor/DeviceExecutor.java b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/executor/DeviceExecutor.java index 07b415f..c2d22ba 100644 --- a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/executor/DeviceExecutor.java +++ b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/executor/DeviceExecutor.java @@ -8,6 +8,8 @@ import com.yomahub.liteflow.enums.LiteFlowMethodEnum; import com.yomahub.liteflow.enums.NodeTypeEnum; import lombok.RequiredArgsConstructor; +import javax.annotation.Resource; + /** * @author hongawen @@ -18,14 +20,15 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class DeviceExecutor extends BaseExecutor { - private final IDataOnlineRateService onlineRateService; + @Resource + private IDataOnlineRateService onlineRateService; /** * 算法名: 暂无-----终端在线率_日表(r_stat_onlinerate_d) * - * @author xuyang - * @date 2023年11月30日 10:25 + * @param bindCmp + * @return */ @LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "deviceOnlineRate", nodeType = NodeTypeEnum.COMMON) public boolean deviceOnlineRateAccess(NodeComponent bindCmp) { diff --git a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/service/line/IDataOnlineRateService.java b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/service/line/IDataOnlineRateService.java index 5fd4e7b..cb2f8be 100644 --- a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/service/line/IDataOnlineRateService.java +++ b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/service/line/IDataOnlineRateService.java @@ -16,5 +16,5 @@ public interface IDataOnlineRateService { * @date 2023/11/09 10:08 * @param calculatedParam 查询条件 */ - void dataOnlineRate(CalculatedParam calculatedParam); + void dataOnlineRate(CalculatedParam calculatedParam); } diff --git a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataCrossingServiceImpl.java b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataCrossingServiceImpl.java index f0c5019..f1a01a2 100644 --- a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataCrossingServiceImpl.java +++ b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataCrossingServiceImpl.java @@ -4,15 +4,19 @@ package com.njcn.algorithm.serviceimpl.line; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.njcn.algorithm.pojo.bo.CalculatedParam; import com.njcn.algorithm.service.line.IDataCrossingService; import com.njcn.dataProcess.api.*; import com.njcn.dataProcess.constant.PhaseType; +import com.njcn.dataProcess.enums.DataCleanEnum; import com.njcn.dataProcess.param.LineCountEvaluateParam; import com.njcn.dataProcess.pojo.dto.*; +import com.njcn.dataProcess.pojo.po.PqDataVerify; import com.njcn.dataProcess.util.TimeUtils; import com.njcn.device.biz.commApi.CommTerminalGeneralClient; import com.njcn.device.biz.pojo.po.Overlimit; @@ -30,10 +34,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.lang.reflect.Method; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -65,7 +66,8 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { private DataLimitRateFeignClient dataLimitRateFeignClient; @Resource private DataLimitRateDetailFeignClient dataLimitRateDetailFeignClient; - + @Resource + private PqDataVerifyFeignClient pqDataVerifyFeignClient; @Override public void limitRateHandler(CalculatedParam calculatedParam) { logger.info("{},limitRate表转r_stat_limit_rate_d算法开始=====》", LocalDateTime.now()); @@ -78,8 +80,8 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { //获取所有监测点的限值 List overLimitList = commTerminalGeneralClient.getOverLimitDataByIds(lineIds).getData(); Map overLimitMap = overLimitList.stream().collect(Collectors.toMap(Overlimit::getId, Function.identity())); - - + //添加异常数据时间点 + getAbnormalData(lineParam); //以100个监测点分片处理 List> pendingIds = ListUtils.partition(lineIds, NUM); ArrayList phase = ListUtil.toList(PhaseType.PHASE_A, PhaseType.PHASE_B, PhaseType.PHASE_C); @@ -188,7 +190,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { .filter(x -> phase.contains(x.getPhasicType())) .collect(Collectors.groupingBy(DataPltDto::getLineId)); - for (String item : lineIds) { + for (String item : list) { result.addAll(getData(calculatedParam.getDataDate(), overLimitMap.get(item), allTime.get(item), @@ -204,8 +206,6 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { dataPlt.get(item))); } - - }); if (CollUtil.isNotEmpty(result)) { @@ -288,7 +288,25 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { result.add(t); return result; } - + /** + * @Description: + * @param lineParam + * @Author: wr + * @Date: 2025/3/11 9:04 + */ + private void getAbnormalData(LineCountEvaluateParam lineParam) { + lineParam.setTableName(DataCleanEnum.DataV.getCode()); + // 获取异常数据,用于排除异常数据 + List pqDataVerifies = pqDataVerifyFeignClient.queryData(lineParam).getData(); + if (CollUtil.isNotEmpty(pqDataVerifies)) { + Map> timeMap = pqDataVerifies.stream() + .collect(Collectors.groupingBy( + PqDataVerify::getLineId, + Collectors.mapping(item->TimeUtils.LocalDateTimeToString(item.getTime()), Collectors.toList()) + )); + lineParam.setAbnormalTime(timeMap); + } + } /** * @Description: limitRateData @@ -327,8 +345,8 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { // 获取 Overlimit 类的 getUharmx 方法 Method getUharmMethod = Overlimit.class.getMethod("getUharm" + i); float limit = (float) getUharmMethod.invoke(overlimit); - if (value > limit && value >= 0.0 && value <= 30.0) { - addAbnormalData(v[i - 2], item.getValueType(), item.getMinTime(), value, limit); + if (value > limit ) { + addAbnormalData(v[i - 2], item.getValueType(),item.getPhasicType(), item.getMinTime(), value, limit); } } catch (Exception e) { e.printStackTrace(); @@ -353,8 +371,8 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { // 获取 Overlimit 类的 getUharmx 方法 Method getUharmMethod = Overlimit.class.getMethod("getIharm" + j); float limit = (float) getUharmMethod.invoke(overlimit); - if (value > limit && value >= 0.0 && value <= 30.0) { - addAbnormalData(i[j - 2], item.getValueType(), item.getMinTime(), value, limit); + if (value > limit ) { + addAbnormalData(i[j - 2], item.getValueType(),item.getPhasicType(), item.getMinTime(), value, limit); } } catch (Exception e) { e.printStackTrace(); @@ -378,8 +396,8 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { // 获取 Overlimit 类的 getUharmx 方法 Method getUharmMethod = Overlimit.class.getMethod("getInuharm" + j); float limit = (float) getUharmMethod.invoke(overlimit); - if (value > limit && value >= 0.0 && value <= 30.0) { - addAbnormalData(uHarm[j - 1], item.getValueType(), item.getMinTime(), value, limit); + if (value > limit) { + addAbnormalData(uHarm[j - 1],item.getPhasicType(), item.getValueType(), item.getMinTime(), value, limit); } } catch (Exception e) { e.printStackTrace(); @@ -390,8 +408,8 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { //电压总谐波畸变率 if (!CollectionUtils.isEmpty(dataVPOList)) { for (DataVDto item : dataVPOList) { - if (item.getVThd() > overlimit.getUaberrance() && item.getVThd() >= 0.0 && item.getVThd() <= 30.0) { - addAbnormalData(thd, item.getMinTime(), item.getValueType(), item.getVThd(), overlimit.getUaberrance()); + if (item.getVThd() > overlimit.getUaberrance()) { + addAbnormalData(thd,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getVThd(), overlimit.getUaberrance()); } } } @@ -399,12 +417,12 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { if (!CollectionUtils.isEmpty(dataVPODevList)) { for (DataVDto item : dataVPODevList) { if (item.getVlDev() >= 0) { - if (item.getVlDev() > overlimit.getVoltageDev() && item.getVlDev() >= 0.0 && item.getVlDev() <= 20.0) { - addAbnormalData(uDev, item.getMinTime(), item.getValueType(), item.getVlDev(), overlimit.getVoltageDev()); + if (item.getVlDev() > overlimit.getVoltageDev()) { + addAbnormalData(uDev,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getVlDev(), overlimit.getVoltageDev()); } } else { - if (Math.abs(item.getVuDev()) > Math.abs(overlimit.getUvoltageDev()) && Math.abs(item.getVuDev()) <= 20.0) { - addAbnormalData(uDev, item.getMinTime(), item.getValueType(), item.getVlDev(), overlimit.getVoltageDev()); + if (Math.abs(item.getVuDev()) > Math.abs(overlimit.getUvoltageDev()) ) { + addAbnormalData(uDev,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getVlDev(), overlimit.getUvoltageDev()); } } } @@ -412,8 +430,8 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { //长时间闪变 if (!CollectionUtils.isEmpty(dataPltPOList)) { for (DataPltDto item : dataPltPOList) { - if (item.getPlt() > overlimit.getFlicker() && item.getPlt() >= 0 && item.getPlt() <= 20) { - addAbnormalData(flicker, item.getValueType(), item.getMinTime(), item.getPlt(), overlimit.getFlicker()); + if (item.getPlt() > overlimit.getFlicker() ) { + addAbnormalData(flicker,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getPlt(), overlimit.getFlicker()); } } } @@ -431,87 +449,6 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { limitRate.setVoltageDevOvertime(uDev.size()); dto.setDataLimitRate(getDataLimitRateDto(limitRate, v, i, uHarm)); - DataLimitRateDetailDto detail = new DataLimitRateDetailDto(); - int detailAllTime = flicker.size() + uAberrance.size() + iNeg.size() + freqDev.size() + thd.size() + uDev.size() + - v[0].size() + v[1].size() + v[2].size() + v[3].size() + v[4].size() + v[5].size() + v[6].size() + v[7].size() + v[8].size() + v[9].size() + v[11].size() + v[12].size() + v[13].size() + v[14].size() + v[15].size() + v[16].size() + v[17].size() + v[18].size() + v[19].size() + v[20].size() + v[21].size() + v[22].size() + v[23].size() + - i[0].size() + i[1].size() + i[2].size() + i[3].size() + i[4].size() + i[5].size() + i[6].size() + i[7].size() + i[8].size() + i[9].size() + i[10].size() + i[11].size() + i[12].size() + i[13].size() + i[14].size() + i[15].size() + i[16].size() + i[17].size() + i[18].size() + i[19].size() + i[20].size() + i[21].size() + i[22].size() + i[23].size() + - uHarm[0].size() + uHarm[1].size() + uHarm[2].size() + uHarm[3].size() + uHarm[4].size() + uHarm[5].size() + uHarm[6].size() + uHarm[7].size() + uHarm[8].size() + uHarm[9].size() + uHarm[10].size() + uHarm[11].size() + uHarm[12].size() + uHarm[13].size() + uHarm[14].size() + uHarm[15].size(); - detail.setLineId(lineId); - detail.setPhasicType(phasicType); - detail.setTime(LocalDateTimeUtil.parseDate(dataDate, DatePattern.NORM_DATE_PATTERN)); - detail.setAllTime(detailAllTime); - detail.setFlickerAllTime(flicker.size()); - detail.setFlickerOvertime(JSON.toJSONString(flicker)); - detail.setUaberranceOvertime(JSON.toJSONString(uAberrance)); - detail.setINegOvertime(JSON.toJSONString(iNeg)); - detail.setFreqDevOvertime(JSON.toJSONString(freqDev)); - detail.setUbalanceOvertime(JSON.toJSONString(thd)); - detail.setVoltageDevOvertime(JSON.toJSONString(uDev)); - detail.setUharm2Overtime(JSON.toJSONString(v[0])); - detail.setUharm3Overtime(JSON.toJSONString(v[1])); - detail.setUharm4Overtime(JSON.toJSONString(v[2])); - detail.setUharm5Overtime(JSON.toJSONString(v[3])); - detail.setUharm6Overtime(JSON.toJSONString(v[4])); - detail.setUharm7Overtime(JSON.toJSONString(v[5])); - detail.setUharm8Overtime(JSON.toJSONString(v[6])); - detail.setUharm9Overtime(JSON.toJSONString(v[7])); - detail.setUharm10Overtime(JSON.toJSONString(v[8])); - detail.setUharm11Overtime(JSON.toJSONString(v[9])); - detail.setUharm12Overtime(JSON.toJSONString(v[10])); - detail.setUharm13Overtime(JSON.toJSONString(v[11])); - detail.setUharm14Overtime(JSON.toJSONString(v[12])); - detail.setUharm15Overtime(JSON.toJSONString(v[13])); - detail.setUharm16Overtime(JSON.toJSONString(v[14])); - detail.setUharm17Overtime(JSON.toJSONString(v[15])); - detail.setUharm18Overtime(JSON.toJSONString(v[16])); - detail.setUharm19Overtime(JSON.toJSONString(v[17])); - detail.setUharm20Overtime(JSON.toJSONString(v[18])); - detail.setUharm21Overtime(JSON.toJSONString(v[19])); - detail.setUharm22Overtime(JSON.toJSONString(v[20])); - detail.setUharm23Overtime(JSON.toJSONString(v[21])); - detail.setUharm24Overtime(JSON.toJSONString(v[22])); - detail.setUharm25Overtime(JSON.toJSONString(v[23])); - detail.setIharm2Overtime(JSON.toJSONString(i[0])); - detail.setIharm3Overtime(JSON.toJSONString(i[1])); - detail.setIharm4Overtime(JSON.toJSONString(i[2])); - detail.setIharm5Overtime(JSON.toJSONString(i[3])); - detail.setIharm6Overtime(JSON.toJSONString(i[4])); - detail.setIharm7Overtime(JSON.toJSONString(i[5])); - detail.setIharm8Overtime(JSON.toJSONString(i[6])); - detail.setIharm9Overtime(JSON.toJSONString(i[7])); - detail.setIharm10Overtime(JSON.toJSONString(i[8])); - detail.setIharm11Overtime(JSON.toJSONString(i[9])); - detail.setIharm12Overtime(JSON.toJSONString(i[10])); - detail.setIharm13Overtime(JSON.toJSONString(i[11])); - detail.setIharm14Overtime(JSON.toJSONString(i[12])); - detail.setIharm15Overtime(JSON.toJSONString(i[13])); - detail.setIharm16Overtime(JSON.toJSONString(i[14])); - detail.setIharm17Overtime(JSON.toJSONString(i[15])); - detail.setIharm18Overtime(JSON.toJSONString(i[16])); - detail.setIharm19Overtime(JSON.toJSONString(i[17])); - detail.setIharm20Overtime(JSON.toJSONString(i[18])); - detail.setIharm21Overtime(JSON.toJSONString(i[19])); - detail.setIharm22Overtime(JSON.toJSONString(i[20])); - detail.setIharm23Overtime(JSON.toJSONString(i[21])); - detail.setIharm24Overtime(JSON.toJSONString(i[22])); - detail.setIharm25Overtime(JSON.toJSONString(i[23])); - detail.setInuharm1Overtime(JSON.toJSONString(uHarm[0])); - detail.setInuharm2Overtime(JSON.toJSONString(uHarm[1])); - detail.setInuharm3Overtime(JSON.toJSONString(uHarm[2])); - detail.setInuharm4Overtime(JSON.toJSONString(uHarm[3])); - detail.setInuharm5Overtime(JSON.toJSONString(uHarm[4])); - detail.setInuharm6Overtime(JSON.toJSONString(uHarm[5])); - detail.setInuharm7Overtime(JSON.toJSONString(uHarm[6])); - detail.setInuharm8Overtime(JSON.toJSONString(uHarm[7])); - detail.setInuharm9Overtime(JSON.toJSONString(uHarm[8])); - detail.setInuharm10Overtime(JSON.toJSONString(uHarm[9])); - detail.setInuharm11Overtime(JSON.toJSONString(uHarm[10])); - detail.setInuharm12Overtime(JSON.toJSONString(uHarm[11])); - detail.setInuharm13Overtime(JSON.toJSONString(uHarm[12])); - detail.setInuharm14Overtime(JSON.toJSONString(uHarm[13])); - detail.setInuharm15Overtime(JSON.toJSONString(uHarm[14])); - detail.setInuharm16Overtime(JSON.toJSONString(uHarm[15])); - dto.setDataLimitRateDetail(detail); return dto; } @@ -551,7 +488,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { Method getUharmMethod = Overlimit.class.getMethod("getUharm" + i); float limit = (float) getUharmMethod.invoke(overlimit); if (value > limit) { - addAbnormalData(v[i - 2], item.getValueType(), item.getMinTime(), value, limit); + addAbnormalData(v[i - 2],item.getPhasicType(), item.getValueType(), item.getMinTime(), value, limit); } } catch (Exception e) { e.printStackTrace(); @@ -577,7 +514,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { Method getUharmMethod = Overlimit.class.getMethod("getIharm" + j); float limit = (float) getUharmMethod.invoke(overlimit); if (value > limit ) { - addAbnormalData(i[j - 2], item.getValueType(), item.getMinTime(), value, limit); + addAbnormalData(i[j - 2],item.getPhasicType(), item.getValueType(), item.getMinTime(), value, limit); } } catch (Exception e) { e.printStackTrace(); @@ -602,7 +539,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { Method getUharmMethod = Overlimit.class.getMethod("getInuharm" + j); float limit = (float) getUharmMethod.invoke(overlimit); if (value > limit ) { - addAbnormalData(uHarm[j - 1], item.getValueType(), item.getMinTime(), value, limit); + addAbnormalData(uHarm[j - 1],item.getPhasicType(), item.getValueType(), item.getMinTime(), value, limit); } } catch (Exception e) { e.printStackTrace(); @@ -614,7 +551,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { if (!CollectionUtils.isEmpty(dataVPOList)) { for (DataVDto item : dataVPOList) { if (item.getVThd() > overlimit.getUaberrance() ) { - addAbnormalData(thd, item.getMinTime(), item.getValueType(), item.getVThd(), overlimit.getUaberrance()); + addAbnormalData(thd,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getVThd(), overlimit.getUaberrance()); } } } @@ -622,7 +559,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { if (!CollectionUtils.isEmpty(dataVPOUnbalanceList)) { for (DataVDto item : dataVPOUnbalanceList) { if (item.getVUnbalance() > overlimit.getUbalance() ) { - addAbnormalData(uAberrance, item.getMinTime(), item.getValueType(), item.getVUnbalance(), overlimit.getUbalance()); + addAbnormalData(uAberrance,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getVUnbalance(), overlimit.getUbalance()); } } } @@ -630,7 +567,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { if (!CollectionUtils.isEmpty(dataIPONegList)) { for (DataIDto item : dataIPONegList) { if (item.getINeg() > overlimit.getINeg()) { - addAbnormalData(iNeg, item.getMinTime(), item.getValueType(), item.getINeg(), overlimit.getINeg()); + addAbnormalData(iNeg,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getINeg(), overlimit.getINeg()); } } } @@ -638,7 +575,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { if (!CollectionUtils.isEmpty(dataVPOFreqList)) { for (DataVDto item : dataVPOFreqList) { if (item.getFreqDev() > overlimit.getFreqDev() ) { - addAbnormalData(freqDev, item.getMinTime(), item.getValueType(), item.getFreqDev(), overlimit.getFreqDev()); + addAbnormalData(freqDev,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getFreqDev(), overlimit.getFreqDev()); } } } @@ -648,11 +585,11 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { for (DataVDto item : dataVPODevList) { if (item.getVlDev() >= 0) { if (item.getVlDev() > overlimit.getVoltageDev() ) { - addAbnormalData(uDev, item.getMinTime(), item.getValueType(), item.getVlDev(), overlimit.getVoltageDev()); + addAbnormalData(uDev,item.getPhasicType(), item.getMinTime(), item.getValueType(), item.getVlDev(), overlimit.getVoltageDev()); } } else { if (Math.abs(item.getVuDev()) > Math.abs(overlimit.getUvoltageDev()) ) { - addAbnormalData(uDev, item.getMinTime(), item.getValueType(), item.getVlDev(), overlimit.getVoltageDev()); + addAbnormalData(uDev,item.getPhasicType(), item.getMinTime(), item.getValueType(), item.getVlDev(), overlimit.getUvoltageDev()); } } } @@ -661,7 +598,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { if (!CollectionUtils.isEmpty(dataPltPOList)) { for (DataPltDto item : dataPltPOList) { if (item.getPlt() > overlimit.getFlicker() ) { - addAbnormalData(flicker, item.getValueType(), item.getMinTime(), item.getPlt(), overlimit.getFlicker()); + addAbnormalData(flicker,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getPlt(), overlimit.getFlicker()); } } } @@ -741,6 +678,87 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { limitRate.setInuharm15Overtime(uHarm[14].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); limitRate.setInuharm16Overtime(uHarm[15].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); dto.setDataLimitRate(limitRate); + + int detailAllTime = flicker.size() + uAberrance.size() + iNeg.size() + freqDev.size() + thd.size() + uDev.size() + + v[0].size() + v[1].size() + v[2].size() + v[3].size() + v[4].size() + v[5].size() + v[6].size() + v[7].size() + v[8].size() + v[9].size() + v[11].size() + v[12].size() + v[13].size() + v[14].size() + v[15].size() + v[16].size() + v[17].size() + v[18].size() + v[19].size() + v[20].size() + v[21].size() + v[22].size() + v[23].size() + + i[0].size() + i[1].size() + i[2].size() + i[3].size() + i[4].size() + i[5].size() + i[6].size() + i[7].size() + i[8].size() + i[9].size() + i[10].size() + i[11].size() + i[12].size() + i[13].size() + i[14].size() + i[15].size() + i[16].size() + i[17].size() + i[18].size() + i[19].size() + i[20].size() + i[21].size() + i[22].size() + i[23].size() + + uHarm[0].size() + uHarm[1].size() + uHarm[2].size() + uHarm[3].size() + uHarm[4].size() + uHarm[5].size() + uHarm[6].size() + uHarm[7].size() + uHarm[8].size() + uHarm[9].size() + uHarm[10].size() + uHarm[11].size() + uHarm[12].size() + uHarm[13].size() + uHarm[14].size() + uHarm[15].size(); + if(detailAllTime>0){ + DataLimitRateDetailDto detail = new DataLimitRateDetailDto(); + detail.setLineId(lineId); + detail.setTime(LocalDateTimeUtil.parseDate(dataDate, DatePattern.NORM_DATE_PATTERN)); + detail.setFlickerOvertime(toJson(flicker)); + detail.setUaberranceOvertime(toJson(uAberrance)); + detail.setINegOvertime(toJson(iNeg)); + detail.setFreqDevOvertime(toJson(freqDev)); + detail.setUbalanceOvertime(toJson(thd)); + detail.setVoltageDevOvertime(toJson(uDev)); + detail.setUharm2Overtime(toJson(v[0])); + detail.setUharm3Overtime(toJson(v[1])); + detail.setUharm4Overtime(toJson(v[2])); + detail.setUharm5Overtime(toJson(v[3])); + detail.setUharm6Overtime(toJson(v[4])); + detail.setUharm7Overtime(toJson(v[5])); + detail.setUharm8Overtime(toJson(v[6])); + detail.setUharm9Overtime(toJson(v[7])); + detail.setUharm10Overtime(toJson(v[8])); + detail.setUharm11Overtime(toJson(v[9])); + detail.setUharm12Overtime(toJson(v[10])); + detail.setUharm13Overtime(toJson(v[11])); + detail.setUharm14Overtime(toJson(v[12])); + detail.setUharm15Overtime(toJson(v[13])); + detail.setUharm16Overtime(toJson(v[14])); + detail.setUharm17Overtime(toJson(v[15])); + detail.setUharm18Overtime(toJson(v[16])); + detail.setUharm19Overtime(toJson(v[17])); + detail.setUharm20Overtime(toJson(v[18])); + detail.setUharm21Overtime(toJson(v[19])); + detail.setUharm22Overtime(toJson(v[20])); + detail.setUharm23Overtime(toJson(v[21])); + detail.setUharm24Overtime(toJson(v[22])); + detail.setUharm25Overtime(toJson(v[23])); + detail.setIharm2Overtime(toJson(i[0])); + detail.setIharm3Overtime(toJson(i[1])); + detail.setIharm4Overtime(toJson(i[2])); + detail.setIharm5Overtime(toJson(i[3])); + detail.setIharm6Overtime(toJson(i[4])); + detail.setIharm7Overtime(toJson(i[5])); + detail.setIharm8Overtime(toJson(i[6])); + detail.setIharm9Overtime(toJson(i[7])); + detail.setIharm10Overtime(toJson(i[8])); + detail.setIharm11Overtime(toJson(i[9])); + detail.setIharm12Overtime(toJson(i[10])); + detail.setIharm13Overtime(toJson(i[11])); + detail.setIharm14Overtime(toJson(i[12])); + detail.setIharm15Overtime(toJson(i[13])); + detail.setIharm16Overtime(toJson(i[14])); + detail.setIharm17Overtime(toJson(i[15])); + detail.setIharm18Overtime(toJson(i[16])); + detail.setIharm19Overtime(toJson(i[17])); + detail.setIharm20Overtime(toJson(i[18])); + detail.setIharm21Overtime(toJson(i[19])); + detail.setIharm22Overtime(toJson(i[20])); + detail.setIharm23Overtime(toJson(i[21])); + detail.setIharm24Overtime(toJson(i[22])); + detail.setIharm25Overtime(toJson(i[23])); + detail.setInuharm1Overtime(toJson(uHarm[0])); + detail.setInuharm2Overtime(toJson(uHarm[1])); + detail.setInuharm3Overtime(toJson(uHarm[2])); + detail.setInuharm4Overtime(toJson(uHarm[3])); + detail.setInuharm5Overtime(toJson(uHarm[4])); + detail.setInuharm6Overtime(toJson(uHarm[5])); + detail.setInuharm7Overtime(toJson(uHarm[6])); + detail.setInuharm8Overtime(toJson(uHarm[7])); + detail.setInuharm9Overtime(toJson(uHarm[8])); + detail.setInuharm10Overtime(toJson(uHarm[9])); + detail.setInuharm11Overtime(toJson(uHarm[10])); + detail.setInuharm12Overtime(toJson(uHarm[11])); + detail.setInuharm13Overtime(toJson(uHarm[12])); + detail.setInuharm14Overtime(toJson(uHarm[13])); + detail.setInuharm15Overtime(toJson(uHarm[14])); + detail.setInuharm16Overtime(toJson(uHarm[15])); + dto.setDataLimitRateDetail(detail); + } return dto; } @@ -812,11 +830,34 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { limitRate.setInuharm16Overtime(uHarm[15].size()); return limitRate; } + private String toJson(List list) { + Map> abnormalMap = list.stream().collect(Collectors.groupingBy(x->x.getPhasic()+"_"+x.getValueType())); + List info=new ArrayList<>(); + abnormalMap.forEach((key,value)->{ + String[] split = key.split("_"); + AbnormalData.Json json=new AbnormalData.Json(); + json.setPhasic(split[0]); + json.setValueType(split[1]); + json.setTime(String.join(",", value.stream() + .map(abnormal -> abnormal.getTime()) + .distinct() + .collect(Collectors.toList()))); + json.setValue(String.join(",", value.stream() + .map(abnormal -> abnormal.getValue()+"") + .distinct() + .collect(Collectors.toList()))); + info.add(json); + }); + if(CollUtil.isNotEmpty(info)){ + return JSON.toJSONString(info); + } + return null; + } - - private void addAbnormalData(List list, String valueType, String time, double value, float overLimitValue) { + private void addAbnormalData(List list,String phasicType, String valueType, String time, Double value, float overLimitValue) { AbnormalData data = new AbnormalData(); - data.setTime(time); + data.setTime(time.substring(11, time.length())); + data.setPhasic(phasicType); data.setValueType(valueType); data.setValue(value); data.setOverLimitValue(overLimitValue); diff --git a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataOnlineRateServiceImpl.java b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataOnlineRateServiceImpl.java index ff22e59..2b395b4 100644 --- a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataOnlineRateServiceImpl.java +++ b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataOnlineRateServiceImpl.java @@ -2,30 +2,26 @@ 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 cn.hutool.core.util.ObjectUtil; import com.njcn.algorithm.pojo.bo.CalculatedParam; import com.njcn.algorithm.service.line.IDataOnlineRateService; +import com.njcn.dataProcess.api.DataOnlineRateFeignClient; +import com.njcn.dataProcess.api.DataVFeignClient; 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.device.biz.pojo.dto.LineDevGetDTO; 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; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: @@ -37,40 +33,62 @@ import java.util.List; 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; + @Resource + private DataVFeignClient dataVFeignClient; + @Resource + private DataOnlineRateFeignClient onlineRateFeignClient; @Override - public void dataOnlineRate(CalculatedParam calculatedParam) { + public void dataOnlineRate(CalculatedParam calculatedParam) { LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate())); lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate())); - List devList = calculatedParam.getIdList(); + List devList = calculatedParam.getIdList(); - List> pendingIds = ListUtils.partition(devList, 1); - List outCommunicateData = new ArrayList<>(); - for (List dev : pendingIds) { - lineParam.setLineId(dev); - List data = communicateFeignClient.getRawDataLatest(lineParam).getData(); - outCommunicateData.addAll(data); - } + Map> LineDevGetMap = devList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getDevId)); List 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(ObjectUtil.isNotNull(calculatedParam.getType())){ + LineDevGetMap.forEach((key,value)->{ + RStatOnlineRateDto.Detail onlineRateDpo = new RStatOnlineRateDto.Detail(); + List collect = value.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); + lineParam.setLineId(collect); + Integer data = dataVFeignClient.getCountRawData(lineParam).getData(); + onlineRateDpo.setTimeId(calculatedParam.getDataDate()); + onlineRateDpo.setDevIndex(key); + if(data>0){ + onlineRateDpo.setOnlineMin(InfluxDBPublicParam.DAY_MINUTE); + onlineRateDpo.setOfflineMin(0); + }else{ + onlineRateDpo.setOnlineMin(0); + onlineRateDpo.setOfflineMin(InfluxDBPublicParam.DAY_MINUTE); + } + list.add(onlineRateDpo); + }); + }else{ + List outCommunicateData = new ArrayList<>(); + LineDevGetMap.forEach((key,value)->{ + lineParam.setLineId(Arrays.asList(key)); + List data = communicateFeignClient.getRawDataLatest(lineParam).getData(); + outCommunicateData.addAll(data); + }); + 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(); + onlineRateFeignClient.batchInsertion(list); } } diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/DataOnlineRateFeignClient.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/DataOnlineRateFeignClient.java new file mode 100644 index 0000000..71fb7cd --- /dev/null +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/DataOnlineRateFeignClient.java @@ -0,0 +1,25 @@ +package com.njcn.dataProcess.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.dataProcess.api.fallback.DataOnlineRateFeignClientFallbackFactory; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDto; +import com.njcn.dataProcess.pojo.dto.RStatOnlineRateDto; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +/** + * @Description: + * @Author: wr + * @Date: 2025/3/7 9:30 + */ +@FeignClient(value = ServerInfo.PLATFORM_DATA_PROCESSING_BOOT, path = "/dataOnlineRate", fallbackFactory = DataOnlineRateFeignClientFallbackFactory.class, contextId = "dataOnlineRate") +public interface DataOnlineRateFeignClient { + + @PostMapping("/batchInsertion") + HttpResult batchInsertion(@RequestBody List dataIDTOList); + +} diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/DataVFeignClient.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/DataVFeignClient.java index bd2cc4b..ae1f9aa 100644 --- a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/DataVFeignClient.java +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/DataVFeignClient.java @@ -21,19 +21,23 @@ import java.util.List; * @version 1.0.0 * @date 2022年01月05日 15:11 */ -@FeignClient(value = ServerInfo.PLATFORM_DATA_PROCESSING_BOOT, path = "/dataV", fallbackFactory = DataVFeignClientFallbackFactory.class, contextId = "dataV") +@FeignClient(value = ServerInfo.PLATFORM_DATA_PROCESSING_BOOT, path = "/dataV", fallbackFactory = DataVFeignClientFallbackFactory.class, contextId = "dataV") public interface DataVFeignClient { @PostMapping("/batchInsertion") HttpResult batchInsertion(@RequestBody List dataVDTOList); @PostMapping("/monitoringTime") - HttpResult> monitoringTime(@RequestParam("lineId") String lineId, @RequestParam("localData") String localData) ; + HttpResult> monitoringTime(@RequestParam("lineId") String lineId, @RequestParam("localData") String localData); //获取原始数据 @PostMapping("/getRawData") HttpResult> getRawData(@RequestBody LineCountEvaluateParam lineParam); + //获取总条目数量 + @PostMapping("/getCountRawData") + HttpResult getCountRawData(@RequestBody LineCountEvaluateParam lineParam); + //获取算法基础数据 @PostMapping("/getBaseData") HttpResult> getBaseData(@RequestBody LineCountEvaluateParam lineParam); diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/fallback/DataOnlineRateFeignClientFallbackFactory.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/fallback/DataOnlineRateFeignClientFallbackFactory.java new file mode 100644 index 0000000..3b69cb1 --- /dev/null +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/fallback/DataOnlineRateFeignClientFallbackFactory.java @@ -0,0 +1,48 @@ +package com.njcn.dataProcess.api.fallback; + +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.dataProcess.api.DataOnlineRateFeignClient; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDto; +import com.njcn.dataProcess.pojo.dto.RStatOnlineRateDto; +import com.njcn.dataProcess.util.DataProcessingEnumUtil; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Description: + * @Author: wr + * @Date: 2025/3/7 9:30 + */ +@Slf4j +@Component +public class DataOnlineRateFeignClientFallbackFactory implements FallbackFactory { + + + /** + * 输出远程请求接口异常日志 + * @param cause RPC请求异常 + */ + @Override + public DataOnlineRateFeignClient create(Throwable cause) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if(cause.getCause() instanceof BusinessException){ + BusinessException businessException = (BusinessException) cause.getCause(); + exceptionEnum = DataProcessingEnumUtil.getExceptionEnum(businessException.getResult()); + } + Enum finalExceptionEnum = exceptionEnum; + return new DataOnlineRateFeignClient() { + @Override + public HttpResult batchInsertion(List dataIDTOList) { + log.error("{}异常,降级处理,异常为:{}","批量插入数据",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + }; + } +} diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/fallback/DataVFeignClientFallbackFactory.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/fallback/DataVFeignClientFallbackFactory.java index b3e91f9..8e65e64 100644 --- a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/fallback/DataVFeignClientFallbackFactory.java +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/fallback/DataVFeignClientFallbackFactory.java @@ -60,6 +60,12 @@ public class DataVFeignClientFallbackFactory implements FallbackFactory getCountRawData(LineCountEvaluateParam lineParam) { + log.error("{}异常,降级处理,异常为:{}","获取总条目数量",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + @Override public HttpResult> getBaseData(LineCountEvaluateParam lineParam) { log.error("{}异常,降级处理,异常为:{}","获取算法基础数据",cause.toString()); diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/AbnormalData.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/AbnormalData.java index d78beee..af4cc1b 100644 --- a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/AbnormalData.java +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/AbnormalData.java @@ -1,8 +1,11 @@ package com.njcn.dataProcess.pojo.dto; +import com.alibaba.fastjson.annotation.JSONField; import lombok.Data; +import java.util.List; + /** * @author wr * @description @@ -11,10 +14,15 @@ import lombok.Data; @Data public class AbnormalData { + /** * 超标时间 */ private String time; + /** + * 相别 + */ + private String phasic; /** * 数据类型(最大值:max、最小值:min、平均值:avg、95值:cp95) @@ -29,4 +37,34 @@ public class AbnormalData { * 限值 */ private float overLimitValue; + + @Data + public static class Json { + + + /** + * 相别 + */ + @JSONField(ordinal = 1) + private String phasic; + + /** + * 数据类型(最大值:max、最小值:min、平均值:avg、95值:cp95) + */ + @JSONField(ordinal = 2) + private String valueType; + + /** + * 超标时间 + */ + @JSONField(ordinal = 3) + private String time; + /** + * 异常值 + */ + @JSONField(ordinal = 4) + private String value; + + } + } diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/DataLimitRateDetailDto.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/DataLimitRateDetailDto.java index 45ac002..e837a53 100644 --- a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/DataLimitRateDetailDto.java +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/DataLimitRateDetailDto.java @@ -15,24 +15,11 @@ public class DataLimitRateDetailDto implements Serializable { */ private String lineId; - /** - * 数据类型,’A’表示A相,’B’表示B相,’C’表示C相,’’M’表示ABC三项总和,T’表示总 - */ - private String phasicType; - /** * 合格率时间 */ private LocalDate time; - /** - * 总计算次数 - */ - private Integer allTime; - /** - * 闪变总计算次数 - */ - private Integer flickerAllTime; /** * 闪变越限次数 */ diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/RStatLimitRateDetailD.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/RStatLimitRateDetailD.java index 0e17959..b46b76a 100644 --- a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/RStatLimitRateDetailD.java +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/RStatLimitRateDetailD.java @@ -19,13 +19,6 @@ public class RStatLimitRateDetailD implements Serializable { @TableField(value = "my_index") private String lineId; - /** - * 数据类型,’A’表示A相,’B’表示B相,’C’表示C相,’’M’表示ABC三项总和,T’表示总 - */ - @MppMultiId - @TableField(value = "phasic_type") - private String phasicType; - /** * 合格率时间 */ @@ -34,18 +27,6 @@ public class RStatLimitRateDetailD implements Serializable { @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8") private LocalDate time; - /** - * 总计算次数 - */ - @TableField(value = "all_time") - private Integer allTime; - - /** - * 闪变总计算次数 - */ - @TableField(value = "flicker_all_time") - private Integer flickerAllTime; - /** * 闪变越限次数 */ diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/RStatOnlineRateD.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/RStatOnlineRateD.java index 0bba5c4..1aaa49f 100644 --- a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/RStatOnlineRateD.java +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/RStatOnlineRateD.java @@ -23,7 +23,7 @@ public class RStatOnlineRateD { */ @MppMultiId @TableField(value = "time_id") - private LocalDateTime timeId; + private String timeId; /** * 装置id diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/DataOnlineRateController.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/DataOnlineRateController.java new file mode 100644 index 0000000..57df3a1 --- /dev/null +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/DataOnlineRateController.java @@ -0,0 +1,56 @@ +package com.njcn.dataProcess.controller; + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.dataProcess.annotation.InsertBean; +import com.njcn.dataProcess.annotation.QueryBean; +import com.njcn.dataProcess.pojo.dto.RStatOnlineRateDto; +import com.njcn.dataProcess.service.IOnlineRate; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author hongawen + * @version 1.0 + * @data 2024/11/6 19:48 + */ +@Validated +@Slf4j +@Controller +@RestController +@RequestMapping("/dataOnlineRate") +@Api(tags = "终端在线率获取") +public class DataOnlineRateController extends BaseController { + + @QueryBean + private IOnlineRate onlineRateQuery; + + @InsertBean + private IOnlineRate onlineRateInsert; + + + @OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.ADD) + @PostMapping("/batchInsertion") + @ApiOperation("批量插入") + public HttpResult batchInsertion(@RequestBody List dataVDTOList) { + String methodDescribe = getMethodDescribe("batchInsertion"); + onlineRateInsert.batchInsertion(dataVDTOList); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + + +} diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/DataVController.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/DataVController.java index 44f343d..c24444f 100644 --- a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/DataVController.java +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/DataVController.java @@ -95,6 +95,15 @@ public class DataVController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, data, methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.QUERY) + @PostMapping("/getCountRawData") + @ApiOperation("获取总条目数量") + public HttpResult getCountRawData(@RequestBody LineCountEvaluateParam lineParam) { + String methodDescribe = getMethodDescribe("getCountRawData"); + Integer data = dataVQuery.getCountRawData(lineParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, data, methodDescribe); + } + @OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.QUERY) @PostMapping("/getBaseData") @ApiOperation("获取算法基础数据") diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/dao/relation/mapper/RStatOnlineRateDMapper.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/dao/relation/mapper/RStatOnlineRateDMapper.java new file mode 100644 index 0000000..4c68d8c --- /dev/null +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/dao/relation/mapper/RStatOnlineRateDMapper.java @@ -0,0 +1,17 @@ +package com.njcn.dataProcess.dao.relation.mapper; + +import com.github.jeffreyning.mybatisplus.base.MppBaseMapper; +import com.njcn.dataProcess.pojo.po.RStatOnlineRateD; + + +/** + *

+ * Mapper 接口 + *

+ * @author web2023 + */ +public interface RStatOnlineRateDMapper extends MppBaseMapper { + + + +} diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/IDataV.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/IDataV.java index c010cea..e8f5ef9 100644 --- a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/IDataV.java +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/IDataV.java @@ -38,6 +38,13 @@ public interface IDataV extends IMppService { */ List getRawData(LineCountEvaluateParam lineParam); + /** + * 获取总条目数量 + * @param lineParam + * @return + */ + Integer getCountRawData(LineCountEvaluateParam lineParam); + /** * 获取监测点原始数据 * @param lineParam 监测点参数 diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/IOnlineRate.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/IOnlineRate.java new file mode 100644 index 0000000..b060729 --- /dev/null +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/IOnlineRate.java @@ -0,0 +1,27 @@ +package com.njcn.dataProcess.service; + + +import com.github.jeffreyning.mybatisplus.service.IMppService; +import com.njcn.dataProcess.param.LineCountEvaluateParam; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDto; +import com.njcn.dataProcess.pojo.dto.PqsCommunicateDto; +import com.njcn.dataProcess.pojo.dto.RStatOnlineRateDto; +import com.njcn.dataProcess.pojo.po.RStatLimitRateD; +import com.njcn.dataProcess.pojo.po.RStatOnlineRateD; + +import java.util.List; + +/** + * @Description: + * @Author: wr + * @Date: 2025/3/6 10:22 + */ +public interface IOnlineRate extends IMppService{ + + /** + * 批量插入数据 + * @param onlineRateList + */ + void batchInsertion(List onlineRateList); + +} diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbDataVImpl.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbDataVImpl.java index c4653a1..0e305ac 100644 --- a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbDataVImpl.java +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbDataVImpl.java @@ -140,6 +140,33 @@ public class InfluxdbDataVImpl extends MppServiceImpl dataVS = dataVMapper.selectByQueryWrapper(influxQueryWrapper); + return dataVS.size(); + } + @Override public List getBaseData(LineCountEvaluateParam lineParam) { List result = new ArrayList<>(); diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbOnlineRateImpl.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbOnlineRateImpl.java new file mode 100644 index 0000000..1e6b0c4 --- /dev/null +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbOnlineRateImpl.java @@ -0,0 +1,29 @@ +package com.njcn.dataProcess.service.impl.influxdb; + + +import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; +import com.njcn.dataProcess.dao.relation.mapper.RStatOnlineRateDMapper; +import com.njcn.dataProcess.pojo.dto.RStatOnlineRateDto; +import com.njcn.dataProcess.pojo.po.RStatOnlineRateD; +import com.njcn.dataProcess.service.IOnlineRate; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + * @Description: + * @Author: wr + * @Date: 2025/3/6 10:22 + */ +@Service("InfluxdbOnlineRateImpl") +@RequiredArgsConstructor +public class InfluxdbOnlineRateImpl extends MppServiceImpl implements IOnlineRate { + + + @Override + public void batchInsertion(List onlineRateList) { + + } +} diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationDataVImpl.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationDataVImpl.java index 54b5d1d..53fc7a1 100644 --- a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationDataVImpl.java +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationDataVImpl.java @@ -91,6 +91,11 @@ public class RelationDataVImpl extends MppServiceImpl getBaseData(LineCountEvaluateParam lineParam) { return Collections.emptyList(); diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationOnlineRateImpl.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationOnlineRateImpl.java new file mode 100644 index 0000000..098972d --- /dev/null +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationOnlineRateImpl.java @@ -0,0 +1,37 @@ +package com.njcn.dataProcess.service.impl.relation; + + +import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; +import com.njcn.dataProcess.dao.relation.mapper.RStatOnlineRateDMapper; +import com.njcn.dataProcess.pojo.dto.RStatOnlineRateDto; +import com.njcn.dataProcess.pojo.po.RStatOnlineRateD; +import com.njcn.dataProcess.service.IOnlineRate; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + + +/** + * @Description: + * @Author: wr + * @Date: 2025/3/6 10:22 + */ +@Service("RelationOnlineRateImpl") +@RequiredArgsConstructor +public class RelationOnlineRateImpl extends MppServiceImpl implements IOnlineRate { + + + @Override + public void batchInsertion(List onlineRateList) { + List result = new ArrayList<>(); + onlineRateList.forEach(item->{ + RStatOnlineRateD onlineRate = new RStatOnlineRateD(); + BeanUtils.copyProperties(item, onlineRate); + result.add(onlineRate); + }); + this.saveOrUpdateBatchByMultiId(result); + } +}