0918电价-站点的实时总收入和实时当日收入

This commit is contained in:
2025-10-12 19:47:55 +08:00
parent 3454359f01
commit 6ebeb48b62
12 changed files with 348 additions and 84 deletions

View File

@ -73,9 +73,11 @@ public class RedisKeyConstants
/** 现有的告警数据 */ /** 现有的告警数据 */
public static final String LATEST_ALARM_RECORD = "LATEST_ALARM_RECORD"; public static final String LATEST_ALARM_RECORD = "LATEST_ALARM_RECORD";
/** fx-电表电量差值起始数据 */
public static final String DIFF_CHARGE_START = "diff_charge_start_";
/** 预存电价时间配置 */ /** 预存电价时间配置 */
public static final String ENERGY_PRICE_TIME = "energy_price_time_"; public static final String ENERGY_PRICE_TIME = "energy_price_time_";
/** dds昨日累计总收益 */
public static final String DDS_TOTAL_REVENUE = "total_revenue_";
/** fx实时总收益和当日实时收益 */
public static final String FXX_REALTIME_REVENUE = "realtime_revenue_";
} }

View File

@ -30,6 +30,14 @@ public class EmsDailyEnergyData extends BaseEntity
@Excel(name = "数据日期:yyyy-MM-dd", width = 30, dateFormat = "yyyy-MM-dd") @Excel(name = "数据日期:yyyy-MM-dd", width = 30, dateFormat = "yyyy-MM-dd")
private Date dataDate; private Date dataDate;
/** 总收入 */
@Excel(name = "总收入")
private BigDecimal totalRevenue;
/** 当日实时收入 */
@Excel(name = "当日实时收入")
private BigDecimal dayRevenue;
/** 尖峰时段充电差值 */ /** 尖峰时段充电差值 */
@Excel(name = "尖峰时段充电差值") @Excel(name = "尖峰时段充电差值")
private BigDecimal peakChargeDiff; private BigDecimal peakChargeDiff;
@ -96,6 +104,26 @@ public class EmsDailyEnergyData extends BaseEntity
return dataDate; return dataDate;
} }
public void setTotalRevenue(BigDecimal totalRevenue)
{
this.totalRevenue = totalRevenue;
}
public BigDecimal getTotalRevenue()
{
return totalRevenue;
}
public void setDayRevenue(BigDecimal dayRevenue)
{
this.dayRevenue = dayRevenue;
}
public BigDecimal getDayRevenue()
{
return dayRevenue;
}
public void setPeakChargeDiff(BigDecimal peakChargeDiff) public void setPeakChargeDiff(BigDecimal peakChargeDiff)
{ {
this.peakChargeDiff = peakChargeDiff; this.peakChargeDiff = peakChargeDiff;
@ -192,6 +220,8 @@ public class EmsDailyEnergyData extends BaseEntity
.append("id", getId()) .append("id", getId())
.append("siteId", getSiteId()) .append("siteId", getSiteId())
.append("dataDate", getDataDate()) .append("dataDate", getDataDate())
.append("totalRevenue", getTotalRevenue())
.append("dayRevenue", getDayRevenue())
.append("peakChargeDiff", getPeakChargeDiff()) .append("peakChargeDiff", getPeakChargeDiff())
.append("peakDischargeDiff", getPeakDischargeDiff()) .append("peakDischargeDiff", getPeakDischargeDiff())
.append("highChargeDiff", getHighChargeDiff()) .append("highChargeDiff", getHighChargeDiff())

View File

@ -65,6 +65,32 @@ public class SiteMonitorHomeVo {
*/ */
private StrategyTempInfo strategyTempInfo; private StrategyTempInfo strategyTempInfo;
/**
* 总收入
*/
private BigDecimal totalRevenue;
/**
* 当日实时收入
*/
private BigDecimal dayRevenue;
public BigDecimal getTotalRevenue() {
return totalRevenue;
}
public void setTotalRevenue(BigDecimal totalRevenue) {
this.totalRevenue = totalRevenue;
}
public BigDecimal getDayRevenue() {
return dayRevenue;
}
public void setDayRevenue(BigDecimal dayRevenue) {
this.dayRevenue = dayRevenue;
}
public BigDecimal getDayChargedCap() { public BigDecimal getDayChargedCap() {
return dayChargedCap; return dayChargedCap;
} }

View File

@ -1,6 +1,9 @@
package com.xzzn.ems.mapper; package com.xzzn.ems.mapper;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map;
import com.xzzn.ems.domain.EmsDailyEnergyData; import com.xzzn.ems.domain.EmsDailyEnergyData;
import com.xzzn.ems.domain.vo.AmmeterStatisListVo; import com.xzzn.ems.domain.vo.AmmeterStatisListVo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -67,4 +70,8 @@ public interface EmsDailyEnergyDataMapper
public void insertOrUpdateData(EmsDailyEnergyData energyData); public void insertOrUpdateData(EmsDailyEnergyData energyData);
// 电表报表 // 电表报表
public List<AmmeterStatisListVo> getDataBySiteId(@Param("siteId")String siteId, @Param("startTime")String startTime, @Param("endTime")String endTime); public List<AmmeterStatisListVo> getDataBySiteId(@Param("siteId")String siteId, @Param("startTime")String startTime, @Param("endTime")String endTime);
// dds-获取今天之前最晚的总收入
public BigDecimal getLastTotalRevenue(String siteId);
// fx-获取实时总收益和当日实时收益
public Map<String, BigDecimal> getRealTimeRevenue(String siteId);
} }

View File

@ -73,4 +73,7 @@ public interface EmsEnergyPriceConfigMapper
public List<EnergyPriceTimeRange> getTimeRangeByDate(@Param("siteId")String siteId, public List<EnergyPriceTimeRange> getTimeRangeByDate(@Param("siteId")String siteId,
@Param("currentYear")int currentYear, @Param("currentYear")int currentYear,
@Param("currentMonth")int currentMonth); @Param("currentMonth")int currentMonth);
// 获取所有有效站点的电价配置
public List<EmsEnergyPriceConfig> getAllSitePriceConfig( @Param("currentYear")int currentYear,
@Param("currentMonth")int currentMonth);
} }

View File

@ -61,4 +61,6 @@ public interface IEmsEnergyPriceConfigService
// 初始化当月电价 // 初始化当月电价
public void initCurrentMonthPrice(); public void initCurrentMonthPrice();
// 获取指定站点的当月电价
public EnergyPriceVo getCurrentMonthPrice(String siteId);
} }

View File

