RankingServiceImpl.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package com.huaxu.service.impl;
  2. import com.huaxu.dao.OnlineMonitorMapper;
  3. import com.huaxu.dto.ranking.RankingDto;
  4. import com.huaxu.dto.ranking.SceneDeviceDto;
  5. import com.huaxu.dto.ranking.SceneDeviceQueryDto;
  6. import com.huaxu.entity.MonitorDataEntity;
  7. import com.huaxu.entity.MonitorDataValueEntity;
  8. import com.huaxu.model.LoginUser;
  9. import com.huaxu.service.RankingService;
  10. import com.huaxu.service.SceneService;
  11. import com.huaxu.util.ByteArrayUtils;
  12. import com.huaxu.util.RedisUtil;
  13. import com.huaxu.util.UserUtil;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import org.springframework.util.CollectionUtils;
  17. import javax.annotation.Resource;
  18. import java.util.ArrayList;
  19. import java.util.Collections;
  20. import java.util.List;
  21. @Service
  22. public class RankingServiceImpl implements RankingService {
  23. private static final String PIPE_NAME = "管网";
  24. private static final String SMS_WATER_CACHE_KEY = "sms_water_%s";
  25. @Resource
  26. private OnlineMonitorMapper onlineMonitorMapper;
  27. @Autowired
  28. private SceneService sceneService;
  29. @Autowired
  30. private RedisUtil redisUtil;
  31. @Override
  32. public List<RankingDto> findPipeRanking(String secondSceneTypeName, int parmType){
  33. List<RankingDto> result = new ArrayList<>();
  34. List<SceneDeviceDto> sceneDeviceDtoList = findSceneDevice(PIPE_NAME, secondSceneTypeName, parmType);
  35. if (CollectionUtils.isEmpty(sceneDeviceDtoList)){
  36. return result;
  37. }
  38. String cacheKey = null;
  39. for (SceneDeviceDto sceneDeviceDto: sceneDeviceDtoList) {
  40. if (sceneDeviceDto.getAttributeId() == null) {
  41. continue;
  42. }
  43. cacheKey = String.format(SMS_WATER_CACHE_KEY, sceneDeviceDto.getDeviceCode());
  44. byte[] bytes = redisUtil.get(cacheKey.getBytes());
  45. if(bytes == null || bytes.length == 0) {
  46. continue;
  47. }
  48. MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
  49. List<MonitorDataValueEntity> monitorList = monitorDataEntity.getDataValues();
  50. if (CollectionUtils.isEmpty(monitorList)){
  51. continue;
  52. }
  53. for (MonitorDataValueEntity monitorEntity:monitorList ) {
  54. if (sceneDeviceDto.getAttributeId().equals(monitorEntity.getAttributeId())){
  55. RankingDto rankingDto = new RankingDto();
  56. rankingDto.setName(monitorEntity.getAttributeName());
  57. rankingDto.setScore(monitorEntity.getDataValue());
  58. result.add(rankingDto);
  59. break;
  60. }
  61. }
  62. }
  63. if (result.size() > 1){
  64. Collections.sort(result);
  65. }
  66. return result;
  67. }
  68. /**
  69. * 查找场景下的所有设备
  70. * @param firstSceneTypeName 一级场景名字
  71. * @param secondSceneTypeName 二级场景名字
  72. * @param parmType 属性类型
  73. * @return
  74. */
  75. private List<SceneDeviceDto> findSceneDevice(String firstSceneTypeName, String secondSceneTypeName, int parmType) {
  76. SceneDeviceQueryDto sceneDeviceQueryDto = new SceneDeviceQueryDto();
  77. LoginUser loginUser = UserUtil.getCurrentUser();
  78. sceneDeviceQueryDto.setTenantId(loginUser.getTenantId());
  79. sceneDeviceQueryDto.setProgramItems(loginUser.getProgramItemList());
  80. sceneDeviceQueryDto.setUserType(loginUser.getType());
  81. sceneDeviceQueryDto.setSceneIds(sceneService.findByParentIdsLike(null));
  82. sceneDeviceQueryDto.setFirstSceneTypeName(firstSceneTypeName);
  83. sceneDeviceQueryDto.setSecondSceneTypeName(secondSceneTypeName);
  84. sceneDeviceQueryDto.setParmType(parmType);
  85. //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
  86. sceneDeviceQueryDto.setPermissonType(loginUser.getPermissonType());
  87. return onlineMonitorMapper.selectSceneDevice(sceneDeviceQueryDto);
  88. }
  89. }