爬虫代理服务

This commit is contained in:
王洪庆 2023-04-19 19:01:07 +08:00
parent c342307ac1
commit 9abf5b429e
29 changed files with 186 additions and 1235 deletions

View File

@ -56,5 +56,8 @@ public interface CommonConstant {
* 系统管理模块 application name * 系统管理模块 application name
*/ */
String KN_SYSTEM_MANAGER_MODULE_NAME = "system-manager"; String KN_SYSTEM_MANAGER_MODULE_NAME = "system-manager";
String KN_VORDM_SETTING = "kn-setting"; /**
* 爬虫代理模块 application name
*/
String VORDM_PROXY_CRAWL_MODULE_NAME = "vordm-crawl";
} }

View File

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>kn-service-api</artifactId>
<groupId>com.kening.platform</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kn-setting-api</artifactId>
<dependencies>
<dependency>
<groupId>com.kening.platform</groupId>
<artifactId>kn-common</artifactId>
<version>${revision}</version>
</dependency>
</dependencies>
</project>

View File

@ -1,133 +0,0 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package com.kening.setting.cache;
import com.kening.setting.entity.DictBiz;
import com.kening.setting.enums.DictBizEnum;
import com.kening.setting.feign.IDictBizClient;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.SpringUtil;
import org.springblade.core.tool.utils.StringPool;
import java.util.List;
import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
/**
* 业务字典缓存工具类
*
* @author Chill
*/
public class DictBizCache {
private static final String DICT_ID = "dictBiz:id";
private static final String DICT_VALUE = "dictBiz:value";
private static final String DICT_LIST = "dictBiz:list";
private static IDictBizClient dictClient;
private static IDictBizClient getDictClient() {
if (dictClient == null) {
dictClient = SpringUtil.getBean(IDictBizClient.class);
}
return dictClient;
}
/**
* 获取字典实体
*
* @param id 主键
* @return DictBiz
*/
public static DictBiz getById(Long id) {
String keyPrefix = DICT_ID.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
return CacheUtil.get(DICT_CACHE, keyPrefix, id, () -> {
R<DictBiz> result = getDictClient().getById(id);
return result.getData();
});
}
/**
* 获取字典值
*
* @param code 字典编号枚举
* @param dictKey Integer型字典键
* @return String
*/
public static String getValue(DictBizEnum code, Integer dictKey) {
return getValue(code.getName(), dictKey);
}
/**
* 获取字典值
*
* @param code 字典编号
* @param dictKey Integer型字典键
* @return String
*/
public static String getValue(String code, Integer dictKey) {
String keyPrefix = DICT_VALUE.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
return CacheUtil.get(DICT_CACHE, keyPrefix + code + StringPool.COLON, String.valueOf(dictKey), () -> {
R<String> result = getDictClient().getValue(code, String.valueOf(dictKey));
return result.getData();
});
}
/**
* 获取字典值
*
* @param code 字典编号枚举
* @param dictKey String型字典键
* @return String
*/
public static String getValue(DictBizEnum code, String dictKey) {
return getValue(code.getName(), dictKey);
}
/**
* 获取字典值
*
* @param code 字典编号
* @param dictKey String型字典键
* @return String
*/
public static String getValue(String code, String dictKey) {
String keyPrefix = DICT_VALUE.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
return CacheUtil.get(DICT_CACHE, keyPrefix + code + StringPool.COLON, dictKey, () -> {
R<String> result = getDictClient().getValue(code, dictKey);
return result.getData();
});
}
/**
* 获取字典集合
*
* @param code 字典编号
* @return List<DictBiz>
*/
public static List<DictBiz> getList(String code) {
String keyPrefix = DICT_LIST.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
return CacheUtil.get(DICT_CACHE, keyPrefix, code, () -> {
R<List<DictBiz>> result = getDictClient().getList(code);
return result.getData();
});
}
}

View File

