CacheManageController.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package jnpf.base.controller;
  2. import cn.dev33.satoken.annotation.SaCheckPermission;
  3. import cn.hutool.core.util.ObjectUtil;
  4. import com.google.common.collect.Lists;
  5. import io.swagger.v3.oas.annotations.Operation;
  6. import io.swagger.v3.oas.annotations.Parameter;
  7. import io.swagger.v3.oas.annotations.tags.Tag;
  8. import jnpf.base.ActionResult;
  9. import jnpf.base.model.cachemanage.CacheManageInfoVO;
  10. import jnpf.base.model.cachemanage.CacheManageListVO;
  11. import jnpf.base.model.cachemanage.PaginationCacheManage;
  12. import jnpf.base.vo.PageListVO;
  13. import jnpf.base.vo.PaginationVO;
  14. import jnpf.constant.MsgCode;
  15. import jnpf.util.*;
  16. import org.apache.commons.collections4.CollectionUtils;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.web.bind.annotation.*;
  19. import java.util.*;
  20. import java.util.stream.Collectors;
  21. /**
  22. * 缓存管理
  23. *
  24. * @author JNPF开发平台组
  25. * @version V3.1.0
  26. * @copyright 引迈信息技术有限公司
  27. * @date 2019年9月27日 上午9:18
  28. */
  29. @Tag(name = "缓存管理", description = "CacheManage")
  30. @RestController
  31. @RequestMapping("/api/system/CacheManage")
  32. public class CacheManageController {
  33. @Autowired
  34. private RedisUtil redisUtil;
  35. /**
  36. * 获取缓存列表
  37. *
  38. * @param page 分页参数
  39. * @return ignore
  40. */
  41. @Operation(summary = "获取缓存列表")
  42. @SaCheckPermission("sysService.cache")
  43. @GetMapping
  44. public ActionResult<PageListVO<CacheManageListVO>> getList(PaginationCacheManage page) {
  45. String tenantId = UserProvider.getUser().getTenantId();
  46. List<CacheManageListVO> list = new ArrayList<>();
  47. Set<String> data = redisUtil.getAllKeys();
  48. for (String key : data) {
  49. try {
  50. if (!StringUtil.isEmpty(tenantId) && key.contains(tenantId)) {
  51. CacheManageListVO model = new CacheManageListVO();
  52. model.setName(key);
  53. model.setCacheSize(String.valueOf(redisUtil.getString(key)).getBytes().length);
  54. model.setOverdueTime(new Date((DateUtil.getTime(new Date()) + redisUtil.getLiveTime(key)) * 1000).getTime());
  55. list.add(model);
  56. } else if (StringUtil.isEmpty(tenantId)) {
  57. CacheManageListVO model = new CacheManageListVO();
  58. model.setName(key);
  59. model.setCacheSize(String.valueOf(redisUtil.getString(key)).getBytes().length);
  60. model.setOverdueTime(new Date((DateUtil.getTime(new Date()) + redisUtil.getLiveTime(key)) * 1000).getTime());
  61. list.add(model);
  62. }
  63. } catch (Exception e) {
  64. }
  65. }
  66. list = list.stream().sorted(Comparator.comparing(CacheManageListVO::getOverdueTime)).collect(Collectors.toList());
  67. if (StringUtil.isNotEmpty(page.getKeyword())) {
  68. list = list.stream().filter(t -> t.getName().contains(page.getKeyword())).collect(Collectors.toList());
  69. }
  70. if (ObjectUtil.isNotNull(page.getOverdueStartTime()) && ObjectUtil.isNotNull(page.getOverdueEndTime())) {
  71. list = list.stream().filter(t -> t.getOverdueTime() >= page.getOverdueStartTime() && t.getOverdueTime() <= page.getOverdueEndTime()).collect(Collectors.toList());
  72. }
  73. PaginationVO paginationVO = JsonUtil.getJsonToBean(page, PaginationVO.class);
  74. paginationVO.setTotal(list.size());
  75. //假分页
  76. if (CollectionUtils.isNotEmpty(list)) {
  77. List<List<CacheManageListVO>> partition = Lists.partition(list, (int) page.getPageSize());
  78. int i = (int) page.getCurrentPage() - 1;
  79. list = partition.size() > i ? partition.get(i) : Collections.emptyList();
  80. }
  81. return ActionResult.page(list, paginationVO);
  82. }
  83. /**
  84. * 获取缓存信息
  85. *
  86. * @param name 主键值
  87. * @return ignore
  88. */
  89. @Operation(summary = "获取缓存信息")
  90. @Parameter(name = "name", description = "主键值", required = true)
  91. @SaCheckPermission("sysService.cache")
  92. @GetMapping("/{name}")
  93. public ActionResult<CacheManageInfoVO> info(@PathVariable("name") String name) {
  94. name = XSSEscape.escape(name);
  95. String json = String.valueOf(redisUtil.getString(name));
  96. CacheManageInfoVO vo = new CacheManageInfoVO();
  97. vo.setName(name);
  98. vo.setValue(json);
  99. return ActionResult.success(vo);
  100. }
  101. /**
  102. * 清空所有缓存
  103. *
  104. * @return ignore
  105. */
  106. @Operation(summary = "清空所有缓存")
  107. @SaCheckPermission("sysService.cache")
  108. @PostMapping("/Actions/ClearAll")
  109. public ActionResult clearAll() {
  110. String tenantId = UserProvider.getUser().getTenantId();
  111. if ("".equals(tenantId)) {
  112. Set<String> keys = redisUtil.getAllKeys();
  113. for (String key : keys) {
  114. redisUtil.remove(key);
  115. }
  116. } else {
  117. Set<String> data = redisUtil.getAllKeys();
  118. String clientKey = UserProvider.getToken();
  119. System.out.println(clientKey);
  120. for (String key : data) {
  121. if (key.contains(tenantId)) {
  122. redisUtil.remove(key);
  123. }
  124. }
  125. }
  126. return ActionResult.success(MsgCode.SYS004.get());
  127. }
  128. /**
  129. * 清空单个缓存
  130. *
  131. * @param name 主键值
  132. * @return ignore
  133. */
  134. @Operation(summary = "清空单个缓存")
  135. @Parameter(name = "name", description = "主键值", required = true)
  136. @SaCheckPermission("sysService.cache")
  137. @DeleteMapping("/{name}")
  138. public ActionResult clear(@PathVariable("name") String name) {
  139. redisUtil.remove(name);
  140. return ActionResult.success(MsgCode.SYS004.get());
  141. }
  142. }