feat: 增加 aggr 聚合服务层,并将 bff 中的 聚合API 迁移到 aggr
diff --git a/aggr/admin/.gitignore b/aggr/admin/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/aggr/admin/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/aggr/admin/Dockerfile b/aggr/admin/Dockerfile
new file mode 100644
index 0000000..b91c9f4
--- /dev/null
+++ b/aggr/admin/Dockerfile
@@ -0,0 +1,21 @@
+FROM harbor.supwisdom.com/institute/openjdk:8-jre-alpine
+
+ENV ENABLE_JMX_SSL=false
+ENV JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=docker
+ENV SPRING_PROFILES_ACTIVE=docker
+
+ARG NAME
+ARG VERSION
+ARG JAR_FILE
+
+LABEL name=$NAME \
+      version=$VERSION
+
+EXPOSE 8080
+
+EXPOSE 8443
+
+COPY --chown=java-app:java-app target/${JAR_FILE} /home/java-app/lib/app.jar
+
+# COPY --chown=java-app:java-app target/doc /home/java-app/doc
+# COPY --chown=java-app:java-app target/api-docs /home/java-app/api-docs
diff --git a/aggr/admin/pom.xml b/aggr/admin/pom.xml
new file mode 100644
index 0000000..38a14f1
--- /dev/null
+++ b/aggr/admin/pom.xml
@@ -0,0 +1,210 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>com.supwisdom.institute</groupId>
+    <artifactId>sw-backend-parent</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <relativePath>../../</relativePath>
+  </parent>
+
+  <groupId>com.supwisdom.institute</groupId>
+  <artifactId>sw-backend-admin-aggr</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
+  <packaging>jar</packaging>
+
+  <name>Supwisdom Backend Framework Admin Aggregator API</name>
+  <description>Supwisdom Backend Framework Admin Aggregator API project</description>
+
+  <properties>
+    <start-class>com.supwisdom.institute.backend.admin.aggr.Application</start-class>
+  </properties>
+
+  <dependencies>
+
+    <dependency>
+      <groupId>org.projectlombok</groupId>
+      <artifactId>lombok</artifactId>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter</artifactId>
+    </dependency>
+
+    <!-- 微服务 健康监控 -->
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-actuator</artifactId>
+    </dependency>
+
+
+    <dependency>
+      <groupId>org.springframework.cloud</groupId>
+      <artifactId>spring-cloud-starter-openfeign</artifactId>
+    </dependency>
+
+
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-web</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>com.supwisdom.infras</groupId>
+      <artifactId>infras-online-doc</artifactId>
+    </dependency>
+
+
+    <!-- <dependency>
+      <groupId>com.supwisdom.infras</groupId>
+      <artifactId>infras-mvc</artifactId>
+    </dependency> -->
+
+    <dependency>
+      <groupId>com.supwisdom.infras</groupId>
+      <artifactId>infras-object-mapper</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>com.supwisdom.infras</groupId>
+      <artifactId>infras-i18n</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>com.supwisdom.infras</groupId>
+      <artifactId>infras-lang</artifactId>
+    </dependency>
+
+
+    <dependency>
+      <groupId>com.supwisdom.institute</groupId>
+      <artifactId>sw-backend-common-framework</artifactId>
+    </dependency>
+
+
+    <dependency>
+      <groupId>io.springfox</groupId>
+      <artifactId>springfox-swagger2</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.springfox</groupId>
+      <artifactId>springfox-swagger-ui</artifactId>
+    </dependency>
+
+
+    <dependency>
+      <groupId>mysql</groupId>
+      <artifactId>mysql-connector-java</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+
+    <!-- 热部署,无需重启项目 -->
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-devtools</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+
+
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-test</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+  </dependencies>
+
+  <build>
+    <finalName>${project.artifactId}</finalName>
+
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-failsafe-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-javadoc-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-release-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.jacoco</groupId>
+        <artifactId>jacoco-maven-plugin</artifactId>
+      </plugin>
+
+
+      <!-- <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-resources-plugin</artifactId>
+        <version>2.4.3</version>
+        <configuration>
+          <encoding>${project.build.sourceEncoding}</encoding>
+        </configuration>
+        <executions>
+          <execution>
+            <id>copy-doc-resources</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <encoding>utf-8</encoding>
+              <outputDirectory>${basedir}/target/doc</outputDirectory>
+              <overwrite>true</overwrite>
+              <resources>
+                <resource>
+                  <directory>${basedir}/../doc</directory>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+          <execution>
+            <id>copy-api-docs-resources</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <encoding>utf-8</encoding>
+              <outputDirectory>${basedir}/target/api-docs</outputDirectory>
+              <overwrite>true</overwrite>
+              <resources>
+                <resource>
+                  <directory>${basedir}/../api-docs</directory>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin> -->
+
+
+      <plugin>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-maven-plugin</artifactId>
+      </plugin>
+
+      <plugin>
+        <groupId>com.spotify</groupId>
+        <artifactId>dockerfile-maven-plugin</artifactId>
+        <configuration>
+          <skip>false</skip>
+        </configuration>
+      </plugin>
+
+    </plugins>
+
+  </build>
+
+</project>
diff --git a/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/Application.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/Application.java
new file mode 100644
index 0000000..f3762ce
--- /dev/null
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/Application.java
@@ -0,0 +1,42 @@
+package com.supwisdom.institute.backend.admin.aggr;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.Bean;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.filter.CorsFilter;
+
+import com.supwisdom.infras.online.doc.configuration.EnableInfrasOnlineDoc;
+import com.supwisdom.institute.backend.common.core.transmit.annotation.EnableSimpleUserTransmit;
+import com.supwisdom.institute.backend.common.framework.exception.EnableCustomExceptionHandler;
+
+@SpringBootApplication
+@EnableFeignClients
+
+@EnableSimpleUserTransmit
+@EnableCustomExceptionHandler
+
+@EnableInfrasOnlineDoc
+public class Application {
+
+  public static void main(String[] args) {
+    SpringApplication.run(Application.class, args);
+  }
+  
+  @Bean
+  public CorsFilter corsFilter() {
+    final CorsConfiguration config = new CorsConfiguration();
+    // config.setAllowCredentials(true);
+    config.addAllowedOrigin("*");
+    config.addAllowedHeader("*");
+    config.addAllowedMethod("*");
+
+    final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+    source.registerCorsConfiguration("/v2/api-docs", config);
+
+    return new CorsFilter(source);
+  }
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/.gitkeep b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/controller/.gitkeep
similarity index 100%
rename from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/.gitkeep
rename to aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/controller/.gitkeep
diff --git a/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/controller/base/AdminBaseController.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/controller/base/AdminBaseController.java
new file mode 100644
index 0000000..2411d5e
--- /dev/null
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/controller/base/AdminBaseController.java
@@ -0,0 +1,19 @@
+package com.supwisdom.institute.backend.admin.aggr.apis.controller.base;
+
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.institute.backend.common.core.transmit.user.UserContext;
+
+@RestController
+@RequestMapping(value = "/v1/admin/base")
+public class AdminBaseController {
+  
+  @RequestMapping(method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public String hello() {
+    return "hello, " + UserContext.getUsername();
+  }
+
+}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/biz/AdminBizController.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/controller/biz/AdminBizController.java
similarity index 61%
rename from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/biz/AdminBizController.java
rename to aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/controller/biz/AdminBizController.java
index 68bd37a..30dfbcd 100644
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/biz/AdminBizController.java
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/controller/biz/AdminBizController.java
@@ -1,16 +1,25 @@
-package com.supwisdom.institute.backend.admin.bff.apis.controller.biz;
+package com.supwisdom.institute.backend.admin.aggr.apis.controller.biz;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.MimeTypeUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.supwisdom.institute.backend.admin.aggr.apis.service.biz.BizService;
+
 @RestController
 @RequestMapping(value = "/api/bff/v1/admin/biz")
 public class AdminBizController {
+  
+  @Autowired
+  BizService bizService;
 
   @RequestMapping(method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
   public String biz() {
+    
+    bizService.query(true, -1, -1);
+    
     return "biz";
   }
 
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/.gitkeep b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/model/.gitkeep
similarity index 100%
rename from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/.gitkeep
rename to aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/model/.gitkeep
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/biz/Biz.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/model/biz/Biz.java
similarity index 87%
rename from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/biz/Biz.java
rename to aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/model/biz/Biz.java
index f1d904e..b36e117 100644
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/model/biz/Biz.java
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/model/biz/Biz.java
@@ -1,4 +1,4 @@
-package com.supwisdom.institute.backend.admin.bff.apis.model.biz;
+package com.supwisdom.institute.backend.admin.aggr.apis.model.biz;
 
 import java.util.Date;
 
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/.gitkeep b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/.gitkeep
similarity index 100%
rename from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/.gitkeep
rename to aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/.gitkeep
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/BizRemoteFallbackFactory.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/BizRemoteFallbackFactory.java
similarity index 85%
rename from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/BizRemoteFallbackFactory.java
rename to aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/BizRemoteFallbackFactory.java
index 30d312d..22447f0 100644
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/BizRemoteFallbackFactory.java
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/BizRemoteFallbackFactory.java
@@ -1,10 +1,10 @@
-package com.supwisdom.institute.backend.admin.bff.apis.remote.biz;
+package com.supwisdom.institute.backend.admin.aggr.apis.remote.biz;
 
 import org.springframework.stereotype.Component;
 
 import com.alibaba.fastjson.JSONObject;
-import com.supwisdom.institute.backend.admin.bff.apis.model.biz.Biz;
-import com.supwisdom.institute.backend.admin.bff.remote.FallbackError;
+import com.supwisdom.institute.backend.admin.aggr.apis.model.biz.Biz;
+import com.supwisdom.institute.backend.admin.aggr.apis.remote.exception.FallbackError;
 
 import feign.hystrix.FallbackFactory;
 
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/BizRemoteFeignClient.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/BizRemoteFeignClient.java
similarity index 90%
rename from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/BizRemoteFeignClient.java
rename to aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/BizRemoteFeignClient.java
index cccdd8a..9361f45 100644
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/remote/biz/BizRemoteFeignClient.java
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/BizRemoteFeignClient.java
@@ -1,4 +1,4 @@
-package com.supwisdom.institute.backend.admin.bff.apis.remote.biz;
+package com.supwisdom.institute.backend.admin.aggr.apis.remote.biz;
 
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -8,7 +8,7 @@
 import org.springframework.web.bind.annotation.RequestParam;
 
 import com.alibaba.fastjson.JSONObject;
-import com.supwisdom.institute.backend.admin.bff.apis.model.biz.Biz;
+import com.supwisdom.institute.backend.admin.aggr.apis.model.biz.Biz;
 
 @FeignClient(
     name = "biz-biz-remote-feign-client",
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/remote/FallbackError.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/exception/FallbackError.java
similarity index 82%
rename from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/remote/FallbackError.java
rename to aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/exception/FallbackError.java
index d46aa8d..51ae782 100644
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/remote/FallbackError.java
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/exception/FallbackError.java
@@ -1,4 +1,4 @@
-package com.supwisdom.institute.backend.admin.bff.remote;
+package com.supwisdom.institute.backend.admin.aggr.apis.remote.exception;
 
 import com.alibaba.fastjson.JSONObject;
 
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/.gitkeep b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/service/.gitkeep
similarity index 100%
rename from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/.gitkeep
rename to aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/service/.gitkeep
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/biz/BizService.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/service/biz/BizService.java
similarity index 66%
rename from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/biz/BizService.java
rename to aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/service/biz/BizService.java
index 7c6b8a7..49baee2 100644
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/service/biz/BizService.java
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/service/biz/BizService.java
@@ -1,11 +1,13 @@
-package com.supwisdom.institute.backend.admin.bff.apis.service.biz;
+package com.supwisdom.institute.backend.admin.aggr.apis.service.biz;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
 import com.alibaba.fastjson.JSONObject;
-import com.supwisdom.institute.backend.admin.bff.apis.remote.biz.BizRemoteFeignClient;
-import com.supwisdom.institute.backend.admin.bff.apis.vo.response.biz.data.BizQueryResponseData;
+import com.supwisdom.institute.backend.admin.aggr.apis.remote.biz.BizRemoteFeignClient;
+import com.supwisdom.institute.backend.admin.aggr.apis.vo.biz.response.data.BizQueryResponseData;
 
+@Service
 public class BizService {
   
   @Autowired
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/.gitkeep b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/vo/.gitkeep
similarity index 100%
rename from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/.gitkeep
rename to aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/vo/.gitkeep
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/response/biz/data/BizQueryResponseData.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/vo/biz/response/data/BizQueryResponseData.java
similarity index 83%
rename from bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/response/biz/data/BizQueryResponseData.java
rename to aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/vo/biz/response/data/BizQueryResponseData.java
index 3699ff7..815cc6a 100644
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/vo/response/biz/data/BizQueryResponseData.java
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/vo/biz/response/data/BizQueryResponseData.java
@@ -1,4 +1,4 @@
-package com.supwisdom.institute.backend.admin.bff.apis.vo.response.biz.data;
+package com.supwisdom.institute.backend.admin.aggr.apis.vo.biz.response.data;
 
 import java.util.List;
 import java.util.Map;
@@ -6,7 +6,7 @@
 import lombok.Getter;
 import lombok.Setter;
 
-import com.supwisdom.institute.backend.admin.bff.apis.model.biz.Biz;
+import com.supwisdom.institute.backend.admin.aggr.apis.model.biz.Biz;
 import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
 
 public class BizQueryResponseData implements IApiQueryResponseData<Biz> {
diff --git a/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/configuration/FeignClientConfiguration.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/configuration/FeignClientConfiguration.java
new file mode 100644
index 0000000..6bcf4c1
--- /dev/null
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/configuration/FeignClientConfiguration.java
@@ -0,0 +1,70 @@
+package com.supwisdom.institute.backend.admin.aggr.configuration;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.ssl.SSLContextBuilder;
+import org.apache.http.ssl.SSLContexts;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.util.ResourceUtils;
+
+import feign.Client;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Configuration
+public class FeignClientConfiguration {
+
+  @Bean
+  public Client feignClient(
+      @Value("${cas-server-sa-api.client-auth.enabled:false}") boolean enabled,
+      @Value("${cas-server-sa-api.client-auth.key-password:}") String keyPassword,
+      @Value("${cas-server-sa-api.client-auth.key-store:}") String keyStore,
+      @Value("${cas-server-sa-api.client-auth.key-store-password:}") String keyStorePassword,
+      @Value("${cas-server-sa-api.client-auth.trust-store:}") String trustStore,
+      @Value("${cas-server-sa-api.client-auth.trust-store-password:}") String trustStorePassword) {
+    
+    if (!enabled) {
+      return new Client.Default(null, null);
+    }
+    
+    if (keyStore == null || keyStore.isEmpty()) {
+      return new Client.Default(null, null);
+    } else {
+      try {
+        SSLContextBuilder sslContextBuilder = SSLContexts.custom();
+        if (trustStore == null || trustStore.isEmpty()) {
+        } else {
+          sslContextBuilder
+//            .loadTrustMaterial(TrustAllStrategy.INSTANCE)
+            .loadTrustMaterial(
+                ResourceUtils.getFile(trustStore),
+                trustStorePassword.toCharArray()
+            );
+        }
+        
+        sslContextBuilder
+          .loadKeyMaterial(
+              ResourceUtils.getFile(keyStore),
+              keyStorePassword.toCharArray(),
+              keyPassword.toCharArray());
+        
+        SSLContext sslContext = sslContextBuilder.build();
+        
+        SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
+
+        Client trustSSLSockets = new Client.Default(sslSocketFactory, new NoopHostnameVerifier());
+        log.info("feignClient load with ssl.");
+        return trustSSLSockets;
+      } catch (Exception e) {
+        e.printStackTrace();
+      }
+    }
+    
+    return new Client.Default(null, null);
+  }
+
+}
diff --git a/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/configuration/Swagger2Config.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/configuration/Swagger2Config.java
new file mode 100644
index 0000000..d6311e2
--- /dev/null
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/configuration/Swagger2Config.java
@@ -0,0 +1,63 @@
+package com.supwisdom.institute.backend.admin.aggr.configuration;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.Contact;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger.web.UiConfiguration;
+import springfox.documentation.swagger.web.UiConfigurationBuilder;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@Configuration
+@EnableSwagger2
+public class Swagger2Config {
+
+  @Value("${swagger2.apis.basePackage:com.supwisdom.institute}")
+  private String basePackage;
+
+  @Bean
+  public Docket createRestApi() {
+    return new Docket(DocumentationType.SWAGGER_2)
+        .apiInfo(apiInfo())
+        .select()
+        .apis(RequestHandlerSelectors.basePackage(basePackage))
+        .paths(PathSelectors.any())
+        .build()
+        ;
+  }
+
+  private ApiInfo apiInfo() {
+    Contact contact = new Contact("Backend Admin Aggregator API", "https://sw-backend-aggr.supwisdom.com/swagger-ui.html", ""); // name, url, email
+    return new ApiInfoBuilder()
+        .title("Backend Admin Aggregator APIs")
+        .description("管理后台 - 聚合接口")
+        .termsOfServiceUrl("http://www.supwisdom.com/")
+        .contact(contact)
+        .version("1.0")
+        .build();
+  }
+
+  @Bean
+  UiConfiguration uiConfig() {
+    
+    return UiConfigurationBuilder.builder().build();
+    
+//    return new UiConfiguration(null, // url
+//        "none", // docExpansion => none | list
+//        "alpha", // apiSorter => alpha
+//        "schema", // defaultModelRendering => schema
+//        UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS,
+//        false, // enableJsonEditor => true || false
+//        true, // showRequestHeaders => true | false
+//        60000L); // requestTimeout => in milliseconds, defaults to null
+//    // (uses jquery xh timeout)
+  }
+
+}
diff --git a/aggr/admin/src/main/resources/application-docker.yml b/aggr/admin/src/main/resources/application-docker.yml
new file mode 100644
index 0000000..a46fee8
--- /dev/null
+++ b/aggr/admin/src/main/resources/application-docker.yml
@@ -0,0 +1,68 @@
+server:
+  port: ${SERVER_PORT:8443}
+  ssl:
+    enabled: ${SSL_ENABLED:true}
+    clientAuth: NEED
+    key-store: ${SSL_KEYSTORE_FILE:file:/certs/server/server.keystore}
+    key-store-password: ${SSL_KEYSTORE_PASSWORD:}
+    trust-store: ${SSL_TRUSTSTORE_FILE:file:/certs/server/server.truststore}
+    trust-store-password: ${SSL_TRUSTSTORE_PASSWORD:}
+  tomcat: 
+    accesslog: 
+      enabled: ${TOMCAT_ACCESSLOG_ENABLED:false}
+      buffered: ${TOMCAT_ACCESSLOG_BUFFERED:true}
+      directory: ${TOMCAT_ACCESSLOG_DIR:log}
+      prefix: ${TOMCAT_ACCESSLOG_PREFIX:sa-api-accesslog}
+      suffix: ${TOMCAT_ACCESSLOG_SUFFIX:.log}
+      file-date-format: ${TOMCAT_ACCESSLOG_FILE_DATE_FORMAT:.yyyy-MM-dd}
+      rotate: ${TOMCAT_ACCESSLOG_ROTATE:true}
+
+
+##
+# logging
+#
+logging:
+  level:
+    root: INFO
+    com.supwisdom: INFO
+
+
+spring:
+  jackson:
+    time-zone: ${JACKSON_TIME_ZONE:Asia/Shanghai}
+
+
+##
+# online-doc
+#
+infras.online-doc.enabled: ${INFRAS_ONLINE_DOC_ENABLED:false}
+infras.online-doc.md-docs.staitc.path: ${INFRAS_ONLINE_DOC_MD_DOCS_STATIC_PATH:/doc/}
+infras.online-doc.api-docs.staitc.path: ${INFRAS_ONLINE_DOC_API_DOCS_STATIC_PATH:/api-docs/}
+
+
+##
+# server url for feign
+#
+sw-backend-base-api:
+  uri: ${SW_BACKEND_BASE_API_URI:https://sw-backend-admin-sa}
+  client-auth:
+    enabled: ${CASSERVER_SA_API_CLIENT_AUTH_ENABLED:true}
+    key-password: ${CASSERVER_SA_API_CLIENT_AUTH_KEY_PASSWORD:}
+    key-store: ${CASSERVER_SA_API_CLIENT_AUTH_KEYSTORE_FILE:file:/certs/common/common.keystore}
+    key-store-password: ${CASSERVER_SA_API_CLIENT_AUTH_KEYSTORE_PASSWORD:}
+    trust-store: ${CASSERVER_SA_API_CLIENT_AUTH_TRUSTSTORE_FILE:file:/certs/common/common.truststore}
+    trust-store-password: ${CASSERVER_SA_API_CLIENT_AUTH_TRUSTSTORE_PASSWORD:}
+  
+sw-backend-system-api.uri: http://localhost:8081
+sw-backend-biz-api.uri: http://localhost:8081
+
+sw-backend-api-admin:
+  server:
+    url: ${CASSERVER_SA_API_SERVER_URL:https://sw-backend}
+  client-auth:
+    enabled: ${CASSERVER_SA_API_CLIENT_AUTH_ENABLED:true}
+    key-password: ${CASSERVER_SA_API_CLIENT_AUTH_KEY_PASSWORD:}
+    key-store: ${CASSERVER_SA_API_CLIENT_AUTH_KEYSTORE_FILE:file:/certs/common/common.keystore}
+    key-store-password: ${CASSERVER_SA_API_CLIENT_AUTH_KEYSTORE_PASSWORD:}
+    trust-store: ${CASSERVER_SA_API_CLIENT_AUTH_TRUSTSTORE_FILE:file:/certs/common/common.truststore}
+    trust-store-password: ${CASSERVER_SA_API_CLIENT_AUTH_TRUSTSTORE_PASSWORD:}
diff --git a/aggr/admin/src/main/resources/application.yml b/aggr/admin/src/main/resources/application.yml
new file mode 100644
index 0000000..e0683b0
--- /dev/null
+++ b/aggr/admin/src/main/resources/application.yml
@@ -0,0 +1,39 @@
+server:
+  port: 8082
+  ssl:
+    enabled: false
+
+
+##
+# logging
+#
+logging:
+  level:
+    root: INFO
+    com.supwisdom: DEBUG
+#    org.springframework.web: INFO
+#    org.springframework.cloud.openfeign: INFO
+
+
+swagger2.apis.basePackage: com.supwisdom.institute
+
+
+spring:
+  jackson:
+    time-zone: Asia/Shanghai
+
+
+##
+# infras.online-doc
+#
+infras.online-doc.enabled: true
+infras.online-doc.md-docs.staitc.path: /Users/loie/c/work/git/institute/sw-backend/doc/
+infras.online-doc.api-docs.staitc.path: /Users/loie/c/work/git/institute/sw-backend/api-docs/
+
+
+##
+# server url for feign
+#
+sw-backend-base-api.uri: http://localhost:8081
+sw-backend-system-api.uri: http://localhost:8081
+sw-backend-biz-api.uri: http://localhost:8081
diff --git a/aggr/admin/src/main/resources/bootstrap.yml b/aggr/admin/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..b2a926b
--- /dev/null
+++ b/aggr/admin/src/main/resources/bootstrap.yml
@@ -0,0 +1,3 @@
+spring:
+  application:
+    name: sw-backend-admin-aggr
diff --git a/aggr/pom.xml b/aggr/pom.xml
new file mode 100644
index 0000000..1ec35e6
--- /dev/null
+++ b/aggr/pom.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  
+  <parent>
+    <groupId>com.supwisdom.institute</groupId>
+    <artifactId>sw-backend-parent</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+  </parent>
+  
+  <groupId>com.supwisdom.institute</groupId>
+  <artifactId>sw-backend-aggr-parent</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <name>Supwisdom Backend Framework Aggregator API</name>
+  <description>Supwisdom Backend Framework Aggregator API project</description>
+
+  <modules>
+    <module>admin</module>
+  </modules>
+
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-deploy-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/bff/admin/Dockerfile b/bff/admin/Dockerfile
index 4810f6b..372661c 100644
--- a/bff/admin/Dockerfile
+++ b/bff/admin/Dockerfile
@@ -17,5 +17,5 @@
 
 COPY --chown=java-app:java-app target/${JAR_FILE} /home/java-app/lib/app.jar
 
-COPY --chown=java-app:java-app target/doc /home/java-app/doc
-COPY --chown=java-app:java-app target/api-docs /home/java-app/api-docs
+# COPY --chown=java-app:java-app target/doc /home/java-app/doc
+# COPY --chown=java-app:java-app target/api-docs /home/java-app/api-docs
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/Application.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/Application.java
index bde129e..77beb84 100644
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/Application.java
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/Application.java
@@ -2,8 +2,6 @@
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.openfeign.EnableFeignClients;
-//import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.annotation.Bean;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
@@ -24,7 +22,6 @@
 import static org.springframework.web.cors.CorsConfiguration.ALL;
 
 @SpringBootApplication
-@EnableFeignClients
 
 @EnableSimpleUserTransmit
 @EnableCustomExceptionHandler
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/system/AdminSystemController.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/system/AdminSystemController.java
deleted file mode 100644
index 84d0f3a..0000000
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/apis/controller/system/AdminSystemController.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.supwisdom.institute.backend.admin.bff.apis.controller.system;
-
-import org.springframework.util.MimeTypeUtils;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping(value = "/api/bff/v1/admin/system")
-public class AdminSystemController {
-  
-  @RequestMapping(method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-  public String hello() {
-    return "hello";
-  }
-
-}
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/GatewayFilterConfig.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/GatewayFilterConfig.java
index f475158..5084419 100644
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/GatewayFilterConfig.java
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/configuration/GatewayFilterConfig.java
@@ -5,7 +5,8 @@
 
 import com.supwisdom.institute.backend.admin.bff.gateway.filter.factory.SimpleUserTransmitGatewayFilterFactory;
 
-@Configuration
+@Deprecated
+//@Configuration
 public class GatewayFilterConfig {
 
   @Bean
diff --git a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/gateway/filter/factory/SimpleUserTransmitGatewayFilterFactory.java b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/gateway/filter/factory/SimpleUserTransmitGatewayFilterFactory.java
index 6d0d981..68b6ad3 100644
--- a/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/gateway/filter/factory/SimpleUserTransmitGatewayFilterFactory.java
+++ b/bff/admin/src/main/java/com/supwisdom/institute/backend/admin/bff/gateway/filter/factory/SimpleUserTransmitGatewayFilterFactory.java
@@ -18,6 +18,7 @@
 import com.supwisdom.institute.backend.common.core.transmit.user.User;
 import com.supwisdom.institute.backend.common.core.transmit.user.UserContext;
 
+@Deprecated
 @Slf4j
 public class SimpleUserTransmitGatewayFilterFactory extends AbstractGatewayFilterFactory<SimpleUserTransmitGatewayFilterFactory.Config> {
   
diff --git a/bff/admin/src/main/resources/application-docker.yml b/bff/admin/src/main/resources/application-docker.yml
index cc5555e..394e329 100644
--- a/bff/admin/src/main/resources/application-docker.yml
+++ b/bff/admin/src/main/resources/application-docker.yml
@@ -64,18 +64,3 @@
 
 #CAS服务地址
 cas.server.host.url: ${CAS_SERVER_HOST_URL:https://cas-server/cas}
-
-
-##
-# server url for feign
-#
-sw-backend-api-admin:
-  server:
-    url: ${CASSERVER_SA_API_SERVER_URL:https://sw-backend/sa-api}
-  client-auth:
-    enabled: ${CASSERVER_SA_API_CLIENT_AUTH_ENABLED:true}
-    key-password: ${CASSERVER_SA_API_CLIENT_AUTH_KEY_PASSWORD:}
-    key-store: ${CASSERVER_SA_API_CLIENT_AUTH_KEYSTORE_FILE:file:/certs/common/common.keystore}
-    key-store-password: ${CASSERVER_SA_API_CLIENT_AUTH_KEYSTORE_PASSWORD:}
-    trust-store: ${CASSERVER_SA_API_CLIENT_AUTH_TRUSTSTORE_FILE:file:/certs/common/common.truststore}
-    trust-store-password: ${CASSERVER_SA_API_CLIENT_AUTH_TRUSTSTORE_PASSWORD:}
diff --git a/bff/admin/src/main/resources/application.yml b/bff/admin/src/main/resources/application.yml
index a77dc9a..77789ac 100644
--- a/bff/admin/src/main/resources/application.yml
+++ b/bff/admin/src/main/resources/application.yml
@@ -25,6 +25,12 @@
       metrics:
         enabled: true
       routes:
+      - id: aggr-api
+        uri: http://localhost:8082
+        predicates:
+        - Path=/api/aggr/**
+        filters:
+        - RewritePath=/api/aggr/(?<suffix>.*), /$\{suffix}
       - id: base-api
         uri: http://localhost:8081
         predicates:
@@ -106,10 +112,3 @@
 
 #CAS服务地址
 cas.server.host.url: https://cas.supwisdom.com/cas
-
-
-##
-# server url for feign
-#
-sw-backend-system-api.uri: http://localhost:8081
-sw-backend-biz-api.uri: http://localhost:8081
diff --git a/bff/pom.xml b/bff/pom.xml
index 8685014..37e624e 100644
--- a/bff/pom.xml
+++ b/bff/pom.xml
@@ -10,12 +10,12 @@
   </parent>
   
   <groupId>com.supwisdom.institute</groupId>
-  <artifactId>sw-backend-bff-aggregator</artifactId>
+  <artifactId>sw-backend-bff-parent</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>pom</packaging>
 
-  <name>Supwisdom Backend Framework Backend for Frontend Aggregator</name>
-  <description>Supwisdom Backend Framework Backend for Frontend Aggregator project</description>
+  <name>Supwisdom Backend Framework Backend for Frontend</name>
+  <description>Supwisdom Backend Framework Backend for Frontend project</description>
 
   <modules>
     <module>admin</module>
diff --git a/pom.xml b/pom.xml
index d101757..babdfb8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,6 +24,7 @@
     <module>biz</module>
 
     <module>sa</module>
+    <module>aggr</module>
     <module>bff</module>
     
   </modules>
diff --git a/sa/admin/Dockerfile b/sa/admin/Dockerfile
index 4dc87c6..b91c9f4 100644
--- a/sa/admin/Dockerfile
+++ b/sa/admin/Dockerfile
@@ -17,5 +17,5 @@
 
 COPY --chown=java-app:java-app target/${JAR_FILE} /home/java-app/lib/app.jar
 
-COPY --chown=java-app:java-app target/doc /home/java-app/doc
-COPY --chown=java-app:java-app target/api-docs /home/java-app/api-docs
+# COPY --chown=java-app:java-app target/doc /home/java-app/doc
+# COPY --chown=java-app:java-app target/api-docs /home/java-app/api-docs
diff --git a/sa/admin/src/main/resources/application.yml b/sa/admin/src/main/resources/application.yml
index 571cbd7..0ffd54f 100644
--- a/sa/admin/src/main/resources/application.yml
+++ b/sa/admin/src/main/resources/application.yml
@@ -15,6 +15,9 @@
 #    org.springframework.cloud.openfeign: INFO
 
 
+swagger2.apis.basePackage: com.supwisdom.institute
+
+
 spring:
   jackson:
     time-zone: Asia/Shanghai
@@ -40,9 +43,6 @@
 ##
 # infras.online-doc
 #
-infras.online-doc.enabled: false
+infras.online-doc.enabled: true
 infras.online-doc.md-docs.staitc.path: /Users/loie/c/work/git/institute/sw-backend/doc/
 infras.online-doc.api-docs.staitc.path: /Users/loie/c/work/git/institute/sw-backend/api-docs/
-
-
-swagger2.apis.basePackage: com.supwisdom.institute
diff --git a/sa/pom.xml b/sa/pom.xml
index e4c2665..6aafbda 100644
--- a/sa/pom.xml
+++ b/sa/pom.xml
@@ -10,12 +10,12 @@
   </parent>
   
   <groupId>com.supwisdom.institute</groupId>
-  <artifactId>sw-backend-sa-aggregator</artifactId>
+  <artifactId>sw-backend-sa-parent</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>pom</packaging>
 
-  <name>Supwisdom Backend Framework Super Admin Aggregator</name>
-  <description>Supwisdom Backend Framework Super Admin Aggregator project</description>
+  <name>Supwisdom Backend Framework Super Admin</name>
+  <description>Supwisdom Backend Framework Super Admin project</description>
 
   <modules>
     <module>admin</module>