This commit is contained in:
2026-03-18 10:06:42 +08:00
parent 5ab2cb8f90
commit e4cfd15cb4
25 changed files with 2948 additions and 891 deletions

View File

@ -8,6 +8,7 @@ import com.xzzn.common.enums.BusinessType;
import com.xzzn.ems.domain.EmsPointConfig; import com.xzzn.ems.domain.EmsPointConfig;
import com.xzzn.ems.domain.vo.ImportPointTemplateRequest; import com.xzzn.ems.domain.vo.ImportPointTemplateRequest;
import com.xzzn.ems.domain.vo.PointConfigCurveRequest; import com.xzzn.ems.domain.vo.PointConfigCurveRequest;
import com.xzzn.ems.domain.vo.PointConfigGenerateRecentRequest;
import com.xzzn.ems.domain.vo.PointConfigLatestValueRequest; import com.xzzn.ems.domain.vo.PointConfigLatestValueRequest;
import com.xzzn.ems.service.IEmsPointConfigService; import com.xzzn.ems.service.IEmsPointConfigService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -93,4 +94,10 @@ public class EmsPointConfigController extends BaseController {
public AjaxResult curve(@RequestBody PointConfigCurveRequest request) { public AjaxResult curve(@RequestBody PointConfigCurveRequest request) {
return success(pointConfigService.getCurveData(request)); return success(pointConfigService.getCurveData(request));
} }
@Log(title = "点位配置", businessType = BusinessType.INSERT)
@PostMapping("/generateRecent7Days")
public AjaxResult generateRecent7Days(@Valid @RequestBody PointConfigGenerateRecentRequest request) {
return success(pointConfigService.generateRecent7DaysData(request));
}
} }

View File

@ -52,6 +52,15 @@ public class EmsSiteMonitorController extends BaseController{
return success(iSingleSiteService.getSiteMonitorDataVo(siteId)); return success(iSingleSiteService.getSiteMonitorDataVo(siteId));
} }
/**
* 获取单站首页总累计运行数据(基于日表)
*/
@GetMapping("/homeTotalView")
public AjaxResult getSingleSiteHomeTotalView(@RequestParam String siteId)
{
return success(iSingleSiteService.getSiteMonitorTotalDataVo(siteId));
}
/** /**
* 单站监控-设备监控-实时运行头部数据 * 单站监控-设备监控-实时运行头部数据
*/ */

View File

@ -134,6 +134,17 @@ public class EmsStatisticalReportController extends BaseController
return getDataTable(dataList); return getDataTable(dataList);
} }
/**
* 统计报表-电表报表(直接基于 ems_daily_energy_data
*/
@GetMapping("/getAmmeterDataFromDaily")
public TableDataInfo getAmmeterDataFromDaily(StatisAmmeterDateRequest requestVo)
{
startPage();
List<AmmeterStatisListVo> dataList = ieEmsStatsReportService.getAmmeterDataResult(requestVo);
return getDataTable(dataList);
}
/** /**
* 导出电表报表 * 导出电表报表
*/ */
@ -145,6 +156,17 @@ public class EmsStatisticalReportController extends BaseController
ieEmsStatsReportService.exportAmmeterData(response, requestVo); ieEmsStatsReportService.exportAmmeterData(response, requestVo);
} }
/**
* 导出电表报表(直接基于 ems_daily_energy_data
*/
@PreAuthorize("@ss.hasPermi('system:ammeterData:export')")
@Log(title = "电表报表", businessType = BusinessType.EXPORT)
@PostMapping("/exportAmmeterDataFromDaily")
public void exportAmmeterDataFromDaily(HttpServletResponse response, StatisAmmeterDateRequest requestVo)
{
ieEmsStatsReportService.exportAmmeterData(response, requestVo);
}
/** /**
* 概率统计-电表收益报表 * 概率统计-电表收益报表
*/ */

View File

@ -25,10 +25,6 @@ public class EmsDailyChargeData extends BaseEntity
@Excel(name = "站点id") @Excel(name = "站点id")
private String siteId; private String siteId;
/** 设备唯一标识符 */
@Excel(name = "设备唯一标识符")
private String deviceId;
/** 数据日期:yyyy-MM-dd */ /** 数据日期:yyyy-MM-dd */
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "数据日期:yyyy-MM-dd", width = 30, dateFormat = "yyyy-MM-dd") @Excel(name = "数据日期:yyyy-MM-dd", width = 30, dateFormat = "yyyy-MM-dd")
@ -50,6 +46,14 @@ public class EmsDailyChargeData extends BaseEntity
@Excel(name = "当日放电量") @Excel(name = "当日放电量")
private BigDecimal dischargeData; private BigDecimal dischargeData;
/** 总收入 */
@Excel(name = "总收入")
private BigDecimal totalRevenue;
/** 当日实时收入 */
@Excel(name = "当日实时收入")
private BigDecimal dayRevenue;
public void setId(Long id) public void setId(Long id)
{ {
this.id = id; this.id = id;
@ -70,16 +74,6 @@ public class EmsDailyChargeData extends BaseEntity
return siteId; return siteId;
} }
public void setDeviceId(String deviceId)
{
this.deviceId = deviceId;
}
public String getDeviceId()
{
return deviceId;
}
public void setDateTime(Date dateTime) public void setDateTime(Date dateTime)
{ {
this.dateTime = dateTime; this.dateTime = dateTime;
@ -130,17 +124,38 @@ public class EmsDailyChargeData extends BaseEntity
return dischargeData; return dischargeData;
} }
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;
}
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId()) .append("id", getId())
.append("siteId", getSiteId()) .append("siteId", getSiteId())
.append("deviceId", getDeviceId())
.append("dateTime", getDateTime()) .append("dateTime", getDateTime())
.append("totalChargeData", getTotalChargeData()) .append("totalChargeData", getTotalChargeData())
.append("totalDischargeData", getTotalDischargeData()) .append("totalDischargeData", getTotalDischargeData())
.append("chargeData", getChargeData()) .append("chargeData", getChargeData())
.append("dischargeData", getDischargeData()) .append("dischargeData", getDischargeData())
.append("totalRevenue", getTotalRevenue())
.append("dayRevenue", getDayRevenue())
.append("createBy", getCreateBy()) .append("createBy", getCreateBy())
.append("createTime", getCreateTime()) .append("createTime", getCreateTime())
.append("updateBy", getUpdateBy()) .append("updateBy", getUpdateBy())

View File

