update 添加能源对比分析接口

maser
yinq 5 months ago
parent afb07b93d1
commit 9867708a97

@ -8,7 +8,13 @@ import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.time.DateFormatUtils;
/**
@ -188,4 +194,67 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
return Date.from(zdt.toInstant());
}
/**
*
*
* HOURS -> yyyy-MM-dd HH:mm:ss
* DAYS -> yyyy-MM-dd
* MONTHS -> yyyy-MM
* YEARS -> yyyy
*
* @param startDateStr
* @param endDateStr
* @param unit HOURS, DAYS, MONTHS, YEARS
*/
public static List<String> getTimeIntervals(String startDateStr, String endDateStr, String unit) {
String pattern;
int calendarField;
switch (unit) {
case "19":
pattern = "yyyy-MM-dd HH:mm:ss";
calendarField = Calendar.HOUR_OF_DAY;
break;
case "10":
pattern = "yyyy-MM-dd";
calendarField = Calendar.DAY_OF_MONTH;
break;
case "7":
pattern = "yyyy-MM";
calendarField = Calendar.MONTH;
break;
case "4":
pattern = "yyyy";
calendarField = Calendar.YEAR;
break;
default:
throw new IllegalArgumentException("Unsupported unit: " + unit);
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
List<String> intervals = new ArrayList<>();
try {
Calendar start = Calendar.getInstance();
start.setTime(sdf.parse(startDateStr));
Calendar end = Calendar.getInstance();
end.setTime(sdf.parse(endDateStr));
while (!start.after(end)) {
intervals.add(sdf.format(start.getTime()));
start.add(calendarField, 1);
}
} catch (ParseException e) {
throw new RuntimeException("日期解析失败: " + e.getMessage(), e);
}
return intervals;
}
}

@ -80,6 +80,16 @@ public class EmsBaseWorkUnit extends BaseEntity
private String ancestors;
private List<String> workUnitCodeList;
public List<String> getWorkUnitCodeList() {
return workUnitCodeList;
}
public void setWorkUnitCodeList(List<String> workUnitCodeList) {
this.workUnitCodeList = workUnitCodeList;
}
public List<EmsBaseWorkUnit> getChildren() {
return children;
}

@ -85,4 +85,16 @@ public class EmsReportController extends BaseController {
}
/**
*
* @param hashMap
* @return
*/
@GetMapping("/comparativeAnalysisReport")
@ResponseBody
public AjaxResult comparativeAnalysisReport(@RequestParam(required = false) Map hashMap) {
Map<String, Object> list = emsReportService.comparativeAnalysisReport(hashMap);
return success(list);
}
}

@ -35,4 +35,12 @@ public interface IEmsReportService {
* @return
*/
List<Map<String, Object>> energyPreviewReportList(Map hashMap);
/**
*
* @param hashMap
* @return
*/
Map<String, Object> comparativeAnalysisReport(Map hashMap);
}