@ -1,109 +0,0 @@
package com.kening.setting.entity;
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* 实体类
*
* @author Chill
*/
@Data
@TableName("blade_dict_biz")
@ApiModel(value = "DictBiz对象", description = "DictBiz对象")
public class DictBiz implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "主键")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 租户ID
*/
@ApiModelProperty(value = "租户ID")
private String tenantId;
/**
* 父主键
*/
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "父主键")
private Long parentId;
/**
* 字典码
*/
@ApiModelProperty(value = "字典码")
private String code;
/**
* 字典值
*/
@ApiModelProperty(value = "字典值")
private String dictKey;
/**
* 字典名称
*/
@ApiModelProperty(value = "字典名称")
private String dictValue;
/**
* 排序
*/
@ApiModelProperty(value = "排序")
private Integer sort;
/**
* 字典备注
*/
@ApiModelProperty(value = "字典备注")
private String remark;
/**
* 是否已封存
*/
@ApiModelProperty(value = "是否已封存")
private Integer isSealed;
/**
* 是否已删除
*/
@TableLogic
@ApiModelProperty(value = "是否已删除")
private Integer isDeleted;
}

View File

@ -1,39 +0,0 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package com.kening.setting.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 业务字典枚举类
*
* @author Chill
*/
@Getter
@AllArgsConstructor
public enum DictBizEnum {
/**
* 测试
*/
TEST("test"),
;
final String name;
}

View File

@ -1,72 +0,0 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package com.kening.setting.feign;
import com.kening.setting.entity.DictBiz;
import org.springblade.core.tool.api.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* Feign接口类
*
* @author Chill
*/
@FeignClient(
value = "kn-system-biz-dict",
fallback = com.kening.setting.feign.IDictBizClientFallback.class
)
public interface IDictBizClient {
String API_PREFIX = "/client";
String GET_BY_ID = API_PREFIX + "/dict-biz/get-by-id";
String GET_VALUE = API_PREFIX + "/dict-biz/get-value";
String GET_LIST = API_PREFIX + "/dict-biz/get-list";
/**
* 获取字典实体
*
* @param id 主键
* @return
*/
@GetMapping(GET_BY_ID)
R<DictBiz> getById(@RequestParam("id") Long id);
/**
* 获取字典表对应值
*
* @param code 字典编号
* @param dictKey 字典序号
* @return
*/
@GetMapping(GET_VALUE)
R<String> getValue(@RequestParam("code") String code, @RequestParam("dictKey") String dictKey);
/**
* 获取字典表
*
* @param code 字典编号
* @return
*/
@GetMapping(GET_LIST)
R<List<DictBiz>> getList(@RequestParam("code") String code);
}

View File

@ -1,46 +0,0 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package com.kening.setting.feign;
import com.kening.setting.entity.DictBiz;
import org.springblade.core.tool.api.R;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* Feign失败配置
*
* @author Chill
*/
@Component
public class IDictBizClientFallback implements IDictBizClient {
@Override
public R<DictBiz> getById(Long id) {
return R.fail("获取数据失败");
}
@Override
public R<String> getValue(String code, String dictKey) {
return R.fail("获取数据失败");
}
@Override
public R<List<DictBiz>> getList(String code) {
return R.fail("获取数据失败");
}
}

View File

@ -1,71 +0,0 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package com.kening.setting.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.kening.setting.entity.DictBiz;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.tool.node.INode;
import java.util.ArrayList;
import java.util.List;
/**
* 视图实体类
*
* @author Chill
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "DictBizVO对象", description = "DictBizVO对象")
public class DictBizVO extends DictBiz implements INode<DictBizVO> {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/**
* 父节点ID
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long parentId;
/**
* 子孙节点
*/
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private List<DictBizVO> children;
@Override
public List<DictBizVO> getChildren() {
if (this.children == null) {
this.children = new ArrayList<>();
}
return this.children;
}
/**
* 上级字典
*/
private String parentName;
}

View File

@ -14,7 +14,6 @@
<version>${revision}</version> <version>${revision}</version>
<modules> <modules>
<module>biz-vordm-api</module> <module>biz-vordm-api</module>
<module>kn-setting-api</module>
</modules> </modules>
<packaging>pom</packaging> <packaging>pom</packaging>
<description>微服务API集合</description> <description>微服务API集合</description>

