From 3ed732affd22b15e433652dd96dd52652a9c78ac Mon Sep 17 00:00:00 2001 From: xy <748613696@qq.com> Date: Wed, 24 Jul 2024 13:45:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=94=A8=E8=83=BD=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/api/EnergyStatisticFeignClient.java | 6 + .../EnergyStatisticFallbackFactory.java | 12 ++ .../com/njcn/energy/pojo/dto/HarmonicDTO.java | 20 ++ .../StatisticDataRunController.java | 190 ++++++++++++++++++ .../tasks/energy/EleIntegrityRunner.java | 18 ++ .../tasks/energy/EleOnlineRateRunner.java | 18 ++ 6 files changed, 264 insertions(+) create mode 100644 pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/HarmonicDTO.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/timer/tasks/energy/EleIntegrityRunner.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/timer/tasks/energy/EleOnlineRateRunner.java diff --git a/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/EnergyStatisticFeignClient.java b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/EnergyStatisticFeignClient.java index 41eeff0cd..eb458458b 100644 --- a/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/EnergyStatisticFeignClient.java +++ b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/EnergyStatisticFeignClient.java @@ -25,4 +25,10 @@ public interface EnergyStatisticFeignClient { @GetMapping("electricCalJob") HttpResult electricCalJob(); + @GetMapping("eleOnlineRateJob") + HttpResult eleOnlineRateJobHandler(); + + @GetMapping("eleIntegrityJob") + HttpResult eleIntegrityJobHandler(); + } diff --git a/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/fallback/EnergyStatisticFallbackFactory.java b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/fallback/EnergyStatisticFallbackFactory.java index 45079700f..7dae7aec3 100644 --- a/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/fallback/EnergyStatisticFallbackFactory.java +++ b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/api/fallback/EnergyStatisticFallbackFactory.java @@ -38,6 +38,18 @@ public class EnergyStatisticFallbackFactory implements FallbackFactory eleOnlineRateJobHandler() { + log.error("{}异常,降级处理,异常为:{}","用能终端在线率数据",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult eleIntegrityJobHandler() { + log.error("{}异常,降级处理,异常为:{}","用能数据完整性数据",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } }; } } diff --git a/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/HarmonicDTO.java b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/HarmonicDTO.java new file mode 100644 index 000000000..1d12ec14e --- /dev/null +++ b/pqs-energy/energy-api/src/main/java/com/njcn/energy/pojo/dto/HarmonicDTO.java @@ -0,0 +1,20 @@ +package com.njcn.energy.pojo.dto; + +import lombok.Data; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2022/4/13 16:57 + */ +@Data +public class HarmonicDTO { + + private String id; + + private Integer real; + + private Integer due; +} diff --git a/pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/StatisticDataRunController.java b/pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/StatisticDataRunController.java index fc0343b75..a30a9ddb1 100644 --- a/pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/StatisticDataRunController.java +++ b/pqs-energy/energy-boot/src/main/java/com/njcn/energy/controller/StatisticDataRunController.java @@ -2,18 +2,26 @@ package com.njcn.energy.controller; import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.njcn.energy.pojo.api.EleIntegrityFeignClient; +import com.njcn.energy.pojo.api.EleOnlineRateFeignClient; +import com.njcn.energy.pojo.dto.HarmonicDTO; +import com.njcn.energy.pojo.dto.OnlineRateDTO; import com.njcn.influx.config.InfluxDbConfig; import com.njcn.influx.utils.InfluxDbUtils; import io.swagger.annotations.Api; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.influxdb.InfluxDB; import org.influxdb.dto.BatchPoints; import org.influxdb.dto.Point; +import org.influxdb.dto.QueryResult; import org.springframework.scheduling.annotation.Async; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.Instant; import java.util.*; @@ -27,10 +35,18 @@ import java.util.stream.Collectors; @RequestMapping("energyJob") public class StatisticDataRunController { + private final Integer POWER_DATA_DUE = 96; + + private final Integer AIR_DATA_DUE = 288; + private final InfluxDbUtils influxDbUtils; private final InfluxDbConfig influxDbConfig; + private final EleOnlineRateFeignClient eleOnlineRateFeignClient; + + private final EleIntegrityFeignClient eleIntegrityFeignClient; + /** * 调度统计电量增量 @@ -149,4 +165,178 @@ public class StatisticDataRunController { } + + + /** + * 用能终端在线率数据 + * -------------------------------------------------start----------------------------------------------------------- + */ + @GetMapping("eleOnlineRateJob") + public void eleOnlineRateJobHandler() { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)-1, 0, 0, 0); + calendar.set(Calendar.MILLISECOND, 0); + Calendar calendar2 = Calendar.getInstance(); + calendar2.set(calendar2.get(Calendar.YEAR), calendar2.get(Calendar.MONTH), calendar2.get(Calendar.DAY_OF_MONTH)-1, 23, 59, 59); + calendar2.set(Calendar.MILLISECOND, 0); + String startTime = format.format(calendar.getTime()); + String endTime = format.format(calendar2.getTime()); + List list = eleOnlineRateFeignClient.getDeviceTime(startTime,endTime).getData(); + createOnlineMeasurement(list,calendar.getTimeInMillis()); + } + + /** + * 生成用能终端在线率表 + */ + private void createOnlineMeasurement(List list, long time){ + List records = new ArrayList(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("device_id",item.getDeviceId()); + fields.put("online_rate",item.getOnlineRate()); + Point point = influxDbUtils.pointBuilder("ele_online_rate", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(influxDbConfig.getDatabase()).tag("device_id", item.getDeviceId()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(influxDbConfig.getDatabase(),"", InfluxDB.ConsistencyLevel.ALL, records); + } + + /** + * -------------------------------------------------end------------------------------------------------------------- + */ + + + /** + * 用能数据完整性数据 + * -------------------------------------------------start----------------------------------------------------------- + */ + @GetMapping("eleIntegrityJob") + public void eleIntegrityJobHandler() { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)-1, 0, 0, 0); + calendar.set(Calendar.MILLISECOND, 0); + Calendar calendar2 = Calendar.getInstance(); + calendar2.set(calendar2.get(Calendar.YEAR), calendar2.get(Calendar.MONTH), calendar2.get(Calendar.DAY_OF_MONTH)-1, 23, 59, 59); + calendar2.set(Calendar.MILLISECOND, 0); + String startTime = format.format(calendar.getTime()); + String endTime = format.format(calendar2.getTime()); + + List powerData = getPowerData(startTime,endTime); + if(!CollectionUtils.isEmpty(powerData)){ + createMeasurement(powerData,calendar.getTimeInMillis()); + } else { + List result = new ArrayList<>(); + //查询当前网关下所有监测点id + List lineList = eleIntegrityFeignClient.getPowerLineId().getData(); + lineList.forEach(item->{ + HarmonicDTO harmonicDTO = new HarmonicDTO(); + harmonicDTO.setId(item); + harmonicDTO.setReal(0); + harmonicDTO.setDue(96); + result.add(harmonicDTO); + }); + createMeasurement(result,calendar.getTimeInMillis()); + } + List airData = getAirData(startTime,endTime); + if(!CollectionUtils.isEmpty(airData)){ + powerData = new ArrayList<>(airData); + createMeasurement(powerData,calendar.getTimeInMillis()); + } else { + List result = new ArrayList<>(); + //查询当前网关下所有监测点id + List lineList = eleIntegrityFeignClient.getAirLineId().getData(); + lineList.forEach(item->{ + HarmonicDTO harmonicDTO = new HarmonicDTO(); + harmonicDTO.setId(item); + harmonicDTO.setReal(0); + harmonicDTO.setDue(288); + result.add(harmonicDTO); + }); + createMeasurement(result,calendar.getTimeInMillis()); + } + } + + /** + * 生成power_data数据 + */ + private List getPowerData(String startTime, String endTime){ + List list = new ArrayList<>(); + String sql = "SELECT count(FundWattHr) FROM power_data where time >= '"+startTime+"' and time <= '"+endTime+"' group by LineId"; + QueryResult sqlResult = influxDbUtils.query(sql); + //处理结果集 + List seriesList = sqlResult.getResults().get(0).getSeries(); + if (!CollectionUtils.isEmpty(seriesList)){ + seriesList.forEach(po -> { + HarmonicDTO harmonicDTO = new HarmonicDTO(); + String lineId = po.getTags().get("LineId"); + List> countList = po.getValues(); + for (List value : countList) { + //当日实际数据 + Integer count = new BigDecimal(value.get(1).toString()).intValue(); + harmonicDTO.setId(lineId); + harmonicDTO.setReal(count); + harmonicDTO.setDue(POWER_DATA_DUE); + } + list.add(harmonicDTO); + }); + } + return list; + } + + /** + * 生成air_data数据 + */ + private List getAirData(String startTime, String endTime){ + List list = new ArrayList<>(); + String sql = "SELECT count(ACInMode),count(ACOutMode) FROM air_data where time >='"+startTime+"' and time <= '"+endTime+"' group by LineId"; + QueryResult sqlResult = influxDbUtils.query(sql); + //处理结果集 + List seriesList = sqlResult.getResults().get(0).getSeries(); + if (!CollectionUtils.isEmpty(seriesList)){ + seriesList.forEach(po -> { + HarmonicDTO harmonicDTO = new HarmonicDTO(); + String lineId = po.getTags().get("LineId"); + List> countList = po.getValues(); + for (List value : countList) { + //当日实际数据 + if (!Objects.isNull(value.get(1))){ + harmonicDTO.setReal(new BigDecimal(value.get(1).toString()).intValue()); + } else { + harmonicDTO.setReal(new BigDecimal(value.get(2).toString()).intValue()); + } + harmonicDTO.setId(lineId); + harmonicDTO.setDue(AIR_DATA_DUE); + } + list.add(harmonicDTO); + }); + } + return list; + } + + /** + * 生成用能数据完整性表 + */ + private void createMeasurement(List list, long time){ + List records = new ArrayList(); + list.forEach(item->{ + Map tags = new HashMap<>(); + Map fields = new HashMap<>(); + tags.put("line_id",item.getId()); + fields.put("real",item.getReal()); + fields.put("due",item.getDue()); + Point point = influxDbUtils.pointBuilder("ele_integrity", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(influxDbConfig.getDatabase()).tag("line_id", item.getId()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + records.add(batchPoints.lineProtocol()); + }); + influxDbUtils.batchInsert(influxDbConfig.getDatabase(),"", InfluxDB.ConsistencyLevel.ALL, records); + } + + /** + * -------------------------------------------------end------------------------------------------------------------- + */ } diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/timer/tasks/energy/EleIntegrityRunner.java b/pqs-system/system-boot/src/main/java/com/njcn/system/timer/tasks/energy/EleIntegrityRunner.java new file mode 100644 index 000000000..18a96f3d4 --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/timer/tasks/energy/EleIntegrityRunner.java @@ -0,0 +1,18 @@ +package com.njcn.system.timer.tasks.energy; + +import com.njcn.energy.pojo.api.EnergyStatisticFeignClient; +import com.njcn.system.timer.TimerTaskRunner; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class EleIntegrityRunner implements TimerTaskRunner { + + private final EnergyStatisticFeignClient energyStatisticFeignClient; + + @Override + public void action(String date) { + energyStatisticFeignClient.eleIntegrityJobHandler(); + } +} diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/timer/tasks/energy/EleOnlineRateRunner.java b/pqs-system/system-boot/src/main/java/com/njcn/system/timer/tasks/energy/EleOnlineRateRunner.java new file mode 100644 index 000000000..dd0b5e3cf --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/timer/tasks/energy/EleOnlineRateRunner.java @@ -0,0 +1,18 @@ +package com.njcn.system.timer.tasks.energy; + +import com.njcn.energy.pojo.api.EnergyStatisticFeignClient; +import com.njcn.system.timer.TimerTaskRunner; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class EleOnlineRateRunner implements TimerTaskRunner { + + private final EnergyStatisticFeignClient energyStatisticFeignClient; + + @Override + public void action(String date) { + energyStatisticFeignClient.eleOnlineRateJobHandler(); + } +}