chore: 调整项目结构
diff --git a/admin-sa/base/api/.gitignore b/admin-sa/base/api/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/admin-sa/base/api/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/admin-sa/base/api/pom.xml b/admin-sa/base/api/pom.xml
new file mode 100644
index 0000000..0947d3c
--- /dev/null
+++ b/admin-sa/base/api/pom.xml
@@ -0,0 +1,110 @@
+<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-admin-sa-parent</artifactId>
+ <version>0.0.2-SNAPSHOT</version>
+ <relativePath>../../</relativePath>
+ </parent>
+
+ <groupId>com.supwisdom.institute</groupId>
+ <artifactId>sw-backend-admin-base-api</artifactId>
+ <version>0.0.2-SNAPSHOT</version>
+ <packaging>jar</packaging>
+
+ <name>Supwisdom Backend Framework Admin Base API</name>
+ <description>Supwisdom Backend Framework Admin Base API project</description>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</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-web</artifactId>
+ </dependency>
+
+
+ <dependency>
+ <groupId>com.supwisdom.institute</groupId>
+ <artifactId>sw-backend-common-core</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.supwisdom.institute</groupId>
+ <artifactId>sw-backend-common-utils</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.supwisdom.institute</groupId>
+ <artifactId>sw-backend-common-framework</artifactId>
+ </dependency>
+
+
+ <dependency>
+ <groupId>com.supwisdom.institute</groupId>
+ <artifactId>sw-backend-admin-base-domain</artifactId>
+ </dependency>
+
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-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.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-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-jar-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.jacoco</groupId>
+ <artifactId>jacoco-maven-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminAccountController.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminAccountController.java
new file mode 100644
index 0000000..2b2efb3
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminAccountController.java
@@ -0,0 +1,583 @@
+package com.supwisdom.institute.backend.base.api.v1.controller.admin;
+
+import java.util.HashMap;
+import java.util.List;
+
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.AccountCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.AccountDeleteBatchRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.AccountQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.AccountRelateGroupsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.AccountRelateRolesRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.AccountRelatedGroupsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.AccountRelatedRolesRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.AccountUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountDeleteBatchResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountRelateGroupsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountRelateRolesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountRelatedGroupsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountRelatedRolesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountRemoveResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.AccountUpdateResponseData;
+import com.supwisdom.institute.backend.base.domain.entity.Account;
+import com.supwisdom.institute.backend.base.domain.entity.AccountGroup;
+import com.supwisdom.institute.backend.base.domain.entity.AccountRole;
+import com.supwisdom.institute.backend.base.domain.service.AccountService;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
+
+@Api(value = "BaseAdminAccount", tags = { "BaseAdminAccount" }, description = "帐号的操作接口")
+@Slf4j
+@RestController
+@RequestMapping("/v1/admin/accounts")
+public class AdminAccountController {
+
+ @Autowired
+ private AccountService accountService;
+
+ /**
+ *
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts'
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts?pageIndex=2&pageSize=50'
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts?pageIndex=0&pageSize=20&mapBean[username]=username&mapBean[name]=name&mapBean[status]=1'
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts?pageIndex=0&pageSize=20&mapBean[username]=username&mapBean[name]=name&mapBean[status]=0'
+ *
+ * response success:
+ *
+ * <pre>
+ * {
+ * "pageIndex":0,
+ * "pageSize":20,
+ * "mapBean":null,
+ * "pageCount":1,
+ * "recordCount":1,
+ * "items":[
+ * {
+ * "id":"ff80808164feb8990164feba0de50000",
+ * "companyId":"1",
+ * "deleted":false,
+ * "addAccount":"account","addTime":"2018-08-03T07:39:23.000+0000",
+ * "editAccount":null,"editTime":null,
+ * "deleteAccount":null,"deleteTime":null,
+ * "accountname":"test001",
+ * "password":"test001",
+ * "enabled":true,
+ * "accountNonExpired":true,
+ * "accountNonLocked":true,
+ * "credentialsNonExpired":true,
+ * "name":"测试001",
+ * "status":"1",
+ * "mobile":null,
+ * "email":null
+ * }
+ * ]
+ * }
+ * </pre>
+ *
+ * response error 401:
+ *
+ * <pre>
+ * {
+ * "timestamp":"2018-08-03T08:48:25.777+0000",
+ * "status":401,
+ * "error":"Http Status 401",
+ * "message":"Unauthorized",
+ * "path":"/api/v1/admin/accounts"
+ * }
+ * </pre>
+ *
+ * @param pagerRequestModel
+ * @return
+ */
+ @GetMapping(produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<AccountQueryResponseData> query(AccountQueryRequest queryRequest) {
+
+ Page<Account> page = accountService.selectPageList(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy());
+
+ AccountQueryResponseData data = AccountQueryResponseData.of(queryRequest).build(page);
+
+ return new DefaultApiResponse<AccountQueryResponseData>(data);
+ }
+
+ /**
+ *
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts/1'
+ *
+ * response success:
+ *
+ * <pre>
+ * {
+ * "id":"ff80808164feb8990164feba0de50000",
+ * "companyId":"1",
+ * "deleted":false,
+ * "addAccount":"account","addTime":"2018-08-03T07:39:23.000+0000",
+ * "editAccount":null,"editTime":null,
+ * "deleteAccount":null,"deleteTime":null,
+ * "username":"test001",
+ * "password":"test001",
+ * "enabled":true,
+ * "accountNonExpired":true,
+ * "accountNonLocked":true,
+ * "credentialsNonExpired":true,
+ * "name":"测试001",
+ * "status":"1",
+ * "mobile":null,
+ * "email":null
+ * }
+ * </pre>
+ *
+ * response error 401:
+ *
+ * <pre>
+ * {
+ * "timestamp":"2018-08-03T08:43:26.080+0000",
+ * "status":401,
+ * "error":"Http Status 401",
+ * "message":"Unauthorized",
+ * "path":"/api/v1/admin/accounts/ff80808164fecf640164fed269480000"
+ * }
+ * </pre>
+ *
+ * response error 500:
+ *
+ * <pre>
+ * {
+ * "timestamp":"2018-08-03T07:44:07.963+0000",
+ * "status":500,
+ * "error":"Internal Server Error",
+ * "exception":"java.lang.RuntimeException",
+ * "message":"exception.get.domain.not.exist",
+ * "path":"/api/v1/admin/accounts/1"
+ * }
+ * </pre>
+ *
+ * @param id
+ * @return
+ */
+ @GetMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<AccountLoadResponseData> load(@PathVariable("id") String id) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Account account = accountService.selectById(id);
+
+ if (account == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ AccountLoadResponseData data = AccountLoadResponseData.of(account);
+
+ return new DefaultApiResponse<AccountLoadResponseData>(data);
+ }
+
+ /**
+ *
+ * curl -i -s -X POST -H 'Content-Type:application/json' -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts' \
+ * -d '{"accountname":"test001","password":"test001","enabled":true,"accountNonExpired":true,"accountNonLocked":true,"credentialsNonExpired":true,"name":"测试001","status":"1"}'
+ *
+ * response success:
+ *
+ * <pre>
+ * {
+ * "success":"info.create.success"
+ * }
+ * </pre>
+ *
+ * response error 401:
+ *
+ * <pre>
+ * {
+ * "timestamp":"2018-08-03T08:48:25.777+0000",
+ * "status":401,
+ * "error":"Http Status 401",
+ * "message":"Unauthorized",
+ * "path":"/api/v1/admin/accounts"
+ * }
+ * </pre>
+ *
+ * response error: // FIXME: save error
+ *
+ * <pre>
+ * {
+ * "timestamp":"2018-08-03T07:45:43.436+0000",
+ * "status":500,
+ * "error":"Internal Server Error",
+ * "exception":"org.springframework.dao.DataIntegrityViolationException",
+ * "message":"could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement",
+ * "path":"/api/v1/admin/accounts"
+ * }
+ * </pre>
+ *
+ * @param account
+ * @return
+ */
+ @PostMapping(consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<AccountCreateResponseData> create(
+ @RequestBody AccountCreateRequest createRequest) {
+
+ // FIXME: 验证数据有效性
+
+ Account account = createRequest.getEntity();
+
+ if (account.getPassword() !=null && account.getPassword().length() > 0 && !account.getPassword().startsWith("{")) {
+ //account.setPassword(passwordEncoder.encode(account.getPassword()));
+ }
+
+ Account ret = accountService.insert(account);
+
+ AccountCreateResponseData data = AccountCreateResponseData.build(ret);
+
+ return new DefaultApiResponse<AccountCreateResponseData>(data);
+ }
+
+ /**
+ *
+ * curl -i -s -X PUT -H 'Content-Type:application/json' -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts' \
+ * -d '{"id":"1","status":"0"}'
+ *
+ * response success:
+ *
+ * <pre>
+ * {
+ * "success":"info.update.success"
+ * }
+ * </pre>
+ *
+ * response error 401:
+ *
+ * <pre>
+ * {
+ * "timestamp":"2018-08-03T08:48:25.777+0000",
+ * "status":401,
+ * "error":"Http Status 401",
+ * "message":"Unauthorized",
+ * "path":"/api/v1/admin/accounts"
+ * }
+ * </pre>
+ *
+ * curl -i -s -X PUT -H 'Content-Type:application/json' -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts' \
+ * -d '{"status":"0"}'
+ *
+ * response error:
+ *
+ * <pre>
+ * {
+ * "timestamp":"2018-08-03T07:50:52.327+0000",
+ * "status":500,
+ * "error":"Internal Server Error",
+ * "exception":"java.lang.RuntimeException",
+ * "message":"exception.update.id.must.not.empty",
+ * "path":"/api/v1/admin/accounts"
+ * }
+ * </pre>
+ *
+ * curl -i -s -X PUT -H 'Content-Type:application/json' -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts' \
+ * -d '{"id":"1","status":"0"}'
+ *
+ * response error:
+ *
+ * <pre>
+ * {
+ * "timestamp":"2018-08-03T07:48:24.774+0000",
+ * "status":500,
+ * "error":"Internal Server Error",
+ * "exception":"java.lang.RuntimeException",
+ * "message":"exception.update.domain.not.exist",
+ * "path":"/api/v1/admin/accounts"
+ * }
+ * </pre>
+ *
+ * @param account
+ * @return
+ */
+ @PutMapping(path = "/{id}", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<AccountUpdateResponseData> update(
+ @PathVariable("id") String id,
+ @RequestBody AccountUpdateRequest updateRequest) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.update.id.must.not.empty");
+ }
+
+ Account tmp = accountService.selectById(id);
+ if (tmp == null) {
+ throw new RuntimeException("exception.update.domain.not.exist");
+ }
+
+ Account account = updateRequest.getEntity();
+ account.setId(id);
+
+ if (account.getPassword() !=null && account.getPassword().length() > 0 && !account.getPassword().startsWith("{")) {
+ //account.setPassword(passwordEncoder.encode(account.getPassword()));
+ }
+
+ account = EntityUtils.merge(tmp, account);
+
+ Account ret = accountService.update(account);
+
+ AccountUpdateResponseData data = AccountUpdateResponseData.build(ret);
+
+ return new DefaultApiResponse<AccountUpdateResponseData>(data);
+ }
+
+
+ /**
+ *
+ * curl -i -s -X DELETE -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts/1'
+ *
+ * response success:
+ *
+ * <pre>
+ * {
+ * "success":"info.delete.success"
+ * }
+ * </pre>
+ *
+ * response error 401:
+ *
+ * <pre>
+ * {
+ * "timestamp":"2018-08-03T08:48:25.777+0000",
+ * "status":401,
+ * "error":"Http Status 401",
+ * "message":"Unauthorized",
+ * "path":"/api/v1/admin/accounts/1"
+ * }
+ * </pre>
+ *
+ * response error 500:
+ *
+ * <pre>
+ * {
+ * "timestamp":"2018-08-03T08:03:16.364+0000",
+ * "status":500,
+ * "error":"Internal Server Error",
+ * "exception":"java.lang.RuntimeException",
+ * "message":"exception.delete.domain.not.exist",
+ * "path":"/api/v1/admin/accounts/1"
+ * }
+ * </pre>
+ *
+ * @param id
+ * @return
+ */
+ @DeleteMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<AccountRemoveResponseData> delete(
+ @PathVariable("id") String id) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.delete.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Account tmp = accountService.selectById(id);
+ if (tmp == null) {
+ throw new RuntimeException("exception.delete.domain.not.exist"); // FIXME: RestException
+ }
+
+ accountService.deleteById(id);
+
+ AccountRemoveResponseData data = AccountRemoveResponseData.build(tmp);
+ return new DefaultApiResponse<AccountRemoveResponseData>(data);
+ }
+
+ @DeleteMapping(path = "/batch", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<AccountDeleteBatchResponseData> deleteBatch(
+ @RequestBody AccountDeleteBatchRequest deleteBatchRequest) {
+
+ List<String> ids = deleteBatchRequest.getIds();
+
+ accountService.deleteBatch(ids);
+
+ AccountDeleteBatchResponseData data = AccountDeleteBatchResponseData.build(ids);
+ return new DefaultApiResponse<AccountDeleteBatchResponseData>(data);
+ }
+
+ /**
+ *
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts/1/groups'
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts/1/groups?pageIndex=2&pageSize=50'
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts/1/groups?pageIndex=0&pageSize=20&mapBean[groupCode]=groupCode&mapBean[groupName]=groupName'
+ *
+ *
+ *
+ * @param id
+ * @param pagerRequestModel
+ * @return
+ */
+ @RequestMapping(method = RequestMethod.GET, path = "/{id}/groups", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public DefaultApiResponse<AccountRelatedGroupsResponseData> accountGroups(
+ @PathVariable("id") String id,
+ AccountRelatedGroupsRequest request) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Account account = accountService.selectById(id);
+
+ if (account == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ if (request.getMapBean() == null) {
+ request.setMapBean(new HashMap<String, Object>());
+ }
+ request.getMapBean().put("accountId", account.getId());
+
+ Page<AccountGroup> page = accountService.selectAccountGroups(request.getPageIndex(),
+ request.getPageSize(), request.getMapBean());
+
+ AccountRelatedGroupsResponseData data = AccountRelatedGroupsResponseData.of(request).build(page);
+
+ return new DefaultApiResponse<AccountRelatedGroupsResponseData>(data);
+ }
+
+ /**
+ *
+ * curl -i -s -X POST -H 'Content-Type:application/json' -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts/1/groups' \
+ * -d '{"groupAccounts":[{"groupId":"1"},{"groupId":"2"}]}'
+ *
+ *
+ * @param id
+ * @param groupAccounts
+ * @return
+ */
+ @RequestMapping(method = RequestMethod.POST, path = "/{id}/groups", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public DefaultApiResponse<AccountRelateGroupsResponseData> relateGroups(
+ @PathVariable("id") String id,
+ @RequestBody AccountRelateGroupsRequest accountGroups) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Account tmp = accountService.selectById(id);
+
+ if (tmp == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ accountService.relateAccountGroups(tmp, accountGroups.getAccountGroups());
+
+ AccountRelateGroupsResponseData data = AccountRelateGroupsResponseData.of("info.relate.success");
+
+ return new DefaultApiResponse<AccountRelateGroupsResponseData>(data);
+ }
+
+ /**
+ *
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts/1/roles'
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts/1/roles?pageIndex=2&pageSize=50'
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts/1/roles?pageIndex=0&pageSize=20&mapBean[roleCode]=roleCode&mapBean[roleName]=roleName'
+ *
+ *
+ *
+ * @param id
+ * @param pagerRequestModel
+ * @return
+ */
+ @RequestMapping(method = RequestMethod.GET, path = "/{id}/roles", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public DefaultApiResponse<AccountRelatedRolesResponseData> accountRoles(
+ @PathVariable("id") String id,
+ AccountRelatedRolesRequest request) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Account account = accountService.selectById(id);
+
+ if (account == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ if (request.getMapBean() == null) {
+ request.setMapBean(new HashMap<String, Object>());
+ }
+ request.getMapBean().put("accountId", account.getId());
+
+ Page<AccountRole> page = accountService.selectAccountRoles(request.getPageIndex(),
+ request.getPageSize(), request.getMapBean());
+
+ AccountRelatedRolesResponseData data = AccountRelatedRolesResponseData.of(request).build(page);
+
+ return new DefaultApiResponse<AccountRelatedRolesResponseData>(data);
+ }
+
+ /**
+ *
+ * curl -i -s -X POST -H 'Content-Type:application/json' -H 'Accept:application/json' 'http://localhost:8081/api/v1/admin/accounts/1/roles' \
+ * -d '{"accountRoles":[{"roleId":"1"},{"roleId":"2"}]}'
+ *
+ *
+ * @param id
+ * @param accountRoles
+ * @return
+ */
+ @RequestMapping(method = RequestMethod.POST, path = "/{id}/roles", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public DefaultApiResponse<AccountRelateRolesResponseData> relateRoles(
+ @PathVariable("id") String id,
+ @RequestBody AccountRelateRolesRequest accountRoles) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Account account = accountService.selectById(id);
+
+ if (account == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ accountService.relateAccountRoles(account, accountRoles.getAccountRoles());
+
+ AccountRelateRolesResponseData data = AccountRelateRolesResponseData.of("info.relate.success");
+
+ return new DefaultApiResponse<AccountRelateRolesResponseData>(data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminApplicationController.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminApplicationController.java
new file mode 100644
index 0000000..02fb24b
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminApplicationController.java
@@ -0,0 +1,165 @@
+package com.supwisdom.institute.backend.base.api.v1.controller.admin;
+
+import java.util.List;
+
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ApplicationCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ApplicationDeleteBatchRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ApplicationQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ApplicationUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ApplicationCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ApplicationDeleteBatchResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ApplicationLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ApplicationQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ApplicationRemoveResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ApplicationUpdateResponseData;
+import com.supwisdom.institute.backend.base.domain.entity.Application;
+import com.supwisdom.institute.backend.base.domain.service.ApplicationService;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
+
+@Api(value = "BaseAdminApplication", tags = { "BaseAdminApplication" }, description = "应用的操作接口")
+@Slf4j
+@RestController
+@RequestMapping("/v1/admin/applications")
+public class AdminApplicationController {
+
+ @Autowired
+ private ApplicationService applicationService;
+
+
+ @GetMapping(produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<ApplicationQueryResponseData> query(ApplicationQueryRequest queryRequest) {
+
+ Page<Application> page = applicationService.selectPageList(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy());
+
+ ApplicationQueryResponseData data = ApplicationQueryResponseData.of(queryRequest).build(page);
+
+ return new DefaultApiResponse<ApplicationQueryResponseData>(data);
+ }
+
+ @GetMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<ApplicationLoadResponseData> load(@PathVariable("id") String id) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Application application = applicationService.selectById(id);
+
+ if (application == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ ApplicationLoadResponseData data = ApplicationLoadResponseData.of(application);
+
+ return new DefaultApiResponse<ApplicationLoadResponseData>(data);
+ }
+
+ @PostMapping(consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<ApplicationCreateResponseData> create(
+ @RequestBody ApplicationCreateRequest createRequest) {
+
+ // FIXME: 验证数据有效性
+
+ Application application = createRequest.getEntity();
+
+ Application ret = applicationService.insert(application);
+
+ ApplicationCreateResponseData data = ApplicationCreateResponseData.build(ret);
+
+ return new DefaultApiResponse<ApplicationCreateResponseData>(data);
+ }
+
+ @PutMapping(path = "/{id}", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<ApplicationUpdateResponseData> update(
+ @PathVariable("id") String id,
+ @RequestBody ApplicationUpdateRequest updateRequest) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.update.id.must.not.empty");
+ }
+
+ Application tmp = applicationService.selectById(id);
+ if (tmp == null) {
+ throw new RuntimeException("exception.update.domain.not.exist");
+ }
+
+ Application application = updateRequest.getEntity();
+ application.setId(id);
+
+ application = EntityUtils.merge(tmp, application);
+
+ Application ret = applicationService.update(application);
+
+ ApplicationUpdateResponseData data = ApplicationUpdateResponseData.build(ret);
+
+ return new DefaultApiResponse<ApplicationUpdateResponseData>(data);
+ }
+
+ @DeleteMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<ApplicationRemoveResponseData> delete(
+ @PathVariable("id") String id) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.delete.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Application tmp = applicationService.selectById(id);
+ if (tmp == null) {
+ throw new RuntimeException("exception.delete.domain.not.exist"); // FIXME: RestException
+ }
+
+ applicationService.deleteById(id);
+
+ ApplicationRemoveResponseData data = ApplicationRemoveResponseData.build(tmp);
+ return new DefaultApiResponse<ApplicationRemoveResponseData>(data);
+ }
+
+ @DeleteMapping(path = "/batch", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<ApplicationDeleteBatchResponseData> deleteBatch(
+ @RequestBody ApplicationDeleteBatchRequest deleteBatchRequest) {
+
+ List<String> ids = deleteBatchRequest.getIds();
+
+ applicationService.deleteBatch(ids);
+
+ ApplicationDeleteBatchResponseData data = ApplicationDeleteBatchResponseData.build(ids);
+ return new DefaultApiResponse<ApplicationDeleteBatchResponseData>(data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminConfigController.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminConfigController.java
new file mode 100644
index 0000000..4b38209
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminConfigController.java
@@ -0,0 +1,198 @@
+package com.supwisdom.institute.backend.base.api.v1.controller.admin;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ConfigCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ConfigQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ConfigUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ConfigCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ConfigLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ConfigQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ConfigUpdateResponseData;
+import com.supwisdom.institute.backend.base.domain.entity.Config;
+import com.supwisdom.institute.backend.base.domain.exception.ConfigException;
+import com.supwisdom.institute.backend.base.domain.service.ConfigService;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
+
+@Api(value = "BaseAdminConfig", tags = { "BaseAdminConfig" }, description = "配置项的操作接口")
+@Slf4j
+@RestController
+@RequestMapping("/v1/admin/configs")
+public class AdminConfigController {
+
+ @Autowired
+ private ConfigService configService;
+
+
+ /**
+ * @param configQueryRequest
+ * @return
+ */
+ @ApiOperation(value = "查询配置列表", notes = "查询配置列表", nickname = "systemAdminConfigQuery")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "loadAll", value = "是否加载全部", required = true, dataType = "boolean", paramType = "query", defaultValue = "false"),
+ @ApiImplicitParam(name = "pageIndex", value = "分页 - 页码", required = true, dataType = "int", paramType = "query", defaultValue = "0", example = "0"),
+ @ApiImplicitParam(name = "pageSize", value = "分页 - 每页记录数", required = true, dataType = "int", paramType = "query", defaultValue = "20", example = "20"),
+ @ApiImplicitParam(name = "mapBean[deleted]", value = "查询条件 - 删除状态 (精确)", required = false, dataType = "boolean", paramType = "query"),
+ @ApiImplicitParam(name = "mapBean[categoryCode]", value = "查询条件 - 分类代码 (精确)", required = false, dataType = "string", paramType = "query"),
+ @ApiImplicitParam(name = "mapBean[categoryName]", value = "查询条件 - 分类名称 (模糊)", required = false, dataType = "string", paramType = "query"),
+ @ApiImplicitParam(name = "mapBean[name]", value = "查询条件 - 名称 (模糊)", required = false, dataType = "string", paramType = "query"),
+ @ApiImplicitParam(name = "mapBean[description]", value = "查询条件 - 描述 (模糊)", required = false, dataType = "string", paramType = "query"),
+ @ApiImplicitParam(name = "mapBean[configKey]", value = "查询条件 - 配置Key (精确)", required = false, dataType = "string", paramType = "query"),
+ })
+ @RequestMapping(method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<ConfigQueryResponseData> query(ConfigQueryRequest configQueryRequest) {
+
+ Page<Config> page = configService.selectPageList(
+ configQueryRequest.isLoadAll(),
+ configQueryRequest.getPageIndex(),
+ configQueryRequest.getPageSize(),
+ configQueryRequest.getMapBean(),
+ configQueryRequest.getOrderBy());
+
+ ConfigQueryResponseData resp = ConfigQueryResponseData.of(configQueryRequest).build(page);
+
+ return new DefaultApiResponse<ConfigQueryResponseData>(resp);
+ }
+
+ /**
+ * @param id
+ * @return
+ */
+ @ApiOperation(value = "根据ID获取配置项", notes = "根据ID获取配置项", nickname="systemAdminConfigLoad")
+ @RequestMapping(method = RequestMethod.GET, path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<ConfigLoadResponseData> load(
+ @PathVariable("id") String id) {
+
+ if (id == null || id.length() == 0) {
+ throw new ConfigException().newInstance("exception.get.id.must.not.empty");
+ }
+
+ Config config = configService.selectById(id);
+
+ if (config == null) {
+ throw new ConfigException().newInstance("exception.get.domain.not.exist");
+ }
+
+ ConfigLoadResponseData resp = ConfigLoadResponseData.build(config);
+
+ return new DefaultApiResponse<ConfigLoadResponseData>(resp);
+ }
+
+ /**
+ * @param configCreateRequest
+ * @return
+ */
+ @ApiOperation(value = "创建配置项", notes = "创建配置项", nickname = "systemAdminConfigCreate")
+ @RequestMapping(method = RequestMethod.POST, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.CREATED)
+ @ResponseBody
+ public DefaultApiResponse<ConfigCreateResponseData> create(
+ @RequestBody ConfigCreateRequest configCreateRequest) {
+
+ // FIXME: 验证数据有效性
+
+ Config entity = configCreateRequest.getEntity();
+
+ Config ret = configService.insert(entity);
+
+ ConfigCreateResponseData resp = ConfigCreateResponseData.build(ret);
+
+ return new DefaultApiResponse<ConfigCreateResponseData>(resp);
+ }
+
+ @ApiOperation(value = "更新配置项", notes = "更新配置项", nickname = "systemAdminConfigUpdate")
+ @RequestMapping(method = RequestMethod.PUT, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<ConfigUpdateResponseData> update(
+ @PathVariable("id") String id,
+ @RequestBody ConfigUpdateRequest configUpdateRequest) {
+
+ if (id == null || id.length() == 0) {
+ throw new ConfigException().newInstance("exception.update.id.must.not.empty");
+ }
+
+ Config tmp = configService.selectById(id);
+ if (tmp == null) {
+ throw new ConfigException().newInstance("exception.update.domain.not.exist");
+ }
+
+ if (!tmp.getEditable().booleanValue()) {
+ throw new ConfigException().newInstance("exception.editable.can.not.update");
+ }
+
+ Config entity = configUpdateRequest.getEntity();
+ entity.setId(id);
+
+ entity = EntityUtils.merge(tmp, entity);
+
+// if (tmp.getEditable().booleanValue() != entity.getEditable().booleanValue()) {
+// throw new ConfigException().newInstance("exception.editable.can.not.update");
+// }
+
+ entity.setEditable(true); // 防止 可修改记录的 editable 被置为false
+
+ Config ret = configService.update(entity);
+
+ ConfigUpdateResponseData resp = ConfigUpdateResponseData.build(ret);
+
+ return new DefaultApiResponse<ConfigUpdateResponseData>(resp);
+ }
+
+
+ /**
+ * @param categoryCode
+ * @param configKey
+ * @return
+ */
+ @ApiOperation(value = "根据 categoryCode、configKey 获取配置项", notes = "根据 categoryCode、configKey 获取配置项", nickname = "systemAdminConfigLoadByCategoryKey")
+ @RequestMapping(method = RequestMethod.GET, path = "/loadByCategoryKey", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<ConfigLoadResponseData> loadByCategoryKey(
+ @RequestParam("categoryCode") String categoryCode,
+ @RequestParam("configKey") String configKey
+ ) {
+
+ if (categoryCode == null || categoryCode.length() == 0) {
+ throw new ConfigException().newInstance("exception.load.params.must.not.empty");
+ }
+ if (configKey == null || configKey.length() == 0) {
+ throw new ConfigException().newInstance("exception.load.params.must.not.empty");
+ }
+
+ Config config = configService.selectByCategoryKey(categoryCode, configKey);
+
+ if (config == null) {
+ throw new ConfigException().newInstance("exception.load.domain.not.exist");
+ }
+
+ ConfigLoadResponseData resp = ConfigLoadResponseData.build(config);
+
+ return new DefaultApiResponse<ConfigLoadResponseData>(resp);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminGroupController.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminGroupController.java
new file mode 100644
index 0000000..c9a28d7
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminGroupController.java
@@ -0,0 +1,270 @@
+package com.supwisdom.institute.backend.base.api.v1.controller.admin;
+
+import java.util.HashMap;
+
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.GroupCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.GroupQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.GroupRelateAccountsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.GroupRelateRolesRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.GroupRelatedAccountsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.GroupRelatedRolesRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.GroupUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupRelateAccountsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupRelateRolesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupRelatedAccountsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupRelatedRolesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupRemoveResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.GroupUpdateResponseData;
+import com.supwisdom.institute.backend.base.domain.entity.AccountGroup;
+import com.supwisdom.institute.backend.base.domain.entity.Group;
+import com.supwisdom.institute.backend.base.domain.entity.GroupRole;
+import com.supwisdom.institute.backend.base.domain.service.GroupService;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
+
+@Api(value = "BaseAdminGroup", tags = { "BaseAdminGroup" }, description = "用户组的操作接口")
+@Slf4j
+@RestController
+@RequestMapping("/v1/admin/groups")
+public class AdminGroupController {
+
+ @Autowired
+ private GroupService groupService;
+
+ @GetMapping(produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<GroupQueryResponseData> query(GroupQueryRequest queryRequest) {
+
+ Page<Group> page = groupService.selectPageList(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy());
+
+ GroupQueryResponseData data = GroupQueryResponseData.of(queryRequest).build(page);
+
+ return new DefaultApiResponse<GroupQueryResponseData>(data);
+ }
+
+ @GetMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<GroupLoadResponseData> load(@PathVariable("id") String id) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Group group = groupService.selectById(id);
+
+ if (group == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ GroupLoadResponseData data = GroupLoadResponseData.of(group);
+
+ return new DefaultApiResponse<GroupLoadResponseData>(data);
+ }
+
+ @PostMapping(consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<GroupCreateResponseData> create(
+ @RequestBody GroupCreateRequest createRequest) {
+
+ // FIXME: 验证数据有效性
+
+ Group group = createRequest.getEntity();
+
+ Group ret = groupService.insert(group);
+
+ GroupCreateResponseData data = GroupCreateResponseData.build(ret);
+
+ return new DefaultApiResponse<GroupCreateResponseData>(data);
+ }
+
+ @PutMapping(path = "/{id}", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<GroupUpdateResponseData> update(
+ @PathVariable("id") String id,
+ @RequestBody GroupUpdateRequest updateRequest) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.update.id.must.not.empty");
+ }
+
+ Group tmp = groupService.selectById(id);
+ if (tmp == null) {
+ throw new RuntimeException("exception.update.domain.not.exist");
+ }
+
+ Group group = updateRequest.getEntity();
+ group.setId(id);
+
+ group = EntityUtils.merge(tmp, group);
+
+ Group ret = groupService.update(group);
+
+ GroupUpdateResponseData data = GroupUpdateResponseData.build(ret);
+
+ return new DefaultApiResponse<GroupUpdateResponseData>(data);
+ }
+
+ @DeleteMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<GroupRemoveResponseData> delete(
+ @PathVariable("id") String id) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.delete.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Group tmp = groupService.selectById(id);
+ if (tmp == null) {
+ throw new RuntimeException("exception.delete.domain.not.exist"); // FIXME: RestException
+ }
+
+ groupService.deleteById(id);
+
+ GroupRemoveResponseData data = GroupRemoveResponseData.build(tmp);
+ return new DefaultApiResponse<GroupRemoveResponseData>(data);
+ }
+
+
+
+ @RequestMapping(method = RequestMethod.GET, path = "/{id}/accounts", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public DefaultApiResponse<GroupRelatedAccountsResponseData> groupAccounts(
+ @PathVariable("id") String id,
+ GroupRelatedAccountsRequest request) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Group group = groupService.selectById(id);
+
+ if (group == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ if (request.getMapBean() == null) {
+ request.setMapBean(new HashMap<String, Object>());
+ }
+ request.getMapBean().put("groupId", group.getId());
+
+ Page<AccountGroup> page = groupService.selectGroupAccounts(
+ request.getPageIndex(),
+ request.getPageSize(),
+ request.getMapBean());
+
+ GroupRelatedAccountsResponseData data = GroupRelatedAccountsResponseData.of(request).build(page);
+
+ return new DefaultApiResponse<GroupRelatedAccountsResponseData>(data);
+ }
+
+ @RequestMapping(method = RequestMethod.POST, path = "/{id}/accounts", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public DefaultApiResponse<GroupRelateAccountsResponseData> relateAccounts(
+ @PathVariable("id") String id,
+ @RequestBody GroupRelateAccountsRequest groupAccounts) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Group group = groupService.selectById(id);
+
+ if (group == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ groupService.relateGroupAccounts(group, groupAccounts.getGroupAccounts());
+
+ GroupRelateAccountsResponseData data = GroupRelateAccountsResponseData.of("info.relate.success");
+
+ return new DefaultApiResponse<GroupRelateAccountsResponseData>(data);
+ }
+
+
+ @RequestMapping(method = RequestMethod.GET, path = "/{id}/roles", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public DefaultApiResponse<GroupRelatedRolesResponseData> groupRoles(
+ @PathVariable("id") String id,
+ GroupRelatedRolesRequest request) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Group group = groupService.selectById(id);
+
+ if (group == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ if (request.getMapBean() == null) {
+ request.setMapBean(new HashMap<String, Object>());
+ }
+ request.getMapBean().put("groupId", group.getId());
+
+ Page<GroupRole> page = groupService.selectGroupRoles(
+ request.getPageIndex(),
+ request.getPageSize(),
+ request.getMapBean());
+
+ GroupRelatedRolesResponseData data = GroupRelatedRolesResponseData.of(request).build(page);
+
+ return new DefaultApiResponse<GroupRelatedRolesResponseData>(data);
+ }
+
+ @RequestMapping(method = RequestMethod.POST, path = "/{id}/roles", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public DefaultApiResponse<GroupRelateRolesResponseData> relateRoles(
+ @PathVariable("id") String id,
+ @RequestBody GroupRelateRolesRequest groupRoles) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Group group = groupService.selectById(id);
+
+ if (group == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ groupService.relateGroupRoles(group, groupRoles.getGroupRoles());
+
+ GroupRelateRolesResponseData data = GroupRelateRolesResponseData.of("info.relate.success");
+
+ return new DefaultApiResponse<GroupRelateRolesResponseData>(data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminMenuController.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminMenuController.java
new file mode 100644
index 0000000..d4ebef0
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminMenuController.java
@@ -0,0 +1,209 @@
+package com.supwisdom.institute.backend.base.api.v1.controller.admin;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionDeleteBatchRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionDeleteBatchResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionRemoveResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionTreeResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionUpdateResponseData;
+import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.base.domain.entity.PermissionResource;
+import com.supwisdom.institute.backend.base.domain.model.PermissionTreeNode;
+import com.supwisdom.institute.backend.base.domain.service.PermissionService;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
+
+@Api(value = "BaseAdminMenu", tags = { "BaseAdminMenu" }, description = "菜单的操作接口")
+@Slf4j
+@RestController
+@RequestMapping("/v1/admin/menus")
+public class AdminMenuController {
+
+ @Autowired
+ private PermissionService permissionService;
+
+ @GetMapping(produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<PermissionQueryResponseData> query(PermissionQueryRequest queryRequest) {
+
+ if (queryRequest.getMapBean() == null) {
+ queryRequest.setMapBean(new HashMap<String, Object>());
+ }
+ queryRequest.getMapBean().put("type", Permission.TYPE_MENU);
+
+ Page<Permission> page = permissionService.selectPageList(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy());
+
+ PermissionQueryResponseData data = PermissionQueryResponseData.of(queryRequest).build(page);
+
+ return new DefaultApiResponse<PermissionQueryResponseData>(data);
+ }
+
+ @GetMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<PermissionLoadResponseData> load(@PathVariable("id") String id) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Permission permission = permissionService.selectById(id);
+
+ if (permission == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+ if (!Permission.TYPE_MENU.equals(permission.getType())) {
+ throw new RuntimeException("exception.get.domain.type.error");
+ }
+
+ List<String> resourceIds = new ArrayList<>();
+
+ Map<String, Object> mapBean = new HashMap<>();
+ mapBean.put("permissionId", id);
+ Page<PermissionResource> permissionResources = permissionService.selectPermissionResources(true, 0, 0, mapBean);
+ for (PermissionResource permissionResource : permissionResources) {
+ resourceIds.add(permissionResource.getResourceId());
+ }
+
+ PermissionLoadResponseData data = PermissionLoadResponseData.of(permission, resourceIds);
+
+ return new DefaultApiResponse<PermissionLoadResponseData>(data);
+ }
+
+ @PostMapping(consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<PermissionCreateResponseData> create(
+ @RequestBody PermissionCreateRequest createRequest) {
+
+ // FIXME: 验证数据有效性
+
+ Permission permission = createRequest.getEntity();
+ permission.setType(Permission.TYPE_MENU);
+
+ Permission ret = permissionService.insert(permission);
+
+ PermissionCreateResponseData data = PermissionCreateResponseData.build(ret);
+
+ return new DefaultApiResponse<PermissionCreateResponseData>(data);
+ }
+
+ @PutMapping(path = "/{id}", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<PermissionUpdateResponseData> update(
+ @PathVariable("id") String id,
+ @RequestBody PermissionUpdateRequest updateRequest) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.update.id.must.not.empty");
+ }
+
+ Permission tmp = permissionService.selectById(id);
+ if (tmp == null) {
+ throw new RuntimeException("exception.update.domain.not.exist");
+ }
+ if (!Permission.TYPE_MENU.equals(tmp.getType())) {
+ throw new RuntimeException("exception.update.domain.type.error");
+ }
+
+ Permission permission = updateRequest.getEntity();
+ permission.setId(id);
+
+ permission = EntityUtils.merge(tmp, permission);
+
+ Permission ret = permissionService.update(permission);
+
+ PermissionUpdateResponseData data = PermissionUpdateResponseData.build(ret);
+
+ return new DefaultApiResponse<PermissionUpdateResponseData>(data);
+ }
+
+ @DeleteMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<PermissionRemoveResponseData> delete(
+ @PathVariable("id") String id) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.delete.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Permission tmp = permissionService.selectById(id);
+ if (tmp == null) {
+ throw new RuntimeException("exception.delete.domain.not.exist"); // FIXME: RestException
+ }
+ if (!Permission.TYPE_MENU.equals(tmp.getType())) {
+ throw new RuntimeException("exception.delete.domain.type.error");
+ }
+
+ permissionService.deleteById(id);
+
+ PermissionRemoveResponseData data = PermissionRemoveResponseData.build(tmp);
+ return new DefaultApiResponse<PermissionRemoveResponseData>(data);
+ }
+
+
+ @DeleteMapping(path = "/batch", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<PermissionDeleteBatchResponseData> deleteBatch(
+ @RequestBody PermissionDeleteBatchRequest deleteBatchRequest) {
+
+ List<String> ids = deleteBatchRequest.getIds();
+
+ permissionService.deleteBatch(ids);
+
+ PermissionDeleteBatchResponseData data = PermissionDeleteBatchResponseData.build(ids);
+ return new DefaultApiResponse<PermissionDeleteBatchResponseData>(data);
+ }
+
+ @GetMapping(path = "/tree", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<PermissionTreeResponseData> tree(
+ @RequestParam(name = "applicationId", required = false, defaultValue = Permission.APPLICATION_ID) String applicationId) {
+
+ PermissionTreeNode tree = permissionService.selectPermissionTree(applicationId, Permission.TYPE_MENU);
+
+ PermissionTreeResponseData data = PermissionTreeResponseData.of(tree);
+
+ return new DefaultApiResponse<PermissionTreeResponseData>(data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminOperationController.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminOperationController.java
new file mode 100644
index 0000000..e84e2e0
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminOperationController.java
@@ -0,0 +1,177 @@
+package com.supwisdom.institute.backend.base.api.v1.controller.admin;
+
+import io.swagger.annotations.Api;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionRemoveResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionUpdateResponseData;
+import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.base.domain.entity.PermissionResource;
+import com.supwisdom.institute.backend.base.domain.service.PermissionService;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
+
+@Api(value = "BaseAdminOperation", tags = { "BaseAdminOperation" }, description = "操作的操作接口")
+@Slf4j
+@RestController
+@RequestMapping("/v1/admin/operations")
+public class AdminOperationController {
+
+ @Autowired
+ private PermissionService permissionService;
+
+ @GetMapping(produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<PermissionQueryResponseData> query(PermissionQueryRequest queryRequest) {
+
+ if (queryRequest.getMapBean() == null) {
+ queryRequest.setMapBean(new HashMap<String, Object>());
+ }
+ queryRequest.getMapBean().put("type", Permission.TYPE_OPERATION);
+
+ Page<Permission> page = permissionService.selectPageList(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy());
+
+ PermissionQueryResponseData data = PermissionQueryResponseData.of(queryRequest).build(page);
+
+ return new DefaultApiResponse<PermissionQueryResponseData>(data);
+ }
+
+ @GetMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<PermissionLoadResponseData> load(@PathVariable("id") String id) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Permission permission = permissionService.selectById(id);
+
+ if (permission == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+ if (!Permission.TYPE_OPERATION.equals(permission.getType())) {
+ throw new RuntimeException("exception.get.domain.type.error");
+ }
+
+ List<String> resourceIds = new ArrayList<>();
+
+ Map<String, Object> mapBean = new HashMap<>();
+ mapBean.put("permissionId", id);
+ Page<PermissionResource> permissionResources = permissionService.selectPermissionResources(true, 0, 0, mapBean);
+ for (PermissionResource permissionResource : permissionResources) {
+ resourceIds.add(permissionResource.getResourceId());
+ }
+
+ PermissionLoadResponseData data = PermissionLoadResponseData.of(permission, resourceIds);
+
+ return new DefaultApiResponse<PermissionLoadResponseData>(data);
+ }
+
+ @PostMapping(consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<PermissionCreateResponseData> create(
+ @RequestBody PermissionCreateRequest createRequest) {
+
+ // FIXME: 验证数据有效性
+
+ Permission permission = createRequest.getEntity();
+ permission.setType(Permission.TYPE_OPERATION);
+
+ Permission ret = permissionService.insert(permission);
+
+ PermissionCreateResponseData data = PermissionCreateResponseData.build(ret);
+
+ return new DefaultApiResponse<PermissionCreateResponseData>(data);
+ }
+
+ @PutMapping(path = "/{id}", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<PermissionUpdateResponseData> update(
+ @PathVariable("id") String id,
+ @RequestBody PermissionUpdateRequest updateRequest) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.update.id.must.not.empty");
+ }
+
+ Permission tmp = permissionService.selectById(id);
+ if (tmp == null) {
+ throw new RuntimeException("exception.update.domain.not.exist");
+ }
+ if (!Permission.TYPE_OPERATION.equals(tmp.getType())) {
+ throw new RuntimeException("exception.update.domain.type.error");
+ }
+
+ Permission permission = updateRequest.getEntity();
+ permission.setId(id);
+
+ permission = EntityUtils.merge(tmp, permission);
+
+ Permission ret = permissionService.update(permission);
+
+ PermissionUpdateResponseData data = PermissionUpdateResponseData.build(ret);
+
+ return new DefaultApiResponse<PermissionUpdateResponseData>(data);
+ }
+
+ @DeleteMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<PermissionRemoveResponseData> delete(
+ @PathVariable("id") String id) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.delete.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Permission tmp = permissionService.selectById(id);
+ if (tmp == null) {
+ throw new RuntimeException("exception.delete.domain.not.exist"); // FIXME: RestException
+ }
+ if (!Permission.TYPE_OPERATION.equals(tmp.getType())) {
+ throw new RuntimeException("exception.delete.domain.type.error");
+ }
+
+ permissionService.deleteById(id);
+
+ PermissionRemoveResponseData data = PermissionRemoveResponseData.build(tmp);
+ return new DefaultApiResponse<PermissionRemoveResponseData>(data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminPermissionController.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminPermissionController.java
new file mode 100644
index 0000000..a415095
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminPermissionController.java
@@ -0,0 +1,108 @@
+package com.supwisdom.institute.backend.base.api.v1.controller.admin;
+
+import java.util.HashMap;
+
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionRelateResourcesRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionRelatedResourcesRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionRelateResourcesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionRelatedResourcesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionTreeResponseData;
+import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.base.domain.entity.PermissionResource;
+import com.supwisdom.institute.backend.base.domain.model.PermissionTreeNode;
+import com.supwisdom.institute.backend.base.domain.service.PermissionService;
+import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
+
+@Api(value = "BaseAdminPermission", tags = { "BaseAdminPermission" }, description = "权限的操作接口")
+@Slf4j
+@RestController
+@RequestMapping("/v1/admin/permissions")
+public class AdminPermissionController {
+
+ @Autowired
+ private PermissionService permissionService;
+
+ @GetMapping(path = "/tree", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<PermissionTreeResponseData> tree() {
+
+ PermissionTreeNode tree = permissionService.selectPermissionTree(Permission.APPLICATION_ID, null);
+
+ PermissionTreeResponseData data = PermissionTreeResponseData.of(tree);
+
+ return new DefaultApiResponse<PermissionTreeResponseData>(data);
+ }
+
+ @RequestMapping(method = RequestMethod.GET, path = "/{id}/resources", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public DefaultApiResponse<PermissionRelatedResourcesResponseData> permissionResources(
+ @PathVariable("id") String id,
+ PermissionRelatedResourcesRequest request) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Permission permission = permissionService.selectById(id);
+
+ if (permission == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ if (request.getMapBean() == null) {
+ request.setMapBean(new HashMap<String, Object>());
+ }
+ request.getMapBean().put("permissionId", permission.getId());
+
+ Page<PermissionResource> page = permissionService.selectPermissionResources(
+ request.isLoadAll(),
+ request.getPageIndex(),
+ request.getPageSize(),
+ request.getMapBean());
+
+ PermissionRelatedResourcesResponseData data = PermissionRelatedResourcesResponseData.of(request).build(page);
+
+ return new DefaultApiResponse<PermissionRelatedResourcesResponseData>(data);
+ }
+
+ @RequestMapping(method = RequestMethod.POST, path = "/{id}/resources", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public DefaultApiResponse<PermissionRelateResourcesResponseData> relateResources(
+ @PathVariable("id") String id,
+ @RequestBody PermissionRelateResourcesRequest permissionResources) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Permission permission = permissionService.selectById(id);
+
+ if (permission == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ permissionService.relatePermissionResources(permission, permissionResources.getPermissionResources());
+
+ PermissionRelateResourcesResponseData data = PermissionRelateResourcesResponseData.of("info.relate.success");
+
+ return new DefaultApiResponse<PermissionRelateResourcesResponseData>(data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminResourceController.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminResourceController.java
new file mode 100644
index 0000000..5594269
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminResourceController.java
@@ -0,0 +1,146 @@
+package com.supwisdom.institute.backend.base.api.v1.controller.admin;
+
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ResourceCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ResourceQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ResourceUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ResourceCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ResourceLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ResourceQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ResourceRemoveResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.ResourceUpdateResponseData;
+import com.supwisdom.institute.backend.base.domain.entity.Resource;
+import com.supwisdom.institute.backend.base.domain.service.ResourceService;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
+
+@Api(value = "BaseAdminResource", tags = { "BaseAdminResource" }, description = "资源(API)的操作接口")
+@Slf4j
+@RestController
+@RequestMapping("/v1/admin/resources")
+public class AdminResourceController {
+
+ @Autowired
+ private ResourceService resourceService;
+
+ @GetMapping(produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<ResourceQueryResponseData> query(ResourceQueryRequest queryRequest) {
+
+ Page<Resource> page = resourceService.selectPageList(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy());
+
+ ResourceQueryResponseData data = ResourceQueryResponseData.of(queryRequest).build(page);
+
+ return new DefaultApiResponse<ResourceQueryResponseData>(data);
+ }
+
+ @GetMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<ResourceLoadResponseData> load(@PathVariable("id") String id) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Resource resource = resourceService.selectById(id);
+
+ if (resource == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ ResourceLoadResponseData data = ResourceLoadResponseData.of(resource);
+
+ return new DefaultApiResponse<ResourceLoadResponseData>(data);
+ }
+
+ @PostMapping(consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<ResourceCreateResponseData> create(
+ @RequestBody ResourceCreateRequest createRequest) {
+
+ // FIXME: 验证数据有效性
+
+ Resource resource = createRequest.getEntity();
+
+ Resource ret = resourceService.insert(resource);
+
+ ResourceCreateResponseData data = ResourceCreateResponseData.build(ret);
+
+ return new DefaultApiResponse<ResourceCreateResponseData>(data);
+ }
+
+ @PutMapping(path = "/{id}", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<ResourceUpdateResponseData> update(
+ @PathVariable("id") String id,
+ @RequestBody ResourceUpdateRequest updateRequest) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.update.id.must.not.empty");
+ }
+
+ Resource tmp = resourceService.selectById(id);
+ if (tmp == null) {
+ throw new RuntimeException("exception.update.domain.not.exist");
+ }
+
+ Resource resource = updateRequest.getEntity();
+ resource.setId(id);
+
+ resource = EntityUtils.merge(tmp, resource);
+
+ Resource ret = resourceService.update(resource);
+
+ ResourceUpdateResponseData data = ResourceUpdateResponseData.build(ret);
+
+ return new DefaultApiResponse<ResourceUpdateResponseData>(data);
+ }
+
+ @DeleteMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<ResourceRemoveResponseData> delete(
+ @PathVariable("id") String id) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.delete.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Resource tmp = resourceService.selectById(id);
+ if (tmp == null) {
+ throw new RuntimeException("exception.delete.domain.not.exist"); // FIXME: RestException
+ }
+
+ resourceService.deleteById(id);
+
+ ResourceRemoveResponseData data = ResourceRemoveResponseData.build(tmp);
+ return new DefaultApiResponse<ResourceRemoveResponseData>(data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminRoleController.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminRoleController.java
new file mode 100644
index 0000000..b45bc25
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminRoleController.java
@@ -0,0 +1,346 @@
+package com.supwisdom.institute.backend.base.api.v1.controller.admin;
+
+import java.util.HashMap;
+import java.util.List;
+
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleDeleteBatchRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleRelateAccountsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleRelateGroupsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleRelatePermissionsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleRelatedAccountsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleRelatedGroupsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleRelatedPermissionsRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RoleUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleDeleteBatchResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleRelateAccountsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleRelateGroupsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleRelatePermissionsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleRelatedAccountsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleRelatedGroupsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleRelatedPermissionsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleRemoveResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RoleUpdateResponseData;
+import com.supwisdom.institute.backend.base.domain.entity.AccountRole;
+import com.supwisdom.institute.backend.base.domain.entity.GroupRole;
+import com.supwisdom.institute.backend.base.domain.entity.Role;
+import com.supwisdom.institute.backend.base.domain.entity.RolePermission;
+import com.supwisdom.institute.backend.base.domain.service.RoleService;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
+
+@Api(value = "BaseAdminRole", tags = { "BaseAdminRole" }, description = "角色的操作接口")
+@Slf4j
+@RestController
+@RequestMapping("/v1/admin/roles")
+public class AdminRoleController {
+
+ @Autowired
+ private RoleService roleService;
+
+ @GetMapping(produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<RoleQueryResponseData> query(RoleQueryRequest queryRequest) {
+
+ Page<Role> page = roleService.selectPageList(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy());
+
+ RoleQueryResponseData data = RoleQueryResponseData.of(queryRequest).build(page);
+
+ return new DefaultApiResponse<RoleQueryResponseData>(data);
+ }
+
+ @GetMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<RoleLoadResponseData> load(@PathVariable("id") String id) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Role role = roleService.selectById(id);
+
+ if (role == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ RoleLoadResponseData data = RoleLoadResponseData.of(role);
+
+ return new DefaultApiResponse<RoleLoadResponseData>(data);
+ }
+
+ @PostMapping(consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<RoleCreateResponseData> create(
+ @RequestBody RoleCreateRequest createRequest) {
+
+ // FIXME: 验证数据有效性
+
+ Role role = createRequest.getEntity();
+
+ Role ret = roleService.insert(role);
+
+ RoleCreateResponseData data = RoleCreateResponseData.build(ret);
+
+ return new DefaultApiResponse<RoleCreateResponseData>(data);
+ }
+
+ @PutMapping(path = "/{id}", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<RoleUpdateResponseData> update(
+ @PathVariable("id") String id,
+ @RequestBody RoleUpdateRequest updateRequest) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.update.id.must.not.empty");
+ }
+
+ Role tmp = roleService.selectById(id);
+ if (tmp == null) {
+ throw new RuntimeException("exception.update.domain.not.exist");
+ }
+
+ Role role = updateRequest.getEntity();
+ role.setId(id);
+
+ role = EntityUtils.merge(tmp, role);
+
+ Role ret = roleService.update(role);
+
+ RoleUpdateResponseData data = RoleUpdateResponseData.build(ret);
+
+ return new DefaultApiResponse<RoleUpdateResponseData>(data);
+ }
+
+ @DeleteMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<RoleRemoveResponseData> delete(
+ @PathVariable("id") String id) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.delete.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Role tmp = roleService.selectById(id);
+ if (tmp == null) {
+ throw new RuntimeException("exception.delete.domain.not.exist"); // FIXME: RestException
+ }
+
+ roleService.deleteById(id);
+
+ RoleRemoveResponseData data = RoleRemoveResponseData.build(tmp);
+ return new DefaultApiResponse<RoleRemoveResponseData>(data);
+ }
+
+ @DeleteMapping(path = "/batch", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<RoleDeleteBatchResponseData> deleteBatch(
+ @RequestBody RoleDeleteBatchRequest deleteBatchRequest) {
+
+ List<String> ids = deleteBatchRequest.getIds();
+
+ roleService.deleteBatch(ids);
+
+ RoleDeleteBatchResponseData data = RoleDeleteBatchResponseData.build(ids);
+ return new DefaultApiResponse<RoleDeleteBatchResponseData>(data);
+ }
+
+
+ @RequestMapping(method = RequestMethod.GET, path = "/{id}/accounts", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public DefaultApiResponse<RoleRelatedAccountsResponseData> roleAccounts(
+ @PathVariable("id") String id,
+ RoleRelatedAccountsRequest request) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Role role = roleService.selectById(id);
+
+ if (role == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ if (request.getMapBean() == null) {
+ request.setMapBean(new HashMap<String, Object>());
+ }
+ request.getMapBean().put("roleId", role.getId());
+
+ Page<AccountRole> page = roleService.selectRoleAccounts(
+ request.getPageIndex(),
+ request.getPageSize(),
+ request.getMapBean());
+
+ RoleRelatedAccountsResponseData data = RoleRelatedAccountsResponseData.of(request).build(page);
+
+ return new DefaultApiResponse<RoleRelatedAccountsResponseData>(data);
+ }
+
+ @RequestMapping(method = RequestMethod.POST, path = "/{id}/accounts", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public DefaultApiResponse<RoleRelateAccountsResponseData> relateAccounts(
+ @PathVariable("id") String id,
+ @RequestBody RoleRelateAccountsRequest roleAccounts) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Role role = roleService.selectById(id);
+
+ if (role == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ roleService.relateRoleAccounts(role, roleAccounts.getRoleAccounts());
+
+ RoleRelateAccountsResponseData data = RoleRelateAccountsResponseData.of("info.relate.success");
+
+ return new DefaultApiResponse<RoleRelateAccountsResponseData>(data);
+ }
+
+
+ @RequestMapping(method = RequestMethod.GET, path = "/{id}/groups", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public DefaultApiResponse<RoleRelatedGroupsResponseData> roleGroups(
+ @PathVariable("id") String id,
+ RoleRelatedGroupsRequest request) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Role role = roleService.selectById(id);
+
+ if (role == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ if (request.getMapBean() == null) {
+ request.setMapBean(new HashMap<String, Object>());
+ }
+ request.getMapBean().put("roleId", role.getId());
+
+ Page<GroupRole> page = roleService.selectRoleGroups(
+ request.getPageIndex(),
+ request.getPageSize(),
+ request.getMapBean());
+
+ RoleRelatedGroupsResponseData data = RoleRelatedGroupsResponseData.of(request).build(page);
+
+ return new DefaultApiResponse<RoleRelatedGroupsResponseData>(data);
+ }
+
+ @RequestMapping(method = RequestMethod.POST, path = "/{id}/groups", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public DefaultApiResponse<RoleRelateGroupsResponseData> relateGroups(
+ @PathVariable("id") String id,
+ @RequestBody RoleRelateGroupsRequest roleGroups) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Role role = roleService.selectById(id);
+
+ if (role == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ roleService.relateRoleGroups(role, roleGroups.getRoleGroups());
+
+ RoleRelateGroupsResponseData data = RoleRelateGroupsResponseData.of("info.relate.success");
+
+ return new DefaultApiResponse<RoleRelateGroupsResponseData>(data);
+ }
+
+
+ @RequestMapping(method = RequestMethod.GET, path = "/{id}/permissions", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public DefaultApiResponse<RoleRelatedPermissionsResponseData> rolePermissions(
+ @PathVariable("id") String id,
+ RoleRelatedPermissionsRequest request) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Role role = roleService.selectById(id);
+
+ if (role == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ if (request.getMapBean() == null) {
+ request.setMapBean(new HashMap<String, Object>());
+ }
+ request.getMapBean().put("roleId", role.getId());
+
+ Page<RolePermission> page = roleService.selectRolePermissions(
+ request.getPageIndex(),
+ request.getPageSize(),
+ request.getMapBean());
+
+ RoleRelatedPermissionsResponseData data = RoleRelatedPermissionsResponseData.of(request).build(page);
+
+ return new DefaultApiResponse<RoleRelatedPermissionsResponseData>(data);
+ }
+
+ @RequestMapping(method = RequestMethod.POST, path = "/{id}/permissions", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public DefaultApiResponse<RoleRelatePermissionsResponseData> relatePermissions(
+ @PathVariable("id") String id,
+ @RequestBody RoleRelatePermissionsRequest rolePermissions) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Role role = roleService.selectById(id);
+
+ if (role == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ roleService.relateRolePermissions(role, rolePermissions.getRolePermissions());
+
+ RoleRelatePermissionsResponseData data = RoleRelatePermissionsResponseData.of("info.relate.success");
+
+ return new DefaultApiResponse<RoleRelatePermissionsResponseData>(data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminRouteController.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminRouteController.java
new file mode 100644
index 0000000..a52334d
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/admin/AdminRouteController.java
@@ -0,0 +1,165 @@
+package com.supwisdom.institute.backend.base.api.v1.controller.admin;
+
+import java.util.List;
+
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RouteCreateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RouteDeleteBatchRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RouteQueryRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.RouteUpdateRequest;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RouteCreateResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RouteDeleteBatchResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RouteLoadResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RouteQueryResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RouteRemoveResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.RouteUpdateResponseData;
+import com.supwisdom.institute.backend.base.domain.entity.Route;
+import com.supwisdom.institute.backend.base.domain.service.RouteService;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
+
+@Api(value = "BaseAdminRoute", tags = { "BaseAdminRoute" }, description = "路由信息的操作接口")
+@Slf4j
+@RestController
+@RequestMapping("/v1/admin/routes")
+public class AdminRouteController {
+
+ @Autowired
+ private RouteService routeService;
+
+
+ @GetMapping(produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<RouteQueryResponseData> query(RouteQueryRequest queryRequest) {
+
+ Page<Route> page = routeService.selectPageList(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy());
+
+ RouteQueryResponseData data = RouteQueryResponseData.of(queryRequest).build(page);
+
+ return new DefaultApiResponse<RouteQueryResponseData>(data);
+ }
+
+ @GetMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<RouteLoadResponseData> load(@PathVariable("id") String id) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Route route = routeService.selectById(id);
+
+ if (route == null) {
+ throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
+ }
+
+ RouteLoadResponseData data = RouteLoadResponseData.of(route);
+
+ return new DefaultApiResponse<RouteLoadResponseData>(data);
+ }
+
+ @PostMapping(consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<RouteCreateResponseData> create(
+ @RequestBody RouteCreateRequest createRequest) {
+
+ // FIXME: 验证数据有效性
+
+ Route route = createRequest.getEntity();
+
+ Route ret = routeService.insert(route);
+
+ RouteCreateResponseData data = RouteCreateResponseData.build(ret);
+
+ return new DefaultApiResponse<RouteCreateResponseData>(data);
+ }
+
+ @PutMapping(path = "/{id}", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<RouteUpdateResponseData> update(
+ @PathVariable("id") String id,
+ @RequestBody RouteUpdateRequest updateRequest) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.update.id.must.not.empty");
+ }
+
+ Route tmp = routeService.selectById(id);
+ if (tmp == null) {
+ throw new RuntimeException("exception.update.domain.not.exist");
+ }
+
+ Route route = updateRequest.getEntity();
+ route.setId(id);
+
+ route = EntityUtils.merge(tmp, route);
+
+ Route ret = routeService.update(route);
+
+ RouteUpdateResponseData data = RouteUpdateResponseData.build(ret);
+
+ return new DefaultApiResponse<RouteUpdateResponseData>(data);
+ }
+
+ @DeleteMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<RouteRemoveResponseData> delete(
+ @PathVariable("id") String id) {
+
+ if (id == null || id.length() == 0) {
+ throw new RuntimeException("exception.delete.id.must.not.empty"); // FIXME: RestException
+ }
+
+ Route tmp = routeService.selectById(id);
+ if (tmp == null) {
+ throw new RuntimeException("exception.delete.domain.not.exist"); // FIXME: RestException
+ }
+
+ routeService.deleteById(id);
+
+ RouteRemoveResponseData data = RouteRemoveResponseData.build(tmp);
+ return new DefaultApiResponse<RouteRemoveResponseData>(data);
+ }
+
+ @DeleteMapping(path = "/batch", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<RouteDeleteBatchResponseData> deleteBatch(
+ @RequestBody RouteDeleteBatchRequest deleteBatchRequest) {
+
+ List<String> ids = deleteBatchRequest.getIds();
+
+ routeService.deleteBatch(ids);
+
+ RouteDeleteBatchResponseData data = RouteDeleteBatchResponseData.build(ids);
+ return new DefaultApiResponse<RouteDeleteBatchResponseData>(data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/authn/AuthnController.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/authn/AuthnController.java
new file mode 100644
index 0000000..d79f298
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/authn/AuthnController.java
@@ -0,0 +1,320 @@
+package com.supwisdom.institute.backend.base.api.v1.controller.authn;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnAccountPermissionsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnAccountResourcesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnAccountResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnAccountRolesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnApplicationsResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnPermissionRoleListResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnResourceRoleListResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnRolesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.authn.response.AuthnRoutesResponseData;
+import com.supwisdom.institute.backend.base.domain.entity.Account;
+import com.supwisdom.institute.backend.base.domain.entity.Application;
+import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.base.domain.entity.Resource;
+import com.supwisdom.institute.backend.base.domain.entity.Role;
+import com.supwisdom.institute.backend.base.domain.entity.Route;
+import com.supwisdom.institute.backend.base.domain.model.PermissionRoleSet;
+import com.supwisdom.institute.backend.base.domain.model.ResourceRoleSet;
+import com.supwisdom.institute.backend.base.domain.service.AccountService;
+import com.supwisdom.institute.backend.base.domain.service.ApplicationService;
+import com.supwisdom.institute.backend.base.domain.service.PermissionService;
+import com.supwisdom.institute.backend.base.domain.service.ResourceService;
+import com.supwisdom.institute.backend.base.domain.service.RoleService;
+import com.supwisdom.institute.backend.base.domain.service.RouteService;
+import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
+
+@Api(value = "BaseAuthn", tags = { "BaseAuthn" }, description = "认证授权接口")
+@Slf4j
+@RestController
+@RequestMapping("/v1/authn")
+public class AuthnController {
+
+ @Autowired
+ private AccountService accountService;
+
+ @Autowired
+ private RoleService roleService;
+
+ @Autowired
+ private ApplicationService applicationService;
+
+ @Autowired
+ private PermissionService permissionService;
+
+ @Autowired
+ private ResourceService resourceService;
+
+ @Autowired
+ private RouteService routeService;
+
+ @GetMapping(path = "/{username}/account", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<AuthnAccountResponseData> account(
+ @PathVariable("username") String username) {
+
+ if (username == null || username.length() == 0) {
+ throw new RuntimeException("exception.get.username.must.not.empty");
+ }
+
+ Account account = accountService.selectByUsername(username);
+
+ if (account == null) {
+ throw new RuntimeException("exception.get.account.not.exist");
+ }
+
+ AuthnAccountResponseData data = AuthnAccountResponseData.of(account);
+
+ return new DefaultApiResponse<AuthnAccountResponseData>(data);
+ }
+
+ @GetMapping(path = "/{username}/roles", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<AuthnAccountRolesResponseData> accountRoles(
+ @PathVariable("username") String username) {
+
+ if (username == null || username.length() == 0) {
+ throw new RuntimeException("exception.get.username.must.not.empty");
+ }
+
+ Account account = accountService.selectByUsername(username);
+
+ if (account == null) {
+ throw new RuntimeException("exception.get.account.not.exist");
+ }
+
+ List<Role> roles = roleService.selectByUsername(username);
+
+ AuthnAccountRolesResponseData data = AuthnAccountRolesResponseData.of(roles);
+
+ return new DefaultApiResponse<AuthnAccountRolesResponseData>(data);
+ }
+
+ @GetMapping(path = "/{username}/applications", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<AuthnAccountPermissionsResponseData> accountApplications(
+ @PathVariable("username") String username,
+ @RequestParam(name = "applicationId", required = false) String applicationId) {
+
+ if (username == null || username.length() == 0) {
+ throw new RuntimeException("exception.get.username.must.not.empty");
+ }
+
+ Account account = accountService.selectByUsername(username);
+
+ if (account == null) {
+ throw new RuntimeException("exception.get.account.not.exist");
+ }
+
+ List<Permission> applications = permissionService.selectByUsername(username, null, Permission.TYPE_APPLICATION);
+
+ AuthnAccountPermissionsResponseData data = AuthnAccountPermissionsResponseData.of(applications);
+
+ return new DefaultApiResponse<AuthnAccountPermissionsResponseData>(data);
+ }
+
+ @GetMapping(path = "/{username}/menus", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<AuthnAccountPermissionsResponseData> accountMenus(
+ @PathVariable("username") String username,
+ @RequestParam(name = "applicationId", required = false) String applicationId) {
+
+ if (username == null || username.length() == 0) {
+ throw new RuntimeException("exception.get.username.must.not.empty");
+ }
+
+ Account account = accountService.selectByUsername(username);
+
+ if (account == null) {
+ throw new RuntimeException("exception.get.account.not.exist");
+ }
+
+ List<Permission> menus = permissionService.selectByUsername(username, applicationId, Permission.TYPE_MENU);
+
+ AuthnAccountPermissionsResponseData data = AuthnAccountPermissionsResponseData.of(menus);
+
+ return new DefaultApiResponse<AuthnAccountPermissionsResponseData>(data);
+ }
+
+ @GetMapping(path = "/{username}/operations", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<AuthnAccountPermissionsResponseData> accountOperations(
+ @PathVariable("username") String username,
+ @RequestParam(name = "applicationId", required = false) String applicationId) {
+
+ if (username == null || username.length() == 0) {
+ throw new RuntimeException("exception.get.username.must.not.empty");
+ }
+
+ Account account = accountService.selectByUsername(username);
+
+ if (account == null) {
+ throw new RuntimeException("exception.get.account.not.exist");
+ }
+
+ List<Permission> operations = permissionService.selectByUsername(username, applicationId, Permission.TYPE_OPERATION);
+
+ AuthnAccountPermissionsResponseData data = AuthnAccountPermissionsResponseData.of(operations);
+
+ return new DefaultApiResponse<AuthnAccountPermissionsResponseData>(data);
+ }
+
+ @GetMapping(path = "/{username}/resources", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<AuthnAccountResourcesResponseData> accountResources(
+ @PathVariable("username") String username,
+ @RequestParam(name = "applicationId", required = false) String applicationId) {
+
+ if (username == null || username.length() == 0) {
+ throw new RuntimeException("exception.get.username.must.not.empty");
+ }
+
+ Account account = accountService.selectByUsername(username);
+
+ if (account == null) {
+ throw new RuntimeException("exception.get.account.not.exist");
+ }
+
+ List<Resource> resources = null;// FIXME: resourceService.selectByUsername(username, applicationId);
+
+ AuthnAccountResourcesResponseData data = AuthnAccountResourcesResponseData.of(resources);
+
+ return new DefaultApiResponse<AuthnAccountResourcesResponseData>(data);
+ }
+
+// @GetMapping(path = "/resources", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+// @ResponseStatus(value = HttpStatus.OK)
+// @ResponseBody
+// public DefaultApiResponse<AuthnResourceRoleListResponseData> applicationResources(
+// @RequestParam(name = "applicationId", required = false) String applicationId) {
+//
+// List<ResourceRoleSet> resourceRoleSets = resourceService.selectByApplication(applicationId);
+//
+// AuthnResourceRoleListResponseData data = AuthnResourceRoleListResponseData.of(resourceRoleSets);
+//
+// return new DefaultApiResponse<AuthnResourceRoleListResponseData>(data);
+// }
+
+
+ @GetMapping(path = "/applications", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<AuthnApplicationsResponseData> applications() {
+
+ Map<String, Object> mapBean = new HashMap<>();
+ Map<String, String> orderBy = null;
+
+ mapBean.put("status", "1");
+
+ List<Application> applications = applicationService.selectList(mapBean, orderBy);
+
+ AuthnApplicationsResponseData data = AuthnApplicationsResponseData.of(applications);
+
+ return new DefaultApiResponse<AuthnApplicationsResponseData>(data);
+ }
+
+ @GetMapping(path = "/roles", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<AuthnRolesResponseData> roles() {
+
+ Map<String, Object> mapBean = new HashMap<>();
+ Map<String, String> orderBy = null;
+
+ mapBean.put("status", "1");
+
+ List<Role> roles = roleService.selectList(mapBean, orderBy);
+
+ AuthnRolesResponseData data = AuthnRolesResponseData.of(roles);
+
+ return new DefaultApiResponse<AuthnRolesResponseData>(data);
+ }
+
+
+ @GetMapping(path = "/permissionRoleSets", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<AuthnPermissionRoleListResponseData> permissionRoleSets(
+ @RequestParam(name = "applicationId", required = false, defaultValue = Permission.APPLICATION_ID) String applicationId) {
+
+ Map<String, Object> mapBean = new HashMap<>();
+
+ mapBean.put("status", "1");
+ if (applicationId != null && !applicationId.isEmpty()) {
+ mapBean.put("applicationId", applicationId);
+ }
+
+ List<PermissionRoleSet> permissionRoleSets = permissionService.selectPermissionRoleSet(mapBean);
+
+ AuthnPermissionRoleListResponseData data = AuthnPermissionRoleListResponseData.of(permissionRoleSets);
+
+ return new DefaultApiResponse<AuthnPermissionRoleListResponseData>(data);
+ }
+
+
+ @GetMapping(path = "/resourceRoleSets", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<AuthnResourceRoleListResponseData> resourceRoleSets(
+ @RequestParam(name = "applicationId", required = false, defaultValue = Permission.APPLICATION_ID) String applicationId) {
+
+ Map<String, Object> mapBean = new HashMap<>();
+
+ mapBean.put("status", "1");
+ if (applicationId != null && !applicationId.isEmpty()) {
+ mapBean.put("applicationId", applicationId);
+ }
+
+ List<ResourceRoleSet> resourceRoleSets = resourceService.selectResourceRoleSet(mapBean);
+
+ AuthnResourceRoleListResponseData data = AuthnResourceRoleListResponseData.of(resourceRoleSets);
+
+ return new DefaultApiResponse<AuthnResourceRoleListResponseData>(data);
+ }
+
+
+
+ @GetMapping(path = "/routes", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ @ResponseStatus(value = HttpStatus.OK)
+ @ResponseBody
+ public DefaultApiResponse<AuthnRoutesResponseData> routes() {
+
+ Map<String, Object> mapBean = new HashMap<>();
+ Map<String, String> orderBy = null;
+
+ mapBean.put("status", "1");
+
+ List<Route> routes = routeService.selectList(mapBean, orderBy);
+
+ AuthnRoutesResponseData data = AuthnRoutesResponseData.of(routes);
+
+ return new DefaultApiResponse<AuthnRoutesResponseData>(data);
+ }
+
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/.gitkeep b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/.gitkeep
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountCreateRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountCreateRequest.java
new file mode 100644
index 0000000..bf8cfc7
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountCreateRequest.java
@@ -0,0 +1,21 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import com.supwisdom.institute.backend.base.domain.entity.Account;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiCreateRequest;
+
+/**
+ * @author loie
+ */
+public class AccountCreateRequest extends Account implements IApiCreateRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 3708476811446308442L;
+
+ public Account getEntity() {
+ return EntityUtils.copy(this, new Account());
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountDeleteBatchRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountDeleteBatchRequest.java
new file mode 100644
index 0000000..d936658
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountDeleteBatchRequest.java
@@ -0,0 +1,21 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiRequest;
+
+public class AccountDeleteBatchRequest implements IApiRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -5886243153431313069L;
+
+ @Getter
+ @Setter
+ private List<String> ids;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountQueryRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountQueryRequest.java
new file mode 100644
index 0000000..f31652f
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountQueryRequest.java
@@ -0,0 +1,40 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author loie
+ */
+public class AccountQueryRequest implements IApiQueryRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -8594346811904818135L;
+
+ @Getter
+ @Setter
+ private boolean loadAll = false;
+ @Getter
+ @Setter
+ private int pageIndex = 0;
+ @Getter
+ @Setter
+ private int pageSize = 20;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, Object> mapBean;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, String> orderBy;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountRelateGroupsRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountRelateGroupsRequest.java
new file mode 100644
index 0000000..acb37d9
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountRelateGroupsRequest.java
@@ -0,0 +1,22 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.AccountGroup;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiRequest;
+
+public class AccountRelateGroupsRequest implements IApiRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 5685421340396797488L;
+
+ @Getter
+ @Setter
+ private List<AccountGroup> accountGroups;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountRelateRolesRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountRelateRolesRequest.java
new file mode 100644
index 0000000..dc59b3f
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountRelateRolesRequest.java
@@ -0,0 +1,22 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.AccountRole;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiRequest;
+
+public class AccountRelateRolesRequest implements IApiRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 6612833201128786481L;
+
+ @Getter
+ @Setter
+ private List<AccountRole> accountRoles;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountRelatedGroupsRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountRelatedGroupsRequest.java
new file mode 100644
index 0000000..d63a859
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountRelatedGroupsRequest.java
@@ -0,0 +1,40 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author loie
+ */
+public class AccountRelatedGroupsRequest implements IApiQueryRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -1998794079137356318L;
+
+ @Getter
+ @Setter
+ private boolean loadAll = false;
+ @Getter
+ @Setter
+ private int pageIndex = 0;
+ @Getter
+ @Setter
+ private int pageSize = 20;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, Object> mapBean;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, String> orderBy;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountRelatedRolesRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountRelatedRolesRequest.java
new file mode 100644
index 0000000..d484452
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountRelatedRolesRequest.java
@@ -0,0 +1,40 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author loie
+ */
+public class AccountRelatedRolesRequest implements IApiQueryRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2118300523470868823L;
+
+ @Getter
+ @Setter
+ private boolean loadAll = false;
+ @Getter
+ @Setter
+ private int pageIndex = 0;
+ @Getter
+ @Setter
+ private int pageSize = 20;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, Object> mapBean;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, String> orderBy;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountUpdateRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountUpdateRequest.java
new file mode 100644
index 0000000..795c687
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/AccountUpdateRequest.java
@@ -0,0 +1,28 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import com.supwisdom.institute.backend.base.domain.entity.Account;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiUpdateRequest;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class AccountUpdateRequest extends Account implements IApiUpdateRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7297542338912221083L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ public Account getEntity() {
+ return EntityUtils.copy(this, new Account());
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ApplicationCreateRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ApplicationCreateRequest.java
new file mode 100644
index 0000000..f950918
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ApplicationCreateRequest.java
@@ -0,0 +1,21 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import com.supwisdom.institute.backend.base.domain.entity.Application;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiCreateRequest;
+
+/**
+ * @author loie
+ */
+public class ApplicationCreateRequest extends Application implements IApiCreateRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 7619506409619195684L;
+
+ public Application getEntity() {
+ return EntityUtils.copy(this, new Application());
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ApplicationDeleteBatchRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ApplicationDeleteBatchRequest.java
new file mode 100644
index 0000000..62e69ed
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ApplicationDeleteBatchRequest.java
@@ -0,0 +1,21 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiRequest;
+
+public class ApplicationDeleteBatchRequest implements IApiRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -8296636817441994821L;
+
+ @Getter
+ @Setter
+ private List<String> ids;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ApplicationQueryRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ApplicationQueryRequest.java
new file mode 100644
index 0000000..b4b6ea1
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ApplicationQueryRequest.java
@@ -0,0 +1,40 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author loie
+ */
+public class ApplicationQueryRequest implements IApiQueryRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -4728297863070197861L;
+
+ @Getter
+ @Setter
+ private boolean loadAll = false;
+ @Getter
+ @Setter
+ private int pageIndex = 0;
+ @Getter
+ @Setter
+ private int pageSize = 20;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, Object> mapBean;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, String> orderBy;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ApplicationUpdateRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ApplicationUpdateRequest.java
new file mode 100644
index 0000000..12f8a49
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ApplicationUpdateRequest.java
@@ -0,0 +1,28 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import com.supwisdom.institute.backend.base.domain.entity.Application;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiUpdateRequest;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class ApplicationUpdateRequest extends Application implements IApiUpdateRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2370390240675594737L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ public Application getEntity() {
+ return EntityUtils.copy(this, new Application());
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ConfigCreateRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ConfigCreateRequest.java
new file mode 100644
index 0000000..6506f3b
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ConfigCreateRequest.java
@@ -0,0 +1,21 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import com.supwisdom.institute.backend.base.domain.entity.Config;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiCreateRequest;
+
+/**
+ * @author loie
+ */
+public class ConfigCreateRequest extends Config implements IApiCreateRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 8380208871984763567L;
+
+ public Config getEntity() {
+ return EntityUtils.copy(this, new Config());
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ConfigQueryRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ConfigQueryRequest.java
new file mode 100644
index 0000000..53f2b29
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ConfigQueryRequest.java
@@ -0,0 +1,40 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author loie
+ */
+public class ConfigQueryRequest implements IApiQueryRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -1033044092932525382L;
+
+ @Getter
+ @Setter
+ private boolean loadAll = false;
+ @Getter
+ @Setter
+ private int pageIndex = 0;
+ @Getter
+ @Setter
+ private int pageSize = 20;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, Object> mapBean;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, String> orderBy;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ConfigUpdateRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ConfigUpdateRequest.java
new file mode 100644
index 0000000..6fd4fc9
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ConfigUpdateRequest.java
@@ -0,0 +1,29 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import com.supwisdom.institute.backend.base.domain.entity.Config;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiUpdateRequest;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class ConfigUpdateRequest extends Config implements IApiUpdateRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 6002556449210326472L;
+
+ @Getter
+ @Setter
+ private String id;
+
+
+ public Config getEntity() {
+ return EntityUtils.copy(this, new Config());
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupCreateRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupCreateRequest.java
new file mode 100644
index 0000000..8f60f9c
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupCreateRequest.java
@@ -0,0 +1,21 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import com.supwisdom.institute.backend.base.domain.entity.Group;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiCreateRequest;
+
+/**
+ * @author loie
+ */
+public class GroupCreateRequest extends Group implements IApiCreateRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -5922604207821365121L;
+
+ public Group getEntity() {
+ return EntityUtils.copy(this, new Group());
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupQueryRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupQueryRequest.java
new file mode 100644
index 0000000..ea610b3
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupQueryRequest.java
@@ -0,0 +1,40 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author loie
+ */
+public class GroupQueryRequest implements IApiQueryRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -4023230222050081483L;
+
+ @Getter
+ @Setter
+ private boolean loadAll = false;
+ @Getter
+ @Setter
+ private int pageIndex = 0;
+ @Getter
+ @Setter
+ private int pageSize = 20;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, Object> mapBean;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, String> orderBy;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupRelateAccountsRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupRelateAccountsRequest.java
new file mode 100644
index 0000000..8b81132
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupRelateAccountsRequest.java
@@ -0,0 +1,22 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.AccountGroup;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiRequest;
+
+public class GroupRelateAccountsRequest implements IApiRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 440910731161851824L;
+
+ @Getter
+ @Setter
+ private List<AccountGroup> groupAccounts;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupRelateRolesRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupRelateRolesRequest.java
new file mode 100644
index 0000000..52b4486
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupRelateRolesRequest.java
@@ -0,0 +1,22 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.GroupRole;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiRequest;
+
+public class GroupRelateRolesRequest implements IApiRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 795337416058792163L;
+
+ @Getter
+ @Setter
+ private List<GroupRole> groupRoles;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupRelatedAccountsRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupRelatedAccountsRequest.java
new file mode 100644
index 0000000..6a1b13d
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupRelatedAccountsRequest.java
@@ -0,0 +1,40 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author loie
+ */
+public class GroupRelatedAccountsRequest implements IApiQueryRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -3102006206798574212L;
+
+ @Getter
+ @Setter
+ private boolean loadAll = false;
+ @Getter
+ @Setter
+ private int pageIndex = 0;
+ @Getter
+ @Setter
+ private int pageSize = 20;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, Object> mapBean;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, String> orderBy;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupRelatedRolesRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupRelatedRolesRequest.java
new file mode 100644
index 0000000..6000d6a
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupRelatedRolesRequest.java
@@ -0,0 +1,40 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author loie
+ */
+public class GroupRelatedRolesRequest implements IApiQueryRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -6642264903131667637L;
+
+ @Getter
+ @Setter
+ private boolean loadAll = false;
+ @Getter
+ @Setter
+ private int pageIndex = 0;
+ @Getter
+ @Setter
+ private int pageSize = 20;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, Object> mapBean;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, String> orderBy;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupUpdateRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupUpdateRequest.java
new file mode 100644
index 0000000..63e82fd
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/GroupUpdateRequest.java
@@ -0,0 +1,28 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import com.supwisdom.institute.backend.base.domain.entity.Group;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiUpdateRequest;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class GroupUpdateRequest extends Group implements IApiUpdateRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -6406242462582902819L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ public Group getEntity() {
+ return EntityUtils.copy(this, new Group());
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionCreateRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionCreateRequest.java
new file mode 100644
index 0000000..e287f65
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionCreateRequest.java
@@ -0,0 +1,30 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiCreateRequest;
+
+/**
+ * @author loie
+ */
+public class PermissionCreateRequest extends Permission implements IApiCreateRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 8247861768124918116L;
+
+ @Getter
+ @Setter
+ private List<String> resourceIds;
+
+ public Permission getEntity() {
+ return EntityUtils.copy(this, new Permission());
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionDeleteBatchRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionDeleteBatchRequest.java
new file mode 100644
index 0000000..9777b30
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionDeleteBatchRequest.java
@@ -0,0 +1,21 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiRequest;
+
+public class PermissionDeleteBatchRequest implements IApiRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -9180558051324597595L;
+
+ @Getter
+ @Setter
+ private List<String> ids;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionQueryRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionQueryRequest.java
new file mode 100644
index 0000000..d32f363
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionQueryRequest.java
@@ -0,0 +1,40 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author loie
+ */
+public class PermissionQueryRequest implements IApiQueryRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -3944162671254599673L;
+
+ @Getter
+ @Setter
+ private boolean loadAll = false;
+ @Getter
+ @Setter
+ private int pageIndex = 0;
+ @Getter
+ @Setter
+ private int pageSize = 20;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, Object> mapBean;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, String> orderBy;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionRelateResourcesRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionRelateResourcesRequest.java
new file mode 100644
index 0000000..ae09876
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionRelateResourcesRequest.java
@@ -0,0 +1,22 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import java.util.List;
+
+import com.supwisdom.institute.backend.base.domain.entity.PermissionResource;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiRequest;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class PermissionRelateResourcesRequest implements IApiRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7016517754275684031L;
+
+ @Getter
+ @Setter
+ private List<PermissionResource> permissionResources;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionRelatedResourcesRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionRelatedResourcesRequest.java
new file mode 100644
index 0000000..4419071
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionRelatedResourcesRequest.java
@@ -0,0 +1,40 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author loie
+ */
+public class PermissionRelatedResourcesRequest implements IApiQueryRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7634304817036292579L;
+
+ @Getter
+ @Setter
+ private boolean loadAll = false;
+ @Getter
+ @Setter
+ private int pageIndex = 0;
+ @Getter
+ @Setter
+ private int pageSize = 20;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, Object> mapBean;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, String> orderBy;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionUpdateRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionUpdateRequest.java
new file mode 100644
index 0000000..00d28c4
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/PermissionUpdateRequest.java
@@ -0,0 +1,34 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import java.util.List;
+
+import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiUpdateRequest;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class PermissionUpdateRequest extends Permission implements IApiUpdateRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -5923008482749557479L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ @Getter
+ @Setter
+ private List<String> resourceIds;
+
+ public Permission getEntity() {
+ return EntityUtils.copy(this, new Permission());
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ResourceCreateRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ResourceCreateRequest.java
new file mode 100644
index 0000000..3c17cac
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ResourceCreateRequest.java
@@ -0,0 +1,21 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import com.supwisdom.institute.backend.base.domain.entity.Resource;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiCreateRequest;
+
+/**
+ * @author loie
+ */
+public class ResourceCreateRequest extends Resource implements IApiCreateRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7999657157256566904L;
+
+ public Resource getEntity() {
+ return EntityUtils.copy(this, new Resource());
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ResourceQueryRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ResourceQueryRequest.java
new file mode 100644
index 0000000..7171557
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ResourceQueryRequest.java
@@ -0,0 +1,40 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author loie
+ */
+public class ResourceQueryRequest implements IApiQueryRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -911488989591489730L;
+
+ @Getter
+ @Setter
+ private boolean loadAll = false;
+ @Getter
+ @Setter
+ private int pageIndex = 0;
+ @Getter
+ @Setter
+ private int pageSize = 20;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, Object> mapBean;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, String> orderBy;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ResourceUpdateRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ResourceUpdateRequest.java
new file mode 100644
index 0000000..596cbd7
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/ResourceUpdateRequest.java
@@ -0,0 +1,28 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import com.supwisdom.institute.backend.base.domain.entity.Resource;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiUpdateRequest;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class ResourceUpdateRequest extends Resource implements IApiUpdateRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 8922380312193462613L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ public Resource getEntity() {
+ return EntityUtils.copy(this, new Resource());
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleCreateRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleCreateRequest.java
new file mode 100644
index 0000000..e91cfba
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleCreateRequest.java
@@ -0,0 +1,21 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import com.supwisdom.institute.backend.base.domain.entity.Role;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiCreateRequest;
+
+/**
+ * @author loie
+ */
+public class RoleCreateRequest extends Role implements IApiCreateRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -5891171833738647843L;
+
+ public Role getEntity() {
+ return EntityUtils.copy(this, new Role());
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleDeleteBatchRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleDeleteBatchRequest.java
new file mode 100644
index 0000000..94a23a5
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleDeleteBatchRequest.java
@@ -0,0 +1,21 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiRequest;
+
+public class RoleDeleteBatchRequest implements IApiRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 3121491905067659896L;
+
+ @Getter
+ @Setter
+ private List<String> ids;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleQueryRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleQueryRequest.java
new file mode 100644
index 0000000..db54ea4
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleQueryRequest.java
@@ -0,0 +1,40 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author loie
+ */
+public class RoleQueryRequest implements IApiQueryRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -8717113985995182773L;
+
+ @Getter
+ @Setter
+ private boolean loadAll = false;
+ @Getter
+ @Setter
+ private int pageIndex = 0;
+ @Getter
+ @Setter
+ private int pageSize = 20;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, Object> mapBean;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, String> orderBy;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelateAccountsRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelateAccountsRequest.java
new file mode 100644
index 0000000..1fc5848
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelateAccountsRequest.java
@@ -0,0 +1,22 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.AccountRole;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiRequest;
+
+public class RoleRelateAccountsRequest implements IApiRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7935779803020137819L;
+
+ @Getter
+ @Setter
+ private List<AccountRole> roleAccounts;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelateGroupsRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelateGroupsRequest.java
new file mode 100644
index 0000000..e400df4
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelateGroupsRequest.java
@@ -0,0 +1,22 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.GroupRole;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiRequest;
+
+public class RoleRelateGroupsRequest implements IApiRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 9206282464451171269L;
+
+ @Getter
+ @Setter
+ private List<GroupRole> roleGroups;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelatePermissionsRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelatePermissionsRequest.java
new file mode 100644
index 0000000..dc31c16
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelatePermissionsRequest.java
@@ -0,0 +1,22 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.RolePermission;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiRequest;
+
+public class RoleRelatePermissionsRequest implements IApiRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7524940232102183145L;
+
+ @Getter
+ @Setter
+ private List<RolePermission> rolePermissions;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelatedAccountsRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelatedAccountsRequest.java
new file mode 100644
index 0000000..2d8b77e
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelatedAccountsRequest.java
@@ -0,0 +1,40 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author loie
+ */
+public class RoleRelatedAccountsRequest implements IApiQueryRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -1798385113493396290L;
+
+ @Getter
+ @Setter
+ private boolean loadAll = false;
+ @Getter
+ @Setter
+ private int pageIndex = 0;
+ @Getter
+ @Setter
+ private int pageSize = 20;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, Object> mapBean;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, String> orderBy;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelatedGroupsRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelatedGroupsRequest.java
new file mode 100644
index 0000000..b69aef5
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelatedGroupsRequest.java
@@ -0,0 +1,40 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author loie
+ */
+public class RoleRelatedGroupsRequest implements IApiQueryRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 7253046382409370442L;
+
+ @Getter
+ @Setter
+ private boolean loadAll = false;
+ @Getter
+ @Setter
+ private int pageIndex = 0;
+ @Getter
+ @Setter
+ private int pageSize = 20;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, Object> mapBean;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, String> orderBy;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelatedPermissionsRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelatedPermissionsRequest.java
new file mode 100644
index 0000000..7ff22a2
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleRelatedPermissionsRequest.java
@@ -0,0 +1,40 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author loie
+ */
+public class RoleRelatedPermissionsRequest implements IApiQueryRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 5695303573516182415L;
+
+ @Getter
+ @Setter
+ private boolean loadAll = false;
+ @Getter
+ @Setter
+ private int pageIndex = 0;
+ @Getter
+ @Setter
+ private int pageSize = 20;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, Object> mapBean;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, String> orderBy;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleUpdateRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleUpdateRequest.java
new file mode 100644
index 0000000..b1137db
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RoleUpdateRequest.java
@@ -0,0 +1,28 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import com.supwisdom.institute.backend.base.domain.entity.Role;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiUpdateRequest;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class RoleUpdateRequest extends Role implements IApiUpdateRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7272388577177587142L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ public Role getEntity() {
+ return EntityUtils.copy(this, new Role());
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RouteCreateRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RouteCreateRequest.java
new file mode 100644
index 0000000..f1af807
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RouteCreateRequest.java
@@ -0,0 +1,21 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import com.supwisdom.institute.backend.base.domain.entity.Route;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiCreateRequest;
+
+/**
+ * @author loie
+ */
+public class RouteCreateRequest extends Route implements IApiCreateRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -1610189545107922L;
+
+ public Route getEntity() {
+ return EntityUtils.copy(this, new Route());
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RouteDeleteBatchRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RouteDeleteBatchRequest.java
new file mode 100644
index 0000000..af2657c
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RouteDeleteBatchRequest.java
@@ -0,0 +1,21 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiRequest;
+
+public class RouteDeleteBatchRequest implements IApiRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -6325676083300813571L;
+
+ @Getter
+ @Setter
+ private List<String> ids;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RouteQueryRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RouteQueryRequest.java
new file mode 100644
index 0000000..b077d34
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RouteQueryRequest.java
@@ -0,0 +1,40 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author loie
+ */
+public class RouteQueryRequest implements IApiQueryRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 5501929058767629345L;
+
+ @Getter
+ @Setter
+ private boolean loadAll = false;
+ @Getter
+ @Setter
+ private int pageIndex = 0;
+ @Getter
+ @Setter
+ private int pageSize = 20;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, Object> mapBean;
+ @Getter
+ @Setter
+ @ApiModelProperty(hidden = true)
+ private Map<String, String> orderBy;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RouteUpdateRequest.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RouteUpdateRequest.java
new file mode 100644
index 0000000..e96eb28
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/request/RouteUpdateRequest.java
@@ -0,0 +1,28 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.request;
+
+import com.supwisdom.institute.backend.base.domain.entity.Route;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiUpdateRequest;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class RouteUpdateRequest extends Route implements IApiUpdateRequest {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -1999295284394866961L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ public Route getEntity() {
+ return EntityUtils.copy(this, new Route());
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountCreateResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountCreateResponseData.java
new file mode 100644
index 0000000..d4b91d8
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountCreateResponseData.java
@@ -0,0 +1,33 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Account;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiCreateResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class AccountCreateResponseData extends Account implements IApiCreateResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -8882701323050726169L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private AccountCreateResponseData() {
+
+ }
+
+ public static AccountCreateResponseData build(Account entity) {
+ AccountCreateResponseData data = new AccountCreateResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountDeleteBatchResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountDeleteBatchResponseData.java
new file mode 100644
index 0000000..6c471ee
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountDeleteBatchResponseData.java
@@ -0,0 +1,35 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+/**
+ * @author loie
+ */
+public class AccountDeleteBatchResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 8625399816385346436L;
+
+ @Getter
+ @Setter
+ private List<String> ids;
+
+ private AccountDeleteBatchResponseData() {
+
+ }
+
+ public static AccountDeleteBatchResponseData build(List<String> ids) {
+ AccountDeleteBatchResponseData data = new AccountDeleteBatchResponseData();
+ data.setIds(ids);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountLoadResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountLoadResponseData.java
new file mode 100644
index 0000000..a9f250d
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountLoadResponseData.java
@@ -0,0 +1,33 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Account;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiLoadResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class AccountLoadResponseData extends Account implements IApiLoadResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -8236721435440256832L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private AccountLoadResponseData() {
+
+ }
+
+ public static AccountLoadResponseData of(Account entity) {
+ AccountLoadResponseData data = new AccountLoadResponseData();
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountQueryResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountQueryResponseData.java
new file mode 100644
index 0000000..a36d033
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountQueryResponseData.java
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+
+import com.supwisdom.institute.backend.base.domain.entity.Account;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+/**
+ * @author loie
+ */
+public class AccountQueryResponseData implements IApiQueryResponseData<Account> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 3949426339318397970L;
+
+ private AccountQueryResponseData(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+ this.loadAll = loadAll;
+ this.pageIndex = pageIndex;
+ this.pageSize = pageSize;
+ this.mapBean = mapBean;
+ this.orderBy = orderBy;
+ }
+
+ public static AccountQueryResponseData of(IApiQueryRequest queryRequest) {
+ AccountQueryResponseData configQueryResponse = new AccountQueryResponseData(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy()
+ );
+
+ return configQueryResponse;
+ }
+
+ public AccountQueryResponseData build(Page<Account> page) {
+ this.currentItemCount = page.getNumberOfElements();
+ this.pageCount = page.getTotalPages();
+ this.recordCount = page.getTotalElements();
+ this.items = page.getContent();
+
+ return this;
+ }
+
+ @Getter
+ private boolean loadAll;
+ @Getter
+ private int pageIndex;
+ @Getter
+ private int pageSize;
+ @Getter
+ private Map<String, Object> mapBean;
+ @Getter
+ private Map<String, String> orderBy;
+
+ @Getter
+ @Setter
+ private int pageCount;
+ @Getter
+ @Setter
+ private long recordCount;
+
+ @Getter
+ @Setter
+ private int currentItemCount;
+
+ @Getter
+ @Setter
+ private List<Account> items;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRelateGroupsResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRelateGroupsResponseData.java
new file mode 100644
index 0000000..a269841
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRelateGroupsResponseData.java
@@ -0,0 +1,29 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+public class AccountRelateGroupsResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -720047649055920794L;
+
+ @Getter
+ @Setter
+ private String message;
+
+ public AccountRelateGroupsResponseData(String message) {
+ this.message = message;
+ }
+
+ public static AccountRelateGroupsResponseData of(String message) {
+ AccountRelateGroupsResponseData data = new AccountRelateGroupsResponseData(message);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRelateRolesResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRelateRolesResponseData.java
new file mode 100644
index 0000000..93895ff
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRelateRolesResponseData.java
@@ -0,0 +1,29 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+public class AccountRelateRolesResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -5011147266134585651L;
+
+ @Getter
+ @Setter
+ private String message;
+
+ public AccountRelateRolesResponseData(String message) {
+ this.message = message;
+ }
+
+ public static AccountRelateRolesResponseData of(String message) {
+ AccountRelateRolesResponseData data = new AccountRelateRolesResponseData(message);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRelatedGroupsResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRelatedGroupsResponseData.java
new file mode 100644
index 0000000..802437d
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRelatedGroupsResponseData.java
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+
+import com.supwisdom.institute.backend.base.domain.entity.AccountGroup;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+/**
+ * @author loie
+ */
+public class AccountRelatedGroupsResponseData implements IApiQueryResponseData<AccountGroup> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 3949426339318397970L;
+
+ private AccountRelatedGroupsResponseData(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+ this.loadAll = loadAll;
+ this.pageIndex = pageIndex;
+ this.pageSize = pageSize;
+ this.mapBean = mapBean;
+ this.orderBy = orderBy;
+ }
+
+ public static AccountRelatedGroupsResponseData of(IApiQueryRequest queryRequest) {
+ AccountRelatedGroupsResponseData configQueryResponse = new AccountRelatedGroupsResponseData(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy()
+ );
+
+ return configQueryResponse;
+ }
+
+ public AccountRelatedGroupsResponseData build(Page<AccountGroup> page) {
+ this.currentItemCount = page.getNumberOfElements();
+ this.pageCount = page.getTotalPages();
+ this.recordCount = page.getTotalElements();
+ this.items = page.getContent();
+
+ return this;
+ }
+
+ @Getter
+ private boolean loadAll;
+ @Getter
+ private int pageIndex;
+ @Getter
+ private int pageSize;
+ @Getter
+ private Map<String, Object> mapBean;
+ @Getter
+ private Map<String, String> orderBy;
+
+ @Getter
+ @Setter
+ private int pageCount;
+ @Getter
+ @Setter
+ private long recordCount;
+
+ @Getter
+ @Setter
+ private int currentItemCount;
+
+ @Getter
+ @Setter
+ private List<AccountGroup> items;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRelatedRolesResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRelatedRolesResponseData.java
new file mode 100644
index 0000000..5289a30
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRelatedRolesResponseData.java
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+
+import com.supwisdom.institute.backend.base.domain.entity.AccountRole;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+/**
+ * @author loie
+ */
+public class AccountRelatedRolesResponseData implements IApiQueryResponseData<AccountRole> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 4933467585328478547L;
+
+ private AccountRelatedRolesResponseData(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+ this.loadAll = loadAll;
+ this.pageIndex = pageIndex;
+ this.pageSize = pageSize;
+ this.mapBean = mapBean;
+ this.orderBy = orderBy;
+ }
+
+ public static AccountRelatedRolesResponseData of(IApiQueryRequest queryRequest) {
+ AccountRelatedRolesResponseData configQueryResponse = new AccountRelatedRolesResponseData(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy()
+ );
+
+ return configQueryResponse;
+ }
+
+ public AccountRelatedRolesResponseData build(Page<AccountRole> page) {
+ this.currentItemCount = page.getNumberOfElements();
+ this.pageCount = page.getTotalPages();
+ this.recordCount = page.getTotalElements();
+ this.items = page.getContent();
+
+ return this;
+ }
+
+ @Getter
+ private boolean loadAll;
+ @Getter
+ private int pageIndex;
+ @Getter
+ private int pageSize;
+ @Getter
+ private Map<String, Object> mapBean;
+ @Getter
+ private Map<String, String> orderBy;
+
+ @Getter
+ @Setter
+ private int pageCount;
+ @Getter
+ @Setter
+ private long recordCount;
+
+ @Getter
+ @Setter
+ private int currentItemCount;
+
+ @Getter
+ @Setter
+ private List<AccountRole> items;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRemoveResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRemoveResponseData.java
new file mode 100644
index 0000000..40d0b87
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountRemoveResponseData.java
@@ -0,0 +1,34 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.Account;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiRemoveResponseData;
+
+/**
+ * @author loie
+ */
+public class AccountRemoveResponseData implements IApiRemoveResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 8510464738198696332L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private AccountRemoveResponseData() {
+
+ }
+
+ public static AccountRemoveResponseData build(Account entity) {
+ AccountRemoveResponseData data = new AccountRemoveResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountUpdateResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountUpdateResponseData.java
new file mode 100644
index 0000000..59cba51
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/AccountUpdateResponseData.java
@@ -0,0 +1,34 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Account;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiUpdateResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class AccountUpdateResponseData extends Account implements IApiUpdateResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7885193620877829529L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private AccountUpdateResponseData() {
+
+ }
+
+ public static AccountUpdateResponseData build(Account entity) {
+ AccountUpdateResponseData data = new AccountUpdateResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationCreateResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationCreateResponseData.java
new file mode 100644
index 0000000..b4a7c94
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationCreateResponseData.java
@@ -0,0 +1,33 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Application;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiCreateResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class ApplicationCreateResponseData extends Application implements IApiCreateResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -5986639173730939508L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private ApplicationCreateResponseData() {
+
+ }
+
+ public static ApplicationCreateResponseData build(Application entity) {
+ ApplicationCreateResponseData data = new ApplicationCreateResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationDeleteBatchResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationDeleteBatchResponseData.java
new file mode 100644
index 0000000..9e22692
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationDeleteBatchResponseData.java
@@ -0,0 +1,35 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+/**
+ * @author loie
+ */
+public class ApplicationDeleteBatchResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -1441419457044931039L;
+
+ @Getter
+ @Setter
+ private List<String> ids;
+
+ private ApplicationDeleteBatchResponseData() {
+
+ }
+
+ public static ApplicationDeleteBatchResponseData build(List<String> ids) {
+ ApplicationDeleteBatchResponseData data = new ApplicationDeleteBatchResponseData();
+ data.setIds(ids);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationLoadResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationLoadResponseData.java
new file mode 100644
index 0000000..27acd2f
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationLoadResponseData.java
@@ -0,0 +1,33 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Application;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiLoadResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class ApplicationLoadResponseData extends Application implements IApiLoadResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -4866881763278414027L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private ApplicationLoadResponseData() {
+
+ }
+
+ public static ApplicationLoadResponseData of(Application entity) {
+ ApplicationLoadResponseData data = new ApplicationLoadResponseData();
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationQueryResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationQueryResponseData.java
new file mode 100644
index 0000000..c0fb9bd
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationQueryResponseData.java
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+
+import com.supwisdom.institute.backend.base.domain.entity.Application;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+/**
+ * @author loie
+ */
+public class ApplicationQueryResponseData implements IApiQueryResponseData<Application> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1355060716641084862L;
+
+ private ApplicationQueryResponseData(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+ this.loadAll = loadAll;
+ this.pageIndex = pageIndex;
+ this.pageSize = pageSize;
+ this.mapBean = mapBean;
+ this.orderBy = orderBy;
+ }
+
+ public static ApplicationQueryResponseData of(IApiQueryRequest queryRequest) {
+ ApplicationQueryResponseData configQueryResponse = new ApplicationQueryResponseData(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy()
+ );
+
+ return configQueryResponse;
+ }
+
+ public ApplicationQueryResponseData build(Page<Application> page) {
+ this.currentItemCount = page.getNumberOfElements();
+ this.pageCount = page.getTotalPages();
+ this.recordCount = page.getTotalElements();
+ this.items = page.getContent();
+
+ return this;
+ }
+
+ @Getter
+ private boolean loadAll;
+ @Getter
+ private int pageIndex;
+ @Getter
+ private int pageSize;
+ @Getter
+ private Map<String, Object> mapBean;
+ @Getter
+ private Map<String, String> orderBy;
+
+ @Getter
+ @Setter
+ private int pageCount;
+ @Getter
+ @Setter
+ private long recordCount;
+
+ @Getter
+ @Setter
+ private int currentItemCount;
+
+ @Getter
+ @Setter
+ private List<Application> items;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationRemoveResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationRemoveResponseData.java
new file mode 100644
index 0000000..97f1a87
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationRemoveResponseData.java
@@ -0,0 +1,34 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.Application;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiRemoveResponseData;
+
+/**
+ * @author loie
+ */
+public class ApplicationRemoveResponseData implements IApiRemoveResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -8179059520857121842L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private ApplicationRemoveResponseData() {
+
+ }
+
+ public static ApplicationRemoveResponseData build(Application entity) {
+ ApplicationRemoveResponseData data = new ApplicationRemoveResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationUpdateResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationUpdateResponseData.java
new file mode 100644
index 0000000..1a72e5c
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ApplicationUpdateResponseData.java
@@ -0,0 +1,34 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Application;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiUpdateResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class ApplicationUpdateResponseData extends Application implements IApiUpdateResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2690439553701722798L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private ApplicationUpdateResponseData() {
+
+ }
+
+ public static ApplicationUpdateResponseData build(Application entity) {
+ ApplicationUpdateResponseData data = new ApplicationUpdateResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigCreateResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigCreateResponseData.java
new file mode 100644
index 0000000..663f179
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigCreateResponseData.java
@@ -0,0 +1,32 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Config;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiCreateResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class ConfigCreateResponseData extends Config implements IApiCreateResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2300091307366254182L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private ConfigCreateResponseData() {
+
+ }
+
+ public static ConfigCreateResponseData build(Config entity) {
+ ConfigCreateResponseData configCreateResponse = new ConfigCreateResponseData();
+ return EntityUtils.copy(entity, configCreateResponse);
+ }
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigLoadResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigLoadResponseData.java
new file mode 100644
index 0000000..c8ddafa
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigLoadResponseData.java
@@ -0,0 +1,34 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Config;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiLoadResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class ConfigLoadResponseData extends Config implements IApiLoadResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -579946566129915779L;
+
+ @Getter
+ @Setter
+ private String id;
+
+
+ private ConfigLoadResponseData() {
+
+ }
+
+ public static ConfigLoadResponseData build(Config entity) {
+ ConfigLoadResponseData configCreateResponse = new ConfigLoadResponseData();
+ return EntityUtils.copy(entity, configCreateResponse);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigQueryResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigQueryResponseData.java
new file mode 100644
index 0000000..6255a4b
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigQueryResponseData.java
@@ -0,0 +1,83 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+
+import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.ConfigQueryRequest;
+import com.supwisdom.institute.backend.base.domain.entity.Config;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+/**
+ * @author loie
+ */
+public class ConfigQueryResponseData implements IApiQueryResponseData<Config> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 3188467441502226095L;
+
+// private ConfigQueryResponseData() {
+// }
+
+ public ConfigQueryResponseData(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+ this.loadAll = loadAll;
+ this.pageIndex = pageIndex;
+ this.pageSize = pageSize;
+ this.mapBean = mapBean;
+ this.orderBy = orderBy;
+ }
+
+ public static ConfigQueryResponseData of(ConfigQueryRequest configQueryRequest) {
+ ConfigQueryResponseData configQueryResponse = new ConfigQueryResponseData(
+ configQueryRequest.isLoadAll(),
+ configQueryRequest.getPageIndex(),
+ configQueryRequest.getPageSize(),
+ configQueryRequest.getMapBean(),
+ configQueryRequest.getOrderBy()
+ );
+
+ return configQueryResponse;
+ }
+
+ public ConfigQueryResponseData build(Page<Config> page) {
+ this.currentItemCount = page.getNumberOfElements();
+ this.pageCount = page.getTotalPages();
+ this.recordCount = page.getTotalElements();
+ this.items = page.getContent();
+
+ return this;
+ }
+
+ @Getter
+ private boolean loadAll;
+ @Getter
+ private int pageIndex;
+ @Getter
+ private int pageSize;
+ @Getter
+ private Map<String, Object> mapBean;
+ @Getter
+ private Map<String, String> orderBy;
+
+ @Getter
+ @Setter
+ private int pageCount;
+ @Getter
+ @Setter
+ private long recordCount;
+
+ @Getter
+ @Setter
+ private int currentItemCount;
+
+ @Getter
+ @Setter
+ private List<Config> items;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigRemoveResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigRemoveResponseData.java
new file mode 100644
index 0000000..e656a1f
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigRemoveResponseData.java
@@ -0,0 +1,33 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.Config;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiRemoveResponseData;
+
+/**
+ * @author loie
+ */
+public class ConfigRemoveResponseData implements IApiRemoveResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 8510464738198696332L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private ConfigRemoveResponseData() {
+
+ }
+
+ public static ConfigRemoveResponseData build(Config entity) {
+ ConfigRemoveResponseData configRemoveResponse = new ConfigRemoveResponseData();
+ return EntityUtils.copy(entity, configRemoveResponse);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigUpdateResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigUpdateResponseData.java
new file mode 100644
index 0000000..df4de29
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ConfigUpdateResponseData.java
@@ -0,0 +1,33 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Config;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiUpdateResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class ConfigUpdateResponseData extends Config implements IApiUpdateResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 2798387429543859170L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private ConfigUpdateResponseData() {
+
+ }
+
+ public static ConfigUpdateResponseData build(Config entity) {
+ ConfigUpdateResponseData configUpdateResponse = new ConfigUpdateResponseData();
+ return EntityUtils.copy(entity, configUpdateResponse);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupCreateResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupCreateResponseData.java
new file mode 100644
index 0000000..4c3f545
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupCreateResponseData.java
@@ -0,0 +1,33 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Group;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiCreateResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class GroupCreateResponseData extends Group implements IApiCreateResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 3720317246428656184L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private GroupCreateResponseData() {
+
+ }
+
+ public static GroupCreateResponseData build(Group entity) {
+ GroupCreateResponseData data = new GroupCreateResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupLoadResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupLoadResponseData.java
new file mode 100644
index 0000000..a3b83b0
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupLoadResponseData.java
@@ -0,0 +1,33 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Group;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiLoadResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class GroupLoadResponseData extends Group implements IApiLoadResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 8064680472492241116L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private GroupLoadResponseData() {
+
+ }
+
+ public static GroupLoadResponseData of(Group entity) {
+ GroupLoadResponseData data = new GroupLoadResponseData();
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupQueryResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupQueryResponseData.java
new file mode 100644
index 0000000..20e6fac
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupQueryResponseData.java
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+
+import com.supwisdom.institute.backend.base.domain.entity.Group;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+/**
+ * @author loie
+ */
+public class GroupQueryResponseData implements IApiQueryResponseData<Group> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -1512126460241874099L;
+
+ private GroupQueryResponseData(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+ this.loadAll = loadAll;
+ this.pageIndex = pageIndex;
+ this.pageSize = pageSize;
+ this.mapBean = mapBean;
+ this.orderBy = orderBy;
+ }
+
+ public static GroupQueryResponseData of(IApiQueryRequest queryRequest) {
+ GroupQueryResponseData configQueryResponse = new GroupQueryResponseData(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy()
+ );
+
+ return configQueryResponse;
+ }
+
+ public GroupQueryResponseData build(Page<Group> page) {
+ this.currentItemCount = page.getNumberOfElements();
+ this.pageCount = page.getTotalPages();
+ this.recordCount = page.getTotalElements();
+ this.items = page.getContent();
+
+ return this;
+ }
+
+ @Getter
+ private boolean loadAll;
+ @Getter
+ private int pageIndex;
+ @Getter
+ private int pageSize;
+ @Getter
+ private Map<String, Object> mapBean;
+ @Getter
+ private Map<String, String> orderBy;
+
+ @Getter
+ @Setter
+ private int pageCount;
+ @Getter
+ @Setter
+ private long recordCount;
+
+ @Getter
+ @Setter
+ private int currentItemCount;
+
+ @Getter
+ @Setter
+ private List<Group> items;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRelateAccountsResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRelateAccountsResponseData.java
new file mode 100644
index 0000000..fbc6b08
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRelateAccountsResponseData.java
@@ -0,0 +1,29 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+public class GroupRelateAccountsResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -6510043291221068404L;
+
+ @Getter
+ @Setter
+ private String message;
+
+ public GroupRelateAccountsResponseData(String message) {
+ this.message = message;
+ }
+
+ public static GroupRelateAccountsResponseData of(String message) {
+ GroupRelateAccountsResponseData data = new GroupRelateAccountsResponseData(message);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRelateRolesResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRelateRolesResponseData.java
new file mode 100644
index 0000000..104041c
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRelateRolesResponseData.java
@@ -0,0 +1,29 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+public class GroupRelateRolesResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1758005341902663320L;
+
+ @Getter
+ @Setter
+ private String message;
+
+ public GroupRelateRolesResponseData(String message) {
+ this.message = message;
+ }
+
+ public static GroupRelateRolesResponseData of(String message) {
+ GroupRelateRolesResponseData data = new GroupRelateRolesResponseData(message);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRelatedAccountsResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRelatedAccountsResponseData.java
new file mode 100644
index 0000000..1e9e819
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRelatedAccountsResponseData.java
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+
+import com.supwisdom.institute.backend.base.domain.entity.AccountGroup;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+/**
+ * @author loie
+ */
+public class GroupRelatedAccountsResponseData implements IApiQueryResponseData<AccountGroup> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -6697630069320874813L;
+
+ private GroupRelatedAccountsResponseData(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+ this.loadAll = loadAll;
+ this.pageIndex = pageIndex;
+ this.pageSize = pageSize;
+ this.mapBean = mapBean;
+ this.orderBy = orderBy;
+ }
+
+ public static GroupRelatedAccountsResponseData of(IApiQueryRequest queryRequest) {
+ GroupRelatedAccountsResponseData configQueryResponse = new GroupRelatedAccountsResponseData(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy()
+ );
+
+ return configQueryResponse;
+ }
+
+ public GroupRelatedAccountsResponseData build(Page<AccountGroup> page) {
+ this.currentItemCount = page.getNumberOfElements();
+ this.pageCount = page.getTotalPages();
+ this.recordCount = page.getTotalElements();
+ this.items = page.getContent();
+
+ return this;
+ }
+
+ @Getter
+ private boolean loadAll;
+ @Getter
+ private int pageIndex;
+ @Getter
+ private int pageSize;
+ @Getter
+ private Map<String, Object> mapBean;
+ @Getter
+ private Map<String, String> orderBy;
+
+ @Getter
+ @Setter
+ private int pageCount;
+ @Getter
+ @Setter
+ private long recordCount;
+
+ @Getter
+ @Setter
+ private int currentItemCount;
+
+ @Getter
+ @Setter
+ private List<AccountGroup> items;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRelatedRolesResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRelatedRolesResponseData.java
new file mode 100644
index 0000000..4ae2d5f
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRelatedRolesResponseData.java
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+
+import com.supwisdom.institute.backend.base.domain.entity.GroupRole;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+/**
+ * @author loie
+ */
+public class GroupRelatedRolesResponseData implements IApiQueryResponseData<GroupRole> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1574248919628509262L;
+
+ private GroupRelatedRolesResponseData(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+ this.loadAll = loadAll;
+ this.pageIndex = pageIndex;
+ this.pageSize = pageSize;
+ this.mapBean = mapBean;
+ this.orderBy = orderBy;
+ }
+
+ public static GroupRelatedRolesResponseData of(IApiQueryRequest queryRequest) {
+ GroupRelatedRolesResponseData configQueryResponse = new GroupRelatedRolesResponseData(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy()
+ );
+
+ return configQueryResponse;
+ }
+
+ public GroupRelatedRolesResponseData build(Page<GroupRole> page) {
+ this.currentItemCount = page.getNumberOfElements();
+ this.pageCount = page.getTotalPages();
+ this.recordCount = page.getTotalElements();
+ this.items = page.getContent();
+
+ return this;
+ }
+
+ @Getter
+ private boolean loadAll;
+ @Getter
+ private int pageIndex;
+ @Getter
+ private int pageSize;
+ @Getter
+ private Map<String, Object> mapBean;
+ @Getter
+ private Map<String, String> orderBy;
+
+ @Getter
+ @Setter
+ private int pageCount;
+ @Getter
+ @Setter
+ private long recordCount;
+
+ @Getter
+ @Setter
+ private int currentItemCount;
+
+ @Getter
+ @Setter
+ private List<GroupRole> items;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRemoveResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRemoveResponseData.java
new file mode 100644
index 0000000..08e7440
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupRemoveResponseData.java
@@ -0,0 +1,34 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.Group;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiRemoveResponseData;
+
+/**
+ * @author loie
+ */
+public class GroupRemoveResponseData implements IApiRemoveResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -8704397808353314340L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private GroupRemoveResponseData() {
+
+ }
+
+ public static GroupRemoveResponseData build(Group entity) {
+ GroupRemoveResponseData data = new GroupRemoveResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupUpdateResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupUpdateResponseData.java
new file mode 100644
index 0000000..3ae507d
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/GroupUpdateResponseData.java
@@ -0,0 +1,34 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Group;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiUpdateResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class GroupUpdateResponseData extends Group implements IApiUpdateResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -1248124641996970651L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private GroupUpdateResponseData() {
+
+ }
+
+ public static GroupUpdateResponseData build(Group entity) {
+ GroupUpdateResponseData data = new GroupUpdateResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionCreateResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionCreateResponseData.java
new file mode 100644
index 0000000..cec1042
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionCreateResponseData.java
@@ -0,0 +1,33 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiCreateResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class PermissionCreateResponseData extends Permission implements IApiCreateResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 4619013116994825066L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private PermissionCreateResponseData() {
+
+ }
+
+ public static PermissionCreateResponseData build(Permission entity) {
+ PermissionCreateResponseData data = new PermissionCreateResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionDeleteBatchResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionDeleteBatchResponseData.java
new file mode 100644
index 0000000..f1626bf
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionDeleteBatchResponseData.java
@@ -0,0 +1,35 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+/**
+ * @author loie
+ */
+public class PermissionDeleteBatchResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7406287471651267066L;
+
+ @Getter
+ @Setter
+ private List<String> ids;
+
+ private PermissionDeleteBatchResponseData() {
+
+ }
+
+ public static PermissionDeleteBatchResponseData build(List<String> ids) {
+ PermissionDeleteBatchResponseData data = new PermissionDeleteBatchResponseData();
+ data.setIds(ids);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionLoadResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionLoadResponseData.java
new file mode 100644
index 0000000..3815743
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionLoadResponseData.java
@@ -0,0 +1,44 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import java.util.List;
+
+import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiLoadResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class PermissionLoadResponseData extends Permission implements IApiLoadResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2692036336252091453L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ @Getter
+ @Setter
+ private List<String> resourceIds;
+
+
+ private PermissionLoadResponseData() {
+
+ }
+
+ public static PermissionLoadResponseData of(Permission entity, List<String> resourceIds) {
+ PermissionLoadResponseData data = new PermissionLoadResponseData();
+
+ EntityUtils.copy(entity, data);
+ data.setResourceIds(resourceIds);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionQueryResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionQueryResponseData.java
new file mode 100644
index 0000000..436a7ee
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionQueryResponseData.java
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+
+import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+/**
+ * @author loie
+ */
+public class PermissionQueryResponseData implements IApiQueryResponseData<Permission> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -8586983968415937644L;
+
+ private PermissionQueryResponseData(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+ this.loadAll = loadAll;
+ this.pageIndex = pageIndex;
+ this.pageSize = pageSize;
+ this.mapBean = mapBean;
+ this.orderBy = orderBy;
+ }
+
+ public static PermissionQueryResponseData of(IApiQueryRequest queryRequest) {
+ PermissionQueryResponseData configQueryResponse = new PermissionQueryResponseData(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy()
+ );
+
+ return configQueryResponse;
+ }
+
+ public PermissionQueryResponseData build(Page<Permission> page) {
+ this.currentItemCount = page.getNumberOfElements();
+ this.pageCount = page.getTotalPages();
+ this.recordCount = page.getTotalElements();
+ this.items = page.getContent();
+
+ return this;
+ }
+
+ @Getter
+ private boolean loadAll;
+ @Getter
+ private int pageIndex;
+ @Getter
+ private int pageSize;
+ @Getter
+ private Map<String, Object> mapBean;
+ @Getter
+ private Map<String, String> orderBy;
+
+ @Getter
+ @Setter
+ private int pageCount;
+ @Getter
+ @Setter
+ private long recordCount;
+
+ @Getter
+ @Setter
+ private int currentItemCount;
+
+ @Getter
+ @Setter
+ private List<Permission> items;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionRelateResourcesResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionRelateResourcesResponseData.java
new file mode 100644
index 0000000..e895aac
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionRelateResourcesResponseData.java
@@ -0,0 +1,29 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class PermissionRelateResourcesResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 5576856617389758687L;
+
+ @Getter
+ @Setter
+ private String message;
+
+ public PermissionRelateResourcesResponseData(String message) {
+ this.message = message;
+ }
+
+ public static PermissionRelateResourcesResponseData of(String message) {
+ PermissionRelateResourcesResponseData data = new PermissionRelateResourcesResponseData(message);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionRelatedResourcesResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionRelatedResourcesResponseData.java
new file mode 100644
index 0000000..969d3c6
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionRelatedResourcesResponseData.java
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+
+import com.supwisdom.institute.backend.base.domain.entity.PermissionResource;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+/**
+ * @author loie
+ */
+public class PermissionRelatedResourcesResponseData implements IApiQueryResponseData<PermissionResource> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2095633445866557991L;
+
+ private PermissionRelatedResourcesResponseData(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+ this.loadAll = loadAll;
+ this.pageIndex = pageIndex;
+ this.pageSize = pageSize;
+ this.mapBean = mapBean;
+ this.orderBy = orderBy;
+ }
+
+ public static PermissionRelatedResourcesResponseData of(IApiQueryRequest queryRequest) {
+ PermissionRelatedResourcesResponseData configQueryResponse = new PermissionRelatedResourcesResponseData(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy()
+ );
+
+ return configQueryResponse;
+ }
+
+ public PermissionRelatedResourcesResponseData build(Page<PermissionResource> page) {
+ this.currentItemCount = page.getNumberOfElements();
+ this.pageCount = page.getTotalPages();
+ this.recordCount = page.getTotalElements();
+ this.items = page.getContent();
+
+ return this;
+ }
+
+ @Getter
+ private boolean loadAll;
+ @Getter
+ private int pageIndex;
+ @Getter
+ private int pageSize;
+ @Getter
+ private Map<String, Object> mapBean;
+ @Getter
+ private Map<String, String> orderBy;
+
+ @Getter
+ @Setter
+ private int pageCount;
+ @Getter
+ @Setter
+ private long recordCount;
+
+ @Getter
+ @Setter
+ private int currentItemCount;
+
+ @Getter
+ @Setter
+ private List<PermissionResource> items;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionRemoveResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionRemoveResponseData.java
new file mode 100644
index 0000000..d54d0a1
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionRemoveResponseData.java
@@ -0,0 +1,34 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiRemoveResponseData;
+
+/**
+ * @author loie
+ */
+public class PermissionRemoveResponseData implements IApiRemoveResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 216116075050505802L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private PermissionRemoveResponseData() {
+
+ }
+
+ public static PermissionRemoveResponseData build(Permission entity) {
+ PermissionRemoveResponseData data = new PermissionRemoveResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionTreeResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionTreeResponseData.java
new file mode 100644
index 0000000..1735549
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionTreeResponseData.java
@@ -0,0 +1,31 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.model.PermissionTreeNode;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+public class PermissionTreeResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -6659447453323545811L;
+
+ public PermissionTreeResponseData(PermissionTreeNode tree) {
+ this.tree = tree;
+ }
+
+ @Getter
+ @Setter
+ private PermissionTreeNode tree;
+
+ public static PermissionTreeResponseData of(PermissionTreeNode tree) {
+ PermissionTreeResponseData data = new PermissionTreeResponseData(tree);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionUpdateResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionUpdateResponseData.java
new file mode 100644
index 0000000..806c2c6
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/PermissionUpdateResponseData.java
@@ -0,0 +1,34 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiUpdateResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class PermissionUpdateResponseData extends Permission implements IApiUpdateResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7627522286872083527L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private PermissionUpdateResponseData() {
+
+ }
+
+ public static PermissionUpdateResponseData build(Permission entity) {
+ PermissionUpdateResponseData data = new PermissionUpdateResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceCreateResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceCreateResponseData.java
new file mode 100644
index 0000000..1a07eb1
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceCreateResponseData.java
@@ -0,0 +1,33 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Resource;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiCreateResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class ResourceCreateResponseData extends Resource implements IApiCreateResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -1679712204106541555L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private ResourceCreateResponseData() {
+
+ }
+
+ public static ResourceCreateResponseData build(Resource entity) {
+ ResourceCreateResponseData data = new ResourceCreateResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceLoadResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceLoadResponseData.java
new file mode 100644
index 0000000..289e776
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceLoadResponseData.java
@@ -0,0 +1,33 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Resource;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiLoadResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class ResourceLoadResponseData extends Resource implements IApiLoadResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -8194462780086471511L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private ResourceLoadResponseData() {
+
+ }
+
+ public static ResourceLoadResponseData of(Resource entity) {
+ ResourceLoadResponseData data = new ResourceLoadResponseData();
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceQueryResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceQueryResponseData.java
new file mode 100644
index 0000000..b591899
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceQueryResponseData.java
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+
+import com.supwisdom.institute.backend.base.domain.entity.Resource;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+/**
+ * @author loie
+ */
+public class ResourceQueryResponseData implements IApiQueryResponseData<Resource> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 241098548786558434L;
+
+ private ResourceQueryResponseData(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+ this.loadAll = loadAll;
+ this.pageIndex = pageIndex;
+ this.pageSize = pageSize;
+ this.mapBean = mapBean;
+ this.orderBy = orderBy;
+ }
+
+ public static ResourceQueryResponseData of(IApiQueryRequest queryRequest) {
+ ResourceQueryResponseData configQueryResponse = new ResourceQueryResponseData(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy()
+ );
+
+ return configQueryResponse;
+ }
+
+ public ResourceQueryResponseData build(Page<Resource> page) {
+ this.currentItemCount = page.getNumberOfElements();
+ this.pageCount = page.getTotalPages();
+ this.recordCount = page.getTotalElements();
+ this.items = page.getContent();
+
+ return this;
+ }
+
+ @Getter
+ private boolean loadAll;
+ @Getter
+ private int pageIndex;
+ @Getter
+ private int pageSize;
+ @Getter
+ private Map<String, Object> mapBean;
+ @Getter
+ private Map<String, String> orderBy;
+
+ @Getter
+ @Setter
+ private int pageCount;
+ @Getter
+ @Setter
+ private long recordCount;
+
+ @Getter
+ @Setter
+ private int currentItemCount;
+
+ @Getter
+ @Setter
+ private List<Resource> items;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceRemoveResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceRemoveResponseData.java
new file mode 100644
index 0000000..ecc9988
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceRemoveResponseData.java
@@ -0,0 +1,34 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.Resource;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiRemoveResponseData;
+
+/**
+ * @author loie
+ */
+public class ResourceRemoveResponseData implements IApiRemoveResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 2847742767960670522L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private ResourceRemoveResponseData() {
+
+ }
+
+ public static ResourceRemoveResponseData build(Resource entity) {
+ ResourceRemoveResponseData data = new ResourceRemoveResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceUpdateResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceUpdateResponseData.java
new file mode 100644
index 0000000..f6c4292
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/ResourceUpdateResponseData.java
@@ -0,0 +1,34 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Resource;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiUpdateResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class ResourceUpdateResponseData extends Resource implements IApiUpdateResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 893314081061207360L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private ResourceUpdateResponseData() {
+
+ }
+
+ public static ResourceUpdateResponseData build(Resource entity) {
+ ResourceUpdateResponseData data = new ResourceUpdateResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleCreateResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleCreateResponseData.java
new file mode 100644
index 0000000..bae356d
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleCreateResponseData.java
@@ -0,0 +1,33 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Role;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiCreateResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class RoleCreateResponseData extends Role implements IApiCreateResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -6548339240060091209L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private RoleCreateResponseData() {
+
+ }
+
+ public static RoleCreateResponseData build(Role entity) {
+ RoleCreateResponseData data = new RoleCreateResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleDeleteBatchResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleDeleteBatchResponseData.java
new file mode 100644
index 0000000..61776d3
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleDeleteBatchResponseData.java
@@ -0,0 +1,35 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+/**
+ * @author loie
+ */
+public class RoleDeleteBatchResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7775951512990321469L;
+
+ @Getter
+ @Setter
+ private List<String> ids;
+
+ private RoleDeleteBatchResponseData() {
+
+ }
+
+ public static RoleDeleteBatchResponseData build(List<String> ids) {
+ RoleDeleteBatchResponseData data = new RoleDeleteBatchResponseData();
+ data.setIds(ids);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleLoadResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleLoadResponseData.java
new file mode 100644
index 0000000..bbbc439
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleLoadResponseData.java
@@ -0,0 +1,33 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Role;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiLoadResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class RoleLoadResponseData extends Role implements IApiLoadResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 57708002489387653L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private RoleLoadResponseData() {
+
+ }
+
+ public static RoleLoadResponseData of(Role entity) {
+ RoleLoadResponseData data = new RoleLoadResponseData();
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleQueryResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleQueryResponseData.java
new file mode 100644
index 0000000..24d6a09
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleQueryResponseData.java
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+
+import com.supwisdom.institute.backend.base.domain.entity.Role;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+/**
+ * @author loie
+ */
+public class RoleQueryResponseData implements IApiQueryResponseData<Role> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 2542992897241822185L;
+
+ private RoleQueryResponseData(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+ this.loadAll = loadAll;
+ this.pageIndex = pageIndex;
+ this.pageSize = pageSize;
+ this.mapBean = mapBean;
+ this.orderBy = orderBy;
+ }
+
+ public static RoleQueryResponseData of(IApiQueryRequest queryRequest) {
+ RoleQueryResponseData configQueryResponse = new RoleQueryResponseData(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy()
+ );
+
+ return configQueryResponse;
+ }
+
+ public RoleQueryResponseData build(Page<Role> page) {
+ this.currentItemCount = page.getNumberOfElements();
+ this.pageCount = page.getTotalPages();
+ this.recordCount = page.getTotalElements();
+ this.items = page.getContent();
+
+ return this;
+ }
+
+ @Getter
+ private boolean loadAll;
+ @Getter
+ private int pageIndex;
+ @Getter
+ private int pageSize;
+ @Getter
+ private Map<String, Object> mapBean;
+ @Getter
+ private Map<String, String> orderBy;
+
+ @Getter
+ @Setter
+ private int pageCount;
+ @Getter
+ @Setter
+ private long recordCount;
+
+ @Getter
+ @Setter
+ private int currentItemCount;
+
+ @Getter
+ @Setter
+ private List<Role> items;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelateAccountsResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelateAccountsResponseData.java
new file mode 100644
index 0000000..f137972
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelateAccountsResponseData.java
@@ -0,0 +1,29 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+public class RoleRelateAccountsResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -1732402839300368775L;
+
+ @Getter
+ @Setter
+ private String message;
+
+ public RoleRelateAccountsResponseData(String message) {
+ this.message = message;
+ }
+
+ public static RoleRelateAccountsResponseData of(String message) {
+ RoleRelateAccountsResponseData data = new RoleRelateAccountsResponseData(message);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelateGroupsResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelateGroupsResponseData.java
new file mode 100644
index 0000000..5c752ae
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelateGroupsResponseData.java
@@ -0,0 +1,29 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+public class RoleRelateGroupsResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -248658847598115689L;
+
+ @Getter
+ @Setter
+ private String message;
+
+ public RoleRelateGroupsResponseData(String message) {
+ this.message = message;
+ }
+
+ public static RoleRelateGroupsResponseData of(String message) {
+ RoleRelateGroupsResponseData data = new RoleRelateGroupsResponseData(message);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelatePermissionsResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelatePermissionsResponseData.java
new file mode 100644
index 0000000..da7c9c2
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelatePermissionsResponseData.java
@@ -0,0 +1,29 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+public class RoleRelatePermissionsResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 5398594379968952750L;
+
+ @Getter
+ @Setter
+ private String message;
+
+ public RoleRelatePermissionsResponseData(String message) {
+ this.message = message;
+ }
+
+ public static RoleRelatePermissionsResponseData of(String message) {
+ RoleRelatePermissionsResponseData data = new RoleRelatePermissionsResponseData(message);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelatedAccountsResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelatedAccountsResponseData.java
new file mode 100644
index 0000000..a906d6e
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelatedAccountsResponseData.java
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+
+import com.supwisdom.institute.backend.base.domain.entity.AccountRole;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+/**
+ * @author loie
+ */
+public class RoleRelatedAccountsResponseData implements IApiQueryResponseData<AccountRole> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 5272966183728979505L;
+
+ private RoleRelatedAccountsResponseData(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+ this.loadAll = loadAll;
+ this.pageIndex = pageIndex;
+ this.pageSize = pageSize;
+ this.mapBean = mapBean;
+ this.orderBy = orderBy;
+ }
+
+ public static RoleRelatedAccountsResponseData of(IApiQueryRequest queryRequest) {
+ RoleRelatedAccountsResponseData configQueryResponse = new RoleRelatedAccountsResponseData(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy()
+ );
+
+ return configQueryResponse;
+ }
+
+ public RoleRelatedAccountsResponseData build(Page<AccountRole> page) {
+ this.currentItemCount = page.getNumberOfElements();
+ this.pageCount = page.getTotalPages();
+ this.recordCount = page.getTotalElements();
+ this.items = page.getContent();
+
+ return this;
+ }
+
+ @Getter
+ private boolean loadAll;
+ @Getter
+ private int pageIndex;
+ @Getter
+ private int pageSize;
+ @Getter
+ private Map<String, Object> mapBean;
+ @Getter
+ private Map<String, String> orderBy;
+
+ @Getter
+ @Setter
+ private int pageCount;
+ @Getter
+ @Setter
+ private long recordCount;
+
+ @Getter
+ @Setter
+ private int currentItemCount;
+
+ @Getter
+ @Setter
+ private List<AccountRole> items;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelatedGroupsResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelatedGroupsResponseData.java
new file mode 100644
index 0000000..cf5dc80
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelatedGroupsResponseData.java
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+
+import com.supwisdom.institute.backend.base.domain.entity.GroupRole;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+/**
+ * @author loie
+ */
+public class RoleRelatedGroupsResponseData implements IApiQueryResponseData<GroupRole> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -1327331843770679868L;
+
+ private RoleRelatedGroupsResponseData(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+ this.loadAll = loadAll;
+ this.pageIndex = pageIndex;
+ this.pageSize = pageSize;
+ this.mapBean = mapBean;
+ this.orderBy = orderBy;
+ }
+
+ public static RoleRelatedGroupsResponseData of(IApiQueryRequest queryRequest) {
+ RoleRelatedGroupsResponseData configQueryResponse = new RoleRelatedGroupsResponseData(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy()
+ );
+
+ return configQueryResponse;
+ }
+
+ public RoleRelatedGroupsResponseData build(Page<GroupRole> page) {
+ this.currentItemCount = page.getNumberOfElements();
+ this.pageCount = page.getTotalPages();
+ this.recordCount = page.getTotalElements();
+ this.items = page.getContent();
+
+ return this;
+ }
+
+ @Getter
+ private boolean loadAll;
+ @Getter
+ private int pageIndex;
+ @Getter
+ private int pageSize;
+ @Getter
+ private Map<String, Object> mapBean;
+ @Getter
+ private Map<String, String> orderBy;
+
+ @Getter
+ @Setter
+ private int pageCount;
+ @Getter
+ @Setter
+ private long recordCount;
+
+ @Getter
+ @Setter
+ private int currentItemCount;
+
+ @Getter
+ @Setter
+ private List<GroupRole> items;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelatedPermissionsResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelatedPermissionsResponseData.java
new file mode 100644
index 0000000..05ab0c5
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRelatedPermissionsResponseData.java
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+
+import com.supwisdom.institute.backend.base.domain.entity.RolePermission;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+/**
+ * @author loie
+ */
+public class RoleRelatedPermissionsResponseData implements IApiQueryResponseData<RolePermission> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7556328257191962088L;
+
+ private RoleRelatedPermissionsResponseData(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+ this.loadAll = loadAll;
+ this.pageIndex = pageIndex;
+ this.pageSize = pageSize;
+ this.mapBean = mapBean;
+ this.orderBy = orderBy;
+ }
+
+ public static RoleRelatedPermissionsResponseData of(IApiQueryRequest queryRequest) {
+ RoleRelatedPermissionsResponseData configQueryResponse = new RoleRelatedPermissionsResponseData(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy()
+ );
+
+ return configQueryResponse;
+ }
+
+ public RoleRelatedPermissionsResponseData build(Page<RolePermission> page) {
+ this.currentItemCount = page.getNumberOfElements();
+ this.pageCount = page.getTotalPages();
+ this.recordCount = page.getTotalElements();
+ this.items = page.getContent();
+
+ return this;
+ }
+
+ @Getter
+ private boolean loadAll;
+ @Getter
+ private int pageIndex;
+ @Getter
+ private int pageSize;
+ @Getter
+ private Map<String, Object> mapBean;
+ @Getter
+ private Map<String, String> orderBy;
+
+ @Getter
+ @Setter
+ private int pageCount;
+ @Getter
+ @Setter
+ private long recordCount;
+
+ @Getter
+ @Setter
+ private int currentItemCount;
+
+ @Getter
+ @Setter
+ private List<RolePermission> items;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRemoveResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRemoveResponseData.java
new file mode 100644
index 0000000..3f97566
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleRemoveResponseData.java
@@ -0,0 +1,34 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.Role;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiRemoveResponseData;
+
+/**
+ * @author loie
+ */
+public class RoleRemoveResponseData implements IApiRemoveResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2556956704425975795L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private RoleRemoveResponseData() {
+
+ }
+
+ public static RoleRemoveResponseData build(Role entity) {
+ RoleRemoveResponseData data = new RoleRemoveResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleUpdateResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleUpdateResponseData.java
new file mode 100644
index 0000000..3f5e93f
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RoleUpdateResponseData.java
@@ -0,0 +1,34 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Role;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiUpdateResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class RoleUpdateResponseData extends Role implements IApiUpdateResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7822437040348157286L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private RoleUpdateResponseData() {
+
+ }
+
+ public static RoleUpdateResponseData build(Role entity) {
+ RoleUpdateResponseData data = new RoleUpdateResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteCreateResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteCreateResponseData.java
new file mode 100644
index 0000000..ea50cd4
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteCreateResponseData.java
@@ -0,0 +1,33 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Route;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiCreateResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class RouteCreateResponseData extends Route implements IApiCreateResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -3115757571075013907L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private RouteCreateResponseData() {
+
+ }
+
+ public static RouteCreateResponseData build(Route entity) {
+ RouteCreateResponseData data = new RouteCreateResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteDeleteBatchResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteDeleteBatchResponseData.java
new file mode 100644
index 0000000..da236b1
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteDeleteBatchResponseData.java
@@ -0,0 +1,35 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+/**
+ * @author loie
+ */
+public class RouteDeleteBatchResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2204591486919573195L;
+
+ @Getter
+ @Setter
+ private List<String> ids;
+
+ private RouteDeleteBatchResponseData() {
+
+ }
+
+ public static RouteDeleteBatchResponseData build(List<String> ids) {
+ RouteDeleteBatchResponseData data = new RouteDeleteBatchResponseData();
+ data.setIds(ids);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteLoadResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteLoadResponseData.java
new file mode 100644
index 0000000..5fd52d1
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteLoadResponseData.java
@@ -0,0 +1,33 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Route;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiLoadResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class RouteLoadResponseData extends Route implements IApiLoadResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 3295217395256011396L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private RouteLoadResponseData() {
+
+ }
+
+ public static RouteLoadResponseData of(Route entity) {
+ RouteLoadResponseData data = new RouteLoadResponseData();
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteQueryResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteQueryResponseData.java
new file mode 100644
index 0000000..99d3fb7
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteQueryResponseData.java
@@ -0,0 +1,80 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+
+import com.supwisdom.institute.backend.base.domain.entity.Route;
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiQueryRequest;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiQueryResponseData;
+
+/**
+ * @author loie
+ */
+public class RouteQueryResponseData implements IApiQueryResponseData<Route> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2632433248197514787L;
+
+ private RouteQueryResponseData(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+ this.loadAll = loadAll;
+ this.pageIndex = pageIndex;
+ this.pageSize = pageSize;
+ this.mapBean = mapBean;
+ this.orderBy = orderBy;
+ }
+
+ public static RouteQueryResponseData of(IApiQueryRequest queryRequest) {
+ RouteQueryResponseData configQueryResponse = new RouteQueryResponseData(
+ queryRequest.isLoadAll(),
+ queryRequest.getPageIndex(),
+ queryRequest.getPageSize(),
+ queryRequest.getMapBean(),
+ queryRequest.getOrderBy()
+ );
+
+ return configQueryResponse;
+ }
+
+ public RouteQueryResponseData build(Page<Route> page) {
+ this.currentItemCount = page.getNumberOfElements();
+ this.pageCount = page.getTotalPages();
+ this.recordCount = page.getTotalElements();
+ this.items = page.getContent();
+
+ return this;
+ }
+
+ @Getter
+ private boolean loadAll;
+ @Getter
+ private int pageIndex;
+ @Getter
+ private int pageSize;
+ @Getter
+ private Map<String, Object> mapBean;
+ @Getter
+ private Map<String, String> orderBy;
+
+ @Getter
+ @Setter
+ private int pageCount;
+ @Getter
+ @Setter
+ private long recordCount;
+
+ @Getter
+ @Setter
+ private int currentItemCount;
+
+ @Getter
+ @Setter
+ private List<Route> items;
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteRemoveResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteRemoveResponseData.java
new file mode 100644
index 0000000..4735d20
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteRemoveResponseData.java
@@ -0,0 +1,34 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.Route;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiRemoveResponseData;
+
+/**
+ * @author loie
+ */
+public class RouteRemoveResponseData implements IApiRemoveResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -143516413115089421L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private RouteRemoveResponseData() {
+
+ }
+
+ public static RouteRemoveResponseData build(Route entity) {
+ RouteRemoveResponseData data = new RouteRemoveResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteUpdateResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteUpdateResponseData.java
new file mode 100644
index 0000000..89ace30
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/admin/response/RouteUpdateResponseData.java
@@ -0,0 +1,34 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.admin.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Route;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiUpdateResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author loie
+ */
+public class RouteUpdateResponseData extends Route implements IApiUpdateResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 364945014290674973L;
+
+ @Getter
+ @Setter
+ private String id;
+
+ private RouteUpdateResponseData() {
+
+ }
+
+ public static RouteUpdateResponseData build(Route entity) {
+ RouteUpdateResponseData data = new RouteUpdateResponseData();
+
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnAccountPermissionsResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnAccountPermissionsResponseData.java
new file mode 100644
index 0000000..3d3aa4c
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnAccountPermissionsResponseData.java
@@ -0,0 +1,31 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.authn.response;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.Permission;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+public class AuthnAccountPermissionsResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 8276878427539012799L;
+
+ @Getter
+ @Setter
+ public List<Permission> permissions;
+
+
+ public static AuthnAccountPermissionsResponseData of(List<Permission> permissions) {
+ AuthnAccountPermissionsResponseData data = new AuthnAccountPermissionsResponseData();
+
+ data.setPermissions(permissions);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnAccountResourcesResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnAccountResourcesResponseData.java
new file mode 100644
index 0000000..617be41
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnAccountResourcesResponseData.java
@@ -0,0 +1,31 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.authn.response;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.Resource;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+public class AuthnAccountResourcesResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 4924064418294890589L;
+
+ @Getter
+ @Setter
+ public List<Resource> resources;
+
+
+ public static AuthnAccountResourcesResponseData of(List<Resource> resources) {
+ AuthnAccountResourcesResponseData data = new AuthnAccountResourcesResponseData();
+
+ data.setResources(resources);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnAccountResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnAccountResponseData.java
new file mode 100644
index 0000000..a84f199
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnAccountResponseData.java
@@ -0,0 +1,19 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.authn.response;
+
+import com.supwisdom.institute.backend.base.domain.entity.Account;
+import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+public class AuthnAccountResponseData extends Account implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -289285783805128927L;
+
+ public static AuthnAccountResponseData of(Account entity) {
+ AuthnAccountResponseData data = new AuthnAccountResponseData();
+ return EntityUtils.copy(entity, data);
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnAccountRolesResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnAccountRolesResponseData.java
new file mode 100644
index 0000000..2241c15
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnAccountRolesResponseData.java
@@ -0,0 +1,31 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.authn.response;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.Role;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+public class AuthnAccountRolesResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -6588284546370817275L;
+
+ @Getter
+ @Setter
+ public List<Role> roles;
+
+
+ public static AuthnAccountRolesResponseData of(List<Role> roles) {
+ AuthnAccountRolesResponseData data = new AuthnAccountRolesResponseData();
+
+ data.setRoles(roles);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnApplicationsResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnApplicationsResponseData.java
new file mode 100644
index 0000000..79dae74
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnApplicationsResponseData.java
@@ -0,0 +1,31 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.authn.response;
+
+import java.util.List;
+
+import com.supwisdom.institute.backend.base.domain.entity.Application;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class AuthnApplicationsResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 277008963651011910L;
+
+ @Getter
+ @Setter
+ public List<Application> applications;
+
+
+ public static AuthnApplicationsResponseData of(List<Application> applications) {
+ AuthnApplicationsResponseData data = new AuthnApplicationsResponseData();
+
+ data.setApplications(applications);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnPermissionRoleListResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnPermissionRoleListResponseData.java
new file mode 100644
index 0000000..bca4b9d
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnPermissionRoleListResponseData.java
@@ -0,0 +1,30 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.authn.response;
+
+import java.util.List;
+
+import com.supwisdom.institute.backend.base.domain.model.PermissionRoleSet;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class AuthnPermissionRoleListResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -1484993874632504947L;
+
+ @Getter
+ @Setter
+ public List<PermissionRoleSet> permissionRoleSets;
+
+ public static AuthnPermissionRoleListResponseData of(List<PermissionRoleSet> permissionRoleSets) {
+ AuthnPermissionRoleListResponseData data = new AuthnPermissionRoleListResponseData();
+
+ data.setPermissionRoleSets(permissionRoleSets);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnResourceRoleListResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnResourceRoleListResponseData.java
new file mode 100644
index 0000000..da6df80
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnResourceRoleListResponseData.java
@@ -0,0 +1,30 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.authn.response;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.model.ResourceRoleSet;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+public class AuthnResourceRoleListResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -9178840503146742900L;
+
+ @Getter
+ @Setter
+ public List<ResourceRoleSet> resourceRoleSets;
+
+ public static AuthnResourceRoleListResponseData of(List<ResourceRoleSet> resourceRoleSets) {
+ AuthnResourceRoleListResponseData data = new AuthnResourceRoleListResponseData();
+
+ data.setResourceRoleSets(resourceRoleSets);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnRolesResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnRolesResponseData.java
new file mode 100644
index 0000000..4f503ed
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnRolesResponseData.java
@@ -0,0 +1,31 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.authn.response;
+
+import java.util.List;
+
+import com.supwisdom.institute.backend.base.domain.entity.Role;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class AuthnRolesResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -3695033930841370744L;
+
+ @Getter
+ @Setter
+ public List<Role> roles;
+
+
+ public static AuthnRolesResponseData of(List<Role> roles) {
+ AuthnRolesResponseData data = new AuthnRolesResponseData();
+
+ data.setRoles(roles);
+
+ return data;
+ }
+
+}
diff --git a/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnRoutesResponseData.java b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnRoutesResponseData.java
new file mode 100644
index 0000000..3c46ae4
--- /dev/null
+++ b/admin-sa/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/authn/response/AuthnRoutesResponseData.java
@@ -0,0 +1,31 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.authn.response;
+
+import java.util.List;
+
+import com.supwisdom.institute.backend.base.domain.entity.Route;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class AuthnRoutesResponseData implements IApiResponseData {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7221340609572046915L;
+
+ @Getter
+ @Setter
+ public List<Route> routes;
+
+
+ public static AuthnRoutesResponseData of(List<Route> routes) {
+ AuthnRoutesResponseData data = new AuthnRoutesResponseData();
+
+ data.setRoutes(routes);
+
+ return data;
+ }
+
+}