From 816e856344d34b73a13d7db4055de2c66e7cd534 Mon Sep 17 00:00:00 2001
From: DYL <Dn1332079466>
Date: 星期一, 10 二月 2025 10:25:15 +0800
Subject: [PATCH] 电能负荷分析
---
zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java | 36 +
zhitan-system/src/main/resources/mapper/energyMonitor/ElectricLoadMapper.xml | 5
zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java | 21
zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricLoadController.java | 19
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexInforModel.java | 33 +
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadDetail.java | 36 +
zhitan-system/src/main/java/com/zhitan/energyMonitor/mapper/ElectricLoadMapper.java | 14
zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricLoadServiceImpl.java | 268 ++++++++
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadVO.java | 23
zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java | 177 +++++
zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java | 103 +++
zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java | 70 ++
zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricLoadService.java | 26
zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java | 13
zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java | 748 ++++++++++++++++++++++++
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexAndUnitDevice.java | 20
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadItem.java | 44 +
zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java | 10
zhitan-common/src/main/java/com/zhitan/common/utils/IntegerUtil.java | 40 +
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/ElectricLoadEntity.java | 12
zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java | 28
21 files changed, 1,736 insertions(+), 10 deletions(-)
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricLoadController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricLoadController.java
index 6434f20..3e4d5c9 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricLoadController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricLoadController.java
@@ -1,9 +1,14 @@
package com.zhitan.web.controller.energyMonitor;
import com.zhitan.common.annotation.Log;
+import com.zhitan.common.constant.CommonConst;
import com.zhitan.common.core.controller.BaseController;
import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.energyMonitor.domain.EnergyUnitToDevice;
+import com.zhitan.energyMonitor.domain.vo.ListElectricLoadVO;
+import com.zhitan.energyMonitor.service.IElectricLoadService;
import com.zhitan.energyMonitor.service.IEnergyUnitToDeviceService;
+import com.zhitan.model.domain.EnergyIndex;
import com.zhitan.model.service.IEnergyIndexService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -27,8 +32,8 @@
public class ElectricLoadController extends BaseController {
@Autowired
private IEnergyUnitToDeviceService energyUnitToDeviceService;
-// @Autowired
-// private IElectricLoadService electricLoadService;
+ @Autowired
+ private IElectricLoadService electricLoadService;
@Autowired
private IEnergyIndexService energyIndexService;
@@ -48,11 +53,11 @@
@RequestParam(name = "meterId") String meterId,
@RequestParam(name = "timeType") String timeType,
@RequestParam(name = "timeCode") String timeCode) {
-// EnergyIndex energyIndex = energyIndexService.getDeviceIndexByCode(energyUnitId, meterId, CommonConst.TAG_CODE_ZYGGL);
-//
-// EnergyUnitToDevice energyUnitToDevice = energyUnitToDeviceService.getEnergyUnitToDeviceById(energyUnitId, meterId);
-// ListElectricLoadVO lsvo = electricLoadService.list(timeType, timeCode, energyIndex, energyUnitToDevice);
- return AjaxResult.success(null);
+ EnergyIndex energyIndex = energyIndexService.getDeviceIndexByCode(energyUnitId, meterId, CommonConst.TAG_CODE_ZYGGL);
+
+ EnergyUnitToDevice energyUnitToDevice = energyUnitToDeviceService.getEnergyUnitToDeviceById(energyUnitId, meterId);
+ ListElectricLoadVO vo = electricLoadService.list(timeType, timeCode, energyIndex, energyUnitToDevice);
+ return AjaxResult.success(vo);
}
}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java
new file mode 100644
index 0000000..a099168
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java
@@ -0,0 +1,177 @@
+package com.zhitan.common.utils;
+
+
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.constant.TimeTypeConst;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 缁熻鍥剧浉鍏虫暟鎹伐鍏风被
+ * @author: yxw
+ * @date: 2022骞�04鏈�28鏃� 15:29
+ */
+public class ChartUtils {
+
+ /**
+ * 鏋勯�犳棩鏈熷垪琛�
+ *
+ * @param timeType
+ * @param timeCode
+ * @param dateList
+ */
+ public static void generateDateList(String timeType, String timeCode, List<Date> dateList) {
+ Date now = new Date();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ if (!timeCode.contains(CommonConst.SINGLE_MINUS_SIGN)) {
+ timeCode = DateTimeUtil.toDateTimeStr(timeCode, DateTimeUtil.COMMON_PATTERN_DAY, DateTimeUtil.COMMON_PATTERN_TO_DAY);
+ }
+ int hour = 23;
+ for (int i = CommonConst.DIGIT_0; i <= hour; i++) {
+ String tempCode = timeCode + " 0" + i;
+ if (i > 9) {
+ tempCode = timeCode + " " + i;
+ }
+ Date tempD = DateTimeUtil.toDateTime(tempCode, DateTimeUtil.COMMON_PATTERN_TO_HOUR);
+ dateList.add(tempD);
+ }
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ if (!timeCode.contains(CommonConst.SINGLE_MINUS_SIGN)) {
+ timeCode = DateTimeUtil.toDateTimeStr(timeCode, DateTimeUtil.COMMON_PATTERN_MONTH, DateTimeUtil.COMMON_PATTERN_TO_MONTH);
+ }
+ int max = DateTimeUtil.getDateTimeLastDay(DateTimeUtil.toDateTime(timeCode, DateTimeUtil.COMMON_PATTERN_TO_MONTH));
+
+ for (int i = CommonConst.DIGIT_1; i <= max; i++) {
+ String tempCode = timeCode + "-0" + i;
+ if (i > 9) {
+ tempCode = timeCode + "-" + i;
+ }
+ Date tempD = DateTimeUtil.toDateTime(tempCode, DateTimeUtil.COMMON_PATTERN_TO_DAY);
+ dateList.add(tempD);
+ }
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ int monthMax = 12;
+ for (int i = CommonConst.DIGIT_1; i <= monthMax; i++) {
+ String tempCode = timeCode + "-0" + i;
+ if (i > 9) {
+ tempCode = timeCode + "-" + i;
+ }
+ Date tempD = DateTimeUtil.toDateTime(tempCode, DateTimeUtil.COMMON_PATTERN_TO_MONTH);
+ dateList.add(tempD);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ /**
+ * 鑾峰彇瀵瑰簲鐨勭粨鏉熸椂闂�
+ *
+ * @param timeType
+ * @param date
+ * @return
+ */
+ public static Date getEndTime(String timeType, Date date) {
+ Date d1 = new Date();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ d1 = DateTimeUtil.addDays(date, CommonConst.DIGIT_1);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ d1 = DateTimeUtil.addMonths(date, CommonConst.DIGIT_1);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ d1 = DateTimeUtil.addYears(date, CommonConst.DIGIT_1);
+ break;
+ default:
+ break;
+ }
+ return d1;
+ }
+
+ /**
+ * 鑾峰彇鏃ユ湡鏄剧ず瀛楃
+ *
+ * @param timeType
+ * @param date
+ * @return
+ */
+ public static String getTimeCode(String timeType, Date date) {
+ String str = CommonConst.EMPTY;
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_TO_HOUR);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_TO_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_TO_MONTH);
+ break;
+ default:
+ break;
+ }
+ return str;
+ }
+
+ /**
+ * 鑾峰彇鏃ユ湡鏄剧ず瀛楃
+ *
+ * @param timeType
+ * @param date
+ * @return
+ */
+ public static String getTimeCodeChart(String timeType, Date date) {
+ String str = CommonConst.EMPTY;
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_HOUR_MINUTE);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_MONTH_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_TO_MONTH);
+ break;
+ default:
+ break;
+ }
+ return str;
+ }
+
+ /**
+ * 鑾峰彇鏃ユ湡鏄剧ず瀛楃
+ *
+ * @param timeType
+ * @param timeCode
+ * @return
+ */
+ public static Date getDateTime(String timeType, String timeCode) {
+ Date d1 = new Date();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ if (!timeCode.contains(CommonConst.SINGLE_MINUS_SIGN)) {
+ timeCode = DateTimeUtil.toDateTimeStr(timeCode, DateTimeUtil.COMMON_PATTERN_DAY, DateTimeUtil.COMMON_PATTERN_TO_DAY);
+ }
+ d1 = DateTimeUtil.toDateTime(timeCode, DateTimeUtil.COMMON_PATTERN_TO_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ if (!timeCode.contains(CommonConst.SINGLE_MINUS_SIGN)) {
+ timeCode = DateTimeUtil.toDateTimeStr(timeCode, DateTimeUtil.COMMON_PATTERN_MONTH, DateTimeUtil.COMMON_PATTERN_TO_MONTH);
+ }
+ d1 = DateTimeUtil.toDateTime(timeCode, DateTimeUtil.COMMON_PATTERN_TO_MONTH);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ d1 = DateTimeUtil.toDateTime(timeCode, DateTimeUtil.COMMON_PATTERN_YEAR);
+ break;
+ default:
+ break;
+ }
+ return d1;
+ }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java
new file mode 100644
index 0000000..248cb2f
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java
@@ -0,0 +1,748 @@
+package com.zhitan.common.utils;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.constant.TimeTypeConst;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.time.DateUtils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+/**
+ * @Description: 鏃堕棿宸ュ叿绫�
+ * @author: yxw
+ * @date: 2022骞�02鏈�02鏃� 12:23
+ */
+@Slf4j
+public class DateTimeUtil {
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡
+ */
+ public static final String COMMON_PATTERN = "yyyy-MM-dd HH:mm:ss";
+ /**
+ * 鏍煎紡鍖栨棩鏈熷埌鍒嗛挓
+ */
+ public static final String COMMON_PATTERN_END_WITH_MINUTE = "yyyy-MM-dd HH:mm";
+ /**
+ * 鏃ユ湡鏍煎紡 - 灏忔椂:鍒嗛挓
+ */
+ public static final String COMMON_PATTERN_HOUR_MINUTE = "HH:mm";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 骞翠唤
+ */
+ public static final String COMMON_PATTERN_YEAR = "yyyy";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏌愪竴骞�,
+ */
+ public static final String COMMON_PATTERN_CERTAIN_YEAR = "yy";
+
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤
+ */
+ public static final String COMMON_PATTERN_MONTH = "yyyyMM";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤
+ */
+ public static final String COMMON_PATTERN_TO_MONTH = "yyyy-MM";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤
+ */
+ public static final String COMMON_PATTERN_TO_MONTH_WORD = "yyyy-MM鏈�";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤
+ */
+ public static final String COMMON_PATTERN_TO_MONTH_ZH = "yyyy骞碝M鏈�";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 澶�
+ */
+ public static final String COMMON_PATTERN_DAY = "yyyyMMdd";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 澶�
+ */
+ public static final String COMMON_PATTERN_TO_DAY = "yyyy-MM-dd";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 澶�
+ */
+ public static final String COMMON_PATTERN_TO_DAY_WORD = "yyyy-MM-dd鏃�";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堟棩
+ */
+ public static final String COMMON_PATTERN_MONTH_DAY = "MM-dd";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 澶╂煇涓�澶�,
+ */
+ public static final String COMMON_PATTERN_DAY_OF_MONTH = "dd";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂
+ */
+ public static final String COMMON_PATTERN_HOUR = "yyyyMMddHH";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂
+ */
+ public static final String COMMON_PATTERN_TO_HOUR = "yyyy-MM-dd HH";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂
+ */
+ public static final String COMMON_PATTERN_TO_HOUR_WORD = "yyyy-MM-dd HH鏃�";
+ /**
+ * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂
+ */
+ public static final String COMMON_PATTERN_TO_HOUR_TEXT = "yyyy骞碝M鏈坉d鏃� HH鏃�";
+
+ /**
+ * 鑾峰彇褰撳墠鏃堕棿,鏃堕棿鏍煎紡锛歽yyy-MM-dd HH:mm:ss
+ *
+ * @return
+ */
+ public static String getNowDateTime() {
+ return getNowDateTime(COMMON_PATTERN);
+ }
+
+ /**
+ * 鑾峰彇褰撳墠鏃堕棿
+ *
+ * @param pattern 鏃堕棿鏍煎紡
+ * @return
+ */
+ public static String getNowDateTime(String pattern) {
+ //璁剧疆鏃ユ湡鏍煎紡
+ SimpleDateFormat df = new SimpleDateFormat(pattern);
+ String dateTime = df.format(new Date());
+ return dateTime;
+ }
+
+ /**
+ * 鑾峰彇浠婂勾鐨勫勾浠藉��
+ *
+ * @return
+ */
+ public static String getNowYear() {
+ return getNowDateTime(COMMON_PATTERN_YEAR);
+ }
+
+ /**
+ * 鑾峰彇浠婂勾鐨勬湀浠藉��
+ *
+ * @return
+ */
+ public static String getNowMonth() {
+ return getNowDateTime(COMMON_PATTERN_MONTH);
+ }
+
+ /**
+ * 瀛楃涓茶浆鎴愭椂闂寸被鍨�,榛樿鏍煎紡锛歽yyy-MM-dd HH:mm:ss
+ *
+ * @param dateTimeStr
+ * @return
+ */
+ public static Date toDateTime(String dateTimeStr) {
+ DateTime dt = null;
+ try {
+ dt = DateTime.of(dateTimeStr, COMMON_PATTERN);
+ } catch (Exception e) {
+
+ }
+ return dt;
+ }
+
+ /**
+ * 瀛楃涓茶浆鎴愭椂闂寸被鍨�
+ *
+ * @param dateTimeStr
+ * @return
+ */
+ public static Date toDateTime(String dateTimeStr, String pattern) {
+ DateTime dt = null;
+ try {
+ dt = DateTime.of(dateTimeStr, pattern);
+ } catch (Exception e) {
+
+ }
+ return dt;
+ }
+
+ /**
+ * 瀛楃涓茶浆鎴愮壒瀹氭牸寮忕殑鏃堕棿瀛楃涓茬被鍨�
+ *
+ * @param dateTimeStr 鏃堕棿瀛楃涓�
+ * @param sourcePattern 瀛楃涓叉椂闂存牸寮�
+ * @param toPattern 瑕佽浆鎴愪粈涔堟牸寮忕殑鏃堕棿
+ * @return
+ */
+ public static String toDateTimeStr(String dateTimeStr, String sourcePattern, String toPattern) {
+ String str = CommonConst.EMPTY;
+ try {
+ DateTime dt = DateTime.of(dateTimeStr, sourcePattern);
+ str = getDateTime(dt, toPattern);
+ } catch (Exception e) {
+
+ }
+ return str;
+ }
+
+ /**
+ * 鏃堕棿杞垚鎸囧畾鐨勬牸寮�
+ *
+ * @param pattern 鏃堕棿鏍煎紡
+ * @return
+ */
+ public static String getDateTime(Date dt, String pattern) {
+ //璁剧疆鏃ユ湡鏍煎紡
+ SimpleDateFormat df = new SimpleDateFormat(pattern);
+ return df.format(dt);
+ }
+
+ /**
+ * 鏃堕棿杞垚yyyy-MM-dd HH:mm:ss鏍煎紡
+ *
+ * @return
+ */
+ public static String getDateTime(Date dt) {
+ if (ObjectUtil.isEmpty(dt)) {
+ return CommonConst.EMPTY;
+ }
+ return getDateTime(dt, COMMON_PATTERN);
+ }
+
+ /**
+ * 鑾峰彇褰撳墠鏃堕棿鎵�灞炴湀浠界殑鏈�鍚庝竴澶�
+ *
+ * @return
+ */
+ public static int getDateTimeLastDay(Date dt) {
+ String month = getMonth(dt);
+ String firstDate = month + "01";
+ Date nextMonthFirstDate = addMonths(toDateTime(firstDate, COMMON_PATTERN_DAY), CommonConst.DIGIT_1);
+ Date currentMonthLastDate = addDays(nextMonthFirstDate, CommonConst.DIGIT_MINUS_1);
+ int day = IntegerUtil.toInt(getDateTime(currentMonthLastDate, COMMON_PATTERN_DAY_OF_MONTH));
+ return day;
+ }
+
+ /**
+ * 鑾峰彇骞翠唤鍊�
+ *
+ * @return
+ */
+ public static String getYear(Date dt) {
+ return getDateTime(dt, COMMON_PATTERN_YEAR);
+ }
+
+ /**
+ * 鑾峰彇鏈堜唤鍊� 202202
+ *
+ * @return
+ */
+ public static String getMonth(Date dt) {
+ return getDateTime(dt, COMMON_PATTERN_MONTH);
+ }
+
+ /**
+ * 鑾峰彇澶�,鏍煎紡锛歽yyyMMdd
+ *
+ * @return
+ */
+ public static String toDay(Date dt) {
+ return getDateTime(dt, COMMON_PATTERN_DAY);
+ }
+
+ /**
+ * 鑾峰彇灏忔椂:yyyyMMddHH
+ *
+ * @return
+ */
+ public static String toHour(Date dt) {
+ return getDateTime(dt, COMMON_PATTERN_HOUR);
+ }
+
+ /**
+ * 杞垚瀛楃涓茬被鍨嬪��
+ *
+ * @return
+ */
+ public static String toString(Date dt) {
+ return getDateTime(dt, COMMON_PATTERN);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勫勾鏁�
+ *
+ * @param dateTime
+ * @param years
+ * @return
+ */
+ public static Date addYears(Date dateTime, int years) {
+ return calcDate(dateTime, years, Calendar.YEAR);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勬湀鏁�
+ *
+ * @param dateTime
+ * @param months
+ * @return
+ */
+ public static Date addMonths(Date dateTime, int months) {
+ return calcDate(dateTime, months, Calendar.MONTH);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勫ぉ鏁�
+ *
+ * @param dateTime
+ * @param days
+ * @return
+ */
+ public static Date addDays(Date dateTime, int days) {
+ return calcDate(dateTime, days, Calendar.DATE);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勫皬鏃舵暟
+ *
+ * @param dateTime
+ * @param hours
+ * @return
+ */
+ public static Date addHours(Date dateTime, int hours) {
+ return calcDate(dateTime, hours, Calendar.HOUR);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勫垎閽熸暟
+ *
+ * @param dateTime
+ * @param minutes
+ * @return
+ */
+ public static Date addMinutes(Date dateTime, int minutes) {
+ return calcDate(dateTime, minutes, Calendar.MINUTE);
+ }
+
+ /**
+ * 鏃堕棿澧炲姞瀵瑰簲鐨勫皬鏃舵暟
+ *
+ * @param dateTime
+ * @param seconds
+ * @return
+ */
+ public static Date addSeconds(Date dateTime, int seconds) {
+ return calcDate(dateTime, seconds, Calendar.SECOND);
+ }
+
+ /**
+ * 璁$畻鏃ユ湡閫氱敤鏂规硶
+ *
+ * @param dateTime
+ * @param addValue
+ * @param calendarType 璁$畻绫诲瀷锛欳alendar.YEAR锛孋alendar.MONTH,Calendar.DAY
+ * @return
+ */
+ private static Date calcDate(Date dateTime, int addValue, int calendarType) {
+ Date dt = null;
+ try {
+ Calendar calendar = new GregorianCalendar();
+ calendar.setTime(dateTime);
+ //鎶婃棩鏈熷線鍚庡鍔犱竴骞达紝鏁存暟寰�鍚庢帹锛岃礋鏁板線鍓嶇Щ
+ calendar.add(calendarType, addValue);
+ // 鑾峰彇鐩稿姞鎴栬�呯浉鍑忎箣鍚庣殑鏃堕棿鍊�
+ Date tempDt = calendar.getTime();
+ // 鎶婃椂闂磋浆鎴愭墍闇�瑕佺殑鏍煎紡
+ String temp = getDateTime(tempDt, COMMON_PATTERN);
+ dt = toDateTime(temp);
+ } catch (Exception e) {
+
+ }
+ return dt;
+ }
+
+ /**
+ * 鑾峰彇璇ユ椂闂村睘浜庡綋澶╃殑绗嚑涓皬鏃�
+ *
+ * @param dateTime
+ * @return
+ */
+ public static int getHourOfDay(Date dateTime) {
+ return getDateValue(dateTime, Calendar.HOUR_OF_DAY);
+ }
+
+ /**
+ * 鑾峰彇璇ユ椂闂村睘浜庡綋鏈堢殑绗嚑澶�
+ *
+ * @param dateTime
+ * @return
+ */
+ public static int getDayOfMonth(Date dateTime) {
+ return getDateValue(dateTime, Calendar.DAY_OF_MONTH);
+ }
+
+ /**
+ * 鑾峰彇璇ユ椂闂村睘浜庡綋鍛ㄧ殑绗嚑澶�
+ * 涓�鍛ㄧ殑绗竴澶╂槸鍛ㄦ棩
+ *
+ * @param dateTime
+ * @return
+ */
+ public static int getDayOfWeek(Date dateTime) {
+ return getDateValue(dateTime, Calendar.DAY_OF_WEEK);
+ }
+
+ /**
+ * 鑾峰彇璇ユ椂闂村睘浜庡勾鐨勭鍑犱釜鏈�
+ * 鏈堜唤鍊�+1鏄湡瀹炵殑褰撳墠鏈�
+ *
+ * @param dateTime
+ * @return 宸茬粡鍦ㄧ郴缁熶腑鑾峰彇鍊肩殑鍩虹涓婂姞1浜嗭紝鐜板湪鏄湡瀹炵殑褰撳墠鏈堜唤鍊�
+ */
+ public static int getMonthOfYear(Date dateTime) {
+ return getDateValue(dateTime, Calendar.MONTH) + 1;
+ }
+
+ /**
+ * 鑾峰彇褰撳ぉ鐨勭鍑犱釜灏忔椂/褰撴湀鐨勭鍑犲ぉ/褰撳勾鐨勭鍑犱釜鏈�
+ *
+ * @param dateTime 濡傛灉鏃堕棿鍊间负绌猴紝榛樿褰撳墠鏃堕棿
+ * @param calendarType
+ * @return
+ */
+ private static int getDateValue(Date dateTime, int calendarType) {
+ int value = 0;
+ try {
+ if (ObjectUtil.isEmpty(dateTime)) {
+ dateTime = new Date();
+ }
+ Calendar calendar = new GregorianCalendar();
+ calendar.setTime(dateTime);
+ value = calendar.get(calendarType);
+ } catch (Exception e) {
+
+ }
+ return value;
+ }
+
+ /**
+ * 瀵规瘮time1 鍜� time2 鐨勫ぇ灏�
+ *
+ * @param time1
+ * @param time2
+ * @return -1:time1灏忎簬time2;0:time1绛変簬time2;1:time1澶т簬time2;
+ */
+ public static int compareDateDiff(Date time1, Date time2) {
+ long diff = time1.getTime() - time2.getTime();
+ int res = 0;
+ if (diff > 0) {
+ res = 1;
+ } else if (diff < 0) {
+ res = -1;
+ }
+ return res;
+ }
+
+ /**
+ * 鑾峰彇鏌ヨdata_item鎵�闇�瑕佺殑timecode鍊�
+ *
+ * @param timeType 鏃ユ湡绫诲瀷
+ * @param date 鏃堕棿
+ * @return
+ */
+ public static String getTimeCode(String timeType, Date date) {
+ String timeCode = CommonConst.EMPTY;
+ if (ObjectUtil.isEmpty(date)) {
+ date = new Date();
+ }
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ timeCode = CommonConst.WORD_H + getDateTime(date, COMMON_PATTERN_HOUR);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ timeCode = CommonConst.WORD_D + getDateTime(date, COMMON_PATTERN_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ timeCode = CommonConst.WORD_M + getDateTime(date, COMMON_PATTERN_MONTH);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ timeCode = CommonConst.WORD_Y + getDateTime(date, COMMON_PATTERN_YEAR);
+ break;
+ default:
+ break;
+ }
+ return timeCode;
+ }
+
+ /**
+ * 鑾峰彇鏌ヨ鏃ユ湀骞存姤琛ㄦ墍闇�瑕佺殑timecode鍊�
+ *
+ * @param timeType 鏃ユ湡绫诲瀷
+ * @param date 鏃堕棿
+ * @return
+ */
+ public static String getReportTimeCode(String timeType, Date date) {
+ String timeCode = CommonConst.EMPTY;
+ if (ObjectUtil.isEmpty(date)) {
+ date = new Date();
+ }
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ timeCode = getDateTime(date, COMMON_PATTERN_TO_HOUR);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ timeCode = getDateTime(date, COMMON_PATTERN_TO_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ timeCode = getDateTime(date, COMMON_PATTERN_TO_MONTH);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ timeCode = getDateTime(date, COMMON_PATTERN_YEAR);
+ break;
+ default:
+ break;
+ }
+ return timeCode;
+ }
+
+ /**
+ * 鑾峰彇鏃堕棿瀵瑰簲鐨勭幆姣旀椂闂�
+ *
+ * @param timeType HOUR/DAY/MONTH/YEAR
+ * @param date 鏃堕棿鍊�
+ * @return
+ */
+ public static Date getLoopTime(String timeType, Date date) {
+ Date dt = null;
+ if (ObjectUtil.isEmpty(date)) {
+ date = new Date();
+ }
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ dt = addHours(date, CommonConst.DIGIT_MINUS_1);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ dt = addDays(date, CommonConst.DIGIT_MINUS_1);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ dt = addMonths(date, CommonConst.DIGIT_MINUS_1);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ dt = addYears(date, CommonConst.DIGIT_MINUS_1);
+ break;
+ default:
+ break;
+ }
+ return dt;
+ }
+
+ /**
+ * 鑾峰彇鏁寸偣鏃堕棿
+ *
+ * @param timeType HOUR/DAY/MONTH/YEAR
+ * @param date 鏃堕棿鍊�
+ * @return
+ */
+ public static Date getHourTime(String timeType, Date date) {
+ Date dt = null;
+ if (ObjectUtil.isEmpty(date)) {
+ date = new Date();
+ }
+ String tempStr = null;
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ tempStr = getDateTime(date, COMMON_PATTERN_TO_HOUR);
+ dt = toDateTime(tempStr, COMMON_PATTERN_TO_HOUR);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ tempStr = getDateTime(date, COMMON_PATTERN_TO_DAY);
+ dt = toDateTime(tempStr, COMMON_PATTERN_TO_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ tempStr = getDateTime(date, COMMON_PATTERN_TO_MONTH);
+ dt = toDateTime(tempStr, COMMON_PATTERN_TO_MONTH);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ tempStr = getDateTime(date, COMMON_PATTERN_YEAR);
+ dt = toDateTime(tempStr, COMMON_PATTERN_YEAR);
+ break;
+ default:
+ break;
+ }
+ return dt;
+ }
+
+ /**
+ * 璁$畻涓や釜鏃堕棿闂撮殧澶╂暟锛堟棩鏈熸牸寮忔瘮杈冿級
+ *
+ * @param beginTime
+ * @param endTime
+ * @return
+ */
+ public static int daysBetween(Date beginTime, Date endTime) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(beginTime);
+ long beginStamp = calendar.getTimeInMillis();
+ calendar.setTime(endTime);
+ long endStamp = calendar.getTimeInMillis();
+ long betweenDays = (endStamp - beginStamp) / (1000 * 3600 * 24);
+ return Integer.parseInt(String.valueOf(betweenDays));
+ }
+
+ /**
+ * 璁$畻涓や釜鏃堕棿闂撮殧澶╂暟锛堝瓧绗︿覆鏍煎紡姣旇緝锛�
+ *
+ * @param beginTime
+ * @param endTime
+ * @return
+ */
+ public static int daysBetween(String beginTime, String endTime) {
+ try {
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+ Date begin = format.parse(beginTime);
+ Date end = format.parse(endTime);
+ return daysBetween(begin, end);
+ } catch (ParseException exception) {
+ log.error("璁$畻涓や釜鏃堕棿闂撮殧澶╂暟" + exception.getMessage());
+ return 0;
+ }
+ }
+
+ /**
+ * 鏍规嵁鏃堕棿绫诲瀷鎶婂瓧绗︿覆杞垚瀵瑰簲鐨勬椂闂�
+ *
+ * @param timeType 鏃堕棿绫诲瀷
+ * @param time 鏃堕棿瀛楃涓�
+ * @return
+ */
+ public static Date getTime(String timeType, String time) {
+ Date dt = null;
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ dt = toDateTime(time, COMMON_PATTERN_TO_HOUR);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ dt = toDateTime(time, COMMON_PATTERN_TO_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ dt = toDateTime(time, COMMON_PATTERN_TO_MONTH);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ dt = toDateTime(time, COMMON_PATTERN_YEAR);
+ break;
+ default:
+ break;
+ }
+ return dt;
+ }
+
+ /**
+ * 鏍规嵁鏃堕棿绫诲瀷鎶婅繛缁殑鏃ユ湡瀛楃涓茶浆鎴愬搴旂殑鏃堕棿 锛�202303銆�20230303銆�2023030301銆�202303030101锛�
+ *
+ * @param timeType 鏃堕棿绫诲瀷
+ * @param time 鏃堕棿瀛楃涓�
+ * @return
+ */
+ public static Date getTimeByContinuousTimeCode(String timeType, String time) {
+ Date dt = null;
+ timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase();
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ dt = toDateTime(time, COMMON_PATTERN_HOUR);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ dt = toDateTime(time, COMMON_PATTERN_DAY);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ dt = toDateTime(time, COMMON_PATTERN_MONTH);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ dt = toDateTime(time, COMMON_PATTERN_YEAR);
+ break;
+ default:
+ break;
+ }
+ return dt;
+ }
+
+ /**
+ * 鏍规嵁鏃堕棿绫诲瀷杩斿洖澶┿�佹湀銆佸勾鏈�鍚庣殑鏃堕棿
+ *
+ * @param timeType 鏃堕棿绫诲瀷
+ * @param time 鏃堕棿
+ * @return
+ */
+ public static Date getEndTimeByType(String timeType, Date time) {
+ Date dt = null;
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ dt = DateUtil.endOfDay(time);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ dt = DateUtil.endOfMonth(time);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ dt = DateUtil.endOfYear(time);
+ break;
+ default:
+ break;
+ }
+ return dt;
+ }
+
+ /**
+ * 鏍规嵁鍛ㄦ湡绫诲瀷瀵圭敓浜у懆鏈熻繘琛屽姞鍑忚绠�
+ * 濉姤鍛ㄦ湡绫诲瀷锛圚OUR灏忔椂銆丏AY澶┿�丮ONTH鏈堛�乊EAR骞达級
+ *
+ * @param date 鐢熶骇鍛ㄦ湡
+ * @param cycleType 鐢熶骇鍛ㄦ湡绫诲瀷
+ * @param cycleType 鐢熶骇鍛ㄦ湡绫诲瀷
+ * @param val 璁$畻鍊�
+ * @return
+ */
+ public static Date productionCycleCal(Date date, String cycleType,int val) {
+ Date momDate = date;
+ switch (cycleType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ momDate = DateUtils.addHours(date, val);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ momDate = DateUtils.addDays(date, val);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ momDate = DateUtils.addMonths(date, val);
+ break;
+ }
+ return momDate;
+ }
+
+ /**
+ * 鏍规嵁鍛ㄦ湡绫诲瀷瀵圭敓浜у懆鏈熻繘琛屽姞鍑忚绠� 骞朵笖杩涗綅 渚嬪锛� HOUR +1杩涗綅灏辨槸 鍔犱竴澶�
+ * 濉姤鍛ㄦ湡绫诲瀷锛圚OUR灏忔椂銆丏AY澶┿�丮ONTH鏈堛�乊EAR骞达級
+ *
+ * @param date 鐢熶骇鍛ㄦ湡
+ * @param cycleType 鐢熶骇鍛ㄦ湡绫诲瀷
+ * @param val 璁$畻鍊�
+ * @return
+ */
+ public static Date productionCycleCalCarry(Date date, String cycleType,int val) {
+ Date momDate = date;
+ switch (cycleType) {
+ case TimeTypeConst.TIME_TYPE_HOUR:
+ momDate = DateUtils.addDays(date, val);
+ break;
+ case TimeTypeConst.TIME_TYPE_DAY:
+ momDate = DateUtils.addMonths(date, val);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ momDate = DateUtils.addYears(date, val);
+ break;
+ }
+ return momDate;
+ }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java
new file mode 100644
index 0000000..e56b678
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java
@@ -0,0 +1,103 @@
+package com.zhitan.common.utils;
+
+import cn.hutool.core.util.ObjectUtil;
+
+/**
+ * @Description: 鏁板瓧宸ュ叿绫�
+ * @author: yxw
+ * @date: 2022骞�02鏈�07鏃� 15:03
+ */
+public class DoubleUtil {
+ public static double toDouble(String str) {
+ double d = 0;
+ try {
+ d = Double.parseDouble(str);
+ } catch (Exception e) {
+ d = 0;
+ }
+ return d;
+ }
+
+ /**
+ * long 杞垚 double绫诲瀷
+ *
+ * @param l
+ * @return
+ */
+ public static double toDouble(long l) {
+ return toDouble(l + "");
+ }
+
+ /**
+ * long 杞垚 double绫诲瀷
+ *
+ * @param l
+ * @return
+ */
+ public static double toDouble(Object l) {
+ return toDouble(l + "");
+ }
+
+ /**
+ * int 杞垚 double绫诲瀷
+ *
+ * @param i
+ * @return
+ */
+ public static double toDouble(int i) {
+ return toDouble(i + "");
+ }
+
+
+ /**
+ * 鏍煎紡鍖栧皬鏁颁负鎸囧畾浣嶆暟鐨勫皬鏁板瓧绗︿覆
+ *
+ * @param value
+ * @return
+ */
+ public static String formatDoubleToStr(Double value, int format) {
+ if (ObjectUtil.isEmpty(value)) {
+ value = 0.00;
+ }
+ String str = String.format("%." + format + "f", value).toString();
+ return str;
+ }
+
+ /**
+ * 鏍煎紡鍖栧皬鏁颁负鎸囧畾浣嶆暟鐨勫皬鏁板瓧绗︿覆,榛樿鏍煎紡鍖栦负2浣嶅皬鏁�
+ *
+ * @param value
+ * @return
+ */
+ public static String formatDoubleToStr(Double value) {
+ return formatDoubleToStr(value, 2);
+ }
+
+ /**
+ * 鏍煎紡鍖栧皬鏁颁负鎸囧畾浣嶆暟鐨勫皬鏁�
+ *
+ * @param value
+ * @param format
+ * @return
+ */
+ public static double formatDouble(Double value, int format) {
+ if (ObjectUtil.isEmpty(value)) {
+ return 0D;
+ }
+ String str = formatDoubleToStr(value, format);
+ return toDouble(str);
+ }
+
+ /**
+ * 鏍煎紡鍖栧皬鏁颁负2浣嶆暟鐨勫皬鏁�
+ *
+ * @param value
+ * @return
+ */
+ public static double formatDouble(Double value) {
+ if (ObjectUtil.isEmpty(value)) {
+ return 0D;
+ }
+ return formatDouble(value, 2);
+ }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/IntegerUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/IntegerUtil.java
new file mode 100644
index 0000000..4ab42f8
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/IntegerUtil.java
@@ -0,0 +1,40 @@
+package com.zhitan.common.utils;
+
+/**
+ * @Description: 鏁存暟鐩稿叧宸ュ叿绫�
+ * @author: yxw
+ * @date: 2022骞�03鏈�10鏃� 17:31
+ */
+public class IntegerUtil {
+ /**
+ * 瀛楃涓茶浆鎴恑nt绫诲瀷
+ *
+ * @param str
+ * @return
+ */
+ public static int toInt(String str) {
+ int d = 0;
+ try {
+ d = Integer.parseInt(str);
+ } catch (Exception e) {
+ d = 0;
+ }
+ return d;
+ }
+
+ /**
+ * long杞垚int绫诲瀷
+ *
+ * @param l
+ * @return
+ */
+ public static int toInt(long l) {
+ int d = 0;
+ try {
+ d = (int) l;
+ } catch (Exception e) {
+ d = 0;
+ }
+ return d;
+ }
+}
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java
new file mode 100644
index 0000000..35522d0
--- /dev/null
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java
@@ -0,0 +1,70 @@
+package com.zhitan.common.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.zhitan.common.constant.CommonConst;
+
+/**
+ * @Description: 瀛楃涓插伐鍏风被
+ * @author: yxw
+ * @date: 2022骞�02鏈�02鏃� 12:27
+ */
+public class StringUtil {
+ /**
+ * 鍒ゆ柇瀛楃涓叉槸鍚︿负绌哄瓧绗︿覆鎴栬�匩ull
+ *
+ * @param str 闇�瑕佸垽鏂殑瀛楃涓�
+ * @return
+ */
+ public static boolean isEmptyOrNull(String str) {
+ if (str == null || CommonConst.EMPTY.equals(str)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * 瀛楃涓插鏋滀负绌哄瓧绗︿覆鎴栬�匩ull杩斿洖绌哄瓧绗︿覆锛屽惁鍒欒繑鍥炲瓧绗︿覆鏈韩鐨勫��
+ *
+ * @param str
+ * @return
+ */
+ public static String ifEmptyOrNullReturnValue(String str) {
+ if (isEmptyOrNull(str)) {
+ return CommonConst.EMPTY;
+ }
+ return str;
+ }
+
+ /**
+ * 瀵硅薄杞垚json瀛楃涓�
+ *
+ * @param obj
+ * @return
+ */
+ public static String toJson(Object obj) {
+ return JSONObject.toJSONString(obj);
+ }
+
+ /**
+ * 瀵硅薄杞垚JSONObject
+ *
+ * @param obj
+ * @return
+ */
+ public static JSONObject toJsonObject(Object obj) {
+ return JSONObject.parseObject(toJson(obj));
+ }
+
+ /**
+ * 棣栧瓧姣嶅ぇ鍐�
+ *
+ * @param str
+ * @return
+ */
+ public static String captureWord(String str) {
+ str = str.toLowerCase();
+ char[] cs = str.toCharArray();
+ cs[0] -= 32;
+ return String.valueOf(cs);
+ }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/ElectricLoadEntity.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/ElectricLoadEntity.java
new file mode 100644
index 0000000..0d089e2
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/ElectricLoadEntity.java
@@ -0,0 +1,12 @@
+package com.zhitan.energyMonitor.domain;
+
+import lombok.Data;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 15:58
+ */
+@Data
+public class ElectricLoadEntity {
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexAndUnitDevice.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexAndUnitDevice.java
new file mode 100644
index 0000000..f1f0845
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexAndUnitDevice.java
@@ -0,0 +1,20 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+/**
+ * 閲囬泦鐐圭敤鑳藉崟鍏冪數琛�
+ *
+ * @author fanxinfu
+ */
+@Data
+public class EnergyIndexAndUnitDevice {
+
+ private String indexId;
+ private String indexName;
+ private String energyType;
+ private String energyName;
+ private String energyUnitName;
+ private String energyUnitDeviceName;
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexInforModel.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexInforModel.java
new file mode 100644
index 0000000..78a7a82
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexInforModel.java
@@ -0,0 +1,33 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * 鐐逛綅璇︾粏淇℃伅
+ *
+ * @Author: Zhujw
+ * @Date: 2023/5/26
+ */
+@Data
+public class EnergyIndexInforModel {
+
+ @ApiModelProperty(value = "鐐逛綅id")
+ private String indexId;
+
+ @ApiModelProperty(value = "璁¢噺鍣ㄥ叿id")
+ private String meterId;
+
+ @ApiModelProperty(value = "鐐逛綅鍚嶇О")
+ private String indexName;
+
+ @ApiModelProperty(value = "鐐逛綅绫诲瀷(閲囬泦銆佽绠�)")
+ private String indexType;
+
+ @ApiModelProperty(value = "鐐逛綅code")
+ private String indexCode;
+
+ @ApiModelProperty(value = "鐐逛綅鍗曚綅")
+ private String indexUnit;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadDetail.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadDetail.java
new file mode 100644
index 0000000..9ee1c52
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadDetail.java
@@ -0,0 +1,36 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:59
+ */
+@Data
+public class ListElectricLoadDetail {
+ /**
+ * 鏈�澶ц礋鑽�
+ */
+ private String max;
+ /**
+ * 鏈�澶ц礋鑽峰彂鐢熸椂闂�
+ */
+ private String maxTime;
+ /**
+ * 鏈�灏忚礋鑽�
+ */
+ private String min;
+ /**
+ * 鏈�灏忚礋鑽峰彂鐢熸椂闂�
+ */
+ private String minTime;
+ /**
+ * 骞冲潎璐熻嵎
+ */
+ private String avg;
+ /**
+ * 璐熻嵎鐜� = 骞冲潎璐熻嵎 / 鏈�澶ц礋鑽�
+ */
+ private String rate;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadItem.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadItem.java
new file mode 100644
index 0000000..da4a6c7
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadItem.java
@@ -0,0 +1,44 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:59
+ */
+@Data
+public class ListElectricLoadItem {
+ /**
+ * 鐢佃〃鍚嶇О
+ */
+ private String name;
+ /**
+ * 鏃堕棿
+ */
+ private String timeCode;
+ /**
+ * 缁熻鍥炬樉绀烘椂闂�
+ */
+ private String timeCodeChart;
+ /**
+ * 鏈�澶ц礋鑽�
+ */
+ private String max;
+ /**
+ * 鏈�灏忚礋鑽�
+ */
+ private String min;
+ /**
+ * 骞冲潎璐熻嵎
+ */
+ private String avg;
+ /**
+ * 瀹炴椂鍊�
+ */
+ private String value;
+ /**
+ * 璐熻嵎鐜�
+ */
+ private String rate;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadVO.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadVO.java
new file mode 100644
index 0000000..dd06a35
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadVO.java
@@ -0,0 +1,23 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:58
+ */
+@Data
+public class ListElectricLoadVO {
+ /**
+ * 璁板綍鍒楄〃
+ */
+ private List<ListElectricLoadItem> itemList;
+
+ /**
+ * 璇︽儏瀹炰綋
+ */
+ private ListElectricLoadDetail detail;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/mapper/ElectricLoadMapper.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/mapper/ElectricLoadMapper.java
new file mode 100644
index 0000000..8bd0ba4
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/mapper/ElectricLoadMapper.java
@@ -0,0 +1,14 @@
+package com.zhitan.energyMonitor.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhitan.energyMonitor.domain.ElectricLoadEntity;
+
+/**
+ * @Description: sensor_alarm_item
+ * @Author: jeecg-boot
+ * @Date: 2022-04-19
+ * @Version: V1.0
+ */
+public interface ElectricLoadMapper extends BaseMapper<ElectricLoadEntity> {
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricLoadService.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricLoadService.java
new file mode 100644
index 0000000..9b32577
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricLoadService.java
@@ -0,0 +1,26 @@
+package com.zhitan.energyMonitor.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhitan.energyMonitor.domain.ElectricLoadEntity;
+import com.zhitan.energyMonitor.domain.EnergyUnitToDevice;
+import com.zhitan.energyMonitor.domain.vo.ListElectricLoadVO;
+import com.zhitan.model.domain.EnergyIndex;
+
+/**
+ * @Description:
+ * @Author: jeecg-boot
+ * @Date: 2022-04-19
+ * @Version: V1.0
+ */
+public interface IElectricLoadService extends IService<ElectricLoadEntity> {
+
+ /**
+ * 鑾峰彇璐熻嵎鍒嗘瀽鏁版嵁
+ *
+ * @param timeType
+ * @param timeCode
+ * @param energyIndex
+ * @return
+ */
+ ListElectricLoadVO list(String timeType, String timeCode, EnergyIndex energyIndex, EnergyUnitToDevice energyUnitToDevice);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricLoadServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricLoadServiceImpl.java
new file mode 100644
index 0000000..2eb8560
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricLoadServiceImpl.java
@@ -0,0 +1,268 @@
+package com.zhitan.energyMonitor.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.constant.TimeTypeConst;
+import com.zhitan.common.enums.CollectionModes;
+import com.zhitan.common.enums.GroupTimeType;
+import com.zhitan.common.utils.ChartUtils;
+import com.zhitan.common.utils.DateTimeUtil;
+import com.zhitan.common.utils.DoubleUtil;
+import com.zhitan.common.utils.StringUtil;
+import com.zhitan.energyMonitor.domain.ElectricLoadEntity;
+import com.zhitan.energyMonitor.domain.EnergyUnitToDevice;
+import com.zhitan.energyMonitor.domain.vo.ListElectricLoadDetail;
+import com.zhitan.energyMonitor.domain.vo.ListElectricLoadItem;
+import com.zhitan.energyMonitor.domain.vo.ListElectricLoadVO;
+import com.zhitan.energyMonitor.mapper.ElectricLoadMapper;
+import com.zhitan.energyMonitor.service.IElectricLoadService;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.realtimedata.domain.TagValue;
+import com.zhitan.realtimedata.service.RealtimeDatabaseService;
+import org.apache.commons.lang3.ObjectUtils;
+import org.joda.time.DateTime;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: sensor_alarm_item
+ * @Author: jeecg-boot
+ * @Date: 2022-04-19
+ * @Version: V1.0
+ */
+@Service
+public class ElectricLoadServiceImpl extends ServiceImpl<ElectricLoadMapper, ElectricLoadEntity> implements IElectricLoadService {
+ @Autowired
+ private RealtimeDatabaseService realtimeDatabaseService;
+
+ @Override
+ public ListElectricLoadVO list(String timeType, String timeCode, EnergyIndex energyIndex, EnergyUnitToDevice energyUnitToDevice) {
+ ListElectricLoadVO vo = new ListElectricLoadVO();
+ List<ListElectricLoadItem> itemList = new ArrayList<>();
+ vo.setItemList(itemList);
+ ListElectricLoadDetail detail = new ListElectricLoadDetail();
+ detail.setMaxTime(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setMax(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setMin(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setMinTime(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setAvg(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setRate(CommonConst.DOUBLE_MINUS_SIGN);
+ vo.setDetail(detail);
+ if (ObjectUtil.isEmpty(energyIndex) || ObjectUtil.isEmpty(energyUnitToDevice)) {
+ return vo;
+ }
+ List<Date> dateList = new ArrayList<>();
+ ChartUtils.generateDateList(timeType, timeCode, dateList);
+ // 鍥犱负influxdb娌℃湁鎸夌収鏈堝垎缁勫彇鏁版嵁锛屽彧鑳芥寜鐓ф棩鏈熷惊鐜彇鏁版嵁
+ if (TimeTypeConst.TIME_TYPE_YEAR.equals(timeType)) {
+ getYearData(timeType, dateList, energyIndex, energyUnitToDevice, detail, itemList);
+ } else {
+ getDayAndMonthData(timeType, timeCode, energyIndex, energyUnitToDevice, detail, itemList);
+ }
+ if (!StringUtil.isEmptyOrNull(energyIndex.getCode())) {
+ Date start = ChartUtils.getDateTime(timeType, timeCode);
+ Date end = ChartUtils.getEndTime(timeType, start);
+
+ String code = energyIndex.getCode();
+ TagValue maxTagValueModel = realtimeDatabaseService.statistics(code, start, end, CollectionModes.max);
+ TagValue minTagValueModel = realtimeDatabaseService.statistics(code, start, end, CollectionModes.min);
+ TagValue avgTagValueModel = realtimeDatabaseService.statistics(code, start, end, CollectionModes.mean);
+
+ double avg = CommonConst.DIGIT_DOUBLE_0;
+ if (!ObjectUtil.isEmpty(avgTagValueModel) && !ObjectUtil.isEmpty(avgTagValueModel.getValue())) {
+ detail.setAvg(DoubleUtil.formatDoubleToStr(avgTagValueModel.getValue()) + CommonConst.ELECTRIC_LOAD_UNIT);
+ avg = avgTagValueModel.getValue();
+ }
+
+ if (!ObjectUtil.isEmpty(maxTagValueModel) && !ObjectUtil.isEmpty(maxTagValueModel.getValue())) {
+ detail.setMax(DoubleUtil.formatDoubleToStr(maxTagValueModel.getValue()));
+ detail.setMaxTime(DateTimeUtil.getDateTime(maxTagValueModel.getDataTime(), DateTimeUtil.COMMON_PATTERN));
+
+ if (maxTagValueModel.getValue() != CommonConst.DIGIT_DOUBLE_0) {
+ double rate = avg * CommonConst.DIGIT_DOUBLE_100 / maxTagValueModel.getValue();
+ detail.setRate(DoubleUtil.formatDoubleToStr(rate) + CommonConst.SYMBOL_PERCENT);
+ }
+ }
+
+ if (!ObjectUtil.isEmpty(minTagValueModel) && !ObjectUtil.isEmpty(minTagValueModel.getValue())) {
+ detail.setMin(DoubleUtil.formatDoubleToStr(minTagValueModel.getValue()));
+ detail.setMinTime(DateTimeUtil.getDateTime(minTagValueModel.getDataTime(), DateTimeUtil.COMMON_PATTERN));
+ }
+
+ if (!CommonConst.DOUBLE_MINUS_SIGN.equals(detail.getMax())) {
+ String m = detail.getMax();
+ detail.setMax(m + CommonConst.ELECTRIC_LOAD_UNIT);
+ }
+ if (!CommonConst.DOUBLE_MINUS_SIGN.equals(detail.getMin())) {
+ String min = detail.getMin();
+ detail.setMin(min + CommonConst.ELECTRIC_LOAD_UNIT);
+ }
+ if (CommonConst.DOUBLE_MINUS_SIGN.equals(detail.getMax())) {
+ detail.setAvg(CommonConst.DOUBLE_MINUS_SIGN);
+ }
+ }
+
+ return vo;
+ }
+
+ /**
+ * 鑾峰彇鏈堝拰澶╂暟鎹�,鍥犱负influxdb鍙互鎸夌収鍒嗐�傛椂銆傚ぉ鍒嗙粍鍙栨暟锛屼笉鍙互鎸夌収鏈堝垎缁勫彇鏁帮紝鎵�浠ュ垎鎴愪袱涓柟娉曟潵鍐�
+ *
+ * @param timeType
+ * @param timeCode
+ * @param energyIndex
+ * @param energyUnitToDevice
+ * @param detail
+ * @param itemList
+ */
+ private void getDayAndMonthData(String timeType, String timeCode, EnergyIndex energyIndex, EnergyUnitToDevice energyUnitToDevice, ListElectricLoadDetail detail, List<ListElectricLoadItem> itemList) {
+ String tagCodes = energyIndex.getCode();
+ List<TagValue> maxList = new ArrayList<>();
+ List<TagValue> minList = new ArrayList<>();
+ List<TagValue> avgList = new ArrayList<>();
+ if (TimeTypeConst.TIME_TYPE_DAY.equals(timeType)) {
+ } else {
+ String tempTimeCode = StringUtil.ifEmptyOrNullReturnValue(timeCode).replace(CommonConst.SINGLE_MINUS_SIGN, CommonConst.EMPTY);
+ Date start = DateTimeUtil.toDateTime(tempTimeCode, DateTimeUtil.COMMON_PATTERN_MONTH);
+ Date end = DateTimeUtil.addMonths(start, CommonConst.DIGIT_1);
+ if (!StringUtil.isEmptyOrNull(tagCodes)) {
+ maxList = realtimeDatabaseService.statistics(tagCodes, start, end, CollectionModes.max, GroupTimeType.d);
+ minList = realtimeDatabaseService.statistics(tagCodes, start, end, CollectionModes.min, GroupTimeType.d);
+ avgList = realtimeDatabaseService.statistics(tagCodes, start, end, CollectionModes.mean, GroupTimeType.d);
+ }
+ }
+ if (CollectionUtils.isEmpty(maxList)) {
+ maxList = new ArrayList<>();
+ }
+ if (CollectionUtils.isEmpty(minList)) {
+ minList = new ArrayList<>();
+ }
+ if (CollectionUtils.isEmpty(avgList)) {
+ avgList = new ArrayList<>();
+ }
+ List<Date> dateList = new ArrayList<>();
+ ChartUtils.generateDateList(timeType, timeCode, dateList);
+ Date now = new Date();
+ Date temNow = now;
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ //褰撳墠鏃堕棿杞垚鏁存椂鏁寸偣
+ temNow = DateTimeUtil.getHourTime(TimeTypeConst.TIME_TYPE_HOUR, now);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ //褰撳墠鏃堕棿杞垚鏁存椂鏁寸偣
+ temNow = DateTimeUtil.getHourTime(TimeTypeConst.TIME_TYPE_DAY, now);
+ break;
+ default:
+ break;
+ }
+ for (Date date : dateList) {
+ ListElectricLoadItem temp = new ListElectricLoadItem();
+ temp.setTimeCode(ChartUtils.getTimeCode(timeType, date));
+ temp.setName(ObjectUtils.isNotEmpty(energyUnitToDevice) ? energyUnitToDevice.getName() : "");
+ temp.setMax(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setMin(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setAvg(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setTimeCodeChart(ChartUtils.getTimeCodeChart(timeType, date));
+ temp.setRate(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setValue(CommonConst.DOUBLE_MINUS_SIGN);
+ itemList.add(temp);
+ // 濡傛灉澶т簬褰撳墠鏃堕棿榛樿--
+ if (DateTimeUtil.compareDateDiff(date, temNow) > CommonConst.DIGIT_0) {
+ continue;
+ }
+ //澶╃殑鍒ゆ柇
+ if (TimeTypeConst.TIME_TYPE_DAY.equals(timeType)) {
+ // 鐢变簬瀹炴椂搴撹繑鍥炵殑鏃堕棿瀵瑰簲鍊间唬琛ㄧ殑鏄墠涓�涓懆鏈熺殑鍊�
+ Date nextHour = DateTimeUtil.addHours(date, CommonConst.DIGIT_1);
+ if (!StringUtil.isEmptyOrNull(energyIndex.getCode())) {
+ TagValue tagValue = realtimeDatabaseService.retrieve(energyIndex.getCode(), nextHour);
+ if (!ObjectUtil.isEmpty(tagValue)) {
+ if (ObjectUtils.isEmpty(tagValue) || ObjectUtils.isEmpty(tagValue.getValue())) {
+ temp.setValue(CommonConst.DOUBLE_MINUS_SIGN);
+ } else {
+ temp.setValue(String.valueOf(DoubleUtil.formatDouble(tagValue.getValue())));
+ }
+ }
+ }
+ } else {
+ //鏈堢殑鍒ゆ柇锛岀敱浜庡疄鏃跺簱杩斿洖鐨勬椂闂村搴斿�间唬琛ㄧ殑鏄墠涓�涓懆鏈熺殑鍊�
+ Date nextDay = DateTimeUtil.addDays(date, CommonConst.DIGIT_1);
+ TagValue tagValueMonth = maxList.stream().filter(x -> (new DateTime(x.getDataTime())).withTimeAtStartOfDay().toDate().equals(nextDay)).findAny().orElse(null);
+ if (!ObjectUtil.isEmpty(tagValueMonth)) {
+ //鏈堢殑鎵惧ぉ
+ TagValue minModel = minList.stream().filter(x -> x.getDataTime().equals(tagValueMonth.getDataTime())).findAny().orElse(null);
+ if (!ObjectUtil.isEmpty(minModel)) {
+ temp.setMin(String.valueOf(DoubleUtil.formatDouble(minModel.getValue())));
+ }
+ TagValue avgModel = avgList.stream().filter(x -> x.getDataTime().equals(tagValueMonth.getDataTime())).findAny().orElse(null);
+ if (!ObjectUtil.isEmpty(avgModel)) {
+ temp.setAvg(String.valueOf(DoubleUtil.formatDouble(avgModel.getValue())));
+ }
+ temp.setMax(String.valueOf(DoubleUtil.formatDouble(tagValueMonth.getValue())));
+
+ temp.setRate(CommonConst.DOUBLE_MINUS_SIGN);
+ if (Double.parseDouble(temp.getMax()) != CommonConst.DIGIT_DOUBLE_0) {
+ double rate = Double.parseDouble(temp.getAvg()) * 100 / Double.parseDouble(temp.getMax());
+ temp.setRate(DoubleUtil.formatDoubleToStr(rate) + CommonConst.SYMBOL_PERCENT);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * 鑾峰彇骞存暟鎹�
+ *
+ * @param timeType
+ * @param dateList
+ * @param energyIndex
+ * @param energyUnitToDevice
+ * @param detail
+ * @param itemList
+ */
+ private void getYearData(String timeType, List<Date> dateList, EnergyIndex energyIndex, EnergyUnitToDevice energyUnitToDevice, ListElectricLoadDetail detail, List<ListElectricLoadItem> itemList) {
+ String tagCode = StringUtil.ifEmptyOrNullReturnValue(energyIndex.getCode());
+ for (Date date : dateList) {
+ ListElectricLoadItem temp = new ListElectricLoadItem();
+ Date endTime = DateTimeUtil.addMonths(date, CommonConst.DIGIT_1);
+ temp.setAvg(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setMax(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setMin(CommonConst.DOUBLE_MINUS_SIGN);
+ if (!StringUtil.isEmptyOrNull(tagCode)) {
+ String code = energyIndex.getCode();
+ TagValue rt3 = realtimeDatabaseService.statistics(code, date, endTime, CollectionModes.max);
+ TagValue rt4 = realtimeDatabaseService.statistics(code, date, endTime, CollectionModes.min);
+ TagValue rt2 = realtimeDatabaseService.statistics(code, date, endTime, CollectionModes.mean);
+ if (ObjectUtils.isNotEmpty(rt2.getValue())) {
+ temp.setAvg(String.valueOf(DoubleUtil.formatDouble(rt2.getValue())));
+ }
+ if (ObjectUtils.isNotEmpty(rt3.getValue())) {
+ temp.setMax(String.valueOf(DoubleUtil.formatDouble(rt3.getValue())));
+ }
+ if (ObjectUtils.isNotEmpty(rt4.getValue())) {
+ temp.setMin(String.valueOf(DoubleUtil.formatDouble(rt4.getValue())));
+ }
+ }
+
+ temp.setTimeCode(ChartUtils.getTimeCode(timeType, date));
+ temp.setTimeCodeChart(ChartUtils.getTimeCodeChart(timeType, date));
+ temp.setName(StringUtil.ifEmptyOrNullReturnValue(energyUnitToDevice.getName()));
+ temp.setRate(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setValue(CommonConst.DOUBLE_MINUS_SIGN);
+ if (!temp.getMax().equals(CommonConst.DOUBLE_MINUS_SIGN) && Double.parseDouble(temp.getMax()) != CommonConst.DIGIT_DOUBLE_0) {
+ double rate = Double.parseDouble(temp.getAvg()) * 100 / Double.parseDouble(temp.getMax());
+ temp.setRate(DoubleUtil.formatDoubleToStr(rate) + CommonConst.SYMBOL_PERCENT);
+ }
+ itemList.add(temp);
+ }
+ }
+
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java b/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java
index aa59f95..140689e 100644
--- a/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java
+++ b/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java
@@ -81,12 +81,40 @@
@ApiModelProperty(value = "")
private String equipment;
+
@ApiModelProperty(value = "id")
private String energyId;
+
+ /**
+ * 鐢ㄨ兘鍗曞厓id
+ */
+ private String energyUnitId;
+
+ /**
+ * 鍗曞厓鍒拌澶囩殑id
+ */
+ private String energyUnitToDeviceId;
@Transient
@TableField(exist = false)
private String meterName;
+
+ public String getEnergyUnitId() {
+ return energyUnitId;
+ }
+
+ public String getEnergyUnitToDeviceId() {
+ return energyUnitToDeviceId;
+ }
+
+ public void setEnergyUnitId(String energyUnitId) {
+ this.energyUnitId = energyUnitId;
+ }
+
+ public void setEnergyUnitToDeviceId(String energyUnitToDeviceId) {
+ this.energyUnitToDeviceId = energyUnitToDeviceId;
+ }
+
public void setIndexId(String indexId) {
this.indexId = indexId;
}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java b/zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java
index 6807f7e..ad2d221 100644
--- a/zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java
@@ -116,4 +116,14 @@
String name,Long pageNum, Long pageSize);
List<EnergyIndex> getIndexByCode(String code,String nodeId);
+
+ /**
+ * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣�
+ *
+ * @param energyUnitId 鐢ㄨ兘鍗曞厓id
+ * @param meterId 璁惧id
+ * @param indexCode 鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎
+ * @return
+ */
+ EnergyIndex getDeviceIndexByCode(String energyUnitId, String meterId, String indexCode);
}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java
index 2bb7ff0..8269d9d 100644
--- a/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java
@@ -1,6 +1,7 @@
package com.zhitan.model.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.basicdata.domain.MeterImplement;
import com.zhitan.basicdata.services.IMeterImplementService;
@@ -17,6 +18,7 @@
import com.zhitan.model.service.IEnergyIndexService;
import com.zhitan.model.service.IModelNodeService;
import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -315,4 +317,38 @@
return energyIndexList;
}
+
+ /**
+ * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣�
+ *
+ * @param energyUnitId 鐢ㄨ兘鍗曞厓id
+ * @param meterId 璁惧id
+ * @param indexCode 鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎
+ * @return
+ */
+ @Override
+ public EnergyIndex getDeviceIndexByCode(String energyUnitId, String meterId, String indexCode) {
+
+ List<EnergyIndex> energyIndexList = listDeviceIndexByCode(energyUnitId, meterId, indexCode);
+ EnergyIndex energyIndex = energyIndexList.stream().findFirst().orElse(null);
+ if (ObjectUtils.isEmpty(energyIndex)) {
+ energyIndex = new EnergyIndex();
+ }
+ return energyIndex;
+ }
+
+ /**
+ * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣�
+ *
+ * @param energyUnitId 鐢ㄨ兘鍗曞厓id
+ * @param meterId 璁惧id
+ * @param indexCode 鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎
+ * @return
+ */
+ public List<EnergyIndex> listDeviceIndexByCode(String energyUnitId, String meterId, String indexCode) {
+ return energyIndexMapper.selectList(Wrappers.<EnergyIndex>lambdaQuery()
+ .eq(EnergyIndex::getEnergyUnitId, energyUnitId)
+ .eq(EnergyIndex::getEnergyUnitToDeviceId, meterId)
+ .like(EnergyIndex::getCode, indexCode));
+ }
}
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java
index dc45bc7..0f32c0f 100644
--- a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java
@@ -2,6 +2,7 @@
import com.zhitan.common.enums.CollectionModes;
+import com.zhitan.common.enums.GroupTimeType;
import com.zhitan.common.enums.RetrievalModes;
import com.zhitan.realtimedata.domain.TagValue;
@@ -94,6 +95,18 @@
CollectionModes collectionModes);
/**
+ * 鑾峰彇娴嬬偣鍦ㄤ竴娈垫椂闂村唴鎸夌収鏌愪竴鏃堕棿鍛ㄦ湡鐨勭粺璁℃暟鎹�.
+ *
+ * @param tagCodes 娴嬬偣缂栧彿闆嗗悎
+ * @param beginTime 寮�濮嬫椂闂�
+ * @param endTime 缁撴潫鏃堕棿,鍖呮嫭缁撴潫鏃堕棿
+ * @param modes 缁熻绫诲瀷
+ * @param timeType 鍒嗙粍鏃堕棿鍛ㄦ湡锛堝垎銆佹椂銆佸ぉ锛�
+ * @return 娴嬬偣缁熻缁撴灉
+ */
+ List<TagValue> statistics(String tagCodes, Date beginTime, Date endTime, CollectionModes modes, GroupTimeType timeType);
+
+ /**
* 瀛樺偍娴嬬偣鐨勫疄鏃舵暟鎹�.
*
* @param tagValues 娴嬬偣瀹炴椂鏁版嵁
diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java
index 7128652..9e16113 100644
--- a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java
@@ -1,7 +1,10 @@
package com.zhitan.realtimedata.service.impl;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
import com.google.common.collect.Lists;
import com.zhitan.common.enums.CollectionModes;
+import com.zhitan.common.enums.GroupTimeType;
import com.zhitan.common.enums.RetrievalModes;
import com.zhitan.realtimedata.data.RealtimeDatabaseManager;
import com.zhitan.realtimedata.data.influxdb.InfluxDBRepository;
@@ -10,9 +13,7 @@
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
/**
* 瀹炴椂鏁版嵁搴撳彇鏁版湇鍔″疄鐜扮被.
@@ -131,6 +132,20 @@
return repository.statistics(tagCodes, beginTime, endTime, collectionModes);
}
+ @Override
+ public List<TagValue> statistics(String tagCodes, Date beginTime, Date endTime, CollectionModes modes, GroupTimeType timeType) {
+ try {
+ List<String> tagCodeList = Arrays.asList(tagCodes.split(StrUtil.COMMA).clone());
+ List<TagValue> tagValues = repository.statistics(tagCodeList, beginTime, endTime, modes, timeType);
+ if (ObjectUtil.isEmpty(tagValues)) {
+ tagValues = new ArrayList<>();
+ }
+ return tagValues;
+ } catch (Exception e) {
+ return new ArrayList<>();
+ }
+ }
+
/**
* 瀛樺偍娴嬬偣鐨勫疄鏃舵暟鎹�.
*
diff --git a/zhitan-system/src/main/resources/mapper/energyMonitor/ElectricLoadMapper.xml b/zhitan-system/src/main/resources/mapper/energyMonitor/ElectricLoadMapper.xml
new file mode 100644
index 0000000..fa624b8
--- /dev/null
+++ b/zhitan-system/src/main/resources/mapper/energyMonitor/ElectricLoadMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhitan.energyMonitor.mapper.ElectricLoadMapper">
+
+</mapper>
\ No newline at end of file
--
Gitblit v1.9.3