package com.huaxu.service.impl; import com.huaxu.dao.OnlineMonitorMapper; import com.huaxu.dto.ranking.RankingDto; import com.huaxu.dto.ranking.SceneDeviceDto; import com.huaxu.dto.ranking.SceneDeviceQueryDto; import com.huaxu.entity.MonitorDataEntity; import com.huaxu.entity.MonitorDataValueEntity; import com.huaxu.model.LoginUser; import com.huaxu.service.RankingService; import com.huaxu.service.SceneService; 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 org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Collections; import java.util.List; @Service public class RankingServiceImpl implements RankingService { private static final String PIPE_NAME = "管网"; private static final String SMS_WATER_CACHE_KEY = "sms_water_%s"; @Resource private OnlineMonitorMapper onlineMonitorMapper; @Autowired private SceneService sceneService; @Autowired private RedisUtil redisUtil; @Override public List<RankingDto> findPipeRanking(String secondSceneTypeName, int parmType){ List<RankingDto> result = new ArrayList<>(); List<SceneDeviceDto> sceneDeviceDtoList = findSceneDevice(PIPE_NAME, secondSceneTypeName, parmType); if (CollectionUtils.isEmpty(sceneDeviceDtoList)){ return result; } String cacheKey = null; for (SceneDeviceDto sceneDeviceDto: sceneDeviceDtoList) { if (sceneDeviceDto.getAttributeId() == null) { continue; } cacheKey = String.format(SMS_WATER_CACHE_KEY, sceneDeviceDto.getDeviceCode()); byte[] bytes = redisUtil.get(cacheKey.getBytes()); if(bytes == null || bytes.length == 0) { continue; } MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get(); List<MonitorDataValueEntity> monitorList = monitorDataEntity.getDataValues(); if (CollectionUtils.isEmpty(monitorList)){ continue; } for (MonitorDataValueEntity monitorEntity:monitorList ) { if (sceneDeviceDto.getAttributeId().equals(monitorEntity.getAttributeId())){ RankingDto rankingDto = new RankingDto(); rankingDto.setName(monitorEntity.getAttributeName()); rankingDto.setScore(monitorEntity.getDataValue()); result.add(rankingDto); break; } } } if (result.size() > 1){ Collections.sort(result); } return result; } /** * 查找场景下的所有设备 * @param firstSceneTypeName 一级场景名字 * @param secondSceneTypeName 二级场景名字 * @param parmType 属性类型 * @return */ private List<SceneDeviceDto> findSceneDevice(String firstSceneTypeName, String secondSceneTypeName, int parmType) { SceneDeviceQueryDto sceneDeviceQueryDto = new SceneDeviceQueryDto(); LoginUser loginUser = UserUtil.getCurrentUser(); sceneDeviceQueryDto.setTenantId(loginUser.getTenantId()); sceneDeviceQueryDto.setProgramItems(loginUser.getProgramItemList()); sceneDeviceQueryDto.setUserType(loginUser.getType()); sceneDeviceQueryDto.setSceneIds(sceneService.findByParentIdsLike(null)); sceneDeviceQueryDto.setFirstSceneTypeName(firstSceneTypeName); sceneDeviceQueryDto.setSecondSceneTypeName(secondSceneTypeName); sceneDeviceQueryDto.setParmType(parmType); //1是公司,2是公司及以下,3部门,4部门及以下,5自定义 sceneDeviceQueryDto.setPermissonType(loginUser.getPermissonType()); return onlineMonitorMapper.selectSceneDevice(sceneDeviceQueryDto); } }