View File

@ -17,6 +17,87 @@
<artifactId>biz-vordm-api</artifactId> <artifactId>biz-vordm-api</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<dependency>
<groupId>org.hdrhistogram</groupId>
<artifactId>HdrHistogram</artifactId>
<version>2.1.12</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.25.0-GA</version>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-core-boot</artifactId>
<exclusions>
<exclusion>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
</exclusion>
<exclusion>
<artifactId>HdrHistogram</artifactId>
<groupId>org.hdrhistogram</groupId>
</exclusion>
<exclusion>
<artifactId>javassist</artifactId>
<groupId>org.javassist</groupId>
</exclusion>
<exclusion>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
</exclusion>
<exclusion>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</exclusion>
<exclusion>
<artifactId>fastjson</artifactId>
<groupId>com.alibaba</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-starter-oss</artifactId>
<exclusions>
<exclusion>
<artifactId>esdk-obs-java</artifactId>
<groupId>com.huaweicloud</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-mock</artifactId>
<version>2.0.8</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-starter-swagger</artifactId>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-starter-tenant</artifactId>
</dependency>
<!--邮件发送依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--thymeleaf-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>kn-service</artifactId>
<groupId>com.kening.platform</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kn-setting</artifactId>
<dependencies>
<dependency>
<groupId>com.kening.platform</groupId>
<artifactId>kn-setting-api</artifactId>
<version>${revision}</version>
</dependency>
</dependencies>
</project>

View File

@ -1,16 +0,0 @@
package com.kening.setting;
import org.springblade.common.constant.CommonConstant;
import org.springblade.core.launch.BladeApplication;
import org.springframework.cloud.client.SpringCloudApplication;
/**
* @author wanghongqing
* @date 2023/3/21 14:24
**/
@SpringCloudApplication
public class SettingApplication {
public static void main(String[] args) {
BladeApplication.run(CommonConstant.KN_VORDM_SETTING, SettingApplication.class, args);
}
}

View File

@ -1,15 +0,0 @@
package com.kening.setting.config;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* @author wanghongqing
* @date 2023/3/21 14:32
**/
@Configuration
@ComponentScan({"org.springblade", "com.kening.setting"})
@MapperScan({"org.springblade.**.mapper.**", "com.kening.**.mapper.**"})
public class VoRdmConfig {
}

View File

