数据20250904优化-单站监控首页点位数据展示

This commit is contained in:
2025-09-16 00:31:58 +08:00
parent 2bb78dc020
commit cb39131871
15 changed files with 457 additions and 20 deletions

2
.idea/misc.xml generated
View File

@ -8,5 +8,5 @@
</list> </list>
</option> </option>
</component> </component>
<component name="ProjectRootManager" version="2" project-jdk-name="openjdk-24" project-jdk-type="JavaSDK" /> <component name="ProjectRootManager" version="2" languageLevel="JDK_24" default="true" project-jdk-name="openjdk-24" project-jdk-type="JavaSDK" />
</project> </project>

View File

@ -3,6 +3,7 @@ package com.xzzn.web.controller.ems;
import com.xzzn.common.core.controller.BaseController; import com.xzzn.common.core.controller.BaseController;
import com.xzzn.common.core.domain.AjaxResult; import com.xzzn.common.core.domain.AjaxResult;
import com.xzzn.common.core.page.TableDataInfo; import com.xzzn.common.core.page.TableDataInfo;
import com.xzzn.common.utils.StringUtils;
import com.xzzn.ems.domain.vo.BMSBatteryDataList; import com.xzzn.ems.domain.vo.BMSBatteryDataList;
import com.xzzn.ems.domain.vo.BatteryDataStatsListVo; import com.xzzn.ems.domain.vo.BatteryDataStatsListVo;
import com.xzzn.ems.domain.vo.DateSearchRequest; import com.xzzn.ems.domain.vo.DateSearchRequest;
@ -184,4 +185,19 @@ public class EmsSiteMonitorController extends BaseController{
{ {
return success(iSingleSiteService.getAmmeterDataList(siteId)); return success(iSingleSiteService.getAmmeterDataList(siteId));
} }
/**
* 单站监控-首页-点位展示
* 储能功率、电网功率、负荷功率、光伏功率
* SOC、SOH、电池平均温度
*/
@GetMapping("/getPointData")
public AjaxResult getPointData(DateSearchRequest requestVo)
{
if (!StringUtils.isEmpty(requestVo.getSiteId())) {
return success(iSingleSiteService.getPointData(requestVo));
} else {
return error("缺少必传项");
}
}
} }

View File

@ -0,0 +1,103 @@
package com.xzzn.ems.domain.vo;
import java.math.BigDecimal;
/**
* 单站监控-首页-点位重点数据展示
*/
public class PointDataResponse{
/** 数据日期 */
private String statisDate;
/** 电网功率-total_active_power(LOAD */
private BigDecimal gridPower;
/** 负载功率 */
private BigDecimal loadPower;
/** 储能功率-secondary_total_active_power(METE) */
private BigDecimal storagePower;
/** 光伏功率-total_active_power(METEGT) */
private BigDecimal pvPower;
/** SOC */
private BigDecimal avgSoc;
/** SOH */
private BigDecimal avgSoh;
/** 电池平均温度 */
private BigDecimal avgTemp;
public PointDataResponse(String statisDate,
BigDecimal pvPower, BigDecimal storagePower, BigDecimal loadPower, BigDecimal gridPower,
BigDecimal avgSoh, BigDecimal avgSoc,BigDecimal avgTemp
) {
this.avgTemp = avgTemp;
this.avgSoh = avgSoh;
this.avgSoc = avgSoc;
this.pvPower = pvPower;
this.storagePower = storagePower;
this.loadPower = loadPower;
this.gridPower = gridPower;
this.statisDate = statisDate;
}
public BigDecimal getAvgTemp() {
return avgTemp;
}
public void setAvgTemp(BigDecimal avgTemp) {
this.avgTemp = avgTemp;
}
public BigDecimal getAvgSoc() {
return avgSoc;
}
public void setAvgSoc(BigDecimal avgSoc) {
this.avgSoc = avgSoc;
}
public BigDecimal getAvgSoh() {
return avgSoh;
}
public void setAvgSoh(BigDecimal avgSoh) {
this.avgSoh = avgSoh;
}
public String getStatisDate() {
return statisDate;
}
public void setStatisDate(String statisDate) {
this.statisDate = statisDate;
}
public BigDecimal getGridPower() {
return gridPower;
}
public void setGridPower(BigDecimal gridPower) {
this.gridPower = gridPower;
}
public BigDecimal getLoadPower() {
return loadPower;
}
public void setLoadPower(BigDecimal loadPower) {
this.loadPower = loadPower;
}
public BigDecimal getStoragePower() {
return storagePower;
}
public void setStoragePower(BigDecimal storagePower) {
this.storagePower = storagePower;
}
public BigDecimal getPvPower() {
return pvPower;
}
public void setPvPower(BigDecimal pvPower) {
this.pvPower = pvPower;
}
}

