柯桥增值式服务
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

149 wiersze
6.3KB

  1. package com.ningdatech.kqapi.common.helper.basic;
  2. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  3. import com.github.benmanes.caffeine.cache.Caffeine;
  4. import com.github.benmanes.caffeine.cache.LoadingCache;
  5. import com.google.common.collect.Lists;
  6. import com.google.common.collect.Sets;
  7. import com.ningdatech.kqapi.common.constant.BizConst;
  8. import com.ningdatech.kqapi.zzsfw.entity.entity.DscSxAdsShareItemQltQlsxCommonIDVKq;
  9. import com.ningdatech.kqapi.zzsfw.entity.entity.MatterKey;
  10. import com.ningdatech.kqapi.zzsfw.entity.entity.NdKqZzsfwMattersDeduplicate;
  11. import com.ningdatech.kqapi.zzsfw.service.IDscSxAdsShareItemQltQlsxCommonIDVKqService;
  12. import com.ningdatech.kqapi.zzsfw.service.INdKqZzsfwMatterDeduplicateService;
  13. import lombok.extern.slf4j.Slf4j;
  14. import org.springframework.beans.factory.InitializingBean;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import java.util.List;
  17. import java.util.Objects;
  18. import java.util.Set;
  19. import java.util.concurrent.TimeUnit;
  20. import java.util.stream.Collectors;
  21. /**
  22. * <p>
  23. * AbstractMatterCache
  24. * </p>
  25. *
  26. * @author ZPF
  27. * @since 14:41 2023/3/1
  28. */
  29. @Slf4j
  30. public abstract class AbstractMatterCacheHelper implements InitializingBean {
  31. @Autowired
  32. private IDscSxAdsShareItemQltQlsxCommonIDVKqService kqService;
  33. @Autowired
  34. private INdKqZzsfwMatterDeduplicateService deduplicateService;
  35. protected LoadingCache<MatterKey, NdKqZzsfwMattersDeduplicate> mattersDupCache;
  36. protected LoadingCache<String, String> mattersUrlCache;
  37. private Boolean initMatterCache() {
  38. List<DscSxAdsShareItemQltQlsxCommonIDVKq> allMatters = kqService
  39. .list(Wrappers.lambdaQuery(DscSxAdsShareItemQltQlsxCommonIDVKq.class)
  40. .select(DscSxAdsShareItemQltQlsxCommonIDVKq::getRowguid,DscSxAdsShareItemQltQlsxCommonIDVKq::getQlName,
  41. DscSxAdsShareItemQltQlsxCommonIDVKq::getWebapplyurl)
  42. .isNotNull(DscSxAdsShareItemQltQlsxCommonIDVKq::getWebapplyurl));
  43. if (allMatters.isEmpty()) {
  44. log.warn("事项数据未初始化");
  45. return Boolean.FALSE;
  46. }
  47. allMatters.forEach(m -> {
  48. MatterKey key = MatterKey.of(m.getQlName(),m.getWebapplyurl());
  49. mattersUrlCache.put(m.getQlName(),m.getWebapplyurl());
  50. if(mattersDupCache.asMap().containsKey(key)){
  51. NdKqZzsfwMattersDeduplicate dup = mattersDupCache.get(key);
  52. dup.setCountNum(dup.getCountNum() + 1);
  53. mattersDupCache.put(key,dup);
  54. }else{
  55. mattersDupCache.put(key,NdKqZzsfwMattersDeduplicate.of(m.getQlName(),m.getWebapplyurl()));
  56. }
  57. });
  58. return Boolean.TRUE;
  59. }
  60. protected NdKqZzsfwMattersDeduplicate get(String qlName,String url) {
  61. MatterKey key = MatterKey.of(qlName, url);
  62. return mattersDupCache.get(key);
  63. }
  64. protected String getUrl(String qlName) {
  65. return mattersUrlCache.get(qlName);
  66. }
  67. protected List<NdKqZzsfwMattersDeduplicate> all() {
  68. return Lists.newArrayList(mattersDupCache.asMap().values());
  69. }
  70. @Override
  71. public void afterPropertiesSet() {
  72. mattersUrlCache = Caffeine.newBuilder()
  73. .refreshAfterWrite(7, TimeUnit.DAYS)
  74. .maximumSize(1024 * 100)
  75. .build(key -> {
  76. DscSxAdsShareItemQltQlsxCommonIDVKq matter = kqService.getOne(Wrappers.lambdaQuery(DscSxAdsShareItemQltQlsxCommonIDVKq.class)
  77. .eq(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlName, key)
  78. .last(BizConst.LIMIT_1)
  79. .isNotNull(DscSxAdsShareItemQltQlsxCommonIDVKq::getWebapplyurl));
  80. if (Objects.isNull(matter)) {
  81. //查不到直接返回null
  82. return null;
  83. }
  84. return matter.getWebapplyurl();
  85. });
  86. mattersDupCache = Caffeine.newBuilder()
  87. .refreshAfterWrite(7, TimeUnit.DAYS)
  88. .maximumSize(1024 * 100)
  89. .build(key -> {
  90. NdKqZzsfwMattersDeduplicate dup = deduplicateService.getOne(Wrappers.lambdaQuery(NdKqZzsfwMattersDeduplicate.class)
  91. .eq(NdKqZzsfwMattersDeduplicate::getQlName, key)
  92. .last(BizConst.LIMIT_1)
  93. .isNotNull(NdKqZzsfwMattersDeduplicate::getWebapplyurl));
  94. if (Objects.isNull(dup)) {
  95. //查不到直接返回null
  96. return null;
  97. }
  98. return dup;
  99. });
  100. // 初始化所有事项数据到缓存
  101. initMatterCache();
  102. }
  103. public Boolean init() {
  104. mattersUrlCache = Caffeine.newBuilder()
  105. .refreshAfterWrite(7, TimeUnit.DAYS)
  106. .maximumSize(1024 * 100)
  107. .build(key -> {
  108. DscSxAdsShareItemQltQlsxCommonIDVKq matter = kqService.getOne(Wrappers.lambdaQuery(DscSxAdsShareItemQltQlsxCommonIDVKq.class)
  109. .eq(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlName, key)
  110. .last(BizConst.LIMIT_1)
  111. .isNotNull(DscSxAdsShareItemQltQlsxCommonIDVKq::getWebapplyurl));
  112. if (Objects.isNull(matter)) {
  113. //查不到直接返回null
  114. return null;
  115. }
  116. return matter.getWebapplyurl();
  117. });
  118. mattersDupCache = Caffeine.newBuilder()
  119. .refreshAfterWrite(7, TimeUnit.DAYS)
  120. .maximumSize(1024 * 100)
  121. .build(key -> {
  122. NdKqZzsfwMattersDeduplicate dup = deduplicateService.getOne(Wrappers.lambdaQuery(NdKqZzsfwMattersDeduplicate.class)
  123. .eq(NdKqZzsfwMattersDeduplicate::getQlName, key)
  124. .last(BizConst.LIMIT_1)
  125. .isNotNull(NdKqZzsfwMattersDeduplicate::getWebapplyurl));
  126. if (Objects.isNull(dup)) {
  127. //查不到直接返回null
  128. return null;
  129. }
  130. return dup;
  131. });
  132. // 初始化所有事项数据到缓存
  133. return initMatterCache();
  134. }
  135. }