@ -30,13 +30,9 @@ 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;
/** 总收入 */ /** 数据小时(0-23) */
@Excel(name = "总收入") @Excel(name = "数据小时(0-23)")
private BigDecimal totalRevenue; private Integer dataHour;
/** 当日实时收入 */
@Excel(name = "当日实时收入")
private BigDecimal dayRevenue;
/** 尖峰时段充电差值 */ /** 尖峰时段充电差值 */
@Excel(name = "尖峰时段充电差值") @Excel(name = "尖峰时段充电差值")
@ -71,6 +67,7 @@ public class EmsDailyEnergyData extends BaseEntity
private BigDecimal valleyDischargeDiff; private BigDecimal valleyDischargeDiff;
/** 差值计算时间如2025-10-10 23:59:00 */ /** 差值计算时间如2025-10-10 23:59:00 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "差值计算时间", readConverterExp = "如=2025-10-10,2=3:59:00") @Excel(name = "差值计算时间", readConverterExp = "如=2025-10-10,2=3:59:00")
private Date calcTime; private Date calcTime;
@ -104,24 +101,14 @@ public class EmsDailyEnergyData extends BaseEntity
return dataDate; return dataDate;
} }
public void setTotalRevenue(BigDecimal totalRevenue) public void setDataHour(Integer dataHour)
{ {
this.totalRevenue = totalRevenue; this.dataHour = dataHour;
} }
public BigDecimal getTotalRevenue() public Integer getDataHour()
{ {
return totalRevenue; return dataHour;
}
public void setDayRevenue(BigDecimal dayRevenue)
{
this.dayRevenue = dayRevenue;
}
public BigDecimal getDayRevenue()
{
return dayRevenue;
} }
public void setPeakChargeDiff(BigDecimal peakChargeDiff) public void setPeakChargeDiff(BigDecimal peakChargeDiff)
@ -220,8 +207,7 @@ 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("dataHour", getDataHour())
.append("dayRevenue", getDayRevenue())
.append("peakChargeDiff", getPeakChargeDiff()) .append("peakChargeDiff", getPeakChargeDiff())
.append("peakDischargeDiff", getPeakDischargeDiff()) .append("peakDischargeDiff", getPeakDischargeDiff())
.append("highChargeDiff", getHighChargeDiff()) .append("highChargeDiff", getHighChargeDiff())

View File

@ -2,6 +2,7 @@ package com.xzzn.ems.domain.vo;
public class PointConfigLatestValueItemVo { public class PointConfigLatestValueItemVo {
private String siteId; private String siteId;
private String pointId;
private String deviceId; private String deviceId;
private String dataKey; private String dataKey;
@ -13,6 +14,14 @@ public class PointConfigLatestValueItemVo {
this.siteId = siteId; this.siteId = siteId;
} }
public String getPointId() {
return pointId;
}
public void setPointId(String pointId) {
this.pointId = pointId;
}
public String getDeviceId() { public String getDeviceId() {
return deviceId; return deviceId;
} }

View File

@ -4,6 +4,7 @@ import java.util.Date;
public class PointConfigLatestValueVo { public class PointConfigLatestValueVo {
private String siteId; private String siteId;
private String pointId;
private String deviceId; private String deviceId;
private String dataKey; private String dataKey;
private Object pointValue; private Object pointValue;
@ -17,6 +18,14 @@ public class PointConfigLatestValueVo {
this.siteId = siteId; this.siteId = siteId;
} }
public String getPointId() {
return pointId;
}
public void setPointId(String pointId) {
this.pointId = pointId;
}
public String getDeviceId() { public String getDeviceId() {
return deviceId; return deviceId;
} }

View File

@ -69,6 +69,17 @@ public interface EmsDailyChargeDataMapper
// 插入或更新站点每日充放电数据 // 插入或更新站点每日充放电数据
public void insertOrUpdateData(EmsDailyChargeData emsDailyChargeData); public void insertOrUpdateData(EmsDailyChargeData emsDailyChargeData);
// 按站点+日期(天)查询当日已存在记录
public EmsDailyChargeData selectBySiteIdAndDateTime(@Param("siteId") String siteId,
@Param("dateTime") Date dateTime);
// 按站点+日期(天)更新收入字段
public int updateRevenueBySiteAndDate(@Param("siteId") String siteId,
@Param("dateTime") Date dateTime,
@Param("totalRevenue") BigDecimal totalRevenue,
@Param("dayRevenue") BigDecimal dayRevenue,
@Param("updateBy") String updateBy);
// 获取所有站点总充总放 // 获取所有站点总充总放
public Map<String, BigDecimal> getAllSiteChargeData(@Param("nowData")String nowData, @Param("siteId")String siteId); public Map<String, BigDecimal> getAllSiteChargeData(@Param("nowData")String nowData, @Param("siteId")String siteId);

View File

@ -68,6 +68,12 @@ public interface EmsDailyEnergyDataMapper
// 获取站点某日电表数据 // 获取站点某日电表数据
public EmsDailyEnergyData getDataByDate(@Param("siteId")String siteId,@Param("today") String today); public EmsDailyEnergyData getDataByDate(@Param("siteId")String siteId,@Param("today") String today);
// 按站点+日期+小时查询当小时已存在记录
public EmsDailyEnergyData selectBySiteIdAndDateHour(@Param("siteId") String siteId,
@Param("dataDate") java.util.Date dataDate,
@Param("dataHour") Integer dataHour);
// 插入或更新每日尖峰平谷差值 // 插入或更新每日尖峰平谷差值
public void insertOrUpdateData(EmsDailyEnergyData energyData); public void insertOrUpdateData(EmsDailyEnergyData energyData);
// 电表报表 // 电表报表

View File

@ -17,6 +17,8 @@ public interface EmsPointConfigMapper {
int updateEmsPointConfig(EmsPointConfig emsPointConfig); int updateEmsPointConfig(EmsPointConfig emsPointConfig);
int updateEmsPointConfigForImport(EmsPointConfig emsPointConfig);
int deleteEmsPointConfigById(Long id); int deleteEmsPointConfigById(Long id);
int deleteEmsPointConfigByIds(Long[] ids); int deleteEmsPointConfigByIds(Long[] ids);

View File

@ -9,6 +9,8 @@ import java.util.List;
* 单站监控字段点位映射 Mapper * 单站监控字段点位映射 Mapper
*/ */
public interface EmsSiteMonitorPointMatchMapper { public interface EmsSiteMonitorPointMatchMapper {
List<String> selectDistinctSiteIds();
List<EmsSiteMonitorPointMatch> selectBySiteId(@Param("siteId") String siteId); List<EmsSiteMonitorPointMatch> selectBySiteId(@Param("siteId") String siteId);
int deleteBySiteId(@Param("siteId") String siteId); int deleteBySiteId(@Param("siteId") String siteId);

View File

@ -4,6 +4,7 @@ import com.xzzn.ems.domain.EmsPointConfig;
import com.xzzn.ems.domain.vo.ImportPointTemplateRequest; import com.xzzn.ems.domain.vo.ImportPointTemplateRequest;
import com.xzzn.ems.domain.vo.PointConfigCurveRequest; import com.xzzn.ems.domain.vo.PointConfigCurveRequest;
import com.xzzn.ems.domain.vo.PointConfigCurveValueVo; import com.xzzn.ems.domain.vo.PointConfigCurveValueVo;
import com.xzzn.ems.domain.vo.PointConfigGenerateRecentRequest;
import com.xzzn.ems.domain.vo.PointConfigLatestValueRequest; import com.xzzn.ems.domain.vo.PointConfigLatestValueRequest;
import com.xzzn.ems.domain.vo.PointConfigLatestValueVo; import com.xzzn.ems.domain.vo.PointConfigLatestValueVo;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -30,4 +31,6 @@ public interface IEmsPointConfigService {
List<PointConfigLatestValueVo> getLatestValues(PointConfigLatestValueRequest request); List<PointConfigLatestValueVo> getLatestValues(PointConfigLatestValueRequest request);
List<PointConfigCurveValueVo> getCurveData(PointConfigCurveRequest request); List<PointConfigCurveValueVo> getCurveData(PointConfigCurveRequest request);
String generateRecent7DaysData(PointConfigGenerateRecentRequest request);
} }

View File

@ -13,6 +13,8 @@ public interface ISingleSiteService
public SiteMonitorHomeVo getSiteMonitorDataVo(String siteId); public SiteMonitorHomeVo getSiteMonitorDataVo(String siteId);
public SiteMonitorHomeVo getSiteMonitorTotalDataVo(String siteId);
public SiteMonitorRunningHeadInfoVo getSiteRunningHeadInfo(String siteId); public SiteMonitorRunningHeadInfoVo getSiteRunningHeadInfo(String siteId);

View File

@ -204,24 +204,7 @@ public class InfluxPointDataWriter {
try { try {
String queryUrl = buildQueryUrl(influxQl); String queryUrl = buildQueryUrl(influxQl);
List<PointValue> values = parseInfluxQlResponse(executeRequestWithResponse(methodOrDefault(readMethod, "GET"), queryUrl)); return parseInfluxQlResponse(executeRequestWithResponse(methodOrDefault(readMethod, "GET"), queryUrl));
if (!values.isEmpty()) {
return values;
}
// 兼容 pointId 大小写差异
String regexQuery = String.format(
"SELECT \"value\" FROM \"%s\" WHERE \"site_id\" = '%s' AND \"point_key\" =~ /(?i)^%s$/ " +
"AND time >= %dms AND time <= %dms ORDER BY time ASC",
measurement,
escapeTagValue(normalizedSiteId),
escapeRegex(normalizedPointKey),
startTime.getTime(),
endTime.getTime()
);
return parseInfluxQlResponse(
executeRequestWithResponse(methodOrDefault(readMethod, "GET"), buildQueryUrl(regexQuery))
);
} catch (Exception e) { } catch (Exception e) {
log.warn("按 pointKey 查询 InfluxDB 曲线失败: {}", e.getMessage()); log.warn("按 pointKey 查询 InfluxDB 曲线失败: {}", e.getMessage());
return Collections.emptyList(); return Collections.emptyList();

View File

@ -19,6 +19,7 @@ import com.xzzn.common.enums.WorkStatus;
import com.xzzn.common.exception.ServiceException; import com.xzzn.common.exception.ServiceException;
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.EmsDailyChargeData;
import com.xzzn.ems.domain.EmsDevicesSetting; import com.xzzn.ems.domain.EmsDevicesSetting;
import com.xzzn.ems.domain.EmsPointEnumMatch; import com.xzzn.ems.domain.EmsPointEnumMatch;
import com.xzzn.ems.domain.EmsPointConfig; import com.xzzn.ems.domain.EmsPointConfig;
@ -32,11 +33,14 @@ import com.xzzn.ems.domain.vo.PointDataRequest;
import com.xzzn.ems.domain.vo.PointQueryResponse; import com.xzzn.ems.domain.vo.PointQueryResponse;
import com.xzzn.ems.domain.vo.SiteMonitorDataSaveItemVo; import com.xzzn.ems.domain.vo.SiteMonitorDataSaveItemVo;
import com.xzzn.ems.domain.vo.SiteMonitorDataSaveRequest; import com.xzzn.ems.domain.vo.SiteMonitorDataSaveRequest;
import com.xzzn.ems.domain.vo.SiteMonitorDataVo;
import com.xzzn.ems.domain.vo.SiteMonitorProjectDisplayVo; import com.xzzn.ems.domain.vo.SiteMonitorProjectDisplayVo;
import com.xzzn.ems.domain.vo.SiteMonitorProjectPointMappingSaveRequest; import com.xzzn.ems.domain.vo.SiteMonitorProjectPointMappingSaveRequest;
import com.xzzn.ems.domain.vo.SiteMonitorProjectPointMappingVo; import com.xzzn.ems.domain.vo.SiteMonitorProjectPointMappingVo;
import com.xzzn.ems.domain.vo.WorkStatusEnumMappingVo; import com.xzzn.ems.domain.vo.WorkStatusEnumMappingVo;
import com.xzzn.ems.mapper.EmsBatteryDataMinutesMapper; import com.xzzn.ems.mapper.EmsBatteryDataMinutesMapper;
import com.xzzn.ems.mapper.EmsDailyChargeDataMapper;
import com.xzzn.ems.mapper.EmsDailyEnergyDataMapper;
import com.xzzn.ems.mapper.EmsDevicesSettingMapper; import com.xzzn.ems.mapper.EmsDevicesSettingMapper;
import com.xzzn.ems.mapper.EmsPcsSettingMapper; import com.xzzn.ems.mapper.EmsPcsSettingMapper;
import com.xzzn.ems.mapper.EmsPointConfigMapper; import com.xzzn.ems.mapper.EmsPointConfigMapper;
@ -52,6 +56,7 @@ import com.xzzn.system.domain.SysOperLog;
import com.xzzn.system.service.ISysOperLogService; import com.xzzn.system.service.ISysOperLogService;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
@ -123,6 +128,12 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService
private static final long PROJECT_DISPLAY_CACHE_TTL_MS = 15_000L; private static final long PROJECT_DISPLAY_CACHE_TTL_MS = 15_000L;
private static final int MONITOR_POINT_MATCH_REDIS_TTL_SECONDS = 300; private static final int MONITOR_POINT_MATCH_REDIS_TTL_SECONDS = 300;
private static final int DISPLAY_DEBUG_SAMPLE_SIZE = 20; private static final int DISPLAY_DEBUG_SAMPLE_SIZE = 20;
private static final Set<String> HOME_CHARGE_FIELD_SET = new HashSet<>(Arrays.asList(
"dayChargedCap", "dayDisChargedCap", "yesterdayChargedCap", "yesterdayDisChargedCap", "totalChargedCap", "totalDischargedCap"
));
private static final Set<String> HOME_REVENUE_FIELD_SET = new HashSet<>(Arrays.asList(
"totalRevenue", "dayRevenue", "yesterdayRevenue"
));
@Autowired @Autowired
private EmsDevicesSettingMapper emsDevicesMapper; private EmsDevicesSettingMapper emsDevicesMapper;
@Autowired @Autowired
@ -138,6 +149,10 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService
@Autowired @Autowired
private EmsBatteryDataMinutesMapper emsBatteryDataMinutesMapper; private EmsBatteryDataMinutesMapper emsBatteryDataMinutesMapper;
@Autowired @Autowired
private EmsDailyChargeDataMapper emsDailyChargeDataMapper;
@Autowired
private EmsDailyEnergyDataMapper emsDailyEnergyDataMapper;
@Autowired
private EmsBatteryClusterServiceImpl emsBatteryClusterServiceImpl; private EmsBatteryClusterServiceImpl emsBatteryClusterServiceImpl;
@Autowired @Autowired
private ModbusProcessor modbusProcessor; private ModbusProcessor modbusProcessor;
@ -695,7 +710,6 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService
.filter(fieldCodeSet::contains) .filter(fieldCodeSet::contains)
.forEach(deletedFieldCodeSet::add); .forEach(deletedFieldCodeSet::add);
} }
validatePcsCurvePointMappings(siteId, request.getMappings(), deletedFieldCodeSet);
int deletedRows = emsSiteMonitorPointMatchMapper.deleteBySiteId(siteId); int deletedRows = emsSiteMonitorPointMatchMapper.deleteBySiteId(siteId);
List<EmsSiteMonitorPointMatch> saveList = new ArrayList<>(); List<EmsSiteMonitorPointMatch> saveList = new ArrayList<>();
@ -936,45 +950,6 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService
return StringUtils.defaultString(deviceCategory) + "-" + StringUtils.defaultString(matchField); return StringUtils.defaultString(deviceCategory) + "-" + StringUtils.defaultString(matchField);
} }
private void validatePcsCurvePointMappings(String siteId, List<SiteMonitorProjectPointMappingVo> mappings, Set<String> deletedFieldCodeSet) {
List<Map<String, Object>> pcsDevices = emsDevicesMapper.getDeviceInfosBySiteIdAndCategory(siteId, DeviceCategory.PCS.getCode());
Set<String> pcsDeviceIdSet = new HashSet<>();
if (pcsDevices != null) {
pcsDevices.stream()
.filter(Objects::nonNull)
.map(item -> item.get("id"))
.filter(Objects::nonNull)
.map(String::valueOf)
.map(String::trim)
.filter(StringUtils::isNotBlank)
.forEach(pcsDeviceIdSet::add);
}
validateSingleCurveFieldMapping(FIELD_CURVE_PCS_ACTIVE_POWER, "PCS有功功率曲线点位", pcsDeviceIdSet, mappings, deletedFieldCodeSet);
validateSingleCurveFieldMapping(FIELD_CURVE_PCS_REACTIVE_POWER, "PCS无功功率曲线点位", pcsDeviceIdSet, mappings, deletedFieldCodeSet);
}
private void validateSingleCurveFieldMapping(String fieldCode, String fieldName, Set<String> pcsDeviceIdSet,
List<SiteMonitorProjectPointMappingVo> mappings, Set<String> deletedFieldCodeSet) {
if (deletedFieldCodeSet != null && deletedFieldCodeSet.contains(fieldCode) && !pcsDeviceIdSet.isEmpty()) {
throw new ServiceException(fieldName + "不能删除且配置数量必须与PCS设备数量一致");
}
Set<String> configuredDeviceIdSet = new HashSet<>();
if (mappings != null) {
mappings.stream()
.filter(Objects::nonNull)
.filter(item -> fieldCode.equals(StringUtils.trim(item.getFieldCode())))
.filter(item -> StringUtils.isNotBlank(item.getDataPoint()))
.map(SiteMonitorProjectPointMappingVo::getDeviceId)
.map(StringUtils::trim)
.filter(StringUtils::isNotBlank)
.forEach(configuredDeviceIdSet::add);
}
if (configuredDeviceIdSet.size() != pcsDeviceIdSet.size() || !configuredDeviceIdSet.equals(pcsDeviceIdSet)) {
throw new ServiceException(String.format("%s数量需与PCS设备数量一致PCS设备%d个已配置%d个", fieldName, pcsDeviceIdSet.size(), configuredDeviceIdSet.size()));
}
}
private SiteMonitorProjectPointMappingVo buildMappingVo(EmsSiteMonitorItem item, EmsSiteMonitorPointMatch pointMatch, private SiteMonitorProjectPointMappingVo buildMappingVo(EmsSiteMonitorItem item, EmsSiteMonitorPointMatch pointMatch,
String deviceId, String deviceName) { String deviceId, String deviceName) {
SiteMonitorProjectPointMappingVo vo = new SiteMonitorProjectPointMappingVo(); SiteMonitorProjectPointMappingVo vo = new SiteMonitorProjectPointMappingVo();
@ -1117,6 +1092,7 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService
Map<String, Object> tjbbLatestMap = safeRedisMap(redisCache.getCacheMap(buildSiteMonitorLatestRedisKey(normalizedSiteId, MODULE_TJBB))); Map<String, Object> tjbbLatestMap = safeRedisMap(redisCache.getCacheMap(buildSiteMonitorLatestRedisKey(normalizedSiteId, MODULE_TJBB)));
Map<String, Map<String, String>> enumDataCodeMapByScope = buildEnumDataCodeMapByScope(normalizedSiteId); Map<String, Map<String, String>> enumDataCodeMapByScope = buildEnumDataCodeMapByScope(normalizedSiteId);
Map<String, PointLatestSnapshot> pointSnapshotCache = new HashMap<>(); Map<String, PointLatestSnapshot> pointSnapshotCache = new HashMap<>();
HomeRunningSnapshot homeRunningSnapshot = buildHomeRunningSnapshot(normalizedSiteId);
List<SiteMonitorProjectDisplayVo> result = new ArrayList<>(); List<SiteMonitorProjectDisplayVo> result = new ArrayList<>();
int totalCount = 0; int totalCount = 0;
@ -1138,6 +1114,18 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService
result.add(vo); result.add(vo);
continue; continue;
} }
if (MODULE_HOME.equals(mapping.getModuleCode()) && homeRunningSnapshot != null) {
String homeFieldKey = resolveHomeFieldKey(mapping.getFieldCode());
if (StringUtils.isNotBlank(homeFieldKey)) {
String homeFieldValue = homeRunningSnapshot.getValue(homeFieldKey);
if (homeFieldValue != null) {
vo.setFieldValue(homeFieldValue);
vo.setValueTime(homeRunningSnapshot.getValueTime());
result.add(vo);
continue;
}
}
}
// 与“点位配置列表最新值”一致:按 pointId -> 点位配置(dataKey/deviceId) -> MQTT 最新报文读取 // 与“点位配置列表最新值”一致:按 pointId -> 点位配置(dataKey/deviceId) -> MQTT 最新报文读取
PointLatestSnapshot latestSnapshot = null; PointLatestSnapshot latestSnapshot = null;
String dataPoint = StringUtils.trim(mapping.getDataPoint()); String dataPoint = StringUtils.trim(mapping.getDataPoint());
@ -1207,6 +1195,91 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService
return result; return result;
} }
private HomeRunningSnapshot buildHomeRunningSnapshot(String siteId) {
if (StringUtils.isBlank(siteId)) {
return null;
}
HomeRunningSnapshot snapshot = new HomeRunningSnapshot();
String today = DateUtils.getDate();
Map<String, BigDecimal> totalChargeData = emsDailyChargeDataMapper.getAllSiteChargeData(today, siteId);
if (totalChargeData != null) {
snapshot.put("totalChargedCap", totalChargeData.get("totalChargedCap"));
snapshot.put("totalDischargedCap", totalChargeData.get("totalDischargedCap"));
}
LocalDate now = LocalDate.now();
LocalDate yesterday = now.minusDays(1);
List<SiteMonitorDataVo> chargeList = emsDailyChargeDataMapper.getSingleSiteChargeData(
siteId,
DateUtils.toDate(yesterday),
DateUtils.toDate(now)
);
if (!CollectionUtils.isEmpty(chargeList)) {
for (SiteMonitorDataVo item : chargeList) {
if (item == null || StringUtils.isBlank(item.getAmmeterDate())) {
continue;
}
if (today.equals(item.getAmmeterDate())) {
snapshot.put("dayChargedCap", item.getChargedCap());
snapshot.put("dayDisChargedCap", item.getDisChargedCap());
} else if (DateUtils.getYesterdayDayString().equals(item.getAmmeterDate())) {
snapshot.put("yesterdayChargedCap", item.getChargedCap());
snapshot.put("yesterdayDisChargedCap", item.getDisChargedCap());
}
}
}
EmsDailyChargeData todayChargeData = emsDailyChargeDataMapper.selectBySiteIdAndDateTime(siteId, DateUtils.toDate(now));
EmsDailyChargeData yesterdayChargeData = emsDailyChargeDataMapper.selectBySiteIdAndDateTime(siteId, DateUtils.toDate(yesterday));
if (todayChargeData != null) {
snapshot.put("totalRevenue", todayChargeData.getTotalRevenue());
snapshot.put("dayRevenue", todayChargeData.getDayRevenue());
} else {
Map<String, BigDecimal> latestRevenueData = emsDailyEnergyDataMapper.getRealTimeRevenue(siteId);
if (latestRevenueData != null) {
snapshot.put("totalRevenue", latestRevenueData.get("totalRevenue"));
snapshot.put("dayRevenue", latestRevenueData.get("dayRevenue"));
}
}
if (yesterdayChargeData != null) {
snapshot.put("yesterdayRevenue", yesterdayChargeData.getDayRevenue());
}
return snapshot;
}
private String resolveHomeFieldKey(String fieldCode) {
String normalizedFieldCode = StringUtils.trim(fieldCode);
if (StringUtils.isBlank(normalizedFieldCode)) {
return null;
}
int splitIndex = normalizedFieldCode.lastIndexOf("__");
String fieldKey = splitIndex >= 0 ? normalizedFieldCode.substring(splitIndex + 2) : normalizedFieldCode;
if (HOME_CHARGE_FIELD_SET.contains(fieldKey) || HOME_REVENUE_FIELD_SET.contains(fieldKey)) {
return fieldKey;
}
return null;
}
private static class HomeRunningSnapshot {
private final Map<String, String> valueMap = new HashMap<>();
private final Date valueTime = new Date();
public void put(String key, BigDecimal value) {
if (StringUtils.isBlank(key) || value == null) {
return;
}
valueMap.put(key, value.stripTrailingZeros().toPlainString());
}
public String getValue(String key) {
return valueMap.get(key);
}
public Date getValueTime() {
return valueTime;
}
}
private Map<String, Map<String, String>> buildEnumDataCodeMapByScope(String siteId) { private Map<String, Map<String, String>> buildEnumDataCodeMapByScope(String siteId) {
Map<String, Map<String, String>> result = new HashMap<>(); Map<String, Map<String, String>> result = new HashMap<>();
if (StringUtils.isBlank(siteId)) { if (StringUtils.isBlank(siteId)) {

View File

@ -4,11 +4,13 @@ import com.xzzn.common.constant.RedisKeyConstants;
import com.xzzn.common.core.redis.RedisCache; import com.xzzn.common.core.redis.RedisCache;
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.EmsDailyChargeData;
import com.xzzn.ems.domain.EmsDailyEnergyData; import com.xzzn.ems.domain.EmsDailyEnergyData;
import com.xzzn.ems.domain.EmsEnergyPriceConfig; import com.xzzn.ems.domain.EmsEnergyPriceConfig;
import com.xzzn.ems.domain.EmsPriceTimeConfig; import com.xzzn.ems.domain.EmsPriceTimeConfig;
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.domain.vo.EnergyPriceVo;
import com.xzzn.ems.mapper.EmsDailyChargeDataMapper;
import com.xzzn.ems.mapper.EmsDailyEnergyDataMapper; import com.xzzn.ems.mapper.EmsDailyEnergyDataMapper;
import com.xzzn.ems.mapper.EmsEnergyPriceConfigMapper; import com.xzzn.ems.mapper.EmsEnergyPriceConfigMapper;
import com.xzzn.ems.mapper.EmsPriceTimeConfigMapper; import com.xzzn.ems.mapper.EmsPriceTimeConfigMapper;
@ -17,6 +19,7 @@ import com.xzzn.ems.service.IEmsEnergyPriceConfigService;
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.util.Date;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
@ -45,6 +48,8 @@ public class EmsEnergyPriceConfigServiceImpl implements IEmsEnergyPriceConfigSer
@Autowired @Autowired
private RedisCache redisCache; private RedisCache redisCache;
@Autowired @Autowired
private EmsDailyChargeDataMapper emsDailyChargeDataMapper;
@Autowired
private EmsDailyEnergyDataMapper emsDailyEnergyDataMapper; private EmsDailyEnergyDataMapper emsDailyEnergyDataMapper;
/** /**
@ -280,22 +285,21 @@ public class EmsEnergyPriceConfigServiceImpl implements IEmsEnergyPriceConfigSer
BigDecimal dayRevenue = BigDecimal.ZERO; BigDecimal dayRevenue = BigDecimal.ZERO;
BigDecimal yesterdayRevenue = BigDecimal.ZERO; BigDecimal yesterdayRevenue = BigDecimal.ZERO;
// 获取昨日数据 // 获取昨日数据
String yesterday = DateUtils.getYesterdayDayString(); Date yesterday = DateUtils.toDate(LocalDate.now().minusDays(1));
EmsDailyEnergyData yesterdayData = emsDailyEnergyDataMapper.getDataByDate(siteId, yesterday); EmsDailyChargeData yesterdayData = emsDailyChargeDataMapper.selectBySiteIdAndDateTime(siteId, yesterday);
if (yesterdayData != null) { if (yesterdayData != null) {
yesterdayRevenue = yesterdayData.getDayRevenue() == null ? BigDecimal.ZERO : yesterdayData.getDayRevenue(); yesterdayRevenue = yesterdayData.getDayRevenue() == null ? BigDecimal.ZERO : yesterdayData.getDayRevenue();
} }
// 当日实时数据 // 当日实时数据
String today = DateUtils.getDate(); String today = DateUtils.getDate();
Map<String, BigDecimal> lastData = emsDailyEnergyDataMapper.getRealTimeRevenue(siteId);
if (lastData != null) {
totalRevenue = lastData.get("totalRevenue") == null ? BigDecimal.ZERO : lastData.get("totalRevenue");
}
EmsDailyEnergyData todayData = emsDailyEnergyDataMapper.getDataByDate(siteId,today); EmsDailyEnergyData todayData = emsDailyEnergyDataMapper.getDataByDate(siteId,today);
if (todayData == null) { if (todayData != null) {
Map<String, BigDecimal> lastData = emsDailyEnergyDataMapper.getRealTimeRevenue(siteId);
if (lastData != null) {
totalRevenue = lastData.get("totalRevenue") == null ? BigDecimal.ZERO : lastData.get("totalRevenue");
}
} else {
totalRevenue = todayData.getTotalRevenue() == null ? BigDecimal.ZERO : todayData.getTotalRevenue();
// 获取当月电价 // 获取当月电价
int currentMonth = LocalDate.now().getMonthValue(); int currentMonth = LocalDate.now().getMonthValue();
int currentYear = LocalDate.now().getYear(); int currentYear = LocalDate.now().getYear();

View File

@ -16,7 +16,7 @@ import java.util.stream.Collectors;
@Service @Service
public class EmsPointCalcConfigServiceImpl implements IEmsPointCalcConfigService { public class EmsPointCalcConfigServiceImpl implements IEmsPointCalcConfigService {
private static final Pattern CALC_EXPRESSION_PATTERN = Pattern.compile("^[0-9A-Za-z_+\\-*/().\\s]+$"); private static final Pattern CALC_EXPRESSION_PATTERN = Pattern.compile("^[0-9A-Za-z_+\\-*/().,?:<>=!&|\\s]+$");
private static final String CALC_POINT_TYPE = "calc"; private static final String CALC_POINT_TYPE = "calc";
@Autowired @Autowired
@ -91,7 +91,7 @@ public class EmsPointCalcConfigServiceImpl implements IEmsPointCalcConfigService
throw new ServiceException("计算表达式不能为空"); throw new ServiceException("计算表达式不能为空");
} }
if (!CALC_EXPRESSION_PATTERN.matcher(expression).matches()) { if (!CALC_EXPRESSION_PATTERN.matcher(expression).matches()) {
throw new ServiceException("计算表达式仅支持数字、字母、下划线、空格和四则运算符"); throw new ServiceException("计算表达式仅支持数字、字母、下划线、空格、运算符和函数语法");
} }
} }