@ -1,179 +0,0 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package com.kening.setting.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.kening.setting.entity.DictBiz;
import com.kening.setting.service.IDictBizService;
import com.kening.setting.vo.DictBizVO;
import com.kening.setting.wrapper.DictBizWrapper;
import io.swagger.annotations.*;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;
import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
/**
* 控制器
*
* @author Chill
*/
@NonDS
@RestController
@AllArgsConstructor
@RequestMapping("/dict-biz")
@Api(value = "业务字典", tags = "业务字典")
public class DictBizController extends BladeController {
private final IDictBizService dictService;
/**
* 详情
*/
@GetMapping("/detail")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "详情", notes = "传入dict")
public R<DictBizVO> detail(DictBiz dict) {
DictBiz detail = dictService.getOne(Condition.getQueryWrapper(dict));
return R.data(DictBizWrapper.build().entityVO(detail));
}
/**
* 列表
*/
@GetMapping("/list")
@ApiImplicitParams({
@ApiImplicitParam(name = "code", value = "字典编号", paramType = "query", dataType = "string"),
@ApiImplicitParam(name = "dictValue", value = "字典名称", paramType = "query", dataType = "string")
})
@ApiOperationSupport(order = 2)
@ApiOperation(value = "列表", notes = "传入dict")
public R<List<DictBizVO>> list(@ApiIgnore @RequestParam Map<String, Object> dict) {
List<DictBiz> list = dictService.list(Condition.getQueryWrapper(dict, DictBiz.class).lambda().orderByAsc(DictBiz::getSort));
return R.data(DictBizWrapper.build().listNodeVO(list));
}
/**
* 顶级列表
*/
@GetMapping("/parent-list")
@ApiImplicitParams({
@ApiImplicitParam(name = "code", value = "字典编号", paramType = "query", dataType = "string"),
@ApiImplicitParam(name = "dictValue", value = "字典名称", paramType = "query", dataType = "string")
})
@ApiOperationSupport(order = 3)
@ApiOperation(value = "列表", notes = "传入dict")
public R<IPage<DictBizVO>> parentList(@ApiIgnore @RequestParam Map<String, Object> dict, Query query) {
return R.data(dictService.parentList(dict, query));
}
/**
* 子列表
*/
@GetMapping("/child-list")
@ApiImplicitParams({
@ApiImplicitParam(name = "code", value = "字典编号", paramType = "query", dataType = "string"),
@ApiImplicitParam(name = "dictValue", value = "字典名称", paramType = "query", dataType = "string"),
@ApiImplicitParam(name = "parentId", value = "字典名称", paramType = "query", dataType = "string")
})
@ApiOperationSupport(order = 4)
@ApiOperation(value = "列表", notes = "传入dict")
public R<List<DictBizVO>> childList(@ApiIgnore @RequestParam Map<String, Object> dict, @RequestParam(required = false, defaultValue = "-1") Long parentId) {
return R.data(dictService.childList(dict, parentId));
}
/**
* 获取字典树形结构
*/
@GetMapping("/tree")
@ApiOperationSupport(order = 5)
@ApiOperation(value = "树形结构", notes = "树形结构")
public R<List<DictBizVO>> tree() {
List<DictBizVO> tree = dictService.tree();
return R.data(tree);
}
/**
* 获取字典树形结构
*/
@GetMapping("/parent-tree")
@ApiOperationSupport(order = 5)
@ApiOperation(value = "树形结构", notes = "树形结构")
public R<List<DictBizVO>> parentTree() {
List<DictBizVO> tree = dictService.parentTree();
return R.data(tree);
}
/**
* 新增或修改
*/
@PostMapping("/submit")
@ApiOperationSupport(order = 6)
@ApiOperation(value = "新增或修改", notes = "传入dict")
public R submit(@Valid @RequestBody DictBiz dict) {
CacheUtil.clear(DICT_CACHE);
return R.status(dictService.submit(dict));
}
/**
* 删除
*/
@PostMapping("/remove")
@ApiOperationSupport(order = 7)
@ApiOperation(value = "删除", notes = "传入ids")
public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
CacheUtil.clear(DICT_CACHE);
return R.status(dictService.removeDict(ids));
}
/**
* 获取字典
*/
@GetMapping("/dictionary")
@ApiOperationSupport(order = 8)
@ApiOperation(value = "获取字典", notes = "获取字典")
public R<List<DictBiz>> dictionary(String code) {
List<DictBiz> tree = dictService.getList(code);
return R.data(tree);
}
/**
* 获取字典树
*/
@GetMapping("/dictionary-tree")
@ApiOperationSupport(order = 9)
@ApiOperation(value = "获取字典树", notes = "获取字典树")
public R<List<DictBizVO>> dictionaryTree(String code) {
List<DictBiz> tree = dictService.getList(code);
return R.data(DictBizWrapper.build().listNodeVO(tree));
}
}

View File

@ -1,64 +0,0 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package com.kening.setting.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.kening.setting.entity.DictBiz;
import com.kening.setting.vo.DictBizVO;
import java.util.List;
/**
* Mapper 接口
*
* @author Chill
*/
public interface DictBizMapper extends BaseMapper<DictBiz> {
/**
* 获取字典表对应中文
*
* @param code 字典编号
* @param dictKey 字典序号
* @return
*/
String getValue(String code, String dictKey);
/**
* 获取字典表
*
* @param code 字典编号
* @return
*/
List<DictBiz> getList(String code);
/**
* 获取树形节点
*
* @return
*/
List<DictBizVO> tree();
/**
* 获取树形节点
*
* @return
*/
List<DictBizVO> parentTree();
}

