概率统计-电量指标

This commit is contained in:
2025-07-01 16:25:23 +08:00
parent d24da5363a
commit ed025d2750
9 changed files with 257 additions and 9 deletions

View File

@ -0,0 +1,50 @@
package com.xzzn.web.controller.ems;
import com.xzzn.common.core.controller.BaseController;
import com.xzzn.common.core.domain.AjaxResult;
import com.xzzn.common.utils.StringUtils;
import com.xzzn.ems.domain.vo.DateSearchRequest;
import com.xzzn.ems.service.IEmsStatsReportService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
/**
* 单站监控-统计报表
*
* @author xzzn
*/
@RestController
@RequestMapping("/ems/statsReport")
public class EmsStatisticalReportController extends BaseController
{
@Autowired
private IEmsStatsReportService ieEmsStatsReportService;
/**
* 概率统计-收益指标查询
*/
@GetMapping("/getRevenueData")
public AjaxResult getRevenueData(DateSearchRequest requestVo)
{
return success(null);
}
/**
* 概率统计-电量指标查询
*/
@GetMapping("/getElectricData")
public AjaxResult getElectricData(DateSearchRequest requestVo)
{
if (!StringUtils.isEmpty(requestVo.getSiteId())) {
return success(ieEmsStatsReportService.getElectricDataResult(requestVo));
} else {
return error("站点id必传");
}
}
}

View File

