修复时间范围组件查询的bug

This commit is contained in:
2020-11-10 20:02:05 +08:00
parent 30b48be94d
commit 823c6063f9

View File

@@ -48,7 +48,7 @@ fun Query.where(
val where = onWhere(key) val where = onWhere(key)
if (where == null) { if (where == null) {
list.add(tryRangeWhere(param.key, value, fieldType)) list.add(tryRangeWhere(param.key, value, onFieldType))
} else { } else {
//判断执行查询子元素还是本字段 //判断执行查询子元素还是本字段
val field = if (where.children.isEmpty()) key else where.children val field = if (where.children.isEmpty()) key else where.children
@@ -61,7 +61,7 @@ fun Query.where(
Operator.lte -> criteria.lte(value) Operator.lte -> criteria.lte(value)
Operator.gte -> criteria.gte(value) Operator.gte -> criteria.gte(value)
Operator.like -> criteria.regex(value.toString(), if (where.sensitiveCase) "" else "i") Operator.like -> criteria.regex(value.toString(), if (where.sensitiveCase) "" else "i")
Operator.default -> tryRangeWhere(param.key, value, fieldType) Operator.default -> tryRangeWhere(param.key, value, onFieldType)
} }
list.add(if (where.children.isEmpty()) criteria else Criteria.where(key).elemMatch(criteria)) list.add(if (where.children.isEmpty()) criteria else Criteria.where(key).elemMatch(criteria))
} }
@@ -75,11 +75,12 @@ fun Query.where(
/** /**
* 尝试范围查询,失败则返回正常查询条件。 * 尝试范围查询,失败则返回正常查询条件。
*/ */
private fun tryRangeWhere(key: String, value: Any, fieldType: Class<*>?): Criteria { private fun tryRangeWhere(key: String, value: Any, onFieldType: ((v: String) -> Class<*>?) = { null }): Criteria {
val rangeStartSuffix = "[0]" //范围查询开始后缀 val rangeStartSuffix = "[0]" //范围查询开始后缀
val rangeEndSuffix = "[1]" //范围查询结束后缀 val rangeEndSuffix = "[1]" //范围查询结束后缀
var condition = value var condition = value
val realKey = key.removeSuffix(rangeStartSuffix).removeSuffix(rangeEndSuffix) val realKey = key.removeSuffix(rangeStartSuffix).removeSuffix(rangeEndSuffix)
val fieldType = onFieldType(realKey)
if (fieldType != null && value.javaClass != fieldType && fieldType == Date::class.java) { if (fieldType != null && value.javaClass != fieldType && fieldType == Date::class.java) {
condition = DateTime(value.toString(), "yyyy-MM-dd HH:mm:ss").date condition = DateTime(value.toString(), "yyyy-MM-dd HH:mm:ss").date
} }