View File

@ -1,51 +0,0 @@
<?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.kening.setting.mapper.DictBizMapper">
<!-- 通用查询映射结果 -->
<resultMap id="dictResultMap" type="com.kening.setting.entity.DictBiz">
<id column="id" property="id"/>
<result column="tenant_id" property="tenantId"/>
<result column="parent_id" property="parentId"/>
<result column="code" property="code"/>
<result column="dict_key" property="dictKey"/>
<result column="dict_value" property="dictValue"/>
<result column="sort" property="sort"/>
<result column="remark" property="remark"/>
<result column="is_deleted" property="isDeleted"/>
</resultMap>
<resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
<id column="id" property="id"/>
<result column="parent_id" property="parentId"/>
<result column="title" property="title"/>
<result column="value" property="value"/>
<result column="key" property="key"/>
</resultMap>
<select id="getValue" resultType="java.lang.String">
select
dict_value
from blade_dict_biz where code = #{param1} and dict_key = #{param2} and is_deleted = 0
</select>
<!-- oracle 版本 -->
<!--<select id="getValue" resultType="java.lang.String">
select
dict_value
from blade_dict_biz where code = #{param1, jdbcType=VARCHAR} and dict_key = #{param2} and dict_key >= 0 rownum 1
</select>-->
<select id="getList" resultMap="dictResultMap">
select id, parent_id, code, dict_key, dict_value, sort, remark from blade_dict_biz where code = #{param1} and parent_id > 0 and is_sealed = 0 and is_deleted = 0
</select>
<select id="tree" resultMap="treeNodeResultMap">
select id, parent_id, dict_value as title, id as "value", id as "key" from blade_dict_biz where is_deleted = 0
</select>
<select id="parentTree" resultMap="treeNodeResultMap">
select id, parent_id, dict_value as title, id as "value", id as "key" from blade_dict_biz where is_deleted = 0 and parent_id = 0
</select>
</mapper>

View File

@ -1,101 +0,0 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package com.kening.setting.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.kening.setting.entity.DictBiz;
import com.kening.setting.vo.DictBizVO;
import org.springblade.core.mp.support.Query;
import java.util.List;
import java.util.Map;
/**
* 服务类
*
* @author Chill
*/
public interface IDictBizService extends IService<DictBiz> {
/**
* 树形结构
*
* @return
*/
List<DictBizVO> tree();
/**
* 树形结构
*
* @return
*/
List<DictBizVO> parentTree();
/**
* 获取字典表对应中文
*
* @param code 字典编号
* @param dictKey 字典序号
* @return
*/
String getValue(String code, String dictKey);
/**
* 获取字典表
*
* @param code 字典编号
* @return
*/
List<DictBiz> getList(String code);
/**
* 新增或修改
*
* @param dict
* @return
*/
boolean submit(DictBiz dict);
/**
* 删除字典
*
* @param ids
* @return
*/
boolean removeDict(String ids);
/**
* 顶级列表
*
* @param dict
* @param query
* @return
*/
IPage<DictBizVO> parentList(Map<String, Object> dict, Query query);
/**
* 子列表
*
* @param dict
* @param parentId
* @return
*/
List<DictBizVO> childList(Map<String, Object> dict, Long parentId);
}

View File

