zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyConsumeDataController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,69 @@ package com.zhitan.web.controller.statisticalAnalysis; import com.zhitan.common.annotation.Log; import com.zhitan.common.core.domain.AjaxResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import com.zhitan.statisticalAnalysis.service.IEnergyConsumeDataService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; /** * @Description: è½æºæ¶èç»è®¡åæ * @author: yxw * @date: 2022å¹´04æ12æ¥ 14:11 */ @Api(tags = "è½èç»è®¡åæ") @RestController @RequestMapping("/energyTypeAnalysis") @Slf4j public class EnergyConsumeDataController { @Autowired private IEnergyConsumeDataService energyConsumeDataService; /** * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ® * * @param pageNo é¡µç æ° * @param pageSize æ¯é¡µæ°æ®å¤å° * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR * @param energyType è½æºç±»å * @param modelCode 模åCode * @return */ @Log(title = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ®") @ApiOperation(value = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ®", notes = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ®") @GetMapping(value = "/listEnergyCostTrend") public AjaxResult listEnergyCostTrend(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, @RequestParam(name = "timeCode") String timeCode, @RequestParam(name = "timeType") String timeType, @RequestParam(name = "energyType") String energyType, @RequestParam(name = "modelCode") String modelCode) { return AjaxResult.success(energyConsumeDataService.listEnergyCostTrend(pageNo, pageSize, timeCode, timeType,energyType, modelCode)); } /** * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼ * * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR * @param modelCode 模åCode * @param energyType è½æºç±»å * @return */ @Log(title = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼") @ApiOperation(value = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼", notes = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼") @GetMapping(value = "/listEnergyCostTrendDetail") public AjaxResult listEnergyCostTrendDetail(@RequestParam(name = "timeCode") String timeCode, @RequestParam(name = "timeType") String timeType, @RequestParam(name = "modelCode") String modelCode, @RequestParam("energyType") String energyType) { return AjaxResult.success(energyConsumeDataService.listEnergyCostTrendDetail(timeCode, timeType, modelCode, energyType)); } } zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/PeakValleyMapper.java
@@ -38,4 +38,16 @@ List<ElectricityDataItem> getDataStatisticsDeviationAnalysis(@Param("indexIdSet") Set<String> indexIdSet, @Param("timeType") String timeType); /** * æ¥è¯¢ææ¬è¶å¿ * @param beginTime * @param endTime * @param timeType æ¶é´ç±»å * @param indexId èç¹Id * @param emissionType è½æºç±»å * @return */ List<ElectricityDataItem> getCostTrends(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime, @Param("timeType") String timeType, @Param("indexId") String indexId,@Param("emissionType") String emissionType); } zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/common/DateTimeUtil.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,750 @@ package com.zhitan.statisticalAnalysis.common; 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 com.zhitan.common.utils.IntegerUtil; import com.zhitan.common.utils.StringUtil; 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-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/CostTrendEnergyTypeItem.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,47 @@ package com.zhitan.statisticalAnalysis.domain.vo; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; /** * ææ¬è¶å¿-è½æºç±»å * * @Author: Zhujw * @Date: 2023/2/14 */ @Data @ApiModel(value = "ææ¬è¶å¿-è½æºç±»å", description = "ææ¬è¶å¿-è½æºç±»å") public class CostTrendEnergyTypeItem implements Serializable { /** * è½æºç±»å */ @ApiModelProperty(value = "è½æºç±»å") private String energyType; /** * è½æºåç§° */ @ApiModelProperty(value = "è½æºåç§°") private String energyName; /** * 累积é */ @ApiModelProperty(value = "累积é") @JsonFormat(shape = JsonFormat.Shape.STRING) private BigDecimal accumulation; /** * è´¹ç¨ */ @ApiModelProperty(value = "è´¹ç¨") @JsonFormat(shape = JsonFormat.Shape.STRING) private BigDecimal cost; } zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyConsumeTrendDetailItem.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,68 @@ package com.zhitan.statisticalAnalysis.domain.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; /** * è´¹ç¨åæ-ææ¬è¶å¿åæç»è®¡å¾è¿åå¼ä¿¡æ¯ * * @Author: Zhujw * @Date: 2023/2/14 */ @Data @ApiModel(value = "è´¹ç¨åæ-ææ¬è¶å¿åæç»è®¡å¾è¿åå¼ä¿¡æ¯", description = "è´¹ç¨åæ-ææ¬è¶å¿åæç»è®¡å¾è¿åå¼ä¿¡æ¯") public class EnergyConsumeTrendDetailItem { /** * è½æºç±»å */ @ApiModelProperty(value = "è½æºç±»å") private String energyType; /** * è½æºåä½ */ @ApiModelProperty(value = "è½æºåä½") private String energyUnit; /** * ç´¯ç§¯éæ ç¾ */ @ApiModelProperty(value = "ç´¯ç§¯éæ ç¾") private String accumulationLabel; /** * è´¹ç¨æ ç¾ */ @ApiModelProperty(value = "è´¹ç¨æ ç¾") private String costLabel; /** * 累积ékeyéå */ @ApiModelProperty(value = "累积ékeyéå") private List<String> accumulationKeyList; /** * 累积évalueéå */ @ApiModelProperty(value = "累积évalueéå") private List<BigDecimal> accumulationValueList; /** * è´¹ç¨keyéå */ @ApiModelProperty(value = "è´¹ç¨keyéå") private List<String> costKeyList; /** * è´¹ç¨valueéå */ @ApiModelProperty(value = "è´¹ç¨valueéå") private List<BigDecimal> costValueList; } zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyConsumeVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,43 @@ package com.zhitan.statisticalAnalysis.domain.vo; import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; /** * è½èå®ä½ç±» * * @Author: Zhujw * @Date: 2023/1/28 */ @Data public class EnergyConsumeVO implements Serializable { /** * 计éå¨å ·id */ private String deviceId; /** * è½æºç±»å */ private String energyType; /** * æ¶é´ç¼ç */ private Date dataTime; /** * è´¹ç¨ */ private BigDecimal costValue; /** * 累计é */ private BigDecimal accumulationValue; } zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyCostTrendItem.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,51 @@ package com.zhitan.statisticalAnalysis.domain.vo; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; /** * ææ¬è¶å¿åæ-è¡¨æ ¼ä¿¡æ¯ * * @Author: Zhujw * @Date: 2023/2/14 */ @Data @ApiModel(value = "ææ¬è¶å¿åæ-è¡¨æ ¼ä¿¡æ¯", description = "ææ¬è¶å¿åæ-è¡¨æ ¼ä¿¡æ¯") public class EnergyCostTrendItem { /** * ç¨è½åå id */ @ApiModelProperty(value = "ç¨è½åå id") private String energyUnitId; /** * ç¨è½åå åç§° */ @ApiModelProperty(value = "ç¨è½åå åç§°") private String energyUnitName; /** * æ»è´¹ç¨ */ @ApiModelProperty(value = "æ»è´¹ç¨") @JsonFormat(shape = JsonFormat.Shape.STRING) private BigDecimal total; /** * æ¶é´ */ @ApiModelProperty(value = "æ¶é´") private String dateCode; /** * è½æºç±»å */ @ApiModelProperty(value = "è½æºç±»å") private List<CostTrendEnergyTypeItem> itemList; } zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyCostTrendPage.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package com.zhitan.statisticalAnalysis.domain.vo; import lombok.Data; import java.util.List; /** * @Description: TODO * @author: yxw * @date: 2022å¹´04æ15æ¥ 10:07 */ @Data public class EnergyCostTrendPage { /** * æ°æ®å表 */ private List<EnergyCostTrendItem> itemList; /** * è®°å½æ»æ°é */ private long total; } zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/IEnergyConsumeDataService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,35 @@ package com.zhitan.statisticalAnalysis.service; import com.zhitan.statisticalAnalysis.domain.vo.*; import java.util.List; /** * è½æºæ¶èç»è®¡ç¸å ³æ¥è¯¢ */ public interface IEnergyConsumeDataService { /** * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ® * * @param pageNo é¡µç æ° * @param pageSize æ¯é¡µæ°æ®å¤å° * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR * @param energyType è½æºç±»å * @param modelCode 模åCode * @return */ EnergyCostTrendPage listEnergyCostTrend(int pageNo, int pageSize, String timeCode, String timeType,String energyType, String modelCode); /** * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼ * * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR * @param modelCode 模åCode * @param energyType è½æºç±»å * @return */ List<EnergyConsumeTrendDetailItem> listEnergyCostTrendDetail(String timeCode, String timeType, String modelCode, String energyType); } zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,294 @@ package com.zhitan.statisticalAnalysis.service.impl; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.zhitan.basicdata.domain.SysEnergy; import com.zhitan.basicdata.mapper.SysEnergyMapper; import com.zhitan.carbonemission.domain.CarbonEmission; import com.zhitan.common.constant.CommonConst; import com.zhitan.common.constant.TimeTypeConst; import com.zhitan.dataitem.mapper.DataItemMapper; import com.zhitan.model.domain.ModelNode; import com.zhitan.model.domain.NodeIndex; import com.zhitan.model.mapper.ModelNodeMapper; import com.zhitan.model.mapper.NodeIndexMapper; import com.zhitan.peakvalley.domain.ElectricityDataItem; import com.zhitan.peakvalley.mapper.PeakValleyMapper; import com.zhitan.statisticalAnalysis.common.DateTimeUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.ObjectUtils; import com.zhitan.statisticalAnalysis.domain.vo.*; import com.zhitan.statisticalAnalysis.service.IEnergyConsumeDataService; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; /** * @Description: TODO * @author: yxw * @date: 2022å¹´04æ12æ¥ 14:15 */ @Service @AllArgsConstructor public class EnergyConsumeDataServiceImpl implements IEnergyConsumeDataService { private DataItemMapper dataItemMapper; private ModelNodeMapper modelNodeMapper; private NodeIndexMapper nodeIndexMapper; private PeakValleyMapper peakValleyMapper; private SysEnergyMapper sysEnergyMapper; /** * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ® * * @param pageNo é¡µç æ° * @param pageSize æ¯é¡µæ°æ®å¤å° * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR * @param energyType è½æºç±»å * @param modelCode 模åCode * @return */ @Override public EnergyCostTrendPage listEnergyCostTrend(int pageNo, int pageSize, String timeCode, String timeType, String energyType, String modelCode) { //è½æºç±»åä¿¡æ¯ SysEnergy sysEnergy = new SysEnergy(); sysEnergy.setEnersno(energyType); List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(sysEnergy); if (sysEnergies.isEmpty()) { throw new RuntimeException("æªæ¥è¯¢å°è½æºä¿¡æ¯"); } SysEnergy sysEnergyInfo = sysEnergies.stream().findFirst().get(); //èç¹ä¿¡æ¯ List<ModelNode> modelNodes = modelNodeMapper.selectList(Wrappers.<ModelNode>lambdaQuery().eq(ModelNode::getModelCode, modelCode) .isNull(ModelNode::getParentId)); if (ObjectUtils.isEmpty(modelNodes)) { throw new RuntimeException("æªæ¥è¯¢å°èç¹ä¿¡æ¯"); } ModelNode modelNodeInfo = modelNodes.stream().findFirst().get(); //ç¹ä½ä¿¡æ¯ List<NodeIndex> nodeIndices = nodeIndexMapper.selectList(Wrappers.<NodeIndex>lambdaQuery() .eq(NodeIndex::getNodeId, modelNodeInfo.getNodeId())); if (nodeIndices.isEmpty()) { throw new RuntimeException("æªæ¥è¯¢å°ç¹ä½ä¿¡æ¯"); } // éåç¨è½åå è·åè¡¨æ ¼ä¸çæ°æ® List<EnergyCostTrendItem> trendItemList = new ArrayList<>(); EnergyCostTrendItem energyCostTrendItem = new EnergyCostTrendItem(); energyCostTrendItem.setDateCode(timeCode); // æ»è´¹ç¨ BigDecimal totalCost = BigDecimal.ZERO; // éåè½æºç±»å List<CostTrendEnergyTypeItem> itemList = new ArrayList<>(); CostTrendEnergyTypeItem item = new CostTrendEnergyTypeItem(); item.setEnergyType(sysEnergyInfo.getEnersno()); item.setEnergyName(sysEnergyInfo.getEnername()); // å¤çæ¶é´ Date bsTime = DateTimeUtil.getTime(timeType, timeCode); Date endTime = DateTimeUtil.getEndTimeByType(timeType, bsTime); totalCost = getEnergyUnitCostTrendAnalysisValueInfo(timeType, bsTime, endTime, totalCost, nodeIndices, sysEnergyInfo.getEnersno(), item); itemList.add(item); energyCostTrendItem.setTotal(totalCost.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP)); energyCostTrendItem.setItemList(itemList); trendItemList.add(energyCostTrendItem); EnergyCostTrendPage energyCostTrendPage = new EnergyCostTrendPage(); energyCostTrendPage.setTotal(1); energyCostTrendPage.setItemList(trendItemList); return energyCostTrendPage; } /** * è·åç¨è½åå ææ¬è¶å¿åæç´¯ç§¯éãè´¹ç¨ä¿¡æ¯ * * @param timeType æ¶é´ç±»å * @param bsTime å¼å§æ¶é´ * @param endTime ç»ææ¶é´ * @param totalCost æ»è´¹ç¨ * @param nodeIndices èç¹idéå * @param energyType è½æºç±»å * @param item è¿å对象 * @return */ private BigDecimal getEnergyUnitCostTrendAnalysisValueInfo(String timeType, Date bsTime, Date endTime, BigDecimal totalCost, List<NodeIndex> nodeIndices, String energyType, CostTrendEnergyTypeItem item) { BigDecimal costValue; BigDecimal accumulationValue = BigDecimal.ZERO; switch (energyType) { case "electric": List<ElectricityDataItem> electricityDataItems = peakValleyMapper.getDataStatistics(nodeIndices.stream().map(NodeIndex::getIndexId).collect(Collectors.toSet()), bsTime, endTime, timeType); costValue = electricityDataItems.stream().map(ElectricityDataItem::getCost).reduce(BigDecimal.ZERO, BigDecimal::add); accumulationValue = electricityDataItems.stream().map(ElectricityDataItem::getElectricity).reduce(BigDecimal.ZERO, BigDecimal::add); break; default: costValue = dataItemMapper.getDataItemTimeRangeValueByIndexIds(bsTime, endTime, timeType, nodeIndices.stream().map(NodeIndex::getIndexId).collect(Collectors.toList())); break; } costValue = costValue.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); totalCost = totalCost.add(costValue); item.setCost(costValue); item.setAccumulation(accumulationValue.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP)); return totalCost; } /** * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼ * * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR * @param modelCode 模åCode * @param energyType è½æºç±»å * @return */ @Override public List<EnergyConsumeTrendDetailItem> listEnergyCostTrendDetail(String timeCode, String timeType, String modelCode, String energyType) { //è½æºç±»åä¿¡æ¯ SysEnergy sysEnergy = new SysEnergy(); sysEnergy.setEnersno(energyType); List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(sysEnergy); if (sysEnergies.isEmpty()) { throw new RuntimeException("æªæ¥è¯¢å°è½æºä¿¡æ¯"); } SysEnergy sysEnergyInfo = sysEnergies.stream().findFirst().get(); //èç¹ä¿¡æ¯ List<ModelNode> modelNodes = modelNodeMapper.selectList(Wrappers.<ModelNode>lambdaQuery().eq(ModelNode::getModelCode, modelCode) .isNull(ModelNode::getParentId)); if (modelNodes.isEmpty()) { throw new RuntimeException("æªæ¥è¯¢å°èç¹ä¿¡æ¯"); } String nodeId = modelNodes.stream().findFirst().get().getNodeId(); // è½èä¿¡æ¯ List<EnergyConsumeVO> energyConsumeVOList = new ArrayList<>(); Date startTime = DateTimeUtil.getTime(timeType, timeCode); Date endTime = DateTimeUtil.getEndTimeByType(timeType, startTime); switch (sysEnergyInfo.getEnersno()) { case "electric": List<ElectricityDataItem> electricityDataItems = peakValleyMapper.getCostTrends(startTime, endTime, timeType, nodeId, energyType); if (!electricityDataItems.isEmpty()) { electricityDataItems.forEach(electricityDataItem -> { EnergyConsumeVO temp = new EnergyConsumeVO(); temp.setDataTime(electricityDataItem.getDataTime()); temp.setCostValue(electricityDataItem.getCost()); temp.setAccumulationValue(electricityDataItem.getElectricity()); energyConsumeVOList.add(temp); }); } break; default: List<CarbonEmission> dataItems = dataItemMapper.getMiddleCarbonEmission(startTime, endTime, timeType, nodeId, energyType); if (!dataItems.isEmpty()) { dataItems.forEach(electricityDataItem -> { EnergyConsumeVO temp = new EnergyConsumeVO(); temp.setDataTime(electricityDataItem.getDataTime()); temp.setCostValue(new BigDecimal(electricityDataItem.getValue())); temp.setAccumulationValue(new BigDecimal(electricityDataItem.getValue()).multiply(sysEnergyInfo.getPrice())); energyConsumeVOList.add(temp); }); } break; } // ç»è£ ç»è®¡å¾ä¿¡æ¯ EnergyConsumeTrendDetailItem item = new EnergyConsumeTrendDetailItem(); item.setEnergyType(energyType); item.setCostLabel(sysEnergyInfo.getEnername() + "è´¹"); item.setAccumulationLabel(sysEnergyInfo.getEnername() + "ç¨é"); // ç»è£ å¾è¡¨ä¿¡æ¯ getTrendAnalysisCharInfoByEnergyType(startTime, timeType, energyConsumeVOList, item); List<EnergyConsumeTrendDetailItem> itemList = new ArrayList<>(); itemList.add(item); return itemList; } /** * ç»è£ ææ¬è¶å¿åæ-ç»è®¡å¾ä¿¡æ¯ * * @param bsTime æ¶é´ * @param timeType æ¶é´ç±»å * @param dataItems è½è * @param item è¿å对象 */ private void getTrendAnalysisCharInfoByEnergyType(Date bsTime, String timeType, List<EnergyConsumeVO> dataItems, EnergyConsumeTrendDetailItem item) { List<String> costKeyList = new ArrayList<>(); List<String> accumulationKeyList = new ArrayList<>(); List<BigDecimal> costValueList = new ArrayList<>(); List<BigDecimal> accumulationValueList = new ArrayList<>(); Map<String, List<EnergyConsumeVO>> energyConsumeVOMap; //ææ¶é´ç±»åç»ç»è¿åæ°æ® switch (timeType){ case TimeTypeConst.TIME_TYPE_DAY: energyConsumeVOMap = dataItems.stream().collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime()))); for (int i = 0; i < CommonConst.DIGIT_24; i++) { String formatDate = i + CommonConst.TIME_UNIT_SHOW_HOUR; costKeyList.add(formatDate); accumulationKeyList.add(formatDate); String key = DateUtil.formatDateTime(DateUtil.offsetHour(bsTime, i)); calculateCostAndAccumulation(energyConsumeVOMap, key, costValueList, accumulationValueList); } break; case TimeTypeConst.TIME_TYPE_MONTH: energyConsumeVOMap = dataItems.stream().collect(Collectors.groupingBy(li -> DateUtil.formatDate(li.getDataTime()))); Date endTime = DateTimeUtil.getEndTimeByType(timeType, bsTime); while (bsTime.before(endTime)) { String formatDate = DateUtil.formatDate(bsTime); costKeyList.add(formatDate); accumulationKeyList.add(formatDate); calculateCostAndAccumulation(energyConsumeVOMap, formatDate, costValueList, accumulationValueList); bsTime = DateUtil.offsetDay(bsTime, CommonConst.DIGIT_1); } break; case TimeTypeConst.TIME_TYPE_YEAR: SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM"); energyConsumeVOMap = dataItems.stream().collect(Collectors.groupingBy(li -> formatter.format(li.getDataTime()))); for (int i = 0; i < CommonConst.DIGIT_12; i++) { Date newDate = DateUtil.offsetMonth(bsTime, i); String formatDate = DateUtil.format(newDate, DateTimeUtil.COMMON_PATTERN_TO_MONTH_ZH); costKeyList.add(formatDate); accumulationKeyList.add(formatDate); calculateCostAndAccumulation(energyConsumeVOMap, formatDate, costValueList, accumulationValueList); } break; default: break; } item.setCostKeyList(costKeyList); item.setCostValueList(costValueList); item.setAccumulationKeyList(accumulationKeyList); item.setAccumulationValueList(accumulationValueList); } /** * 计ç®è´¹ç¨åç¨é * @param energyConsumeVOMap * @param formatDate * @param costValueList * @param accumulationValueList */ private static void calculateCostAndAccumulation(Map<String, List<EnergyConsumeVO>> energyConsumeVOMap, String formatDate, List<BigDecimal> costValueList, List<BigDecimal> accumulationValueList) { List<EnergyConsumeVO> energyConsumeList = Optional.ofNullable(energyConsumeVOMap.get(formatDate)) .orElse(Collections.emptyList()); BigDecimal totalCost = energyConsumeList.stream() .map(EnergyConsumeVO::getCostValue) .reduce(BigDecimal.ZERO, BigDecimal::add) .setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); BigDecimal totalAccumulation = energyConsumeList.stream() .map(EnergyConsumeVO::getAccumulationValue) .reduce(BigDecimal.ZERO, BigDecimal::add) .setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); costValueList.add(totalCost); accumulationValueList.add(totalAccumulation); } } zhitan-system/src/main/resources/mapper/peakvalley/ElectricityDataItemMapper.xml
@@ -49,4 +49,30 @@ AND time_type = #{timeType} </select> <select id="getCostTrends" resultType="com.zhitan.peakvalley.domain.ElectricityDataItem"> SELECT di.index_code, di.time_code, di.electricity_type, di.data_time, di.electricity, di.cost, di.time_type, di.price, di.remark FROM "electricity_data_item" di JOIN energy_index ei ON di.index_id = ei.index_id WHERE di.index_id IN ( SELECT index_id FROM node_index WHERE node_id = #{indexId}) <if test="emissionType !='' and emissionType !=null and emissionType =='allType'"> AND ei.energy_id != '' </if> <if test="emissionType !='' and emissionType !=null and emissionType !='allType'"> AND ei.energy_id = #{emissionType} </if> AND (di.data_time BETWEEN #{beginTime} AND #{endTime}) AND di.time_type = #{timeType} </select> </mapper>