柯桥增值式服务
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.

189 line
9.2KB

  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.ningdatech.kqapi.common.constant.BizConst;
  7. import com.ningdatech.kqapi.zzsfw.entity.entity.ComponentsMatterEliminateEntity;
  8. import com.ningdatech.kqapi.zzsfw.service.ComponentsMatterEliminateService;
  9. import com.ningdatech.kqapi.zzsfw.entity.entity.DscSxAdsShareItemQltQlsxCommonIDVKq;
  10. import com.ningdatech.kqapi.zzsfw.entity.entity.MatterKey;
  11. import com.ningdatech.kqapi.zzsfw.entity.entity.NdKqZzsfwMattersDeduplicate;
  12. import com.ningdatech.kqapi.zzsfw.service.IDscSxAdsShareItemQltQlsxCommonIDVKqService;
  13. import com.ningdatech.kqapi.zzsfw.service.INdKqZzsfwMatterDeduplicateService;
  14. import lombok.extern.slf4j.Slf4j;
  15. import org.apache.commons.lang3.StringUtils;
  16. import org.springframework.beans.factory.InitializingBean;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import java.util.List;
  19. import java.util.Objects;
  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. @Autowired
  39. private ComponentsMatterEliminateService componentsMatterEliminateService;
  40. private final String KQ_ZZS_BASE_URL = "https://www.zjzwfw.gov.cn/zjservice-fe/#/workguide?localInnerCode=&siteCode=330000000000";
  41. private Boolean initMatterCache() {
  42. // 首先,查询ComponentsMatterEliminateEntity中isDelete不为1的qlName列表, 未被剔除
  43. List<String> eliminatedQlNames = componentsMatterEliminateService.list(
  44. Wrappers.<ComponentsMatterEliminateEntity>lambdaQuery()
  45. .select(ComponentsMatterEliminateEntity::getQlName)
  46. .ne(ComponentsMatterEliminateEntity::getIsDelete, 1)
  47. ).stream().map(ComponentsMatterEliminateEntity::getQlName).collect(Collectors.toList());
  48. // 然后,使用eliminatedQlNames来过滤DscSxAdsShareItemQltQlsxCommonIDVKq查询
  49. List<DscSxAdsShareItemQltQlsxCommonIDVKq> allMatters = kqService
  50. .list(Wrappers.<DscSxAdsShareItemQltQlsxCommonIDVKq>lambdaQuery()
  51. .select(DscSxAdsShareItemQltQlsxCommonIDVKq::getRowguid,
  52. DscSxAdsShareItemQltQlsxCommonIDVKq::getQlName,
  53. DscSxAdsShareItemQltQlsxCommonIDVKq::getQlState,
  54. DscSxAdsShareItemQltQlsxCommonIDVKq::getQlInnerCode,
  55. DscSxAdsShareItemQltQlsxCommonIDVKq::getWebapplyurl)
  56. // .eq(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlState, "1")
  57. .isNotNull(DscSxAdsShareItemQltQlsxCommonIDVKq::getWebapplyurl)
  58. .isNotNull(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlInnerCode)
  59. .ne(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlInnerCode, "")
  60. .notIn(!eliminatedQlNames.isEmpty(), DscSxAdsShareItemQltQlsxCommonIDVKq::getQlName, eliminatedQlNames) // 过滤掉那些在eliminatedQlNames中的记录
  61. .orderByDesc(DscSxAdsShareItemQltQlsxCommonIDVKq::getUpdateDate));
  62. if (allMatters.isEmpty()) {
  63. log.warn("事项数据未初始化");
  64. return Boolean.FALSE;
  65. }
  66. allMatters.forEach(m -> {
  67. // 3-14日修改新的url匹配规则,取事项状态为1且qlInnerCode不为空的进行拼接,新的url规则如下
  68. String kq_url = KQ_ZZS_BASE_URL.replace("localInnerCode=", "localInnerCode=" + m.getQlInnerCode());
  69. MatterKey key = MatterKey.of(m.getQlName(),kq_url);
  70. if(!mattersUrlCache.asMap().containsKey(m.getQlName())){
  71. mattersUrlCache.put(m.getQlName(),kq_url);
  72. }else{
  73. String url = mattersUrlCache.get(m.getQlName());
  74. if(StringUtils.isNotBlank(url) && !url.equals(kq_url)){
  75. return;
  76. }
  77. }
  78. if(mattersDupCache.asMap().containsKey(key)){
  79. NdKqZzsfwMattersDeduplicate dup = mattersDupCache.get(key);
  80. dup.setCountNum(dup.getCountNum() + 1);
  81. mattersDupCache.put(key,dup);
  82. }else{
  83. mattersDupCache.put(key,NdKqZzsfwMattersDeduplicate.of(m.getQlName(),kq_url));
  84. }
  85. });
  86. return Boolean.TRUE;
  87. }
  88. protected NdKqZzsfwMattersDeduplicate get(String qlName,String url) {
  89. MatterKey key = MatterKey.of(qlName, url);
  90. return mattersDupCache.get(key);
  91. }
  92. protected String getUrl(String qlName) {
  93. return mattersUrlCache.get(qlName);
  94. }
  95. protected List<NdKqZzsfwMattersDeduplicate> all() {
  96. return Lists.newArrayList(mattersDupCache.asMap().values());
  97. }
  98. @Override
  99. public void afterPropertiesSet() {
  100. mattersUrlCache = Caffeine.newBuilder()
  101. .refreshAfterWrite(7, TimeUnit.DAYS)
  102. .maximumSize(1024 * 100)
  103. .build(key -> {
  104. NdKqZzsfwMattersDeduplicate dup = deduplicateService.getOne(Wrappers.lambdaQuery(NdKqZzsfwMattersDeduplicate.class)
  105. .eq(NdKqZzsfwMattersDeduplicate::getQlName, key)
  106. .last(BizConst.LIMIT_1)
  107. .isNotNull(NdKqZzsfwMattersDeduplicate::getWebapplyurl));
  108. if (Objects.isNull(dup)) {
  109. //查不到直接返回null
  110. return null;
  111. }
  112. return dup.getWebapplyurl();
  113. });
  114. mattersDupCache = Caffeine.newBuilder()
  115. .refreshAfterWrite(7, TimeUnit.DAYS)
  116. .maximumSize(1024 * 100)
  117. .build(key -> {
  118. NdKqZzsfwMattersDeduplicate dup = deduplicateService.getOne(Wrappers.lambdaQuery(NdKqZzsfwMattersDeduplicate.class)
  119. .eq(NdKqZzsfwMattersDeduplicate::getQlName, key)
  120. .last(BizConst.LIMIT_1)
  121. .isNotNull(NdKqZzsfwMattersDeduplicate::getWebapplyurl));
  122. if (Objects.isNull(dup)) {
  123. //查不到直接返回null
  124. return null;
  125. }
  126. return dup;
  127. });
  128. // 初始化所有事项数据到缓存
  129. // initMatterCache();
  130. }
  131. public Boolean init() {
  132. mattersUrlCache = Caffeine.newBuilder()
  133. .refreshAfterWrite(7, TimeUnit.DAYS)
  134. .maximumSize(1024 * 100)
  135. .build(key -> {
  136. // DscSxAdsShareItemQltQlsxCommonIDVKq matter = kqService.getOne(Wrappers.lambdaQuery(DscSxAdsShareItemQltQlsxCommonIDVKq.class)
  137. // .eq(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlName, key)
  138. //// .eq(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlState, "1")
  139. //// .isNotNull(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlInnerCodeItem)
  140. // .isNotNull(DscSxAdsShareItemQltQlsxCommonIDVKq::getWebapplyurl)
  141. // .orderByDesc(DscSxAdsShareItemQltQlsxCommonIDVKq::getUpdateDate)
  142. // .last(BizConst.LIMIT_1)
  143. // );
  144. NdKqZzsfwMattersDeduplicate dup = deduplicateService.getOne(Wrappers.lambdaQuery(NdKqZzsfwMattersDeduplicate.class)
  145. .eq(NdKqZzsfwMattersDeduplicate::getQlName, key)
  146. .last(BizConst.LIMIT_1)
  147. .isNotNull(NdKqZzsfwMattersDeduplicate::getWebapplyurl));
  148. if (Objects.isNull(dup)) {
  149. //查不到直接返回null
  150. return null;
  151. }
  152. return dup.getWebapplyurl();
  153. // return "https://www.zjzwfw.gov.cn/zjservice-fe/#/workguide?localInnerCode="+ matter.getQlInnerCodeItem() +"&siteCode=330000000000";
  154. });
  155. mattersDupCache = Caffeine.newBuilder()
  156. .refreshAfterWrite(7, TimeUnit.DAYS)
  157. .maximumSize(1024 * 100)
  158. .build(key -> {
  159. NdKqZzsfwMattersDeduplicate dup = deduplicateService.getOne(Wrappers.lambdaQuery(NdKqZzsfwMattersDeduplicate.class)
  160. .eq(NdKqZzsfwMattersDeduplicate::getQlName, key)
  161. .last(BizConst.LIMIT_1)
  162. .isNotNull(NdKqZzsfwMattersDeduplicate::getWebapplyurl));
  163. if (Objects.isNull(dup)) {
  164. //查不到直接返回null
  165. return null;
  166. }
  167. return dup;
  168. });
  169. // 初始化所有事项数据到缓存
  170. return initMatterCache();
  171. }
  172. }