@ -1,121 +0,0 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package com.kening.setting.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.kening.setting.cache.DictBizCache;
import com.kening.setting.entity.DictBiz;
import com.kening.setting.mapper.DictBizMapper;
import com.kening.setting.service.IDictBizService;
import com.kening.setting.vo.DictBizVO;
import com.kening.setting.wrapper.DictBizWrapper;
import org.springblade.common.constant.CommonConstant;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.constant.BladeConstant;
import org.springblade.core.tool.node.ForestNodeMerger;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringPool;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
/**
* 服务实现类
*
* @author Chill
*/
@Service
public class DictBizServiceImpl extends ServiceImpl<DictBizMapper, DictBiz> implements IDictBizService {
@Override
public List<DictBizVO> tree() {
return ForestNodeMerger.merge(baseMapper.tree());
}
@Override
public List<DictBizVO> parentTree() {
return ForestNodeMerger.merge(baseMapper.parentTree());
}
@Override
public String getValue(String code, String dictKey) {
return Func.toStr(baseMapper.getValue(code, dictKey), StringPool.EMPTY);
}
@Override
public List<DictBiz> getList(String code) {
return baseMapper.getList(code);
}
@Override
public boolean submit(DictBiz dict) {
LambdaQueryWrapper<DictBiz> lqw = Wrappers.<DictBiz>query().lambda().eq(DictBiz::getCode, dict.getCode()).eq(DictBiz::getDictKey, dict.getDictKey());
Integer cnt = baseMapper.selectCount((Func.isEmpty(dict.getId())) ? lqw : lqw.notIn(DictBiz::getId, dict.getId()));
if (cnt > 0) {
throw new ServiceException("当前字典键值已存在!");
}
// 修改顶级字典后同步更新下属字典的编号
if (Func.isNotEmpty(dict.getId()) && dict.getParentId().longValue() == BladeConstant.TOP_PARENT_ID) {
DictBiz parent = DictBizCache.getById(dict.getId());
this.update(Wrappers.<DictBiz>update().lambda().set(DictBiz::getCode, dict.getCode()).eq(DictBiz::getCode, parent.getCode()).ne(DictBiz::getParentId, BladeConstant.TOP_PARENT_ID));
}
if (Func.isEmpty(dict.getParentId())) {
dict.setParentId(BladeConstant.TOP_PARENT_ID);
}
dict.setIsDeleted(BladeConstant.DB_NOT_DELETED);
CacheUtil.clear(DICT_CACHE);
return saveOrUpdate(dict);
}
@Override
public boolean removeDict(String ids) {
Integer cnt = baseMapper.selectCount(Wrappers.<DictBiz>query().lambda().in(DictBiz::getParentId, Func.toLongList(ids)));
if (cnt > 0) {
throw new ServiceException("请先删除子节点!");
}
return removeByIds(Func.toLongList(ids));
}
@Override
public IPage<DictBizVO> parentList(Map<String, Object> dict, Query query) {
IPage<DictBiz> page = this.page(Condition.getPage(query), Condition.getQueryWrapper(dict, DictBiz.class).lambda().eq(DictBiz::getParentId, CommonConstant.TOP_PARENT_ID).orderByAsc(DictBiz::getSort));
return DictBizWrapper.build().pageVO(page);
}
@Override
public List<DictBizVO> childList(Map<String, Object> dict, Long parentId) {
if (parentId < 0) {
return new ArrayList<>();
}
dict.remove("parentId");
DictBiz parentDict = DictBizCache.getById(parentId);
List<DictBiz> list = this.list(Condition.getQueryWrapper(dict, DictBiz.class).lambda().ne(DictBiz::getId, parentId).eq(DictBiz::getCode, parentDict.getCode()).orderByAsc(DictBiz::getSort));
return DictBizWrapper.build().listNodeVO(list);
}
}

View File

@ -1,61 +0,0 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package com.kening.setting.wrapper;
import com.kening.setting.cache.DictBizCache;
import com.kening.setting.entity.DictBiz;
import com.kening.setting.vo.DictBizVO;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.constant.BladeConstant;
import org.springblade.core.tool.node.ForestNodeMerger;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 包装类,返回视图层所需的字段
*
* @author Chill
*/
public class DictBizWrapper extends BaseEntityWrapper<DictBiz, DictBizVO> {
public static DictBizWrapper build() {
return new DictBizWrapper();
}
@Override
public DictBizVO entityVO(DictBiz dict) {
DictBizVO dictVO = Objects.requireNonNull(BeanUtil.copy(dict, DictBizVO.class));
if (Func.equals(dict.getParentId(), BladeConstant.TOP_PARENT_ID)) {
dictVO.setParentName(BladeConstant.TOP_PARENT_NAME);
} else {
DictBiz parent = DictBizCache.getById(dict.getParentId());
dictVO.setParentName(parent.getDictValue());
}
return dictVO;
}
public List<DictBizVO> listNodeVO(List<DictBiz> list) {
List<DictBizVO> collect = list.stream().map(dict -> BeanUtil.copy(dict, DictBizVO.class)).collect(Collectors.toList());
return ForestNodeMerger.merge(collect);
}
}

