单站监控-电表取数逻辑修改
This commit is contained in:
@ -5,14 +5,18 @@ package com.xzzn.common.enums;
|
||||
*
|
||||
* @author xzzn
|
||||
*/
|
||||
public enum AmmeterCategoryStatus
|
||||
public enum AmmeterCategory
|
||||
{
|
||||
TOTAL_CHARGE("1", "累计充电量"), TOTAL_DISCHARGE("2", "累计放电量"), DAILY_CHARGE("3", "日充电量"), DAILY_DISCHARGE("4", "日放电量");
|
||||
CURRENT_COMB_ACTIVE("1", "当前组合有功电能"),
|
||||
CURRENT_COMB_REACTIVE("2", "当前组合无功"),
|
||||
A_POWER("3", "A相功率"),
|
||||
B_POWER("4", "B相功率"),
|
||||
C_POWER("5", "C相功率");
|
||||
|
||||
private final String code;
|
||||
private final String info;
|
||||
|
||||
AmmeterCategoryStatus(String code, String info)
|
||||
AmmeterCategory(String code, String info)
|
||||
{
|
||||
this.code = code;
|
||||
this.info = info;
|
@ -0,0 +1,31 @@
|
||||
package com.xzzn.ems.domain.vo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 电表数据
|
||||
*/
|
||||
public class AmmeterDataResponse {
|
||||
|
||||
/** 总表信息 */
|
||||
private AmmeterLoadDataVo ammeterLoadData;
|
||||
|
||||
/** 储能表信息 */
|
||||
private AmmeterMeteDataVo ammeterMeteData;
|
||||
|
||||
public AmmeterLoadDataVo getAmmeterLoadData() {
|
||||
return ammeterLoadData;
|
||||
}
|
||||
|
||||
public void setAmmeterLoadDataVoList(AmmeterLoadDataVo ammeterLoadData) {
|
||||
this.ammeterLoadData = ammeterLoadData;
|
||||
}
|
||||
|
||||
public AmmeterMeteDataVo getAmmeterMeteData() {
|
||||
return ammeterMeteData;
|
||||
}
|
||||
|
||||
public void setAmmeterMeteDataVoList(AmmeterMeteDataVo ammeterMeteData) {
|
||||
this.ammeterMeteData = ammeterMeteData;
|
||||
}
|
||||
}
|
@ -6,9 +6,9 @@ import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 电表数据
|
||||
* 电表-总表数据
|
||||
*/
|
||||
public class AmmeterDataVo {
|
||||
public class AmmeterLoadDataVo {
|
||||
|
||||
/** 电表名称 */
|
||||
private String deviceName;
|
||||
@ -20,7 +20,8 @@ public class AmmeterDataVo {
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date dataUpdateTime;
|
||||
|
||||
private List<AmmeterDataDetailInfo> ammeterDataDetailInfos;
|
||||
/** 总表数据信息 */
|
||||
private List<LoadDataDetailInfo> loadDataDetailInfo;
|
||||
|
||||
public String getDeviceName() {
|
||||
return deviceName;
|
||||
@ -46,11 +47,11 @@ public class AmmeterDataVo {
|
||||
this.dataUpdateTime = dataUpdateTime;
|
||||
}
|
||||
|
||||
public List<AmmeterDataDetailInfo> getAmmeterDataDetailInfos() {
|
||||
return ammeterDataDetailInfos;
|
||||
public List<LoadDataDetailInfo> getLoadDataDetailInfo() {
|
||||
return loadDataDetailInfo;
|
||||
}
|
||||
|
||||
public void setAmmeterDataDetailInfos(List<AmmeterDataDetailInfo> ammeterDataDetailInfos) {
|
||||
this.ammeterDataDetailInfos = ammeterDataDetailInfos;
|
||||
public void setLoadDataDetailInfo(List<LoadDataDetailInfo> loadDataDetailInfo) {
|
||||
this.loadDataDetailInfo = loadDataDetailInfo;
|
||||
}
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package com.xzzn.ems.domain.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 电表-总表数据
|
||||
*/
|
||||
public class AmmeterMeteDataVo {
|
||||
|
||||
/** 电表名称 */
|
||||
private String deviceName;
|
||||
|
||||
/** 通信状态 */
|
||||
private String emsCommunicationStatus;
|
||||
|
||||
/** 数据更新时间 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date dataUpdateTime;
|
||||
|
||||
/** 储能表数据信息 */
|
||||
private List<MeteDataDetailInfo> meteDataDetailInfo;
|
||||
|
||||
public String getDeviceName() {
|
||||
return deviceName;
|
||||
}
|
||||
|
||||
public void setDeviceName(String deviceName) {
|
||||
this.deviceName = deviceName;
|
||||
}
|
||||
|
||||
public String getEmsCommunicationStatus() {
|
||||
return emsCommunicationStatus;
|
||||
}
|
||||
|
||||
public void setEmsCommunicationStatus(String emsCommunicationStatus) {
|
||||
this.emsCommunicationStatus = emsCommunicationStatus;
|
||||
}
|
||||
|
||||
public Date getDataUpdateTime() {
|
||||
return dataUpdateTime;
|
||||
}
|
||||
|
||||
public void setDataUpdateTime(Date dataUpdateTime) {
|
||||
this.dataUpdateTime = dataUpdateTime;
|
||||
}
|
||||
|
||||
public List<MeteDataDetailInfo> getMeteDataDetailInfo() {
|
||||
return meteDataDetailInfo;
|
||||
}
|
||||
|
||||
public void setMeteDataDetailInfo(List<MeteDataDetailInfo> meteDataDetailInfo) {
|
||||
this.meteDataDetailInfo = meteDataDetailInfo;
|
||||
}
|
||||
}
|
@ -1,12 +1,11 @@
|
||||
package com.xzzn.ems.domain.vo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 电表详细数据
|
||||
* 电表-总表数据展示
|
||||
*/
|
||||
public class AmmeterDataDetailInfo
|
||||
public class LoadDataDetailInfo
|
||||
{
|
||||
/** 类别 */
|
||||
private String category;
|
||||
@ -15,10 +14,10 @@ public class AmmeterDataDetailInfo
|
||||
private BigDecimal totalKwh = BigDecimal.ZERO;
|
||||
|
||||
/** 尖 (kWh) */
|
||||
private BigDecimal sharpKwh = BigDecimal.ZERO;
|
||||
private BigDecimal peakKwh = BigDecimal.ZERO;
|
||||
|
||||
/** 峰 (kWh) */
|
||||
private BigDecimal peakKwh = BigDecimal.ZERO;
|
||||
private BigDecimal highKwh = BigDecimal.ZERO;
|
||||
|
||||
/** 平 (kWh) */
|
||||
private BigDecimal flatKwh = BigDecimal.ZERO;
|
||||
@ -26,11 +25,6 @@ public class AmmeterDataDetailInfo
|
||||
/** 谷 (kWh) */
|
||||
private BigDecimal valleyKwh = BigDecimal.ZERO;
|
||||
|
||||
/** 总表设备Id */
|
||||
private String deviceId;
|
||||
|
||||
/** 数据更新时间 */
|
||||
private Date updateTime;
|
||||
|
||||
public BigDecimal getValleyKwh() {
|
||||
return valleyKwh;
|
||||
@ -56,12 +50,12 @@ public class AmmeterDataDetailInfo
|
||||
this.peakKwh = peakKwh;
|
||||
}
|
||||
|
||||
public BigDecimal getSharpKwh() {
|
||||
return sharpKwh;
|
||||
public BigDecimal getHighKwh() {
|
||||
return highKwh;
|
||||
}
|
||||
|
||||
public void setSharpKwh(BigDecimal sharpKwh) {
|
||||
this.sharpKwh = sharpKwh;
|
||||
public void setHighKwh(BigDecimal highKwh) {
|
||||
this.highKwh = highKwh;
|
||||
}
|
||||
|
||||
public BigDecimal getTotalKwh() {
|
||||
@ -79,20 +73,4 @@ public class AmmeterDataDetailInfo
|
||||
public void setCategory(String category) {
|
||||
this.category = category;
|
||||
}
|
||||
|
||||
public String getDeviceId() {
|
||||
return deviceId;
|
||||
}
|
||||
|
||||
public void setDeviceId(String deviceId) {
|
||||
this.deviceId = deviceId;
|
||||
}
|
||||
|
||||
public Date getUpdateTime() {
|
||||
return updateTime;
|
||||
}
|
||||
|
||||
public void setUpdateTime(Date updateTime) {
|
||||
this.updateTime = updateTime;
|
||||
}
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
package com.xzzn.ems.domain.vo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 电表-储能表数据展示
|
||||
*/
|
||||
public class MeteDataDetailInfo
|
||||
{
|
||||
/** 类别:A相 B相 C相*/
|
||||
private String category;
|
||||
|
||||
/** 有功功率 */
|
||||
private BigDecimal activePower = BigDecimal.ZERO;
|
||||
|
||||
/** 无功功率 */
|
||||
private BigDecimal reactivePower = BigDecimal.ZERO;
|
||||
|
||||
public String getCategory() {
|
||||
return category;
|
||||
}
|
||||
|
||||
public void setCategory(String category) {
|
||||
this.category = category;
|
||||
}
|
||||
|
||||
public BigDecimal getActivePower() {
|
||||
return activePower;
|
||||
}
|
||||
|
||||
public void setActivePower(BigDecimal activePower) {
|
||||
this.activePower = activePower;
|
||||
}
|
||||
|
||||
public BigDecimal getReactivePower() {
|
||||
return reactivePower;
|
||||
}
|
||||
|
||||
public void setReactivePower(BigDecimal reactivePower) {
|
||||
this.reactivePower = reactivePower;
|
||||
}
|
||||
}
|
@ -2,8 +2,6 @@ package com.xzzn.ems.mapper;
|
||||
|
||||
import java.util.List;
|
||||
import com.xzzn.ems.domain.EmsAmmeterData;
|
||||
import com.xzzn.ems.domain.vo.AmmeterDataDetailInfo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 总数据Mapper接口
|
||||
@ -60,11 +58,4 @@ public interface EmsAmmeterDataMapper
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteEmsAmmeterDataByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 获取总表详细数据
|
||||
* @param siteId
|
||||
* @return
|
||||
*/
|
||||
public List<AmmeterDataDetailInfo> getAmmeterDetailInfo(@Param("siteId")String siteId, @Param("deviceId") String deviceId);
|
||||
}
|
||||
|
@ -29,5 +29,5 @@ public interface ISingleSiteService
|
||||
|
||||
public List<BatteryDataStatsListVo> getClusterDataInfoList(String clusterDeviceId,String siteId);
|
||||
|
||||
public List<AmmeterDataVo> getAmmeterDataList(String siteId);
|
||||
public AmmeterDataResponse getAmmeterDataList(String siteId);
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ package com.xzzn.ems.service.impl;
|
||||
|
||||
import com.xzzn.common.constant.RedisKeyConstants;
|
||||
import com.xzzn.common.core.redis.RedisCache;
|
||||
import com.xzzn.common.enums.AmmeterCategoryStatus;
|
||||
import com.xzzn.common.enums.AmmeterCategory;
|
||||
import com.xzzn.common.enums.DeviceCategory;
|
||||
import com.xzzn.common.utils.StringUtils;
|
||||
import com.xzzn.ems.domain.*;
|
||||
@ -29,6 +29,10 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
|
||||
|
||||
private static final String CLUSTER_DATA_SOC = "SOC";
|
||||
|
||||
private static final String AMMETER_DEVICE_LOAD = "LOAD";
|
||||
|
||||
private static final String AMMETER_DEVICE_METE = "METE";
|
||||
|
||||
@Autowired
|
||||
private EmsPcsDataMapper emsPcsDataMapper;
|
||||
@Autowired
|
||||
@ -331,60 +335,96 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<AmmeterDataVo> getAmmeterDataList(String siteId) {
|
||||
List<AmmeterDataVo> ammeterDataVos = new ArrayList<>();
|
||||
public AmmeterDataResponse getAmmeterDataList(String siteId) {
|
||||
AmmeterDataResponse ammeterResponse = new AmmeterDataResponse();
|
||||
|
||||
if (!StringUtils.isEmpty(siteId)) {
|
||||
// 先获取总表设备
|
||||
// 先获取电表设备
|
||||
List<Map<String, Object>> ammeterIdList = emsDevicesSettingMapper.getDeviceInfosBySiteIdAndCategory(siteId, DeviceCategory.AMMETER.getCode());
|
||||
|
||||
for (Map<String, Object> ammeterDevice : ammeterIdList) {
|
||||
AmmeterDataVo ammeterDataVo = new AmmeterDataVo();
|
||||
ammeterDataVo.setDeviceName(ammeterDevice.get("deviceName").toString());
|
||||
ammeterDataVo.setEmsCommunicationStatus(ammeterDevice.get("communicationStatus").toString());
|
||||
// 从redis取总表详细数据
|
||||
String ammeterId = ammeterDevice.get("id").toString();
|
||||
// 从redis取总表详细数据
|
||||
EmsAmmeterData ammeterData = redisCache.getCacheObject(RedisKeyConstants.AMMETER + siteId + "_" +ammeterId);
|
||||
// 判断电表类型
|
||||
if (AMMETER_DEVICE_LOAD.equals(ammeterId)) {
|
||||
AmmeterLoadDataVo ammeterLoadDataVo = new AmmeterLoadDataVo();
|
||||
ammeterLoadDataVo.setDeviceName(ammeterDevice.get("deviceName").toString());
|
||||
ammeterLoadDataVo.setEmsCommunicationStatus(ammeterDevice.get("communicationStatus").toString());
|
||||
// 处理总表数据
|
||||
dealAmmeterLoadData(ammeterData,ammeterLoadDataVo);
|
||||
ammeterResponse.setAmmeterLoadDataVoList(ammeterLoadDataVo);
|
||||
} else if (AMMETER_DEVICE_METE.equals(ammeterId)) {
|
||||
AmmeterMeteDataVo ammeterMeteDataVo = new AmmeterMeteDataVo();
|
||||
ammeterMeteDataVo.setDeviceName(ammeterDevice.get("deviceName").toString());
|
||||
ammeterMeteDataVo.setEmsCommunicationStatus(ammeterDevice.get("communicationStatus").toString());
|
||||
// 处理储能表数据
|
||||
dealAmmeterMeteData(ammeterData,ammeterMeteDataVo);
|
||||
ammeterResponse.setAmmeterMeteDataVoList(ammeterMeteDataVo);
|
||||
}
|
||||
}
|
||||
}
|
||||
return ammeterResponse;
|
||||
}
|
||||
|
||||
private void dealAmmeterMeteData(EmsAmmeterData ammeterData, AmmeterMeteDataVo ammeterMeteDataVo) {
|
||||
if (ammeterData != null) {
|
||||
// 数据更新时间
|
||||
ammeterMeteDataVo.setDataUpdateTime(ammeterData.getDataUpdateTime());
|
||||
|
||||
List<MeteDataDetailInfo> meteDataDetailInfos = new ArrayList<>();
|
||||
// 拼接数据
|
||||
// a相
|
||||
MeteDataDetailInfo meteDataDetailInfo1 = new MeteDataDetailInfo();
|
||||
meteDataDetailInfo1.setCategory(AmmeterCategory.A_POWER.getInfo());
|
||||
meteDataDetailInfo1.setActivePower(ammeterData.getPhaseAActivePower());
|
||||
meteDataDetailInfo1.setReactivePower(ammeterData.getPhaseAReactivePower());
|
||||
meteDataDetailInfos.add(meteDataDetailInfo1);
|
||||
// b相
|
||||
MeteDataDetailInfo meteDataDetailInfo2 = new MeteDataDetailInfo();
|
||||
meteDataDetailInfo2.setCategory(AmmeterCategory.B_POWER.getInfo());
|
||||
meteDataDetailInfo2.setActivePower(ammeterData.getPhaseBActivePower());
|
||||
meteDataDetailInfo2.setReactivePower(ammeterData.getPhaseBReactivePower());
|
||||
meteDataDetailInfos.add(meteDataDetailInfo2);
|
||||
// c相
|
||||
MeteDataDetailInfo meteDataDetailInfo3 = new MeteDataDetailInfo();
|
||||
meteDataDetailInfo3.setCategory(AmmeterCategory.C_POWER.getInfo());
|
||||
meteDataDetailInfo3.setActivePower(ammeterData.getPhaseCActivePower());
|
||||
meteDataDetailInfo3.setReactivePower(ammeterData.getPhaseCReactivePower());
|
||||
meteDataDetailInfos.add(meteDataDetailInfo3);
|
||||
ammeterMeteDataVo.setMeteDataDetailInfo(meteDataDetailInfos);
|
||||
}
|
||||
}
|
||||
|
||||
private void dealAmmeterLoadData(EmsAmmeterData ammeterData, AmmeterLoadDataVo ammeterDataVo) {
|
||||
if (ammeterData != null) {
|
||||
// 数据更新时间
|
||||
ammeterDataVo.setDataUpdateTime(ammeterData.getDataUpdateTime());
|
||||
// 处理类别数据
|
||||
List<AmmeterDataDetailInfo> ammeterDataDetailInfos = new ArrayList<>();
|
||||
dealAmmeterCategoryDataInfo(ammeterData,ammeterDataDetailInfos);
|
||||
ammeterDataVo.setAmmeterDataDetailInfos(ammeterDataDetailInfos);
|
||||
}
|
||||
|
||||
ammeterDataVos.add(ammeterDataVo);
|
||||
}
|
||||
}
|
||||
return ammeterDataVos;
|
||||
}
|
||||
|
||||
private void dealAmmeterCategoryDataInfo(EmsAmmeterData ammeterData, List<AmmeterDataDetailInfo> ammeterDataDetailInfos) {
|
||||
// 累计放电量
|
||||
AmmeterDataDetailInfo ammeterDataDetailInfo1 = new AmmeterDataDetailInfo();
|
||||
ammeterDataDetailInfo1.setCategory(AmmeterCategoryStatus.TOTAL_CHARGE.getInfo());
|
||||
List<LoadDataDetailInfo> loadDataDetailInfos = new ArrayList<>();
|
||||
// 拼接数据
|
||||
// 组合有功
|
||||
LoadDataDetailInfo ammeterDataDetailInfo1 = new LoadDataDetailInfo();
|
||||
ammeterDataDetailInfo1.setCategory(AmmeterCategory.CURRENT_COMB_ACTIVE.getInfo());
|
||||
ammeterDataDetailInfo1.setTotalKwh(ammeterData.getCurrentCombActiveTotal());
|
||||
ammeterDataDetailInfo1.setSharpKwh(ammeterData.getCurrentCombActivePeak());
|
||||
ammeterDataDetailInfo1.setPeakKwh(ammeterData.getCurrentCombActiveHigh());
|
||||
ammeterDataDetailInfo1.setPeakKwh(ammeterData.getCurrentCombActivePeak());
|
||||
ammeterDataDetailInfo1.setHighKwh(ammeterData.getCurrentCombActiveHigh());
|
||||
ammeterDataDetailInfo1.setFlatKwh(ammeterData.getCurrentCombActiveFlat());
|
||||
ammeterDataDetailInfo1.setValleyKwh(ammeterData.getCurrentCombActiveValley());
|
||||
ammeterDataDetailInfos.add(ammeterDataDetailInfo1);
|
||||
// 累计放电量
|
||||
AmmeterDataDetailInfo ammeterDataDetailInfo2 = new AmmeterDataDetailInfo();
|
||||
ammeterDataDetailInfo2.setCategory(AmmeterCategoryStatus.TOTAL_DISCHARGE.getInfo());
|
||||
loadDataDetailInfos.add(ammeterDataDetailInfo1);
|
||||
// 组合无功
|
||||
LoadDataDetailInfo ammeterDataDetailInfo2 = new LoadDataDetailInfo();
|
||||
ammeterDataDetailInfo2.setCategory(AmmeterCategory.CURRENT_COMB_REACTIVE.getInfo());
|
||||
ammeterDataDetailInfo2.setTotalKwh(ammeterData.getCurrentCombReactiveTotal());
|
||||
ammeterDataDetailInfo2.setSharpKwh(ammeterData.getCurrentCombReactivePeak());
|
||||
ammeterDataDetailInfo2.setPeakKwh(ammeterData.getCurrentCombReactiveHigh());
|
||||
ammeterDataDetailInfo2.setPeakKwh(ammeterData.getCurrentCombReactivePeak());
|
||||
ammeterDataDetailInfo2.setHighKwh(ammeterData.getCurrentCombReactiveHigh());
|
||||
ammeterDataDetailInfo2.setFlatKwh(ammeterData.getCurrentCombReactiveFlat());
|
||||
ammeterDataDetailInfo2.setValleyKwh(ammeterData.getCurrentCombReactiveValley());
|
||||
ammeterDataDetailInfos.add(ammeterDataDetailInfo2);
|
||||
// 日放电量
|
||||
AmmeterDataDetailInfo ammeterDataDetailInfo3 = new AmmeterDataDetailInfo();
|
||||
ammeterDataDetailInfo3.setCategory(AmmeterCategoryStatus.DAILY_CHARGE.getInfo());
|
||||
ammeterDataDetailInfos.add(ammeterDataDetailInfo3);
|
||||
// 日充电量
|
||||
AmmeterDataDetailInfo ammeterDataDetailInfo4 = new AmmeterDataDetailInfo();
|
||||
ammeterDataDetailInfo4.setCategory(AmmeterCategoryStatus.DAILY_DISCHARGE.getInfo());
|
||||
ammeterDataDetailInfos.add(ammeterDataDetailInfo4);
|
||||
loadDataDetailInfos.add(ammeterDataDetailInfo2);
|
||||
|
||||
ammeterDataVo.setLoadDataDetailInfo(loadDataDetailInfos);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -549,24 +549,4 @@
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
<select id="getAmmeterDetailInfo" resultType="com.xzzn.ems.domain.vo.AmmeterDataDetailInfo">
|
||||
SELECT t.category as category,
|
||||
t.total_kwh as totalKwh,
|
||||
t.sharp_kwh as sharpKwh,
|
||||
t.flat_kwh as flatKwh,
|
||||
t.peak_kwh as peakKwh,
|
||||
t.device_id as deviceId,
|
||||
t.valley_kwh as valleyKwh,
|
||||
Max(t.data_update_time) as updateTime
|
||||
FROM ems_ammeter_data t
|
||||
INNER JOIN (
|
||||
SELECT p.site_id, p.device_id,p.category,MAX(p.data_update_time) AS max_update_time
|
||||
FROM ems_ammeter_data p
|
||||
WHERE p.site_id = #{siteId} and p.device_id = #{deviceId}
|
||||
GROUP BY p.site_id,p.device_id,p.category
|
||||
) latest on t.device_id = latest.device_id and t.data_update_time = latest.max_update_time
|
||||
WHERE t.site_id = #{siteId} and t.device_id = #{deviceId}
|
||||
group by t.category,t.total_kwh,t.sharp_kwh,t.flat_kwh,t.peak_kwh,t.valley_kwh,t.device_id
|
||||
order by updateTime desc
|
||||
</select>
|
||||
</mapper>
|
Reference in New Issue
Block a user