Browse Source

统计报表

yubin 4 days ago
parent
commit
80d12069b0

+ 1 - 1
mall-service/pom.xml

@@ -129,7 +129,7 @@
         <dependency>
             <groupId>org.springdoc</groupId>
             <artifactId>springdoc-openapi-ui</artifactId>
-            <version>1.6.14</version>
+            <version>1.6.15</version>
         </dependency>
 
         <dependency>

+ 103 - 0
mall-service/src/main/java/com/txz/mall/configurer/OpenApiConfig.java

@@ -0,0 +1,103 @@
+package com.txz.mall.configurer;
+
+import io.swagger.v3.oas.models.Components;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.security.SecurityRequirement;
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.client.ServiceInstance;
+import org.springframework.cloud.client.discovery.DiscoveryClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import io.swagger.v3.oas.models.servers.Server;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+@Configuration
+public class OpenApiConfig {
+
+
+//    @Value("${server.port}")
+//    private String mallPort;
+    @Resource
+    private DiscoveryClient discoveryClient;
+    @Bean
+    public OpenAPI serviceOpenAPI(@Value("${spring.application.name}") String serviceName) {
+
+//        String localIp;
+//
+//        {
+//            try {
+//                localIp = InetAddress.getLocalHost().getHostAddress();
+//            } catch (UnknownHostException e) {
+//                throw new RuntimeException(e);
+//            }
+//        }
+//
+//        // 拼接 `mall` 服务的访问地址(格式:http://IP:端口)
+//        String mallServiceUrl = "http://" + localIp + ":" + mallPort;
+
+
+        // 1. 定义第一个请求头:Custom-Header-1
+        SecurityScheme header1 = new SecurityScheme()
+                .type(SecurityScheme.Type.APIKEY)
+                .name("accesstoken") // 第一个请求头名称
+                .in(SecurityScheme.In.HEADER);
+
+        // 2. 定义第二个请求头:Custom-Header-2
+        SecurityScheme header2 = new SecurityScheme()
+                .type(SecurityScheme.Type.APIKEY)
+                .name("token") // 第二个请求头名称
+                .in(SecurityScheme.In.HEADER);
+
+        SecurityScheme header3 = new SecurityScheme()
+                .type(SecurityScheme.Type.APIKEY)
+                .name("Accept-Language") // 第二个请求头名称
+                .in(SecurityScheme.In.HEADER);
+
+        // 3. 注册两个安全方案到组件
+        Components components = new Components()
+                .addSecuritySchemes("Header1Security", header1)  // 第一个方案标识
+                .addSecuritySchemes("Header2Security", header2) // 第二个方案标识
+                .addSecuritySchemes("Header3Security", header3); // 第二个方案标识
+
+        // 4. 定义安全要求,同时应用两个请求头
+        List<SecurityRequirement> securityRequirements = new ArrayList<>();
+        securityRequirements.add(new SecurityRequirement().addList("Header1Security"));
+        securityRequirements.add(new SecurityRequirement().addList("Header2Security"));
+        securityRequirements.add(new SecurityRequirement().addList("Header3Security"));
+
+        List<ServiceInstance> gateway = discoveryClient.getInstances("backstage");
+
+        String gatewayUrl = "http://192.168.0.112:8401/mall";
+        if(!CollectionUtils.isEmpty(gateway)){
+            ServiceInstance serviceInstance = gateway.get(0);
+
+            String serviceId = serviceInstance.getServiceId();
+            String host = serviceInstance.getHost();
+            int port = serviceInstance.getPort();
+            gatewayUrl = "http://"+host+":"+port+"/mall";
+        }
+
+
+
+
+        return new OpenAPI()
+                .openapi("3.0.1")
+                .info(new io.swagger.v3.oas.models.info.Info()
+                        .title(serviceName + " API")
+                        .version("1.0")
+                        .description("Documentation for " + serviceName))
+                        .servers(Collections.singletonList(
+                        new Server().url(gatewayUrl)
+                )).components(components) // 注册组件
+                .security(securityRequirements); // 全局应用安全要求
+
+    }
+}

+ 62 - 32
mall-service/src/main/java/com/txz/mall/configurer/SwaggerConfig.java

@@ -1,4 +1,4 @@
-package com.txz.mall.configurer;
+//package com.txz.mall.configurer;
 
 import io.swagger.annotations.ApiOperation;
 import io.swagger.v3.oas.models.Components;
@@ -7,6 +7,7 @@ import io.swagger.v3.oas.models.info.Contact;
 import io.swagger.v3.oas.models.info.Info;
 import io.swagger.v3.oas.models.info.License;
 import io.swagger.v3.oas.models.parameters.Parameter;
+import org.springdoc.core.GroupedOpenApi;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Profile;
@@ -26,34 +27,63 @@ import java.util.List;
 /**
  * @author Fcx
  */
