统计报表-概率统计:统一按照电动所逻辑,从储能电表METE中取,今日总数据-昨日总数据=今日充放电

This commit is contained in:
zq
2025-12-23 13:34:44 +08:00
parent 944adf3503
commit 21fe3af17c
2 changed files with 93 additions and 21 deletions

View File

@ -784,10 +784,10 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
// emsDevicesSetting.setUpdatedAt(DateUtils.getNowDate()); // emsDevicesSetting.setUpdatedAt(DateUtils.getNowDate());
// emsDevicesSettingMapper.updateEmsDevicesSetting(emsDevicesSetting); // emsDevicesSettingMapper.updateEmsDevicesSetting(emsDevicesSetting);
if (SiteEnum.FX.getCode().equals(siteId)) { // if (SiteEnum.FX.getCode().equals(siteId)) {
//更新每日充放电数据 // //更新每日充放电数据
dealFXXDailyChargeDate(siteId, deviceId, pcsData); // dealFXXDailyChargeDate(siteId, deviceId, pcsData);
} // }
} }
private void pcsBranchDataProcess(String siteId, String deviceId, String dataJson) { private void pcsBranchDataProcess(String siteId, String deviceId, String dataJson) {
@ -999,12 +999,15 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
redisCache.setCacheObject(RedisKeyConstants.AMMETER + siteId + "_" + deviceId, dataMete); redisCache.setCacheObject(RedisKeyConstants.AMMETER + siteId + "_" + deviceId, dataMete);
// 处理电表每日充放电数据
if (!deviceId.contains(SiteDevice.METEGF.name()) && !deviceId.contains(SiteDevice.METE0.name())) { if (!deviceId.contains(SiteDevice.METEGF.name()) && !deviceId.contains(SiteDevice.METE0.name())) {
// 处理储能电表-METE每日充放电数据
EmsAmmeterData yestData = dealDailyChargeDate(siteId, deviceId, dataMete);
// 处理储能电表-METE每日数据(尖、峰、平、谷差值)
if (SiteEnum.FX.getCode().equals(siteId)) { if (SiteEnum.FX.getCode().equals(siteId)) {
dealAmmeterDailyDate(siteId, dataMete, dataUpdateTime, lastAmmeterData); dealAmmeterDailyDate(siteId, dataMete, dataUpdateTime, lastAmmeterData);
} else if (SiteEnum.DDS.getCode().equals(siteId)) { } else if (SiteEnum.DDS.getCode().equals(siteId)) {
dealDDSDailyChargeDate(siteId, dataMete, deviceId); dealDailyEnergyData(siteId, dataMete, yestData);
} }
} }
} }
@ -1084,6 +1087,51 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
return emsDailyChargeData; return emsDailyChargeData;
} }
private void dealDailyEnergyData(String siteId, EmsAmmeterData currentData, EmsAmmeterData yestData) {
// 初始化数据-尖峰平谷
EmsDailyEnergyData energyData = initEnergyData(siteId);
// 计算尖峰平谷差值,更新表
calcEnergyDiffAndRevenue(siteId, energyData, currentData, yestData);
energyData.setCalcTime(DateUtils.getNowDate());
// 插入或更新电表每日差值数据表
emsDailyEnergyDataMapper.insertOrUpdateData(energyData);
}
private EmsAmmeterData dealDailyChargeDate(String siteId, String deviceId, EmsAmmeterData currentData) {
// 初始化今日充放电
BigDecimal dailyDisChargeDate = new BigDecimal(0);
BigDecimal dailyChargeDate = new BigDecimal(0);
BigDecimal nowTotalDisChargeDate = currentData.getCurrentReverseActiveTotal();
BigDecimal nowTotalChargeDate = currentData.getCurrentForwardActiveTotal();
// 初始化当日数据-总的
EmsDailyChargeData emsDailyChargeData = initDailyChargeData(siteId, deviceId, nowTotalChargeDate, nowTotalDisChargeDate);
// 获取redis存放昨日最晚数据
String yestDate = DateUtils.getYesterdayDate();
String yestDateRedisKey = RedisKeyConstants.AMMETER + siteId + "_" + deviceId + "_" + yestDate;
EmsAmmeterData yestData = redisCache.getCacheObject(yestDateRedisKey);
if (yestData == null) {
// redis没有这查电表总数据表取截止到昨日最新第一条数据
yestData = emsAmmeterDataMapper.getYestLatestDate(siteId, deviceId, yestDate);
// 数据存redis-有效期1天
redisCache.setCacheObject(yestDateRedisKey, yestData, Constants.DATE_VALID_TIME, TimeUnit.DAYS);
}
if (yestData != null) {
// 今日总数据-昨日总数据=今日充放电
BigDecimal yestTotalDisChargeDate = yestData.getCurrentReverseActiveTotal();
BigDecimal yestTotalChargeDate = yestData.getCurrentForwardActiveTotal();
dailyChargeDate = nowTotalChargeDate.subtract(yestTotalChargeDate);
dailyDisChargeDate = nowTotalDisChargeDate.subtract(yestTotalDisChargeDate);
emsDailyChargeData.setChargeData(dailyChargeDate);
emsDailyChargeData.setDischargeData(dailyDisChargeDate);
}
// 插入或更新每日充放电数据表
emsDailyChargeDataMapper.insertOrUpdateData(emsDailyChargeData);
return yestData;
}
private void calcEnergyDiffAndRevenue(String siteId, EmsDailyEnergyData energyData, EmsAmmeterData currentData, EmsAmmeterData yestData) { private void calcEnergyDiffAndRevenue(String siteId, EmsDailyEnergyData energyData, EmsAmmeterData currentData, EmsAmmeterData yestData) {
// 获取当月电价 // 获取当月电价

View File

@ -4,27 +4,51 @@ import com.xzzn.common.enums.CostType;
import com.xzzn.common.enums.SiteEnum; import com.xzzn.common.enums.SiteEnum;
import com.xzzn.common.utils.DateUtils; import com.xzzn.common.utils.DateUtils;
import com.xzzn.ems.domain.EmsAmmeterData; import com.xzzn.ems.domain.EmsAmmeterData;
import com.xzzn.ems.domain.EmsEnergyPriceConfig; import com.xzzn.ems.domain.vo.AmmeterRevenueStatisListVo;
import com.xzzn.ems.domain.vo.*; import com.xzzn.ems.domain.vo.AmmeterStatisListVo;
import com.xzzn.ems.mapper.*; import com.xzzn.ems.domain.vo.BatteryDataStatsListVo;
import com.xzzn.ems.domain.vo.ClusterStatisListVo;
import com.xzzn.ems.domain.vo.DateSearchRequest;
import com.xzzn.ems.domain.vo.ElectricDataInfoVo;
import com.xzzn.ems.domain.vo.EnergyPriceConfigVo;
import com.xzzn.ems.domain.vo.PCSCurveResponse;
import com.xzzn.ems.domain.vo.PcsStatisListVo;
import com.xzzn.ems.domain.vo.PowerStatisListVo;
import com.xzzn.ems.domain.vo.SiteMonitorDataVo;
import com.xzzn.ems.domain.vo.StackCurveResponse;
import com.xzzn.ems.domain.vo.StackStatisListVo;
import com.xzzn.ems.domain.vo.StatisAmmeterDateRequest;
import com.xzzn.ems.domain.vo.StatisClusterDateRequest;
import com.xzzn.ems.mapper.EmsAmmeterDataMapper;
import com.xzzn.ems.mapper.EmsBatteryClusterMapper;
import com.xzzn.ems.mapper.EmsBatteryDataDayMapper;
import com.xzzn.ems.mapper.EmsBatteryStackMapper;
import com.xzzn.ems.mapper.EmsDailyChargeDataMapper;
import com.xzzn.ems.mapper.EmsDailyEnergyDataMapper;
import com.xzzn.ems.mapper.EmsDevicesSettingMapper;
import com.xzzn.ems.mapper.EmsEnergyPriceConfigMapper;
import com.xzzn.ems.mapper.EmsPcsDataMapper;
import com.xzzn.ems.service.IEmsStatsReportService; import com.xzzn.ems.service.IEmsStatsReportService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.ArrayList;
import java.util.function.Function; import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
/** /**
* 统计报表数据Service业务层处理 * 统计报表数据Service业务层处理
* *
@ -88,13 +112,13 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
// 开始日期和结束日期同一天,展示 0-24 小时数据 // 开始日期和结束日期同一天,展示 0-24 小时数据
if (DateUtils.isSameDay(startDate, endDate)){ if (DateUtils.isSameDay(startDate, endDate)){
electricDataInfoVo.setUnit(""); electricDataInfoVo.setUnit("");
if ("021_DDS_01".equals(siteId)) { // if ("021_DDS_01".equals(siteId)) {
deviceId = "METE"; deviceId = "METE";
dataList = emsAmmeterDataMapper.getChargeDataByHour(siteId,deviceId,startDate); dataList = emsAmmeterDataMapper.getChargeDataByHour(siteId,deviceId,startDate);
} else if ("021_FXX_01".equals(siteId)) { // } else if ("021_FXX_01".equals(siteId)) {
endDate = DateUtils.addDays(endDate, 1); // endDate = DateUtils.addDays(endDate, 1);
dataList = emsPcsDataMapper.getPcsDataByHour(requestVo.getSiteId(), startDate, endDate); // dataList = emsPcsDataMapper.getPcsDataByHour(requestVo.getSiteId(), startDate, endDate);
} // }
} else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 1 } else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 1
&& DateUtils.differentDaysByMillisecond(endDate, startDate) < 30){ && DateUtils.differentDaysByMillisecond(endDate, startDate) < 30){
electricDataInfoVo.setUnit(""); electricDataInfoVo.setUnit("");