add 能源同比分析接口

maser
yinq 3 months ago
parent 0bfe10d28c
commit 42077728ba

@ -297,6 +297,20 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
return timeMap;
}
/**
*
* @param dateTimeStr "yyyy-MM-dd HH:mm:ss"
* @return
*/
public static String getLastYearDateTime(String dateTimeStr) {
// 定义日期时间格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 解析字符串为 LocalDateTime
LocalDateTime dateTime = LocalDateTime.parse(dateTimeStr, formatter);
// 减去一年
LocalDateTime lastYearDateTime = dateTime.minusYears(1);
// 格式化为字符串返回
return lastYearDateTime.format(formatter);
}
}

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

@ -42,6 +42,10 @@ public class RealTimeDataBo extends BaseEntity {
*/
private String monitorName;
/** 是否虚拟0是 1否 */
@Excel(name = "是否虚拟", readConverterExp = "0=是,1=否")
private String isAmmeter;
/** 采集时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date collectTime;
@ -108,6 +112,14 @@ public class RealTimeDataBo extends BaseEntity {
/** 纯度 */
private BigDecimal purity;
public String getIsAmmeter() {
return isAmmeter;
}
public void setIsAmmeter(String isAmmeter) {
this.isAmmeter = isAmmeter;
}
public BigDecimal getPurity() {
return purity;
}

@ -43,4 +43,11 @@ public interface IEmsReportService {
*/
Map<String, Object> comparativeAnalysisReport(Map hashMap);
/**
*
* @param hashMap
* @return
*/
Map<String, Object> yoyAnalysisReport(Map hashMap);
}

@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@ -197,4 +198,87 @@ public class EmsReportServiceImpl implements IEmsReportService {
return result;
}
/**
*
* @param hashMap
* @return
*/
@Override
public Map<String, Object> yoyAnalysisReport(Map hashMap) {
Map<String, Object> result = new HashMap<>();
if (!hashMap.containsKey("beginCollectTime") || !hashMap.containsKey("endCollectTime") || !hashMap.containsKey("workUnitCode")) {
return result;
}
String beginCollectTime = String.valueOf(hashMap.get("beginCollectTime"));
String endCollectTime = String.valueOf(hashMap.get("endCollectTime"));
String dateType = String.valueOf(hashMap.get("dateType"));
//时间范围
List<String> timeIntervalList = getTimeIntervals(beginCollectTime, endCollectTime, dateType);
List<EnergyStatisticalReport> statisticalReportList = this.energyStatisticalReportList(hashMap);
//同比增长率=(本期数值−去年同期数值)/去年同期数值×100%
String beginYearDateTime = DateUtils.getLastYearDateTime(beginCollectTime);
String endYearDateTime = DateUtils.getLastYearDateTime(endCollectTime);
hashMap.put("beginCollectTime", beginYearDateTime);
hashMap.put("endCollectTime", endYearDateTime);
List<EnergyStatisticalReport> lastDateReportList = this.energyStatisticalReportList(hashMap);
List<BigDecimal> thisDataList = new ArrayList<>();
List<BigDecimal> contrastDataList = new ArrayList<>();
List<BigDecimal> rateList = new ArrayList<>();
for (String time : timeIntervalList) {
BigDecimal nowExpend = new BigDecimal(0);
BigDecimal lastInitExpend = new BigDecimal(0);
BigDecimal rate = new BigDecimal(0);
for (EnergyStatisticalReport report : statisticalReportList) {
BigDecimal expend = report.getExpend();
if (time.equals(report.getBeginTime())){
nowExpend = nowExpend.add(expend);
}
}
for (EnergyStatisticalReport report : lastDateReportList) {
BigDecimal expend = report.getExpend();
if (time.equals(report.getBeginTime())){
lastInitExpend = lastInitExpend.add(expend);
}
}
thisDataList.add(nowExpend);
contrastDataList.add(lastInitExpend);
BigDecimal decimal = calculateYearOverYearGrowth(nowExpend, lastInitExpend, 2, RoundingMode.HALF_UP);
rateList.add(decimal);
}
result.put("time", timeIntervalList);
result.put("thisData", thisDataList);
result.put("contrastData", contrastDataList);
result.put("rate", rateList);
BigDecimal thisSum = thisDataList.stream().filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal contrastSum = contrastDataList.stream().filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
result.put("thisSum", thisSum);
result.put("contrastSum", contrastSum);
return result;
}
/**
*
* @param currentValue
* @param lastYearValue
* @param scale
* @param roundingMode
* @return 15.25 15.25%
* @throws IllegalArgumentException 0
*/
public BigDecimal calculateYearOverYearGrowth( BigDecimal currentValue, BigDecimal lastYearValue, int scale, RoundingMode roundingMode) {
// 验证参数
if (lastYearValue.compareTo(BigDecimal.ZERO) == 0) {
return new BigDecimal(0);
}
// 计算差值:本期 - 去年同期
BigDecimal difference = currentValue.subtract(lastYearValue);
// 计算比率:(差值 / 去年同期值)
BigDecimal ratio = difference.divide(lastYearValue, scale + 2, roundingMode);
// 转换为百分比:× 100
return ratio.multiply(new BigDecimal("100")).setScale(scale, roundingMode);
}
}

@ -165,6 +165,7 @@
ebli.monitor_code monitorCode,
ebmi.monitor_name monitorName,
ebmi.monitor_type monitorType,
ebmi.is_ammeter isAmmeter,
rk.collect_time collectTime,
rk.v_a vA,
rk.v_b vB,

Loading…
Cancel
Save