-@Configuration
-@Profile({"dev", "test"})
-public class SwaggerConfig {
-    
-    @Bean
-    public OpenAPI customOpenAPI() {
-        return new OpenAPI()
-                .components(new Components()
-                        .addParameters("token", new io.swagger.v3.oas.models.parameters.Parameter()
-                                .name("token")
-                                .description("user token")
-                                .required(false)
-                                .in("header"))
-                        .addParameters("appCode", new Parameter()
-                                .name("appCode")
-                                .description("appCode")
-                                .required(false)
-                                .in("header")))
-                .info(new Info()
-                        .title("API接口文档")
-                        .description("swagger2 demo api")
-                        .version("1.0")
-                        .contact(new Contact()
-                                .name("admin")
-                                .url("http://localhost/swagger-ui.html")
-                                .email("xxx@qq.com"))
-                        .license(new License()
-                                .name("Apache 2.0")
-                                .url("http://localhost/swagger-ui.html")));
-    }
-}
+//@Configuration
+//@Profile({"dev", "test"})
+//public class SwaggerConfig {
+//
+//    @Bean
+//    public OpenAPI customOpenAPI() {
+//        return new OpenAPI()
+//                .components(new Components()
+//                        .addParameters("token", new io.swagger.v3.oas.models.parameters.Parameter()
+//                                .name("token")
+//                                .description("user token")
+//                                .required(false)
+//                                .in("header"))
+//                        .addParameters("appCode", new Parameter()
+//                                .name("appCode")
+//                                .description("appCode")
+//                                .required(false)
+//                                .in("header")))
+//                .info(new Info()
+//                        .title("API接口文档")
+//                        .description("swagger2 demo api")
+//                        .version("1.0")
+//                        .contact(new Contact()
+//                                .name("admin")
+//                                .url("http://localhost/swagger-ui.html")
+//                                .email("xxx@qq.com"))
+//                        .license(new License()
+//                                .name("Apache 2.0")
+//                                .url("http://localhost/swagger-ui.html")));
+//    }
+//
+//    @Bean
+//    public GroupedOpenApi mallApi() {
+//        return GroupedOpenApi.builder()
+//                .group("mall") // 分组名,需与网关配置匹配
+//                .pathsToMatch("/**") // 匹配 mall 服务的所有接口
+//                .build();
+//    }
+//
+//
+//
+// //   @Bean
+////    public OpenAPI customOpenAPI() {
+////        return new OpenAPI()
+////                // 文档基本信息
+////                .info(new Info()
+////                        .title("mall API")  // 文档标题
+////                        .description("基于 Spring Boot + SpringDoc 的接口文档")  // 文档描述
+////                        .version("v1.0.0")  // 接口版本
+////                        // 联系人信息
+////                        .contact(new Contact()
+////                                .name("开发团队")
+////                                .email("dev@example.com")
+////                                .url("http://localhost/swagger-ui.html"))
+////                        // 许可证信息(可选)
+////                        .license(new License()
+////                                .name("Apache 2.0")
+////                                .url("https://www.apache.org/licenses/LICENSE-2.0.html")));
+////    }
+//}

+ 7 - 15
mall-service/src/main/java/com/txz/mall/controller/i18nTestController.java

@@ -1,37 +1,29 @@
 package com.txz.mall.controller;
 
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import com.txz.mall.core.Result;
-import com.txz.mall.core.ResultCode;
-import com.txz.mall.core.ServiceException;
-import com.txz.mall.model.StoreCombination;
+
 import com.txz.mall.util.I18nUtil;
 import com.txz.mall.util.RedissonLockUtil;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.MessageSource;
-import org.springframework.context.i18n.LocaleContextHolder;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.List;
-import java.util.Locale;
-
 @RestController
 @RequiredArgsConstructor
 @RequestMapping("/test")
+@Tag(name = "用户管理", description = "用户CRUD接口")  // 标记控制器功能
 public class i18nTestController {
 
 
 
 
-    @ApiOperation(value = "demo")
+    @Operation(description = "demo")
     @GetMapping(value = "/demo")
     public String getMore() {
 
@@ -46,7 +38,7 @@ public class i18nTestController {
     @Autowired
     private RedissonClient redissonClient;
 
-    @ApiOperation(value = "redisson")
+    @Operation(description = "redisson")
     @GetMapping(value = "/redisson")
     public String redisson1() {
 
@@ -64,7 +56,7 @@ public class i18nTestController {
         return "success1";
     }
 
-    @ApiOperation(value = "redisson2")
+    @Operation(description = "redisson2")
     @GetMapping(value = "/redisson2")
     public String redisson2() {
         RedissonLockUtil.tryLock("stock:100:lock", 3, 30);