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
c286b52f
Commit
c286b52f
authored
Jul 15, 2025
by
hcing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:统计服务,大屏综合统计查询接口-人员相关
parent
4dcd9ab2
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
292 additions
and
178 deletions
+292
-178
UnitTypeEnum.java
...n/amos/boot/module/statistics/api/enums/UnitTypeEnum.java
+3
-1
ComprehensiveStatisticalAnalysisServiceImpl.java
...ice/impl/ComprehensiveStatisticalAnalysisServiceImpl.java
+261
-177
QueryBuilderUtils.java
...os/boot/module/statistcs/biz/utils/QueryBuilderUtils.java
+28
-0
No files found.
amos-boot-system-tzs/amos-boot-module-statistics/amos-boot-module-statistics-api/src/main/java/com/yeejoin/amos/boot/module/statistics/api/enums/UnitTypeEnum.java
View file @
c286b52f
...
@@ -23,7 +23,9 @@ public enum UnitTypeEnum {
...
@@ -23,7 +23,9 @@ public enum UnitTypeEnum {
azgzwxdw
(
"安装改造维修单位"
,
"1234"
,
"license"
),
azgzwxdw
(
"安装改造维修单位"
,
"1234"
,
"license"
),
zzdw
(
"制造单位"
,
"1236"
,
"license"
),
zzdw
(
"制造单位"
,
"1236"
,
"license"
),
sjdw
(
"设计单位"
,
"1235"
,
"license"
),
sjdw
(
"设计单位"
,
"1235"
,
"license"
),
grzt
(
"个人主体"
,
"6599"
,
"use"
);
grzt
(
"个人主体"
,
"6599"
,
"use"
),
jyjg
(
"检验机构"
,
"1233-1"
,
"license"
),
jcjg
(
"检测机构"
,
"1233-2"
,
"license"
);
private
String
name
;
private
String
name
;
private
String
code
;
private
String
code
;
...
...
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 @
c286b52f
...
@@ -261,182 +261,13 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -261,182 +261,13 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
JSONObject
filterParams
=
null
;
JSONObject
filterParams
=
null
;
if
(!
ObjectUtils
.
isEmpty
(
filter
.
get
(
"filterParams"
)))
{
if
(!
ObjectUtils
.
isEmpty
(
filter
.
get
(
"filterParams"
)))
{
filterParams
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filter
.
get
(
"filterParams"
)));
filterParams
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filter
.
get
(
"filterParams"
)));
String
filterType
=
filter
.
getString
(
"filterType"
);
String
filterType
=
"advanced"
;
deleteUnitCategory
(
filterParams
);
// 组装人员过滤条件
//快捷筛选和自定义筛选解析筛选规则不一致
this
.
getPersonBoolQueryBuilder
(
filterParams
,
boolMust
,
filterType
);
if
(
filterType
.
equals
(
"advanced"
))
{
filterParams
.
forEach
((
k
,
v
)
->
{
if
(
v
instanceof
JSONArray
)
{
if
(!((
JSONArray
)
v
).
contains
(
"all"
)
&&
((
JSONArray
)
v
).
size
()
>
0
)
{
String
field
=
k
;
if
(
k
.
equals
(
"newPost"
)
||
k
.
equals
(
"subPost"
)
||
k
.
equals
(
"equipType"
))
{
DynamicQueryBuilder
dynamicQueryBuilder
=
new
DynamicQueryBuilder
();
EnhancedDynamicQueryBuilder
enhancedDynamicQueryBuilder
=
new
EnhancedDynamicQueryBuilder
();
((
JSONArray
)
v
).
forEach
(
item
->
enhancedDynamicQueryBuilder
.
add
(
QueryBuilders
.
wildcardQuery
(
field
,
"*"
+
item
+
"*"
),
or
));
dynamicQueryBuilder
.
and
(
enhancedDynamicQueryBuilder
.
build
().
minimumShouldMatch
(
1
));
boolMust
.
must
(
dynamicQueryBuilder
.
build
());
}
else
if
(
k
.
equals
(
"unitType"
))
{
DynamicQueryBuilder
dynamicQueryBuilder
=
new
DynamicQueryBuilder
();
EnhancedDynamicQueryBuilder
enhancedDynamicQueryBuilder
=
new
EnhancedDynamicQueryBuilder
();
((
JSONArray
)
v
).
forEach
(
item
->
enhancedDynamicQueryBuilder
.
add
(
QueryBuilders
.
wildcardQuery
(
field
+
".keyword"
,
"*"
+
item
+
"*"
),
or
));
dynamicQueryBuilder
.
and
(
enhancedDynamicQueryBuilder
.
build
().
minimumShouldMatch
(
1
));
boolMust
.
must
(
dynamicQueryBuilder
.
build
());
}
else
if
(
k
.
equals
(
"education"
))
{
TermsQueryBuilder
termsQuery
=
QueryBuilders
.
termsQuery
(
field
,
(
JSONArray
)
v
);
boolMust
.
must
(
termsQuery
);
}
else
if
(
k
.
equals
(
"certNo"
)
||
k
.
equals
(
"expiryDate"
)
||
k
.
equals
(
"permissionLevel"
)
||
k
.
equals
(
"certType"
)
||
k
.
equals
(
"jobItem"
)
||
k
.
equals
(
"permissionItem"
))
{
String
path
=
"licenses"
;
((
JSONArray
)
v
).
forEach
(
item
->
{
String
nestedField
=
path
+
"."
+
k
;
// 根据证书编号判断有无资质
if
(
k
.
equals
(
"certNo"
))
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
existsQuery
(
nestedField
),
ScoreMode
.
None
);
// 以下人员类型有资质要求
// 人员类型(newPost):检验人员:66151、检测人员:66152、作业人员:6552、检查人员:6763
// 人员子类型(subPost): 持证人员:6713、持证人员(P):6764、持证人员(R2):6765
if
(
item
.
equals
(
"1"
))
{
boolMust
.
must
(
nestedQuery
);
}
else
if
(
item
.
equals
(
"0"
))
{
// 无资质
BoolQueryBuilder
queryBuilder
=
QueryBuilders
.
boolQuery
()
.
should
(
QueryBuilders
.
wildcardQuery
(
"newPost"
,
"*66151*"
))
.
should
(
QueryBuilders
.
wildcardQuery
(
"newPost"
,
"*66152*"
))
.
should
(
QueryBuilders
.
wildcardQuery
(
"newPost"
,
"*6552*"
))
.
should
(
QueryBuilders
.
wildcardQuery
(
"newPost"
,
"*6763*"
))
.
should
(
QueryBuilders
.
wildcardQuery
(
"subPost"
,
"*6713*"
))
.
should
(
QueryBuilders
.
wildcardQuery
(
"subPost"
,
"*6764*"
))
.
should
(
QueryBuilders
.
wildcardQuery
(
"subPost"
,
"*6765*"
))
.
minimumShouldMatch
(
1
);
boolMust
.
must
(
queryBuilder
);
boolMust
.
mustNot
(
nestedQuery
);
}
else
{
// 无资质要求
BoolQueryBuilder
queryBuilder
=
QueryBuilders
.
boolQuery
()
.
mustNot
(
QueryBuilders
.
wildcardQuery
(
"newPost"
,
"*66151*"
))
.
mustNot
(
QueryBuilders
.
wildcardQuery
(
"newPost"
,
"*66152*"
))
.
mustNot
(
QueryBuilders
.
wildcardQuery
(
"newPost"
,
"*6552*"
))
.
mustNot
(
QueryBuilders
.
wildcardQuery
(
"newPost"
,
"*6763*"
))
.
mustNot
(
QueryBuilders
.
wildcardQuery
(
"subPost"
,
"*6713*"
))
.
mustNot
(
QueryBuilders
.
wildcardQuery
(
"subPost"
,
"*6764*"
))
.
mustNot
(
QueryBuilders
.
wildcardQuery
(
"subPost"
,
"*6765*"
));
boolMust
.
must
(
queryBuilder
);
}
}
else
if
(
k
.
equals
(
"expiryDate"
))
{
EnhancedDynamicQueryBuilder
enhancedDynamicQueryBuilder
=
new
EnhancedDynamicQueryBuilder
();
if
(
item
.
equals
(
"overdue"
))
{
// 超期:小于当前日期
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
nestedField
).
lt
(
LocalDate
.
now
().
format
(
formatter
))),
ScoreMode
.
None
);
enhancedDynamicQueryBuilder
.
add
(
nestedQuery
,
or
);
boolMust
.
must
(
enhancedDynamicQueryBuilder
.
build
());
}
else
if
(
item
.
equals
(
"near"
))
{
// 临期:小于等于当前日期加上30天
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
nestedField
).
lte
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
)).
gte
(
LocalDate
.
now
().
format
(
formatter
))),
ScoreMode
.
None
);
enhancedDynamicQueryBuilder
.
add
(
nestedQuery
,
or
);
boolMust
.
must
(
enhancedDynamicQueryBuilder
.
build
());
}
else
if
(
item
.
equals
(
"normal"
))
{
// 正常:大于当前日期加上30天
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
nestedField
).
gt
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
))),
ScoreMode
.
None
);
enhancedDynamicQueryBuilder
.
add
(
nestedQuery
,
or
);
boolMust
.
must
(
enhancedDynamicQueryBuilder
.
build
());
}
else
if
(
item
.
equals
(
"none"
))
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
existsQuery
(
nestedField
)),
ScoreMode
.
None
);
enhancedDynamicQueryBuilder
.
add
(
nestedQuery
,
or
);
boolMust
.
must
(
enhancedDynamicQueryBuilder
.
build
());
}
}
else
if
(
k
.
equals
(
"certType"
)
||
k
.
equals
(
"permissionLevel"
))
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
termsQuery
(
nestedField
,
(
JSONArray
)
v
)),
ScoreMode
.
None
);
boolMust
.
must
(
nestedQuery
);
}
else
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
wildcardQuery
(
nestedField
,
"*"
+
item
+
"*"
)),
ScoreMode
.
None
);
boolMust
.
should
(
nestedQuery
);
}
});
}
else
if
(
k
.
equals
(
"issueDate"
))
{
JSONArray
issueDates
=
(
JSONArray
)
v
;
String
startDate
=
DateUtils
.
convertDateToString
(
issueDates
.
getDate
(
0
),
DateUtils
.
DATE_PATTERN
);
String
endDate
=
DateUtils
.
convertDateToString
(
issueDates
.
getDate
(
1
),
DateUtils
.
DATE_PATTERN
);
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
"licenses"
,
QueryBuilders
.
rangeQuery
(
"licenses."
+
k
).
gte
(
startDate
).
lte
(
endDate
),
ScoreMode
.
None
);
boolMust
.
filter
(
nestedQuery
);
}
}
}
else
if
(
v
instanceof
String
)
{
if
(
k
.
equals
(
"fuzzyInput"
))
{
String
fuzzyValue
=
String
.
valueOf
(
v
);
BoolQueryBuilder
queryBuilder
=
QueryBuilders
.
boolQuery
();
queryBuilder
.
should
(
QueryBuilders
.
wildcardQuery
(
"name"
,
"*"
+
fuzzyValue
+
"*"
));
queryBuilder
.
should
(
QueryBuilders
.
matchQuery
(
"postName"
,
fuzzyValue
));
queryBuilder
.
should
(
QueryBuilders
.
matchQuery
(
"subPostName"
,
fuzzyValue
));
queryBuilder
.
should
(
QueryBuilders
.
wildcardQuery
(
"unitName"
,
"*"
+
fuzzyValue
+
"*"
));
queryBuilder
.
should
(
QueryBuilders
.
wildcardQuery
(
"equipCategoryName"
,
"*"
+
fuzzyValue
+
"*"
));
queryBuilder
.
should
(
QueryBuilders
.
wildcardQuery
(
"superviseOrgName"
,
"*"
+
fuzzyValue
+
"*"
));
queryBuilder
.
should
(
QueryBuilders
.
wildcardQuery
(
"address"
,
"*"
+
fuzzyValue
+
"*"
));
queryBuilder
.
minimumShouldMatch
(
1
);
boolMust
.
must
(
queryBuilder
);
}
else
if
(
k
.
equals
(
"unitCategory"
))
{
if
(!
""
.
equals
(
v
)
&&
!
ObjectUtils
.
isEmpty
(
v
)
&&
!
"all"
.
equals
(
v
))
{
String
category
=
v
.
toString
();
JSONArray
unitTypeByType
=
UnitTypeNewEnum
.
getUnitTypeByType
(
category
);
List
<
String
>
list
=
unitTypeByType
.
stream
().
map
(
e
->
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
e
)).
get
(
"value"
).
toString
()).
collect
(
Collectors
.
toList
());
list
.
forEach
(
item
->
boolMust
.
should
(
QueryBuilders
.
wildcardQuery
(
"unitType.keyword"
,
"*"
+
item
+
"*"
)).
minimumShouldMatch
(
1
));
}
}
}
});
}
else
{
JSONArray
leftGroup
=
filterParams
.
getJSONArray
(
"group1"
);
JSONArray
rightGroup
=
filterParams
.
getJSONArray
(
"group2"
);
Boolean
isOrGroup
=
or
.
equals
(
filterParams
.
getString
(
"groupAndOr"
))
?
Boolean
.
TRUE
:
Boolean
.
FALSE
;
handleAdvancedFilter
(
boolMust
,
leftGroup
,
rightGroup
,
isOrGroup
);
}
}
// 排序
if
(!
ObjectUtils
.
isEmpty
(
filter
.
get
(
"sort"
)))
{
JSONObject
sort
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filter
.
get
(
"sort"
)));
String
field
=
sort
.
getString
(
"field"
);
if
(
field
.
equals
(
"subPostName"
))
{
field
=
"subPost"
;
}
else
if
(
field
.
equals
(
"postName"
))
{
field
=
"newPost"
;
}
else
if
(
field
.
equals
(
"superviseOrgName"
))
{
field
=
"superviseOrgCode"
;
}
builder
.
sort
(
field
,
sort
.
getString
(
"order"
).
equals
(
"desc"
)
?
SortOrder
.
DESC
:
SortOrder
.
ASC
);
}
}
// 组装人员排序条件
this
.
getPersonBoolQuerySort
(
filter
,
builder
);
builder
.
query
(
boolMust
);
builder
.
query
(
boolMust
);
builder
.
from
((
current
-
1
)
*
size
);
builder
.
from
((
current
-
1
)
*
size
);
builder
.
size
(
size
);
builder
.
size
(
size
);
...
@@ -543,6 +374,192 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -543,6 +374,192 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
return
result
;
return
result
;
}
}
/**
* 组装人员过滤条件
*/
private
void
getPersonBoolQueryBuilder
(
JSONObject
filterParams
,
BoolQueryBuilder
boolMust
,
String
filterType
)
{
deleteUnitCategory
(
filterParams
);
// 快捷筛选和自定义筛选解析筛选规则不一致
if
(
filterType
.
equals
(
"advanced"
))
{
filterParams
.
forEach
((
k
,
v
)
->
{
if
(
v
instanceof
JSONArray
)
{
if
(!((
JSONArray
)
v
).
contains
(
"all"
)
&&
((
JSONArray
)
v
).
size
()
>
0
)
{
String
field
=
k
;
if
(
k
.
equals
(
"newPost"
)
||
k
.
equals
(
"subPost"
)
||
k
.
equals
(
"equipType"
))
{
DynamicQueryBuilder
dynamicQueryBuilder
=
new
DynamicQueryBuilder
();
EnhancedDynamicQueryBuilder
enhancedDynamicQueryBuilder
=
new
EnhancedDynamicQueryBuilder
();
((
JSONArray
)
v
).
forEach
(
item
->
enhancedDynamicQueryBuilder
.
add
(
QueryBuilders
.
wildcardQuery
(
field
,
"*"
+
item
+
"*"
),
or
));
dynamicQueryBuilder
.
and
(
enhancedDynamicQueryBuilder
.
build
().
minimumShouldMatch
(
1
));
boolMust
.
must
(
dynamicQueryBuilder
.
build
());
}
else
if
(
k
.
equals
(
"unitType"
))
{
DynamicQueryBuilder
dynamicQueryBuilder
=
new
DynamicQueryBuilder
();
EnhancedDynamicQueryBuilder
enhancedDynamicQueryBuilder
=
new
EnhancedDynamicQueryBuilder
();
((
JSONArray
)
v
).
forEach
(
item
->
enhancedDynamicQueryBuilder
.
add
(
QueryBuilders
.
wildcardQuery
(
field
+
".keyword"
,
"*"
+
item
+
"*"
),
or
));
dynamicQueryBuilder
.
and
(
enhancedDynamicQueryBuilder
.
build
().
minimumShouldMatch
(
1
));
boolMust
.
must
(
dynamicQueryBuilder
.
build
());
}
else
if
(
k
.
equals
(
"education"
))
{
TermsQueryBuilder
termsQuery
=
QueryBuilders
.
termsQuery
(
field
,
(
JSONArray
)
v
);
boolMust
.
must
(
termsQuery
);
}
else
if
(
k
.
equals
(
"certNo"
)
||
k
.
equals
(
"expiryDate"
)
||
k
.
equals
(
"permissionLevel"
)
||
k
.
equals
(
"certType"
)
||
k
.
equals
(
"jobItem"
)
||
k
.
equals
(
"permissionItem"
))
{
String
path
=
"licenses"
;
((
JSONArray
)
v
).
forEach
(
item
->
{
String
nestedField
=
path
+
"."
+
k
;
// 根据证书编号判断有无资质
if
(
k
.
equals
(
"certNo"
))
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
existsQuery
(
nestedField
),
ScoreMode
.
None
);
// 以下人员类型有资质要求
// 人员类型(newPost):检验人员:66151、检测人员:66152、作业人员:6552、检查人员:6763
// 人员子类型(subPost): 持证人员:6713、持证人员(P):6764、持证人员(R2):6765
if
(
item
.
equals
(
"1"
))
{
boolMust
.
must
(
nestedQuery
);
}
else
if
(
item
.
equals
(
"0"
))
{
// 无资质
BoolQueryBuilder
queryBuilder
=
QueryBuilders
.
boolQuery
()
.
should
(
QueryBuilders
.
wildcardQuery
(
"newPost"
,
"*66151*"
))
.
should
(
QueryBuilders
.
wildcardQuery
(
"newPost"
,
"*66152*"
))
.
should
(
QueryBuilders
.
wildcardQuery
(
"newPost"
,
"*6552*"
))
.
should
(
QueryBuilders
.
wildcardQuery
(
"newPost"
,
"*6763*"
))
.
should
(
QueryBuilders
.
wildcardQuery
(
"subPost"
,
"*6713*"
))
.
should
(
QueryBuilders
.
wildcardQuery
(
"subPost"
,
"*6764*"
))
.
should
(
QueryBuilders
.
wildcardQuery
(
"subPost"
,
"*6765*"
))
.
minimumShouldMatch
(
1
);
boolMust
.
must
(
queryBuilder
);
boolMust
.
mustNot
(
nestedQuery
);
}
else
{
// 无资质要求
BoolQueryBuilder
queryBuilder
=
QueryBuilders
.
boolQuery
()
.
mustNot
(
QueryBuilders
.
wildcardQuery
(
"newPost"
,
"*66151*"
))
.
mustNot
(
QueryBuilders
.
wildcardQuery
(
"newPost"
,
"*66152*"
))
.
mustNot
(
QueryBuilders
.
wildcardQuery
(
"newPost"
,
"*6552*"
))
.
mustNot
(
QueryBuilders
.
wildcardQuery
(
"newPost"
,
"*6763*"
))
.
mustNot
(
QueryBuilders
.
wildcardQuery
(
"subPost"
,
"*6713*"
))
.
mustNot
(
QueryBuilders
.
wildcardQuery
(
"subPost"
,
"*6764*"
))
.
mustNot
(
QueryBuilders
.
wildcardQuery
(
"subPost"
,
"*6765*"
));
boolMust
.
must
(
queryBuilder
);
}
}
else
if
(
k
.
equals
(
"expiryDate"
))
{
EnhancedDynamicQueryBuilder
enhancedDynamicQueryBuilder
=
new
EnhancedDynamicQueryBuilder
();
if
(
item
.
equals
(
"overdue"
))
{
// 超期:小于当前日期
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
nestedField
).
lt
(
LocalDate
.
now
().
format
(
formatter
))),
ScoreMode
.
None
);
enhancedDynamicQueryBuilder
.
add
(
nestedQuery
,
or
);
boolMust
.
must
(
enhancedDynamicQueryBuilder
.
build
());
}
else
if
(
item
.
equals
(
"near"
))
{
// 临期:小于等于当前日期加上30天
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
nestedField
).
lte
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
)).
gte
(
LocalDate
.
now
().
format
(
formatter
))),
ScoreMode
.
None
);
enhancedDynamicQueryBuilder
.
add
(
nestedQuery
,
or
);
boolMust
.
must
(
enhancedDynamicQueryBuilder
.
build
());
}
else
if
(
item
.
equals
(
"normal"
))
{
// 正常:大于当前日期加上30天
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
nestedField
).
gt
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
))),
ScoreMode
.
None
);
enhancedDynamicQueryBuilder
.
add
(
nestedQuery
,
or
);
boolMust
.
must
(
enhancedDynamicQueryBuilder
.
build
());
}
else
if
(
item
.
equals
(
"none"
))
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
must
(
existsQuery
(
nestedField
)),
ScoreMode
.
None
);
enhancedDynamicQueryBuilder
.
add
(
nestedQuery
,
or
);
boolMust
.
must
(
enhancedDynamicQueryBuilder
.
build
());
}
}
else
if
(
k
.
equals
(
"certType"
)
||
k
.
equals
(
"permissionLevel"
))
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
termsQuery
(
nestedField
,
(
JSONArray
)
v
)),
ScoreMode
.
None
);
boolMust
.
must
(
nestedQuery
);
}
else
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
wildcardQuery
(
nestedField
,
"*"
+
item
+
"*"
)),
ScoreMode
.
None
);
boolMust
.
should
(
nestedQuery
);
}
});
}
else
if
(
k
.
equals
(
"issueDate"
))
{
JSONArray
issueDates
=
(
JSONArray
)
v
;
String
startDate
=
DateUtils
.
convertDateToString
(
issueDates
.
getDate
(
0
),
DateUtils
.
DATE_PATTERN
);
String
endDate
=
DateUtils
.
convertDateToString
(
issueDates
.
getDate
(
1
),
DateUtils
.
DATE_PATTERN
);
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
"licenses"
,
QueryBuilders
.
rangeQuery
(
"licenses."
+
k
).
gte
(
startDate
).
lte
(
endDate
),
ScoreMode
.
None
);
boolMust
.
filter
(
nestedQuery
);
}
}
}
else
if
(
v
instanceof
String
)
{
if
(
k
.
equals
(
"fuzzyInput"
))
{
String
fuzzyValue
=
String
.
valueOf
(
v
);
BoolQueryBuilder
queryBuilder
=
QueryBuilders
.
boolQuery
();
queryBuilder
.
should
(
QueryBuilders
.
wildcardQuery
(
"name"
,
"*"
+
fuzzyValue
+
"*"
));
queryBuilder
.
should
(
QueryBuilders
.
matchQuery
(
"postName"
,
fuzzyValue
));
queryBuilder
.
should
(
QueryBuilders
.
matchQuery
(
"subPostName"
,
fuzzyValue
));
queryBuilder
.
should
(
QueryBuilders
.
wildcardQuery
(
"unitName"
,
"*"
+
fuzzyValue
+
"*"
));
queryBuilder
.
should
(
QueryBuilders
.
wildcardQuery
(
"equipCategoryName"
,
"*"
+
fuzzyValue
+
"*"
));
queryBuilder
.
should
(
QueryBuilders
.
wildcardQuery
(
"superviseOrgName"
,
"*"
+
fuzzyValue
+
"*"
));
queryBuilder
.
should
(
QueryBuilders
.
wildcardQuery
(
"address"
,
"*"
+
fuzzyValue
+
"*"
));
queryBuilder
.
minimumShouldMatch
(
1
);
boolMust
.
must
(
queryBuilder
);
}
else
if
(
k
.
equals
(
"unitCategory"
))
{
if
(!
""
.
equals
(
v
)
&&
!
ObjectUtils
.
isEmpty
(
v
)
&&
!
"all"
.
equals
(
v
))
{
String
category
=
v
.
toString
();
JSONArray
unitTypeByType
=
UnitTypeNewEnum
.
getUnitTypeByType
(
category
);
List
<
String
>
list
=
unitTypeByType
.
stream
().
map
(
e
->
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
e
)).
get
(
"value"
).
toString
()).
collect
(
Collectors
.
toList
());
list
.
forEach
(
item
->
boolMust
.
should
(
QueryBuilders
.
wildcardQuery
(
"unitType.keyword"
,
"*"
+
item
+
"*"
)).
minimumShouldMatch
(
1
));
}
}
}
});
}
else
{
JSONArray
leftGroup
=
filterParams
.
getJSONArray
(
"group1"
);
JSONArray
rightGroup
=
filterParams
.
getJSONArray
(
"group2"
);
Boolean
isOrGroup
=
or
.
equals
(
filterParams
.
getString
(
"groupAndOr"
))
?
Boolean
.
TRUE
:
Boolean
.
FALSE
;
handleAdvancedFilter
(
boolMust
,
leftGroup
,
rightGroup
,
isOrGroup
);
}
}
/**
* 组装人员排序
*/
private
void
getPersonBoolQuerySort
(
JSONObject
filter
,
SearchSourceBuilder
builder
)
{
// 排序
if
(!
ObjectUtils
.
isEmpty
(
filter
.
get
(
"sort"
)))
{
JSONObject
sort
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filter
.
get
(
"sort"
)));
String
field
=
sort
.
getString
(
"field"
);
if
(
field
.
equals
(
"subPostName"
))
{
field
=
"subPost"
;
}
else
if
(
field
.
equals
(
"postName"
))
{
field
=
"newPost"
;
}
else
if
(
field
.
equals
(
"superviseOrgName"
))
{
field
=
"superviseOrgCode"
;
}
builder
.
sort
(
field
,
sort
.
getString
(
"order"
).
equals
(
"desc"
)
?
SortOrder
.
DESC
:
SortOrder
.
ASC
);
}
}
private
JSONObject
queryCompanyPage
(
JSONObject
filter
,
Page
<
JSONObject
>
page
,
Integer
current
,
Integer
size
)
{
private
JSONObject
queryCompanyPage
(
JSONObject
filter
,
Page
<
JSONObject
>
page
,
Integer
current
,
Integer
size
)
{
JSONObject
result
=
new
JSONObject
();
JSONObject
result
=
new
JSONObject
();
...
@@ -2668,8 +2685,75 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -2668,8 +2685,75 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
}
}
private
List
<
Map
<
String
,
Object
>>
queryDpPersonStatistics
(
JSONObject
filter
,
SearchRequest
request
,
SearchSourceBuilder
builder
,
BoolQueryBuilder
boolMust
,
Map
<
String
,
Object
>
tabTotalMap
)
{
private
List
<
Map
<
String
,
Object
>>
queryDpPersonStatistics
(
JSONObject
filter
,
SearchRequest
request
,
SearchSourceBuilder
builder
,
return
null
;
BoolQueryBuilder
boolMust
,
Map
<
String
,
Object
>
tabTotalMap
)
{
JSONObject
filterParams
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filter
.
get
(
"filterParams"
)));
String
filterType
=
"advanced"
;
// 组装人员过滤条件
this
.
getPersonBoolQueryBuilder
(
filterParams
,
boolMust
,
filterType
);
// 计算总数
long
personTotal
=
this
.
queryDpPersonStatisticsTotal
(
boolMust
);
// 聚合查询
builder
.
size
(
0
);
// 不返回任何文档,只返回聚合结果
String
aggName
=
"unit_types_split"
;
QueryBuilderUtils
.
buildSplitFieldAggCondition
(
builder
,
"unitType.keyword"
,
"#"
,
aggName
);
builder
.
query
(
boolMust
);
request
.
source
(
builder
);
Map
<
String
,
Object
>
result
=
new
HashMap
<>();
try
{
SearchResponse
searchResponse
=
restHighLevelClient
.
search
(
request
,
RequestOptions
.
DEFAULT
);
// 解析聚合结果
Terms
unitTypesTerms
=
searchResponse
.
getAggregations
().
get
(
aggName
);
if
(
unitTypesTerms
!=
null
)
{
for
(
Terms
.
Bucket
bucket
:
unitTypesTerms
.
getBuckets
())
{
if
(
bucket
.
getKeyAsString
().
equals
(
UnitTypeEnum
.
sydw
.
getName
()))
{
result
.
put
(
"sydw"
,
bucket
.
getDocCount
());
}
if
(
bucket
.
getKeyAsString
().
equals
(
UnitTypeEnum
.
grzt
.
getName
()))
{
result
.
put
(
"grzt"
,
bucket
.
getDocCount
());
}
if
(
bucket
.
getKeyAsString
().
equals
(
UnitTypeEnum
.
sjdw
.
getName
()))
{
result
.
put
(
"sjdw"
,
bucket
.
getDocCount
());
}
if
(
bucket
.
getKeyAsString
().
equals
(
UnitTypeEnum
.
zzdw
.
getName
()))
{
result
.
put
(
"zzdw"
,
bucket
.
getDocCount
());
}
if
(
bucket
.
getKeyAsString
().
equals
(
UnitTypeEnum
.
azgzwxdw
.
getName
()))
{
result
.
put
(
"azgzwxdw"
,
bucket
.
getDocCount
());
}
if
(
bucket
.
getKeyAsString
().
equals
(
UnitTypeEnum
.
czdw
.
getName
()))
{
result
.
put
(
"czdw"
,
bucket
.
getDocCount
());
}
if
(
bucket
.
getKeyAsString
().
equals
(
UnitTypeEnum
.
jyjg
.
getName
()))
{
result
.
put
(
"jyjg"
,
bucket
.
getDocCount
());
}
if
(
bucket
.
getKeyAsString
().
equals
(
UnitTypeEnum
.
jcjg
.
getName
()))
{
result
.
put
(
"jcjg"
,
bucket
.
getDocCount
());
}
}
}
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
e
);
}
// 汇总总数
tabTotalMap
.
put
(
StatisticalAnalysisEnum
.
person
.
getCode
(),
personTotal
);
return
Collections
.
singletonList
(
result
);
}
private
long
queryDpPersonStatisticsTotal
(
BoolQueryBuilder
boolMust
)
{
CountRequest
countRequest
=
new
CountRequest
();
countRequest
.
indices
(
StatisticalAnalysisEnum
.
person
.
getKey
());
countRequest
.
query
(
boolMust
);
CountResponse
countResponse
;
try
{
countResponse
=
restHighLevelClient
.
count
(
countRequest
,
RequestOptions
.
DEFAULT
);
}
catch
(
Exception
exception
)
{
throw
new
RuntimeException
(
exception
);
}
return
ObjectUtils
.
isEmpty
(
countResponse
)
?
0
:
countResponse
.
getCount
();
}
}
private
List
<
Map
<
String
,
Object
>>
queryDpCompanyStatistics
(
JSONObject
filter
,
SearchRequest
request
,
SearchSourceBuilder
builder
,
BoolQueryBuilder
boolMust
,
Map
<
String
,
Object
>
tabTotalMap
)
{
private
List
<
Map
<
String
,
Object
>>
queryDpCompanyStatistics
(
JSONObject
filter
,
SearchRequest
request
,
SearchSourceBuilder
builder
,
BoolQueryBuilder
boolMust
,
Map
<
String
,
Object
>
tabTotalMap
)
{
...
...
amos-boot-system-tzs/amos-boot-module-statistics/amos-boot-module-statistics-biz/src/main/java/com/yeejoin/amos/boot/module/statistcs/biz/utils/QueryBuilderUtils.java
View file @
c286b52f
...
@@ -2,6 +2,12 @@ package com.yeejoin.amos.boot.module.statistcs.biz.utils;
...
@@ -2,6 +2,12 @@ package com.yeejoin.amos.boot.module.statistcs.biz.utils;
import
org.elasticsearch.index.query.BoolQueryBuilder
;
import
org.elasticsearch.index.query.BoolQueryBuilder
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
org.elasticsearch.script.Script
;
import
org.elasticsearch.script.ScriptType
;
import
org.elasticsearch.search.aggregations.AggregationBuilders
;
import
org.elasticsearch.search.builder.SearchSourceBuilder
;
import
java.util.Collections
;
public
class
QueryBuilderUtils
{
public
class
QueryBuilderUtils
{
// 复制BoolQueryBuilder
// 复制BoolQueryBuilder
...
@@ -29,4 +35,25 @@ public class QueryBuilderUtils {
...
@@ -29,4 +35,25 @@ public class QueryBuilderUtils {
return
copy
;
return
copy
;
}
}
/**
* 组装分割符字段的聚合查询
*
* @param searchSourceBuilder es查询构造器
* @param field 需要查询的字段,如:unitType.keyword
* @param spiltSymbol 分割符号,如:#
* @param aggName 聚合名称,根据此名称从查询结果获取数据,如:Terms unitTypesTerms = searchResponse.getAggregations().get(aggName)
*/
public
static
void
buildSplitFieldAggCondition
(
SearchSourceBuilder
searchSourceBuilder
,
String
field
,
String
spiltSymbol
,
String
aggName
)
{
// Painless 脚本内容
String
scriptSource
=
"if (doc['"
+
field
+
"'].size() > 0) {"
+
" String value = doc['"
+
field
+
"'].value;"
+
" if (value != null && !value.isEmpty()) {"
+
" return value.splitOnToken('"
+
spiltSymbol
+
"');"
+
" }"
+
"}"
+
"return [];"
;
Script
script
=
new
Script
(
ScriptType
.
INLINE
,
"painless"
,
scriptSource
,
Collections
.
emptyMap
());
searchSourceBuilder
.
aggregation
(
AggregationBuilders
.
terms
(
aggName
).
script
(
script
));
}
}
}
\ 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