Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-biz
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
项目统一框架
amos-boot-biz
Commits
85329143
Commit
85329143
authored
Jul 02, 2025
by
tianyiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完善高级筛选
parent
ffa23b7e
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
130 additions
and
0 deletions
+130
-0
ComprehensiveStatisticalAnalysisServiceImpl.java
...ice/impl/ComprehensiveStatisticalAnalysisServiceImpl.java
+0
-0
DynamicQueryBuilder.java
...os/boot/module/statistcs/factory/DynamicQueryBuilder.java
+48
-0
EnhancedDynamicQueryBuilder.java
...module/statistcs/factory/EnhancedDynamicQueryBuilder.java
+82
-0
No files found.
amos-boot-system-tzs/amos-boot-module-statistics/amos-boot-module-statistics-biz/src/main/java/com/yeejoin/amos/boot/module/statistcs/biz/service/impl/ComprehensiveStatisticalAnalysisServiceImpl.java
View file @
85329143
This diff is collapsed.
Click to expand it.
amos-boot-system-tzs/amos-boot-module-statistics/amos-boot-module-statistics-biz/src/main/java/com/yeejoin/amos/boot/module/statistcs/factory/DynamicQueryBuilder.java
0 → 100644
View file @
85329143
package
com
.
yeejoin
.
amos
.
boot
.
module
.
statistcs
.
factory
;
import
org.elasticsearch.index.query.BoolQueryBuilder
;
import
org.elasticsearch.index.query.QueryBuilder
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
DynamicQueryBuilder
{
private
final
List
<
QueryBuilder
>
shouldClauses
=
new
ArrayList
<>();
private
final
List
<
QueryBuilder
>
mustClauses
=
new
ArrayList
<>();
private
final
List
<
QueryBuilder
>
mustNotClauses
=
new
ArrayList
<>();
// 添加OR条件
public
DynamicQueryBuilder
or
(
QueryBuilder
query
)
{
shouldClauses
.
add
(
query
);
return
this
;
}
// 添加AND条件
public
DynamicQueryBuilder
and
(
QueryBuilder
query
)
{
mustClauses
.
add
(
query
);
return
this
;
}
// 添加NOT条件
public
DynamicQueryBuilder
not
(
QueryBuilder
query
)
{
mustNotClauses
.
add
(
query
);
return
this
;
}
// 构建最终查询
public
BoolQueryBuilder
build
()
{
BoolQueryBuilder
boolQuery
=
QueryBuilders
.
boolQuery
();
if
(!
shouldClauses
.
isEmpty
())
{
shouldClauses
.
forEach
(
boolQuery:
:
should
);
boolQuery
.
minimumShouldMatch
(
1
);
}
mustClauses
.
forEach
(
boolQuery:
:
must
);
mustNotClauses
.
forEach
(
boolQuery:
:
mustNot
);
return
boolQuery
;
}
}
\ No newline at end of file
amos-boot-system-tzs/amos-boot-module-statistics/amos-boot-module-statistics-biz/src/main/java/com/yeejoin/amos/boot/module/statistcs/factory/EnhancedDynamicQueryBuilder.java
0 → 100644
View file @
85329143
package
com
.
yeejoin
.
amos
.
boot
.
module
.
statistcs
.
factory
;
import
org.elasticsearch.index.query.*
;
import
java.util.*
;
public
class
EnhancedDynamicQueryBuilder
{
private
final
List
<
QueryBuilder
>
initialClauses
=
new
ArrayList
<>();
private
String
groupLogic
;
// "AND" 或 "OR"
private
final
List
<
QueryBuilder
>
mustClauses
=
new
ArrayList
<>();
private
final
List
<
QueryBuilder
>
shouldClauses
=
new
ArrayList
<>();
private
final
List
<
QueryBuilder
>
mustNotClauses
=
new
ArrayList
<>();
public
EnhancedDynamicQueryBuilder
()
{
this
(
"AND"
);
// 默认组间关系为AND
}
public
EnhancedDynamicQueryBuilder
(
String
groupLogic
)
{
this
.
groupLogic
=
groupLogic
!=
null
?
groupLogic
:
"AND"
;
}
/**
* 添加条件,自动处理第一个条件为null的情况
* @param query 查询条件
* @param logic 逻辑关系 (AND/OR/NOT),第一个条件可为null
*/
public
EnhancedDynamicQueryBuilder
add
(
QueryBuilder
query
,
String
logic
)
{
if
(
logic
==
null
)
{
if
(
isEmpty
())
{
// 第一个条件,默认作为must条件
mustClauses
.
add
(
query
);
}
else
{
// 后续条件未指定逻辑,使用组间默认逻辑
if
(
"OR"
.
equalsIgnoreCase
(
groupLogic
))
{
shouldClauses
.
add
(
query
);
}
else
{
mustClauses
.
add
(
query
);
}
}
}
else
{
switch
(
logic
.
toUpperCase
())
{
case
"AND"
:
mustClauses
.
add
(
query
);
break
;
case
"OR"
:
shouldClauses
.
add
(
query
);
break
;
case
"NOT"
:
mustNotClauses
.
add
(
query
);
break
;
default
:
throw
new
IllegalArgumentException
(
"Unsupported logic: "
+
logic
);
}
}
return
this
;
}
public
BoolQueryBuilder
build
()
{
BoolQueryBuilder
boolQuery
=
QueryBuilders
.
boolQuery
();
// 处理must条件
mustClauses
.
forEach
(
boolQuery:
:
must
);
// 处理should条件
if
(!
shouldClauses
.
isEmpty
())
{
shouldClauses
.
forEach
(
boolQuery:
:
should
);
// 如果没有must条件,至少满足一个should
if
(
mustClauses
.
isEmpty
())
{
boolQuery
.
minimumShouldMatch
(
1
);
}
}
// 处理mustNot条件
mustNotClauses
.
forEach
(
boolQuery:
:
mustNot
);
return
boolQuery
;
}
private
boolean
isEmpty
()
{
return
mustClauses
.
isEmpty
()
&&
shouldClauses
.
isEmpty
()
&&
mustNotClauses
.
isEmpty
();
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment