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); } } 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; } } 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å¹´MMæ"; /** * æ¥æå¸¸ç¨æ ¼å¼ - 天 */ 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å¹´MMæddæ¥ HHæ¶"; /** * è·åå½åæ¶é´,æ¶é´æ ¼å¼ï¼yyyy-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); } /** * åç¬¦ä¸²è½¬ææ¶é´ç±»å,é»è®¤æ ¼å¼ï¼yyyy-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); } /** * è·å天,æ ¼å¼ï¼yyyyMMdd * * @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 计ç®ç±»åï¼Calendar.YEARï¼Calendar.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; } /** * æ ¹æ®å¨æç±»å对çäº§å¨æè¿è¡å åè®¡ç® * å¡«æ¥å¨æç±»åï¼HOURå°æ¶ãDAY天ãMONTHæãYEARå¹´ï¼ * * @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è¿ä½å°±æ¯ å ä¸å¤© * å¡«æ¥å¨æç±»åï¼HOURå°æ¶ãDAY天ãMONTHæãYEARå¹´ï¼ * * @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; } } 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); } } 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 { /** * å符串转æintç±»å * * @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; } } 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 { /** * 夿å符串æ¯å¦ä¸ºç©ºå符串æè Null * * @param str éè¦å¤æçå符串 * @return */ public static boolean isEmptyOrNull(String str) { if (str == null || CommonConst.EMPTY.equals(str)) { return true; } return false; } /** * åç¬¦ä¸²å¦æä¸ºç©ºå符串æè Nullè¿å空å符串ï¼å¦åè¿åå符串æ¬èº«çå¼ * * @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); } } 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 { } 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; } 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; } 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; } 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; } 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; } 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> { } 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); } 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); } } } 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; } 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å设å¤idï¼ä»¥åç¹ä½ç¼ç è·åç¹ä½ * * @param energyUnitId ç¨è½åå id * @param meterId 设å¤id * @param indexCode ç¹ä½ç¼ç æè ç¹ä½ç¼ç çä¸é¨å * @return */ EnergyIndex getDeviceIndexByCode(String energyUnitId, String meterId, String indexCode); } 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å设å¤idï¼ä»¥åç¹ä½ç¼ç è·åç¹ä½ * * @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å设å¤idï¼ä»¥åç¹ä½ç¼ç è·åç¹ä½ * * @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)); } } 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 æµç¹å®æ¶æ°æ® 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<>(); } } /** * å卿µç¹ç宿¶æ°æ®. * 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>