From 66869fd34ed9ac8fd2cafdf0983b966996bc8704 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 7 Jul 2020 15:07:27 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84Gaea=E6=9C=8D=E5=8A=A1,=20?= =?UTF-8?q?=E5=8D=87=E7=BA=A7=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- .../gaea/app/{UnionApp.kt => Application.kt} | 8 +-- .../com/synebula/gaea/app/IApplication.kt | 10 +-- .../com/synebula/gaea/app/ISignInOut.kt | 25 ------- .../com/synebula/gaea/app/UnionGenericApp.kt | 29 -------- .../com/synebula/gaea/app/cmd/CommandApp.kt | 2 +- .../gaea/app/component/HttpMessage.kt | 1 - .../com/synebula/gaea/app/query/IQueryApp.kt | 66 ++++++++++++------- .../synebula/gaea/app/query/IQueryTypedApp.kt | 63 ------------------ ...ueryGenericApp.kt => ISpecificQueryApp.kt} | 45 ++++++------- .../query/{QueryTypedApp.kt => QueryApp.kt} | 6 +- .../gaea/app/query/QueryGenericApp.kt | 18 ----- .../gaea/app/query/SpecificQueryApp.kt | 17 +++++ .../com/synebula/gaea/mongo/MongoExt.kt | 6 +- .../synebula/gaea/mongo/query/MongoQuery.kt | 33 ++++++---- ...oGenericQuery.kt => MongoSpecificQuery.kt} | 15 +++-- ...pository.kt => MongoSpecificRepository.kt} | 6 +- .../domain/repository/IComplexRepository.kt | 45 ------------- ...icRepository.kt => ISpecificRepository.kt} | 2 +- .../gaea/domain/service/ComplexService.kt | 56 ---------------- .../gaea/domain/service/IComplexService.kt | 24 ------- .../synebula/gaea/domain/service/Service.kt | 12 ++-- .../{GenericService.kt => SpecificService.kt} | 9 +-- .../kotlin/com/synebula/gaea/query/IQuery.kt | 4 +- .../com/synebula/gaea/query/IQueryComplex.kt | 42 ------------ .../{IGenericQuery.kt => ISpecificQuery.kt} | 2 +- 26 files changed, 139 insertions(+), 409 deletions(-) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/{UnionApp.kt => Application.kt} (79%) delete mode 100644 src/gaea.app/src/main/kotlin/com/synebula/gaea/app/ISignInOut.kt delete mode 100644 src/gaea.app/src/main/kotlin/com/synebula/gaea/app/UnionGenericApp.kt delete mode 100644 src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/IQueryTypedApp.kt rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/{IQueryGenericApp.kt => ISpecificQueryApp.kt} (61%) rename src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/{QueryTypedApp.kt => QueryApp.kt} (78%) delete mode 100644 src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/QueryGenericApp.kt create mode 100644 src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/SpecificQueryApp.kt rename src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/query/{MongoGenericQuery.kt => MongoSpecificQuery.kt} (92%) rename src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/repository/{MongoGenericRepository.kt => MongoSpecificRepository.kt} (84%) delete mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/IComplexRepository.kt rename src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/{IGenericRepository.kt => ISpecificRepository.kt} (94%) delete mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/ComplexService.kt delete mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/IComplexService.kt rename src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/{GenericService.kt => SpecificService.kt} (80%) delete mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/query/IQueryComplex.kt rename src/gaea/src/main/kotlin/com/synebula/gaea/query/{IGenericQuery.kt => ISpecificQuery.kt} (95%) diff --git a/build.gradle b/build.gradle index 0ce4920..26e1825 100644 --- a/build.gradle +++ b/build.gradle @@ -21,7 +21,7 @@ allprojects { subprojects { ext { - version '0.3.2' + version '0.4.0' spring_version = "2.3.0.RELEASE" } diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/UnionApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/Application.kt similarity index 79% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/UnionApp.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/Application.kt index 3bde34c..329a7df 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/UnionApp.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/Application.kt @@ -1,7 +1,7 @@ package com.synebula.gaea.app import com.synebula.gaea.app.cmd.ICommandApp -import com.synebula.gaea.app.query.IQueryTypedApp +import com.synebula.gaea.app.query.IQueryApp import com.synebula.gaea.data.serialization.json.IJsonSerializer import com.synebula.gaea.domain.service.ICommand import com.synebula.gaea.domain.service.IService @@ -17,13 +17,13 @@ import javax.annotation.Resource * @param query 业务查询服务 * @param logger 日志组件 */ -open class UnionApp( +open class Application( override var name: String, override var clazz: Class, override var service: IService?, override var query: IQuery?, - override var logger: ILogger) - : ICommandApp, IQueryTypedApp { + override var logger: ILogger? +) : ICommandApp, IQueryApp { @Resource override var jsonSerializer: IJsonSerializer? = null diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/IApplication.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/IApplication.kt index 3966926..b359834 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/IApplication.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/IApplication.kt @@ -14,7 +14,7 @@ interface IApplication { /** * 日志组件 */ - var logger: ILogger + var logger: ILogger? /** @@ -24,11 +24,11 @@ interface IApplication { val msg = HttpMessage(Status.Success) try { process(msg) - logger.debug(this, "$name business execute success") + logger?.debug(this, "$name business execute success") } catch (ex: Exception) { msg.status = Status.Error msg.message = if (error.isEmpty()) ex.message ?: "" else error - logger.error(this, ex, "$error: ${ex.message}") + logger?.error(this, ex, "$error: ${ex.message}") } return msg } @@ -40,9 +40,9 @@ interface IApplication { val msg = HttpMessage(Status.Success) try { process(msg) - logger.debug(this, "$name business execute success") + logger?.debug(this, "$name business execute success") } catch (ex: Exception) { - logger.error(this, ex, "$error。异常消息将抛出!: ${ex.message}") + logger?.error(this, ex, "$error。异常消息将抛出!: ${ex.message}") throw RuntimeException(error, ex) } return msg diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/ISignInOut.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/ISignInOut.kt deleted file mode 100644 index 33dd8a7..0000000 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/ISignInOut.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.synebula.gaea.app - -import com.synebula.gaea.app.component.HttpMessage - - -/** - * 用户登入登出接口定义 - */ -interface ISignInOut { - /** - * 定义登录方法。 - * - * @param name 登录名 - * @param password 登录密码 - * @return StatusMessage, data 内容为 map 其中 key account中存储用户账户名称 - */ - fun signIn(name: String, password: String): HttpMessage - - /** - * 登出 - * - * @param user 登出的用户 - */ - fun signOut(user: String): HttpMessage -} diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/UnionGenericApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/UnionGenericApp.kt deleted file mode 100644 index 6272ab2..0000000 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/UnionGenericApp.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.synebula.gaea.app - -import com.synebula.gaea.app.cmd.ICommandApp -import com.synebula.gaea.app.query.IQueryGenericApp -import com.synebula.gaea.data.serialization.json.IJsonSerializer -import com.synebula.gaea.domain.service.ICommand -import com.synebula.gaea.domain.service.IService -import com.synebula.gaea.log.ILogger -import com.synebula.gaea.query.IGenericQuery -import javax.annotation.Resource - -/** - * 联合服务,同时实现了ICommandApp和IQueryApp接口 - * - * @param name 业务名称 - * @param service 业务domain服务 - * @param query 业务查询服务 - * @param logger 日志组件 - */ -open class UnionGenericApp( - override var name: String, - override var service: IService?, - override var query: IGenericQuery?, - override var logger: ILogger -) : ICommandApp, IQueryGenericApp { - - @Resource - override var jsonSerializer: IJsonSerializer? = null -} \ No newline at end of file diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cmd/CommandApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cmd/CommandApp.kt index 217202f..94c82c7 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cmd/CommandApp.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/cmd/CommandApp.kt @@ -16,7 +16,7 @@ import javax.annotation.Resource open class CommandApp( override var name: String, override var service: IService?, - override var logger: ILogger) : ICommandApp { + override var logger: ILogger?) : ICommandApp { @Resource override var jsonSerializer: IJsonSerializer? = null } \ No newline at end of file diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/HttpMessage.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/HttpMessage.kt index eabe604..c82aef1 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/HttpMessage.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/HttpMessage.kt @@ -1,6 +1,5 @@ package com.synebula.gaea.app.component -import com.synebula.gaea.data.message.Status import com.synebula.gaea.data.message.Message class HttpMessage() : Message() { diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/IQueryApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/IQueryApp.kt index 82df92b..d11f0e8 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/IQueryApp.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/IQueryApp.kt @@ -2,50 +2,66 @@ package com.synebula.gaea.app.query import com.synebula.gaea.app.IApplication import com.synebula.gaea.app.component.HttpMessage +import com.synebula.gaea.data.message.Status +import com.synebula.gaea.query.IQuery +import com.synebula.gaea.query.Params import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PathVariable import org.springframework.web.bind.annotation.RequestParam interface IQueryApp : IApplication { + /** + * 查询服务 + */ + var query: IQuery? + + /** + * 查询的View类型 + */ + var clazz: Class @GetMapping("/{key:.+}") fun get(@PathVariable key: TKey): HttpMessage { - return this.doGet(key) + return this.doQuery("获取${this.name}数据失败") { + this.query!!.get(key, clazz) + } } @GetMapping fun list(@RequestParam params: MutableMap): HttpMessage { - return this.doList(params) + return this.doQuery("获取${this.name}列表数据失败") { + this.query!!.list(params, clazz) + } } @GetMapping("/segments/{size}/pages/{page}") - fun paging(@PathVariable size: Int, @PathVariable page: Int, @RequestParam parameters: MutableMap): HttpMessage { - return this.doPaging(size, page, parameters) + fun paging( + @PathVariable size: Int, + @PathVariable page: Int, + @RequestParam parameters: MutableMap + ): HttpMessage { + return this.doQuery("获取${this.name}分页数据[条数:$size,页码:$page]失败") { + val data = Params(page, size) + data.parameters = parameters + this.query!!.paging(data, clazz) + } } /** - * 实际查询单条数据逻辑 + * 抽取查询业务判断功能 * - * @param key 数据的主键 + * @param error 错误消息 + * @param biz 业务执行逻辑 */ - fun doGet(key: TKey): HttpMessage - - /** - * 实际查询列表逻辑 - * - * @param params 查询参数 - */ - fun doList(params: Map): HttpMessage - - /** - * 实际分页逻辑 - * - * @param size 单页数量 - * @param page 分页页码 - * @param params 查询参数 - */ - fun doPaging(size: Int, page: Int, params: MutableMap): HttpMessage - - + fun doQuery(error: String, biz: (() -> Any?)): HttpMessage { + return this.safeExecute(error) { + if (this.query != null) { + it.data = biz() + } else { + it.status = Status.Error + it.message = "没有对应服务,无法执行该操作" + } + } + } } \ No newline at end of file diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/IQueryTypedApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/IQueryTypedApp.kt deleted file mode 100644 index 9125ee9..0000000 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/IQueryTypedApp.kt +++ /dev/null @@ -1,63 +0,0 @@ -package com.synebula.gaea.app.query - -import com.synebula.gaea.app.component.HttpMessage -import com.synebula.gaea.data.message.Status -import com.synebula.gaea.query.IQuery -import com.synebula.gaea.query.Params - -/** - * 应用类接口,提供实现Query服务的接口. - * 依赖查询接口 @see IQueryTyped - * - * @author alex - * @version 0.1 - * @since 2020-05-15 - */ -interface IQueryTypedApp : IQueryApp { - /** - * 查询服务 - */ - var query: IQuery? - - /** - * 查询的View类型 - */ - var clazz: Class - - override fun doGet(key: TKey): HttpMessage { - return this.doQuery("获取${this.name}数据失败") { - this.query!!.get(key, clazz) - } - } - - override fun doList(params: Map): HttpMessage { - return this.doQuery("获取${this.name}列表数据失败") { - this.query!!.list(params, clazz) - } - } - - override fun doPaging(size: Int, page: Int, params: MutableMap): HttpMessage { - return this.doQuery("获取${this.name}分页数据[条数:$size,页码:$page]失败") { - val data = Params(page, size) - data.parameters = params - this.query!!.paging(data, clazz) - } - } - - /** - * 抽取查询业务判断功能 - * - * @param error 错误消息 - * @param biz 业务执行逻辑 - */ - fun doQuery(error: String, biz: (() -> Any?)): HttpMessage { - return this.safeExecute(error) { - if (this.query != null) { - it.data = biz() - } else { - it.status = Status.Error - it.message = "没有对应服务,无法执行该操作" - } - } - } -} diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/IQueryGenericApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/ISpecificQueryApp.kt similarity index 61% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/IQueryGenericApp.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/ISpecificQueryApp.kt index 67d0a5c..e3eb68c 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/IQueryGenericApp.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/ISpecificQueryApp.kt @@ -1,9 +1,13 @@ package com.synebula.gaea.app.query +import com.synebula.gaea.app.IApplication import com.synebula.gaea.app.component.HttpMessage import com.synebula.gaea.data.message.Status -import com.synebula.gaea.query.IGenericQuery +import com.synebula.gaea.query.ISpecificQuery import com.synebula.gaea.query.Params +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PathVariable +import org.springframework.web.bind.annotation.RequestParam /** * 应用类接口,提供实现Query服务的接口 @@ -13,50 +17,40 @@ import com.synebula.gaea.query.Params * @version 0.1 * @since 2020-05-15 */ -interface IQueryGenericApp : IQueryApp { +interface ISpecificQueryApp : IApplication { /** * 查询服务 */ - var query: IGenericQuery? + var query: ISpecificQuery? - - /** - * 实际查询单条数据逻辑 - * - * @param key 数据的主键 - */ - override fun doGet(key: TKey): HttpMessage { + @GetMapping("/{key:.+}") + fun get(@PathVariable key: TKey): HttpMessage { return this.doQuery("获取${this.name}数据失败") { this.query!!.get(key) } } - /** - * 实际查询列表逻辑 - * - * @param params 查询参数 - */ - override fun doList(params: Map): HttpMessage { + @GetMapping + fun list(@RequestParam params: MutableMap): HttpMessage { return this.doQuery("获取${this.name}列表数据失败") { this.query!!.list(params) } } - /** - * 实际分页逻辑 - * - * @param size 单页数量 - * @param page 分页页码 - * @param params 查询参数 - */ - override fun doPaging(size: Int, page: Int, params: MutableMap): HttpMessage { + @GetMapping("/segments/{size}/pages/{page}") + fun paging( + @PathVariable size: Int, + @PathVariable page: Int, + @RequestParam parameters: MutableMap + ): HttpMessage { return this.doQuery("获取${this.name}分页数据[条数:$size,页码:$page]失败") { val data = Params(page, size) - data.parameters = params + data.parameters = parameters this.query!!.paging(data) } } + /** * 抽取查询业务判断功能 * @@ -73,5 +67,4 @@ interface IQueryGenericApp : IQueryApp { } } } - } diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/QueryTypedApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/QueryApp.kt similarity index 78% rename from src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/QueryTypedApp.kt rename to src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/QueryApp.kt index a8c2dec..d8760fc 100644 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/QueryTypedApp.kt +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/QueryApp.kt @@ -10,9 +10,9 @@ import com.synebula.gaea.query.IQuery * @param query 业务查询服务 * @param logger 日志组件 */ -open class QueryTypedApp( +open class QueryApp( override var name: String, override var clazz: Class, override var query: IQuery?, - override var logger: ILogger) : IQueryTypedApp { -} + override var logger: ILogger? +) : IQueryApp \ No newline at end of file diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/QueryGenericApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/QueryGenericApp.kt deleted file mode 100644 index 63b2fce..0000000 --- a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/QueryGenericApp.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.synebula.gaea.app.query - -import com.synebula.gaea.log.ILogger -import com.synebula.gaea.query.IGenericQuery - -/** - * 联合服务,同时实现了ICommandApp和IQueryApp接口 - * - * @param name 业务名称 - * @param genericQuery 业务查询服务 - * @param logger 日志组件 - */ -open class QueryGenericApp( - override var name: String, - override var query: IGenericQuery?, - override var logger: ILogger -) : IQueryGenericApp { -} \ No newline at end of file diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/SpecificQueryApp.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/SpecificQueryApp.kt new file mode 100644 index 0000000..1c62a47 --- /dev/null +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/query/SpecificQueryApp.kt @@ -0,0 +1,17 @@ +package com.synebula.gaea.app.query + +import com.synebula.gaea.log.ILogger +import com.synebula.gaea.query.ISpecificQuery + +/** + * 联合服务,同时实现了ICommandApp和IQueryApp接口 + * + * @param name 业务名称 + * @param query 业务查询服务 + * @param logger 日志组件 + */ +open class SpecificQueryApp( + override var name: String, + override var query: ISpecificQuery?, + override var logger: ILogger? +) : ISpecificQueryApp \ No newline at end of file diff --git a/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/MongoExt.kt b/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/MongoExt.kt index 020983c..f125f15 100644 --- a/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/MongoExt.kt +++ b/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/MongoExt.kt @@ -1,9 +1,9 @@ package com.synebula.gaea.mongo import com.synebula.gaea.data.date.DateTime -import com.synebula.gaea.query.Operator -import com.synebula.gaea.query.OrderType -import com.synebula.gaea.query.Where +import com.synebula.gaea.query.annotation.Where +import com.synebula.gaea.query.type.Operator +import com.synebula.gaea.query.type.Order import org.springframework.data.domain.Sort import org.springframework.data.mongodb.core.query.Criteria import org.springframework.data.mongodb.core.query.Query diff --git a/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/query/MongoQuery.kt b/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/query/MongoQuery.kt index 8a69b5d..a98e1e1 100644 --- a/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/query/MongoQuery.kt +++ b/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/query/MongoQuery.kt @@ -3,11 +3,14 @@ package com.synebula.gaea.mongo.query import com.synebula.gaea.extension.fieldNames import com.synebula.gaea.extension.firstCharLowerCase import com.synebula.gaea.log.ILogger -import com.synebula.gaea.mongo.* -import com.synebula.gaea.mongo.Collection +import com.synebula.gaea.mongo.order +import com.synebula.gaea.mongo.select +import com.synebula.gaea.mongo.where +import com.synebula.gaea.mongo.whereId import com.synebula.gaea.query.IQuery import com.synebula.gaea.query.Page import com.synebula.gaea.query.Params +import com.synebula.gaea.query.annotation.Table import org.springframework.data.mongodb.core.MongoTemplate import org.springframework.data.mongodb.core.query.Query @@ -36,20 +39,20 @@ open class MongoQuery(var template: MongoTemplate, var logger: ILogger? = null) return this.template.count(query.where(params, clazz), this.collection(clazz)).toInt() } - override fun paging(param: Params, clazz: Class): Page { + override fun paging(params: Params, clazz: Class): Page { val query = Query() val fields = clazz.fieldNames() - val result = Page(param.page, param.size) - result.total = this.count(param.parameters, clazz) + val result = Page(params.page, params.size) + result.total = this.count(params.parameters, clazz) //如果总数和索引相同,说明该页没有数据,直接跳到上一页 if (result.total == result.index) { - param.page -= 1 + params.page -= 1 result.page -= 1 } query.select(fields.toTypedArray()) - query.where(param.parameters, clazz) - query.with(order(param.orders)) - query.skip(param.index).limit(param.size) + query.where(params.parameters, clazz) + query.with(order(params.orders)) + query.skip(params.index).limit(params.size) result.data = this.template.find(query, clazz, this.collection(clazz)) return result } @@ -61,17 +64,19 @@ open class MongoQuery(var template: MongoTemplate, var logger: ILogger? = null) /** * 获取collection */ - protected fun collection(clazz: Class): String { - val collection: Collection? = clazz.getDeclaredAnnotation(Collection::class.java) - return if (collection != null) - return collection.name + fun collection(clazz: Class): String { + val table: Table? = clazz.getDeclaredAnnotation( + Table::class.java + ) + return if (table != null) + return table.name else { this.logger?.info(this, "视图类没有标记[Collection]注解,无法获取Collection名称。尝试使用View<${clazz.name}>名称解析集合") val name = clazz.simpleName.removeSuffix("View").firstCharLowerCase() if (!validViewCollection || this.template.collectionExists(name)) name else { - throw RuntimeException("找不到名为[$collection]的集合") + throw RuntimeException("找不到名为[$table]的集合") } } } diff --git a/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/query/MongoGenericQuery.kt b/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/query/MongoSpecificQuery.kt similarity index 92% rename from src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/query/MongoGenericQuery.kt rename to src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/query/MongoSpecificQuery.kt index 62615d8..b888f37 100644 --- a/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/query/MongoGenericQuery.kt +++ b/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/query/MongoSpecificQuery.kt @@ -3,14 +3,14 @@ package com.synebula.gaea.mongo.query import com.synebula.gaea.extension.fieldNames import com.synebula.gaea.extension.firstCharLowerCase import com.synebula.gaea.log.ILogger -import com.synebula.gaea.mongo.Collection import com.synebula.gaea.mongo.order import com.synebula.gaea.mongo.select import com.synebula.gaea.mongo.where import com.synebula.gaea.mongo.whereId -import com.synebula.gaea.query.IGenericQuery +import com.synebula.gaea.query.ISpecificQuery import com.synebula.gaea.query.Page import com.synebula.gaea.query.Params +import com.synebula.gaea.query.annotation.Table import org.springframework.data.mongodb.core.MongoTemplate import org.springframework.data.mongodb.core.query.Query @@ -20,10 +20,11 @@ import org.springframework.data.mongodb.core.query.Query * @param template MongoRepo对象 * @param logger 日志组件 */ -open class MongoGenericQuery( - var template: MongoTemplate, - var clazz: Class? = null, - var logger: ILogger? = null) : IGenericQuery { +open class MongoSpecificQuery( + var template: MongoTemplate, + var clazz: Class? = null, + var logger: ILogger? = null +) : ISpecificQuery { /** * 使用View解析是collection时是否校验存在,默认不校验 @@ -129,7 +130,7 @@ open class MongoGenericQuery( */ protected fun collection(clazz: Class?): String { if (clazz == null) throw java.lang.RuntimeException("[${this.javaClass}]没有指定查询实体类型[clazz]") - val collection: Collection? = clazz.getDeclaredAnnotation(Collection::class.java) + val collection = clazz.getDeclaredAnnotation(Table::class.java) return if (collection != null) return collection.name else { diff --git a/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/repository/MongoGenericRepository.kt b/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/repository/MongoSpecificRepository.kt similarity index 84% rename from src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/repository/MongoGenericRepository.kt rename to src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/repository/MongoSpecificRepository.kt index 93d0d92..e90d55f 100644 --- a/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/repository/MongoGenericRepository.kt +++ b/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/repository/MongoSpecificRepository.kt @@ -1,7 +1,7 @@ package com.synebula.gaea.mongo.repository import com.synebula.gaea.domain.model.IAggregateRoot -import com.synebula.gaea.domain.repository.IGenericRepository +import com.synebula.gaea.domain.repository.ISpecificRepository import com.synebula.gaea.mongo.whereId import org.springframework.data.mongodb.core.MongoTemplate @@ -9,8 +9,8 @@ import org.springframework.data.mongodb.core.MongoTemplate * 实现IAggregateRoot的mongo仓储类 * @param repo MongoRepo对象 */ -class MongoGenericRepository>(private var repo: MongoTemplate) : - IGenericRepository { +class MongoSpecificRepository>(private var repo: MongoTemplate) : + ISpecificRepository { /** * 仓储的对象类 diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/IComplexRepository.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/IComplexRepository.kt deleted file mode 100644 index cacc48d..0000000 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/IComplexRepository.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.synebula.gaea.domain.repository - -import com.synebula.gaea.domain.model.complex.IComplexAggregateRoot - -/** - * 继承本接口表示对象为仓储类。 - * - * @param this T is the parameter - * @author alex - */ -interface IComplexRepository, TKey, TSecond> { - - /** - * 插入单个对象。 - * - * @param obj 需要插入的对象。 - * @return 返回原对象,如果对象ID为自增,则补充自增ID。 - */ - fun add(obj: TAggregateRoot) - - /** - * 更新对象。 - * - * @param obj 需要更新的对象。 - * @return - */ - fun update(obj: TAggregateRoot) - - /** - * 通过id删除该条数据 - * - * @param key 对象ID。 - * @param secondary 对象副主键。 - * @return - */ - fun remove(key: TKey, secondary: TSecond) - - /** - * 根据ID获取对象。 - * - * @param key 对象ID。 - * @return - */ - operator fun get(key: TKey, secondary: TSecond): TAggregateRoot -} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/IGenericRepository.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/ISpecificRepository.kt similarity index 94% rename from src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/IGenericRepository.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/ISpecificRepository.kt index 3850107..9bc9df4 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/IGenericRepository.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/repository/ISpecificRepository.kt @@ -10,7 +10,7 @@ import com.synebula.gaea.domain.model.IAggregateRoot * @param this T is the parameter * @author alex */ -interface IGenericRepository, TKey> { +interface ISpecificRepository, TKey> { /** * 仓储的对象类 diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/ComplexService.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/ComplexService.kt deleted file mode 100644 index 42b26a1..0000000 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/ComplexService.kt +++ /dev/null @@ -1,56 +0,0 @@ -package com.synebula.gaea.domain.service - -import com.synebula.gaea.data.IObjectConverter -import com.synebula.gaea.data.message.Message -import com.synebula.gaea.domain.model.complex.IComplexAggregateRoot -import com.synebula.gaea.domain.repository.IComplexRepository -import com.synebula.gaea.log.ILogger - -/** - * 复合主键的服务基类 - * - * @author alex - * @version 0.1 - * @since 2020-05-15 - */ -open class ComplexService, TKey, TSecond>( - protected var clazz: Class, - protected var repository: IComplexRepository, - protected var converter: IObjectConverter, - override var logger: ILogger -) : IComplexService { - - override fun add(command: ICommand): Message> { - val msg = Message>() - val root = this.convert(command) - repository.add(root) - msg.data = Pair(root.id!!, root.secondary!!) - return msg - } - - override fun update(key: TKey, secondary: TSecond, command: ICommand) { - val root = this.convert(command) - root.id = key - root.secondary = secondary - repository.update(root) - } - - override fun remove(key: TKey, secondary: TSecond) { - repository.remove(key, secondary) - } - - /** - * 转换ICommand类型到聚合根类型,默认实现,根据需要进行覆写。 - * - * @param command - * @return - */ - protected fun convert(command: ICommand): TAggregateRoot { - try { - return converter.convert(command, clazz) - } catch (ex: Exception) { - throw RuntimeException("command not match aggregate root", ex) - } - - } -} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/IComplexService.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/IComplexService.kt deleted file mode 100644 index 0da83b6..0000000 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/IComplexService.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.synebula.gaea.domain.service - -import com.synebula.gaea.data.message.Message -import com.synebula.gaea.log.ILogger - -/** - * class IFlatService - * - * @author alex - * @version 0.1 - * @since 2020-05-15 - */ -interface IComplexService { - /** - * 日志组件。 - */ - var logger: ILogger - - fun add(command: ICommand): Message> - - fun update(key: TKey, secondary: TSecond, command: ICommand) - - fun remove(key: TKey, secondary: TSecond) -} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/Service.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/Service.kt index 6996bcd..a1c978a 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/Service.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/Service.kt @@ -8,8 +8,8 @@ import com.synebula.gaea.log.ILogger /** - * 依赖了IRepositoryTyped仓储借口的服务实现类 ServiceTyped - * 该类依赖仓储接口 @see IRepositoryTyped ,需要显式提供聚合根的class对象 + * 依赖了IRepository仓储借口的服务实现类 Service + * 该类依赖仓储接口 @see IRepository, 需要显式提供聚合根的class对象 * * @param repository 仓储对象 * @param clazz 聚合根类对象 @@ -20,10 +20,10 @@ import com.synebula.gaea.log.ILogger * @since 2020-05-17 */ open class Service, TKey>( - protected open var clazz: Class, - protected open var repository: IRepository, - protected open var converter: IObjectConverter, - override var logger: ILogger + protected open var clazz: Class, + protected open var repository: IRepository, + protected open var converter: IObjectConverter, + override var logger: ILogger ) : IService { override fun add(command: ICommand): Message { diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/GenericService.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/SpecificService.kt similarity index 80% rename from src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/GenericService.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/SpecificService.kt index b236298..c490df4 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/GenericService.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/domain/service/SpecificService.kt @@ -3,12 +3,13 @@ package com.synebula.gaea.domain.service import com.synebula.gaea.data.IObjectConverter import com.synebula.gaea.data.message.Message import com.synebula.gaea.domain.model.IAggregateRoot -import com.synebula.gaea.domain.repository.IGenericRepository +import com.synebula.gaea.domain.repository.ISpecificRepository import com.synebula.gaea.log.ILogger /** - * class FlatService + * 依赖了ISpecificRepository仓储借口的服务实现类 Service + * 该类依赖仓储接口 @see ISpecificRepository, 泛型类上指定了仓储实例的类型 * * @param repository 仓储对象 * @param clazz 聚合根类对象 @@ -18,9 +19,9 @@ import com.synebula.gaea.log.ILogger * @version 0.1 * @since 2020-05-15 */ -open class GenericService, TKey>( +open class SpecificService, TKey>( protected var clazz: Class, - protected var repository: IGenericRepository, + protected var repository: ISpecificRepository, protected var converter: IObjectConverter, override var logger: ILogger ) : IService { diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/query/IQuery.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/query/IQuery.kt index e74f9cb..0e6a26e 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/query/IQuery.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/query/IQuery.kt @@ -33,8 +33,8 @@ interface IQuery { /** * 根据实体类条件查询所有符合条件记录(分页查询) * - * @param param 分页条件 + * @param params 分页条件 * @return 分页数据 */ - fun paging(param: Params, clazz: Class): Page + fun paging(params: Params, clazz: Class): Page } diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/query/IQueryComplex.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/query/IQueryComplex.kt deleted file mode 100644 index 68cbaf6..0000000 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/query/IQueryComplex.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.synebula.gaea.query - -/** - * 查询基接口。 - * - * @author wxf - */ -interface IQueryComplex { - - - /** - * 根据Key获取对象。 - * - * @param key 对象Key。 - * @return - */ - fun get(key: TKey, secondary: TSecond): TView - - /** - * 根据实体类条件查询所有符合条件记录 - * - * @param parameters 查询条件。 - * @return list - */ - fun list(parameters: Map): List - - /** - * 根据条件查询符合条件记录的数量 - * - * @param parameters 查询条件。 - * @return int - */ - fun count(parameters: Map): Int - - /** - * 根据实体类条件查询所有符合条件记录(分页查询) - * - * @param param 分页条件 - * @return - */ - fun paging(param: Params): Page -} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/query/IGenericQuery.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/query/ISpecificQuery.kt similarity index 95% rename from src/gaea/src/main/kotlin/com/synebula/gaea/query/IGenericQuery.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/query/ISpecificQuery.kt index 7211c81..5145aa0 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/query/IGenericQuery.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/query/ISpecificQuery.kt @@ -5,7 +5,7 @@ package com.synebula.gaea.query * * @author alex */ -interface IGenericQuery { +interface ISpecificQuery { /**