|
@@ -2,7 +2,19 @@ package com.huaxu.service;
|
|
|
|
|
|
|
|
|
import com.huaxu.dao.ComdisplayMapLocationMapper;
|
|
|
+import com.huaxu.dto.ComdisplayInfoDto;
|
|
|
+import com.huaxu.dto.DeviceDto;
|
|
|
+import com.huaxu.dto.SceneDeviceAttributeDto;
|
|
|
+import com.huaxu.dto.SceneUsageDto;
|
|
|
import com.huaxu.entity.ComdisplayMapLocationEntity;
|
|
|
+import com.huaxu.entity.MonitorDataEntity;
|
|
|
+import com.huaxu.entity.MonitorDataValueEntity;
|
|
|
+import com.huaxu.entity.SceneEntity;
|
|
|
+import com.huaxu.model.LoginUser;
|
|
|
+import com.huaxu.util.ByteArrayUtils;
|
|
|
+import com.huaxu.util.RedisUtil;
|
|
|
+import com.huaxu.util.UserUtil;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
@@ -12,9 +24,8 @@ import javax.annotation.Resource;
|
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import java.util.Map;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Arrays;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* 地图坐标Service接口
|
|
@@ -27,6 +38,14 @@ public class ComdisplayMapLocationService extends ServiceImpl<ComdisplayMapLocat
|
|
|
|
|
|
@Resource
|
|
|
private ComdisplayMapLocationMapper comdisplayMapLocationMapper;
|
|
|
+ @Autowired
|
|
|
+ private SceneService sceneService;
|
|
|
+ @Autowired
|
|
|
+ private DeviceService deviceService;
|
|
|
+ @Autowired
|
|
|
+ private MonitorInfoService monitorInfoService;
|
|
|
+ @Autowired
|
|
|
+ private RedisUtil redisUtil;
|
|
|
/**
|
|
|
* 查列表
|
|
|
*/
|
|
@@ -75,4 +94,71 @@ public class ComdisplayMapLocationService extends ServiceImpl<ComdisplayMapLocat
|
|
|
public ComdisplayMapLocationEntity findComdisplayMapLocationById(Long id) {
|
|
|
return comdisplayMapLocationMapper.findComdisplayMapLocationById(id);
|
|
|
}
|
|
|
+
|
|
|
+ public List<ComdisplayInfoDto> selectMapDataForCompany() {
|
|
|
+ LoginUser currentUser = UserUtil.getCurrentUser();
|
|
|
+ return comdisplayMapLocationMapper.selectMapDataForCompany(currentUser.getTenantId());
|
|
|
+ }
|
|
|
+ //按公司获取取水量和制水量
|
|
|
+ public ComdisplayInfoDto selectMapDataForCompany(Long companyOrgId) {
|
|
|
+ ComdisplayInfoDto sceneUsageDto = new ComdisplayInfoDto();
|
|
|
+ sceneUsageDto.setCompanyOrgId(companyOrgId.intValue());
|
|
|
+ List<SceneEntity> sceneEntities = sceneService.selectByTypeNameForCom(new SceneEntity(), companyOrgId);
|
|
|
+ for (SceneEntity itemScene : sceneEntities) {
|
|
|
+ //查询场景下的所有设备信息
|
|
|
+ List<DeviceDto> devices = new ArrayList<>();
|
|
|
+ DeviceDto deviceDto = new DeviceDto();
|
|
|
+ deviceDto.setSceneIds(sceneService.findByParentIdsLike(itemScene.getId()));
|
|
|
+ if (deviceDto.getSceneIds().size() == 0)
|
|
|
+ continue;
|
|
|
+ devices.addAll(deviceService.selectList(deviceDto));
|
|
|
+ //取前一天
|
|
|
+ LocalDateTime dateTime = LocalDateTime.now().plusDays(-1);
|
|
|
+ for (DeviceDto item : devices) {
|
|
|
+ //设备的几个参数值
|
|
|
+ SceneDeviceAttributeDto sceneDeviceAttributeDto = new SceneDeviceAttributeDto();
|
|
|
+ sceneDeviceAttributeDto.setDeviceId(item.getId());
|
|
|
+ sceneDeviceAttributeDto.setYear(dateTime.getYear());
|
|
|
+ sceneDeviceAttributeDto.setMonth(dateTime.getMonthValue());
|
|
|
+ sceneDeviceAttributeDto.setDay(dateTime.getDayOfMonth());
|
|
|
+ sceneDeviceAttributeDto.setSceneId(itemScene.getId());
|
|
|
+ List<SceneDeviceAttributeDto> sceneDeviceAttributeDtos = monitorInfoService.findAttributeList(sceneDeviceAttributeDto);
|
|
|
+ //取缓存里的数据
|
|
|
+ byte[] bytes = redisUtil.get(("sms_water_" + item.getDeviceCode()).getBytes());
|
|
|
+ if (bytes != null && bytes.length > 0) {
|
|
|
+ MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
|
|
|
+ //筛选该设备相同属性的值
|
|
|
+ Map<Long, MonitorDataValueEntity> map = new HashMap<>();
|
|
|
+ //将缓存中的实时数据放到map中方便进行遍历
|
|
|
+ for (MonitorDataValueEntity dateValue : monitorDataEntity.getDataValues()) {
|
|
|
+ map.put(dateValue.getAttributeId(), dateValue);
|
|
|
+ }
|
|
|
+ for (SceneDeviceAttributeDto itemAttribute : sceneDeviceAttributeDtos) {
|
|
|
+ Double attributeDiffValue = 0d;
|
|
|
+ if (!map.containsKey(itemAttribute.getAttributeId())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (map.get(itemAttribute.getAttributeId()).getDataValue() != null && itemAttribute.getLatestValue() != null) {
|
|
|
+ attributeDiffValue = map.get(itemAttribute.getAttributeId()).getDataValue() - itemAttribute.getLatestValue();
|
|
|
+ } else if (map.get(itemAttribute.getAttributeId()).getDataValue() != null && itemAttribute.getLatestValue() == null) {
|
|
|
+ attributeDiffValue = map.get(itemAttribute.getAttributeId()).getDataValue();
|
|
|
+ }
|
|
|
+ switch (itemAttribute.getAttributeType()) {
|
|
|
+ case "3":
|
|
|
+ sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage() != null ? (double) Math.round((sceneUsageDto.getYieldWaterUsage() + attributeDiffValue) * 1000) / 1000 : (double) Math.round((attributeDiffValue) * 1000) / 1000);
|
|
|
+ break;
|
|
|
+ case "4":
|
|
|
+ sceneUsageDto.setIntakeWaterUsage(sceneUsageDto.getIntakeWaterUsage() != null ? (double) Math.round((sceneUsageDto.getIntakeWaterUsage() + attributeDiffValue) * 1000) / 1000 : (double) Math.round((attributeDiffValue) * 1000) / 1000);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (sceneUsageDto.getYieldWaterUsage() == null)
|
|
|
+ sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage());
|
|
|
+ if (sceneUsageDto.getIntakeWaterUsage() == null)
|
|
|
+ sceneUsageDto.setIntakeWaterUsage(sceneUsageDto.getIntakeWaterUsage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return sceneUsageDto;
|
|
|
+ }
|
|
|
}
|