柯桥增值式服务
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

209 Zeilen
9.2KB

  1. package com.ningdatech.kqapi.scheduler.task;
  2. import cn.hutool.core.date.StopWatch;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  5. import com.github.benmanes.caffeine.cache.LoadingCache;
  6. import com.ningdatech.kqapi.common.constant.BizConst;
  7. import com.ningdatech.kqapi.common.enumeration.CommonEnum;
  8. import com.ningdatech.kqapi.common.helper.MatterCacheHelper;
  9. import com.ningdatech.kqapi.zzsfw.entity.entity.ComponentsMatterEliminateEntity;
  10. import com.ningdatech.kqapi.zzsfw.service.ComponentsMatterEliminateService;
  11. import com.ningdatech.kqapi.zzsfw.entity.entity.DscSxAdsShareItemQltQlsxCommonIDVKq;
  12. import com.ningdatech.kqapi.zzsfw.entity.entity.MatterKey;
  13. import com.ningdatech.kqapi.zzsfw.entity.entity.NdKqZzsfwMattersDeduplicate;
  14. import com.ningdatech.kqapi.zzsfw.entity.entity.NdKqZzsfwMenu;
  15. import com.ningdatech.kqapi.zzsfw.manage.MatterManage;
  16. import com.ningdatech.kqapi.zzsfw.service.IDscSxAdsShareItemQltQlsxCommonIDVKqService;
  17. import com.ningdatech.kqapi.zzsfw.service.INdKqZzsfwMatterDeduplicateService;
  18. import com.ningdatech.kqapi.zzsfw.service.INdKqZzsfwMenuService;
  19. import lombok.RequiredArgsConstructor;
  20. import lombok.extern.slf4j.Slf4j;
  21. import org.apache.commons.lang3.StringUtils;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.beans.factory.annotation.Value;
  24. import org.springframework.scheduling.annotation.Scheduled;
  25. import org.springframework.stereotype.Component;
  26. import java.net.UnknownHostException;
  27. import java.util.ArrayList;
  28. import java.util.List;
  29. import java.util.Objects;
  30. /**
  31. * @Classname SynTask
  32. * @Description
  33. * @Date 2024/1/4 9:04
  34. * @Author PoffyZhang
  35. */
  36. @Component
  37. @Slf4j
  38. @RequiredArgsConstructor
  39. public class SynTask {
  40. @Value("${hostname}")
  41. public String HOST;
  42. @Value("${spring.profiles.active}")
  43. public String active;
  44. @Autowired
  45. private MatterCacheHelper matterCacheHelper;
  46. @Autowired
  47. private MatterManage matterManage;
  48. @Autowired
  49. private INdKqZzsfwMatterDeduplicateService matterDeduplicateService;
  50. @Autowired
  51. private INdKqZzsfwMenuService menuService;
  52. @Autowired
  53. private IDscSxAdsShareItemQltQlsxCommonIDVKqService kqService;
  54. @Autowired
  55. private ComponentsMatterEliminateService componentsMatterEliminateService;
  56. protected LoadingCache<MatterKey, NdKqZzsfwMattersDeduplicate> mattersDupCache;
  57. private final String KQ_ZZS_BASE_URL = "https://www.zjzwfw.gov.cn/zjservice-fe/#/workguide?localInnerCode=&siteCode=330000000000";
  58. /**
  59. * 每天
  60. */
  61. @Scheduled(cron = "0 30 8 * * ?")
  62. public void synData() throws UnknownHostException {
  63. // if (!HOST.equals(InetAddress.getLocalHost().getHostName())) {
  64. // log.info("定时器没开启或者host不对! {}:{}",
  65. // HOST,InetAddress.getLocalHost().getHostName());
  66. // return;
  67. // }
  68. // if(!TaskContant.PROD.equals(active)){
  69. // log.info("非正式环境不用运行同步任务!");
  70. // return;
  71. // }
  72. log.info("政务数据 ===================== 同步开始");
  73. StopWatch stopWatch = new StopWatch();
  74. stopWatch.start();
  75. //1.处理 去重数据
  76. if(matterCacheHelper.refreshAll()){
  77. matterManage.removeAllDup();
  78. List<NdKqZzsfwMattersDeduplicate> allDup = matterCacheHelper.all();
  79. matterDeduplicateService.saveBatch(allDup);
  80. //2. 事项
  81. List<NdKqZzsfwMenu> menus = menuService.list();
  82. for(NdKqZzsfwMenu menu : menus){
  83. String url = matterCacheHelper.getUrl(menu.getItemName());
  84. if(StringUtils.isBlank(url)){
  85. menuService.update(Wrappers.lambdaUpdate(NdKqZzsfwMenu.class)
  86. .eq(NdKqZzsfwMenu::getId,menu.getId())
  87. .set(NdKqZzsfwMenu::getWebapplyurl,null)
  88. .set(NdKqZzsfwMenu::getHasUrl, CommonEnum.NO.getCode()));
  89. }else{
  90. menuService.update(Wrappers.lambdaUpdate(NdKqZzsfwMenu.class)
  91. .eq(NdKqZzsfwMenu::getId,menu.getId())
  92. .set(NdKqZzsfwMenu::getWebapplyurl,url)
  93. .set(NdKqZzsfwMenu::getHasUrl,CommonEnum.YES.getCode()));
  94. }
  95. }
  96. }
  97. stopWatch.stop();
  98. log.info("政务数据 ===================== 同步总共耗时 :{} s",stopWatch.getTotalTimeSeconds());
  99. }
  100. public void synMenu() {
  101. //2. 事项
  102. List<NdKqZzsfwMenu> menus = menuService.list();
  103. for(NdKqZzsfwMenu menu : menus){
  104. String url = matterCacheHelper.getUrl(menu.getItemName());
  105. log.info("当前缓存的数据 : {},{}",menu.getItemName(),url);
  106. if(StringUtils.isBlank(url)){
  107. menuService.update(Wrappers.lambdaUpdate(NdKqZzsfwMenu.class)
  108. .eq(NdKqZzsfwMenu::getId,menu.getId())
  109. .set(NdKqZzsfwMenu::getWebapplyurl,null)
  110. .set(NdKqZzsfwMenu::getHasUrl, CommonEnum.NO.getCode()));
  111. }else{
  112. menuService.update(Wrappers.lambdaUpdate(NdKqZzsfwMenu.class)
  113. .eq(NdKqZzsfwMenu::getId,menu.getId())
  114. .set(NdKqZzsfwMenu::getWebapplyurl,url)
  115. .set(NdKqZzsfwMenu::getHasUrl,CommonEnum.YES.getCode()));
  116. }
  117. }
  118. }
  119. public String synEliminate(List<String> keys){
  120. // kqService.remove(new LambdaQueryWrapper<DscSxAdsShareItemQltQlsxCommonIDVKq>()
  121. // .in(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlName, keys));
  122. // 添加剔除信息
  123. List<ComponentsMatterEliminateEntity> entityList = new ArrayList<>();
  124. keys.forEach(key ->{
  125. ComponentsMatterEliminateEntity one = componentsMatterEliminateService.getOne(Wrappers.lambdaQuery(ComponentsMatterEliminateEntity.class)
  126. .eq(ComponentsMatterEliminateEntity::getQlName, key));
  127. if (Objects.isNull(one)){
  128. entityList.add(new ComponentsMatterEliminateEntity(key,"1"));
  129. }
  130. // 删除缓存
  131. DscSxAdsShareItemQltQlsxCommonIDVKq matter = getSynUrl(key);
  132. String url = KQ_ZZS_BASE_URL.replace("localInnerCode=", "localInnerCode=" + matter.getQlInnerCode());
  133. MatterKey matterKey = MatterKey.of(matter.getQlName(),url);
  134. try {
  135. mattersDupCache.invalidate(matterKey);
  136. }catch (Exception e){
  137. log.error("mattersDupCache is null", e.getMessage());
  138. }
  139. });
  140. componentsMatterEliminateService.saveBatch(entityList);
  141. // 删除menu表
  142. menuService.remove(new LambdaQueryWrapper<NdKqZzsfwMenu>()
  143. .in(NdKqZzsfwMenu::getItemName, keys));
  144. // 删除deduplicate表
  145. matterDeduplicateService.remove(new LambdaQueryWrapper<NdKqZzsfwMattersDeduplicate>()
  146. .in(NdKqZzsfwMattersDeduplicate::getQlName, keys));
  147. return "剔除成功";
  148. }
  149. public DscSxAdsShareItemQltQlsxCommonIDVKq getSynUrl(String key){
  150. DscSxAdsShareItemQltQlsxCommonIDVKq matter = kqService
  151. .getOne(Wrappers.lambdaQuery(DscSxAdsShareItemQltQlsxCommonIDVKq.class)
  152. .select(DscSxAdsShareItemQltQlsxCommonIDVKq::getRowguid,
  153. DscSxAdsShareItemQltQlsxCommonIDVKq::getQlName,
  154. DscSxAdsShareItemQltQlsxCommonIDVKq::getQlState,
  155. DscSxAdsShareItemQltQlsxCommonIDVKq::getQlInnerCode,
  156. DscSxAdsShareItemQltQlsxCommonIDVKq::getWebapplyurl)
  157. .eq(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlName, key)
  158. .eq(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlState, "1")
  159. .isNotNull(DscSxAdsShareItemQltQlsxCommonIDVKq::getWebapplyurl)
  160. // 确保getQlInnerCodeItem字段不为null且不为""
  161. .isNotNull(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlInnerCode)
  162. .ne(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlInnerCode, "")
  163. .orderByDesc(DscSxAdsShareItemQltQlsxCommonIDVKq::getUpdateDate)
  164. .last(BizConst.LIMIT_1));
  165. return matter;
  166. }
  167. public String synSingle(String key){
  168. DscSxAdsShareItemQltQlsxCommonIDVKq matter = getSynUrl(key);
  169. String url = KQ_ZZS_BASE_URL.replace("localInnerCode=", "localInnerCode=" + matter.getQlInnerCode());
  170. List<NdKqZzsfwMenu> menus = menuService.list(Wrappers.lambdaQuery(NdKqZzsfwMenu.class)
  171. .eq(NdKqZzsfwMenu::getItemName, key));
  172. menus.forEach(menu->{
  173. menuService.update(Wrappers.lambdaUpdate(NdKqZzsfwMenu.class)
  174. .eq(NdKqZzsfwMenu::getId,menu.getId())
  175. .set(NdKqZzsfwMenu::getWebapplyurl,url)
  176. .set(NdKqZzsfwMenu::getHasUrl,CommonEnum.YES.getCode()));
  177. });
  178. // 更新缓存
  179. MatterKey matterKey = MatterKey.of(matter.getQlName(),url);
  180. mattersDupCache.invalidate(matterKey);
  181. mattersDupCache.put(matterKey,NdKqZzsfwMattersDeduplicate.of(matter.getQlName(),url));
  182. return "更新成功,rul:" + url;
  183. }
  184. }