View File

@ -0,0 +1,50 @@
package com.xzzn.ems.domain.vo;
import java.math.BigDecimal;
/**
* 单站监控-首页-电池堆点位数据
*/
public class StackPointVo{
private String statisDate;
/** SOC */
private BigDecimal avgSoc;
/** SOH */
private BigDecimal avgSoh;
/** 电池平均温度 */
private BigDecimal avgTemp;
public String getStatisDate() {
return statisDate;
}
public void setStatisDate(String statisDate) {
this.statisDate = statisDate;
}
public BigDecimal getAvgTemp() {
return avgTemp;
}
public void setAvgTemp(BigDecimal avgTemp) {
this.avgTemp = avgTemp;
}
public BigDecimal getAvgSoc() {
return avgSoc;
}
public void setAvgSoc(BigDecimal avgSoc) {
this.avgSoc = avgSoc;
}
public BigDecimal getAvgSoh() {
return avgSoh;
}
public void setAvgSoh(BigDecimal avgSoh) {
this.avgSoh = avgSoh;
}
}

View File

@ -12,12 +12,12 @@ public class StackStatisListVo {
private String statisDate; private String statisDate;
/** /**
* 有功 * 温度
*/ */
private BigDecimal temp; private BigDecimal temp;
/** /**
* 无功 * 电压
*/ */
private BigDecimal voltage; private BigDecimal voltage;

View File

@ -1,7 +1,10 @@
package com.xzzn.ems.mapper; package com.xzzn.ems.mapper;
import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import com.xzzn.ems.domain.EmsBatteryCluster; import com.xzzn.ems.domain.EmsBatteryCluster;
import com.xzzn.ems.domain.vo.*; import com.xzzn.ems.domain.vo.*;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -83,4 +86,9 @@ public interface EmsBatteryClusterMapper
/** 堆电池温度数据-获取当天每小时簇 */ /** 堆电池温度数据-获取当天每小时簇 */
public List<ClusterStatisListVo> getClusterDataByHour(StatisClusterDateRequest requestVo); public List<ClusterStatisListVo> getClusterDataByHour(StatisClusterDateRequest requestVo);
// 奉贤-电池平均温度
public List<Map<String, BigDecimal>> getAvgTempByHour(DateSearchRequest requestVo);
public List<Map<String, BigDecimal>> getAvgTempByDay(DateSearchRequest requestVo);
public List<Map<String, BigDecimal>> getAvgTempByMonth(DateSearchRequest requestVo);
} }

View File

@ -5,6 +5,7 @@ import java.util.List;
import com.xzzn.ems.domain.EmsBatteryStack; import com.xzzn.ems.domain.EmsBatteryStack;
import com.xzzn.ems.domain.vo.DateSearchRequest; import com.xzzn.ems.domain.vo.DateSearchRequest;
import com.xzzn.ems.domain.vo.StackAveTempVo; import com.xzzn.ems.domain.vo.StackAveTempVo;
import com.xzzn.ems.domain.vo.StackPointVo;
import com.xzzn.ems.domain.vo.StackStatisListVo; import com.xzzn.ems.domain.vo.StackStatisListVo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -85,4 +86,9 @@ public interface EmsBatteryStackMapper
public List<StackStatisListVo> getStackDataByMonth(DateSearchRequest requestVo); public List<StackStatisListVo> getStackDataByMonth(DateSearchRequest requestVo);
public EmsBatteryStack getSiteSumStackInfo(String siteId); public EmsBatteryStack getSiteSumStackInfo(String siteId);
// 点位数据 - soc/soh/temp
public List<StackPointVo> getStackPointByHour(DateSearchRequest requestVo);
public List<StackPointVo> getStackPointByDay(DateSearchRequest requestVo);
public List<StackPointVo> getStackPointByMonth(DateSearchRequest requestVo);
} }

