From 6524ae97b52dd539c11c6243639627b359337f35 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 25 May 2020 20:37:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9F=A5=E8=AF=A2=E6=96=87?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E4=BF=9D=E8=AF=81datetime=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E7=9A=84=E6=AD=A3=E7=A1=AE=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/synebula/gaea/mongo/MongoExt.kt | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) 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 0a47f0b..9c006e7 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 @@ -30,9 +30,9 @@ fun Query.select(fields: Array): Query { * @param onWhere 获取字段查询方式的方法 */ fun Query.where( - params: Map?, - onWhere: ((v: String) -> Operator) = { Operator.default }, - onFieldType: ((v: String) -> Class<*>?) = { null } + params: Map?, + onWhere: ((v: String) -> Operator) = { Operator.default }, + onFieldType: ((v: String) -> Class<*>?) = { null } ): Query { val list = arrayListOf() if (params != null) { @@ -41,7 +41,7 @@ fun Query.where( var value = param.value val fieldType = onFieldType(key) if (fieldType != null && value.javaClass != fieldType && fieldType == Date::class.java) { - value = DateTime(value.toString(), "yyyy-MM-dd").date + value = DateTime(value.toString(), "yyyy-MM-dd HH:mm:ss").date } when (onWhere(key)) { Operator.eq -> list.add(Criteria.where(key).`is`(value)) @@ -51,31 +51,30 @@ fun Query.where( Operator.lte -> list.add(Criteria.where(key).lte(value)) Operator.gte -> list.add(Criteria.where(key).gte(value)) Operator.like -> list.add(Criteria.where(key).regex(value.toString())) - Operator.default -> rangeWhere(param.key, value, onFieldType(param.key), list) + Operator.default -> rangeWhere(param.key, value, list, onFieldType) } } } - return this.addCriteria(Criteria().andOperator(*list.toTypedArray())) + val criteria = Criteria() + if (list.isNotEmpty()) criteria.andOperator(*list.toTypedArray()) + return this.addCriteria(criteria) } -private fun rangeWhere(key: String, value: Any, fieldType: Class<*>?, list: MutableList) { +private fun rangeWhere(key: String, value: Any, list: MutableList, onFieldType: ((v: String) -> Class<*>?) = { null }) { val rangeStartSuffix = "[0]" //范围查询开始后缀 val rangeEndSuffix = "[1]" //范围查询结束后缀 var condition = value - if (value.javaClass != fieldType && fieldType == Date::class.java) { - condition = DateTime(value.toString(), "yyyy-MM-dd").date + val realKey = key.removeSuffix(rangeStartSuffix).removeSuffix(rangeEndSuffix) + val fieldType = onFieldType(realKey) + if (fieldType != null && value.javaClass != fieldType && fieldType == Date::class.java) { + condition = DateTime(value.toString(), "yyyy-MM-dd HH:mm:ss").date } + when { //以范围查询开始后缀结尾表示要用大于或等于查询方式 - key.endsWith(rangeStartSuffix) -> - list.add( - Criteria.where(key.removeSuffix(rangeStartSuffix)).gte(condition) - ) + key.endsWith(rangeStartSuffix) -> list.add(Criteria.where(realKey).gte(condition)) //以范围查询结束后缀结尾表示要用小于或等于查询方式 - key.endsWith(rangeEndSuffix) -> - list.add( - Criteria.where(key.removeSuffix(rangeEndSuffix)).lte(condition) - ) + key.endsWith(rangeEndSuffix) -> list.add(Criteria.where(realKey).lte(condition)) else -> list.add(Criteria.where(key).`is`(value)) } } @@ -92,7 +91,7 @@ fun Query.where(params: Map?, clazz: Class<*>): Query { field = clazz.declaredFields.find { it.name == name } where = field?.getDeclaredAnnotation(Where::class.java) if (where == null) Operator.default else where!!.operator - }) + }, { name -> clazz.declaredFields.find { it.name == name }?.type }) } /**