diff --git a/ems-system/src/main/java/com/xzzn/ems/domain/vo/PointDataRequest.java b/ems-system/src/main/java/com/xzzn/ems/domain/vo/PointDataRequest.java index 9fbeaac..cddf9f5 100644 --- a/ems-system/src/main/java/com/xzzn/ems/domain/vo/PointDataRequest.java +++ b/ems-system/src/main/java/com/xzzn/ems/domain/vo/PointDataRequest.java @@ -29,6 +29,16 @@ public class PointDataRequest { private BigDecimal upper; /** 排序字段 */ private String sortData; + /** 父类deviceId */ + private String parentId; + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } public String getSortData() { return sortData; diff --git a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsBatteryDataMapper.java b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsBatteryDataMapper.java index 1bd9546..2a222b4 100644 --- a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsBatteryDataMapper.java +++ b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsBatteryDataMapper.java @@ -65,28 +65,6 @@ public interface EmsBatteryDataMapper */ public int deleteEmsBatteryDataByIds(Long[] ids); - /** - * 根据siteId查询站点电池实时数据 - * @param siteId - * @return - */ - public EmsBatteryData getBatteryDataBySiteId(String siteId); - - /** - * 根据siteId和簇id获取单体数据 - * @param siteId - * @param clusterDeviceId - * @return - */ - public BatteryClusterDataDetailVo getBatteryDataByClusterId(@Param("siteId")String siteId, @Param("clusterDeviceId")String clusterDeviceId); - - /** - * 获取最大最小的单体id - * @param dataVo - * @return - */ - public List> getDataIdsMap(BatteryClusterDataDetailVo dataVo); - /** * 根据电池簇设备id获取下面所有单体电池 * @param clusterDeviceId diff --git a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsBatteryDataMinutesMapper.java b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsBatteryDataMinutesMapper.java index b001591..f2b76d7 100644 --- a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsBatteryDataMinutesMapper.java +++ b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsBatteryDataMinutesMapper.java @@ -5,6 +5,7 @@ import java.util.List; import com.xzzn.ems.domain.EmsBatteryData; import com.xzzn.ems.domain.EmsBatteryDataMinutes; +import org.apache.ibatis.annotations.Param; /** * 单体电池分钟级数据Mapper接口 @@ -65,4 +66,9 @@ public interface EmsBatteryDataMinutesMapper int insertMinutesBatteryDataList(List emsBatteryDataList); public void deleteByTimeBeforeOneHour(String oneHourAgoStr); + + // 获取指定站点指定电池簇下面的单体电池最新数据 + public EmsBatteryData getLastBatteryData(@Param("siteId") String siteId, + @Param("clusterDeviceId") String clusterDeviceId, + @Param("deviceId") String deviceId); } \ No newline at end of file diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsDeviceSettingServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsDeviceSettingServiceImpl.java index f558976..dc02593 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsDeviceSettingServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsDeviceSettingServiceImpl.java @@ -6,11 +6,13 @@ import com.alibaba.fastjson2.TypeReference; import com.xzzn.common.constant.RedisKeyConstants; import com.xzzn.common.core.redis.RedisCache; import com.xzzn.common.enums.DeviceCategory; +import com.xzzn.common.enums.SiteEnum; import com.xzzn.common.utils.DateUtils; import com.xzzn.common.utils.StringUtils; import com.xzzn.ems.domain.EmsDevicesSetting; import com.xzzn.ems.domain.vo.PointDataRequest; import com.xzzn.ems.domain.vo.PointQueryResponse; +import com.xzzn.ems.mapper.EmsBatteryDataMinutesMapper; import com.xzzn.ems.mapper.EmsDevicesSettingMapper; import com.xzzn.ems.mapper.EmsPointMatchMapper; import com.xzzn.ems.service.IEmsDeviceSettingService; @@ -19,6 +21,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -36,6 +39,11 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService private EmsPointMatchMapper emsPointMatchMapper; @Autowired private RedisCache redisCache; + @Autowired + private EmsBatteryDataMinutesMapper emsBatteryDataMinutesMapper; + @Autowired + private EmsBatteryClusterServiceImpl emsBatteryClusterServiceImpl; + /** * 获取设备详细信息 * @param id @@ -129,14 +137,18 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService List response = new ArrayList<>(); - + String dataPointName = request.getDataPointName(); + String dataPoint = request.getDataPoint(); + String parentDeviceId = request.getParentId(); // 电动所的电池簇特殊处理-来源pcs+bmsd if (siteId.equals(DDS_SITE_ID) && DeviceCategory.CLUSTER.getCode().equals(deviceCategory)) { - response = specialDealWithDDSCluster(siteId,deviceId,deviceCategory, - request.getDataPointName(),request.getDataPoint()); + response = specialDealWithDDSCluster(siteId,deviceId,deviceCategory,dataPointName,dataPoint); + } else if (DeviceCategory.BATTERY.getCode().equals(deviceCategory)) { + response = specialDealWithBattery(siteId,deviceId,deviceCategory, + dataPointName,dataPoint,parentDeviceId); } else { - response = emsPointMatchMapper.getSingleSiteDevicePoints(siteId,deviceCategory, - request.getDataPointName(),request.getDataPoint()); + response = emsPointMatchMapper.getSingleSiteDevicePoints( + siteId,deviceCategory,dataPointName,dataPoint); // 从redis取最新数据 JSONObject mqttJson = redisCache.getCacheObject(RedisKeyConstants.ORIGINAL_MQTT_DATA + siteId + "_" + deviceId); if(mqttJson == null){ @@ -220,6 +232,54 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService .collect(Collectors.toList()); } + private List specialDealWithBattery(String siteId, String deviceId, String deviceCategory, + String dataPointName, String dataPoint, String parentDeviceId) { + List response = emsPointMatchMapper.getSingleSiteDevicePoints(siteId,deviceCategory, + dataPointName,dataPoint); + + // 获取redis同步最新数据 + JSONObject jsonObject = new JSONObject(); + if (SiteEnum.DDS.getCode().equals(siteId)) { + // dds单体电池数据来源于BMSD + EmsDevicesSetting clusterDevice = emsDevicesMapper.getDeviceBySiteAndDeviceId(parentDeviceId,siteId); + String bmsdDeviceId = clusterDevice == null ? "" :clusterDevice.getParentId(); + if (StringUtils.isEmpty(bmsdDeviceId)) { + return response; + } + jsonObject = redisCache.getCacheObject(RedisKeyConstants.ORIGINAL_MQTT_DATA + siteId + "_" + bmsdDeviceId); + } else if (SiteEnum.FX.getCode().equals(siteId)) { + // fx单体电池数据来源于父类簇BMSC + jsonObject = redisCache.getCacheObject(RedisKeyConstants.ORIGINAL_MQTT_DATA + siteId + "_" + parentDeviceId); + } + if (jsonObject != null) { + // 填充数据 + fillBatteryData(jsonObject,siteId, deviceId, response); + } + return response; + } + + private void fillBatteryData(JSONObject jsonObject, String siteId, String deviceId, List response) { + String jsonData = jsonObject.get("Data").toString(); + if (StringUtils.isEmpty(jsonData)) { + return; + } + Map obj = JSON.parseObject(jsonData, new TypeReference>() { + }); + Long updateTime = Long.valueOf(jsonObject.get("timestamp").toString()); + Date dataUpdateTime = DateUtils.convertUpdateTime(updateTime); + // 遍历点位数据,设最新值 + for (PointQueryResponse pointInfo : response) { + String dataKey = ""; + if (SiteEnum.DDS.getCode().equals(siteId)) { + dataKey = "DTDC" + deviceId + pointInfo.getDataPoint(); + } else if (SiteEnum.FX.getCode().equals(siteId)) { + dataKey = pointInfo.getDataPoint() + deviceId; + } + pointInfo.setPointValue(obj.get(dataKey)); + pointInfo.setUpdateTime(dataUpdateTime); + } + } + @Override public List getSiteAllDeviceCategory(String siteId) { return emsDevicesMapper.getAllDeviceCategoryBySiteId(siteId); @@ -370,4 +430,19 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService return false; } } + + @Override + public Map> initDeviceInfo() { + List settingList = emsDevicesMapper.selectEmsDevicesSettingList(null); + // 按siteId分组 + Map> map = settingList.stream() + .collect(Collectors.groupingBy( + EmsDevicesSetting::getSiteId, + HashMap::new, + Collectors.toList() + )); + // 存redis + redisCache.setCacheObject(RedisKeyConstants.INIT_DEVICE_INFO, map, 30, TimeUnit.DAYS); + return map; + } } diff --git a/ems-system/src/main/resources/mapper/ems/EmsBatteryDataMinutesMapper.xml b/ems-system/src/main/resources/mapper/ems/EmsBatteryDataMinutesMapper.xml index 3781843..070cf44 100644 --- a/ems-system/src/main/resources/mapper/ems/EmsBatteryDataMinutesMapper.xml +++ b/ems-system/src/main/resources/mapper/ems/EmsBatteryDataMinutesMapper.xml @@ -149,4 +149,16 @@ delete from ems_battery_data_minutes where data_timestamp < #{oneHourAgoStr} + + \ No newline at end of file