View File

@ -39,4 +39,6 @@ public interface ISingleSiteService
public SiteMonitorRuningInfoVo getRunningGraphBatteryTemp(String siteId); public SiteMonitorRuningInfoVo getRunningGraphBatteryTemp(String siteId);
public List<BMSBatteryDataList> getClusterBatteryList(String siteId, String stackDeviceId, String clusterDeviceId); public List<BMSBatteryDataList> getClusterBatteryList(String siteId, String stackDeviceId, String clusterDeviceId);
public List<PointDataResponse> getPointData(DateSearchRequest requestVo);
} }

View File

@ -40,10 +40,6 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
@Autowired @Autowired
private EmsDevicesSettingMapper emsDevicesSettingMapper; private EmsDevicesSettingMapper emsDevicesSettingMapper;
@Autowired @Autowired
private EmsBatteryDataMapper emsBatteryDataMapper;
@Autowired
private EmsBatteryDailyLatestMapper emsBatteryDailyLatestMapper;
@Autowired
private EmsBatteryDataDayMapper emsBatteryDataDayMapper; private EmsBatteryDataDayMapper emsBatteryDataDayMapper;
@Autowired @Autowired
private EmsDailyChargeDataMapper emsDailyChargeDataMapper; private EmsDailyChargeDataMapper emsDailyChargeDataMapper;
@ -353,8 +349,6 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
} }
private void dealDataPower(String siteId, List<PowerStatisListVo> dataList) { private void dealDataPower(String siteId, List<PowerStatisListVo> dataList) {
DecimalFormat df = new DecimalFormat("0.####");
if (dataList == null || dataList.size() == 0){ if (dataList == null || dataList.size() == 0){
return; return;
} }

View File

@ -7,7 +7,6 @@ import com.alibaba.fastjson2.TypeReference;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.xzzn.common.constant.Constants;
import com.xzzn.common.constant.RedisKeyConstants; import com.xzzn.common.constant.RedisKeyConstants;
import com.xzzn.common.core.redis.RedisCache; import com.xzzn.common.core.redis.RedisCache;
import com.xzzn.common.enums.*; import com.xzzn.common.enums.*;
@ -23,12 +22,10 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
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;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
@Service @Service
public class FXXDataProcessServiceImpl extends AbstractBatteryDataProcessor implements IFXXDataProcessService { public class FXXDataProcessServiceImpl extends AbstractBatteryDataProcessor implements IFXXDataProcessService {

View File

@ -4,6 +4,7 @@ import com.xzzn.common.constant.RedisKeyConstants;
import com.xzzn.common.core.redis.RedisCache; import com.xzzn.common.core.redis.RedisCache;
import com.xzzn.common.enums.AmmeterCategory; import com.xzzn.common.enums.AmmeterCategory;
import com.xzzn.common.enums.DeviceCategory; import com.xzzn.common.enums.DeviceCategory;
import com.xzzn.common.enums.SiteEnum;
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.*;
@ -38,19 +39,26 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
private static final String AMMETER_DEVICE_METE = "METE"; private static final String AMMETER_DEVICE_METE = "METE";
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
}
@Autowired @Autowired
private EmsPcsDataMapper emsPcsDataMapper; private EmsPcsDataMapper emsPcsDataMapper;
@Autowired @Autowired
private EmsAlarmRecordsMapper emsAlarmRecordsMapper; private EmsAlarmRecordsMapper emsAlarmRecordsMapper;
@Autowired @Autowired
private EmsBatteryDataMapper emsBatteryDataMapper;
@Autowired
private EmsBatteryStackMapper emsBatteryStackMapper; private EmsBatteryStackMapper emsBatteryStackMapper;
@Autowired @Autowired
private EmsBatteryClusterMapper emsBatteryClusterMapper; private EmsBatteryClusterMapper emsBatteryClusterMapper;
@Autowired @Autowired
private EmsPcsBranchDataMapper emsPcsBranchDataMapper;
@Autowired
private EmsCoolingDataMapper emsCoolingDataMapper; private EmsCoolingDataMapper emsCoolingDataMapper;
@Autowired @Autowired
private EmsAmmeterDataMapper emsAmmeterDataMapper; private EmsAmmeterDataMapper emsAmmeterDataMapper;
@ -537,4 +545,160 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
} }
/**
* 单站监控-首页-获取重点数据
* @param requestVo
* @return
*/
@Override
public List<PointDataResponse> getPointData(DateSearchRequest requestVo) {
List<PointDataResponse> responseList = new ArrayList<>();
List<PowerStatisListVo> powerList = new ArrayList<>();//功率数据
List<StackPointVo> stackList = new ArrayList<>();//电池堆数据
List<Map<String,BigDecimal>> fxAvgTempList = new ArrayList<>();
// 默认时间-7天
dealRequestTime(requestVo);
Date startDate = requestVo.getStartDate();
Date endDate = requestVo.getEndDate();
List<String> timeList = new ArrayList<>();
// 开始日期和结束日期同一天,展示 0-24 小时数据
if (DateUtils.isSameDay(startDate, endDate)){
endDate = DateUtils.addDays(endDate, 1);
requestVo.setEndDate(endDate);
powerList = emsAmmeterDataMapper.getPowerDataByHour(requestVo);//功率数据
stackList = emsBatteryStackMapper.getStackPointByHour(requestVo);//电池堆数据
if (SiteEnum.FX.getCode().equals(requestVo.getSiteId())){
fxAvgTempList = emsBatteryClusterMapper.getAvgTempByHour(requestVo);
}
} else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 1
&& DateUtils.differentDaysByMillisecond(endDate, startDate) < 30){
endDate = DateUtils.addDays(endDate, 1);
requestVo.setEndDate(endDate);
// 开始日期-结束日期大于 1 天小于30 天,按天展示数据
powerList = emsAmmeterDataMapper.getPowerDataByDay(requestVo);//功率数据
stackList = emsBatteryStackMapper.getStackPointByDay(requestVo);//电池堆数据
if (SiteEnum.FX.getCode().equals(requestVo.getSiteId())){
fxAvgTempList = emsBatteryClusterMapper.getAvgTempByDay(requestVo);
}
} else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 30){
endDate = DateUtils.addDays(endDate, 1);
requestVo.setEndDate(endDate);
// 开始日期-结束日期大于 1 个月,按月展示数据
powerList = emsAmmeterDataMapper.getPowerDataByMonth(requestVo);//功率数据
stackList = emsBatteryStackMapper.getStackPointByMonth(requestVo);//电池堆数据
if (SiteEnum.FX.getCode().equals(requestVo.getSiteId())){
fxAvgTempList = emsBatteryClusterMapper.getAvgTempByMonth(requestVo);
}
}
// 如果奉贤数据电池平均温度单独取值。将其塞入stackList里面
if (SiteEnum.FX.getCode().equals(requestVo.getSiteId())){
processFXXTempData(stackList,fxAvgTempList);
}
// 数据转换为Map
Map<String, PowerStatisListVo> powerMap = powerList.stream()
.collect(Collectors.toMap(PowerStatisListVo::getStatisDate, stat -> stat));
Map<String, StackPointVo> stackMap = stackList.stream()
.collect(Collectors.toMap(StackPointVo::getStatisDate, stat -> stat));
// 收集所有日期
Set<String> allDates = new HashSet<>();
allDates.addAll(powerMap.keySet());
allDates.addAll(stackMap.keySet());
// 按日期合并数据
responseList = allDates.stream()
.map(date -> {
PowerStatisListVo powerStat = powerMap.get(date);
StackPointVo stackStat = stackMap.get(date);
// null时取0
BigDecimal pvPower = powerStat != null ? powerStat.getPvPower() : BigDecimal.ZERO;
BigDecimal storagePower = powerStat != null ? powerStat.getStoragePower() : BigDecimal.ZERO;
BigDecimal gridPower = powerStat != null ? powerStat.getGridPower() : BigDecimal.ZERO;
BigDecimal avgSoh = stackStat != null ? stackStat.getAvgSoh() : BigDecimal.ZERO;
BigDecimal avgSoc = stackStat != null ? stackStat.getAvgSoc() : BigDecimal.ZERO;
BigDecimal avgTemp = stackStat != null ? stackStat.getAvgTemp() : BigDecimal.ZERO;
// 假设完整构造参数(补充原代码中缺失的部分)
return new PointDataResponse(date, pvPower, storagePower, BigDecimal.ZERO, gridPower, avgSoh, avgSoc, avgTemp);
})
// 按日期排序
.sorted(Comparator.comparing(PointDataResponse::getStatisDate))
.collect(Collectors.toList());
// 处理数据系数 &负荷功率
dealDataPower(requestVo.getSiteId(),responseList);
return responseList;
}
private void dealDataPower(String siteId, List<PointDataResponse> dataList) {
if (dataList == null || dataList.size() == 0){
return;
}
for (PointDataResponse pointDataResponse : dataList) {
BigDecimal gridPower = pointDataResponse.getGridPower() == null ? BigDecimal.ZERO : pointDataResponse.getGridPower();
BigDecimal storagePower = pointDataResponse.getStoragePower() == null ? BigDecimal.ZERO : pointDataResponse.getStoragePower();
BigDecimal pvPower = pointDataResponse.getPvPower() == null ? BigDecimal.ZERO : pointDataResponse.getPvPower();
BigDecimal loadPower = new BigDecimal(0);
// 电动所:储能功率=储能功率乘0.1;光伏功率=光伏功率*乘-0.001;负荷功率=电网功率+光伏功率-储能功率
// 奉贤:负荷功率=电网功率-储能功率;
// 电动所:储能功率=储能功率乘0.1;光伏功率=光伏功率*乘-0.001;负荷功率=电网功率+光伏功率-储能功率
if (SiteEnum.DDS.getCode().equals(siteId)){
pointDataResponse.setStoragePower(storagePower.multiply(storageFactor.get(siteId)).stripTrailingZeros());
pointDataResponse.setPvPower(pvPower.multiply(pvFactor.get(siteId)).stripTrailingZeros());
loadPower = gridPower.add(pointDataResponse.getPvPower()).subtract(pointDataResponse.getStoragePower());
pointDataResponse.setLoadPower(loadPower);
} else if (SiteEnum.FX.getCode().equals(siteId)){
// 奉贤:负荷功率=电网功率-储能功率;
loadPower = gridPower.subtract(storagePower);
pointDataResponse.setLoadPower(loadPower);
}
}
}
private void processFXXTempData(List<StackPointVo> stackList, List<Map<String, BigDecimal>> fxAvgTempList) {
if (stackList == null || fxAvgTempList == null) {
return;
}
Map<String,BigDecimal> fxAvgTempMap = fxAvgTempList.stream()
.filter(subMap -> subMap != null && !subMap.isEmpty())
.filter(subMap -> subMap.containsKey("statisDate") && subMap.containsKey("avgTemp"))
.collect(Collectors.toMap(
subMap -> String.valueOf(subMap.get("statisDate")),
subMap -> (BigDecimal)subMap.get("avgTemp"),
(existingValue, newValue) -> newValue,
HashMap::new
));
for (StackPointVo stackPointVo : stackList) {
// 从map中获取temp
BigDecimal mapTemp = (fxAvgTempMap != null) ? fxAvgTempMap.get(stackPointVo.getStatisDate()) : null;
if (mapTemp != null) {
stackPointVo.setAvgTemp(mapTemp);
}
}
}
// 统计入参时间处理
public void dealRequestTime(DateSearchRequest requestVo){
Date startDate = requestVo.getStartDate();
Date endDate = requestVo.getEndDate();
if (startDate == null && endDate == null) {
// 如果没有传时间默认从今天往前7天
LocalDate sevenDaysAgo = LocalDate.now().minusDays(6);
startDate = DateUtils.toDate(sevenDaysAgo);
endDate = new Date();
requestVo.setStartDate(startDate);
requestVo.setEndDate(endDate);
}
}
} }