@ -0,0 +1,47 @@
package com.xzzn.ems.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
/**
* 入参-时间
*
*/
public class DateSearchRequest {
/** 开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
private Date startDate;
/** 结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
private Date endDate;
private String siteId;
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public String getSiteId() {
return siteId;
}
public void setSiteId(String siteId) {
this.siteId = siteId;
}
}

View File

@ -0,0 +1,63 @@
package com.xzzn.ems.domain.vo;
import java.math.BigDecimal;
import java.util.List;
/**
* 概率统计-电量指标返回
*
*/
public class ElectricDataInfoVo {
/**
* 总充电量
*/
private BigDecimal totalChargedCap;
/**
* 总放电量
*/
private BigDecimal totalDisChargedCap;
/**
* 综合效率 = 放电量/充电量
*/
private BigDecimal efficiency;
/**
* 按天放电统计
*/
private List<SiteMonitorDataVo> sevenDayDisChargeStats;
public BigDecimal getTotalChargedCap() {
return totalChargedCap;
}
public void setTotalChargedCap(BigDecimal totalChargedCap) {
this.totalChargedCap = totalChargedCap;
}
public BigDecimal getTotalDisChargedCap() {
return totalDisChargedCap;
}
public void setTotalDisChargedCap(BigDecimal totalDisChargedCap) {
this.totalDisChargedCap = totalDisChargedCap;
}
public BigDecimal getEfficiency() {
return efficiency;
}
public void setEfficiency(BigDecimal efficiency) {
this.efficiency = efficiency;
}
public List<SiteMonitorDataVo> getSevenDayDisChargeStats() {
return sevenDayDisChargeStats;
}
public void setSevenDayDisChargeStats(List<SiteMonitorDataVo> sevenDayDisChargeStats) {
this.sevenDayDisChargeStats = sevenDayDisChargeStats;
}
}

View File

@ -22,6 +22,8 @@ public class SiteMonitorDataVo {
*/
private BigDecimal chargedCap;
private BigDecimal dailyEfficiency;
public String getAmmeterDate() {
return ammeterDate;
}
@ -45,4 +47,12 @@ public class SiteMonitorDataVo {
public void setChargedCap(BigDecimal chargedCap) {
this.chargedCap = chargedCap;
}
public BigDecimal getDailyEfficiency() {
return dailyEfficiency;
}
public void setDailyEfficiency(BigDecimal dailyEfficiency) {
this.dailyEfficiency = dailyEfficiency;
}
}

View File

@ -6,10 +6,7 @@ import java.util.List;
import java.util.Map;
import com.xzzn.ems.domain.EmsPcsData;
import com.xzzn.ems.domain.vo.ElectricIndexList;
import com.xzzn.ems.domain.vo.PcsDetailInfoVo;
import com.xzzn.ems.domain.vo.SiteMonitorDataVo;
import com.xzzn.ems.domain.vo.SiteMonitorRunningHeadInfoVo;
import com.xzzn.ems.domain.vo.*;
import org.apache.ibatis.annotations.Param;
/**
@ -103,9 +100,8 @@ public interface EmsPcsDataMapper
/**
* 根据时间按天获取充放电量
* @param startDate
* @param endDate
* @param requestVo
* @return
*/
public List<SiteMonitorDataVo> getPcsDataByDate(Date startDate, Date endDate);
public List<SiteMonitorDataVo> getPcsDataByDate(DateSearchRequest requestVo);
}

View File

@ -0,0 +1,16 @@
package com.xzzn.ems.service;
import com.xzzn.ems.domain.vo.DateSearchRequest;
import com.xzzn.ems.domain.vo.ElectricDataInfoVo;;import java.util.Date;
/**
* 统计报表数据Service接口
*
* @author xzzn
* @date 2025-06-29
*/
public interface IEmsStatsReportService
{
public ElectricDataInfoVo getElectricDataResult(DateSearchRequest requestVo);
}

View File

@ -0,0 +1,62 @@
package com.xzzn.ems.service.impl;
import com.xzzn.ems.domain.vo.DateSearchRequest;
import com.xzzn.ems.domain.vo.ElectricDataInfoVo;
import com.xzzn.ems.domain.vo.SiteMonitorDataVo;
import com.xzzn.ems.mapper.EmsPcsDataMapper;
import com.xzzn.ems.service.IEmsStatsReportService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
/**
* 统计报表数据Service业务层处理
*
* @author xzzn
* @date 2025-06-29
*/
@Service
public class EmsStatsReportServiceImpl implements IEmsStatsReportService
{
@Autowired
private EmsPcsDataMapper emsPcsDataMapper;
@Override
public ElectricDataInfoVo getElectricDataResult(DateSearchRequest requestVo) {
ElectricDataInfoVo electricDataInfoVo = new ElectricDataInfoVo();
// 根据时间获取每天的充放电量
List<SiteMonitorDataVo> dataList = emsPcsDataMapper.getPcsDataByDate(requestVo);
if (!CollectionUtils.isEmpty(dataList)){
// 总充、总放、效率
BigDecimal totalDischarge = new BigDecimal(0);
BigDecimal totalCharge = new BigDecimal(0);
BigDecimal efficiency = new BigDecimal(0);
for (SiteMonitorDataVo siteMonitorDataVo : dataList) {
totalDischarge = totalDischarge.add(siteMonitorDataVo.getDisChargedCap() == null ? BigDecimal.ZERO : siteMonitorDataVo.getDisChargedCap());
totalCharge = totalCharge.add(siteMonitorDataVo.getChargedCap() == null ? BigDecimal.ZERO : siteMonitorDataVo.getChargedCap());
// 计算单天的效率
BigDecimal dailyEfficiency = new BigDecimal(0);
if ( siteMonitorDataVo.getDisChargedCap().compareTo(BigDecimal.ZERO)>0){
dailyEfficiency = siteMonitorDataVo.getDisChargedCap().divide(siteMonitorDataVo.getChargedCap(), 2, RoundingMode.HALF_UP);
}
siteMonitorDataVo.setDailyEfficiency(dailyEfficiency);
}
if ( totalCharge.compareTo(BigDecimal.ZERO)>0){
efficiency = totalDischarge.divide(totalCharge, 2, RoundingMode.HALF_UP);
}
electricDataInfoVo.setSevenDayDisChargeStats(dataList);
electricDataInfoVo.setTotalDisChargedCap(totalDischarge);
electricDataInfoVo.setTotalChargedCap(totalCharge);
electricDataInfoVo.setEfficiency(efficiency);
}
return electricDataInfoVo;
}
}

View File

@ -151,7 +151,7 @@
</select>
<select id="getAllClusterInfoByStackId" parameterType="String" resultType="java.util.Map">
select distinct t.device_id,t.device_name from ems_devices_setting t where t.parent_id = #{stackDeviceId}
select distinct t.device_id as id,t.device_name as deviceName from ems_devices_setting t where t.parent_id = #{stackDeviceId}
</select>
<select id="getAllBatteryDeviceBySiteId" parameterType="String" resultType="com.xzzn.ems.domain.EmsDevicesSetting">

View File

@ -379,6 +379,10 @@
from ( SELECT p.site_id, p.device_id,p.date_month,p.date_day, MAX(p.data_update_time) AS max_update_time
FROM ems_pcs_data p
where p.site_id = #{siteId}
<if test="startDate != null and endDate != null">
and p.data_update_time &gt;= #{startDate}
and p.data_update_time &lt; DATE_ADD(#{endDate}, INTERVAL 1 DAY)
</if>
GROUP BY p.site_id,p.device_id,p.date_month,p.date_day
) latest inner join ems_pcs_data t ON latest.site_id = t.site_id
AND latest.device_id = t.device_id
@ -386,6 +390,6 @@
and latest.date_month = t.date_month
and latest.date_day = t.date_day
group by ammeterDate
order by ammeterDate desc
order by ammeterDate desc;
</select>
</mapper>