View File

@ -1,5 +0,0 @@
spring:
datasource:
url: ${kn.datasource.vordm.url}
username: ${kn.datasource.vordm.username}
password: ${kn.datasource.vordm.password}

View File

@ -1,5 +0,0 @@
spring:
datasource:
url: ${kn.datasource.vordm.url}
username: ${kn.datasource.vordm.username}
password: ${kn.datasource.vordm.password}

View File

@ -1,5 +0,0 @@
spring:
datasource:
url: ${kn.datasource.vordm.url}
username: ${kn.datasource.vordm.username}
password: ${kn.datasource.vordm.password}

View File

@ -1,13 +0,0 @@
server:
port: 8106
#mybatis-plus配置
mybatis-plus:
mapper-locations: classpath:com/kening/**/mapper/*Mapper.xml
#实体扫描多个package用逗号或者分号分隔
typeAliasesPackage: com.kening.**.entity
#swagger扫描路径配置
swagger:
base-packages:
- com.kening.setting

View File

@ -5,6 +5,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<modules> <modules>
<module>biz-vordm</module> <module>biz-vordm</module>
<module>vordm-crawl</module>
<!-- <module>kn-setting</module>--> <!-- <module>kn-setting</module>-->
</modules> </modules>
@ -21,91 +22,10 @@
<description>微服务集合</description> <description>微服务集合</description>
<dependencies> <dependencies>
<dependency>
<groupId>org.hdrhistogram</groupId>
<artifactId>HdrHistogram</artifactId>
<version>2.1.12</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.25.0-GA</version>
</dependency>
<dependency> <dependency>
<groupId>com.kening.platform</groupId> <groupId>com.kening.platform</groupId>
<artifactId>kn-launcher</artifactId> <artifactId>kn-launcher</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-core-boot</artifactId>
<exclusions>
<exclusion>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
</exclusion>
<exclusion>
<artifactId>HdrHistogram</artifactId>
<groupId>org.hdrhistogram</groupId>
</exclusion>
<exclusion>
<artifactId>javassist</artifactId>
<groupId>org.javassist</groupId>
</exclusion>
<exclusion>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
</exclusion>
<exclusion>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</exclusion>
<exclusion>
<artifactId>fastjson</artifactId>
<groupId>com.alibaba</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-starter-oss</artifactId>
<exclusions>
<exclusion>
<artifactId>esdk-obs-java</artifactId>
<groupId>com.huaweicloud</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-mock</artifactId>
<version>2.0.8</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-starter-swagger</artifactId>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-starter-tenant</artifactId>
</dependency>
<!--邮件发送依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--thymeleaf-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>kn-service</artifactId>
<groupId>com.kening.platform</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>vordm-crawl</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.kening.platform</groupId>
<artifactId>kn-launcher</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</exclusion>
<exclusion>
<artifactId>wildfly-common</artifactId>
<groupId>org.wildfly.common</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.itmuch</groupId>
<artifactId>spring-cloud-wii</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
<!--Hystrix-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
<exclusion>
<artifactId>HdrHistogram</artifactId>
<groupId>org.hdrhistogram</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,13 @@
package com.kening.crawl;
import org.springblade.core.launch.BladeApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringCloudApplication
@ComponentScan({"org.springblade", "com.kening.crawl"})
public class CrawlProxyApplication {
public static void main(String[] args) {
BladeApplication.run("vordm-crawl", CrawlProxyApplication.class, args);
}
}

View File

@ -0,0 +1,12 @@
server:
port: 8989
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
loadbalancer:
retry:
enabled: true