柯桥增值式服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

158 lines
6.7KB

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