@ -13,6 +13,7 @@ import com.xzzn.common.enums.*;
import com.xzzn.common.utils.DateUtils; import com.xzzn.common.utils.DateUtils;
import com.xzzn.common.utils.StringUtils; import com.xzzn.common.utils.StringUtils;
import com.xzzn.ems.domain.*; import com.xzzn.ems.domain.*;
import com.xzzn.ems.domain.vo.EnergyPriceVo;
import com.xzzn.ems.mapper.*; import com.xzzn.ems.mapper.*;
import com.xzzn.ems.service.IDDSDataProcessService; import com.xzzn.ems.service.IDDSDataProcessService;
import com.xzzn.ems.service.IEmsAlarmRecordsService; import com.xzzn.ems.service.IEmsAlarmRecordsService;
@ -25,6 +26,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
@ -949,19 +951,19 @@ public class DDSDataProcessServiceImpl extends AbstractBatteryDataProcessor impl
// 初始化当日数据-总的 // 初始化当日数据-总的
EmsDailyChargeData emsDailyChargeData = initDailyChargeData(deviceId,nowTotalChargeDate,nowTotalDisChargeDate); EmsDailyChargeData emsDailyChargeData = initDailyChargeData(deviceId,nowTotalChargeDate,nowTotalDisChargeDate);
// 获取redis存放昨日最晚数据 // 获取redis存放昨日最晚数据
String yestData = DateUtils.getYesterdayDate(); String yestDate = DateUtils.getYesterdayDate();
String yestDateRedisKey = RedisKeyConstants.AMMETER + SITE_ID + "_" + deviceId + "_" + yestData; String yestDateRedisKey = RedisKeyConstants.AMMETER + SITE_ID + "_" + deviceId + "_" + yestDate;
EmsAmmeterData yestDate = redisCache.getCacheObject(yestDateRedisKey); EmsAmmeterData yestData = redisCache.getCacheObject(yestDateRedisKey);
if (yestDate == null) { if (yestDate == null) {
// redis没有这查电表总数据表取截止到昨日最新第一条数据 // redis没有这查电表总数据表取截止到昨日最新第一条数据
yestDate = emsAmmeterDataMapper.getYestLatestDate(SITE_ID,deviceId,yestData); yestData = emsAmmeterDataMapper.getYestLatestDate(SITE_ID,deviceId,yestDate);
// 数据存redis-有效期1天 // 数据存redis-有效期1天
redisCache.setCacheObject(yestDateRedisKey, yestDate , Constants.DATE_VALID_TIME, TimeUnit.DAYS); redisCache.setCacheObject(yestDateRedisKey, yestDate , Constants.DATE_VALID_TIME, TimeUnit.DAYS);
} }
if (yestDate != null) { if (yestDate != null) {
// 今日总数据-昨日总数据=今日充放电 // 今日总数据-昨日总数据=今日充放电
BigDecimal yestTotalDisChargeDate = yestDate.getCurrentReverseActiveTotal(); BigDecimal yestTotalDisChargeDate = yestData.getCurrentReverseActiveTotal();
BigDecimal yestTotalChargeDate = yestDate.getCurrentForwardActiveTotal(); BigDecimal yestTotalChargeDate = yestData.getCurrentForwardActiveTotal();
dailyChargeDate = nowTotalChargeDate.subtract(yestTotalChargeDate); dailyChargeDate = nowTotalChargeDate.subtract(yestTotalChargeDate);
dailyDisChargeDate = nowTotalDisChargeDate.subtract(yestTotalDisChargeDate); dailyDisChargeDate = nowTotalDisChargeDate.subtract(yestTotalDisChargeDate);
@ -974,28 +976,88 @@ public class DDSDataProcessServiceImpl extends AbstractBatteryDataProcessor impl
// 初始化数据-尖峰平谷 // 初始化数据-尖峰平谷
EmsDailyEnergyData energyData = initEnergyData(); EmsDailyEnergyData energyData = initEnergyData();
// 计算尖峰平谷差值 // 计算尖峰平谷差值,更新表
energyData.setPeakChargeDiff(StringUtils.getBigDecimal(obj.get("DQZXYGJDN")) calcEnergyDiffAndRevenue(energyData,obj,yestData);
.subtract(yestDate == null ? new BigDecimal(0) : yestDate.getCurrentForwardActivePeak()));// 正向-尖
energyData.setHighChargeDiff(StringUtils.getBigDecimal(obj.get("DQZXYGFDN"))
.subtract(yestDate == null ? new BigDecimal(0) : yestDate.getCurrentForwardActiveHigh()));// 正向-峰
energyData.setFlatChargeDiff(StringUtils.getBigDecimal(obj.get("DQZXYGPDN"))
.subtract(yestDate == null ? new BigDecimal(0) : yestDate.getCurrentForwardActiveFlat()));// 正向-平
energyData.setValleyChargeDiff(StringUtils.getBigDecimal(obj.get("DQZXYGGDN"))
.subtract(yestDate == null ? new BigDecimal(0) : yestDate.getCurrentForwardActiveValley()));// 正向-谷
energyData.setPeakDischargeDiff(StringUtils.getBigDecimal(obj.get("DQFXYGJDN"))
.subtract(yestDate == null ? new BigDecimal(0) : yestDate.getCurrentReverseActivePeak()));// 反向-尖
energyData.setHighDischargeDiff(StringUtils.getBigDecimal(obj.get("DQFXYGFDN"))
.subtract(yestDate == null ? new BigDecimal(0) : yestDate.getCurrentReverseActiveHigh()));// 反向-峰
energyData.setFlatDischargeDiff(StringUtils.getBigDecimal(obj.get("DQFXYGPDN"))
.subtract(yestDate == null ? new BigDecimal(0) : yestDate.getCurrentReverseActiveFlat()));// 反向-平
energyData.setValleyDischargeDiff(StringUtils.getBigDecimal(obj.get("DQFXYGGDN"))
.subtract(yestDate == null ? new BigDecimal(0) : yestDate.getCurrentReverseActiveValley()));// 反向-谷
energyData.setCalcTime(DateUtils.getNowDate()); energyData.setCalcTime(DateUtils.getNowDate());
// 插入或更新电表每日差值数据表 // 插入或更新电表每日差值数据表
emsDailyEnergyDataMapper.insertOrUpdateData(energyData); emsDailyEnergyDataMapper.insertOrUpdateData(energyData);
} }
private void calcEnergyDiffAndRevenue(EmsDailyEnergyData energyData, Map<String, Object> obj, EmsAmmeterData yestData) {
// 获取当月电价
String key = RedisKeyConstants.ENERGY_PRICE_TIME + SITE_ID + "_" + LocalDate.now().getYear() + LocalDate.now().getMonthValue();
EnergyPriceVo priceVo = redisCache.getCacheObject(key);
// 计算尖峰平谷差值
// 正反向-尖
BigDecimal peakChargeDiff = StringUtils.getBigDecimal(obj.get("DQZXYGJDN"))
.subtract(yestData == null ? new BigDecimal(0) : yestData.getCurrentForwardActivePeak());
energyData.setPeakChargeDiff(peakChargeDiff);
BigDecimal peakDischargeDiff = StringUtils.getBigDecimal(obj.get("DQFXYGJDN"))
.subtract(yestData == null ? new BigDecimal(0) : yestData.getCurrentReverseActivePeak());
energyData.setPeakDischargeDiff(peakDischargeDiff);
// 正反向-峰
BigDecimal highChargeDiff = StringUtils.getBigDecimal(obj.get("DQZXYGFDN"))
.subtract(yestData == null ? new BigDecimal(0) : yestData.getCurrentForwardActiveHigh());
energyData.setHighChargeDiff(highChargeDiff);
BigDecimal highDischargeDiff = StringUtils.getBigDecimal(obj.get("DQFXYGFDN"))
.subtract(yestData == null ? new BigDecimal(0) : yestData.getCurrentReverseActiveHigh());
energyData.setHighDischargeDiff(highDischargeDiff);
// 正反向-平
BigDecimal flatChargeDiff = StringUtils.getBigDecimal(obj.get("DQZXYGPDN"))
.subtract(yestData == null ? new BigDecimal(0) : yestData.getCurrentForwardActiveFlat());
energyData.setFlatChargeDiff(flatChargeDiff);
BigDecimal flatDisChargeDiff = StringUtils.getBigDecimal(obj.get("DQFXYGPDN"))
.subtract(yestData == null ? new BigDecimal(0) : yestData.getCurrentReverseActiveFlat());
energyData.setFlatDischargeDiff(flatDisChargeDiff);
// 正反向-谷
BigDecimal valleyChargeDiff = StringUtils.getBigDecimal(obj.get("DQZXYGGDN"))
.subtract(yestData == null ? new BigDecimal(0) : yestData.getCurrentForwardActiveValley());
energyData.setValleyChargeDiff(valleyChargeDiff);
BigDecimal valleyDisChargeDiff = StringUtils.getBigDecimal(obj.get("DQFXYGGDN"))
.subtract(yestData == null ? new BigDecimal(0) : yestData.getCurrentReverseActiveValley());
energyData.setValleyDischargeDiff(valleyDisChargeDiff);
BigDecimal totalRevenue = getYestLastData(SITE_ID);
BigDecimal dayRevenue = BigDecimal.ZERO;
BigDecimal price = BigDecimal.ZERO;
// 计算当日收益,尖峰平谷收益累加,(放电量-充电量)*电价
if (priceVo != null) {
price = priceVo.getPeak() == null ? BigDecimal.ZERO : priceVo.getPeak();
BigDecimal peakRevenue = peakDischargeDiff.subtract(peakChargeDiff).multiply(price);
dayRevenue = dayRevenue.add(peakRevenue);
price = priceVo.getHigh() == null ? BigDecimal.ZERO : priceVo.getHigh();
BigDecimal highRevenue = highDischargeDiff.subtract(highChargeDiff).multiply(price);
dayRevenue = dayRevenue.add(highRevenue);
price = priceVo.getFlat() == null ? BigDecimal.ZERO : priceVo.getFlat();
BigDecimal flatRevenue = flatDisChargeDiff.subtract(flatChargeDiff).multiply(price);
dayRevenue = dayRevenue.add(flatRevenue);
price = priceVo.getValley() == null ? BigDecimal.ZERO : priceVo.getValley();
BigDecimal valleyRevenue = valleyDisChargeDiff.subtract(valleyChargeDiff).multiply(price);
dayRevenue = dayRevenue.add(valleyRevenue);
energyData.setDayRevenue(dayRevenue);
}
// 总收益 = 昨日总收益+今日实时收益
totalRevenue = totalRevenue.add(dayRevenue);
energyData.setTotalRevenue(totalRevenue);
}
private BigDecimal getYestLastData(String siteId) {
// dds存的是累计到昨日总收益
String redisKey = RedisKeyConstants.DDS_TOTAL_REVENUE + siteId;
BigDecimal yestLastTotalRevenue = redisCache.getCacheObject(redisKey);
if (yestLastTotalRevenue == null) {
yestLastTotalRevenue = emsDailyEnergyDataMapper.getLastTotalRevenue(siteId);
if (yestLastTotalRevenue == null) {
yestLastTotalRevenue = BigDecimal.ZERO;
}
redisCache.setCacheObject(redisKey, yestLastTotalRevenue);
}
return yestLastTotalRevenue;
}
private EmsDailyChargeData initDailyChargeData(String deviceId, BigDecimal nowTotalChargeDate, private EmsDailyChargeData initDailyChargeData(String deviceId, BigDecimal nowTotalChargeDate,
BigDecimal nowTotalDisChargeDate) { BigDecimal nowTotalDisChargeDate) {
EmsDailyChargeData emsDailyChargeData = new EmsDailyChargeData(); EmsDailyChargeData emsDailyChargeData = new EmsDailyChargeData();

View File

@ -127,7 +127,15 @@ public class EmsEnergyPriceConfigServiceImpl implements IEmsEnergyPriceConfigSer
priceConfig.setUpdateBy("system"); priceConfig.setUpdateBy("system");
emsEnergyPriceConfigMapper.insertOrUpdateEmsEnergyPriceConfig(priceConfig); emsEnergyPriceConfigMapper.insertOrUpdateEmsEnergyPriceConfig(priceConfig);
return batchInsetPriceTimeRange(priceVo,priceConfig.getId()); batchInsetPriceTimeRange(priceVo,priceConfig.getId());
// 判断是否当月电价,是则更新当月电价缓存
int currentMonth = LocalDate.now().getMonthValue();
if (currentMonth == Integer.parseInt(month)) {
initCurrentMonthPrice();
}
return 1;
} }
private int batchInsetPriceTimeRange(EnergyPriceVo priceVo, Long priceId) { private int batchInsetPriceTimeRange(EnergyPriceVo priceVo, Long priceId) {
@ -176,7 +184,14 @@ public class EmsEnergyPriceConfigServiceImpl implements IEmsEnergyPriceConfigSer
// 时间配置,全删,全插入 // 时间配置,全删,全插入
Long[] priceIds = {priceVo.getId()}; Long[] priceIds = {priceVo.getId()};
emsPriceTimeConfigMapper.deleteTimeRangeByPriceId(priceIds); emsPriceTimeConfigMapper.deleteTimeRangeByPriceId(priceIds);
return batchInsetPriceTimeRange(priceVo,priceConfig.getId()); batchInsetPriceTimeRange(priceVo,priceConfig.getId());
// 判断是否当月电价,是则更新当月电价缓存
int currentMonth = LocalDate.now().getMonthValue();
if (currentMonth == Integer.parseInt(priceVo.getMonth())) {
initCurrentMonthPrice();
}
return 1;
} }
/** /**
@ -191,7 +206,10 @@ public class EmsEnergyPriceConfigServiceImpl implements IEmsEnergyPriceConfigSer
// 先删时间配置 // 先删时间配置
emsPriceTimeConfigMapper.deleteTimeRangeByPriceId(ids); emsPriceTimeConfigMapper.deleteTimeRangeByPriceId(ids);
// 再删月电价 // 再删月电价
return emsEnergyPriceConfigMapper.deleteEmsEnergyPriceConfigByIds(ids); emsEnergyPriceConfigMapper.deleteEmsEnergyPriceConfigByIds(ids);
// 更新当月电价缓存
initCurrentMonthPrice();
return 1;
} }
/** /**
@ -207,7 +225,7 @@ public class EmsEnergyPriceConfigServiceImpl implements IEmsEnergyPriceConfigSer
} }
/** /**
* 初始化当月的电价 * 初始化当月的电价存redis
*/ */
@Override @Override
public void initCurrentMonthPrice() { public void initCurrentMonthPrice() {
@ -215,15 +233,34 @@ public class EmsEnergyPriceConfigServiceImpl implements IEmsEnergyPriceConfigSer
int currentMonth = LocalDate.now().getMonthValue(); int currentMonth = LocalDate.now().getMonthValue();
int currentYear = LocalDate.now().getYear(); int currentYear = LocalDate.now().getYear();
List<String> siteIds = emsSiteSettingMapper.getAllSiteId(); List<EmsEnergyPriceConfig> siteIdConfig = emsEnergyPriceConfigMapper.getAllSitePriceConfig(currentYear,currentMonth);
if (siteIds == null || siteIds.size() == 0) { if (siteIdConfig == null || siteIdConfig.size() == 0) {
return; return;
} }
for (String siteId : siteIds) { for (EmsEnergyPriceConfig priceConfig : siteIdConfig) {
EnergyPriceVo priceVo = new EnergyPriceVo();
BeanUtils.copyProperties(priceConfig,priceVo);
String siteId = priceConfig.getSiteId();
List<EnergyPriceTimeRange> timeRanges = emsEnergyPriceConfigMapper.getTimeRangeByDate(siteId,currentYear,currentMonth); List<EnergyPriceTimeRange> timeRanges = emsEnergyPriceConfigMapper.getTimeRangeByDate(siteId,currentYear,currentMonth);
priceVo.setRange(timeRanges);
String key = RedisKeyConstants.ENERGY_PRICE_TIME + siteId + "_" + currentYear + currentMonth; String key = RedisKeyConstants.ENERGY_PRICE_TIME + siteId + "_" + currentYear + currentMonth;
redisCache.setCacheObject(key,timeRanges, 31, TimeUnit.DAYS); redisCache.setCacheObject(key,priceVo, 31, TimeUnit.DAYS);
} }
} }
public EnergyPriceVo getCurrentMonthPrice(String siteId) {
EnergyPriceVo priceVo = new EnergyPriceVo();
// 获取当年和当月的电价
int currentMonth = LocalDate.now().getMonthValue();
int currentYear = LocalDate.now().getYear();
EmsEnergyPriceConfig priceConfig = emsEnergyPriceConfigMapper.getConfigListByYearAndMonth(siteId,String.valueOf(currentYear),String.valueOf(currentMonth));
if (priceConfig != null) {
BeanUtils.copyProperties(priceConfig,priceVo);
List<EnergyPriceTimeRange> timeRanges = emsPriceTimeConfigMapper.getTimeRangeByPriceId(priceConfig.getId());
priceVo.setRange(timeRanges);
}
return priceVo;
}
} }