View File

@ -401,13 +401,8 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
ammeterRevenue.setActiveTotalPrice(activePeakPrice.add(activeHighPrice).add(activeFlatPrice).add(activeValleyPrice)); ammeterRevenue.setActiveTotalPrice(activePeakPrice.add(activeHighPrice).add(activeFlatPrice).add(activeValleyPrice));
ammeterRevenue.setReActiveTotalPrice(reActivePeakPrice.add(reActiveHighPrice).add(reActiveFlatPrice).add(reActiveValleyPrice)); ammeterRevenue.setReActiveTotalPrice(reActivePeakPrice.add(reActiveHighPrice).add(reActiveFlatPrice).add(reActiveValleyPrice));
// 实际收益=放电价格(尖峰平谷)-充电价格(尖峰平谷) // 实际收益按“放电总价-充电总价”口径计算
ammeterRevenue.setActualRevenue( ammeterRevenue.setActualRevenue(ammeterRevenue.getReActiveTotalPrice().subtract(ammeterRevenue.getActiveTotalPrice()));
reActivePeakPrice.subtract(activePeakPrice)
.add(reActiveHighPrice.subtract(activeHighPrice))
.add(reActiveFlatPrice.subtract(activeFlatPrice))
.add(reActiveValleyPrice.subtract(activeValleyPrice))
);
}); });
int weatherMissingCount = 0; int weatherMissingCount = 0;

