From b7a8a25c5d730e61f659058c693be8280bababa7 Mon Sep 17 00:00:00 2001 From: ethan Date: Wed, 2 Apr 2025 17:18:07 +0800 Subject: [PATCH 01/13] =?UTF-8?q?build(gateway,=20infra,=20system):=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=A1=B9=E7=9B=AE=E6=9E=84=E5=BB=BA=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=20-=20=E4=BF=AE=E6=94=B9=20.gitignore=20=E6=96=87?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E6=B7=BB=E5=8A=A0=20lib=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E5=88=B0=E5=BF=BD=E7=95=A5=E5=88=97=E8=A1=A8=20-=20=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=20yudao-gateway=E3=80=81yudao-module-infra-biz=20?= =?UTF-8?q?=E5=92=8C=20yudao-module-system-biz=20=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E7=9A=84=20pom.xml=20=E6=96=87=E4=BB=B6=20=20=20-=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20maven-jar-plugin=20=E9=85=8D=E7=BD=AE=EF=BC=8C?= =?UTF-8?q?=E6=8E=92=E9=99=A4=E8=B5=84=E6=BA=90=E6=96=87=E4=BB=B6=E6=89=93?= =?UTF-8?q?=E5=8C=85=20-=20=E6=B7=BB=E5=8A=A0=20maven-resources-plugin=20?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=EF=BC=8C=E5=A4=8D=E5=88=B6=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=88=B0=E6=8C=87=E5=AE=9A=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=20=20=20-=20=E6=B3=A8=E9=87=8A=E6=8E=89=20maven-dependency-plu?= =?UTF-8?q?gin=20=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + yudao-gateway/pom.xml | 44 +++++++++++ .../yudao-module-infra-biz/pom.xml | 76 ++++++++++++++++++- .../yudao-module-system-biz/pom.xml | 76 ++++++++++++++++++- 4 files changed, 193 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index e55eb64b5..2a090856e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ # 查看更多 .gitignore 配置 -> https://help.github.com/articles/ignoring-files/ target/ +lib/ !.mvn/wrapper/maven-wrapper.jar .flattened-pom.xml diff --git a/yudao-gateway/pom.xml b/yudao-gateway/pom.xml index 76be121ad..39f740e3f 100644 --- a/yudao-gateway/pom.xml +++ b/yudao-gateway/pom.xml @@ -94,6 +94,50 @@ + + + org.apache.maven.plugins + maven-jar-plugin + + + *.** + */*.xml + + + + ./resources/ + + + + + + + maven-resources-plugin + + + copy-resources + package + + copy-resources + + + + + src/main/resources + + *.** + + + + ${project.build.directory}/resources + + + + + diff --git a/yudao-module-infra/yudao-module-infra-biz/pom.xml b/yudao-module-infra/yudao-module-infra-biz/pom.xml index dc25849a9..a0fb14991 100644 --- a/yudao-module-infra/yudao-module-infra-biz/pom.xml +++ b/yudao-module-infra/yudao-module-infra-biz/pom.xml @@ -152,19 +152,91 @@ ${project.artifactId} - + org.springframework.boot spring-boot-maven-plugin ${spring.boot.version} + + ZIP + + + non-exists + non-exists + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + *.** + */*.xml + + + + true + lib/ + false + cn.iocoder.yudao.module.infra.InfraServerApplication + + + ./resources/ + + + ${project.build.directory} + + + + + maven-resources-plugin + copy-resources + package - repackage + copy-resources + + + + src/main/resources + + *.** + + + + ${project.build.directory}/resources + + + diff --git a/yudao-module-system/yudao-module-system-biz/pom.xml b/yudao-module-system/yudao-module-system-biz/pom.xml index 8b1002e27..df22096c1 100644 --- a/yudao-module-system/yudao-module-system-biz/pom.xml +++ b/yudao-module-system/yudao-module-system-biz/pom.xml @@ -153,19 +153,91 @@ ${project.artifactId} - + org.springframework.boot spring-boot-maven-plugin ${spring.boot.version} + + ZIP + + + non-exists + non-exists + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + *.** + */*.xml + + + + true + lib/ + false + cn.iocoder.yudao.module.system.SystemServerApplication + + + ./resources/ + + + ${project.build.directory} + + + + + maven-resources-plugin + copy-resources + package - repackage + copy-resources + + + + src/main/resources + + *.** + + + + ${project.build.directory}/resources + + + From 171106a942fdde62b6eee584ccc53013e92aa77d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BF=97=E8=B6=85?= <1011804356@qq.com> Date: Wed, 9 Apr 2025 17:15:28 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=AF=B9=E5=A4=96?= =?UTF-8?q?=E5=BC=80=E6=94=BE=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 1 + sk-module-data/pom.xml | 23 ++ sk-module-data/sk-module-data-api/pom.xml | 46 ++++ .../module/data/api/finance/FinanceApi.java | 27 ++ .../data/api/finance/dto/FinanceRespDTO.java | 20 ++ .../sk/module/data/enums/ApiConstants.java | 23 ++ .../SkModuleDataApiApplicationTests.java | 13 + sk-module-data/sk-module-data-biz/pom.xml | 243 ++++++++++++++++++ .../data/SkModuleDataBizApplication.java | 14 + .../data/api/finance/FinanceApiImpl.java | 23 ++ .../module/data/config/RpcConfiguration.java | 12 + .../data/config/SecurityConfiguration.java | 40 +++ .../controller/finance/FinanceController.java | 18 ++ .../data/service/finance/FinanceService.java | 10 + .../service/finance/FinanceServiceImpl.java | 12 + .../src/main/resources/application-dev.yaml | 184 +++++++++++++ .../src/main/resources/application-local.yaml | 215 ++++++++++++++++ .../src/main/resources/application.yaml | 208 +++++++++++++++ .../src/main/resources/logback-spring.xml | 76 ++++++ .../SkModuleDataBizApplicationTests.java | 13 + 20 files changed, 1221 insertions(+) create mode 100644 sk-module-data/pom.xml create mode 100644 sk-module-data/sk-module-data-api/pom.xml create mode 100644 sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/FinanceApi.java create mode 100644 sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/dto/FinanceRespDTO.java create mode 100644 sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/enums/ApiConstants.java create mode 100644 sk-module-data/sk-module-data-api/src/test/java/org/sk/skmoduledataapi/SkModuleDataApiApplicationTests.java create mode 100644 sk-module-data/sk-module-data-biz/pom.xml create mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/SkModuleDataBizApplication.java create mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/api/finance/FinanceApiImpl.java create mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/RpcConfiguration.java create mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/SecurityConfiguration.java create mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java create mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceService.java create mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java create mode 100644 sk-module-data/sk-module-data-biz/src/main/resources/application-dev.yaml create mode 100644 sk-module-data/sk-module-data-biz/src/main/resources/application-local.yaml create mode 100644 sk-module-data/sk-module-data-biz/src/main/resources/application.yaml create mode 100644 sk-module-data/sk-module-data-biz/src/main/resources/logback-spring.xml create mode 100644 sk-module-data/sk-module-data-biz/src/test/java/org/sk/skmoduledatabiz/SkModuleDataBizApplicationTests.java diff --git a/pom.xml b/pom.xml index ced3ebba3..50c387dc3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,6 +25,7 @@ yudao-module-iot + sk-module-data ${project.artifactId} diff --git a/sk-module-data/pom.xml b/sk-module-data/pom.xml new file mode 100644 index 000000000..4e22dedc0 --- /dev/null +++ b/sk-module-data/pom.xml @@ -0,0 +1,23 @@ + + + + cn.iocoder.cloud + yudao + ${revision} + + 4.0.0 + + sk-module-data-api + sk-module-data-biz + + sk-module-data + pom + + + ${project.artifactId} + + data 模块下,提供对外的数据,以接口的形式提供 + + + diff --git a/sk-module-data/sk-module-data-api/pom.xml b/sk-module-data/sk-module-data-api/pom.xml new file mode 100644 index 000000000..034c960e6 --- /dev/null +++ b/sk-module-data/sk-module-data-api/pom.xml @@ -0,0 +1,46 @@ + + + + cn.iocoder.cloud + sk-module-data + 2.4.1-jdk8-SNAPSHOT + + 4.0.0 + sk-module-data-api + jar + + ${project.artifactId} + + data 模块 API, 暴露给其他模块调用 + + + + + cn.iocoder.cloud + yudao-common + + + + + org.springdoc + springdoc-openapi-ui + provided + + + + + org.springframework.boot + spring-boot-starter-validation + true + + + + + org.springframework.cloud + spring-cloud-starter-openfeign + true + + + + diff --git a/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/FinanceApi.java b/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/FinanceApi.java new file mode 100644 index 000000000..7ca3a4505 --- /dev/null +++ b/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/FinanceApi.java @@ -0,0 +1,27 @@ +package org.sk.module.data.api.finance; + + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.sk.module.data.api.finance.dto.FinanceRespDTO; +import org.sk.module.data.enums.ApiConstants; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +@FeignClient(name = ApiConstants.NAME) +@Tag(name = "RPC 服务:财务数据") +public interface FinanceApi { + + + String PREFIX = ApiConstants.PREFIX + "/finance"; + + @GetMapping(PREFIX + "/get") + @Operation(summary = "获取财务信息") + @Parameter(name = "creditCode", description = "统一身份认证编码", example = "91340104MA2TK61Q1R", required = true) + CommonResult getDept(@RequestParam("creditCode") String creditCode); + + +} diff --git a/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/dto/FinanceRespDTO.java b/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/dto/FinanceRespDTO.java new file mode 100644 index 000000000..14780db01 --- /dev/null +++ b/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/dto/FinanceRespDTO.java @@ -0,0 +1,20 @@ +package org.sk.module.data.api.finance.dto; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "RPC 服务 - 财务数据 Response DTO") +@Data +public class FinanceRespDTO { + + + @Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + + + + + +} diff --git a/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/enums/ApiConstants.java b/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/enums/ApiConstants.java new file mode 100644 index 000000000..4213194fb --- /dev/null +++ b/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/enums/ApiConstants.java @@ -0,0 +1,23 @@ +package org.sk.module.data.enums; + +import cn.iocoder.yudao.framework.common.enums.RpcConstants; + +/** + * API 相关的枚举 + * + * @author 芋道源码 + */ +public class ApiConstants { + + /** + * 服务名 + * + * 注意,需要保证和 spring.application.name 保持一致 + */ + public static final String NAME = "data-server"; + + public static final String PREFIX = RpcConstants.RPC_API_PREFIX + "/data"; + + public static final String VERSION = "1.0.0"; + +} diff --git a/sk-module-data/sk-module-data-api/src/test/java/org/sk/skmoduledataapi/SkModuleDataApiApplicationTests.java b/sk-module-data/sk-module-data-api/src/test/java/org/sk/skmoduledataapi/SkModuleDataApiApplicationTests.java new file mode 100644 index 000000000..c2c2a1ccf --- /dev/null +++ b/sk-module-data/sk-module-data-api/src/test/java/org/sk/skmoduledataapi/SkModuleDataApiApplicationTests.java @@ -0,0 +1,13 @@ +package org.sk.skmoduledataapi; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class SkModuleDataApiApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/sk-module-data/sk-module-data-biz/pom.xml b/sk-module-data/sk-module-data-biz/pom.xml new file mode 100644 index 000000000..f6febd2bc --- /dev/null +++ b/sk-module-data/sk-module-data-biz/pom.xml @@ -0,0 +1,243 @@ + + + + cn.iocoder.cloud + sk-module-data + ${revision} + + + 4.0.0 + sk-module-data-biz + ${project.artifactId} + + + data 模块下, 放置自己的业务。 + + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-env + + + + + cn.iocoder.cloud + sk-module-data-api + ${revision} + + + + cn.iocoder.cloud + yudao-module-infra-api + ${revision} + + + + + + + + + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-biz-ip + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-security + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-mybatis + + + + + + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-rpc + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + + + + + + + + + + + + + + + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-test + test + + + + + + + + + + + + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-monitor + + + + + com.xingyuv + spring-boot-starter-justauth + + + + com.github.binarywang + wx-java-mp-spring-boot-starter + + + com.github.binarywang + wx-java-miniapp-spring-boot-starter + + + + + + + + + + + + ${project.artifactId} + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring.boot.version} + + ZIP + + + non-exists + non-exists + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + *.** + */*.xml + + + + true + lib/ + false + cn.iocoder.yudao.module.system.SystemServerApplication + + + ./resources/ + + + ${project.build.directory} + + + + + maven-resources-plugin + + + copy-resources + package + + copy-resources + + + + + src/main/resources + + *.** + + + + ${project.build.directory}/resources + + + + + + + + + + diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/SkModuleDataBizApplication.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/SkModuleDataBizApplication.java new file mode 100644 index 000000000..1e2b3634b --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/SkModuleDataBizApplication.java @@ -0,0 +1,14 @@ +package org.sk.module.data; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SkModuleDataBizApplication { + + public static void main(String[] args) { + SpringApplication.run(SkModuleDataBizApplication.class, args); + } + + +} diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/api/finance/FinanceApiImpl.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/api/finance/FinanceApiImpl.java new file mode 100644 index 000000000..4fc3f9aab --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/api/finance/FinanceApiImpl.java @@ -0,0 +1,23 @@ +package org.sk.module.data.api.finance; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import org.sk.module.data.api.finance.dto.FinanceRespDTO; +import org.sk.module.data.service.finance.FinanceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class FinanceApiImpl implements FinanceApi { + + + @Autowired + private FinanceService financeService; + + @Override + public CommonResult getDept(String creditCode) { + return null; + } +} diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/RpcConfiguration.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/RpcConfiguration.java new file mode 100644 index 000000000..efc33c279 --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/RpcConfiguration.java @@ -0,0 +1,12 @@ +package org.sk.module.data.config; + +import cn.iocoder.yudao.module.infra.api.config.ConfigApi; +import cn.iocoder.yudao.module.infra.api.file.FileApi; +import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; + +@Configuration(proxyBeanMethods = false) +@EnableFeignClients(clients = {FileApi.class, WebSocketSenderApi.class, ConfigApi.class}) +public class RpcConfiguration { +} diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/SecurityConfiguration.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/SecurityConfiguration.java new file mode 100644 index 000000000..9148980ce --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/SecurityConfiguration.java @@ -0,0 +1,40 @@ +package org.sk.module.data.config; + +import cn.iocoder.yudao.framework.security.config.AuthorizeRequestsCustomizer; +import cn.iocoder.yudao.module.system.enums.ApiConstants; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer; + +/** + * System 模块的 Security 配置 + */ +@Configuration(proxyBeanMethods = false, value = "systemSecurityConfiguration") +public class SecurityConfiguration { + + @Bean("systemAuthorizeRequestsCustomizer") + public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() { + return new AuthorizeRequestsCustomizer() { + + @Override + public void customize(AuthorizeHttpRequestsConfigurer.AuthorizationManagerRequestMatcherRegistry registry) { + // TODO 芋艿:这个每个项目都需要重复配置,得捉摸有没通用的方案 + // Swagger 接口文档 + registry.requestMatchers("/v3/api-docs/**").permitAll() + .requestMatchers("/webjars/**").permitAll() + .requestMatchers("/swagger-ui").permitAll() + .requestMatchers("/swagger-ui/**").permitAll(); + // Druid 监控 + registry.requestMatchers("/druid/**").permitAll(); + // Spring Boot Actuator 的安全配置 + registry.requestMatchers("/actuator").permitAll() + .requestMatchers("/actuator/**").permitAll(); + // RPC 服务的安全配置 + registry.requestMatchers(ApiConstants.PREFIX + "/**").permitAll(); + } + + }; + } + +} diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java new file mode 100644 index 000000000..0e73bf7e4 --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java @@ -0,0 +1,18 @@ +package org.sk.module.data.controller.finance; + + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/finance") +public class FinanceController { + + + + @GetMapping("/get") + public String get() { + return "hello wzc"; + } +} diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceService.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceService.java new file mode 100644 index 000000000..677a688b4 --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceService.java @@ -0,0 +1,10 @@ +package org.sk.module.data.service.finance; + +public interface FinanceService { + + + + + + +} diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java new file mode 100644 index 000000000..ecf7e5e01 --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java @@ -0,0 +1,12 @@ +package org.sk.module.data.service.finance; + + +import org.springframework.stereotype.Service; + +@Service +public class FinanceServiceImpl implements FinanceService { + + + + +} diff --git a/sk-module-data/sk-module-data-biz/src/main/resources/application-dev.yaml b/sk-module-data/sk-module-data-biz/src/main/resources/application-dev.yaml new file mode 100644 index 000000000..5c2c2d500 --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/resources/application-dev.yaml @@ -0,0 +1,184 @@ +--- #################### 注册中心 + 配置中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 127.0.0.1:8848 # Nacos 服务器地址 + username: # Nacos 账号 + password: # Nacos 密码 + discovery: # 【配置中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 + config: # 【注册中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 5 # 初始连接数 + min-idle: 10 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: 123456 + slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: 123456 + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + redis: + host: 400-infra.server.iocoder.cn # 地址 + port: 6379 # 端口 + database: 1 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +rocketmq: + name-server: 127.0.0.1:9876 # RocketMQ Namesrv + +spring: + # RabbitMQ 配置项,对应 RabbitProperties 配置类 + rabbitmq: + host: 127.0.0.1 # RabbitMQ 服务的地址 + port: 5672 # RabbitMQ 服务的端口 + username: guest # RabbitMQ 服务的账号 + password: guest # RabbitMQ 服务的密码 + # Kafka 配置项,对应 KafkaProperties 配置类 + kafka: + bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 + +--- #################### 定时任务相关配置 #################### +xxl: + job: + admin: + addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + # Spring Boot Admin Server 服务端的相关配置 + context-path: /admin # 配置 Spring + +# 日志文件配置 +logging: + file: + name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 + +--- #################### 微信公众号、小程序相关配置 #################### +wx: + mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 + # app-id: wx041349c6f39b268b + # secret: 5abee519483bc9f8cb37ce280e814bd0 + app-id: wx5b23ba7a5589ecbb # 测试号 + secret: 2a7b3b20c537e52e74afd395eb85f61f + # 存储配置,解决 AccessToken 的跨节点的共享 + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wx # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档 + # appid: wx62056c0d5e8db250 + # secret: 333ae72f41552af1e998fe1f54e1584a + appid: wx63c280fe3248a3e7 # wenhualian的接口测试号 + secret: 6f270509224a7ae1296bbf1c8cb97aed + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wa # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +yudao: + demo: true # 开启演示模式 + +justauth: + enabled: true + type: + DINGTALK: # 钉钉 + client-id: dingvrnreaje3yqvzhxg + client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI + ignore-check-redirect-uri: true + WECHAT_ENTERPRISE: # 企业微信 + client-id: wwd411c69a39ad2e54 + client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw + agent-id: 1000004 + ignore-check-redirect-uri: true + # noinspection SpringBootApplicationYaml + WECHAT_MINI_APP: # 微信小程序 + client-id: ${wx.miniapp.appid} + client-secret: ${wx.miniapp.secret} + ignore-check-redirect-uri: true + ignore-check-state: true # 微信小程序,不会使用到 state,所以不进行校验 + WECHAT_MP: # 微信公众号 + client-id: ${wx.mp.app-id} + client-secret: ${wx.mp.secret} + ignore-check-redirect-uri: true + cache: + type: REDIS + prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE:: + timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟 diff --git a/sk-module-data/sk-module-data-biz/src/main/resources/application-local.yaml b/sk-module-data/sk-module-data-biz/src/main/resources/application-local.yaml new file mode 100644 index 000000000..8506fcf0e --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/resources/application-local.yaml @@ -0,0 +1,215 @@ +--- #################### 注册中心 + 配置中心相关配置 #################### + +spring: + cloud: + nacos: + #server-addr: 218.22.24.55:8848 # Nacos 服务器地址 + server-addr: 10.161.4.102:8848 # Nacos 服务器地址 + username: #nacos # Nacos 账号 + password: #Sk&Dc0909 # Nacos 密码 + discovery: # 【配置中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 + config: # 【注册中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源 + - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 1 # 初始连接数 + min-idle: 1 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://218.22.24.55:10036/duban?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例 + # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 + # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 + # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 + # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 + username: duban + password: Db@wsx25 + # username: sa # SQL Server 连接的示例 + # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 + # username: SYSDBA # DM 连接的示例 + # password: SYSDBA # DM 连接的示例 + #slave: # 模拟从库,可根据自己需要修改 + # lazy: true # 开启懒加载,保证启动速度 + # url: jdbc:mysql://218.22.24.55:10036/duban?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true + # username: duban + # password: Db@wsx25 + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + #redis: + # host: 127.0.0.1 # 地址 + # port: 6379 # 端口 + # database: 0 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +#rocketmq: +# name-server: 127.0.0.1:9876 # RocketMQ Namesrv + +#spring: +# # RabbitMQ 配置项,对应 RabbitProperties 配置类 +# rabbitmq: +# host: 127.0.0.1 # RabbitMQ 服务的地址 +# port: 5672 # RabbitMQ 服务的端口 +# username: guest # RabbitMQ 服务的账号 +# password: guest # RabbitMQ 服务的密码 +# # Kafka 配置项,对应 KafkaProperties 配置类 +# kafka: +# bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 + +--- #################### 定时任务相关配置 #################### + +#xxl: +# job: +# enabled: false # 是否开启调度中心,默认为 true 开启 +# admin: +# addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + +# 日志文件配置 +logging: + level: + # 配置自己写的 MyBatis Mapper 打印日志 + cn.iocoder.yudao.module.system.dal.mysql: debug + cn.iocoder.yudao.module.system.dal.mysql.sms.SmsChannelMapper: INFO # 配置 SmsChannelMapper 的日志级别为 info + org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示 + +--- #################### 微信公众号、小程序相关配置 #################### +wx: + mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 + # app-id: wx041349c6f39b268b # 测试号(牛希尧提供的) + # secret: 5abee519483bc9f8cb37ce280e814bd0 + app-id: wx5b23ba7a5589ecbb # 测试号(自己的) + secret: 2a7b3b20c537e52e74afd395eb85f61f + # app-id: wxa69ab825b163be19 # 测试号(Kongdy 提供的) + # secret: bd4f9fab889591b62aeac0d7b8d8b4a0 + # 存储配置,解决 AccessToken 的跨节点的共享 + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wx # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档 + # appid: wx62056c0d5e8db250 # 测试号(牛希尧提供的) + # secret: 333ae72f41552af1e998fe1f54e1584a + # appid: wx63c280fe3248a3e7 # wenhualian的接口测试号 + # secret: 6f270509224a7ae1296bbf1c8cb97aed + # appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的) + # secret: 4a1a04e07f6a4a0751b39c3064a92c8b + appid: wx66186af0759f47c9 # 测试号(puhui 提供的) + secret: 3218bcbd112cbc614c7264ceb20144ac + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wa # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +yudao: + env: # 多环境的配置项 + tag: ${HOSTNAME} + captcha: + enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试 + security: + mock-enable: true + access-log: # 访问日志的配置项 + enable: false + wxa-code: + env-version: develop # 小程序版本: 正式版为 "release";体验版为 "trial";开发版为 "develop" + wxa-subscribe-message: + miniprogram-state: developer # 跳转小程序类型:开发版为 “developer”;体验版为 “trial”为;正式版为 “formal” + +justauth: + enabled: true + type: + DINGTALK: # 钉钉 + client-id: dingvrnreaje3yqvzhxg + client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI + ignore-check-redirect-uri: true + WECHAT_ENTERPRISE: # 企业微信 + client-id: wwd411c69a39ad2e54 + client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw + agent-id: 1000004 + ignore-check-redirect-uri: true + # noinspection SpringBootApplicationYaml + WECHAT_MINI_APP: # 微信小程序 + client-id: ${wx.miniapp.appid} + client-secret: ${wx.miniapp.secret} + ignore-check-redirect-uri: true + ignore-check-state: true # 微信小程序,不会使用到 state,所以不进行校验 + WECHAT_MP: # 微信公众号 + client-id: ${wx.mp.app-id} + client-secret: ${wx.mp.secret} + ignore-check-redirect-uri: true + cache: + type: REDIS + prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE:: + timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟 diff --git a/sk-module-data/sk-module-data-biz/src/main/resources/application.yaml b/sk-module-data/sk-module-data-biz/src/main/resources/application.yaml new file mode 100644 index 000000000..1faf5ffe5 --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/resources/application.yaml @@ -0,0 +1,208 @@ +spring: + application: + name: data-server + + profiles: + active: local + + main: + allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。 + allow-bean-definition-overriding: true # 允许 Bean 覆盖,例如说 Feign 等会存在重复定义的服务 + + config: + import: + - optional:classpath:application-${spring.profiles.active}.yaml # 加载【本地】配置 + - optional:nacos:${spring.application.name}-${spring.profiles.active}.yaml # 加载【Nacos】的配置 + + # Servlet 配置 + servlet: + # 文件上传相关配置项 + multipart: + max-file-size: 16MB # 单个文件大小 + max-request-size: 32MB # 设置总上传的文件大小 + + # Jackson 配置项 + jackson: + serialization: + write-dates-as-timestamps: true # 设置 LocalDateTime 的格式,使用时间戳 + write-date-timestamps-as-nanoseconds: false # 设置不使用 nanoseconds 的格式。例如说 1611460870.401,而是直接 1611460870401 + write-durations-as-timestamps: true # 设置 Duration 的格式,使用时间戳 + fail-on-empty-beans: false # 允许序列化无属性的 Bean + + # Cache 配置项 + #cache: + # type: REDIS + # redis: + # time-to-live: 1h # 设置过期时间为 1 小时 + +server: + port: 58081 + +logging: + file: + name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 + +--- #################### 接口文档配置 #################### + +springdoc: + api-docs: + enabled: true # 1. 是否开启 Swagger 接文档的元数据 + path: /v3/api-docs + swagger-ui: + enabled: true # 2.1 是否开启 Swagger 文档的官方 UI 界面 + path: /swagger-ui + default-flat-param-object: true # 参见 https://doc.xiaominfo.com/docs/faq/v4/knife4j-parameterobject-flat-param 文档 + +knife4j: + enable: false # TODO 芋艿:需要关闭增强,具体原因见:https://github.com/xiaoymin/knife4j/issues/874 + setting: + language: zh_cn + +# MyBatis Plus 的配置项 +mybatis-plus: + configuration: + map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 + global-config: + db-config: + id-type: NONE # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。 + # id-type: AUTO # 自增 ID,适合 MySQL 等直接自增的数据库 + # id-type: INPUT # 用户输入 ID,适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库 + # id-type: ASSIGN_ID # 分配 ID,默认使用雪花算法。注意,Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解 + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + banner: false # 关闭控制台的 Banner 打印 + type-aliases-package: ${yudao.info.base-package}.dal.mapper + encryptor: + password: XDV71a+xqStEA3WH # 加解密的秘钥,可使用 https://www.imaegoo.com/2020/aes-key-generator/ 网站生成 + +mybatis-plus-join: + banner: false # 关闭控制台的 Banner 打印 + +# Spring Data Redis 配置 +#spring: +# data: +# redis: +# repositories: +# enabled: false # 项目未使用到 Spring Data Redis 的 Repository,所以直接禁用,保证启动速度 + +# VO 转换(数据翻译)相关 +easy-trans: + is-enable-global: true # 启用全局翻译(拦截所有 SpringMVC ResponseBody 进行自动翻译 )。如果对于性能要求很高可关闭此配置,或通过 @IgnoreTrans 忽略某个接口 + +--- #################### RPC 远程调用相关配置 #################### + +--- #################### 消息队列相关 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +#rocketmq: +# # Producer 配置项 +# producer: +# group: ${spring.application.name}_PRODUCER # 生产者分组 + +#spring: +# # Kafka 配置项,对应 KafkaProperties 配置类 +# kafka: +# # Kafka Producer 配置项 +# producer: +# acks: 1 # 0-不应答。1-leader 应答。all-所有 leader 和 follower 应答。 +# retries: 3 # 发送失败时,重试发送的次数 +# value-serializer: org.springframework.kafka.support.serializer.JsonSerializer # 消息的 value 的序列化 +# # Kafka Consumer 配置项 +# consumer: +# auto-offset-reset: earliest # 设置消费者分组最初的消费进度为 earliest 。可参考博客 https://blog.csdn.net/lishuangzhe7047/article/details/74530417 理解 +# value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer +# properties: +# spring.json.trusted.packages: '*' +# # Kafka Consumer Listener 监听器配置 +# listener: +# missing-topics-fatal: false # 消费监听接口监听的主题不存在时,默认会报错。所以通过设置为 false ,解决报错 + +--- #################### 定时任务相关配置 #################### + +#xxl: +# job: +# executor: +# appname: ${spring.application.name} # 执行器 AppName +# logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径 +# accessToken: default_token # 执行器通讯TOKEN + +--- #################### 验证码相关配置 #################### + +#aj: +# captcha: +# jigsaw: classpath:images/jigsaw # 滑动验证,底图路径,不配置将使用默认图片;以 classpath: 开头,取 resource 目录下路径 +# pic-click: classpath:images/pic-click # 滑动验证,底图路径,不配置将使用默认图片;以 classpath: 开头,取 resource 目录下路径 +# cache-type: redis # 缓存 local/redis... +# cache-number: 1000 # local 缓存的阈值,达到这个值,清除缓存 +# timing-clear: 180 # local定时清除过期缓存(单位秒),设置为0代表不执行 +# type: blockPuzzle # 验证码类型 default两种都实例化。 blockPuzzle 滑块拼图 clickWord 文字点选 +# water-mark: 芋道源码 # 右下角水印文字(我的水印),可使用 https://tool.chinaz.com/tools/unicode.aspx 中文转 Unicode,Linux 可能需要转 unicode +# interference-options: 0 # 滑动干扰项(0/1/2) +# req-frequency-limit-enable: false # 接口请求次数一分钟限制是否开启 true|false +# req-get-lock-limit: 5 # 验证失败5次,get接口锁定 +# req-get-lock-seconds: 10 # 验证失败后,锁定时间间隔 +# req-get-minute-limit: 30 # get 接口一分钟内请求数限制 +# req-check-minute-limit: 60 # check 接口一分钟内请求数限制 +# req-verify-minute-limit: 60 # verify 接口一分钟内请求数限制 + +--- #################### 芋道相关配置 #################### + +yudao: + info: + version: 1.0.0 + base-package: org.sk.module.data + web: + admin-ui: + url: http://dashboard.yudao.iocoder.cn # Admin 管理后台 UI 的地址 + xss: + enable: false + exclude-urls: # 如下 url,仅仅是为了演示,去掉配置也没关系 + - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 + swagger: + title: 管理后台 + description: 提供管理员管理的所有功能 + version: ${yudao.info.version} + tenant: # 多租户相关配置项 + enable: true + ignore-urls: + - /admin-api/system/tenant/get-id-by-name # 基于名字获取租户,不许带租户编号 + - /admin-api/system/tenant/get-by-website # 基于域名获取租户,不许带租户编号 + - /admin-api/system/captcha/get-image # 获取图片验证码,和租户无关 + - /admin-api/system/captcha/get # 获取图片验证码,和租户无关 + - /admin-api/system/captcha/check # 校验图片验证码,和租户无关 + - /admin-api/system/sms/callback/* # 短信回调接口,无法带上租户编号 + - /rpc-api/system/tenant/valid # 防止递归。避免调用 /rpc-api/system/tenant/valid 接口时,又去触发 /rpc-api/system/tenant/valid 去校验 + - /rpc-api/system/tenant/id-list # 获得租户列表的时候,无需传递租户编号 + - /rpc-api/system/oauth2/token/check # 访问令牌校验时,无需传递租户编号;主要解决上传文件的场景,前端不会传递 tenant-id! + ignore-tables: + - system_tenant + - system_tenant_package + - system_dict_data + - system_dict_type + - system_error_code + - system_menu + - system_sms_channel + - system_sms_template + - system_sms_log + - system_sensitive_word + - system_oauth2_client + - system_mail_account + - system_mail_template + - system_mail_log + - system_notify_template + ignore-caches: + - user_role_ids + - permission_menu_ids + - oauth_client + - notify_template + - mail_account + - mail_template + - sms_template + sms-code: # 短信验证码相关的配置项 + expire-times: 10m + send-frequency: 1m + send-maximum-quantity-per-day: 10 + begin-code: 9999 # 这里配置 9999 的原因是,测试方便。 + end-code: 9999 # 这里配置 9999 的原因是,测试方便。 + +debug: true diff --git a/sk-module-data/sk-module-data-biz/src/main/resources/logback-spring.xml b/sk-module-data/sk-module-data-biz/src/main/resources/logback-spring.xml new file mode 100644 index 000000000..b1b9f3faf --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/resources/logback-spring.xml @@ -0,0 +1,76 @@ + + + + + + + + + +       + + + ${PATTERN_DEFAULT} + + + + + + + + + + ${PATTERN_DEFAULT} + + + + ${LOG_FILE} + + + ${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz} + + ${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false} + + ${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB} + + ${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0} + + ${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30} + + + + + + 0 + + 256 + + + + + + + + ${PATTERN_DEFAULT} + + + + + + + + + + + + + + + + + + + + + + diff --git a/sk-module-data/sk-module-data-biz/src/test/java/org/sk/skmoduledatabiz/SkModuleDataBizApplicationTests.java b/sk-module-data/sk-module-data-biz/src/test/java/org/sk/skmoduledatabiz/SkModuleDataBizApplicationTests.java new file mode 100644 index 000000000..6776903c6 --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/test/java/org/sk/skmoduledatabiz/SkModuleDataBizApplicationTests.java @@ -0,0 +1,13 @@ +package org.sk.skmoduledatabiz; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class SkModuleDataBizApplicationTests { + + @Test + void contextLoads() { + } + +} From 9a5206b2029e74ebfa5ca4a69e7d42eb9863a700 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BF=97=E8=B6=85?= <1011804356@qq.com> Date: Thu, 10 Apr 2025 11:39:11 +0800 Subject: [PATCH 03/13] =?UTF-8?q?#add=20=E6=A0=B9=E6=8D=AE=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E7=A4=BE=E4=BC=9A=E4=BB=A3=E7=A0=81=E5=92=8C=E5=B9=B4?= =?UTF-8?q?=E4=BB=BD=E6=9F=A5=E4=B8=8B=E8=AF=A5=E4=BC=81=E4=B8=9A=E7=9A=84?= =?UTF-8?q?=E8=90=A5=E6=94=B6=E5=92=8C=E7=A8=8E=E6=94=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/data/api/finance/FinanceApi.java | 14 ++++++---- .../data/api/finance/dto/FinanceRespDTO.java | 16 ++++++++--- .../data/api/finance/FinanceApiImpl.java | 10 ++++--- .../module/data/dal/bo/finance/FinanceBO.java | 27 +++++++++++++++++++ .../dal/mapper/finance/FinanceMapper.java | 17 ++++++++++++ .../data/service/finance/FinanceService.java | 5 ++-- .../service/finance/FinanceServiceImpl.java | 14 +++++++++- .../mappers/finance/FinanceMapper.xml | 16 +++++++++++ 8 files changed, 104 insertions(+), 15 deletions(-) create mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/bo/finance/FinanceBO.java create mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/mapper/finance/FinanceMapper.java create mode 100644 sk-module-data/sk-module-data-biz/src/main/resources/mappers/finance/FinanceMapper.xml diff --git a/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/FinanceApi.java b/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/FinanceApi.java index 7ca3a4505..c8c7228e8 100644 --- a/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/FinanceApi.java +++ b/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/FinanceApi.java @@ -4,24 +4,28 @@ package org.sk.module.data.api.finance; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.tags.Tag; import org.sk.module.data.api.finance.dto.FinanceRespDTO; import org.sk.module.data.enums.ApiConstants; import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; @FeignClient(name = ApiConstants.NAME) @Tag(name = "RPC 服务:财务数据") public interface FinanceApi { - String PREFIX = ApiConstants.PREFIX + "/finance"; - @GetMapping(PREFIX + "/get") + @PostMapping(PREFIX + "/get") @Operation(summary = "获取财务信息") - @Parameter(name = "creditCode", description = "统一身份认证编码", example = "91340104MA2TK61Q1R", required = true) - CommonResult getDept(@RequestParam("creditCode") String creditCode); + @Parameters({ + @Parameter(name = "creditCode", description = "统一身份认证编码", example = "SEX", required = true), + @Parameter(name = "year", description = "年份", example = "2022", required = true) + }) + CommonResult getFinanceInfo(@RequestParam("creditCode") String creditCode, + @RequestParam("year") String year); } diff --git a/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/dto/FinanceRespDTO.java b/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/dto/FinanceRespDTO.java index 14780db01..d116f53f9 100644 --- a/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/dto/FinanceRespDTO.java +++ b/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/dto/FinanceRespDTO.java @@ -4,17 +4,25 @@ package org.sk.module.data.api.finance.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.math.BigDecimal; + @Schema(description = "RPC 服务 - 财务数据 Response DTO") @Data public class FinanceRespDTO { + @Schema(description = "企业名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "企业") + private String comName; - @Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - private Long id; - - + @Schema(description = "社会统一信用代码", requiredMode = Schema.RequiredMode.REQUIRED, example = "008x") + private String creditCode; + @Schema(description = "营收(万)", requiredMode = Schema.RequiredMode.REQUIRED, example = "23.10") + private BigDecimal Income; + @Schema(description = "税收(万)", requiredMode = Schema.RequiredMode.REQUIRED, example = "3") + private BigDecimal tax; + @Schema(description = "年份", requiredMode = Schema.RequiredMode.REQUIRED, example = "2022") + private String year; } diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/api/finance/FinanceApiImpl.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/api/finance/FinanceApiImpl.java index 4fc3f9aab..707fe885e 100644 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/api/finance/FinanceApiImpl.java +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/api/finance/FinanceApiImpl.java @@ -1,23 +1,27 @@ package org.sk.module.data.api.finance; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import org.sk.module.data.api.finance.dto.FinanceRespDTO; +import org.sk.module.data.dal.bo.finance.FinanceBO; import org.sk.module.data.service.finance.FinanceService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RestController; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + @RestController // 提供 RESTful API 接口,给 Feign 调用 @Validated public class FinanceApiImpl implements FinanceApi { - @Autowired private FinanceService financeService; @Override - public CommonResult getDept(String creditCode) { - return null; + public CommonResult getFinanceInfo(String creditCode, String deptCode) { + FinanceBO result = financeService.getFinanceByCreditCodeAndYear(creditCode, deptCode); + return success(BeanUtils.toBean(result, FinanceRespDTO.class)); } } diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/bo/finance/FinanceBO.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/bo/finance/FinanceBO.java new file mode 100644 index 000000000..6b904c923 --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/bo/finance/FinanceBO.java @@ -0,0 +1,27 @@ +package org.sk.module.data.dal.bo.finance; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class FinanceBO { + + @Schema(description = "企业名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "企业") + private String comName; + + @Schema(description = "社会统一信用代码", requiredMode = Schema.RequiredMode.REQUIRED, example = "008x") + private String creditCode; + + @Schema(description = "营收(万)", requiredMode = Schema.RequiredMode.REQUIRED, example = "23.10") + private BigDecimal Income; + + @Schema(description = "税收(万)", requiredMode = Schema.RequiredMode.REQUIRED, example = "3") + private BigDecimal tax; + + @Schema(description = "年份", requiredMode = Schema.RequiredMode.REQUIRED, example = "2022") + private String year; + +} diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/mapper/finance/FinanceMapper.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/mapper/finance/FinanceMapper.java new file mode 100644 index 000000000..16615c4d3 --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/mapper/finance/FinanceMapper.java @@ -0,0 +1,17 @@ +package org.sk.module.data.dal.mapper.finance; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.sk.module.data.dal.bo.finance.FinanceBO; + +@Mapper +public interface FinanceMapper { + + /** + * 根据社会统一信用代码和年份查下企业营收和税收 + * @param creditCode 社会统一信用代码 + * @param year 年份 + * @return FinanceBO + */ + FinanceBO getFinanceByCreditCodeAndYear(@Param("creditCode") String creditCode, @Param("year") String year); +} diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceService.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceService.java index 677a688b4..e0dafe831 100644 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceService.java +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceService.java @@ -1,10 +1,11 @@ package org.sk.module.data.service.finance; +import org.sk.module.data.dal.bo.finance.FinanceBO; + public interface FinanceService { - - + FinanceBO getFinanceByCreditCodeAndYear(String creditCode, String year); } diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java index ecf7e5e01..ca34a1fd1 100644 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java @@ -1,12 +1,24 @@ package org.sk.module.data.service.finance; +import org.apache.commons.lang3.StringUtils; +import org.sk.module.data.dal.bo.finance.FinanceBO; +import org.sk.module.data.dal.mapper.finance.FinanceMapper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class FinanceServiceImpl implements FinanceService { + @Autowired + private FinanceMapper financeMapper; - + @Override + public FinanceBO getFinanceByCreditCodeAndYear(String creditCode, String year) { + if (StringUtils.isBlank(creditCode) || StringUtils.isBlank(year)) { + return new FinanceBO(); + } + return financeMapper.getFinanceByCreditCodeAndYear(creditCode, year); + } } diff --git a/sk-module-data/sk-module-data-biz/src/main/resources/mappers/finance/FinanceMapper.xml b/sk-module-data/sk-module-data-biz/src/main/resources/mappers/finance/FinanceMapper.xml new file mode 100644 index 000000000..28dead882 --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/resources/mappers/finance/FinanceMapper.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file From bff2f38abc1a5b72524a96f75296acbd82cd83c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BF=97=E8=B6=85?= <1011804356@qq.com> Date: Thu, 10 Apr 2025 11:42:36 +0800 Subject: [PATCH 04/13] =?UTF-8?q?#add=20=E6=A0=B9=E6=8D=AE=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E7=A4=BE=E4=BC=9A=E4=BB=A3=E7=A0=81=E5=92=8C=E5=B9=B4?= =?UTF-8?q?=E4=BB=BD=E6=9F=A5=E4=B8=8B=E8=AF=A5=E4=BC=81=E4=B8=9A=E7=9A=84?= =?UTF-8?q?=E8=90=A5=E6=94=B6=E5=92=8C=E7=A8=8E=E6=94=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/sk/module/data/api/finance/FinanceApi.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/FinanceApi.java b/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/FinanceApi.java index c8c7228e8..08489a6d5 100644 --- a/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/FinanceApi.java +++ b/sk-module-data/sk-module-data-api/src/main/java/org/sk/module/data/api/finance/FinanceApi.java @@ -9,7 +9,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import org.sk.module.data.api.finance.dto.FinanceRespDTO; import org.sk.module.data.enums.ApiConstants; import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; @FeignClient(name = ApiConstants.NAME) @@ -18,14 +18,14 @@ public interface FinanceApi { String PREFIX = ApiConstants.PREFIX + "/finance"; - @PostMapping(PREFIX + "/get") + @GetMapping(PREFIX + "/getInfo") @Operation(summary = "获取财务信息") @Parameters({ @Parameter(name = "creditCode", description = "统一身份认证编码", example = "SEX", required = true), @Parameter(name = "year", description = "年份", example = "2022", required = true) }) CommonResult getFinanceInfo(@RequestParam("creditCode") String creditCode, - @RequestParam("year") String year); + @RequestParam("year") String year); } From a68e930e0432de0f3e11211b50bf9b08d13a5e97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BF=97=E8=B6=85?= <1011804356@qq.com> Date: Thu, 10 Apr 2025 14:31:30 +0800 Subject: [PATCH 05/13] =?UTF-8?q?#add=20=E6=A0=B9=E6=8D=AE=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E7=A4=BE=E4=BC=9A=E4=BB=A3=E7=A0=81=E5=92=8C=E5=B9=B4?= =?UTF-8?q?=E4=BB=BD=E6=9F=A5=E4=B8=8B=E8=AF=A5=E4=BC=81=E4=B8=9A=E7=9A=84?= =?UTF-8?q?=E8=90=A5=E6=94=B6=E5=92=8C=E7=A8=8E=E6=94=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/finance/FinanceController.java | 22 ++++++++++++++++ .../data/dal/param/finance/FinanceParam.java | 18 +++++++++++++ .../org/sk/module/data/dal/vo/FinanceVO.java | 25 +++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/param/finance/FinanceParam.java create mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/vo/FinanceVO.java diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java index 0e73bf7e4..28f27ae7a 100644 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java @@ -1,18 +1,40 @@ package org.sk.module.data.controller.finance; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import org.sk.module.data.dal.bo.finance.FinanceBO; +import org.sk.module.data.dal.param.finance.FinanceParam; +import org.sk.module.data.dal.vo.FinanceVO; +import org.sk.module.data.service.finance.FinanceService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.validation.Valid; + @RestController @RequestMapping("/finance") public class FinanceController { + @Autowired + private FinanceService financeService; + @GetMapping("/get") public String get() { return "hello wzc"; } + + @GetMapping("/getFinanceInfo") + public CommonResult getFinanceInfo(@Valid @RequestBody FinanceParam financeParam) { + + FinanceBO result = financeService.getFinanceByCreditCodeAndYear(financeParam.getCreditCode(), + financeParam.getYear()); + + return CommonResult.success(BeanUtils.toBean(result, FinanceVO.class)); + } } diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/param/finance/FinanceParam.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/param/finance/FinanceParam.java new file mode 100644 index 000000000..e227e2c97 --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/param/finance/FinanceParam.java @@ -0,0 +1,18 @@ +package org.sk.module.data.dal.param.finance; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Schema(description = "财务数据 Request VO") +@Data +public class FinanceParam { + + @NotBlank(message = "社会统一代码不能为空") + private String creditCode; + + @NotBlank(message = "年份不能为空") + private String year; +} diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/vo/FinanceVO.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/vo/FinanceVO.java new file mode 100644 index 000000000..558b21694 --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/vo/FinanceVO.java @@ -0,0 +1,25 @@ +package org.sk.module.data.dal.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class FinanceVO { + + @Schema(description = "企业名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "企业") + private String comName; + + @Schema(description = "社会统一信用代码", requiredMode = Schema.RequiredMode.REQUIRED, example = "008x") + private String creditCode; + + @Schema(description = "营收(万)", requiredMode = Schema.RequiredMode.REQUIRED, example = "23.10") + private BigDecimal Income; + + @Schema(description = "税收(万)", requiredMode = Schema.RequiredMode.REQUIRED, example = "3") + private BigDecimal tax; + + @Schema(description = "年份", requiredMode = Schema.RequiredMode.REQUIRED, example = "2022") + private String year; +} From 446d48edefc8a2b32eb59b9e4b5211a41dc5959b Mon Sep 17 00:00:00 2001 From: haoran <18775438303@163.com> Date: Fri, 11 Apr 2025 12:02:27 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E7=A4=BE=E4=BC=9A=E4=BF=A1=E7=94=A8=E4=BB=A3=E7=A0=81=20?= =?UTF-8?q?=E5=92=8C=E5=B9=B4=E4=BB=BD=E6=9F=A5=E8=AF=A2=E6=94=B6=E5=85=A5?= =?UTF-8?q?=E8=B4=A2=E5=8A=A1=E4=BF=A1=E6=81=AF=20=EF=BC=8C=E5=8F=96?= =?UTF-8?q?=E5=B9=B6=E9=9B=86=EF=BC=8C=20=E5=B9=B4=E4=BB=BD=E5=8F=AF?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/finance/FinanceController.java | 14 +++++++++++ .../dal/mapper/finance/FinanceMapper.java | 5 ++++ .../dal/param/finance/IncomeAndTaxParam.java | 24 +++++++++++++++++++ .../data/service/finance/FinanceService.java | 10 ++++++++ .../service/finance/FinanceServiceImpl.java | 18 ++++++++++++++ .../src/main/resources/application.yaml | 1 + 6 files changed, 72 insertions(+) create mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/param/finance/IncomeAndTaxParam.java diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java index 28f27ae7a..3253bb116 100644 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java @@ -3,8 +3,10 @@ package org.sk.module.data.controller.finance; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import org.sk.module.data.dal.bo.finance.FinanceBO; import org.sk.module.data.dal.param.finance.FinanceParam; +import org.sk.module.data.dal.param.finance.IncomeAndTaxParam; import org.sk.module.data.dal.vo.FinanceVO; import org.sk.module.data.service.finance.FinanceService; import org.springframework.beans.factory.annotation.Autowired; @@ -14,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; +import java.util.List; @RestController @RequestMapping("/finance") @@ -37,4 +40,15 @@ public class FinanceController { return CommonResult.success(BeanUtils.toBean(result, FinanceVO.class)); } + + /** + * 根据统一社会信用代码和年份查询企业收入和税收 + * @param param + * @return + */ + + @GetMapping("/getIncomeAndTax") + public CommonResult> getIncomeAndTax(@Valid @RequestBody IncomeAndTaxParam param) { + return CommonResult.success(financeService.getIncomeAndTax(param)); + } } diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/mapper/finance/FinanceMapper.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/mapper/finance/FinanceMapper.java index 16615c4d3..3d1790727 100644 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/mapper/finance/FinanceMapper.java +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/mapper/finance/FinanceMapper.java @@ -4,6 +4,8 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.sk.module.data.dal.bo.finance.FinanceBO; +import java.util.List; + @Mapper public interface FinanceMapper { @@ -14,4 +16,7 @@ public interface FinanceMapper { * @return FinanceBO */ FinanceBO getFinanceByCreditCodeAndYear(@Param("creditCode") String creditCode, @Param("year") String year); + + + List getIncomeAndTax(@Param("creditCodes")List creditCodes, @Param("year") String year); } diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/param/finance/IncomeAndTaxParam.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/param/finance/IncomeAndTaxParam.java new file mode 100644 index 000000000..509c5ae86 --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/param/finance/IncomeAndTaxParam.java @@ -0,0 +1,24 @@ +package org.sk.module.data.dal.param.finance; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * 财务数据入参 + */ +@Data +public class IncomeAndTaxParam { + + /** + * 社会统一代码 + */ + @NotBlank(message = "社会统一代码不能为空") + private String creditCodes; + + /** + * 年份 + */ + private String year; + +} diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceService.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceService.java index e0dafe831..531cfed9c 100644 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceService.java +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceService.java @@ -1,11 +1,21 @@ package org.sk.module.data.service.finance; import org.sk.module.data.dal.bo.finance.FinanceBO; +import org.sk.module.data.dal.param.finance.IncomeAndTaxParam; +import org.sk.module.data.dal.vo.FinanceVO; + +import java.util.List; public interface FinanceService { FinanceBO getFinanceByCreditCodeAndYear(String creditCode, String year); + /** + * 根据 creditCode 和 year 查询财务信息 + * @param param + * @return + */ + List getIncomeAndTax(IncomeAndTaxParam param); } diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java index ca34a1fd1..d774b0bfd 100644 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java @@ -1,13 +1,22 @@ package org.sk.module.data.service.finance; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import com.baomidou.dynamic.datasource.annotation.DS; import org.apache.commons.lang3.StringUtils; import org.sk.module.data.dal.bo.finance.FinanceBO; import org.sk.module.data.dal.mapper.finance.FinanceMapper; +import org.sk.module.data.dal.param.finance.IncomeAndTaxParam; +import org.sk.module.data.dal.vo.FinanceVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + @Service +@DS("master") public class FinanceServiceImpl implements FinanceService { @@ -21,4 +30,13 @@ public class FinanceServiceImpl implements FinanceService { } return financeMapper.getFinanceByCreditCodeAndYear(creditCode, year); } + + @Override + public List getIncomeAndTax(IncomeAndTaxParam param) { + String[] split = param.getCreditCodes().split(","); + List financeBOList = financeMapper.getIncomeAndTax(Arrays.asList(split), param.getYear()); + List financeVOList = new ArrayList<>(); + BeanUtils.copyProperties(financeBOList, financeVOList); + return financeVOList; + } } diff --git a/sk-module-data/sk-module-data-biz/src/main/resources/application.yaml b/sk-module-data/sk-module-data-biz/src/main/resources/application.yaml index 1faf5ffe5..b12f31d01 100644 --- a/sk-module-data/sk-module-data-biz/src/main/resources/application.yaml +++ b/sk-module-data/sk-module-data-biz/src/main/resources/application.yaml @@ -60,6 +60,7 @@ knife4j: # MyBatis Plus 的配置项 mybatis-plus: + mapper-locations: classpath*:mappers/**/*Mapper.xml configuration: map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 global-config: From 0f8f0c2afe03a73726228a2c9ab72f40faa09f8a Mon Sep 17 00:00:00 2001 From: haoran <18775438303@163.com> Date: Fri, 11 Apr 2025 12:44:57 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E7=A4=BE=E4=BC=9A=E4=BF=A1=E7=94=A8=E4=BB=A3=E7=A0=81=20?= =?UTF-8?q?=E5=92=8C=E5=B9=B4=E4=BB=BD=E6=9F=A5=E8=AF=A2=E6=94=B6=E5=85=A5?= =?UTF-8?q?=E8=B4=A2=E5=8A=A1=E4=BF=A1=E6=81=AF=20=EF=BC=8C=E5=8F=96?= =?UTF-8?q?=E5=B9=B6=E9=9B=86=EF=BC=8C=20=E5=B9=B4=E4=BB=BD=E5=8F=AF?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mappers/finance/FinanceMapper.xml | 71 ++++++++++++++++--- 1 file changed, 63 insertions(+), 8 deletions(-) diff --git a/sk-module-data/sk-module-data-biz/src/main/resources/mappers/finance/FinanceMapper.xml b/sk-module-data/sk-module-data-biz/src/main/resources/mappers/finance/FinanceMapper.xml index 28dead882..7e1468640 100644 --- a/sk-module-data/sk-module-data-biz/src/main/resources/mappers/finance/FinanceMapper.xml +++ b/sk-module-data/sk-module-data-biz/src/main/resources/mappers/finance/FinanceMapper.xml @@ -3,14 +3,69 @@ + + + + \ No newline at end of file From c12771012404fab58e259f1ba24dd2cfeae1fe9c Mon Sep 17 00:00:00 2001 From: haoran <18775438303@163.com> Date: Fri, 11 Apr 2025 15:34:19 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E7=B1=BB=E8=BD=AC=E6=8D=A2=E8=B5=8B?= =?UTF-8?q?=E5=80=BCbug=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sk/module/data/controller/finance/FinanceController.java | 3 ++- .../sk/module/data/service/finance/FinanceServiceImpl.java | 4 +--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java index 3253bb116..07cbef63a 100644 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java @@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.annotation.security.PermitAll; import javax.validation.Valid; import java.util.List; @@ -46,7 +47,7 @@ public class FinanceController { * @param param * @return */ - + @PermitAll @GetMapping("/getIncomeAndTax") public CommonResult> getIncomeAndTax(@Valid @RequestBody IncomeAndTaxParam param) { return CommonResult.success(financeService.getIncomeAndTax(param)); diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java index d774b0bfd..08ffff3e4 100644 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java @@ -35,8 +35,6 @@ public class FinanceServiceImpl implements FinanceService { public List getIncomeAndTax(IncomeAndTaxParam param) { String[] split = param.getCreditCodes().split(","); List financeBOList = financeMapper.getIncomeAndTax(Arrays.asList(split), param.getYear()); - List financeVOList = new ArrayList<>(); - BeanUtils.copyProperties(financeBOList, financeVOList); - return financeVOList; + return BeanUtils.toBean(financeBOList, FinanceVO.class); } } From caa163ed6bb04bcb07089a900c2b2dd5fd59ff12 Mon Sep 17 00:00:00 2001 From: haoran <18755438303@163.com> Date: Mon, 14 Apr 2025 14:54:29 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E9=87=87=E7=94=A8?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AF=E6=8E=88=E6=9D=83=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=20=20=E7=9B=B8=E5=85=B3yudao=E4=BB=A3=E7=A0=81=E6=9B=B4?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/finance/FinanceController.java | 3 +- .../admin/oauth2/OAuth2OpenController.java | 2 + .../oauth2/GXSKOAuth2GrantServiceImpl.java | 109 ++++++++++++++++++ .../src/main/resources/application.yaml | 1 + 4 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/GXSKOAuth2GrantServiceImpl.java diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java index 07cbef63a..621d1d22e 100644 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java @@ -10,6 +10,7 @@ import org.sk.module.data.dal.param.finance.IncomeAndTaxParam; import org.sk.module.data.dal.vo.FinanceVO; import org.sk.module.data.service.finance.FinanceService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -47,7 +48,7 @@ public class FinanceController { * @param param * @return */ - @PermitAll +// @PermitAll @GetMapping("/getIncomeAndTax") public CommonResult> getIncomeAndTax(@Valid @RequestBody IncomeAndTaxParam param) { return CommonResult.success(financeService.getIncomeAndTax(param)); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2OpenController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2OpenController.java index 0b6675c0f..11100f98f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2OpenController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2OpenController.java @@ -26,6 +26,7 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.Operation; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -61,6 +62,7 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti @Slf4j public class OAuth2OpenController { + @Qualifier("GXSKOAuth2GrantServiceImpl") @Resource private OAuth2GrantService oauth2GrantService; @Resource diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/GXSKOAuth2GrantServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/GXSKOAuth2GrantServiceImpl.java new file mode 100644 index 000000000..bcb4af7fd --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/GXSKOAuth2GrantServiceImpl.java @@ -0,0 +1,109 @@ +package cn.iocoder.yudao.module.system.service.oauth2; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; +import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; +import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2CodeDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants; +import cn.iocoder.yudao.module.system.service.auth.AdminAuthService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; + +/** + * OAuth2 授予 Service 实现类 + * + * @author 芋道源码 + */ +@Service +public class GXSKOAuth2GrantServiceImpl implements OAuth2GrantService { + + @Resource + private OAuth2TokenService oauth2TokenService; + @Resource + private OAuth2CodeService oauth2CodeService; + @Resource + private AdminAuthService adminAuthService; + + @Override + public OAuth2AccessTokenDO grantImplicit(Long userId, Integer userType, + String clientId, List scopes) { + return oauth2TokenService.createAccessToken(userId, userType, clientId, scopes); + } + + @Override + public String grantAuthorizationCodeForCode(Long userId, Integer userType, + String clientId, List scopes, + String redirectUri, String state) { + return oauth2CodeService.createAuthorizationCode(userId, userType, clientId, scopes, + redirectUri, state).getCode(); + } + + @Override + public OAuth2AccessTokenDO grantAuthorizationCodeForAccessToken(String clientId, String code, + String redirectUri, String state) { + OAuth2CodeDO codeDO = oauth2CodeService.consumeAuthorizationCode(code); + Assert.notNull(codeDO, "授权码不能为空"); // 防御性编程 + // 校验 clientId 是否匹配 + if (!StrUtil.equals(clientId, codeDO.getClientId())) { + throw exception(ErrorCodeConstants.OAUTH2_GRANT_CLIENT_ID_MISMATCH); + } + // 校验 redirectUri 是否匹配 + if (!StrUtil.equals(redirectUri, codeDO.getRedirectUri())) { + throw exception(ErrorCodeConstants.OAUTH2_GRANT_REDIRECT_URI_MISMATCH); + } + // 校验 state 是否匹配 + state = StrUtil.nullToDefault(state, ""); // 数据库 state 为 null 时,会设置为 "" 空串 + if (!StrUtil.equals(state, codeDO.getState())) { + throw exception(ErrorCodeConstants.OAUTH2_GRANT_STATE_MISMATCH); + } + + // 创建访问令牌 + return oauth2TokenService.createAccessToken(codeDO.getUserId(), codeDO.getUserType(), + codeDO.getClientId(), codeDO.getScopes()); + } + + @Override + public OAuth2AccessTokenDO grantPassword(String username, String password, String clientId, List scopes) { + // 使用账号 + 密码进行登录 + AdminUserDO user = adminAuthService.authenticate(username, password); + Assert.notNull(user, "用户不能为空!"); // 防御性编程 + + // 创建访问令牌 + return oauth2TokenService.createAccessToken(user.getId(), UserTypeEnum.ADMIN.getValue(), clientId, scopes); + } + + @Override + public OAuth2AccessTokenDO grantRefreshToken(String refreshToken, String clientId) { + return oauth2TokenService.refreshAccessToken(refreshToken, clientId); + } + + @Override + public OAuth2AccessTokenDO grantClientCredentials(String clientId, List scopes) { + // TODO 芋艿:项目中使用 OAuth2 解决的是三方应用的授权,内部的 SSO 等问题,所以暂时不考虑 client_credentials 这个场景 +// throw new UnsupportedOperationException("暂时不支持 client_credentials 授权模式"); + + // 创建访问令牌 + return oauth2TokenService.createAccessToken(IdUtil.getSnowflakeNextId(), UserTypeEnum.MEMBER.getValue(), + clientId, scopes); + } + + @Override + public boolean revokeToken(String clientId, String accessToken) { + // 先查询,保证 clientId 时匹配的 + OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.getAccessToken(accessToken); + if (accessTokenDO == null || ObjectUtil.notEqual(clientId, accessTokenDO.getClientId())) { + return false; + } + // 再删除 + return oauth2TokenService.removeAccessToken(accessToken) != null; + } + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application.yaml index 061dfe04a..7e37fe956 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application.yaml @@ -165,6 +165,7 @@ yudao: tenant: # 多租户相关配置项 enable: true ignore-urls: + - /admin-api/system/oauth2/token # - /admin-api/system/tenant/get-id-by-name # 基于名字获取租户,不许带租户编号 - /admin-api/system/tenant/get-by-website # 基于域名获取租户,不许带租户编号 - /admin-api/system/captcha/get-image # 获取图片验证码,和租户无关 From 064babee99735c47352a046a3d1fdf9058293dad Mon Sep 17 00:00:00 2001 From: haoran <18755438303@163.com> Date: Tue, 15 Apr 2025 08:51:24 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E5=99=A8=EF=BC=8C=E8=AE=BF=E9=97=AE=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=89=8D=E9=AA=8C=E8=AF=81id=E5=92=8C=E5=AF=86?= =?UTF-8?q?=E9=92=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sk-module-data/sk-module-data-api/pom.xml | 2 +- sk-module-data/sk-module-data-biz/pom.xml | 6 +- .../data/config/SecurityConfiguration.java | 1 + .../controller/finance/FinanceController.java | 14 ++--- .../dal/mapper/auth/AuthClientMapper.java | 19 ++++++ .../org/sk/module/data/filter/AuthFilter.java | 59 +++++++++++++++++++ .../service/finance/FinanceServiceImpl.java | 2 +- .../mappers/auth/AuthClientMapper.xml | 8 +++ 8 files changed, 99 insertions(+), 12 deletions(-) create mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/mapper/auth/AuthClientMapper.java create mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/filter/AuthFilter.java create mode 100644 sk-module-data/sk-module-data-biz/src/main/resources/mappers/auth/AuthClientMapper.xml diff --git a/sk-module-data/sk-module-data-api/pom.xml b/sk-module-data/sk-module-data-api/pom.xml index 034c960e6..27c01706f 100644 --- a/sk-module-data/sk-module-data-api/pom.xml +++ b/sk-module-data/sk-module-data-api/pom.xml @@ -4,7 +4,7 @@ cn.iocoder.cloud sk-module-data - 2.4.1-jdk8-SNAPSHOT + ${revision} 4.0.0 sk-module-data-api diff --git a/sk-module-data/sk-module-data-biz/pom.xml b/sk-module-data/sk-module-data-biz/pom.xml index f6febd2bc..ace35e21d 100644 --- a/sk-module-data/sk-module-data-biz/pom.xml +++ b/sk-module-data/sk-module-data-biz/pom.xml @@ -181,7 +181,7 @@ true lib/ false - cn.iocoder.yudao.module.system.SystemServerApplication + org.sk.module.data.SkModuleDataBizApplication ./resources/ @@ -217,7 +217,7 @@ - + diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/SecurityConfiguration.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/SecurityConfiguration.java index 9148980ce..5d5130fbe 100644 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/SecurityConfiguration.java +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/SecurityConfiguration.java @@ -32,6 +32,7 @@ public class SecurityConfiguration { .requestMatchers("/actuator/**").permitAll(); // RPC 服务的安全配置 registry.requestMatchers(ApiConstants.PREFIX + "/**").permitAll(); + registry.requestMatchers( "/finance/**").permitAll(); } }; diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java index 621d1d22e..9e4b25a85 100644 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java @@ -4,6 +4,8 @@ package org.sk.module.data.controller.finance; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import org.sk.module.data.dal.bo.finance.FinanceBO; import org.sk.module.data.dal.param.finance.FinanceParam; import org.sk.module.data.dal.param.finance.IncomeAndTaxParam; @@ -11,15 +13,12 @@ import org.sk.module.data.dal.vo.FinanceVO; import org.sk.module.data.service.finance.FinanceService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.security.PermitAll; import javax.validation.Valid; import java.util.List; - +@Tag(name = "对外接口 - 财务数据") @RestController @RequestMapping("/finance") public class FinanceController { @@ -34,6 +33,7 @@ public class FinanceController { return "hello wzc"; } + @Operation(summary = "获取财务信息") @GetMapping("/getFinanceInfo") public CommonResult getFinanceInfo(@Valid @RequestBody FinanceParam financeParam) { @@ -48,8 +48,8 @@ public class FinanceController { * @param param * @return */ -// @PermitAll - @GetMapping("/getIncomeAndTax") + @Operation(summary = "根据拼接的统一社会信用编码以及年份获取数据") + @PostMapping("/getIncomeAndTax") public CommonResult> getIncomeAndTax(@Valid @RequestBody IncomeAndTaxParam param) { return CommonResult.success(financeService.getIncomeAndTax(param)); } diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/mapper/auth/AuthClientMapper.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/mapper/auth/AuthClientMapper.java new file mode 100644 index 000000000..a8acb095f --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/dal/mapper/auth/AuthClientMapper.java @@ -0,0 +1,19 @@ +package org.sk.module.data.dal.mapper.auth; + +import com.baomidou.dynamic.datasource.annotation.DS; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.sk.module.data.dal.bo.finance.FinanceBO; + +import java.util.List; + +/** + * @author haoran + */ +@Mapper +@DS("master") +public interface AuthClientMapper { + + int selectClientByIdAndSecret(@Param("id")String id, @Param("secret")String secret); + +} diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/filter/AuthFilter.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/filter/AuthFilter.java new file mode 100644 index 000000000..f56e9f220 --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/filter/AuthFilter.java @@ -0,0 +1,59 @@ +package org.sk.module.data.filter; + +import org.sk.module.data.dal.mapper.auth.AuthClientMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerExecutionChain; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.lang.reflect.Method; + +@Component +public class AuthFilter implements Filter { + + @Autowired + @Qualifier("requestMappingHandlerMapping") // 或 "controllerEndpointHandlerMapping" + private RequestMappingHandlerMapping handlerMapping; + + @Autowired + private AuthClientMapper authClientMapper; + + public AuthFilter( RequestMappingHandlerMapping requestMappingHandlerMapping) { + this.handlerMapping = requestMappingHandlerMapping; + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + HttpServletRequest httpRequest = (HttpServletRequest) request; + HttpServletResponse httpResponse = (HttpServletResponse) response; + + // 获取请求头中的密钥和 ID + String id = httpRequest.getHeader("X-Id"); + String secretKey = httpRequest.getHeader("X-Secret-Key"); + + // 校验 ID 和密钥是否匹配 + if (isValid(id, secretKey)) { + chain.doFilter(request, response); + } else { + httpResponse.setStatus(HttpServletResponse.SC_FORBIDDEN); // 403 Forbidden + httpResponse.setContentType("application/json"); + httpResponse.getWriter().write("{\"error\": \"Invalid ID or Secret Key\"}"); + } + } + + + /** + * 校验 ID 和密钥是否匹配 + */ + private boolean isValid(String id, String secretKey) { + // 示例逻辑:从数据库中查询 ID 和密钥是否匹配 + return authClientMapper.selectClientByIdAndSecret(id,secretKey) == 1; + } +} diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java index 08ffff3e4..d5da80f8c 100644 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/service/finance/FinanceServiceImpl.java @@ -16,7 +16,7 @@ import java.util.Arrays; import java.util.List; @Service -@DS("master") +@DS("slave1") public class FinanceServiceImpl implements FinanceService { diff --git a/sk-module-data/sk-module-data-biz/src/main/resources/mappers/auth/AuthClientMapper.xml b/sk-module-data/sk-module-data-biz/src/main/resources/mappers/auth/AuthClientMapper.xml new file mode 100644 index 000000000..8fe3186e3 --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/resources/mappers/auth/AuthClientMapper.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file From bbbf0ba950e4310825e849a6c4290bdfcca03c17 Mon Sep 17 00:00:00 2001 From: haoran <18755438303@163.com> Date: Tue, 15 Apr 2025 10:53:41 +0800 Subject: [PATCH 11/13] =?UTF-8?q?getway=E6=B7=BB=E5=8A=A0sk=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yudao-gateway/src/main/resources/application.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/yudao-gateway/src/main/resources/application.yaml b/yudao-gateway/src/main/resources/application.yaml index dd298820b..d9860cc3b 100644 --- a/yudao-gateway/src/main/resources/application.yaml +++ b/yudao-gateway/src/main/resources/application.yaml @@ -177,6 +177,13 @@ spring: - Path=/admin-api/iot/** filters: - RewritePath=/admin-api/iot/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs + ## data-server 服务 + - id: data-admin-api # 路由的编号 + uri: grayLb://data-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/data/** + filters: + - RewritePath=/admin-api/data/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs x-forwarded: prefix-enabled: false # 避免 Swagger 重复带上额外的 /admin-api/system 前缀 @@ -234,6 +241,9 @@ knife4j: - name: iot-server service-name: iot-server url: /admin-api/iot/v3/api-docs + - name: data-server + service-name: data-server + url: /admin-api/data/v3/api-docs --- #################### 芋道相关配置 #################### From b411c4f45eab7e3f1f6837a69e8be88e8b2965d5 Mon Sep 17 00:00:00 2001 From: haoran <18755438303@163.com> Date: Tue, 15 Apr 2025 19:03:51 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E7=A7=BB=E9=99=A4=20FinanceController=20?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E5=A4=9A=E4=BD=99=E6=B3=A8=E8=A7=A3=E5=92=8C?= =?UTF-8?q?=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除了未使用的 ObjectUtils 导入 - 删除了未使用的 PreAuthorize 导入 - 在 getIncomeAndTax 方法上添加了 PermitAll 注解,允许所有用户访问 - SecurityConfiguration 代码优化 --- .../org/sk/module/data/config/SecurityConfiguration.java | 7 +++---- .../controller/{ => admin}/finance/FinanceController.java | 5 +++-- 2 files changed, 6 insertions(+), 6 deletions(-) rename sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/{ => admin}/finance/FinanceController.java (95%) diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/SecurityConfiguration.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/SecurityConfiguration.java index 5d5130fbe..43cbdbcc5 100644 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/SecurityConfiguration.java +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/SecurityConfiguration.java @@ -1,7 +1,7 @@ package org.sk.module.data.config; import cn.iocoder.yudao.framework.security.config.AuthorizeRequestsCustomizer; -import cn.iocoder.yudao.module.system.enums.ApiConstants; +import org.sk.module.data.enums.ApiConstants; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -10,10 +10,10 @@ import org.springframework.security.config.annotation.web.configurers.AuthorizeH /** * System 模块的 Security 配置 */ -@Configuration(proxyBeanMethods = false, value = "systemSecurityConfiguration") +@Configuration(proxyBeanMethods = false, value = "dataSecurityConfiguration") public class SecurityConfiguration { - @Bean("systemAuthorizeRequestsCustomizer") + @Bean("dataAuthorizeRequestsCustomizer") public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() { return new AuthorizeRequestsCustomizer() { @@ -32,7 +32,6 @@ public class SecurityConfiguration { .requestMatchers("/actuator/**").permitAll(); // RPC 服务的安全配置 registry.requestMatchers(ApiConstants.PREFIX + "/**").permitAll(); - registry.requestMatchers( "/finance/**").permitAll(); } }; diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/admin/finance/FinanceController.java similarity index 95% rename from sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java rename to sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/admin/finance/FinanceController.java index 9e4b25a85..1ad8da7da 100644 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/finance/FinanceController.java +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/admin/finance/FinanceController.java @@ -1,4 +1,4 @@ -package org.sk.module.data.controller.finance; +package org.sk.module.data.controller.admin.finance; import cn.iocoder.yudao.framework.common.pojo.CommonResult; @@ -20,7 +20,7 @@ import javax.validation.Valid; import java.util.List; @Tag(name = "对外接口 - 财务数据") @RestController -@RequestMapping("/finance") +@RequestMapping("/data/finance") public class FinanceController { @@ -50,6 +50,7 @@ public class FinanceController { */ @Operation(summary = "根据拼接的统一社会信用编码以及年份获取数据") @PostMapping("/getIncomeAndTax") + @PermitAll public CommonResult> getIncomeAndTax(@Valid @RequestBody IncomeAndTaxParam param) { return CommonResult.success(financeService.getIncomeAndTax(param)); } From f3d0835d8218aa16e9d1bf226d32a2c7364307bb Mon Sep 17 00:00:00 2001 From: haoran <18775438303@163.com> Date: Thu, 17 Apr 2025 15:19:36 +0800 Subject: [PATCH 13/13] =?UTF-8?q?refactor(sk-module-data):=20=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E8=AE=A4=E8=AF=81=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=8B=A6=E6=88=AA=E5=99=A8=E6=9B=BF=E4=BB=A3=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 AuthFilter 类,改用 AuthInterceptor拦截器实现认证逻辑 - 新增 AuthInterceptor 类,用于拦截请求并进行身份验证 - 在 FinanceController 中添加 RequiresAuth 注解,标识需要认证的方法 - 新增 RequiresAuth 注解,用于标记需要认证的方法或类 - 新增 WebConfig 配置类,注册 AuthInterceptor 拦截器 --- .../module/data/config/AuthInterceptor.java | 72 +++++++++++++++++++ .../sk/module/data/config/RequiresAuth.java | 15 ++++ .../org/sk/module/data/config/WebConfig.java | 22 ++++++ .../admin/finance/FinanceController.java | 4 +- .../org/sk/module/data/filter/AuthFilter.java | 59 --------------- 5 files changed, 111 insertions(+), 61 deletions(-) create mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/AuthInterceptor.java create mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/RequiresAuth.java create mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/WebConfig.java delete mode 100644 sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/filter/AuthFilter.java diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/AuthInterceptor.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/AuthInterceptor.java new file mode 100644 index 000000000..38a99122d --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/AuthInterceptor.java @@ -0,0 +1,72 @@ +package org.sk.module.data.config; + +import org.sk.module.data.dal.mapper.auth.AuthClientMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 认证拦截器 + * @author haoran + */ +@Component +public class AuthInterceptor implements HandlerInterceptor { + + @Autowired + private AuthClientMapper authClientMapper; + + /** + * 预处理HTTP请求,检查是否需要认证,并根据认证结果决定是否放行请求。 + * + * @param request HTTP请求对象,包含请求的详细信息 + * @param response HTTP响应对象,用于设置响应状态和内容 + * @param handler 处理请求的处理器对象,可能是HandlerMethod或其他类型 + * @return 如果请求可以继续处理,返回true;如果请求被拦截,返回false + * @throws Exception 如果处理过程中发生异常 + */ + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + if (!(handler instanceof HandlerMethod)) { + // 不是处理方法(如资源处理器),直接放行 + return true; + } + + HandlerMethod handlerMethod = (HandlerMethod) handler; + + // 检查方法或类上的@RequiresAuth注解 + RequiresAuth methodAnnotation = handlerMethod.getMethodAnnotation(RequiresAuth.class); + RequiresAuth classAnnotation = handlerMethod.getBeanType().getAnnotation(RequiresAuth.class); + + if (methodAnnotation == null && classAnnotation == null) { + // 无需认证,放行 + return true; + } + + // 执行认证逻辑 + String id = request.getHeader("X-Id"); + String secretKey = request.getHeader("X-Secret-Key"); + + if (isValid(id, secretKey)) { + return true; + } else { + response.setStatus(HttpServletResponse.SC_FORBIDDEN); + response.setContentType("application/json"); + response.getWriter().write("{\"error\": \"Invalid ID or Secret Key\"}"); + return false; + } + } + + /** + * 验证ID和SecretKey + * @param id + * @param secretKey + * @return + */ + private boolean isValid(String id, String secretKey) { + return authClientMapper.selectClientByIdAndSecret(id, secretKey) == 1; + } +} diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/RequiresAuth.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/RequiresAuth.java new file mode 100644 index 000000000..d71fce2e3 --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/RequiresAuth.java @@ -0,0 +1,15 @@ +package org.sk.module.data.config; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 是否需要判断 Id 和 秘钥的权限认证的注解 + * @author haoran + */ +@Target({ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface RequiresAuth { +} \ No newline at end of file diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/WebConfig.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/WebConfig.java new file mode 100644 index 000000000..29b680129 --- /dev/null +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/config/WebConfig.java @@ -0,0 +1,22 @@ +package org.sk.module.data.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * + */ +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Autowired + private AuthInterceptor authInterceptor; + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(authInterceptor) + .addPathPatterns("/**"); // 拦截所有路径,由拦截器内部决定是否处理 + } +} \ No newline at end of file diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/admin/finance/FinanceController.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/admin/finance/FinanceController.java index 1ad8da7da..46660ab24 100644 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/admin/finance/FinanceController.java +++ b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/controller/admin/finance/FinanceController.java @@ -3,16 +3,15 @@ package org.sk.module.data.controller.admin.finance; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import org.sk.module.data.config.RequiresAuth; import org.sk.module.data.dal.bo.finance.FinanceBO; import org.sk.module.data.dal.param.finance.FinanceParam; import org.sk.module.data.dal.param.finance.IncomeAndTaxParam; import org.sk.module.data.dal.vo.FinanceVO; import org.sk.module.data.service.finance.FinanceService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.security.PermitAll; @@ -51,6 +50,7 @@ public class FinanceController { @Operation(summary = "根据拼接的统一社会信用编码以及年份获取数据") @PostMapping("/getIncomeAndTax") @PermitAll + @RequiresAuth public CommonResult> getIncomeAndTax(@Valid @RequestBody IncomeAndTaxParam param) { return CommonResult.success(financeService.getIncomeAndTax(param)); } diff --git a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/filter/AuthFilter.java b/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/filter/AuthFilter.java deleted file mode 100644 index f56e9f220..000000000 --- a/sk-module-data/sk-module-data-biz/src/main/java/org/sk/module/data/filter/AuthFilter.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.sk.module.data.filter; - -import org.sk.module.data.dal.mapper.auth.AuthClientMapper; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.stereotype.Component; -import org.springframework.web.method.HandlerMethod; -import org.springframework.web.servlet.HandlerExecutionChain; -import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; - -import javax.servlet.*; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.lang.reflect.Method; - -@Component -public class AuthFilter implements Filter { - - @Autowired - @Qualifier("requestMappingHandlerMapping") // 或 "controllerEndpointHandlerMapping" - private RequestMappingHandlerMapping handlerMapping; - - @Autowired - private AuthClientMapper authClientMapper; - - public AuthFilter( RequestMappingHandlerMapping requestMappingHandlerMapping) { - this.handlerMapping = requestMappingHandlerMapping; - } - - @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { - HttpServletRequest httpRequest = (HttpServletRequest) request; - HttpServletResponse httpResponse = (HttpServletResponse) response; - - // 获取请求头中的密钥和 ID - String id = httpRequest.getHeader("X-Id"); - String secretKey = httpRequest.getHeader("X-Secret-Key"); - - // 校验 ID 和密钥是否匹配 - if (isValid(id, secretKey)) { - chain.doFilter(request, response); - } else { - httpResponse.setStatus(HttpServletResponse.SC_FORBIDDEN); // 403 Forbidden - httpResponse.setContentType("application/json"); - httpResponse.getWriter().write("{\"error\": \"Invalid ID or Secret Key\"}"); - } - } - - - /** - * 校验 ID 和密钥是否匹配 - */ - private boolean isValid(String id, String secretKey) { - // 示例逻辑:从数据库中查询 ID 和密钥是否匹配 - return authClientMapper.selectClientByIdAndSecret(id,secretKey) == 1; - } -}