View File

@ -14,8 +14,10 @@ import com.xzzn.common.utils.DateUtils;
import com.xzzn.common.utils.StringUtils; import com.xzzn.common.utils.StringUtils;
import com.xzzn.ems.domain.*; import com.xzzn.ems.domain.*;
import com.xzzn.ems.domain.vo.EnergyPriceTimeRange; import com.xzzn.ems.domain.vo.EnergyPriceTimeRange;
import com.xzzn.ems.domain.vo.EnergyPriceVo;
import com.xzzn.ems.mapper.*; import com.xzzn.ems.mapper.*;
import com.xzzn.ems.service.IEmsAlarmRecordsService; import com.xzzn.ems.service.IEmsAlarmRecordsService;
import com.xzzn.ems.service.IEmsEnergyPriceConfigService;
import com.xzzn.ems.service.IFXXDataProcessService; import com.xzzn.ems.service.IFXXDataProcessService;
import com.xzzn.ems.utils.AbstractBatteryDataProcessor; import com.xzzn.ems.utils.AbstractBatteryDataProcessor;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
@ -78,6 +80,8 @@ public class FXXDataProcessServiceImpl extends AbstractBatteryDataProcessor impl
private EmsDailyEnergyDataMapper emsDailyEnergyDataMapper; private EmsDailyEnergyDataMapper emsDailyEnergyDataMapper;
@Autowired @Autowired
private EmsEnergyPriceConfigMapper emsEnergyPriceConfigMapper; private EmsEnergyPriceConfigMapper emsEnergyPriceConfigMapper;
@Autowired
private IEmsEnergyPriceConfigService emsEnergyPriceConfigService;
// 构造方法(调用父类构造) // 构造方法(调用父类构造)
public FXXDataProcessServiceImpl(ObjectMapper objectMapper) { public FXXDataProcessServiceImpl(ObjectMapper objectMapper) {
@ -772,7 +776,7 @@ public class FXXDataProcessServiceImpl extends AbstractBatteryDataProcessor impl
redisCache.setCacheObject(RedisKeyConstants.AMMETER + SITE_ID + "_" +deviceId, dataLoad); redisCache.setCacheObject(RedisKeyConstants.AMMETER + SITE_ID + "_" +deviceId, dataLoad);
// 处理电表每日充放电数据 // 处理电表每日充放电数据
dealAmmeterDailyDate(obj, deviceId, dataUpdateTime, lastAmmeterData); dealAmmeterDailyDate(obj, dataUpdateTime, lastAmmeterData);
} }
private EmsAmmeterData getLastAmmeterData(String deviceId) { private EmsAmmeterData getLastAmmeterData(String deviceId) {
@ -791,16 +795,20 @@ public class FXXDataProcessServiceImpl extends AbstractBatteryDataProcessor impl
return lastData; return lastData;
} }
private void dealAmmeterDailyDate(Map<String, Object> obj, String deviceId, Date dataUpdateTime, EmsAmmeterData lastData) { private void dealAmmeterDailyDate(Map<String, Object> obj, Date dataUpdateTime, EmsAmmeterData lastData) {
// 先获取当月电价配置redis没有这查数据库都没有则返回 // 先获取当月电价配置redis没有这查数据库都没有则返回
String priceKey = RedisKeyConstants.ENERGY_PRICE_TIME + SITE_ID + "_" + LocalDate.now().getYear() + LocalDate.now().getMonthValue(); String priceKey = RedisKeyConstants.ENERGY_PRICE_TIME + SITE_ID + "_" + LocalDate.now().getYear() + LocalDate.now().getMonthValue();
List<EnergyPriceTimeRange> timeRanges = redisCache.getCacheObject(priceKey); EnergyPriceVo priceVo = redisCache.getCacheObject(priceKey);
if (timeRanges == null) { if (priceVo == null) {
timeRanges = emsEnergyPriceConfigMapper.getTimeRangeByDate(SITE_ID, LocalDate.now().getYear(),LocalDate.now().getMonthValue()); priceVo = emsEnergyPriceConfigService.getCurrentMonthPrice(SITE_ID);
if (timeRanges == null) { redisCache.setCacheObject(priceKey, priceVo, 31, TimeUnit.DAYS);
if (priceVo == null) {
return; return;
} }
redisCache.setCacheObject(priceKey,timeRanges, 31, TimeUnit.DAYS); }
List<EnergyPriceTimeRange> timeRanges = priceVo.getRange();
if (timeRanges == null) {
return;
} }
// 根据时间范围判断数据类型(尖峰平谷),无法确定数据类型则不处理 // 根据时间范围判断数据类型(尖峰平谷),无法确定数据类型则不处理
@ -808,7 +816,7 @@ public class FXXDataProcessServiceImpl extends AbstractBatteryDataProcessor impl
String startTime = ""; String startTime = "";
for (EnergyPriceTimeRange timeRange : timeRanges) { for (EnergyPriceTimeRange timeRange : timeRanges) {
startTime = timeRange.getStartTime(); startTime = timeRange.getStartTime();
if (isInPriceTimeRange(startTime,timeRange.getEndTime(),dataUpdateTime)) { if (isInPriceTimeRange(startTime, timeRange.getEndTime(), dataUpdateTime)) {
costType = timeRange.getCostType(); costType = timeRange.getCostType();
break; break;
} }
@ -821,19 +829,26 @@ public class FXXDataProcessServiceImpl extends AbstractBatteryDataProcessor impl
EmsDailyEnergyData energyData = initEnergyData(); EmsDailyEnergyData energyData = initEnergyData();
// 根据 costType计算本次与上次数据差值累加到对应的数据类型里面 // 根据 costType计算本次与上次数据差值累加到对应的数据类型里面
setDiffByCostType(costType,energyData,lastData,obj); setDiffByCostType(costType,energyData,lastData,obj,priceVo);
// 插入或更新电表每日差值数据表 // 插入或更新电表每日差值数据表
emsDailyEnergyDataMapper.insertOrUpdateData(energyData); emsDailyEnergyDataMapper.insertOrUpdateData(energyData);
} }
private void setDiffByCostType(String costType, EmsDailyEnergyData energyData, EmsAmmeterData lastData, Map<String, Object> obj) { private void setDiffByCostType(String costType, EmsDailyEnergyData energyData, EmsAmmeterData lastData,
Map<String, Object> obj, EnergyPriceVo priceVo) {
BigDecimal currentChargeData = StringUtils.getBigDecimal(obj.get("ZXYGDN")); BigDecimal currentChargeData = StringUtils.getBigDecimal(obj.get("ZXYGDN"));
BigDecimal currentDischargeData = StringUtils.getBigDecimal(obj.get("FXYGDN")); BigDecimal currentDischargeData = StringUtils.getBigDecimal(obj.get("FXYGDN"));
currentChargeData = currentChargeData != null ? currentChargeData : BigDecimal.ZERO; currentChargeData = currentChargeData != null ? currentChargeData : BigDecimal.ZERO;
currentDischargeData = currentDischargeData != null ? currentDischargeData : BigDecimal.ZERO; currentDischargeData = currentDischargeData != null ? currentDischargeData : BigDecimal.ZERO;
// 获取上次实时总收益+当日实时总收益,初始化电价
Map<String, BigDecimal> revenueMap = getLastData(SITE_ID);
BigDecimal totalRevenue = revenueMap.get("totalRevenue") == null ? BigDecimal.ZERO : revenueMap.get("totalRevenue");
BigDecimal dayRevenue = revenueMap.get("dayRevenue") == null ? BigDecimal.ZERO : revenueMap.get("dayRevenue");
BigDecimal price = BigDecimal.ZERO;
// 计算时段差值,按照数据类型累加 // 计算时段差值,按照数据类型累加
// 计算当日累加收益,尖峰平谷收益在当日原基础累加,(放电量-充电量)*电价
BigDecimal chargeDiffData = currentChargeData.subtract( BigDecimal chargeDiffData = currentChargeData.subtract(
lastData.getCurrentForwardActiveTotal() == null ? BigDecimal.ZERO : lastData.getCurrentForwardActiveTotal()); lastData.getCurrentForwardActiveTotal() == null ? BigDecimal.ZERO : lastData.getCurrentForwardActiveTotal());
BigDecimal disChargeDiffData = currentDischargeData.subtract( BigDecimal disChargeDiffData = currentDischargeData.subtract(
@ -841,40 +856,72 @@ public class FXXDataProcessServiceImpl extends AbstractBatteryDataProcessor impl
); );
switch (costType) { switch (costType) {
case "peak": case "peak":
BigDecimal peakCharge = energyData.getPeakChargeDiff(); // 增加电量
energyData.setPeakChargeDiff((peakCharge == null ? BigDecimal.ZERO : peakCharge) BigDecimal peakCharge = energyData.getPeakChargeDiff() == null ? BigDecimal.ZERO : energyData.getPeakChargeDiff();
.add(chargeDiffData)); energyData.setPeakChargeDiff(peakCharge.add(chargeDiffData));
BigDecimal peakDischarge = energyData.getPeakDischargeDiff(); BigDecimal peakDischarge = energyData.getPeakDischargeDiff() == null ? BigDecimal.ZERO : energyData.getPeakDischargeDiff();
energyData.setPeakDischargeDiff((peakDischarge == null ? BigDecimal.ZERO : peakDischarge) energyData.setPeakDischargeDiff(peakDischarge.add(disChargeDiffData));
.add(disChargeDiffData));
// 电价
price = priceVo.getPeak() == null ? BigDecimal.ZERO : priceVo.getPeak();
break; break;
case "high": case "high":
BigDecimal highCharge = energyData.getHighChargeDiff(); // 增加电量
energyData.setHighChargeDiff((highCharge == null ? BigDecimal.ZERO : highCharge) BigDecimal highCharge = energyData.getHighChargeDiff() == null ? BigDecimal.ZERO : energyData.getHighChargeDiff();
.add(chargeDiffData)); energyData.setHighChargeDiff(highCharge.add(chargeDiffData));
BigDecimal highDischarge = energyData.getHighDischargeDiff(); BigDecimal highDischarge = energyData.getHighDischargeDiff() == null ? BigDecimal.ZERO : energyData.getHighDischargeDiff();
energyData.setHighDischargeDiff((highDischarge == null ? BigDecimal.ZERO : highDischarge) energyData.setHighDischargeDiff(highDischarge.add(disChargeDiffData));
.add(disChargeDiffData));
// 电价
price = priceVo.getHigh() == null ? BigDecimal.ZERO : priceVo.getHigh();
break; break;
case "flat": case "flat":
BigDecimal flatCharge = energyData.getFlatChargeDiff(); // 增加电量
energyData.setFlatChargeDiff((flatCharge == null ? BigDecimal.ZERO : flatCharge) BigDecimal flatCharge = energyData.getFlatChargeDiff() == null ? BigDecimal.ZERO : energyData.getFlatChargeDiff();
.add(chargeDiffData)); energyData.setFlatChargeDiff(flatCharge.add(chargeDiffData));
BigDecimal flatDischarge = energyData.getFlatDischargeDiff(); BigDecimal flatDischarge = energyData.getFlatDischargeDiff() == null ? BigDecimal.ZERO : energyData.getFlatDischargeDiff();
energyData.setFlatDischargeDiff((flatDischarge == null ? BigDecimal.ZERO : flatDischarge) energyData.setFlatDischargeDiff(flatDischarge.add(disChargeDiffData));
.add(disChargeDiffData));
// 电价
price = priceVo.getFlat() == null ? BigDecimal.ZERO : priceVo.getFlat();
break; break;
case "valley": case "valley":
BigDecimal valleyCharge = energyData.getValleyChargeDiff(); // 增加电量
energyData.setValleyChargeDiff((valleyCharge == null ? BigDecimal.ZERO : valleyCharge) BigDecimal valleyCharge = energyData.getValleyChargeDiff() == null ? BigDecimal.ZERO : energyData.getValleyChargeDiff();
.add(chargeDiffData)); energyData.setValleyChargeDiff(valleyCharge.add(chargeDiffData));
BigDecimal valleyDischarge = energyData.getValleyDischargeDiff(); BigDecimal valleyDischarge = energyData.getValleyDischargeDiff() == null ? BigDecimal.ZERO : energyData.getValleyDischargeDiff();
energyData.setValleyDischargeDiff((valleyDischarge == null ? BigDecimal.ZERO : valleyDischarge) energyData.setValleyDischargeDiff(valleyDischarge.add(disChargeDiffData));
.add(disChargeDiffData));
// 电价
price = priceVo.getValley() == null ? BigDecimal.ZERO : priceVo.getValley();
break; break;
default: default:
return; return;
} }
// 计算本次累加收益
BigDecimal addRevenue = disChargeDiffData.subtract(chargeDiffData).multiply(price);
dayRevenue = dayRevenue.add(addRevenue);
energyData.setDayRevenue(dayRevenue);
// 总收益 = 上次实时总收益+今日实时增加的收益
totalRevenue = totalRevenue.add(addRevenue);
energyData.setTotalRevenue(totalRevenue);
}
private Map<String, BigDecimal> getLastData(String siteId) {
// dds存的是累计到昨日总收益
String redisKey = RedisKeyConstants.FXX_REALTIME_REVENUE + siteId;
Map<String, BigDecimal> realTimeRevenue = redisCache.getCacheObject(redisKey);
if (realTimeRevenue == null) {
realTimeRevenue = emsDailyEnergyDataMapper.getRealTimeRevenue(siteId);
if (realTimeRevenue == null) {
realTimeRevenue = new HashMap<>();
realTimeRevenue.put("totalRevenue", BigDecimal.ZERO);
realTimeRevenue.put("dayRevenue", BigDecimal.ZERO);
}
redisCache.setCacheObject(redisKey, realTimeRevenue);
}
return realTimeRevenue;
} }
private boolean isInPriceTimeRange(String startTime, String endTime, Date dataUpdateTime) { private boolean isInPriceTimeRange(String startTime, String endTime, Date dataUpdateTime) {
@ -907,6 +954,8 @@ public class FXXDataProcessServiceImpl extends AbstractBatteryDataProcessor impl
energyData = new EmsDailyEnergyData(); energyData = new EmsDailyEnergyData();
energyData.setSiteId(SITE_ID); energyData.setSiteId(SITE_ID);
energyData.setDataDate(DateUtils.getNowDate()); energyData.setDataDate(DateUtils.getNowDate());
energyData.setTotalRevenue(BigDecimal.ZERO);
energyData.setDayRevenue(BigDecimal.ZERO);
energyData.setCreateBy("system"); energyData.setCreateBy("system");
energyData.setCreateTime(DateUtils.getNowDate()); energyData.setCreateTime(DateUtils.getNowDate());
} }

View File

@ -37,18 +37,6 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
private static final String CLUSTER_DATA_SOC = "SOC"; private static final String CLUSTER_DATA_SOC = "SOC";
private static Map<String, BigDecimal> storageFactor = new HashMap<>();
static {
storageFactor.put("021_DDS_01", new BigDecimal("0.1"));
storageFactor.put("default", BigDecimal.ONE); // 默认1
}
private static Map<String, BigDecimal> pvFactor = new HashMap<>();
static {
pvFactor.put("021_DDS_01", new BigDecimal("-0.001"));
pvFactor.put("default", BigDecimal.ONE); // Convert to Basic Latin
}
// 初始化List存储指定的电表deviceId // 初始化List存储指定的电表deviceId
List<String> ammeterDeviceIds = Arrays.asList( List<String> ammeterDeviceIds = Arrays.asList(
"LOAD", "METE", "METEGF" "LOAD", "METE", "METEGF"
@ -62,8 +50,6 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
@Autowired @Autowired
private EmsBatteryClusterMapper emsBatteryClusterMapper; private EmsBatteryClusterMapper emsBatteryClusterMapper;
@Autowired @Autowired
private EmsCoolingDataMapper emsCoolingDataMapper;
@Autowired
private EmsAmmeterDataMapper emsAmmeterDataMapper; private EmsAmmeterDataMapper emsAmmeterDataMapper;
@Autowired @Autowired
private EmsDevicesSettingMapper emsDevicesSettingMapper; private EmsDevicesSettingMapper emsDevicesSettingMapper;
@ -76,6 +62,8 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
private EmsStrategyTempMapper emsStrategyTempMapper; private EmsStrategyTempMapper emsStrategyTempMapper;
@Autowired @Autowired
private EmsDailyChargeDataMapper emsDailyChargeDataMapper; private EmsDailyChargeDataMapper emsDailyChargeDataMapper;
@Autowired
private EmsDailyEnergyDataMapper emsDailyEnergyDataMapper;
@Override @Override
public SiteMonitorHomeVo getSiteMonitorDataVo(String siteId) { public SiteMonitorHomeVo getSiteMonitorDataVo(String siteId) {
@ -90,9 +78,14 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
siteMonitorHomeVo.setTotalDischargedCap(dataMap.get("totalDischargedCap")); siteMonitorHomeVo.setTotalDischargedCap(dataMap.get("totalDischargedCap"));
//siteMonitorHomeVo.setGridNrtPower(dataMap.get("gridNrtPower")); //siteMonitorHomeVo.setGridNrtPower(dataMap.get("gridNrtPower"));
} }
// 总收入+当日实时收入
setRevenueInfo(siteMonitorHomeVo,siteId);
// 实时告警数据 名称+状态+告警内容 // 实时告警数据 名称+状态+告警内容
List<SiteMonitorHomeAlarmVo> siteMonitorHomeAlarmVo = emsAlarmRecordsMapper.getAlarmRecordsBySiteId(siteId); List<SiteMonitorHomeAlarmVo> siteMonitorHomeAlarmVo = emsAlarmRecordsMapper.getAlarmRecordsBySiteId(siteId);
siteMonitorHomeVo.setSiteMonitorHomeAlarmVo(siteMonitorHomeAlarmVo); siteMonitorHomeVo.setSiteMonitorHomeAlarmVo(siteMonitorHomeAlarmVo);
// 策略运行-主策略模板数据 // 策略运行-主策略模板数据
List<StrategyRunningVo> runningVo = emsStrategyRunningMapper.getRunningList(siteId); List<StrategyRunningVo> runningVo = emsStrategyRunningMapper.getRunningList(siteId);
if (runningVo != null && runningVo.size() > 0) { if (runningVo != null && runningVo.size() > 0) {
@ -103,6 +96,7 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
siteTempInfo.setSiteMonitorDataVo(tempList); siteTempInfo.setSiteMonitorDataVo(tempList);
siteMonitorHomeVo.setStrategyTempInfo(siteTempInfo); siteMonitorHomeVo.setStrategyTempInfo(siteTempInfo);
} }
// 能量数据 // 能量数据
LocalDate sevenDaysAgo = LocalDate.now().minusDays(6); LocalDate sevenDaysAgo = LocalDate.now().minusDays(6);
Date startDate = DateUtils.toDate(sevenDaysAgo); Date startDate = DateUtils.toDate(sevenDaysAgo);
@ -122,12 +116,25 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
BigDecimal energyStorageAvailElec = siteMonitorHomeVo.getTotalDischargedCap().subtract(siteMonitorHomeVo.getTotalChargedCap()); BigDecimal energyStorageAvailElec = siteMonitorHomeVo.getTotalDischargedCap().subtract(siteMonitorHomeVo.getTotalChargedCap());
siteMonitorHomeVo.setEnergyStorageAvailElec(energyStorageAvailElec); siteMonitorHomeVo.setEnergyStorageAvailElec(energyStorageAvailElec);
} }
siteMonitorHomeVo.setSiteMonitorDataVo(siteMonitorDataVoList); siteMonitorHomeVo.setSiteMonitorDataVo(siteMonitorDataVoList);
} }
return siteMonitorHomeVo; return siteMonitorHomeVo;
} }
private void setRevenueInfo(SiteMonitorHomeVo siteMonitorHomeVo, String siteId) {
BigDecimal totalRevenue = BigDecimal.ZERO;
BigDecimal dayRevenue = BigDecimal.ZERO;
Map<String,BigDecimal> realTimeRevenue = emsDailyEnergyDataMapper.getRealTimeRevenue(siteId);
if (realTimeRevenue != null) {
totalRevenue = realTimeRevenue.get("totalRevenue") == null ? BigDecimal.ZERO : realTimeRevenue.get("totalRevenue");
dayRevenue = realTimeRevenue.get("dayRevenue") == null ? BigDecimal.ZERO : realTimeRevenue.get("dayRevenue");
}
siteMonitorHomeVo.setTotalRevenue(totalRevenue);
siteMonitorHomeVo.setDayRevenue(dayRevenue);
}
// 获取单站监控实时运行头部数据 // 获取单站监控实时运行头部数据
@Override @Override
public SiteMonitorRunningHeadInfoVo getSiteRunningHeadInfo(String siteId) { public SiteMonitorRunningHeadInfoVo getSiteRunningHeadInfo(String siteId) {

View File

@ -8,6 +8,8 @@
<result property="id" column="id" /> <result property="id" column="id" />
<result property="siteId" column="site_id" /> <result property="siteId" column="site_id" />
<result property="dataDate" column="data_date" /> <result property="dataDate" column="data_date" />
<result property="totalRevenue" column="total_revenue" />
<result property="dayRevenue" column="day_revenue" />
<result property="peakChargeDiff" column="peak_charge_diff" /> <result property="peakChargeDiff" column="peak_charge_diff" />
<result property="peakDischargeDiff" column="peak_discharge_diff" /> <result property="peakDischargeDiff" column="peak_discharge_diff" />
<result property="highChargeDiff" column="high_charge_diff" /> <result property="highChargeDiff" column="high_charge_diff" />
@ -25,7 +27,7 @@
</resultMap> </resultMap>
<sql id="selectEmsDailyEnergyDataVo"> <sql id="selectEmsDailyEnergyDataVo">
select id, site_id, data_date, peak_charge_diff, peak_discharge_diff, high_charge_diff, high_discharge_diff, flat_charge_diff, flat_discharge_diff, valley_charge_diff, valley_discharge_diff, calc_time, create_by, create_time, update_by, update_time, remark from ems_daily_energy_data select id, site_id, data_date, total_revenue, day_revenue, peak_charge_diff, peak_discharge_diff, high_charge_diff, high_discharge_diff, flat_charge_diff, flat_discharge_diff, valley_charge_diff, valley_discharge_diff, calc_time, create_by, create_time, update_by, update_time, remark from ems_daily_energy_data
</sql> </sql>
<select id="selectEmsDailyEnergyDataList" parameterType="EmsDailyEnergyData" resultMap="EmsDailyEnergyDataResult"> <select id="selectEmsDailyEnergyDataList" parameterType="EmsDailyEnergyData" resultMap="EmsDailyEnergyDataResult">
@ -33,6 +35,8 @@
<where> <where>
<if test="siteId != null and siteId != ''"> and site_id = #{siteId}</if> <if test="siteId != null and siteId != ''"> and site_id = #{siteId}</if>
<if test="dataDate != null "> and data_date = #{dataDate}</if> <if test="dataDate != null "> and data_date = #{dataDate}</if>
<if test="totalRevenue != null "> and total_revenue = #{totalRevenue}</if>
<if test="dayRevenue != null "> and day_revenue = #{dayRevenue}</if>
<if test="peakChargeDiff != null "> and peak_charge_diff = #{peakChargeDiff}</if> <if test="peakChargeDiff != null "> and peak_charge_diff = #{peakChargeDiff}</if>
<if test="peakDischargeDiff != null "> and peak_discharge_diff = #{peakDischargeDiff}</if> <if test="peakDischargeDiff != null "> and peak_discharge_diff = #{peakDischargeDiff}</if>
<if test="highChargeDiff != null "> and high_charge_diff = #{highChargeDiff}</if> <if test="highChargeDiff != null "> and high_charge_diff = #{highChargeDiff}</if>
@ -55,6 +59,8 @@
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">
<if test="siteId != null">site_id,</if> <if test="siteId != null">site_id,</if>
<if test="dataDate != null">data_date,</if> <if test="dataDate != null">data_date,</if>
<if test="totalRevenue != null">total_revenue,</if>
<if test="dayRevenue != null">day_revenue,</if>
<if test="peakChargeDiff != null">peak_charge_diff,</if> <if test="peakChargeDiff != null">peak_charge_diff,</if>
<if test="peakDischargeDiff != null">peak_discharge_diff,</if> <if test="peakDischargeDiff != null">peak_discharge_diff,</if>
<if test="highChargeDiff != null">high_charge_diff,</if> <if test="highChargeDiff != null">high_charge_diff,</if>
@ -73,6 +79,8 @@
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="siteId != null">#{siteId},</if> <if test="siteId != null">#{siteId},</if>
<if test="dataDate != null">#{dataDate},</if> <if test="dataDate != null">#{dataDate},</if>
<if test="totalRevenue != null">#{totalRevenue},</if>
<if test="dayRevenue != null">#{dayRevenue},</if>
<if test="peakChargeDiff != null">#{peakChargeDiff},</if> <if test="peakChargeDiff != null">#{peakChargeDiff},</if>
<if test="peakDischargeDiff != null">#{peakDischargeDiff},</if> <if test="peakDischargeDiff != null">#{peakDischargeDiff},</if>
<if test="highChargeDiff != null">#{highChargeDiff},</if> <if test="highChargeDiff != null">#{highChargeDiff},</if>
@ -95,6 +103,8 @@
<trim prefix="SET" suffixOverrides=","> <trim prefix="SET" suffixOverrides=",">
<if test="siteId != null">site_id = #{siteId},</if> <if test="siteId != null">site_id = #{siteId},</if>
<if test="dataDate != null">data_date = #{dataDate},</if> <if test="dataDate != null">data_date = #{dataDate},</if>
<if test="totalRevenue != null">total_revenue = #{totalRevenue},</if>
<if test="dayRevenue != null">day_revenue = #{dayRevenue},</if>
<if test="peakChargeDiff != null">peak_charge_diff = #{peakChargeDiff},</if> <if test="peakChargeDiff != null">peak_charge_diff = #{peakChargeDiff},</if>
<if test="peakDischargeDiff != null">peak_discharge_diff = #{peakDischargeDiff},</if> <if test="peakDischargeDiff != null">peak_discharge_diff = #{peakDischargeDiff},</if>
<if test="highChargeDiff != null">high_charge_diff = #{highChargeDiff},</if> <if test="highChargeDiff != null">high_charge_diff = #{highChargeDiff},</if>
@ -134,6 +144,8 @@
useGeneratedKeys="true" keyProperty="id"> useGeneratedKeys="true" keyProperty="id">
INSERT INTO ems_daily_energy_data ( INSERT INTO ems_daily_energy_data (
id, site_id, data_date, id, site_id, data_date,
<if test="totalRevenue != null">total_revenue,</if>
<if test="dayRevenue != null">day_revenue,</if>
<if test="peakChargeDiff != null">peak_charge_diff,</if> <if test="peakChargeDiff != null">peak_charge_diff,</if>
<if test="peakDischargeDiff != null">peak_discharge_diff,</if> <if test="peakDischargeDiff != null">peak_discharge_diff,</if>
<if test="highChargeDiff != null">high_charge_diff,</if> <if test="highChargeDiff != null">high_charge_diff,</if>
@ -152,6 +164,8 @@
#{id}, #{id},
#{siteId}, #{siteId},
#{dataDate}, #{dataDate},
<if test="totalRevenue != null">#{totalRevenue},</if>
<if test="dayRevenue != null">#{dayRevenue},</if>
<if test="peakChargeDiff != null">#{peakChargeDiff},</if> <if test="peakChargeDiff != null">#{peakChargeDiff},</if>
<if test="peakDischargeDiff != null">#{peakDischargeDiff},</if> <if test="peakDischargeDiff != null">#{peakDischargeDiff},</if>
<if test="highChargeDiff != null">#{highChargeDiff},</if> <if test="highChargeDiff != null">#{highChargeDiff},</if>
@ -167,6 +181,8 @@
NOW(), NOW(),
#{remark} #{remark}
) ON DUPLICATE KEY UPDATE ) ON DUPLICATE KEY UPDATE
<if test="totalRevenue != null">total_revenue = #{totalRevenue},</if>
<if test="dayRevenue != null">day_revenue = #{dayRevenue},</if>
<if test="peakChargeDiff != null">peak_charge_diff = #{peakChargeDiff},</if> <if test="peakChargeDiff != null">peak_charge_diff = #{peakChargeDiff},</if>
<if test="peakDischargeDiff != null">peak_discharge_diff = #{peakDischargeDiff},</if> <if test="peakDischargeDiff != null">peak_discharge_diff = #{peakDischargeDiff},</if>
<if test="highChargeDiff != null">high_charge_diff = #{highChargeDiff},</if> <if test="highChargeDiff != null">high_charge_diff = #{highChargeDiff},</if>
@ -198,7 +214,22 @@
and t.data_date &gt;= #{startTime} and t.data_date &gt;= #{startTime}
</if> </if>
<if test="endTime != null"> <if test="endTime != null">
and t.data_date &gt;= #{endTime} and t.data_date &lt;= #{endTime}
</if> </if>
</select> </select>
<select id="getLastTotalRevenue" resultType="java.math.BigDecimal">
select t.total_revenue
from ems_daily_energy_data t
where t.site_id = #{siteId}
and t.data_date &lt; CURDATE()
order by t.data_date desc limit 1
</select>
<select id="getRealTimeRevenue" resultType="java.util.Map">
select t.total_revenue as totalRevenue, t.day_revenue as dayRevenue
from ems_daily_energy_data t
where t.site_id = #{siteId}
order by t.data_date desc limit 1
</select>
</mapper> </mapper>

View File

@ -169,4 +169,12 @@
and t.`year` = #{currentYear} and t.`year` = #{currentYear}
and t.`month` = #{currentMonth} and t.`month` = #{currentMonth}
</select> </select>
<select id="getAllSitePriceConfig" resultMap="EmsEnergyPriceConfigResult">
select t.*
from ems_energy_price_config t
LEFT JOIN ems_site_setting t2 on t.site_id = t2.site_id
where t.`year` = #{currentYear}
and t.`month` = #{currentMonth}
</select>
</mapper> </mapper>