From 7927066058662b909955bca0bdbe2cb0faee9ca5 Mon Sep 17 00:00:00 2001 From: mashili Date: Mon, 11 Aug 2025 14:49:18 +0800 Subject: [PATCH] =?UTF-8?q?20250808=E4=BC=98=E5=8C=96-=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ems/EmsSiteMapController.java | 17 ++++++- .../ems/domain/vo/BMSBatteryDataList.java | 44 +++++++++++++++++++ .../xzzn/ems/domain/vo/PcsDetailInfoVo.java | 11 +++++ .../ems/mapper/EmsAlarmRecordsMapper.java | 4 ++ .../com/xzzn/ems/mapper/EmsPcsDataMapper.java | 2 +- .../xzzn/ems/service/IHomePageService.java | 8 ++-- .../impl/DDSDataProcessServiceImpl.java | 29 +++++++++++- .../impl/FXXDataProcessServiceImpl.java | 28 ++++++++++++ .../ems/service/impl/HomePageServiceImpl.java | 38 +++++++++++++++- .../service/impl/SingleSiteServiceImpl.java | 10 ++++- .../mapper/ems/EmsAlarmRecordsMapper.xml | 5 +++ .../mapper/ems/EmsBatteryStackMapper.xml | 2 +- .../resources/mapper/ems/EmsPcsDataMapper.xml | 3 +- 13 files changed, 187 insertions(+), 14 deletions(-) diff --git a/ems-admin/src/main/java/com/xzzn/web/controller/ems/EmsSiteMapController.java b/ems-admin/src/main/java/com/xzzn/web/controller/ems/EmsSiteMapController.java index 072d081..4c69b9d 100644 --- a/ems-admin/src/main/java/com/xzzn/web/controller/ems/EmsSiteMapController.java +++ b/ems-admin/src/main/java/com/xzzn/web/controller/ems/EmsSiteMapController.java @@ -2,7 +2,7 @@ package com.xzzn.web.controller.ems; import com.xzzn.common.core.controller.BaseController; import com.xzzn.common.core.domain.AjaxResult; -import com.xzzn.ems.service.IEmsSiteService; +import com.xzzn.ems.domain.vo.DateSearchRequest; import com.xzzn.ems.service.IHomePageService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.RestController; /** * -// * 站点地图 + * 站点地图 * */ @RestController @@ -31,4 +31,17 @@ public class EmsSiteMapController extends BaseController{ return success(homePageService.getSingleSiteBaseInfo(siteId)); } + /** + * 获取某个站点7天充放电数据 + */ + @GetMapping("/getSevenChargeData") + public AjaxResult getSevenChargeData(DateSearchRequest request) + { + String siteId = request.getSiteId(); + if(siteId == null || siteId.isEmpty()) { + return error("站点必传"); + } + return success(homePageService.getSevenChargeData(request)); + } + } diff --git a/ems-system/src/main/java/com/xzzn/ems/domain/vo/BMSBatteryDataList.java b/ems-system/src/main/java/com/xzzn/ems/domain/vo/BMSBatteryDataList.java index da1b3af..6629543 100644 --- a/ems-system/src/main/java/com/xzzn/ems/domain/vo/BMSBatteryDataList.java +++ b/ems-system/src/main/java/com/xzzn/ems/domain/vo/BMSBatteryDataList.java @@ -23,15 +23,27 @@ public class BMSBatteryDataList { /** 单体最高电压 (V) */ private BigDecimal maxCellVoltage; + /** 最高单体电压对应点号 */ + private Long maxCellVoltageId; + /** 单体最低电压 (V) */ private BigDecimal minCellVoltage; + /** 最低单体电压对应点号 */ + private Long minCellVoltageId; + /** 单体最高温度 (℃) */ private BigDecimal maxCellTemp; + /** 最高单体温度对应点号 */ + private Long maxCellTempId; + /** 单体最低温度 (℃) */ private BigDecimal minCellTemp; + /** 最低单体温度对应点号 */ + private Long minCellTempId; + /** 换电站id */ private String siteId; @@ -117,4 +129,36 @@ public class BMSBatteryDataList { public void setClusterVoltage(BigDecimal clusterVoltage) { this.clusterVoltage = clusterVoltage; } + + public Long getMaxCellVoltageId() { + return maxCellVoltageId; + } + + public void setMaxCellVoltageId(Long maxCellVoltageId) { + this.maxCellVoltageId = maxCellVoltageId; + } + + public Long getMinCellTempId() { + return minCellTempId; + } + + public void setMinCellTempId(Long minCellTempId) { + this.minCellTempId = minCellTempId; + } + + public Long getMaxCellTempId() { + return maxCellTempId; + } + + public void setMaxCellTempId(Long maxCellTempId) { + this.maxCellTempId = maxCellTempId; + } + + public Long getMinCellVoltageId() { + return minCellVoltageId; + } + + public void setMinCellVoltageId(Long minCellVoltageId) { + this.minCellVoltageId = minCellVoltageId; + } } diff --git a/ems-system/src/main/java/com/xzzn/ems/domain/vo/PcsDetailInfoVo.java b/ems-system/src/main/java/com/xzzn/ems/domain/vo/PcsDetailInfoVo.java index 5187f7b..f532a94 100644 --- a/ems-system/src/main/java/com/xzzn/ems/domain/vo/PcsDetailInfoVo.java +++ b/ems-system/src/main/java/com/xzzn/ems/domain/vo/PcsDetailInfoVo.java @@ -89,6 +89,9 @@ public class PcsDetailInfoVo { /** 设备名称 */ private String deviceName; + /** 报警个数 */ + private int alarmNum; + private List pcsBranchInfoList; public String getDeviceId() { @@ -290,4 +293,12 @@ public class PcsDetailInfoVo { public void setDeviceName(String deviceName) { this.deviceName = deviceName; } + + public int getAlarmNum() { + return alarmNum; + } + + public void setAlarmNum(int alarmNum) { + this.alarmNum = alarmNum; + } } diff --git a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsAlarmRecordsMapper.java b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsAlarmRecordsMapper.java index 9f42370..ca0ba7b 100644 --- a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsAlarmRecordsMapper.java +++ b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsAlarmRecordsMapper.java @@ -3,6 +3,7 @@ package com.xzzn.ems.mapper; import java.util.List; import com.xzzn.ems.domain.EmsAlarmRecords; import com.xzzn.ems.domain.vo.*; +import org.apache.ibatis.annotations.Param; /** * 告警记录Mapper接口 @@ -86,4 +87,7 @@ public interface EmsAlarmRecordsMapper public List getAlarmRecordDetailList(AlarmRecordListRequestVo requestVo); + + // 获取站点设备告警数量 + public int getDeviceAlarmNum(@Param("siteId") String siteId, @Param("deviceId") String deviceId); } diff --git a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPcsDataMapper.java b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPcsDataMapper.java index 938137d..9a5a7f2 100644 --- a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPcsDataMapper.java +++ b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPcsDataMapper.java @@ -70,7 +70,7 @@ public interface EmsPcsDataMapper * @param siteId * @return */ - public List getPcsDataBySiteId(@Param("siteId")String siteId, @Param("limitTime")int limitTime); + public List getPcsDataBySiteId(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate); /** * 根据站点获取设备监控的实时运行头信息 diff --git a/ems-system/src/main/java/com/xzzn/ems/service/IHomePageService.java b/ems-system/src/main/java/com/xzzn/ems/service/IHomePageService.java index 25823ce..49cc3b1 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/IHomePageService.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/IHomePageService.java @@ -1,8 +1,8 @@ package com.xzzn.ems.service; -import com.xzzn.ems.domain.vo.HomePageDataViewVo; -import com.xzzn.ems.domain.vo.SingleSiteBaseInfo; -import com.xzzn.ems.domain.vo.SiteTotalInfoVo; +import com.xzzn.ems.domain.vo.*; + +import java.util.List; /** * 站点信息 服务层 @@ -16,4 +16,6 @@ public interface IHomePageService public SingleSiteBaseInfo getSingleSiteBaseInfo(String siteId); public HomePageDataViewVo getHomePageDataList(); + + public List getSevenChargeData(DateSearchRequest request); } diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/DDSDataProcessServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/DDSDataProcessServiceImpl.java index e995622..ae9d5fe 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/DDSDataProcessServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/DDSDataProcessServiceImpl.java @@ -3,6 +3,9 @@ package com.xzzn.ems.service.impl; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.TypeReference; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.xzzn.common.constant.RedisKeyConstants; import com.xzzn.common.core.redis.RedisCache; import com.xzzn.common.enums.*; @@ -31,7 +34,8 @@ public class DDSDataProcessServiceImpl implements IDDSDataProcessService { private static final Pattern PATTERN = Pattern.compile("(BMSD\\d{2})(ZT|SOC|SOH|DL|DY|BDSC)"); // 匹配DTDC+数字格式的正则(提取序号) private static final Pattern DTDC_PATTERN = Pattern.compile("DTDC(\\d+)([A-Za-z]*)"); - + // 初始化ObjectMapper(可以作为全局变量) + private static final ObjectMapper objectMapper = new ObjectMapper(); @Autowired private EmsBatteryClusterMapper emsBatteryClusterMapper; @@ -70,9 +74,12 @@ public class DDSDataProcessServiceImpl implements IDDSDataProcessService { String jsonData = obj.get("Data").toString(); log.info("deviceId:" + deviceId); - if (StringUtils.isEmpty(jsonData)) { + boolean isEmpty = checkJsonDataEmpty(jsonData); + if (isEmpty) { return; } + + // 处理相关数据 if (deviceId.contains("BMSD")) { batteryStackDataProcess(deviceId, jsonData); batteryGroupDataProcess(deviceId, jsonData); @@ -904,4 +911,22 @@ public class DDSDataProcessServiceImpl implements IDDSDataProcessService { return records; } + // 空数据不处理 + private boolean checkJsonDataEmpty(String jsonData) { + boolean flag = false; + try { + if (StringUtils.isEmpty(jsonData)) { + flag = true; + } + JsonNode jsonNode = objectMapper.readTree(jsonData); + // 判断是否为空对象({}) + if (jsonNode.isObject() && jsonNode.isEmpty()) { + flag = true ; + } + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + return flag; + } + } diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/FXXDataProcessServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/FXXDataProcessServiceImpl.java index 8ddb8bd..f14fe26 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/FXXDataProcessServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/FXXDataProcessServiceImpl.java @@ -4,6 +4,9 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.TypeReference; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.xzzn.common.constant.RedisKeyConstants; import com.xzzn.common.core.redis.RedisCache; import com.xzzn.common.enums.*; @@ -24,6 +27,9 @@ import java.util.*; public class FXXDataProcessServiceImpl implements IFXXDataProcessService { private static final Log log = LogFactory.getLog(FXXDataProcessServiceImpl.class); private static final String SITE_ID = "021_FXX_01"; + // 初始化ObjectMapper(可以作为全局变量) + private static final ObjectMapper objectMapper = new ObjectMapper(); + @Autowired private EmsBatteryClusterMapper emsBatteryClusterMapper; @@ -61,6 +67,11 @@ public class FXXDataProcessServiceImpl implements IFXXDataProcessService { String jsonData = obj.get("Data").toString(); log.info("deviceId:" + deviceId); + boolean isEmpty = checkJsonDataEmpty(jsonData); + if (isEmpty) { + return; + } + if (deviceId.contains("BMSD")) { batteryStackDataProcess(deviceId, jsonData); @@ -657,4 +668,21 @@ public class FXXDataProcessServiceImpl implements IFXXDataProcessService { return records; } + // 空数据不处理 + private boolean checkJsonDataEmpty(String jsonData) { + boolean flag = false; + try { + if (StringUtils.isEmpty(jsonData)) { + flag = true; + } + JsonNode jsonNode = objectMapper.readTree(jsonData); + // 判断是否为空对象({}) + if (jsonNode.isObject() && jsonNode.isEmpty()) { + flag = true ; + } + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + return flag; + } } diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/HomePageServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/HomePageServiceImpl.java index 9029cd6..7c36cb5 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/HomePageServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/HomePageServiceImpl.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.LocalDate; import java.util.*; /** @@ -73,8 +74,11 @@ public class HomePageServiceImpl implements IHomePageService singleSiteBaseInfo.setTotalChargedCap(pcsMap.get("totalChargedCap")); singleSiteBaseInfo.setTotalDisChargedCap(pcsMap.get("totalDischargedCap")); } - // 七天放电数据统计 - List siteMonitorDataVoList = emsPcsDataMapper.getPcsDataBySiteId(siteId,LIMIT_TIME); + // 七天放电数据统计 默认从今天往前7天 + LocalDate sevenDaysAgo = LocalDate.now().minusDays(LIMIT_TIME); + Date startDate = DateUtils.toDate(sevenDaysAgo); + Date endDate = new Date(); + List siteMonitorDataVoList = emsPcsDataMapper.getPcsDataBySiteId(siteId,startDate,endDate); singleSiteBaseInfo.setSevenDayDisChargeStats(siteMonitorDataVoList); // 充放电基本数据处理 dealSitePCSDate(singleSiteBaseInfo,siteMonitorDataVoList); @@ -166,4 +170,34 @@ public class HomePageServiceImpl implements IHomePageService return homePageDataViewVo; } + @Override + public List getSevenChargeData(DateSearchRequest requestVo) { + String siteId = requestVo.getSiteId(); + + // 默认时间-7天 + dealRequestTime(requestVo); + Date startDate = requestVo.getStartDate(); + Date endDate = requestVo.getEndDate(); + // 七天放电数据统计 + List siteMonitorDataVoList = emsPcsDataMapper.getPcsDataBySiteId(siteId,startDate,endDate); + return siteMonitorDataVoList; + } + + // 统计入参时间处理 + 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); + } else if (endDate != null) { + endDate = DateUtils.addDays(endDate, 1); + requestVo.setEndDate(endDate); + } + } } diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/SingleSiteServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/SingleSiteServiceImpl.java index 4e0d25b..c0ecf36 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/SingleSiteServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/SingleSiteServiceImpl.java @@ -16,6 +16,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -73,7 +74,10 @@ public class SingleSiteServiceImpl implements ISingleSiteService { List siteMonitorHomeAlarmVo = emsAlarmRecordsMapper.getAlarmRecordsBySiteId(siteId); siteMonitorHomeVo.setSiteMonitorHomeAlarmVo(siteMonitorHomeAlarmVo); // 能量数据 - List siteMonitorDataVoList = emsPcsDataMapper.getPcsDataBySiteId(siteId,6); + LocalDate sevenDaysAgo = LocalDate.now().minusDays(6); + Date startDate = DateUtils.toDate(sevenDaysAgo); + Date endDate = new Date(); + List siteMonitorDataVoList = emsPcsDataMapper.getPcsDataBySiteId(siteId,startDate,endDate); if (!CollectionUtils.isEmpty(siteMonitorDataVoList)) { for (SiteMonitorDataVo sitePcsData : siteMonitorDataVoList) { // 获取当天的充电量+放电量 @@ -144,6 +148,7 @@ public class SingleSiteServiceImpl implements ISingleSiteService { return siteMonitorRuningInfoVo; } // 获取单站监控实时运行-stack平均温度 + // 20250811 按小时 @Override public SiteMonitorRuningInfoVo getRunningGraphStackTemp(String siteId) { SiteMonitorRuningInfoVo siteMonitorRuningInfoVo = new SiteMonitorRuningInfoVo(); @@ -210,6 +215,9 @@ public class SingleSiteServiceImpl implements ISingleSiteService { List pcsBranchInfoList = new ArrayList<>(); processBranchDataInfo(siteId,pcsId,pcsBranchInfoList); pcsDetailInfoVo.setPcsBranchInfoList(pcsBranchInfoList); + // 报警个数 + int alarmNum = emsAlarmRecordsMapper.getDeviceAlarmNum(siteId,pcsId); + pcsDetailInfoVo.setAlarmNum(alarmNum); pcsDetailInfoVoList.add(pcsDetailInfoVo); } diff --git a/ems-system/src/main/resources/mapper/ems/EmsAlarmRecordsMapper.xml b/ems-system/src/main/resources/mapper/ems/EmsAlarmRecordsMapper.xml index 775ab0c..6b5fec8 100644 --- a/ems-system/src/main/resources/mapper/ems/EmsAlarmRecordsMapper.xml +++ b/ems-system/src/main/resources/mapper/ems/EmsAlarmRecordsMapper.xml @@ -164,4 +164,9 @@ or date_format(t.alarm_end_time,'%Y%m%d') BETWEEN date_format(#{alarmStartTime},'%Y%m%d') and date_format(#{alarmEndTime},'%Y%m%d') ) + + \ No newline at end of file diff --git a/ems-system/src/main/resources/mapper/ems/EmsBatteryStackMapper.xml b/ems-system/src/main/resources/mapper/ems/EmsBatteryStackMapper.xml index 869d635..4c1c4d9 100644 --- a/ems-system/src/main/resources/mapper/ems/EmsBatteryStackMapper.xml +++ b/ems-system/src/main/resources/mapper/ems/EmsBatteryStackMapper.xml @@ -348,7 +348,7 @@