123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- 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);
- }
- }
|