View File

@ -12,6 +12,7 @@ import com.xzzn.ems.domain.EmsBatteryData;
import com.xzzn.ems.domain.EmsBatteryStack; import com.xzzn.ems.domain.EmsBatteryStack;
import com.xzzn.ems.domain.EmsCoolingData; import com.xzzn.ems.domain.EmsCoolingData;
import com.xzzn.ems.domain.EmsDhData; import com.xzzn.ems.domain.EmsDhData;
import com.xzzn.ems.domain.EmsDailyChargeData;
import com.xzzn.ems.domain.EmsDevicesSetting; import com.xzzn.ems.domain.EmsDevicesSetting;
import com.xzzn.ems.domain.EmsEmsData; import com.xzzn.ems.domain.EmsEmsData;
import com.xzzn.ems.domain.EmsPcsBranchData; import com.xzzn.ems.domain.EmsPcsBranchData;
@ -215,6 +216,60 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
return siteMonitorHomeVo; return siteMonitorHomeVo;
} }
@Override
public SiteMonitorHomeVo getSiteMonitorTotalDataVo(String siteId) {
SiteMonitorHomeVo siteMonitorHomeVo = new SiteMonitorHomeVo();
if (StringUtils.isEmpty(siteId)) {
return siteMonitorHomeVo;
}
String nowDate = DateUtils.getDate();
Map<String, BigDecimal> chargeDataMap = emsDailyChargeDataMapper.getAllSiteChargeData(nowDate, siteId);
BigDecimal totalChargedCap = BigDecimal.ZERO;
BigDecimal totalDischargedCap = BigDecimal.ZERO;
if (chargeDataMap != null) {
totalChargedCap = chargeDataMap.get("totalChargedCap") == null ? BigDecimal.ZERO : chargeDataMap.get("totalChargedCap");
totalDischargedCap = chargeDataMap.get("totalDischargedCap") == null ? BigDecimal.ZERO : chargeDataMap.get("totalDischargedCap");
}
siteMonitorHomeVo.setTotalChargedCap(totalChargedCap);
siteMonitorHomeVo.setTotalDischargedCap(totalDischargedCap);
Map<String, BigDecimal> revenueMap = emsDailyEnergyDataMapper.getRealTimeRevenue(siteId);
siteMonitorHomeVo.setTotalRevenue(revenueMap == null || revenueMap.get("totalRevenue") == null ? BigDecimal.ZERO : revenueMap.get("totalRevenue"));
siteMonitorHomeVo.setDayRevenue(revenueMap == null || revenueMap.get("dayRevenue") == null ? BigDecimal.ZERO : revenueMap.get("dayRevenue"));
Date yesterdayDate = DateUtils.toDate(LocalDate.now().minusDays(1));
EmsDailyChargeData yesterdayChargeData = emsDailyChargeDataMapper.selectBySiteIdAndDateTime(siteId, yesterdayDate);
siteMonitorHomeVo.setYesterdayRevenue(yesterdayChargeData == null || yesterdayChargeData.getDayRevenue() == null
? BigDecimal.ZERO
: yesterdayChargeData.getDayRevenue());
List<SiteMonitorHomeAlarmVo> alarmList = emsAlarmRecordsMapper.getAlarmRecordsBySiteId(siteId);
siteMonitorHomeVo.setSiteMonitorHomeAlarmVo(alarmList);
LocalDate sevenDaysAgo = LocalDate.now().minusDays(6);
Date startDate = DateUtils.toDate(sevenDaysAgo);
Date endDate = new Date();
List<SiteMonitorDataVo> siteMonitorDataVoList = emsDailyChargeDataMapper.getSingleSiteChargeData(siteId, startDate, endDate);
if (!CollectionUtils.isEmpty(siteMonitorDataVoList)) {
for (SiteMonitorDataVo sitePcsData : siteMonitorDataVoList) {
String pcsDate = sitePcsData.getAmmeterDate();
if (DateUtils.checkIsToday(pcsDate)) {
siteMonitorHomeVo.setDayChargedCap(sitePcsData.getChargedCap());
siteMonitorHomeVo.setDayDisChargedCap(sitePcsData.getDisChargedCap());
}
if (DateUtils.getYesterdayDayString().equals(pcsDate)) {
siteMonitorHomeVo.setYesterdayChargedCap(sitePcsData.getChargedCap());
siteMonitorHomeVo.setYesterdayDisChargedCap(sitePcsData.getDisChargedCap());
}
}
}
siteMonitorHomeVo.setEnergyStorageAvailElec(totalDischargedCap.subtract(totalChargedCap));
siteMonitorHomeVo.setSiteMonitorDataVo(siteMonitorDataVoList);
return siteMonitorHomeVo;
}
// 获取单站监控实时运行头部数据 // 获取单站监控实时运行头部数据
@Override @Override
public SiteMonitorRunningHeadInfoVo getSiteRunningHeadInfo(String siteId) { public SiteMonitorRunningHeadInfoVo getSiteRunningHeadInfo(String siteId) {

View File

@ -7,12 +7,13 @@
<resultMap type="EmsDailyChargeData" id="EmsDailyChargeDataResult"> <resultMap type="EmsDailyChargeData" id="EmsDailyChargeDataResult">
<result property="id" column="id" /> <result property="id" column="id" />
<result property="siteId" column="site_id" /> <result property="siteId" column="site_id" />
<result property="deviceId" column="device_id" />
<result property="dateTime" column="date_time" /> <result property="dateTime" column="date_time" />
<result property="totalChargeData" column="total_charge_Data" /> <result property="totalChargeData" column="total_charge_Data" />
<result property="totalDischargeData" column="total_discharge_Data" /> <result property="totalDischargeData" column="total_discharge_Data" />
<result property="chargeData" column="charge_data" /> <result property="chargeData" column="charge_data" />
<result property="dischargeData" column="discharge_data" /> <result property="dischargeData" column="discharge_data" />
<result property="totalRevenue" column="total_revenue" />
<result property="dayRevenue" column="day_revenue" />
<result property="createBy" column="create_by" /> <result property="createBy" column="create_by" />
<result property="createTime" column="create_time" /> <result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" /> <result property="updateBy" column="update_by" />
@ -21,20 +22,22 @@
</resultMap> </resultMap>
<sql id="selectEmsDailyChargeDataVo"> <sql id="selectEmsDailyChargeDataVo">
select id, site_id, device_id, date_time, total_charge_Data, total_discharge_Data, charge_data, discharge_data, create_by, create_time, update_by, update_time, remark from ems_daily_charge_data select id, site_id, date_time, total_charge_Data, total_discharge_Data, charge_data, discharge_data, total_revenue, day_revenue, create_by, create_time, update_by, update_time, remark from ems_daily_charge_data
</sql> </sql>
<select id="selectEmsDailyChargeDataList" parameterType="EmsDailyChargeData" resultMap="EmsDailyChargeDataResult"> <select id="selectEmsDailyChargeDataList" parameterType="EmsDailyChargeData" resultMap="EmsDailyChargeDataResult">
<include refid="selectEmsDailyChargeDataVo"/> <include refid="selectEmsDailyChargeDataVo"/>
<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="deviceId != null and deviceId != ''"> and device_id = #{deviceId}</if>
<if test="dateTime != null "> and date_time = #{dateTime}</if> <if test="dateTime != null "> and date_time = #{dateTime}</if>
<if test="totalChargeData != null "> and total_charge_Data = #{totalChargeData}</if> <if test="totalChargeData != null "> and total_charge_Data = #{totalChargeData}</if>
<if test="totalDischargeData != null "> and total_discharge_Data = #{totalDischargeData}</if> <if test="totalDischargeData != null "> and total_discharge_Data = #{totalDischargeData}</if>
<if test="chargeData != null "> and charge_data = #{chargeData}</if> <if test="chargeData != null "> and charge_data = #{chargeData}</if>
<if test="dischargeData != null "> and discharge_data = #{dischargeData}</if> <if test="dischargeData != null "> and discharge_data = #{dischargeData}</if>
<if test="totalRevenue != null "> and total_revenue = #{totalRevenue}</if>
<if test="dayRevenue != null "> and day_revenue = #{dayRevenue}</if>
</where> </where>
order by date_time desc
</select> </select>
<select id="selectEmsDailyChargeDataById" parameterType="Long" resultMap="EmsDailyChargeDataResult"> <select id="selectEmsDailyChargeDataById" parameterType="Long" resultMap="EmsDailyChargeDataResult">
@ -42,16 +45,25 @@
where id = #{id} where id = #{id}
</select> </select>
<select id="selectBySiteIdAndDateTime" resultMap="EmsDailyChargeDataResult">
<include refid="selectEmsDailyChargeDataVo"/>
where site_id = #{siteId}
and date(date_time) = date(#{dateTime})
order by date_time desc
limit 1
</select>
<insert id="insertEmsDailyChargeData" parameterType="EmsDailyChargeData" useGeneratedKeys="true" keyProperty="id"> <insert id="insertEmsDailyChargeData" parameterType="EmsDailyChargeData" useGeneratedKeys="true" keyProperty="id">
insert into ems_daily_charge_data insert into ems_daily_charge_data
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">
<if test="siteId != null">site_id,</if> <if test="siteId != null">site_id,</if>
<if test="deviceId != null and deviceId != ''">device_id,</if>
<if test="dateTime != null">date_time,</if> <if test="dateTime != null">date_time,</if>
<if test="totalChargeData != null">total_charge_Data,</if> <if test="totalChargeData != null">total_charge_Data,</if>
<if test="totalDischargeData != null">total_discharge_Data,</if> <if test="totalDischargeData != null">total_discharge_Data,</if>
<if test="chargeData != null">charge_data,</if> <if test="chargeData != null">charge_data,</if>
<if test="dischargeData != null">discharge_data,</if> <if test="dischargeData != null">discharge_data,</if>
<if test="totalRevenue != null">total_revenue,</if>
<if test="dayRevenue != null">day_revenue,</if>
<if test="createBy != null">create_by,</if> <if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if> <if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if> <if test="updateBy != null">update_by,</if>
@ -60,12 +72,13 @@
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="siteId != null">#{siteId},</if> <if test="siteId != null">#{siteId},</if>
<if test="deviceId != null and deviceId != ''">#{deviceId},</if>
<if test="dateTime != null">#{dateTime},</if> <if test="dateTime != null">#{dateTime},</if>
<if test="totalChargeData != null">#{totalChargeData},</if> <if test="totalChargeData != null">#{totalChargeData},</if>
<if test="totalDischargeData != null">#{totalDischargeData},</if> <if test="totalDischargeData != null">#{totalDischargeData},</if>
<if test="chargeData != null">#{chargeData},</if> <if test="chargeData != null">#{chargeData},</if>
<if test="dischargeData != null">#{dischargeData},</if> <if test="dischargeData != null">#{dischargeData},</if>
<if test="totalRevenue != null">#{totalRevenue},</if>
<if test="dayRevenue != null">#{dayRevenue},</if>
<if test="createBy != null">#{createBy},</if> <if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if> <if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if> <if test="updateBy != null">#{updateBy},</if>
@ -78,12 +91,13 @@
update ems_daily_charge_data update ems_daily_charge_data
<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="deviceId != null and deviceId != ''">device_id = #{deviceId},</if>
<if test="dateTime != null">date_time = #{dateTime},</if> <if test="dateTime != null">date_time = #{dateTime},</if>
<if test="totalChargeData != null">total_charge_Data = #{totalChargeData},</if> <if test="totalChargeData != null">total_charge_Data = #{totalChargeData},</if>
<if test="totalDischargeData != null">total_discharge_Data = #{totalDischargeData},</if> <if test="totalDischargeData != null">total_discharge_Data = #{totalDischargeData},</if>
<if test="chargeData != null">charge_data = #{chargeData},</if> <if test="chargeData != null">charge_data = #{chargeData},</if>
<if test="dischargeData != null">discharge_data = #{dischargeData},</if> <if test="dischargeData != null">discharge_data = #{dischargeData},</if>
<if test="totalRevenue != null">total_revenue = #{totalRevenue},</if>
<if test="dayRevenue != null">day_revenue = #{dayRevenue},</if>
<if test="createBy != null">create_by = #{createBy},</if> <if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if> <if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if> <if test="updateBy != null">update_by = #{updateBy},</if>
@ -108,26 +122,28 @@
INSERT into ems_daily_charge_data ( INSERT into ems_daily_charge_data (
id, id,
site_id, site_id,
device_id,
date_time, date_time,
total_charge_Data, total_charge_Data,
total_discharge_Data, total_discharge_Data,
charge_data, charge_data,
discharge_data, discharge_data,
total_revenue,
day_revenue,
create_by, create_by,
create_time, create_time,
update_by, update_by,
update_time, update_time,
remark remark
) values ( ) values (
#{id}, #{id},
#{siteId}, #{siteId},
#{deviceId},
#{dateTime}, #{dateTime},
#{totalChargeData}, #{totalChargeData},
#{totalDischargeData}, #{totalDischargeData},
#{chargeData}, #{chargeData},
#{dischargeData}, #{dischargeData},
#{totalRevenue},
#{dayRevenue},
#{createBy}, #{createBy},
#{createTime}, #{createTime},
#{updateBy}, #{updateBy},
@ -139,9 +155,21 @@
total_discharge_Data = #{totalDischargeData}, total_discharge_Data = #{totalDischargeData},
charge_data = #{chargeData}, charge_data = #{chargeData},
discharge_data = #{dischargeData}, discharge_data = #{dischargeData},
total_revenue = IFNULL(#{totalRevenue}, total_revenue),
day_revenue = IFNULL(#{dayRevenue}, day_revenue),
update_time = NOW() update_time = NOW()
</insert> </insert>
<update id="updateRevenueBySiteAndDate">
update ems_daily_charge_data
set total_revenue = #{totalRevenue},
day_revenue = #{dayRevenue},
update_by = #{updateBy},
update_time = NOW()
where site_id = #{siteId}
and date(date_time) = date(#{dateTime})
</update>
<select id="getAllSiteChargeData" resultType="map"> <select id="getAllSiteChargeData" resultType="map">
SELECT SELECT
SUM(t.total_charge_data) AS totalChargedCap, SUM(t.total_charge_data) AS totalChargedCap,

View File

@ -8,8 +8,7 @@
<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="dataHour" column="data_hour" />
<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" />
@ -27,7 +26,11 @@
</resultMap> </resultMap>
<sql id="selectEmsDailyEnergyDataVo"> <sql id="selectEmsDailyEnergyDataVo">
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 select id, site_id, data_date, data_hour,
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">
@ -35,8 +38,7 @@
<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="dataHour != null "> and data_hour = #{dataHour}</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>
@ -47,6 +49,7 @@
<if test="valleyDischargeDiff != null "> and valley_discharge_diff = #{valleyDischargeDiff}</if> <if test="valleyDischargeDiff != null "> and valley_discharge_diff = #{valleyDischargeDiff}</if>
<if test="calcTime != null "> and calc_time = #{calcTime}</if> <if test="calcTime != null "> and calc_time = #{calcTime}</if>
</where> </where>
order by data_date desc, calc_time desc, id desc
</select> </select>
<select id="selectEmsDailyEnergyDataById" parameterType="Long" resultMap="EmsDailyEnergyDataResult"> <select id="selectEmsDailyEnergyDataById" parameterType="Long" resultMap="EmsDailyEnergyDataResult">
@ -59,8 +62,7 @@
<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="dataHour != null">data_hour,</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>
@ -79,8 +81,7 @@
<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="dataHour != null">#{dataHour},</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>
@ -103,8 +104,7 @@
<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="dataHour != null">data_hour = #{dataHour},</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>
@ -138,14 +138,22 @@
<include refid="selectEmsDailyEnergyDataVo"/> <include refid="selectEmsDailyEnergyDataVo"/>
where data_date = #{today} where data_date = #{today}
AND site_id = #{siteId} AND site_id = #{siteId}
AND data_hour IS NULL
</select>
<select id="selectBySiteIdAndDateHour" resultMap="EmsDailyEnergyDataResult">
<include refid="selectEmsDailyEnergyDataVo"/>
where site_id = #{siteId}
and data_date = DATE(#{dataDate})
and data_hour = #{dataHour}
limit 1
</select> </select>
<insert id="insertOrUpdateData" parameterType="com.xzzn.ems.domain.EmsDailyEnergyData" <insert id="insertOrUpdateData" parameterType="com.xzzn.ems.domain.EmsDailyEnergyData"
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="dataHour != null">data_hour,</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>
@ -164,8 +172,7 @@
#{id}, #{id},
#{siteId}, #{siteId},
#{dataDate}, #{dataDate},
<if test="totalRevenue != null">#{totalRevenue},</if> <if test="dataHour != null">#{dataHour},</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>
@ -181,8 +188,7 @@
NOW(), NOW(),
#{remark} #{remark}
) ON DUPLICATE KEY UPDATE ) ON DUPLICATE KEY UPDATE
<if test="totalRevenue != null">total_revenue = #{totalRevenue},</if> <if test="dataHour != null">data_hour = #{dataHour},</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>
@ -196,60 +202,116 @@
</insert> </insert>
<select id="getDataBySiteId" resultType="com.xzzn.ems.domain.vo.AmmeterStatisListVo"> <select id="getDataBySiteId" resultType="com.xzzn.ems.domain.vo.AmmeterStatisListVo">
select t.data_date as dataTime, select DATE_FORMAT(r.dataDate, '%Y-%m-%d') as dataTime,
t.peak_charge_diff as activePeakKwh, r.activePeakKwh,
t.peak_discharge_diff as reActivePeakKwh, r.reActivePeakKwh,
t.high_charge_diff as activeHighKwh, r.activeHighKwh,
t.high_discharge_diff as reActiveHighKwh, r.reActiveHighKwh,
t.flat_charge_diff as activeFlatKwh, r.activeFlatKwh,
t.flat_discharge_diff as reActiveFlatKwh, r.reActiveFlatKwh,
t.valley_charge_diff as activeValleyKwh, r.activeValleyKwh,
t.valley_discharge_diff as reActiveValleyKwh r.reActiveValleyKwh
from ems_daily_energy_data t from (
where 1=1 -- 优先使用按天汇总记录data_hour is null
<if test="siteId != null"> select DATE(t.data_date) as dataDate,
and t.site_id = #{siteId} t.peak_charge_diff as activePeakKwh,
</if> t.peak_discharge_diff as reActivePeakKwh,
<if test="startTime != null"> t.high_charge_diff as activeHighKwh,
and t.data_date &gt;= #{startTime} t.high_discharge_diff as reActiveHighKwh,
</if> t.flat_charge_diff as activeFlatKwh,
<if test="endTime != null"> t.flat_discharge_diff as reActiveFlatKwh,
and t.data_date &lt;= #{endTime} t.valley_charge_diff as activeValleyKwh,
</if> t.valley_discharge_diff as reActiveValleyKwh
from ems_daily_energy_data t
where t.data_hour is null
<if test="siteId != null and siteId != ''">
and t.site_id = #{siteId}
</if>
<if test="startTime != null and startTime != ''">
and t.data_date &gt;= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
and t.data_date &lt; DATE_ADD(#{endTime}, INTERVAL 1 DAY)
</if>
union all
-- 若某天没有日汇总记录,则按小时数据汇总兜底
select DATE(h.data_date) as dataDate,
SUM(IFNULL(h.peak_charge_diff, 0)) as activePeakKwh,
SUM(IFNULL(h.peak_discharge_diff, 0)) as reActivePeakKwh,
SUM(IFNULL(h.high_charge_diff, 0)) as activeHighKwh,
SUM(IFNULL(h.high_discharge_diff, 0)) as reActiveHighKwh,
SUM(IFNULL(h.flat_charge_diff, 0)) as activeFlatKwh,
SUM(IFNULL(h.flat_discharge_diff, 0)) as reActiveFlatKwh,
SUM(IFNULL(h.valley_charge_diff, 0)) as activeValleyKwh,
SUM(IFNULL(h.valley_discharge_diff, 0)) as reActiveValleyKwh
from ems_daily_energy_data h
where h.data_hour is not null
<if test="siteId != null and siteId != ''">
and h.site_id = #{siteId}
</if>
<if test="startTime != null and startTime != ''">
and h.data_date &gt;= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
and h.data_date &lt; DATE_ADD(#{endTime}, INTERVAL 1 DAY)
</if>
and not exists (
select 1
from ems_daily_energy_data d
where d.site_id = h.site_id
and DATE(d.data_date) = DATE(h.data_date)
and d.data_hour is null
)
group by h.site_id, DATE(h.data_date)
) r
order by r.dataDate desc
</select> </select>
<select id="getLastTotalRevenue" resultType="java.math.BigDecimal"> <select id="getLastTotalRevenue" resultType="java.math.BigDecimal">
select t.total_revenue select t.total_revenue
from ems_daily_energy_data t from ems_daily_charge_data t
where t.site_id = #{siteId} where t.site_id = #{siteId}
and t.data_date &lt; CURDATE() and date(t.date_time) &lt; CURDATE()
order by t.data_date desc limit 1 order by t.date_time desc
limit 1
</select> </select>
<select id="getRealTimeRevenue" resultType="java.util.Map"> <select id="getRealTimeRevenue" resultType="java.util.Map">
select t.total_revenue as totalRevenue, t.day_revenue as dayRevenue select t.total_revenue as totalRevenue, t.day_revenue as dayRevenue
from ems_daily_energy_data t from ems_daily_charge_data t
where t.site_id = #{siteId} where t.site_id = #{siteId}
order by t.data_date desc limit 1 order by t.date_time desc
limit 1
</select> </select>
<select id="getRevenueDataBySiteId" resultType="com.xzzn.ems.domain.vo.AmmeterRevenueStatisListVo"> <select id="getRevenueDataBySiteId" resultType="com.xzzn.ems.domain.vo.AmmeterRevenueStatisListVo">
select select
t.data_date as dataTime, DATE_FORMAT(t.data_date, '%Y-%m-%d') as dataTime,
COALESCE(c.is_workday, CASE WHEN WEEKDAY(t.data_date) &lt; 5 THEN 1 ELSE 0 END) as isWorkday, COALESCE(c.is_workday, CASE WHEN WEEKDAY(t.data_date) &lt; 5 THEN 1 ELSE 0 END) as isWorkday,
CASE CASE
WHEN COALESCE(c.is_workday, CASE WHEN WEEKDAY(t.data_date) &lt; 5 THEN 1 ELSE 0 END) = 1 THEN '工作日' WHEN COALESCE(c.is_workday, CASE WHEN WEEKDAY(t.data_date) &lt; 5 THEN 1 ELSE 0 END) = 1 THEN '工作日'
ELSE '节假日' ELSE '节假日'
END as dayType, END as dayType,
COALESCE(NULLIF(TRIM(w.weather_desc), ''), '--') as weatherDesc, COALESCE(NULLIF(TRIM(w.weather_desc), ''), '--') as weatherDesc,
ROUND(IFNULL(t.peak_charge_diff, 0) * IFNULL(pc.peak, 0), 3) as activePeakPrice, ROUND(SUM(IFNULL(t.peak_charge_diff, 0) * IFNULL(pc.peak, 0)), 3) as activePeakPrice,
ROUND(IFNULL(t.peak_discharge_diff, 0) * IFNULL(pc.peak, 0), 3) as reActivePeakPrice, ROUND(SUM(IFNULL(t.peak_discharge_diff, 0) * IFNULL(pc.peak, 0)), 3) as reActivePeakPrice,
ROUND(IFNULL(t.high_charge_diff, 0) * IFNULL(pc.high, 0), 3) as activeHighPrice, ROUND(SUM(IFNULL(t.high_charge_diff, 0) * IFNULL(pc.high, 0)), 3) as activeHighPrice,
ROUND(IFNULL(t.high_discharge_diff, 0) * IFNULL(pc.high, 0), 3) as reActiveHighPrice, ROUND(SUM(IFNULL(t.high_discharge_diff, 0) * IFNULL(pc.high, 0)), 3) as reActiveHighPrice,
ROUND(IFNULL(t.flat_charge_diff, 0) * IFNULL(pc.flat, 0), 3) as activeFlatPrice, ROUND(SUM(IFNULL(t.flat_charge_diff, 0) * IFNULL(pc.flat, 0)), 3) as activeFlatPrice,
ROUND(IFNULL(t.flat_discharge_diff, 0) * IFNULL(pc.flat, 0), 3) as reActiveFlatPrice, ROUND(SUM(IFNULL(t.flat_discharge_diff, 0) * IFNULL(pc.flat, 0)), 3) as reActiveFlatPrice,
ROUND(IFNULL(t.valley_charge_diff, 0) * IFNULL(pc.valley, 0), 3) as activeValleyPrice, ROUND(SUM(IFNULL(t.valley_charge_diff, 0) * IFNULL(pc.valley, 0)), 3) as activeValleyPrice,
ROUND(IFNULL(t.valley_discharge_diff, 0) * IFNULL(pc.valley, 0), 3) as reActiveValleyPrice ROUND(SUM(IFNULL(t.valley_discharge_diff, 0) * IFNULL(pc.valley, 0)), 3) as reActiveValleyPrice,
ROUND(
SUM(
(IFNULL(t.peak_discharge_diff, 0) - IFNULL(t.peak_charge_diff, 0)) * IFNULL(pc.peak, 0)
+ (IFNULL(t.high_discharge_diff, 0) - IFNULL(t.high_charge_diff, 0)) * IFNULL(pc.high, 0)
+ (IFNULL(t.flat_discharge_diff, 0) - IFNULL(t.flat_charge_diff, 0)) * IFNULL(pc.flat, 0)
+ (IFNULL(t.valley_discharge_diff, 0) - IFNULL(t.valley_charge_diff, 0)) * IFNULL(pc.valley, 0)
),
3
) as actualRevenue
from ems_daily_energy_data t from ems_daily_energy_data t
left join ems_calendar_day c on c.calendar_date = t.data_date left join ems_calendar_day c on c.calendar_date = t.data_date
left join ems_site_weather_day w on w.site_id = t.site_id and w.calendar_date = t.data_date left join ems_site_weather_day w on w.site_id = t.site_id and w.calendar_date = t.data_date
@ -271,6 +333,7 @@
) )
) )
where 1=1 where 1=1
and t.data_hour is not null
<if test="siteId != null"> <if test="siteId != null">
and t.site_id = #{siteId} and t.site_id = #{siteId}
</if> </if>
@ -280,6 +343,9 @@
<if test="endTime != null"> <if test="endTime != null">
and t.data_date &lt;= #{endTime} and t.data_date &lt;= #{endTime}
</if> </if>
group by t.data_date,
COALESCE(c.is_workday, CASE WHEN WEEKDAY(t.data_date) &lt; 5 THEN 1 ELSE 0 END),
COALESCE(NULLIF(TRIM(w.weather_desc), ''), '--')
order by t.data_date desc order by t.data_date desc
</select> </select>

View File

@ -52,7 +52,7 @@
<include refid="selectEmsPointConfigVo"/> <include refid="selectEmsPointConfigVo"/>
<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="pointId != null and pointId != ''">and point_id = #{pointId}</if> <if test="pointId != null and pointId != ''">and point_id like concat('%', #{pointId}, '%')</if>
<if test="deviceCategory != null and deviceCategory != ''">and device_category = #{deviceCategory}</if> <if test="deviceCategory != null and deviceCategory != ''">and device_category = #{deviceCategory}</if>
<if test="deviceId != null and deviceId != ''">and device_id = #{deviceId}</if> <if test="deviceId != null and deviceId != ''">and device_id = #{deviceId}</if>
<if test="dataKey != null and dataKey != ''">and data_key like concat('%', #{dataKey}, '%')</if> <if test="dataKey != null and dataKey != ''">and data_key like concat('%', #{dataKey}, '%')</if>
@ -202,6 +202,36 @@
where id = #{id} where id = #{id}
</update> </update>
<update id="updateEmsPointConfigForImport" parameterType="EmsPointConfig">
update ems_point_config
set point_id = #{pointId},
site_id = #{siteId},
device_category = #{deviceCategory},
device_id = #{deviceId},
point_name = #{pointName},
data_key = #{dataKey},
point_desc = #{pointDesc},
register_address = #{registerAddress},
data_unit = #{dataUnit},
data_a = #{dataA},
data_k = #{dataK},
data_b = #{dataB},
data_bit = #{dataBit},
is_alarm = #{isAlarm},
point_type = #{pointType},
calc_expression = #{calcExpression},
collect_enabled = #{collectEnabled},
collect_source = #{collectSource},
modbus_register_type = #{modbusRegisterType},
modbus_data_type = #{modbusDataType},
modbus_read_order = #{modbusReadOrder},
modbus_group = #{modbusGroup},
update_by = #{updateBy},
update_time = now(),
remark = #{remark}
where id = #{id}
</update>
<delete id="deleteEmsPointConfigById" parameterType="Long"> <delete id="deleteEmsPointConfigById" parameterType="Long">
delete from ems_point_config where id = #{id} delete from ems_point_config where id = #{id}
</delete> </delete>
@ -329,11 +359,11 @@
<include refid="selectEmsPointConfigVo"/> <include refid="selectEmsPointConfigVo"/>
where collect_enabled = 1 where collect_enabled = 1
and collect_source = 'MODBUS' and collect_source = 'MODBUS'
and (point_type is null or point_type <> 'calc') and (point_type is null or point_type &lt;&gt; 'calc')
and (is_alarm is null or is_alarm = 0) and (is_alarm is null or is_alarm = 0)
and register_address is not null and register_address <> '' and register_address is not null and register_address &lt;&gt; ''
and modbus_register_type is not null and modbus_register_type <> '' and modbus_register_type is not null and modbus_register_type &lt;&gt; ''
and modbus_data_type is not null and modbus_data_type <> '' and modbus_data_type is not null and modbus_data_type &lt;&gt; ''
<if test="siteId != null and siteId != ''"> <if test="siteId != null and siteId != ''">
and site_id = #{siteId} and site_id = #{siteId}
</if> </if>

View File

@ -4,6 +4,14 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xzzn.ems.mapper.EmsSiteMonitorPointMatchMapper"> <mapper namespace="com.xzzn.ems.mapper.EmsSiteMonitorPointMatchMapper">
<select id="selectDistinctSiteIds" resultType="java.lang.String">
select distinct site_id
from ems_site_monitor_point_match
where site_id is not null
and site_id != ''
order by site_id asc
</select>
<resultMap id="EmsSiteMonitorPointMatchResult" type="com.xzzn.ems.domain.EmsSiteMonitorPointMatch"> <resultMap id="EmsSiteMonitorPointMatchResult" type="com.xzzn.ems.domain.EmsSiteMonitorPointMatch">
<result property="id" column="id"/> <result property="id" column="id"/>
<result property="siteId" column="site_id"/> <result property="siteId" column="site_id"/>