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
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
775 additions
and
74 deletions
+775
-74
ComprehensiveStatisticalAnalysisServiceImpl.java
...ice/impl/ComprehensiveStatisticalAnalysisServiceImpl.java
+645
-74
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
...
@@ -15,6 +15,8 @@ import com.yeejoin.amos.boot.module.common.biz.utils.TechParamUtil;
...
@@ -15,6 +15,8 @@ import com.yeejoin.amos.boot.module.common.biz.utils.TechParamUtil;
import
com.yeejoin.amos.boot.module.jg.api.enums.DPMapStatisticsItemEnum
;
import
com.yeejoin.amos.boot.module.jg.api.enums.DPMapStatisticsItemEnum
;
import
com.yeejoin.amos.boot.module.statistcs.biz.utils.JsonUtils
;
import
com.yeejoin.amos.boot.module.statistcs.biz.utils.JsonUtils
;
import
com.yeejoin.amos.boot.module.statistcs.biz.utils.MinioUtils
;
import
com.yeejoin.amos.boot.module.statistcs.biz.utils.MinioUtils
;
import
com.yeejoin.amos.boot.module.statistcs.factory.DynamicQueryBuilder
;
import
com.yeejoin.amos.boot.module.statistcs.factory.EnhancedDynamicQueryBuilder
;
import
com.yeejoin.amos.boot.module.statistics.api.enums.*
;
import
com.yeejoin.amos.boot.module.statistics.api.enums.*
;
import
com.yeejoin.amos.boot.module.statistics.api.mapper.TzsCustomFilterMapper
;
import
com.yeejoin.amos.boot.module.statistics.api.mapper.TzsCustomFilterMapper
;
import
com.yeejoin.amos.boot.module.statistics.api.vo.EquipInfoVo
;
import
com.yeejoin.amos.boot.module.statistics.api.vo.EquipInfoVo
;
...
@@ -83,6 +85,14 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -83,6 +85,14 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
private
final
String
BUCKET_NAME
=
"upload"
;
private
final
String
BUCKET_NAME
=
"upload"
;
private
final
String
UPLOAD_PATH
=
"/tzs/excelTempFile"
;
private
final
String
UPLOAD_PATH
=
"/tzs/excelTempFile"
;
private
final
List
<
String
>
equipHandleOtherFields
=
Arrays
.
asList
(
"techParam"
,
"paramRange"
,
"NEXT_INSPECT_DATE"
,
"IS_SUPERVISORY_CODE"
,
"USC_DATE"
,
"createDate"
);
private
final
List
<
String
>
companyHandleOtherFields
=
Arrays
.
asList
(
"itemCode"
,
"subItemCode"
,
"permitStatus"
,
"equipCategory"
,
"regulatoryLabels"
,
"unitType"
);
private
final
List
<
String
>
personHandleOtherFields
=
Arrays
.
asList
(
"newPost"
,
"subPost"
,
"certNo"
,
"expiryDate"
,
"certType"
,
"permissionLevel"
,
"jobItem"
,
"permissionItem"
,
"issueDate"
,
"equipType"
,
"unitType"
);
private
final
String
or
=
"or"
;
private
final
String
and
=
"and"
;
@Autowired
@Autowired
EquipmentCategoryMapper
equipmentCategoryMapper
;
EquipmentCategoryMapper
equipmentCategoryMapper
;
...
@@ -148,9 +158,9 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -148,9 +158,9 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
public
JSONArray
queryAdvancedSearch
(
String
type
)
{
public
JSONArray
queryAdvancedSearch
(
String
type
)
{
JSONArray
all
=
new
JSONArray
();
JSONArray
all
=
new
JSONArray
();
if
(
"equip"
.
equals
(
type
))
{
if
(
"equip"
.
equals
(
type
))
{
all
=
EquipAdvanceSearchEnum
.
getAll
();
all
=
EquipAdvanceSearchEnum
.
getAll
();
}
else
if
(
"company"
.
equals
(
type
))
{
}
else
if
(
"company"
.
equals
(
type
))
{
all
=
CompanyAdvanceSearchEnum
.
getAll
();
all
=
CompanyAdvanceSearchEnum
.
getAll
();
}
else
if
(
"person"
.
equals
(
type
))
{
}
else
if
(
"person"
.
equals
(
type
))
{
all
=
PersonAdvanceSearchEnum
.
getAll
();
all
=
PersonAdvanceSearchEnum
.
getAll
();
...
@@ -215,7 +225,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -215,7 +225,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
boolMust
.
must
(
QueryBuilders
.
existsQuery
(
field
));
boolMust
.
must
(
QueryBuilders
.
existsQuery
(
field
));
TermsQueryBuilder
termsQuery
=
QueryBuilders
.
termsQuery
(
field
,
(
JSONArray
)
v
);
TermsQueryBuilder
termsQuery
=
QueryBuilders
.
termsQuery
(
field
,
(
JSONArray
)
v
);
boolMust
.
must
(
termsQuery
);
boolMust
.
must
(
termsQuery
);
}
else
if
(
k
.
equals
(
"certNo"
)
||
k
.
equals
(
"expiryDate"
)
||
k
.
equals
(
"permissionLevel"
)
||
k
.
equals
(
"certType"
)
||
k
.
equals
(
"jobItem"
)
||
k
.
equals
(
"
issueDate
"
))
{
}
else
if
(
k
.
equals
(
"certNo"
)
||
k
.
equals
(
"expiryDate"
)
||
k
.
equals
(
"permissionLevel"
)
||
k
.
equals
(
"certType"
)
||
k
.
equals
(
"jobItem"
)
||
k
.
equals
(
"
permissionItem
"
))
{
String
path
=
"licenses"
;
String
path
=
"licenses"
;
((
JSONArray
)
v
).
forEach
(
item
->
{
((
JSONArray
)
v
).
forEach
(
item
->
{
String
nestedField
=
path
+
"."
+
k
;
String
nestedField
=
path
+
"."
+
k
;
...
@@ -244,7 +254,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -244,7 +254,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
// 临期:小于等于当前日期加上30天
// 临期:小于等于当前日期加上30天
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
path
,
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
nestedField
).
lte
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
))),
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
nestedField
).
lte
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
))
.
gte
(
LocalDate
.
now
().
format
(
formatter
))
),
ScoreMode
.
Avg
ScoreMode
.
Avg
);
);
boolMust
.
must
(
nestedQuery
);
boolMust
.
must
(
nestedQuery
);
...
@@ -265,13 +275,20 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -265,13 +275,20 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
);
);
boolMust
.
mustNot
(
nestedQuery
);
boolMust
.
mustNot
(
nestedQuery
);
}
}
}
else
if
(
k
.
equals
(
"certType"
)
||
k
.
equals
(
"permissionLevel"
)
||
k
.
equals
(
"jobItem"
)
)
{
}
else
if
(
k
.
equals
(
"certType"
)
||
k
.
equals
(
"permissionLevel"
))
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
termsQuery
(
nestedField
,
(
JSONArray
)
v
)),
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
termsQuery
(
nestedField
,
(
JSONArray
)
v
)),
ScoreMode
.
Avg
ScoreMode
.
Avg
);
);
boolMust
.
must
(
nestedQuery
);
boolMust
.
must
(
nestedQuery
);
}
else
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
wildcardQuery
(
nestedField
,
"*"
+
item
+
"*"
)),
ScoreMode
.
Avg
);
boolMust
.
should
(
nestedQuery
);
}
}
});
});
}
else
if
(
k
.
equals
(
"issueDate"
))
{
}
else
if
(
k
.
equals
(
"issueDate"
))
{
...
@@ -280,23 +297,25 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -280,23 +297,25 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
String
endDate
=
DateUtils
.
convertDateToString
(
issueDates
.
getDate
(
1
),
DateUtils
.
DATE_PATTERN
);
String
endDate
=
DateUtils
.
convertDateToString
(
issueDates
.
getDate
(
1
),
DateUtils
.
DATE_PATTERN
);
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
"licenses"
,
"licenses"
,
QueryBuilders
.
rangeQuery
(
"issueDate"
).
gte
(
startDate
).
lte
(
endDate
),
QueryBuilders
.
rangeQuery
(
k
).
gte
(
startDate
).
lte
(
endDate
),
ScoreMode
.
Avg
ScoreMode
.
Avg
);
);
boolMust
.
filter
(
nestedQuery
);
boolMust
.
filter
(
nestedQuery
);
}
}
}
else
{
//todo 高级筛选
}
}
}
}
});
});
}
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"
)))
{
if
(!
ObjectUtils
.
isEmpty
(
filter
.
get
(
"sort"
)))
{
JSONObject
sort
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filter
.
get
(
"sort"
)));
JSONObject
sort
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filter
.
get
(
"sort"
)));
String
field
=
sort
.
getString
(
"fi
le
d"
);
String
field
=
sort
.
getString
(
"fi
el
d"
);
SortOrder
sortOrder
=
sort
.
getString
(
"order"
).
equals
(
"desc"
)
?
SortOrder
.
DESC
:
SortOrder
.
ASC
;
SortOrder
sortOrder
=
sort
.
getString
(
"order"
).
equals
(
"desc"
)
?
SortOrder
.
DESC
:
SortOrder
.
ASC
;
FieldSortBuilder
sortBuilder
=
SortBuilders
.
fieldSort
(
field
+
".keyword"
).
order
(
sortOrder
);
FieldSortBuilder
sortBuilder
=
SortBuilders
.
fieldSort
(
field
+
".keyword"
).
order
(
sortOrder
);
builder
.
sort
(
sortBuilder
);
builder
.
sort
(
sortBuilder
);
...
@@ -410,6 +429,11 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -410,6 +429,11 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
}
}
}
}
});
});
}
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
);
}
}
}
}
...
@@ -417,7 +441,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -417,7 +441,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
// 排序
// 排序
if
(!
ObjectUtils
.
isEmpty
(
filter
.
get
(
"sort"
)))
{
if
(!
ObjectUtils
.
isEmpty
(
filter
.
get
(
"sort"
)))
{
JSONObject
sort
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filter
.
get
(
"sort"
)));
JSONObject
sort
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filter
.
get
(
"sort"
)));
String
field
=
sort
.
getString
(
"fi
le
d"
);
String
field
=
sort
.
getString
(
"fi
el
d"
);
SortOrder
sortOrder
=
sort
.
getString
(
"order"
).
equals
(
"desc"
)
?
SortOrder
.
DESC
:
SortOrder
.
ASC
;
SortOrder
sortOrder
=
sort
.
getString
(
"order"
).
equals
(
"desc"
)
?
SortOrder
.
DESC
:
SortOrder
.
ASC
;
FieldSortBuilder
sortBuilder
=
SortBuilders
.
fieldSort
(
field
+
".keyword"
).
order
(
sortOrder
);
FieldSortBuilder
sortBuilder
=
SortBuilders
.
fieldSort
(
field
+
".keyword"
).
order
(
sortOrder
);
builder
.
sort
(
sortBuilder
);
builder
.
sort
(
sortBuilder
);
...
@@ -484,7 +508,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -484,7 +508,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
String
paramKey
=
techParams
.
getString
(
0
);
String
paramKey
=
techParams
.
getString
(
0
);
String
condition
=
paramRangeJson
.
getString
(
"condition"
);
String
condition
=
paramRangeJson
.
getString
(
"condition"
);
Object
value
=
paramRangeJson
.
getString
(
"value"
);
Object
value
=
paramRangeJson
.
getString
(
"value"
);
getParamQuery
(
paramKey
,
condition
,
value
,
boolMust
);
getParamQuery
(
paramKey
,
condition
,
value
,
false
,
boolMust
,
null
,
null
);
}
}
}
else
if
(!
k
.
equals
(
"paramRange"
))
{
}
else
if
(!
k
.
equals
(
"paramRange"
))
{
if
(
v
instanceof
JSONArray
)
{
if
(
v
instanceof
JSONArray
)
{
...
@@ -500,7 +524,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -500,7 +524,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
boolMust
.
filter
(
QueryBuilders
.
rangeQuery
(
finalField
).
lt
(
LocalDate
.
now
().
format
(
formatter
)));
boolMust
.
filter
(
QueryBuilders
.
rangeQuery
(
finalField
).
lt
(
LocalDate
.
now
().
format
(
formatter
)));
}
else
if
(
item
.
equals
(
"near"
))
{
}
else
if
(
item
.
equals
(
"near"
))
{
// 临期:小于等于当前日期加上30天
// 临期:小于等于当前日期加上30天
boolMust
.
filter
(
QueryBuilders
.
rangeQuery
(
finalField
).
lte
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
)));
boolMust
.
filter
(
QueryBuilders
.
rangeQuery
(
finalField
).
gte
(
LocalDate
.
now
().
format
(
formatter
)).
lte
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
)));
}
else
{
}
else
{
// 正常:大于当前日期加上30天
// 正常:大于当前日期加上30天
boolMust
.
filter
(
QueryBuilders
.
rangeQuery
(
finalField
).
gt
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
)));
boolMust
.
filter
(
QueryBuilders
.
rangeQuery
(
finalField
).
gt
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
)));
...
@@ -515,19 +539,17 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -515,19 +539,17 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
boolMust
.
filter
(
QueryBuilders
.
rangeQuery
(
finalField
).
gt
(
LocalDate
.
now
().
minusYears
(
15
).
format
(
formatter
)));
boolMust
.
filter
(
QueryBuilders
.
rangeQuery
(
finalField
).
gt
(
LocalDate
.
now
().
minusYears
(
15
).
format
(
formatter
)));
}
else
if
(
item
.
equals
(
"10-15"
))
{
}
else
if
(
item
.
equals
(
"10-15"
))
{
// 10-15年:小于当前日期减去15年,大于等于当前日期减去10年
// 10-15年:小于当前日期减去15年,大于等于当前日期减去10年
boolMust
.
filter
(
QueryBuilders
.
rangeQuery
(
finalField
).
lt
(
LocalDate
.
now
().
minusYears
(
15
).
format
(
formatter
)));
boolMust
.
filter
(
QueryBuilders
.
rangeQuery
(
finalField
).
lt
(
LocalDate
.
now
().
minusYears
(
15
).
format
(
formatter
)).
gte
(
LocalDate
.
now
().
minusYears
(
10
).
format
(
formatter
)));
boolMust
.
filter
(
QueryBuilders
.
rangeQuery
(
finalField
).
gte
(
LocalDate
.
now
().
minusYears
(
10
).
format
(
formatter
)));
}
else
if
(
item
.
equals
(
"5-10"
))
{
}
else
if
(
item
.
equals
(
"5-10"
))
{
// 5-10年:小于当前日期减去10年,大于等于当前日期减去5年
// 5-10年:小于当前日期减去10年,大于等于当前日期减去5年
boolMust
.
filter
(
QueryBuilders
.
rangeQuery
(
finalField
).
lt
(
LocalDate
.
now
().
minusYears
(
10
).
format
(
formatter
)));
boolMust
.
filter
(
QueryBuilders
.
rangeQuery
(
finalField
).
lt
(
LocalDate
.
now
().
minusYears
(
10
).
format
(
formatter
)).
gte
(
LocalDate
.
now
().
minusYears
(
5
).
format
(
formatter
)));
boolMust
.
filter
(
QueryBuilders
.
rangeQuery
(
finalField
).
gte
(
LocalDate
.
now
().
minusYears
(
5
).
format
(
formatter
)));
}
else
if
(
item
.
equals
(
"0-5"
))
{
}
else
if
(
item
.
equals
(
"0-5"
))
{
// 0-5年:小于当前日期减去5年
// 0-5年:小于当前日期减去5年
boolMust
.
filter
(
QueryBuilders
.
rangeQuery
(
finalField
).
lt
(
LocalDate
.
now
().
minusYears
(
5
).
format
(
formatter
)));
boolMust
.
filter
(
QueryBuilders
.
rangeQuery
(
finalField
).
lt
(
LocalDate
.
now
().
minusYears
(
5
).
format
(
formatter
)));
}
}
});
});
}
else
if
(
k
.
equals
(
"IS_SUPERVISORY_CODE"
))
{
}
else
if
(
k
.
equals
(
"IS_SUPERVISORY_CODE"
))
{
String
finalField
=
"IS_SUPERVISORY_CODE"
;
String
finalField
=
k
;
((
JSONArray
)
v
).
forEach
(
item
->
{
((
JSONArray
)
v
).
forEach
(
item
->
{
if
(
item
.
equals
(
"1"
))
{
if
(
item
.
equals
(
"1"
))
{
boolMust
.
must
(
QueryBuilders
.
existsQuery
(
finalField
));
boolMust
.
must
(
QueryBuilders
.
existsQuery
(
finalField
));
...
@@ -553,14 +575,15 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -553,14 +575,15 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
TermsQueryBuilder
termsQuery
=
QueryBuilders
.
termsQuery
(
field
,
(
JSONArray
)
v
);
TermsQueryBuilder
termsQuery
=
QueryBuilders
.
termsQuery
(
field
,
(
JSONArray
)
v
);
boolMust
.
must
(
termsQuery
);
boolMust
.
must
(
termsQuery
);
}
}
}
}
}
}
}
}
});
});
}
else
{
}
else
{
// todo 自定义筛选
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
);
}
}
}
else
{
}
else
{
filterParams
=
null
;
filterParams
=
null
;
...
@@ -569,7 +592,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -569,7 +592,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
// 排序
// 排序
if
(!
ObjectUtils
.
isEmpty
(
filter
.
get
(
"sort"
)))
{
if
(!
ObjectUtils
.
isEmpty
(
filter
.
get
(
"sort"
)))
{
JSONObject
sort
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filter
.
get
(
"sort"
)));
JSONObject
sort
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filter
.
get
(
"sort"
)));
String
field
=
sort
.
getString
(
"fi
le
d"
);
String
field
=
sort
.
getString
(
"fi
el
d"
);
if
(
field
.
equals
(
"EQU_LIST"
))
{
if
(
field
.
equals
(
"EQU_LIST"
))
{
field
=
"EQU_LIST_CODE"
;
field
=
"EQU_LIST_CODE"
;
}
else
if
(
field
.
equals
(
"EQU_CATEGORY"
))
{
}
else
if
(
field
.
equals
(
"EQU_CATEGORY"
))
{
...
@@ -648,116 +671,664 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -648,116 +671,664 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
}
}
}
}
result
.
put
(
"statics"
,
statics
);
result
.
put
(
"statics"
,
statics
);
return
result
;
return
result
;
}
}
private
void
getParamQuery
(
String
paramKey
,
String
condition
,
Object
value
,
Bool
QueryBuilder
boolMust
)
{
private
void
getParamQuery
(
String
paramKey
,
String
condition
,
Object
value
,
Bool
ean
isCustom
,
BoolQueryBuilder
boolMust
,
EnhancedDynamicQueryBuilder
builder
,
String
andOr
)
{
String
path
=
"techParams"
;
String
path
=
"techParams"
;
String
nestedFieldKey
=
path
+
".paramKey"
;
String
nestedFieldKey
=
path
+
".paramKey"
;
String
nestedFieldValue
=
path
+
".strValue"
;
String
longEnd
=
".longValue"
;
String
stringEnd
=
".strValue"
;
NestedQueryBuilder
keyNestedQuery
=
QueryBuilders
.
nestedQuery
(
NestedQueryBuilder
keyNestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
termsQuery
(
nestedFieldKey
,
paramKey
)),
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
termsQuery
(
nestedFieldKey
,
paramKey
)),
ScoreMode
.
Avg
ScoreMode
.
Avg
);
);
boolMust
.
must
(
keyNestedQuery
);
if
(
isCustom
)
{
builder
.
add
(
keyNestedQuery
,
andOr
);
}
else
{
boolMust
.
must
(
keyNestedQuery
);
}
switch
(
condition
)
{
switch
(
condition
)
{
case
"eq"
:
case
"eq"
:
NestedQueryBuilder
eqQuery
=
QueryBuilders
.
nestedQuery
(
NestedQueryBuilder
eqQuery
=
QueryBuilders
.
nestedQuery
(
path
,
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
termsQuery
(
nestedFieldValue
,
value
)),
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
termsQuery
(
path
+
stringEnd
,
value
)),
ScoreMode
.
Avg
ScoreMode
.
Avg
);
);
boolMust
.
must
(
eqQuery
);
if
(
isCustom
)
{
builder
.
add
(
eqQuery
,
andOr
);
}
else
{
boolMust
.
must
(
eqQuery
);
}
break
;
break
;
case
"neq"
:
case
"neq"
:
boolMust
.
must
(
keyNestedQuery
);
boolMust
.
must
(
keyNestedQuery
);
NestedQueryBuilder
neqQuery
=
QueryBuilders
.
nestedQuery
(
NestedQueryBuilder
neqQuery
=
QueryBuilders
.
nestedQuery
(
path
,
path
,
QueryBuilders
.
boolQuery
().
mustNot
(
QueryBuilders
.
termsQuery
(
nestedFieldValue
,
value
)),
QueryBuilders
.
boolQuery
().
mustNot
(
QueryBuilders
.
termsQuery
(
path
+
stringEnd
,
value
)),
ScoreMode
.
Avg
ScoreMode
.
Avg
);
);
boolMust
.
mustNot
(
neqQuery
);
if
(
isCustom
)
{
builder
.
add
(
neqQuery
,
andOr
);
}
else
{
boolMust
.
mustNot
(
neqQuery
);
}
break
;
break
;
case
"like"
:
case
"like"
:
NestedQueryBuilder
likeQuery
=
QueryBuilders
.
nestedQuery
(
NestedQueryBuilder
likeQuery
=
QueryBuilders
.
nestedQuery
(
path
,
path
,
QueryBuilders
.
boolQuery
().
should
(
QueryBuilders
.
wildcardQuery
(
nestedFieldValue
,
"*"
+
value
+
"*"
)),
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
wildcardQuery
(
path
+
stringEnd
,
"*"
+
value
+
"*"
)),
ScoreMode
.
Avg
ScoreMode
.
Avg
);
);
boolMust
.
must
(
likeQuery
);
if
(
isCustom
)
{
builder
.
add
(
likeQuery
,
andOr
);
}
else
{
boolMust
.
must
(
likeQuery
);
}
break
;
break
;
case
"notLike"
:
case
"notLike"
:
NestedQueryBuilder
notLikeQuery
=
QueryBuilders
.
nestedQuery
(
NestedQueryBuilder
notLikeQuery
=
QueryBuilders
.
nestedQuery
(
path
,
path
,
QueryBuilders
.
boolQuery
().
should
(
QueryBuilders
.
wildcardQuery
(
nestedFieldValue
,
"*"
+
value
+
"*"
)),
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
wildcardQuery
(
path
+
stringEnd
,
"*"
+
value
+
"*"
)),
ScoreMode
.
Avg
ScoreMode
.
Avg
);
);
boolMust
.
mustNot
(
notLikeQuery
);
if
(
isCustom
)
{
builder
.
add
(
QueryBuilders
.
boolQuery
().
mustNot
(
notLikeQuery
),
andOr
);
}
else
{
boolMust
.
mustNot
(
notLikeQuery
);
}
break
;
break
;
case
"gt"
:
case
"gt"
:
NestedQueryBuilder
gtQuery
=
QueryBuilders
.
nestedQuery
(
NestedQueryBuilder
gtQuery
=
QueryBuilders
.
nestedQuery
(
path
,
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
nestedFieldValue
).
gt
(
Double
.
parseDouble
(
value
.
toString
())
)),
QueryBuilders
.
rangeQuery
(
path
+
longEnd
).
gt
(
value
.
toString
(
)),
ScoreMode
.
Avg
ScoreMode
.
Avg
);
);
boolMust
.
must
(
gtQuery
);
if
(
isCustom
)
{
builder
.
add
(
gtQuery
,
andOr
);
}
else
{
boolMust
.
must
(
gtQuery
);
}
break
;
break
;
case
"gte"
:
case
"gte"
:
NestedQueryBuilder
gteQuery
=
QueryBuilders
.
nestedQuery
(
NestedQueryBuilder
gteQuery
=
QueryBuilders
.
nestedQuery
(
path
,
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
nestedFieldValue
).
gte
(
Double
.
parseDouble
(
value
.
toString
()
))),
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
path
+
longEnd
).
gte
(
value
.
toString
(
))),
ScoreMode
.
Avg
ScoreMode
.
Avg
);
);
boolMust
.
must
(
gteQuery
);
if
(
isCustom
)
{
builder
.
add
(
gteQuery
,
andOr
);
}
else
{
boolMust
.
must
(
gteQuery
);
}
break
;
break
;
case
"lt"
:
case
"lt"
:
NestedQueryBuilder
ltQuery
=
QueryBuilders
.
nestedQuery
(
NestedQueryBuilder
ltQuery
=
QueryBuilders
.
nestedQuery
(
path
,
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
nestedFieldValue
).
lt
(
Double
.
parseDouble
(
value
.
toString
()
))),
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
path
+
longEnd
).
lt
(
value
.
toString
(
))),
ScoreMode
.
Avg
ScoreMode
.
Avg
);
);
boolMust
.
must
(
ltQuery
);
if
(
isCustom
)
{
builder
.
add
(
ltQuery
,
andOr
);
}
else
{
boolMust
.
must
(
ltQuery
);
}
break
;
break
;
case
"lte"
:
case
"lte"
:
NestedQueryBuilder
lteQuery
=
QueryBuilders
.
nestedQuery
(
NestedQueryBuilder
lteQuery
=
QueryBuilders
.
nestedQuery
(
path
,
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
nestedFieldValue
).
lte
(
Double
.
parseDouble
(
value
.
toString
()
))),
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
path
+
longEnd
).
lte
(
value
.
toString
(
))),
ScoreMode
.
Avg
ScoreMode
.
Avg
);
);
boolMust
.
must
(
lteQuery
);
if
(
isCustom
)
{
builder
.
add
(
lteQuery
,
andOr
);
}
else
{
boolMust
.
must
(
lteQuery
);
}
break
;
break
;
case
"between"
:
case
"between"
:
JSONArray
btValues
=
(
JSONArray
)
value
;
JSONArray
btValues
=
(
JSONArray
)
value
;
NestedQueryBuilder
betweenQuery
=
QueryBuilders
.
nestedQuery
(
NestedQueryBuilder
betweenQuery
=
QueryBuilders
.
nestedQuery
(
path
,
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
nestedFieldValue
).
gte
(
Double
.
parseDouble
(
btValues
.
get
(
0
).
toString
())).
lte
(
Double
.
parseDouble
(
btValues
.
get
(
1
).
toString
()))),
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
path
+
longEnd
).
gte
(
Double
.
parseDouble
(
btValues
.
get
(
0
).
toString
())).
lte
(
Double
.
parseDouble
(
btValues
.
get
(
1
).
toString
()))),
ScoreMode
.
Avg
ScoreMode
.
Avg
);
);
boolMust
.
must
(
betweenQuery
);
if
(
isCustom
)
{
builder
.
add
(
betweenQuery
,
andOr
);
}
else
{
boolMust
.
must
(
betweenQuery
);
}
break
;
break
;
case
"in"
:
case
"in"
:
JSONArray
inValues
=
(
JSONArray
)
value
;
JSONArray
inValues
=
(
JSONArray
)
value
;
NestedQueryBuilder
inQuery
=
QueryBuilders
.
nestedQuery
(
NestedQueryBuilder
inQuery
=
QueryBuilders
.
nestedQuery
(
path
,
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
termsQuery
(
nestedFieldValue
,
inValues
)),
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
termsQuery
(
path
+
stringEnd
,
inValues
)),
ScoreMode
.
Avg
ScoreMode
.
Avg
);
);
boolMust
.
must
(
inQuery
);
if
(
isCustom
)
{
builder
.
add
(
inQuery
,
andOr
);
}
else
{
boolMust
.
must
(
inQuery
);
}
break
;
break
;
case
"notIn"
:
case
"notIn"
:
JSONArray
notInValues
=
(
JSONArray
)
value
;
JSONArray
notInValues
=
(
JSONArray
)
value
;
NestedQueryBuilder
notInQuery
=
QueryBuilders
.
nestedQuery
(
NestedQueryBuilder
notInQuery
=
QueryBuilders
.
nestedQuery
(
path
,
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
termsQuery
(
nestedFieldValue
,
notInValues
)),
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
termsQuery
(
path
+
stringEnd
,
notInValues
)),
ScoreMode
.
Avg
ScoreMode
.
Avg
);
);
boolMust
.
mustNot
(
notInQuery
);
if
(
isCustom
)
{
builder
.
add
(
QueryBuilders
.
boolQuery
().
mustNot
(
notInQuery
),
andOr
);
}
else
{
boolMust
.
mustNot
(
notInQuery
);
}
break
;
}
}
// 处理高级筛选条件
private
void
handleAdvancedFilter
(
BoolQueryBuilder
boolMust
,
JSONArray
leftGroup
,
JSONArray
rightGroup
,
Boolean
isOrGroup
)
{
DynamicQueryBuilder
mainBuilder
=
new
DynamicQueryBuilder
();
EnhancedDynamicQueryBuilder
leftBuilder
=
new
EnhancedDynamicQueryBuilder
();
if
(!
ObjectUtils
.
isEmpty
(
leftGroup
))
{
// 处理左侧分组
JSONObject
leftTechParam
=
new
JSONObject
();
JSONObject
leftParamRange
=
new
JSONObject
();
JSONArray
leftGroupList
=
new
JSONArray
();
// 剥离计数参数
getTechParam
(
leftGroup
,
leftGroupList
,
leftTechParam
,
leftParamRange
);
// 如果技术参数分组不为空,添加技术参数筛选条件到左侧筛选条件中
if
(!
ObjectUtils
.
isEmpty
(
leftTechParam
)
&&
!
ObjectUtils
.
isEmpty
(
leftParamRange
))
{
addTechParam
(
leftTechParam
,
leftParamRange
,
leftBuilder
);
}
// 非计数参数处理
groupHandler
(
leftGroupList
,
leftBuilder
);
// 添加左侧筛选条件到最终筛选条件中
mainBuilder
.
and
(
leftBuilder
.
build
());
}
if
(!
ObjectUtils
.
isEmpty
(
rightGroup
))
{
// 处理右侧分组
EnhancedDynamicQueryBuilder
rightBuilder
=
new
EnhancedDynamicQueryBuilder
();
JSONObject
rightTechParam
=
new
JSONObject
();
JSONObject
rightParamRange
=
new
JSONObject
();
JSONArray
rightGroupList
=
new
JSONArray
();
// 剥离计数参数
getTechParam
(
rightGroup
,
rightGroupList
,
rightTechParam
,
rightParamRange
);
// 如果技术参数分组不为空,添加技术参数筛选条件到左侧筛选条件中
if
(!
ObjectUtils
.
isEmpty
(
rightTechParam
)
&&
!
ObjectUtils
.
isEmpty
(
rightParamRange
))
{
addTechParam
(
rightTechParam
,
rightParamRange
,
rightBuilder
);
}
// 非计数参数处理
groupHandler
(
rightGroupList
,
rightBuilder
);
// 添加右侧筛选条件到最终筛选条件中
if
(
isOrGroup
)
{
mainBuilder
.
or
(
rightBuilder
.
build
());
}
else
{
mainBuilder
.
and
(
rightBuilder
.
build
());
}
}
// 组装最终筛选条件
boolMust
.
must
(
mainBuilder
.
build
());
}
private
void
addTechParam
(
JSONObject
techParam
,
JSONObject
paramRange
,
EnhancedDynamicQueryBuilder
builder
)
{
String
field
=
techParam
.
getString
(
"value"
);
String
itemCondition
=
paramRange
.
getString
(
"itemCondition"
);
Object
value
=
paramRange
.
get
(
"value"
);
String
andOr
=
paramRange
.
getString
(
"andOr"
);
getParamQuery
(
field
,
itemCondition
,
value
,
true
,
null
,
builder
,
andOr
);
}
private
void
groupHandler
(
JSONArray
group
,
EnhancedDynamicQueryBuilder
builder
)
{
for
(
Object
object
:
group
)
{
JSONObject
itemObj
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
object
));
String
field
=
itemObj
.
getString
(
"field"
);
String
itemCondition
=
itemObj
.
getString
(
"itemCondition"
);
Object
value
=
itemObj
.
get
(
"value"
);
String
andOr
=
itemObj
.
getString
(
"andOr"
);
// 组装查询条件
getItemQueryNew
(
field
,
itemCondition
,
value
,
andOr
,
builder
);
}
}
private
void
getTechParam
(
JSONArray
group
,
JSONArray
resultGroup
,
JSONObject
techParam
,
JSONObject
paramRange
)
{
// 如果只有技术参数或者只有参数范围,则舍弃对应的分组
group
.
forEach
(
item
->
{
JSONObject
itemObj
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
item
));
if
(
itemObj
.
getString
(
"field"
).
equals
(
"techParam"
))
{
techParam
.
putAll
(
itemObj
);
}
else
if
(
itemObj
.
getString
(
"field"
).
equals
(
"paramRange"
))
{
paramRange
.
putAll
(
itemObj
);
}
else
{
resultGroup
.
add
(
itemObj
);
}
});
// if (group.contains("techParam") && !group.contains("paramRange") || !group.contains("techParam") && group.contains("paramRange")) {
// for (Object object : group) {
// JSONObject itemObj = JSONObject.parseObject(JSONObject.toJSONString(object));
// if (!itemObj.getString("field").equals("techParam")) {
// resultGroup.add(itemObj);
// }
// }
// } else if (group.contains("techParam") && group.contains("paramRange")) {
// // 如果同时包含技术参数和参数范围,则将技术参数和参数范围剥离到技术参数数组中,其他的放在分组数组中
// for (Object object : group) {
// JSONObject itemObj = JSONObject.parseObject(JSONObject.toJSONString(object));
// if (itemObj.getString("field").equals("techParam")) {
// techParam = itemObj;
// } else if (itemObj.getString("field").equals("paramRange")) {
// paramRange = itemObj;
// } else {
// resultGroup.add(itemObj);
// }
// }
// } else {
// // 既不包含技术参数也不包含参数范围,则直接返回分组数组
// resultGroup.addAll(group);
// }
}
private
void
getItemQuery
(
String
field
,
String
itemCondition
,
Object
value
,
String
isOr
,
DynamicQueryBuilder
groupBuilder
,
DynamicQueryBuilder
groupMainBuilder
)
{
switch
(
itemCondition
)
{
case
"eq"
:
groupBuilder
.
and
(
QueryBuilders
.
termQuery
(
field
,
value
));
break
;
case
"neq"
:
groupBuilder
.
not
(
QueryBuilders
.
termQuery
(
field
,
value
));
break
;
case
"like"
:
groupBuilder
.
and
(
QueryBuilders
.
wildcardQuery
(
field
,
"*"
+
value
+
"*"
));
break
;
case
"notLike"
:
groupBuilder
.
not
(
QueryBuilders
.
wildcardQuery
(
field
,
"*"
+
value
+
"*"
));
break
;
case
"gt"
:
groupBuilder
.
and
(
QueryBuilders
.
rangeQuery
(
field
).
gt
(
value
.
toString
()));
break
;
case
"gte"
:
groupBuilder
.
and
(
QueryBuilders
.
rangeQuery
(
field
).
gte
(
value
.
toString
()));
break
;
case
"lt"
:
groupBuilder
.
and
(
QueryBuilders
.
rangeQuery
(
field
).
lt
(
value
.
toString
()));
break
;
case
"lte"
:
groupBuilder
.
and
(
QueryBuilders
.
rangeQuery
(
field
).
lte
(
value
.
toString
()));
break
;
case
"between"
:
JSONArray
btValues
=
(
JSONArray
)
value
;
groupBuilder
.
and
(
QueryBuilders
.
rangeQuery
(
field
).
gte
(
Double
.
parseDouble
(
btValues
.
get
(
0
).
toString
())).
lte
(
Double
.
parseDouble
(
btValues
.
get
(
1
).
toString
())));
break
;
case
"in"
:
JSONArray
inValues
=
(
JSONArray
)
value
;
groupBuilder
.
and
(
QueryBuilders
.
termsQuery
(
field
,
inValues
));
break
;
break
;
case
"notIn"
:
JSONArray
notInValues
=
(
JSONArray
)
value
;
groupBuilder
.
not
(
QueryBuilders
.
termsQuery
(
field
,
notInValues
));
break
;
}
if
(
isOr
.
equals
(
or
))
{
groupMainBuilder
.
or
(
groupBuilder
.
build
());
}
else
{
groupMainBuilder
.
and
(
groupBuilder
.
build
());
}
}
private
void
getItemQueryNew
(
String
field
,
String
itemCondition
,
Object
value
,
String
isOr
,
EnhancedDynamicQueryBuilder
builder
)
{
// 如果包含需要特殊处理的字段,则调用对应的处理方法,否则调用通用处理方法
if
(
equipHandleOtherFields
.
contains
(
field
)
||
companyHandleOtherFields
.
contains
(
field
)
||
personHandleOtherFields
.
contains
(
field
))
{
handleOtherField
(
field
,
itemCondition
,
value
,
isOr
,
builder
);
}
else
{
switch
(
itemCondition
)
{
case
"eq"
:
builder
.
add
(
QueryBuilders
.
termQuery
(
field
,
value
),
isOr
);
break
;
case
"neq"
:
builder
.
add
(
QueryBuilders
.
boolQuery
().
mustNot
(
QueryBuilders
.
termQuery
(
field
,
value
)),
isOr
);
break
;
case
"like"
:
builder
.
add
(
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
wildcardQuery
(
field
,
"*"
+
value
+
"*"
)),
isOr
);
break
;
case
"notLike"
:
builder
.
add
(
QueryBuilders
.
boolQuery
().
mustNot
(
QueryBuilders
.
wildcardQuery
(
field
,
"*"
+
value
+
"*"
)),
isOr
);
break
;
case
"gt"
:
builder
.
add
(
QueryBuilders
.
rangeQuery
(
field
).
gt
(
value
.
toString
()),
isOr
);
break
;
case
"gte"
:
builder
.
add
(
QueryBuilders
.
rangeQuery
(
field
).
gte
(
value
.
toString
()),
isOr
);
break
;
case
"lt"
:
builder
.
add
(
QueryBuilders
.
rangeQuery
(
field
).
lt
(
value
.
toString
()),
isOr
);
break
;
case
"lte"
:
builder
.
add
(
QueryBuilders
.
rangeQuery
(
field
).
lte
(
value
.
toString
()),
isOr
);
break
;
case
"between"
:
JSONArray
btValues
=
(
JSONArray
)
value
;
builder
.
add
(
QueryBuilders
.
rangeQuery
(
field
).
gte
(
Double
.
parseDouble
(
btValues
.
get
(
0
).
toString
())).
lte
(
Double
.
parseDouble
(
btValues
.
get
(
1
).
toString
())),
isOr
);
break
;
case
"in"
:
JSONArray
inValues
=
(
JSONArray
)
value
;
builder
.
add
(
QueryBuilders
.
termsQuery
(
field
,
inValues
),
isOr
);
break
;
case
"notIn"
:
JSONArray
notInValues
=
(
JSONArray
)
value
;
builder
.
add
(
QueryBuilders
.
boolQuery
().
mustNot
(
QueryBuilders
.
termsQuery
(
field
,
notInValues
)),
isOr
);
break
;
}
}
}
// 特殊处理字段
private
void
handleOtherField
(
String
field
,
String
itemCondition
,
Object
value
,
String
isOr
,
EnhancedDynamicQueryBuilder
builder
)
{
if
(
equipHandleOtherFields
.
contains
(
field
))
{
equipFieldHandle
(
field
,
itemCondition
,
value
,
isOr
,
builder
);
}
else
if
(
companyHandleOtherFields
.
contains
(
field
))
{
companyFieldHandle
(
field
,
itemCondition
,
value
,
isOr
,
builder
);
}
else
if
(
personHandleOtherFields
.
contains
(
field
))
{
personFieldHandle
(
field
,
itemCondition
,
value
,
isOr
,
builder
);
}
}
private
void
personFieldHandle
(
String
field
,
String
itemCondition
,
Object
value
,
String
isOr
,
EnhancedDynamicQueryBuilder
builder
)
{
if
(
field
.
equals
(
"newPost"
)
||
field
.
equals
(
"subPost"
)
||
field
.
equals
(
"equipType"
)
||
field
.
equals
(
"unitType"
))
{
if
(
itemCondition
.
equals
(
"eq"
))
{
builder
.
add
(
QueryBuilders
.
termQuery
(
field
+
".keyword"
,
value
),
isOr
);
}
else
if
(
itemCondition
.
equals
(
"in"
))
{
builder
.
add
(
QueryBuilders
.
wildcardQuery
(
field
+
".keyword"
,
"*"
+
value
+
"*"
),
isOr
);
}
else
{
builder
.
add
(
QueryBuilders
.
boolQuery
().
mustNot
(
QueryBuilders
.
wildcardQuery
(
field
+
".keyword"
,
"*"
+
value
+
"*"
)),
isOr
);
}
}
else
{
String
path
=
"licenses"
;
String
nestedField
=
path
+
"."
+
field
;
// 根据证书编号判断有无资质
if
(
field
.
equals
(
"certNo"
))
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
existsQuery
(
nestedField
),
ScoreMode
.
Avg
);
if
(
itemCondition
.
equals
(
"eq"
)
||
itemCondition
.
equals
(
"in"
))
{
builder
.
add
(
value
.
equals
(
"1"
)
?
nestedQuery
:
QueryBuilders
.
boolQuery
().
mustNot
(
nestedQuery
),
isOr
);
}
else
{
builder
.
add
(
value
.
equals
(
"1"
)
?
QueryBuilders
.
boolQuery
().
mustNot
(
nestedQuery
)
:
nestedQuery
,
isOr
);
}
}
else
if
(
field
.
equals
(
"expiryDate"
))
{
if
(
value
.
equals
(
"overdue"
))
{
if
(
itemCondition
.
equals
(
"eq"
)
||
itemCondition
.
equals
(
"in"
))
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
nestedField
).
lt
(
LocalDate
.
now
().
format
(
formatter
))),
ScoreMode
.
Avg
);
builder
.
add
(
nestedQuery
,
isOr
);
}
else
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
nestedField
).
gte
(
LocalDate
.
now
().
format
(
formatter
))),
ScoreMode
.
Avg
);
builder
.
add
(
nestedQuery
,
isOr
);
}
}
else
if
(
value
.
equals
(
"near"
))
{
if
(
itemCondition
.
equals
(
"eq"
)
||
itemCondition
.
equals
(
"in"
))
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
nestedField
).
lte
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
)).
gte
(
LocalDate
.
now
().
format
(
formatter
))),
ScoreMode
.
Avg
);
builder
.
add
(
nestedQuery
,
isOr
);
}
else
{
NestedQueryBuilder
overdueNestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
nestedField
).
lt
(
LocalDate
.
now
().
format
(
formatter
))),
ScoreMode
.
Avg
);
NestedQueryBuilder
normalNestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
nestedField
).
gt
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
))),
ScoreMode
.
Avg
);
NestedQueryBuilder
noLicensesNestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
existsQuery
(
nestedField
),
ScoreMode
.
Avg
);
builder
.
add
(
overdueNestedQuery
,
or
);
builder
.
add
(
normalNestedQuery
,
or
);
builder
.
add
(
noLicensesNestedQuery
,
or
);
}
}
else
if
(
value
.
equals
(
"normal"
))
{
if
(
itemCondition
.
equals
(
"eq"
)
||
itemCondition
.
equals
(
"in"
))
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
nestedField
).
gt
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
))),
ScoreMode
.
Avg
);
builder
.
add
(
nestedQuery
,
isOr
);
}
else
{
NestedQueryBuilder
elseNestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
nestedField
).
lte
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
))),
ScoreMode
.
Avg
);
NestedQueryBuilder
noLicensesNestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
existsQuery
(
nestedField
),
ScoreMode
.
Avg
);
builder
.
add
(
elseNestedQuery
,
or
);
builder
.
add
(
noLicensesNestedQuery
,
or
);
}
}
else
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
existsQuery
(
nestedField
),
ScoreMode
.
Avg
);
if
(
itemCondition
.
equals
(
"eq"
)
||
itemCondition
.
equals
(
"in"
))
{
builder
.
add
(
nestedQuery
,
isOr
);
}
else
{
builder
.
add
(
QueryBuilders
.
boolQuery
().
mustNot
(
nestedQuery
),
isOr
);
}
}
}
else
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
wildcardQuery
(
nestedField
,
"*"
+
value
+
"*"
),
ScoreMode
.
Avg
);
if
(
itemCondition
.
equals
(
"eq"
))
{
NestedQueryBuilder
eqNestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
termQuery
(
nestedField
,
value
),
ScoreMode
.
Avg
);
builder
.
add
(
eqNestedQuery
,
isOr
);
}
else
if
(
itemCondition
.
equals
(
"in"
))
{
builder
.
add
(
nestedQuery
,
isOr
);
}
else
{
builder
.
add
(
QueryBuilders
.
boolQuery
().
mustNot
(
nestedQuery
),
isOr
);
}
}
}
}
}
}
private
void
companyFieldHandle
(
String
field
,
String
itemCondition
,
Object
value
,
String
isOr
,
EnhancedDynamicQueryBuilder
builder
)
{
if
(
field
.
equals
(
"itemCode"
)
||
field
.
equals
(
"subItemCode"
)
||
field
.
equals
(
"permitStatus"
))
{
String
path
=
"licenses"
;
String
nestedField
=
path
+
"."
+
(
field
.
equals
(
"permitStatus"
)
?
"expiryDate"
:
field
+
".keyword"
);
if
(
field
.
equals
(
"permitStatus"
))
{
if
(
value
.
equals
(
"overdue"
))
{
if
(
itemCondition
.
equals
(
"eq"
)
||
itemCondition
.
equals
(
"in"
))
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
nestedField
).
lt
(
LocalDate
.
now
().
format
(
formatter
))),
ScoreMode
.
Avg
);
builder
.
add
(
QueryBuilders
.
boolQuery
().
must
(
nestedQuery
),
isOr
);
}
else
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
nestedField
).
gte
(
LocalDate
.
now
().
format
(
formatter
))),
ScoreMode
.
Avg
);
builder
.
add
(
QueryBuilders
.
boolQuery
().
must
(
nestedQuery
),
isOr
);
}
}
else
if
(
value
.
equals
(
"near"
))
{
if
(
itemCondition
.
equals
(
"eq"
)
||
itemCondition
.
equals
(
"in"
))
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
nestedField
).
lte
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
)).
gte
(
LocalDate
.
now
().
format
(
formatter
))),
ScoreMode
.
Avg
);
builder
.
add
(
QueryBuilders
.
boolQuery
().
must
(
nestedQuery
),
isOr
);
}
else
{
NestedQueryBuilder
overdueNestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
nestedField
).
lt
(
LocalDate
.
now
().
format
(
formatter
))),
ScoreMode
.
Avg
);
builder
.
add
(
QueryBuilders
.
boolQuery
().
must
(
overdueNestedQuery
),
or
);
NestedQueryBuilder
normalNestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
nestedField
).
gt
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
))),
ScoreMode
.
Avg
);
builder
.
add
(
QueryBuilders
.
boolQuery
().
must
(
normalNestedQuery
),
or
);
}
}
else
if
(
value
.
equals
(
"normal"
))
{
if
(
itemCondition
.
equals
(
"eq"
)
||
itemCondition
.
equals
(
"in"
))
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
nestedField
).
gt
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
))),
ScoreMode
.
Avg
);
builder
.
add
(
QueryBuilders
.
boolQuery
().
must
(
nestedQuery
),
isOr
);
}
else
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
nestedField
).
lte
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
))),
ScoreMode
.
Avg
);
builder
.
add
(
QueryBuilders
.
boolQuery
().
must
(
nestedQuery
),
isOr
);
}
}
}
else
{
if
(
itemCondition
.
equals
(
"eq"
)
||
itemCondition
.
equals
(
"in"
))
{
// 创建嵌套查询
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
termsQuery
(
nestedField
,
value
),
ScoreMode
.
Avg
);
builder
.
add
(
QueryBuilders
.
boolQuery
().
must
(
nestedQuery
),
isOr
);
}
else
{
NestedQueryBuilder
nestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
termsQuery
(
nestedField
,
value
),
ScoreMode
.
Avg
);
builder
.
add
(
QueryBuilders
.
boolQuery
().
mustNot
(
nestedQuery
),
isOr
);
}
}
}
else
{
if
(
itemCondition
.
equals
(
"eq"
))
{
builder
.
add
(
QueryBuilders
.
termQuery
(
field
+
".keyword"
,
value
),
isOr
);
}
else
if
(
itemCondition
.
equals
(
"in"
))
{
builder
.
add
(
QueryBuilders
.
wildcardQuery
(
field
+
".keyword"
,
"*"
+
value
+
"*"
),
isOr
);
}
else
{
builder
.
add
(
QueryBuilders
.
boolQuery
().
mustNot
(
QueryBuilders
.
wildcardQuery
(
field
+
".keyword"
,
"*"
+
value
+
"*"
)),
isOr
);
}
}
}
private
void
equipFieldHandle
(
String
field
,
String
itemCondition
,
Object
value
,
String
isOr
,
EnhancedDynamicQueryBuilder
builder
)
{
if
(
field
.
equals
(
"NEXT_INSPECT_DATE"
))
{
if
(
value
.
equals
(
"overdue"
))
{
// 超期:小于当前日期
if
(
itemCondition
.
equals
(
"eq"
)
||
itemCondition
.
equals
(
"in"
))
{
builder
.
add
(
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
field
).
lt
(
LocalDate
.
now
().
format
(
formatter
))),
isOr
);
}
else
{
builder
.
add
(
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
field
).
gt
(
LocalDate
.
now
().
format
(
formatter
))),
isOr
);
}
}
else
if
(
value
.
equals
(
"near"
))
{
// 临期:小于等于当前日期加上30天
if
(
itemCondition
.
equals
(
"eq"
)
||
itemCondition
.
equals
(
"in"
))
{
builder
.
add
(
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
field
).
gte
(
LocalDate
.
now
().
format
(
formatter
)).
lte
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
))),
isOr
);
}
else
{
builder
.
add
(
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
field
).
lt
(
LocalDate
.
now
().
format
(
formatter
))),
or
);
builder
.
add
(
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
field
).
gt
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
))),
or
);
}
}
else
{
// 正常:大于当前日期加上30天
if
(
itemCondition
.
equals
(
"eq"
)
||
itemCondition
.
equals
(
"in"
))
{
builder
.
add
(
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
field
).
gt
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
))),
isOr
);
}
else
{
builder
.
add
(
QueryBuilders
.
boolQuery
().
filter
(
QueryBuilders
.
rangeQuery
(
field
).
lt
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
))),
isOr
);
}
}
}
else
if
(
field
.
equals
(
"IS_SUPERVISORY_CODE"
))
{
if
(
value
.
equals
(
"1"
))
{
builder
.
add
(
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
existsQuery
(
field
)).
mustNot
(
QueryBuilders
.
termsQuery
(
field
,
"null"
)),
isOr
);
}
else
{
builder
.
add
(
QueryBuilders
.
boolQuery
().
mustNot
(
QueryBuilders
.
existsQuery
(
field
)),
isOr
);
}
}
else
if
(
field
.
equals
(
"USC_DATE"
))
{
if
(
value
.
equals
(
"15"
))
{
// 15年以上:大于当前日期减去15年
if
(
itemCondition
.
equals
(
"eq"
)
||
itemCondition
.
equals
(
"in"
))
{
builder
.
add
(
QueryBuilders
.
rangeQuery
(
field
).
gt
(
LocalDate
.
now
().
minusYears
(
15
).
format
(
formatter
)),
isOr
);
}
else
{
builder
.
add
(
QueryBuilders
.
rangeQuery
(
field
).
lte
(
LocalDate
.
now
().
minusYears
(
15
).
format
(
formatter
)),
isOr
);
}
}
else
if
(
value
.
equals
(
"10-15"
))
{
// 10-15年:小于当前日期减去15年,大于等于当前日期减去10年
if
(
itemCondition
.
equals
(
"eq"
)
||
itemCondition
.
equals
(
"in"
))
{
builder
.
add
(
QueryBuilders
.
rangeQuery
(
field
).
lt
(
LocalDate
.
now
().
minusYears
(
15
).
format
(
formatter
)).
gte
(
LocalDate
.
now
().
minusYears
(
10
).
format
(
formatter
)),
isOr
);
}
else
{
builder
.
add
(
QueryBuilders
.
rangeQuery
(
field
).
gte
(
LocalDate
.
now
().
minusYears
(
15
).
format
(
formatter
)),
or
);
builder
.
add
(
QueryBuilders
.
rangeQuery
(
field
).
lte
(
LocalDate
.
now
().
minusYears
(
10
).
format
(
formatter
)),
or
);
}
}
else
if
(
value
.
equals
(
"5-10"
))
{
// 5-10年:小于当前日期减去10年,大于等于当前日期减去5年
if
(
itemCondition
.
equals
(
"eq"
)
||
itemCondition
.
equals
(
"in"
))
{
builder
.
add
(
QueryBuilders
.
rangeQuery
(
field
).
lt
(
LocalDate
.
now
().
minusYears
(
10
).
format
(
formatter
)).
gte
(
LocalDate
.
now
().
minusYears
(
5
).
format
(
formatter
)),
isOr
);
}
else
{
builder
.
add
(
QueryBuilders
.
rangeQuery
(
field
).
gte
(
LocalDate
.
now
().
minusYears
(
10
).
format
(
formatter
)),
or
);
builder
.
add
(
QueryBuilders
.
rangeQuery
(
field
).
lte
(
LocalDate
.
now
().
minusYears
(
5
).
format
(
formatter
)),
or
);
}
}
else
if
(
value
.
equals
(
"0-5"
))
{
// 0-5年:小于当前日期减去5年
if
(
itemCondition
.
equals
(
"eq"
)
||
itemCondition
.
equals
(
"in"
))
{
builder
.
add
(
QueryBuilders
.
rangeQuery
(
field
).
lt
(
LocalDate
.
now
().
minusYears
(
5
).
format
(
formatter
)),
isOr
);
}
else
{
builder
.
add
(
QueryBuilders
.
rangeQuery
(
field
).
gte
(
LocalDate
.
now
().
minusYears
(
5
).
format
(
formatter
)),
isOr
);
}
}
}
else
if
(
field
.
equals
(
"createDate"
))
{
JSONArray
createDates
=
(
JSONArray
)
value
;
String
startDate
=
DateUtils
.
convertDateToString
(
createDates
.
getDate
(
0
),
DateUtils
.
DATE_TIME_PATTERN
);
String
endDate
=
DateUtils
.
convertDateToString
(
createDates
.
getDate
(
1
),
DateUtils
.
DATE_TIME_PATTERN
);
builder
.
add
(
QueryBuilders
.
rangeQuery
(
"createDate"
).
gte
(
startDate
.
replace
(
" "
,
"T"
)).
lte
(
endDate
.
replace
(
" "
,
"T"
)),
isOr
);
}
}
public
JSONArray
queryUnitType
()
{
public
JSONArray
queryUnitType
()
{
return
UnitTypeEnum
.
getAll
();
return
UnitTypeEnum
.
getAll
();
}
}
...
@@ -779,15 +1350,15 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -779,15 +1350,15 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
JSONArray
permitStatusData
=
new
JSONArray
();
JSONArray
permitStatusData
=
new
JSONArray
();
for
(
int
i
=
0
;
i
<
3
;
i
++)
{
for
(
int
i
=
0
;
i
<
3
;
i
++)
{
JSONObject
object
=
new
JSONObject
();
JSONObject
object
=
new
JSONObject
();
if
(
0
==
i
)
{
if
(
0
==
i
)
{
object
.
put
(
"key"
,
"overdue"
);
object
.
put
(
"key"
,
"overdue"
);
object
.
put
(
"value"
,
"overdue"
);
object
.
put
(
"value"
,
"overdue"
);
object
.
put
(
"label"
,
"超期"
);
object
.
put
(
"label"
,
"超期"
);
}
else
if
(
1
==
i
)
{
}
else
if
(
1
==
i
)
{
object
.
put
(
"key"
,
"near"
);
object
.
put
(
"key"
,
"near"
);
object
.
put
(
"value"
,
"near"
);
object
.
put
(
"value"
,
"near"
);
object
.
put
(
"label"
,
"临期"
);
object
.
put
(
"label"
,
"临期"
);
}
else
{
}
else
{
object
.
put
(
"key"
,
"normal"
);
object
.
put
(
"key"
,
"normal"
);
object
.
put
(
"value"
,
"normal"
);
object
.
put
(
"value"
,
"normal"
);
object
.
put
(
"label"
,
"正常"
);
object
.
put
(
"label"
,
"正常"
);
...
@@ -815,21 +1386,21 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -815,21 +1386,21 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
JSONObject
result
=
new
JSONObject
();
JSONObject
result
=
new
JSONObject
();
//资质状态
//资质状态
JSONArray
permissionStatus
=
new
JSONArray
();
JSONArray
permissionStatus
=
new
JSONArray
();
for
(
int
i
=
0
;
i
<
3
;
i
++)
{
for
(
int
i
=
0
;
i
<
3
;
i
++)
{
JSONObject
object
=
new
JSONObject
();
JSONObject
object
=
new
JSONObject
();
if
(
0
==
i
)
{
if
(
0
==
i
)
{
object
.
put
(
"key"
,
"noLicenses"
);
object
.
put
(
"key"
,
"noLicenses"
);
object
.
put
(
"value"
,
"noLicenses"
);
object
.
put
(
"value"
,
"noLicenses"
);
object
.
put
(
"label"
,
"无资质要求"
);
object
.
put
(
"label"
,
"无资质要求"
);
}
else
if
(
1
==
i
)
{
}
else
if
(
1
==
i
)
{
object
.
put
(
"key"
,
"overdue"
);
object
.
put
(
"key"
,
"overdue"
);
object
.
put
(
"value"
,
"overdue"
);
object
.
put
(
"value"
,
"overdue"
);
object
.
put
(
"label"
,
"资质超期"
);
object
.
put
(
"label"
,
"资质超期"
);
}
else
if
(
2
==
i
)
{
}
else
if
(
2
==
i
)
{
object
.
put
(
"key"
,
"near"
);
object
.
put
(
"key"
,
"near"
);
object
.
put
(
"value"
,
"near"
);
object
.
put
(
"value"
,
"near"
);
object
.
put
(
"label"
,
"资质临期"
);
object
.
put
(
"label"
,
"资质临期"
);
}
else
{
}
else
{
object
.
put
(
"key"
,
"normal"
);
object
.
put
(
"key"
,
"normal"
);
object
.
put
(
"value"
,
"normal"
);
object
.
put
(
"value"
,
"normal"
);
object
.
put
(
"label"
,
"正常"
);
object
.
put
(
"label"
,
"正常"
);
...
@@ -840,7 +1411,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -840,7 +1411,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
//证书类型
//证书类型
List
<
DictionarieValueModel
>
certType
=
Systemctl
.
dictionarieClient
.
dictValues
(
"CERT_TYPE"
).
getResult
();
List
<
DictionarieValueModel
>
certType
=
Systemctl
.
dictionarieClient
.
dictValues
(
"CERT_TYPE"
).
getResult
();
JSONArray
certTypeArray
=
new
JSONArray
();
JSONArray
certTypeArray
=
new
JSONArray
();
for
(
int
i
=
0
;
i
<
certType
.
size
();
i
++)
{
for
(
int
i
=
0
;
i
<
certType
.
size
();
i
++)
{
JSONObject
object
=
new
JSONObject
();
JSONObject
object
=
new
JSONObject
();
object
.
put
(
"key"
,
certType
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"key"
,
certType
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"value"
,
certType
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"value"
,
certType
.
get
(
i
).
getDictDataKey
());
...
@@ -852,14 +1423,14 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -852,14 +1423,14 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
List
<
DictionarieValueModel
>
RYJB_JC
=
Systemctl
.
dictionarieClient
.
dictValues
(
"RYJB_JC"
).
getResult
();
List
<
DictionarieValueModel
>
RYJB_JC
=
Systemctl
.
dictionarieClient
.
dictValues
(
"RYJB_JC"
).
getResult
();
List
<
DictionarieValueModel
>
RYJB_JY
=
Systemctl
.
dictionarieClient
.
dictValues
(
"RYJB_JY"
).
getResult
();
List
<
DictionarieValueModel
>
RYJB_JY
=
Systemctl
.
dictionarieClient
.
dictValues
(
"RYJB_JY"
).
getResult
();
JSONArray
permissionLevelArray
=
new
JSONArray
();
JSONArray
permissionLevelArray
=
new
JSONArray
();
for
(
int
i
=
0
;
i
<
RYJB_JC
.
size
();
i
++)
{
for
(
int
i
=
0
;
i
<
RYJB_JC
.
size
();
i
++)
{
JSONObject
object
=
new
JSONObject
();
JSONObject
object
=
new
JSONObject
();
object
.
put
(
"key"
,
RYJB_JC
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"key"
,
RYJB_JC
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"value"
,
RYJB_JC
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"value"
,
RYJB_JC
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"label"
,
RYJB_JC
.
get
(
i
).
getDictDataValue
());
object
.
put
(
"label"
,
RYJB_JC
.
get
(
i
).
getDictDataValue
());
permissionLevelArray
.
add
(
object
);
permissionLevelArray
.
add
(
object
);
}
}
for
(
int
i
=
0
;
i
<
RYJB_JY
.
size
();
i
++)
{
for
(
int
i
=
0
;
i
<
RYJB_JY
.
size
();
i
++)
{
JSONObject
object
=
new
JSONObject
();
JSONObject
object
=
new
JSONObject
();
object
.
put
(
"key"
,
RYJB_JY
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"key"
,
RYJB_JY
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"value"
,
RYJB_JY
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"value"
,
RYJB_JY
.
get
(
i
).
getDictDataKey
());
...
@@ -872,7 +1443,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -872,7 +1443,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
//监管设备类型
//监管设备类型
List
<
EquipmentCategoryDto
>
equipmentCategoryDtos
=
equipmentCategoryMapper
.
selectClassify
();
List
<
EquipmentCategoryDto
>
equipmentCategoryDtos
=
equipmentCategoryMapper
.
selectClassify
();
JSONArray
equipCategoryData
=
new
JSONArray
();
JSONArray
equipCategoryData
=
new
JSONArray
();
for
(
int
i
=
0
;
i
<
equipmentCategoryDtos
.
size
();
i
++)
{
for
(
int
i
=
0
;
i
<
equipmentCategoryDtos
.
size
();
i
++)
{
JSONObject
object
=
new
JSONObject
();
JSONObject
object
=
new
JSONObject
();
object
.
put
(
"key"
,
equipmentCategoryDtos
.
get
(
i
).
getCode
());
object
.
put
(
"key"
,
equipmentCategoryDtos
.
get
(
i
).
getCode
());
object
.
put
(
"value"
,
equipmentCategoryDtos
.
get
(
i
).
getCode
());
object
.
put
(
"value"
,
equipmentCategoryDtos
.
get
(
i
).
getCode
());
...
@@ -993,7 +1564,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -993,7 +1564,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
public
JSONArray
queryZYXM
(
String
type
)
{
public
JSONArray
queryZYXM
(
String
type
)
{
JSONArray
result
=
new
JSONArray
();
JSONArray
result
=
new
JSONArray
();
if
(
"特种设备安全管理和作业人员证"
.
equals
(
type
))
{
if
(
"特种设备安全管理和作业人员证"
.
equals
(
type
))
{
List
<
DictionarieValueModel
>
certType
=
Systemctl
.
dictionarieClient
.
dictValues
(
"JOB_ITEM"
).
getResult
();
List
<
DictionarieValueModel
>
certType
=
Systemctl
.
dictionarieClient
.
dictValues
(
"JOB_ITEM"
).
getResult
();
for
(
DictionarieValueModel
certTypeModel
:
certType
)
{
for
(
DictionarieValueModel
certTypeModel
:
certType
)
{
JSONObject
jsonObject
=
new
JSONObject
();
JSONObject
jsonObject
=
new
JSONObject
();
...
@@ -1002,8 +1573,8 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -1002,8 +1573,8 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
jsonObject
.
put
(
"label"
,
certTypeModel
.
getDictDataValue
());
jsonObject
.
put
(
"label"
,
certTypeModel
.
getDictDataValue
());
result
.
add
(
jsonObject
);
result
.
add
(
jsonObject
);
}
}
}
else
{
}
else
{
List
<
DictionarieValueModel
>
certType
=
Systemctl
.
dictionarieClient
.
dictValues
(
"ZZXM_"
+
type
).
getResult
();
List
<
DictionarieValueModel
>
certType
=
Systemctl
.
dictionarieClient
.
dictValues
(
"ZZXM_"
+
type
).
getResult
();
for
(
DictionarieValueModel
certTypeModel
:
certType
)
{
for
(
DictionarieValueModel
certTypeModel
:
certType
)
{
JSONObject
jsonObject
=
new
JSONObject
();
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"key"
,
certTypeModel
.
getDictDataKey
());
jsonObject
.
put
(
"key"
,
certTypeModel
.
getDictDataKey
());
...
@@ -1019,19 +1590,19 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -1019,19 +1590,19 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
SearchRequest
searchRequest
=
new
SearchRequest
(
"idx_biz_enterprise_info"
);
SearchRequest
searchRequest
=
new
SearchRequest
(
"idx_biz_enterprise_info"
);
SearchSourceBuilder
searchSourceBuilder
=
new
SearchSourceBuilder
();
SearchSourceBuilder
searchSourceBuilder
=
new
SearchSourceBuilder
();
BoolQueryBuilder
boolQueryBuilder
=
QueryBuilders
.
boolQuery
();
BoolQueryBuilder
boolQueryBuilder
=
QueryBuilders
.
boolQuery
();
boolQueryBuilder
.
must
(
QueryBuilders
.
wildcardQuery
(
"superviseOrgCode.keyword"
,
QueryParser
.
escape
(
orgCode
)
+
"*"
));
boolQueryBuilder
.
must
(
QueryBuilders
.
wildcardQuery
(
"superviseOrgCode.keyword"
,
QueryParser
.
escape
(
orgCode
)
+
"*"
));
searchSourceBuilder
.
query
(
boolQueryBuilder
);
searchSourceBuilder
.
query
(
boolQueryBuilder
);
searchRequest
.
source
(
searchSourceBuilder
);
searchRequest
.
source
(
searchSourceBuilder
);
JSONArray
result
=
new
JSONArray
();
JSONArray
result
=
new
JSONArray
();
try
{
try
{
SearchResponse
searchResponse
=
restHighLevelClient
.
search
(
searchRequest
,
RequestOptions
.
DEFAULT
);
SearchResponse
searchResponse
=
restHighLevelClient
.
search
(
searchRequest
,
RequestOptions
.
DEFAULT
);
for
(
org
.
elasticsearch
.
search
.
SearchHit
hit
:
searchResponse
.
getHits
().
getHits
())
{
for
(
SearchHit
hit
:
searchResponse
.
getHits
().
getHits
())
{
JSONObject
jsonObject
=
((
JSONObject
)
JSONObject
.
toJSON
(
hit
)).
getJSONObject
(
"sourceAsMap"
);
JSONObject
jsonObject
=
((
JSONObject
)
JSONObject
.
toJSON
(
hit
)).
getJSONObject
(
"sourceAsMap"
);
JSONObject
dto
=
new
JSONObject
();
JSONObject
dto
=
new
JSONObject
();
dto
.
put
(
"key"
,
jsonObject
.
getString
(
"useCode"
));
dto
.
put
(
"key"
,
jsonObject
.
getString
(
"useCode"
));
dto
.
put
(
"value"
,
jsonObject
.
getString
(
"useCode"
));
dto
.
put
(
"value"
,
jsonObject
.
getString
(
"useCode"
));
dto
.
put
(
"label"
,
jsonObject
.
getString
(
"useUnit"
));
dto
.
put
(
"label"
,
jsonObject
.
getString
(
"useUnit"
));
result
.
add
(
dto
);
result
.
add
(
dto
);
}
}
}
catch
(
IOException
e
)
{
}
catch
(
IOException
e
)
{
...
@@ -1044,7 +1615,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -1044,7 +1615,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
public
JSONArray
queryEquipList
()
{
public
JSONArray
queryEquipList
()
{
List
<
EquipmentCategoryDto
>
equipmentCategoryDtos
=
equipmentCategoryMapper
.
selectClassify
();
List
<
EquipmentCategoryDto
>
equipmentCategoryDtos
=
equipmentCategoryMapper
.
selectClassify
();
JSONArray
equipCategoryData
=
new
JSONArray
();
JSONArray
equipCategoryData
=
new
JSONArray
();
for
(
int
i
=
0
;
i
<
equipmentCategoryDtos
.
size
();
i
++)
{
for
(
int
i
=
0
;
i
<
equipmentCategoryDtos
.
size
();
i
++)
{
JSONObject
object
=
new
JSONObject
();
JSONObject
object
=
new
JSONObject
();
object
.
put
(
"key"
,
equipmentCategoryDtos
.
get
(
i
).
getCode
());
object
.
put
(
"key"
,
equipmentCategoryDtos
.
get
(
i
).
getCode
());
object
.
put
(
"value"
,
equipmentCategoryDtos
.
get
(
i
).
getCode
());
object
.
put
(
"value"
,
equipmentCategoryDtos
.
get
(
i
).
getCode
());
...
@@ -1055,12 +1626,12 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -1055,12 +1626,12 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
}
}
public
JSONArray
queryEquCategory
(
String
type
)
{
public
JSONArray
queryEquCategory
(
String
type
)
{
JSONArray
result
=
tzsCustomFilterMapper
.
queryEquCategory
(
type
,
"EQU_CATEGORY"
);
JSONArray
result
=
tzsCustomFilterMapper
.
queryEquCategory
(
type
,
"EQU_CATEGORY"
);
return
result
;
return
result
;
}
}
public
JSONArray
queryEquDefine
(
String
type
)
{
public
JSONArray
queryEquDefine
(
String
type
)
{
JSONArray
result
=
tzsCustomFilterMapper
.
queryEquCategory
(
type
,
"EQU_DEFINE"
);
JSONArray
result
=
tzsCustomFilterMapper
.
queryEquCategory
(
type
,
"EQU_DEFINE"
);
return
result
;
return
result
;
}
}
...
@@ -1097,7 +1668,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -1097,7 +1668,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
//证书类型
//证书类型
List
<
DictionarieValueModel
>
certType
=
Systemctl
.
dictionarieClient
.
dictValues
(
"CERT_TYPE"
).
getResult
();
List
<
DictionarieValueModel
>
certType
=
Systemctl
.
dictionarieClient
.
dictValues
(
"CERT_TYPE"
).
getResult
();
JSONArray
certTypeArray
=
new
JSONArray
();
JSONArray
certTypeArray
=
new
JSONArray
();
for
(
int
i
=
0
;
i
<
certType
.
size
();
i
++)
{
for
(
int
i
=
0
;
i
<
certType
.
size
();
i
++)
{
JSONObject
object
=
new
JSONObject
();
JSONObject
object
=
new
JSONObject
();
object
.
put
(
"key"
,
certType
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"key"
,
certType
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"value"
,
certType
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"value"
,
certType
.
get
(
i
).
getDictDataKey
());
...
@@ -1112,14 +1683,14 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
...
@@ -1112,14 +1683,14 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
List
<
DictionarieValueModel
>
RYJB_JC
=
Systemctl
.
dictionarieClient
.
dictValues
(
"RYJB_JC"
).
getResult
();
List
<
DictionarieValueModel
>
RYJB_JC
=
Systemctl
.
dictionarieClient
.
dictValues
(
"RYJB_JC"
).
getResult
();
List
<
DictionarieValueModel
>
RYJB_JY
=
Systemctl
.
dictionarieClient
.
dictValues
(
"RYJB_JY"
).
getResult
();
List
<
DictionarieValueModel
>
RYJB_JY
=
Systemctl
.
dictionarieClient
.
dictValues
(
"RYJB_JY"
).
getResult
();
JSONArray
permissionLevelArray
=
new
JSONArray
();
JSONArray
permissionLevelArray
=
new
JSONArray
();
for
(
int
i
=
0
;
i
<
RYJB_JC
.
size
();
i
++)
{
for
(
int
i
=
0
;
i
<
RYJB_JC
.
size
();
i
++)
{
JSONObject
object
=
new
JSONObject
();
JSONObject
object
=
new
JSONObject
();
object
.
put
(
"key"
,
RYJB_JC
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"key"
,
RYJB_JC
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"value"
,
RYJB_JC
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"value"
,
RYJB_JC
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"label"
,
RYJB_JC
.
get
(
i
).
getDictDataValue
());
object
.
put
(
"label"
,
RYJB_JC
.
get
(
i
).
getDictDataValue
());
permissionLevelArray
.
add
(
object
);
permissionLevelArray
.
add
(
object
);
}
}
for
(
int
i
=
0
;
i
<
RYJB_JY
.
size
();
i
++)
{
for
(
int
i
=
0
;
i
<
RYJB_JY
.
size
();
i
++)
{
JSONObject
object
=
new
JSONObject
();
JSONObject
object
=
new
JSONObject
();
object
.
put
(
"key"
,
RYJB_JY
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"key"
,
RYJB_JY
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"value"
,
RYJB_JY
.
get
(
i
).
getDictDataKey
());
object
.
put
(
"value"
,
RYJB_JY
.
get
(
i
).
getDictDataKey
());
...
...
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