KymCache.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. package com.kym.service.cache;
  2. import cn.hutool.extra.spring.SpringUtil;
  3. import com.kym.common.exception.BusinessException;
  4. import com.kym.common.utils.CommUtil;
  5. import com.kym.entity.common.RedisKeys;
  6. import org.springframework.data.redis.core.StringRedisTemplate;
  7. import org.springframework.stereotype.Component;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.Objects;
  11. import java.util.concurrent.ConcurrentHashMap;
  12. /**
  13. * @author skyline
  14. * @description 缓存
  15. */
  16. public enum KymCache {
  17. INSTANCE;
  18. /**
  19. * 短编号与设备信息映射
  20. */
  21. private static ConcurrentHashMap<String, String> SHORT_ID_TO_PRODUCT_KEY_AND_DEVICE_NAME_MAPPING = new ConcurrentHashMap<>();
  22. /**
  23. * 用户id与归属站点id映射
  24. *
  25. * @param map
  26. */
  27. public void putUserId2StationId(Map<Long, String> map) {
  28. map.forEach((k, v) -> KymCacheInjector.redisTemplate.opsForValue().set(RedisKeys.USER_ID_TO_STATION_ID + k, v));
  29. }
  30. /**
  31. * 通过消费用户id获取归属站点Id
  32. *
  33. * @param userId
  34. */
  35. public String getUserStationId(Long userId) {
  36. return KymCacheInjector.redisTemplate.opsForValue().get(RedisKeys.USER_ID_TO_STATION_ID + userId);
  37. }
  38. /**
  39. * 通过消费用户id获取归属站点Id
  40. *
  41. * @param userId
  42. */
  43. public String getUserStationName(Long userId) {
  44. return getStationNameById(getUserStationId(userId));
  45. }
  46. /**
  47. * 通过消费用户id获取站点商户投资者adminUserId
  48. *
  49. * @param userId
  50. */
  51. public Long getInvestorAdminUserIdByUserId(Long userId) {
  52. return getInvestorAdminUserIdByStationId(Objects.requireNonNull(KymCacheInjector.redisTemplate.opsForValue().get(RedisKeys.USER_ID_TO_STATION_ID + userId)));
  53. }
  54. /**
  55. * 站点id与商户id映射
  56. *
  57. * @param map
  58. */
  59. public void putStationId2InvestorAdminUserId(Map<String, String> map) {
  60. map.forEach((k, v) -> KymCacheInjector.redisTemplate.opsForValue().set(RedisKeys.STATION_ID_TO_INVESTOR_ADMIN_USER_ID + k, v));
  61. }
  62. /**
  63. * 站点id与站点名称映射
  64. *
  65. * @param map
  66. */
  67. public void putStationId2Name(Map<String, String> map) {
  68. map.forEach((k, v) -> KymCacheInjector.redisTemplate.opsForValue().set(RedisKeys.STATION_ID_TO_NAME + k, v));
  69. }
  70. /**
  71. * 通过站点id获取商户id
  72. *
  73. * @param stationId
  74. * @return
  75. */
  76. public Long getInvestorAdminUserIdByStationId(String stationId) {
  77. return Long.valueOf(Objects.requireNonNull(KymCacheInjector.redisTemplate.opsForValue().get(RedisKeys.STATION_ID_TO_INVESTOR_ADMIN_USER_ID + stationId)));
  78. }
  79. /**
  80. * 通过站点id获取站点名称
  81. *
  82. * @param stationId
  83. * @return
  84. */
  85. public String getStationNameById(String stationId) {
  86. return KymCacheInjector.redisTemplate.opsForValue().get(RedisKeys.STATION_ID_TO_NAME + stationId);
  87. }
  88. /**
  89. * 运营平台账号(包含运营,投资者,物业等)对应有权限的站点
  90. *
  91. * @param map
  92. */
  93. public void putAdminUser2Stations(Map<Long, List<String>> map) {
  94. map.forEach((k, v) -> {
  95. String key = RedisKeys.ADMIN_USER_STATION_IDS + k;
  96. String[] values = v.toArray(new String[0]); // 优化数组创建方式,使用varargs来避免不必要的数组拷贝
  97. KymCacheInjector.redisTemplate.opsForSet().add(key, values);
  98. });
  99. }
  100. /**
  101. * 获取运营平台操作员有权限的站点ID
  102. *
  103. * @param adminUserId
  104. * @return
  105. */
  106. public List<String> getAdminUserStationIds(Long adminUserId) {
  107. return KymCacheInjector.redisTemplate.opsForSet().members(RedisKeys.ADMIN_USER_STATION_IDS + adminUserId).stream().toList();
  108. }
  109. /**
  110. * 缓存短编号和设备信息
  111. *
  112. * @param map
  113. */
  114. public void putWashShortId2ProductKeyAndDeviceName(Map<String, String> map) {
  115. map.forEach((k, v) -> KymCacheInjector.redisTemplate.opsForValue().set(RedisKeys.SHORT_ID_TO_PRODUCT_KEY_AND_DEVICE_NAME + k, v));
  116. SHORT_ID_TO_PRODUCT_KEY_AND_DEVICE_NAME_MAPPING.putAll(map);
  117. }
  118. /**
  119. * 缓存短编号与站点id映射
  120. *
  121. * @param map
  122. */
  123. public void putShortId2StationId(Map<String, String> map) {
  124. map.forEach((k, v) -> KymCacheInjector.redisTemplate.opsForValue().set(RedisKeys.SHORT_ID_TO_STATION_ID + k, v));
  125. }
  126. /**
  127. * 通过短编号获取站点id
  128. *
  129. * @param shortId
  130. * @return
  131. */
  132. public String gesStationIdByShortId(String shortId) {
  133. return KymCacheInjector.redisTemplate.opsForValue().get(RedisKeys.SHORT_ID_TO_STATION_ID + shortId);
  134. }
  135. /**
  136. * 通过短编号获取productKey和deviceName
  137. *
  138. * @param shortId
  139. * @return
  140. */
  141. public String[] getProductKeyAndDeviceNameByWashShortId(String shortId) {
  142. var res = new String[]{};
  143. var s = Objects.requireNonNull(KymCacheInjector.redisTemplate.opsForValue().get(RedisKeys.SHORT_ID_TO_PRODUCT_KEY_AND_DEVICE_NAME + shortId));
  144. if (CommUtil.isNotEmptyAndNull(s)) {
  145. res = s.split(",");
  146. }
  147. if (res.length != 2) {
  148. throw new BusinessException("设备信息异常");
  149. }
  150. return res;
  151. }
  152. /**
  153. * 通过productKey和deviceName获取设备短编号
  154. */
  155. public String getShortIdByProductKeyAndDeviceName(String productKey, String deviceName) {
  156. return SHORT_ID_TO_PRODUCT_KEY_AND_DEVICE_NAME_MAPPING.entrySet().stream().filter(entry -> (productKey + "," + deviceName).equals(entry.getValue())).map(Map.Entry::getKey).findFirst().get();
  157. }
  158. public void putShortId2SeqName(Map<String, String> map) {
  159. map.forEach((k, v) -> KymCacheInjector.redisTemplate.opsForValue().set(RedisKeys.SHORT_ID_TO_SEQ_NAME + k, v));
  160. }
  161. public String getSeqNameByShortId(String shortId) {
  162. return KymCacheInjector.redisTemplate.opsForValue().get(RedisKeys.SHORT_ID_TO_SEQ_NAME + shortId);
  163. }
  164. @Component
  165. public static class KymCacheInjector {
  166. private static final StringRedisTemplate redisTemplate = SpringUtil.getBean(StringRedisTemplate.class);
  167. }
  168. }