View File

@ -984,7 +984,7 @@
<select id="getPowerDataByHour" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.PowerStatisListVo"> <select id="getPowerDataByHour" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.PowerStatisListVo">
select latest.dateHour as statisDate, select latest.dateHour as statisDate,
<include refid="powerFilter"/> <include refid="powerFilter"/>
from ( SELECT p.site_id, p.device_id,DATE_FORMAT(p.data_update_time, '%H')+1 AS dateHour,MAX(p.data_update_time) as max_update_time from ( SELECT p.site_id, p.device_id,DATE_FORMAT(p.data_update_time, '%H:00') AS dateHour,MAX(p.data_update_time) as max_update_time
FROM ems_ammeter_data p FROM ems_ammeter_data p
<include refid="commonFilter"/> <include refid="commonFilter"/>
GROUP BY p.site_id,p.device_id,dateHour GROUP BY p.site_id,p.device_id,dateHour

View File

@ -374,4 +374,53 @@
AND latest.max_update_time = t.update_time AND latest.max_update_time = t.update_time
ORDER BY statisDate ORDER BY statisDate
</select> </select>
<sql id="statisCommonFilter">
WHERE p.site_id = #{siteId}
<if test="startDate != null">
AND p.update_time &gt;= #{startDate}
</if>
<if test="endDate != null">
AND p.update_time &lt; #{endDate}
</if>
</sql>
<select id="getAvgTempByHour" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="java.util.Map">
SELECT latest.statisDate, avg(t.avg_cell_temp) as avgTemp
FROM ( SELECT p.site_id, p.device_id, DATE_FORMAT( p.update_time, '%H:00') AS statisDate, MAX(p.update_time) AS max_update_time
FROM ems_battery_cluster p
<include refid="statisCommonFilter"/>
GROUP BY p.site_id, p.device_id, statisDate
) latest INNER JOIN ems_battery_cluster t ON latest.site_id = t.site_id
AND latest.device_id = t.device_id
AND latest.max_update_time = t.update_time
GROUP BY statisDate
ORDER BY statisDate
</select>
<select id="getAvgTempByDay" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="java.util.Map">
SELECT latest.statisDate, avg(t.avg_cell_temp) as avgTemp
FROM ( SELECT p.site_id, p.device_id, DATE( p.update_time) AS statisDate, MAX(p.update_time) AS max_update_time
FROM ems_battery_cluster p
<include refid="statisCommonFilter"/>
GROUP BY p.site_id, p.device_id, statisDate
) latest INNER JOIN ems_battery_cluster t ON latest.site_id = t.site_id
AND latest.device_id = t.device_id
AND latest.max_update_time = t.update_time
GROUP BY statisDate
ORDER BY statisDate
</select>
<select id="getAvgTempByMonth" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="java.util.Map">
SELECT latest.statisDate, avg(t.avg_cell_temp) as avgTemp
FROM ( SELECT p.site_id, p.device_id, DATE_FORMAT(p.update_time, '%Y-%m') AS statisDate, MAX(p.update_time) AS max_update_time
FROM ems_battery_cluster p
<include refid="statisCommonFilter"/>
GROUP BY p.site_id, p.device_id, statisDate
) latest INNER JOIN ems_battery_cluster t ON latest.site_id = t.site_id
AND latest.device_id = t.device_id
AND latest.max_update_time = t.update_time
GROUP BY statisDate
ORDER BY statisDate
</select>
</mapper> </mapper>

View File

@ -391,7 +391,7 @@
select latest.dateHour as statisDate, select latest.dateHour as statisDate,
t.device_id as deviceId, t.device_id as deviceId,
<include refid="dataTypeChooseFilter"/> <include refid="dataTypeChooseFilter"/>
from ( SELECT p.site_id, p.device_id,DATE_FORMAT(p.update_time, '%H')+1 AS dateHour,MAX(p.update_time) as max_update_time from ( SELECT p.site_id, p.device_id,DATE_FORMAT(p.update_time, '%H:00') AS dateHour,MAX(p.update_time) as max_update_time
FROM ems_battery_stack p FROM ems_battery_stack p
<include refid="statisCommonFilter"/> <include refid="statisCommonFilter"/>
GROUP BY p.site_id,p.device_id,dateHour GROUP BY p.site_id,p.device_id,dateHour
@ -443,4 +443,52 @@
and t.create_time = latest.max_time and t.create_time = latest.max_time
where t.site_id = #{siteId} where t.site_id = #{siteId}
</select> </select>
<select id="getStackPointByHour" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.StackPointVo">
select latest.dateHour as statisDate,
avg(t.stack_soc) as avgSoc,
avg(t.stack_soh) as avgSoh,
avg(t.avg_temperature) as avgTemp
from ( SELECT p.site_id, p.device_id, DATE_FORMAT(p.update_time, '%H:00') AS dateHour,MAX(p.update_time) as max_update_time
FROM ems_battery_stack p
<include refid="statisCommonFilter"/>
GROUP BY p.site_id,p.device_id,dateHour
) latest inner join ems_battery_stack t ON latest.site_id = t.site_id
AND latest.device_id = t.device_id
AND latest.max_update_time = t.update_time
GROUP BY latest.dateHour
ORDER BY statisDate
</select>
<select id="getStackPointByDay" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.StackPointVo">
select latest.dateDay as statisDate,
avg(t.stack_soc) as avgSoc,
avg(t.stack_soh) as avgSoh,
avg(t.avg_temperature) as avgTemp
from ( SELECT p.site_id, p.device_id, DATE(p.update_time) AS dateDay,MAX(p.update_time) as max_update_time
FROM ems_battery_stack p
<include refid="statisCommonFilter"/>
GROUP BY p.site_id,p.device_id,dateDay
) latest inner join ems_battery_stack t ON latest.site_id = t.site_id
AND latest.device_id = t.device_id
AND latest.max_update_time = t.update_time
GROUP BY latest.dateDay
ORDER BY statisDate
</select>
<select id="getStackPointByMonth" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.StackPointVo">
select latest.dateMonth as statisDate,
avg(t.stack_soc) as avgSoc,
avg(t.stack_soh) as avgSoh,
avg(t.avg_temperature) as avgTemp
from ( SELECT p.site_id, p.device_id, DATE_FORMAT(p.update_time, '%Y-%m') AS dateMonth,MAX(p.update_time) as max_update_time
FROM ems_battery_stack p
<include refid="statisCommonFilter"/>
GROUP BY p.site_id,p.device_id,dateMonth
) latest inner join ems_battery_stack t ON latest.site_id = t.site_id
AND latest.device_id = t.device_id
AND latest.max_update_time = t.update_time
GROUP BY latest.dateMonth
ORDER BY statisDate
</select>
</mapper> </mapper>

View File

@ -456,7 +456,7 @@
select latest.dateHour as ammeterDate, select latest.dateHour as ammeterDate,
sum(t.daily_ac_charge_energy) as chargedCap, sum(t.daily_ac_charge_energy) as chargedCap,
sum(t.daily_ac_discharge_energy) as disChargedCap sum(t.daily_ac_discharge_energy) as disChargedCap
from ( SELECT p.site_id, p.device_id,DATE_FORMAT(p.data_update_time, '%H')+1 AS dateHour,MAX(p.data_update_time) as max_update_time from ( SELECT p.site_id, p.device_id,DATE_FORMAT(p.data_update_time, '%H:00') AS dateHour,MAX(p.data_update_time) as max_update_time
FROM ems_pcs_data p FROM ems_pcs_data p
<include refid="commonFilter"/> <include refid="commonFilter"/>
GROUP BY p.site_id,p.device_id,dateHour GROUP BY p.site_id,p.device_id,dateHour
@ -530,7 +530,7 @@
select latest.dateHour as statisDate, select latest.dateHour as statisDate,
t.device_id as deviceId, t.device_id as deviceId,
<include refid="dataTypeChooseFilter"/> <include refid="dataTypeChooseFilter"/>
from ( SELECT p.site_id, p.device_id,DATE_FORMAT(p.data_update_time, '%H')+1 AS dateHour,MAX(p.data_update_time) as max_update_time from ( SELECT p.site_id, p.device_id,DATE_FORMAT(p.data_update_time, '%H:00') AS dateHour,MAX(p.data_update_time) as max_update_time
FROM ems_pcs_data p FROM ems_pcs_data p
<include refid="statisCommonFilter"/> <include refid="statisCommonFilter"/>
GROUP BY p.site_id,p.device_id,dateHour GROUP BY p.site_id,p.device_id,dateHour