@ -1,5 +1,6 @@
package com.os.ems.report.service.impl;
import com.os.common.utils.DateUtils;
import com.os.common.utils.StringUtils;
import com.os.ems.base.domain.EmsBaseMonitorWorkUnit;
import com.os.ems.base.domain.EmsBaseWorkUnit;
@ -16,6 +17,8 @@ import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import static com.os.common.utils.DateUtils.getTimeIntervals;
/**
* Service
@ -49,7 +52,7 @@ public class EmsReportServiceImpl implements IEmsReportService {
hashMap.put("timeSub", Integer.parseInt(String.valueOf(hashMap.get("dateType"))));
List<EnergyStatisticalReport> reportList = new ArrayList<>();
if (Objects.equals(String.valueOf(hashMap.get("energyType")), "2")){
if (Objects.equals(String.valueOf(hashMap.get("energyType")), "2")) {
reportList = emsReportMapper.energyStatisticalDnbReportList(hashMap);
}
return reportList;
@ -115,4 +118,83 @@ public class EmsReportServiceImpl implements IEmsReportService {
return resultList;
}
/**
*
*
* @param hashMap
* @return
*/
@Override
public Map<String, Object> comparativeAnalysisReport(Map hashMap) {
Map<String, Object> result = new HashMap<>();
if (!hashMap.containsKey("beginCollectTime") || !hashMap.containsKey("endCollectTime") || !hashMap.containsKey("workUnitCodeList")) {
return result;
}
String beginCollectTime = String.valueOf(hashMap.get("beginCollectTime"));
String endCollectTime = String.valueOf(hashMap.get("endCollectTime"));
String dateType = String.valueOf(hashMap.get("dateType"));
String workUnitCodeList = String.valueOf(hashMap.get("workUnitCodeList"));
String monitorType = String.valueOf(hashMap.get("monitorType"));
//时间范围
List<String> timeIntervalList = getTimeIntervals(beginCollectTime, endCollectTime, dateType);
//已勾选的统计单元
List<String> workUnitCodeSplitList = Arrays.asList(workUnitCodeList.split(","));
EmsBaseWorkUnit workUnit = new EmsBaseWorkUnit();
workUnit.setWorkUnitCodeList(workUnitCodeSplitList);
List<EmsBaseWorkUnit> workUnitList = emsBaseWorkUnitMapper.selectEmsBaseWorkUnitList(workUnit);
//已勾选的统计单元名称
List<String> workUnitNameList = workUnitList.stream().map(EmsBaseWorkUnit::getWorkUnitName).collect(Collectors.toList());
//查询耗量
hashMap.put("workUnitCodeList", workUnitCodeSplitList);
hashMap.put("energyType", monitorType);
hashMap.put("beginCollectTime", beginCollectTime + " 00:00:00");
hashMap.put("endCollectTime", endCollectTime + " 23:59:59");
List<EnergyStatisticalReport> statisticalReportList = this.energyStatisticalReportList(hashMap);
// 按照 workUnitCode 分组
Map<String, List<EnergyStatisticalReport>> groupedByWorkUnitCode =
statisticalReportList.stream()
.collect(Collectors.groupingBy(EnergyStatisticalReport::getWorkUnitCode));
// 生成柱状图系列数据
List<Map<String, Object>> seriesBar = new ArrayList<>();
// 生成折线图系列数据
List<Map<String, Object>> seriesLine = new ArrayList<>();
for (EmsBaseWorkUnit unit : workUnitList) {
List<EnergyStatisticalReport> reportList = groupedByWorkUnitCode.get(unit.getWorkUnitCode());
if (reportList == null) {
reportList = new ArrayList<>();
}
List<BigDecimal> expendList = new ArrayList<>();
for (String time : timeIntervalList) {
BigDecimal initExpend = new BigDecimal(0);
for (EnergyStatisticalReport report : reportList) {
BigDecimal expend = report.getExpend();
if (time.equals(report.getBeginTime())){
initExpend = initExpend.add(expend);
}
}
expendList.add(initExpend);
}
Map<String, Object> barSeries = new HashMap<>();
barSeries.put("type", "bar");
barSeries.put("name", unit.getWorkUnitName());
barSeries.put("data", expendList);
seriesBar.add(barSeries);
Map<String, Object> lineSeries = new HashMap<>();
lineSeries.put("type", "line");
lineSeries.put("name", unit.getWorkUnitName());
lineSeries.put("data", expendList);
seriesLine.add(lineSeries);
}
result.put("times", timeIntervalList);
result.put("deviceNames", workUnitNameList);
result.put("seriesBar", seriesBar);
result.put("seriesLine", seriesLine);
return result;
}
}

@ -43,6 +43,12 @@
<include refid="selectEmsBaseWorkUnitVo"/>
<where>
<if test="workUnitCode != null and workUnitCode != ''">and work_unit_code = #{workUnitCode}</if>
<if test="workUnitCodeList != null and workUnitCodeList.size > 0">
and work_unit_code IN
<foreach item="workUnitCode" collection="workUnitCodeList" open="(" separator="," close=")">
#{workUnitCode}
</foreach>
</if>
<if test="parentId != null ">and parent_id = #{parentId}</if>
<if test="workUnitName != null and workUnitName != ''">and work_unit_name like concat('%', #{workUnitName},
'%')

@ -24,6 +24,12 @@
and FORMAT(RPD.BEGIN_TIME, 'yyyy-MM-dd HH:mm:ss') between #{beginCollectTime} and #{endCollectTime}
</if>
<if test="workUnitCode != null and workUnitCode != ''">and WU.WORK_UNIT_CODE = #{workUnitCode}</if>
<if test="workUnitCodeList != null and workUnitCodeList.size > 0">
and WU.WORK_UNIT_CODE IN
<foreach item="workUnitCode" collection="workUnitCodeList" open="(" separator="," close=")">
#{workUnitCode}
</foreach>
</if>
GROUP BY WU.WORK_UNIT_CODE, WU.WORK_UNIT_NAME, SUBSTRING(FORMAT(RPD.BEGIN_TIME, 'yyyy-MM-dd HH:mm:ss'), 1, DT.TIMESUB)
ORDER BY beginTime, workUnitCode
</select>

Loading…
Cancel
Save