@@ -5,6 +5,8 @@ import com.github.benmanes.caffeine.cache.Caffeine; | |||||
import com.github.benmanes.caffeine.cache.LoadingCache; | import com.github.benmanes.caffeine.cache.LoadingCache; | ||||
import com.google.common.collect.Lists; | import com.google.common.collect.Lists; | ||||
import com.ningdatech.kqapi.common.constant.BizConst; | import com.ningdatech.kqapi.common.constant.BizConst; | ||||
import com.ningdatech.kqapi.zzsfw.entity.entity.ComponentsMatterEliminateEntity; | |||||
import com.ningdatech.kqapi.zzsfw.service.ComponentsMatterEliminateService; | |||||
import com.ningdatech.kqapi.zzsfw.entity.entity.DscSxAdsShareItemQltQlsxCommonIDVKq; | import com.ningdatech.kqapi.zzsfw.entity.entity.DscSxAdsShareItemQltQlsxCommonIDVKq; | ||||
import com.ningdatech.kqapi.zzsfw.entity.entity.MatterKey; | import com.ningdatech.kqapi.zzsfw.entity.entity.MatterKey; | ||||
import com.ningdatech.kqapi.zzsfw.entity.entity.NdKqZzsfwMattersDeduplicate; | import com.ningdatech.kqapi.zzsfw.entity.entity.NdKqZzsfwMattersDeduplicate; | ||||
@@ -18,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Objects; | import java.util.Objects; | ||||
import java.util.concurrent.TimeUnit; | import java.util.concurrent.TimeUnit; | ||||
import java.util.stream.Collectors; | |||||
/** | /** | ||||
* <p> | * <p> | ||||
@@ -40,11 +43,22 @@ public abstract class AbstractMatterCacheHelper implements InitializingBean { | |||||
protected LoadingCache<String, String> mattersUrlCache; | protected LoadingCache<String, String> mattersUrlCache; | ||||
@Autowired | |||||
private ComponentsMatterEliminateService componentsMatterEliminateService; | |||||
private final String KQ_ZZS_BASE_URL = "https://www.zjzwfw.gov.cn/zjservice-fe/#/workguide?localInnerCode=&siteCode=330000000000"; | private final String KQ_ZZS_BASE_URL = "https://www.zjzwfw.gov.cn/zjservice-fe/#/workguide?localInnerCode=&siteCode=330000000000"; | ||||
private Boolean initMatterCache() { | private Boolean initMatterCache() { | ||||
// 首先,查询ComponentsMatterEliminateEntity中isDelete不为1的qlName列表, 未被剔除 | |||||
List<String> eliminatedQlNames = componentsMatterEliminateService.list( | |||||
Wrappers.<ComponentsMatterEliminateEntity>lambdaQuery() | |||||
.select(ComponentsMatterEliminateEntity::getQlName) | |||||
.ne(ComponentsMatterEliminateEntity::getIsDelete, 1) | |||||
).stream().map(ComponentsMatterEliminateEntity::getQlName).collect(Collectors.toList()); | |||||
// 然后,使用eliminatedQlNames来过滤DscSxAdsShareItemQltQlsxCommonIDVKq查询 | |||||
List<DscSxAdsShareItemQltQlsxCommonIDVKq> allMatters = kqService | List<DscSxAdsShareItemQltQlsxCommonIDVKq> allMatters = kqService | ||||
.list(Wrappers.lambdaQuery(DscSxAdsShareItemQltQlsxCommonIDVKq.class) | |||||
.list(Wrappers.<DscSxAdsShareItemQltQlsxCommonIDVKq>lambdaQuery() | |||||
.select(DscSxAdsShareItemQltQlsxCommonIDVKq::getRowguid, | .select(DscSxAdsShareItemQltQlsxCommonIDVKq::getRowguid, | ||||
DscSxAdsShareItemQltQlsxCommonIDVKq::getQlName, | DscSxAdsShareItemQltQlsxCommonIDVKq::getQlName, | ||||
DscSxAdsShareItemQltQlsxCommonIDVKq::getQlState, | DscSxAdsShareItemQltQlsxCommonIDVKq::getQlState, | ||||
@@ -52,9 +66,9 @@ public abstract class AbstractMatterCacheHelper implements InitializingBean { | |||||
DscSxAdsShareItemQltQlsxCommonIDVKq::getWebapplyurl) | DscSxAdsShareItemQltQlsxCommonIDVKq::getWebapplyurl) | ||||
.eq(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlState, "1") | .eq(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlState, "1") | ||||
.isNotNull(DscSxAdsShareItemQltQlsxCommonIDVKq::getWebapplyurl) | .isNotNull(DscSxAdsShareItemQltQlsxCommonIDVKq::getWebapplyurl) | ||||
// 确保getQlInnerCodeItem字段不为null且不为"" | |||||
.isNotNull(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlInnerCodeItem) | .isNotNull(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlInnerCodeItem) | ||||
.ne(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlInnerCodeItem, "") | .ne(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlInnerCodeItem, "") | ||||
.notIn(!eliminatedQlNames.isEmpty(), DscSxAdsShareItemQltQlsxCommonIDVKq::getQlName, eliminatedQlNames) // 过滤掉那些在eliminatedQlNames中的记录 | |||||
.orderByDesc(DscSxAdsShareItemQltQlsxCommonIDVKq::getUpdateDate)); | .orderByDesc(DscSxAdsShareItemQltQlsxCommonIDVKq::getUpdateDate)); | ||||
if (allMatters.isEmpty()) { | if (allMatters.isEmpty()) { | ||||
log.warn("事项数据未初始化"); | log.warn("事项数据未初始化"); | ||||
@@ -13,10 +13,12 @@ import lombok.RequiredArgsConstructor; | |||||
import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||
import org.springframework.validation.annotation.Validated; | import org.springframework.validation.annotation.Validated; | ||||
import org.springframework.web.bind.annotation.GetMapping; | import org.springframework.web.bind.annotation.GetMapping; | ||||
import org.springframework.web.bind.annotation.PostMapping; | |||||
import org.springframework.web.bind.annotation.RequestMapping; | import org.springframework.web.bind.annotation.RequestMapping; | ||||
import org.springframework.web.bind.annotation.RestController; | import org.springframework.web.bind.annotation.RestController; | ||||
import java.net.UnknownHostException; | import java.net.UnknownHostException; | ||||
import java.util.Arrays; | |||||
import java.util.List; | import java.util.List; | ||||
/** | /** | ||||
@@ -59,6 +61,19 @@ public class TaskController { | |||||
return "同步成功"; | return "同步成功"; | ||||
} | } | ||||
@ApiOperation(value = "剔除某个菜单组件名称数据", notes = "英文逗号','分割") | |||||
@GetMapping("/synEliminate") | |||||
public String synEliminate(String keys){ | |||||
return synTask.synEliminate(Arrays.asList(keys.split(","))); | |||||
} | |||||
@ApiOperation(value = "同步单个菜单组件名称", notes = "同步菜单链接数据") | |||||
@GetMapping("/synSingle") | |||||
public String synSingle(String key){ | |||||
synTask.synSingle(key); | |||||
return "同步成功"; | |||||
} | |||||
@ApiOperation(value = "同步菜单链接数据", notes = "同步菜单链接数据") | @ApiOperation(value = "同步菜单链接数据", notes = "同步菜单链接数据") | ||||
@GetMapping("/syn-menu") | @GetMapping("/syn-menu") | ||||
public String synMenuData() throws UnknownHostException { | public String synMenuData() throws UnknownHostException { | ||||
@@ -1,10 +1,16 @@ | |||||
package com.ningdatech.kqapi.scheduler.task; | package com.ningdatech.kqapi.scheduler.task; | ||||
import cn.hutool.core.date.StopWatch; | import cn.hutool.core.date.StopWatch; | ||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||
import com.github.benmanes.caffeine.cache.LoadingCache; | |||||
import com.ningdatech.kqapi.common.constant.BizConst; | |||||
import com.ningdatech.kqapi.common.enumeration.CommonEnum; | import com.ningdatech.kqapi.common.enumeration.CommonEnum; | ||||
import com.ningdatech.kqapi.common.helper.MatterCacheHelper; | import com.ningdatech.kqapi.common.helper.MatterCacheHelper; | ||||
import com.ningdatech.kqapi.scheduler.contants.TaskContant; | |||||
import com.ningdatech.kqapi.zzsfw.entity.entity.ComponentsMatterEliminateEntity; | |||||
import com.ningdatech.kqapi.zzsfw.service.ComponentsMatterEliminateService; | |||||
import com.ningdatech.kqapi.zzsfw.entity.entity.DscSxAdsShareItemQltQlsxCommonIDVKq; | |||||
import com.ningdatech.kqapi.zzsfw.entity.entity.MatterKey; | |||||
import com.ningdatech.kqapi.zzsfw.entity.entity.NdKqZzsfwMattersDeduplicate; | import com.ningdatech.kqapi.zzsfw.entity.entity.NdKqZzsfwMattersDeduplicate; | ||||
import com.ningdatech.kqapi.zzsfw.entity.entity.NdKqZzsfwMenu; | import com.ningdatech.kqapi.zzsfw.entity.entity.NdKqZzsfwMenu; | ||||
import com.ningdatech.kqapi.zzsfw.manage.MatterManage; | import com.ningdatech.kqapi.zzsfw.manage.MatterManage; | ||||
@@ -19,9 +25,10 @@ import org.springframework.beans.factory.annotation.Value; | |||||
import org.springframework.scheduling.annotation.Scheduled; | import org.springframework.scheduling.annotation.Scheduled; | ||||
import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||
import java.net.InetAddress; | |||||
import java.net.UnknownHostException; | import java.net.UnknownHostException; | ||||
import java.util.ArrayList; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Objects; | |||||
/** | /** | ||||
* @Classname SynTask | * @Classname SynTask | ||||
@@ -51,6 +58,16 @@ public class SynTask { | |||||
@Autowired | @Autowired | ||||
private INdKqZzsfwMenuService menuService; | private INdKqZzsfwMenuService menuService; | ||||
@Autowired | |||||
private IDscSxAdsShareItemQltQlsxCommonIDVKqService kqService; | |||||
@Autowired | |||||
private ComponentsMatterEliminateService componentsMatterEliminateService; | |||||
protected LoadingCache<MatterKey, NdKqZzsfwMattersDeduplicate> mattersDupCache; | |||||
private final String KQ_ZZS_BASE_URL = "https://www.zjzwfw.gov.cn/zjservice-fe/#/workguide?localInnerCode=&siteCode=330000000000"; | |||||
/** | /** | ||||
* 每天 | * 每天 | ||||
*/ | */ | ||||
@@ -117,4 +134,75 @@ public class SynTask { | |||||
} | } | ||||
} | } | ||||
} | } | ||||
public String synEliminate(List<String> keys){ | |||||
// kqService.remove(new LambdaQueryWrapper<DscSxAdsShareItemQltQlsxCommonIDVKq>() | |||||
// .in(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlName, keys)); | |||||
// 添加剔除信息 | |||||
List<ComponentsMatterEliminateEntity> entityList = new ArrayList<>(); | |||||
keys.forEach(key ->{ | |||||
ComponentsMatterEliminateEntity one = componentsMatterEliminateService.getOne(Wrappers.lambdaQuery(ComponentsMatterEliminateEntity.class) | |||||
.eq(ComponentsMatterEliminateEntity::getQlName, key)); | |||||
if (Objects.isNull(one)){ | |||||
entityList.add(new ComponentsMatterEliminateEntity(key,"1")); | |||||
} | |||||
// 删除缓存 | |||||
DscSxAdsShareItemQltQlsxCommonIDVKq matter = getSynUrl(key); | |||||
String url = KQ_ZZS_BASE_URL.replace("localInnerCode=", "localInnerCode=" + matter.getQlInnerCodeItem()); | |||||
MatterKey matterKey = MatterKey.of(matter.getQlName(),url); | |||||
try { | |||||
mattersDupCache.invalidate(matterKey); | |||||
}catch (Exception e){ | |||||
log.error("mattersDupCache is null", e.getMessage()); | |||||
} | |||||
}); | |||||
componentsMatterEliminateService.saveBatch(entityList); | |||||
// 删除menu表 | |||||
menuService.remove(new LambdaQueryWrapper<NdKqZzsfwMenu>() | |||||
.in(NdKqZzsfwMenu::getItemName, keys)); | |||||
// 删除deduplicate表 | |||||
matterDeduplicateService.remove(new LambdaQueryWrapper<NdKqZzsfwMattersDeduplicate>() | |||||
.in(NdKqZzsfwMattersDeduplicate::getQlName, keys)); | |||||
return "剔除成功"; | |||||
} | |||||
public DscSxAdsShareItemQltQlsxCommonIDVKq getSynUrl(String key){ | |||||
DscSxAdsShareItemQltQlsxCommonIDVKq matter = kqService | |||||
.getOne(Wrappers.lambdaQuery(DscSxAdsShareItemQltQlsxCommonIDVKq.class) | |||||
.select(DscSxAdsShareItemQltQlsxCommonIDVKq::getRowguid, | |||||
DscSxAdsShareItemQltQlsxCommonIDVKq::getQlName, | |||||
DscSxAdsShareItemQltQlsxCommonIDVKq::getQlState, | |||||
DscSxAdsShareItemQltQlsxCommonIDVKq::getQlInnerCodeItem, | |||||
DscSxAdsShareItemQltQlsxCommonIDVKq::getWebapplyurl) | |||||
.eq(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlName, key) | |||||
.eq(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlState, "1") | |||||
.isNotNull(DscSxAdsShareItemQltQlsxCommonIDVKq::getWebapplyurl) | |||||
// 确保getQlInnerCodeItem字段不为null且不为"" | |||||
.isNotNull(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlInnerCodeItem) | |||||
.ne(DscSxAdsShareItemQltQlsxCommonIDVKq::getQlInnerCodeItem, "") | |||||
.orderByDesc(DscSxAdsShareItemQltQlsxCommonIDVKq::getUpdateDate) | |||||
.last(BizConst.LIMIT_1)); | |||||
return matter; | |||||
} | |||||
public String synSingle(String key){ | |||||
DscSxAdsShareItemQltQlsxCommonIDVKq matter = getSynUrl(key); | |||||
String url = KQ_ZZS_BASE_URL.replace("localInnerCode=", "localInnerCode=" + matter.getQlInnerCodeItem()); | |||||
List<NdKqZzsfwMenu> menus = menuService.list(Wrappers.lambdaQuery(NdKqZzsfwMenu.class) | |||||
.eq(NdKqZzsfwMenu::getItemName, key)); | |||||
menus.forEach(menu->{ | |||||
menuService.update(Wrappers.lambdaUpdate(NdKqZzsfwMenu.class) | |||||
.eq(NdKqZzsfwMenu::getId,menu.getId()) | |||||
.set(NdKqZzsfwMenu::getWebapplyurl,url) | |||||
.set(NdKqZzsfwMenu::getHasUrl,CommonEnum.YES.getCode())); | |||||
}); | |||||
// 更新缓存 | |||||
MatterKey matterKey = MatterKey.of(matter.getQlName(),url); | |||||
mattersDupCache.invalidate(matterKey); | |||||
mattersDupCache.put(matterKey,NdKqZzsfwMattersDeduplicate.of(matter.getQlName(),url)); | |||||
return "更新成功,rul:" + url; | |||||
} | |||||
} | } |
@@ -0,0 +1,44 @@ | |||||
package com.ningdatech.kqapi.zzsfw.entity.entity; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.annotation.TableName; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import java.security.Timestamp; | |||||
// ComponentsMatterEliminateEntity.java | |||||
@Data | |||||
@TableName("components_matter_eliminate") | |||||
public class ComponentsMatterEliminateEntity { | |||||
/** | |||||
* 事项名称剔除表,主要剔除事项url报错404链接 | |||||
*/ | |||||
@ApiModelProperty("id主键") | |||||
@TableId(type = IdType.AUTO) | |||||
private Long id; | |||||
/** | |||||
* 组件名称 | |||||
*/ | |||||
private String qlName; | |||||
/** | |||||
* 剔除时间 | |||||
*/ | |||||
private Timestamp eliminateTime; | |||||
/** | |||||
* 剔除标识,0未剔除,1已剔除 | |||||
*/ | |||||
private String isDelete; | |||||
public ComponentsMatterEliminateEntity(String qlName,String isDelete) { | |||||
this.qlName = qlName; | |||||
this.isDelete = isDelete; | |||||
} | |||||
} | |||||
@@ -0,0 +1,11 @@ | |||||
package com.ningdatech.kqapi.zzsfw.mapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.ningdatech.kqapi.zzsfw.entity.entity.ComponentsMatterEliminateEntity; | |||||
/** | |||||
* @author wangrenkang | |||||
* @date 2024-01-15 10:53:17 | |||||
*/ | |||||
public interface ComponentsMatterEliminateMapper extends BaseMapper<ComponentsMatterEliminateEntity> { | |||||
} |
@@ -0,0 +1,5 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
<mapper namespace="com.ningdatech.kqapi.zzsfw.mapper.ComponentsMatterEliminateMapper"> | |||||
</mapper> |
@@ -0,0 +1,8 @@ | |||||
package com.ningdatech.kqapi.zzsfw.service; | |||||
import com.baomidou.mybatisplus.extension.service.IService; | |||||
import com.ningdatech.kqapi.zzsfw.entity.entity.ComponentsMatterEliminateEntity; | |||||
// ComponentsMatterEliminateService.java | |||||
public interface ComponentsMatterEliminateService extends IService<ComponentsMatterEliminateEntity> { | |||||
} |
@@ -0,0 +1,16 @@ | |||||
package com.ningdatech.kqapi.zzsfw.service.impl; | |||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||||
import com.ningdatech.kqapi.zzsfw.entity.entity.ComponentsMatterEliminateEntity; | |||||
import com.ningdatech.kqapi.zzsfw.mapper.ComponentsMatterEliminateMapper; | |||||
import com.ningdatech.kqapi.zzsfw.service.ComponentsMatterEliminateService; | |||||
import org.springframework.stereotype.Service; | |||||
/** | |||||
* @author wangrenkang | |||||
* @date 2024-01-15 10:54:49 | |||||
*/ | |||||
@Service | |||||
public class ComponentsMatterEliminateServiceImpl extends ServiceImpl<ComponentsMatterEliminateMapper, ComponentsMatterEliminateEntity> implements ComponentsMatterEliminateService { | |||||
} |