diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/DeviceDataProcessServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/DeviceDataProcessServiceImpl.java index 95e6ab3..5811a01 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/DeviceDataProcessServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/DeviceDataProcessServiceImpl.java @@ -784,10 +784,10 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i // emsDevicesSetting.setUpdatedAt(DateUtils.getNowDate()); // emsDevicesSettingMapper.updateEmsDevicesSetting(emsDevicesSetting); - if (SiteEnum.FX.getCode().equals(siteId)) { - //更新每日充放电数据 - dealFXXDailyChargeDate(siteId, deviceId, pcsData); - } +// if (SiteEnum.FX.getCode().equals(siteId)) { +// //更新每日充放电数据 +// dealFXXDailyChargeDate(siteId, deviceId, pcsData); +// } } 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); - // 处理电表每日充放电数据 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)) { dealAmmeterDailyDate(siteId, dataMete, dataUpdateTime, lastAmmeterData); } 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; } + 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) { // 获取当月电价 diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsStatsReportServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsStatsReportServiceImpl.java index 3393ada..0b6b5f3 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsStatsReportServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsStatsReportServiceImpl.java @@ -4,27 +4,51 @@ import com.xzzn.common.enums.CostType; import com.xzzn.common.enums.SiteEnum; import com.xzzn.common.utils.DateUtils; import com.xzzn.ems.domain.EmsAmmeterData; -import com.xzzn.ems.domain.EmsEnergyPriceConfig; -import com.xzzn.ems.domain.vo.*; -import com.xzzn.ems.mapper.*; +import com.xzzn.ems.domain.vo.AmmeterRevenueStatisListVo; +import com.xzzn.ems.domain.vo.AmmeterStatisListVo; +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 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.RoundingMode; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; -import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; -import java.util.*; -import java.util.function.Function; +import java.util.ArrayList; +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 org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + /** * 统计报表数据Service业务层处理 * @@ -88,13 +112,13 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService // 开始日期和结束日期同一天,展示 0-24 小时数据 if (DateUtils.isSameDay(startDate, endDate)){ electricDataInfoVo.setUnit("时"); - if ("021_DDS_01".equals(siteId)) { +// if ("021_DDS_01".equals(siteId)) { deviceId = "METE"; dataList = emsAmmeterDataMapper.getChargeDataByHour(siteId,deviceId,startDate); - } else if ("021_FXX_01".equals(siteId)) { - endDate = DateUtils.addDays(endDate, 1); - dataList = emsPcsDataMapper.getPcsDataByHour(requestVo.getSiteId(), startDate, endDate); - } +// } else if ("021_FXX_01".equals(siteId)) { +// endDate = DateUtils.addDays(endDate, 1); +// dataList = emsPcsDataMapper.getPcsDataByHour(requestVo.getSiteId(), startDate, endDate); +// } } else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 1 && DateUtils.differentDaysByMillisecond(endDate, startDate) < 30){ electricDataInfoVo.setUnit("日");