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
bf16fa1d
Commit
bf16fa1d
authored
Jul 16, 2025
by
tianbo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor(amos-boot-module-statistics): 重构企业统计方法并添加新功能
- 重构了企业统计查询逻辑,提高了代码复用性和可维护性 - 新增了企业监管标签和行业主管部分的统计功能 - 优化了许可状态统计的实现方式 - 调整了统计结果的数据结构,使其更加清晰和易于使用 - 引入了新的枚举类 UnitCategoryEnum 来定义单位类别
parent
0eb4bc32
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
329 additions
and
126 deletions
+329
-126
UnitCategoryEnum.java
...os/boot/module/statistics/api/enums/UnitCategoryEnum.java
+13
-0
ComprehensiveStatisticalAnalysisServiceImpl.java
...ice/impl/ComprehensiveStatisticalAnalysisServiceImpl.java
+313
-124
QueryBuilderUtils.java
...os/boot/module/statistcs/biz/utils/QueryBuilderUtils.java
+3
-2
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/UnitCategoryEnum.java
0 → 100644
View file @
bf16fa1d
package
com
.
yeejoin
.
amos
.
boot
.
module
.
statistics
.
api
.
enums
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
@AllArgsConstructor
@Getter
public
enum
UnitCategoryEnum
{
use
(
"使用单位"
,
"use"
),
license
(
"许可单位"
,
"license"
);
private
final
String
name
;
private
final
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 @
bf16fa1d
...
...
@@ -75,6 +75,7 @@ import java.util.concurrent.CompletableFuture;
import
java.util.concurrent.ExecutionException
;
import
java.util.concurrent.ExecutorService
;
import
java.util.concurrent.Executors
;
import
java.util.function.BiConsumer
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
...
...
@@ -560,7 +561,114 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
String
orgCode
=
filter
.
getString
(
"orgCode"
);
boolMust
.
must
(
QueryBuilders
.
prefixQuery
(
"superviseOrgCode"
,
orgCode
));
JSONObject
filterParams
=
null
;
getCompanyBoolQueryBuilder
(
filter
,
boolMust
);
// 排序
if
(!
ObjectUtils
.
isEmpty
(
filter
.
get
(
"sort"
)))
{
JSONObject
sort
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filter
.
get
(
"sort"
)));
String
field
=
sort
.
getString
(
"field"
).
equals
(
"permissionStatus"
)
?
"licenses.expiryDate"
:
sort
.
getString
(
"field"
)
+
".keyword"
;
SortOrder
sortOrder
=
sort
.
getString
(
"order"
).
equals
(
"desc"
)
?
SortOrder
.
DESC
:
SortOrder
.
ASC
;
FieldSortBuilder
sortBuilder
=
SortBuilders
.
fieldSort
(
field
).
order
(
sortOrder
);
builder
.
sort
(
sortBuilder
);
}
builder
.
query
(
boolMust
);
builder
.
from
((
current
-
1
)
*
size
);
builder
.
size
(
size
);
request
.
source
(
builder
);
List
<
JSONObject
>
list
=
new
LinkedList
<>();
long
totle
=
0
;
try
{
SearchResponse
response
=
restHighLevelClient
.
search
(
request
,
RequestOptions
.
DEFAULT
);
for
(
SearchHit
hit
:
response
.
getHits
().
getHits
())
{
JSONObject
jsonObject
=
(
JSONObject
)
JSONObject
.
toJSON
(
hit
);
JSONObject
dto
=
jsonObject
.
getJSONObject
(
"sourceAsMap"
);
StringBuilder
permissionStatus
=
new
StringBuilder
();
if
(
dto
.
containsKey
(
"licenses"
))
{
JSONArray
licenses
=
dto
.
getJSONArray
(
"licenses"
);
if
(!
ObjectUtils
.
isEmpty
(
licenses
))
{
List
<
String
>
permissionStatusList
=
new
ArrayList
<>();
for
(
Object
object
:
licenses
)
{
JSONObject
json
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
object
));
String
expiryDate
=
json
.
getString
(
"expiryDate"
);
if
(!
ObjectUtils
.
isEmpty
(
expiryDate
))
{
long
daysBetween
=
ChronoUnit
.
DAYS
.
between
(
LocalDate
.
now
(),
LocalDate
.
parse
(
expiryDate
,
formatter
));
if
(
daysBetween
<=
0
)
{
permissionStatusList
.
add
(
"超期"
);
}
else
if
(
daysBetween
<=
30
)
{
permissionStatusList
.
add
(
"临期"
);
}
else
{
permissionStatusList
.
add
(
"正常"
);
}
}
else
{
permissionStatusList
.
add
(
"无有效期"
);
}
}
long
cq
=
permissionStatusList
.
stream
().
filter
(
e
->
e
.
equals
(
"超期"
)).
count
();
long
lq
=
permissionStatusList
.
stream
().
filter
(
e
->
e
.
equals
(
"临期"
)).
count
();
long
zc
=
permissionStatusList
.
stream
().
filter
(
e
->
e
.
equals
(
"正常"
)).
count
();
long
no
=
permissionStatusList
.
stream
().
filter
(
e
->
e
.
equals
(
"无有效期"
)).
count
();
if
(
cq
>
0
)
{
permissionStatus
.
append
(
"/许可超期"
);
}
if
(
lq
>
0
)
{
permissionStatus
.
append
(
"/许可临期"
);
}
if
(
zc
>
0
)
{
permissionStatus
.
append
(
"/许可正常"
);
}
if
(
no
>
0
)
{
permissionStatus
.
append
(
"/无有效期"
);
}
}
}
else
if
(!
dto
.
containsKey
(
"licenses"
)
&&
(
dto
.
get
(
"unitType"
).
toString
().
contains
(
"检测单位"
)
||
dto
.
get
(
"unitType"
).
toString
().
contains
(
"检验单位"
)
||
dto
.
get
(
"unitType"
).
toString
().
contains
(
"制造单位"
)
||
dto
.
get
(
"unitType"
).
toString
().
contains
(
"充装单位"
)
||
dto
.
get
(
"unitType"
).
toString
().
contains
(
"设计单位"
)
||
dto
.
get
(
"unitType"
).
toString
().
contains
(
"安装改造维修单位"
)))
{
permissionStatus
.
append
(
"/无有效期"
);
}
String
permissionStatusStr
=
permissionStatus
.
toString
();
permissionStatusStr
=
permissionStatusStr
.
startsWith
(
"/"
)
?
permissionStatusStr
.
substring
(
1
)
:
permissionStatusStr
;
permissionStatusStr
=
permissionStatusStr
.
endsWith
(
"/"
)
?
permissionStatusStr
.
substring
(
0
,
permissionStatusStr
.
length
()
-
1
)
:
permissionStatusStr
;
dto
.
put
(
"permissionStatus"
,
permissionStatusStr
);
list
.
add
(
dto
);
}
totle
=
Objects
.
requireNonNull
(
response
.
getInternalResponse
().
hits
().
getTotalHits
()).
value
;
page
.
setRecords
(
list
);
page
.
setTotal
(
totle
);
result
.
put
(
"pageData"
,
page
);
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
e
);
}
List
<
Map
<
String
,
Object
>>
statics
=
new
ArrayList
<>();
Map
<
String
,
Object
>
sum
=
new
HashMap
<>();
sum
.
put
(
"name"
,
"企业总数(个)"
);
sum
.
put
(
"value"
,
totle
);
statics
.
add
(
sum
);
result
.
put
(
"statics"
,
statics
);
// 获取许可状态统计
List
<
Map
<
String
,
Object
>>
staticMap
=
new
ArrayList
<>();
getCompanyOrPersonPermitStatusStatic
(
boolMust
,
staticMap
,
StatisticalAnalysisEnum
.
company
.
getKey
());
result
.
put
(
"keyIndicator"
,
staticMap
);
return
result
;
}
/**
* 构造企业查询条件
*
* @param filter
* @param boolMust
*/
private
void
getCompanyBoolQueryBuilder
(
JSONObject
filter
,
BoolQueryBuilder
boolMust
)
{
JSONObject
filterParams
;
if
(!
ObjectUtils
.
isEmpty
(
filter
.
get
(
"filterParams"
)))
{
filterParams
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filter
.
get
(
"filterParams"
)));
String
filterType
=
filter
.
getString
(
"filterType"
);
...
...
@@ -661,104 +769,6 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
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"
).
equals
(
"permissionStatus"
)
?
"licenses.expiryDate"
:
sort
.
getString
(
"field"
)
+
".keyword"
;
SortOrder
sortOrder
=
sort
.
getString
(
"order"
).
equals
(
"desc"
)
?
SortOrder
.
DESC
:
SortOrder
.
ASC
;
FieldSortBuilder
sortBuilder
=
SortBuilders
.
fieldSort
(
field
).
order
(
sortOrder
);
builder
.
sort
(
sortBuilder
);
}
builder
.
query
(
boolMust
);
builder
.
from
((
current
-
1
)
*
size
);
builder
.
size
(
size
);
request
.
source
(
builder
);
List
<
JSONObject
>
list
=
new
LinkedList
<>();
long
totle
=
0
;
try
{
SearchResponse
response
=
restHighLevelClient
.
search
(
request
,
RequestOptions
.
DEFAULT
);
for
(
SearchHit
hit
:
response
.
getHits
().
getHits
())
{
JSONObject
jsonObject
=
(
JSONObject
)
JSONObject
.
toJSON
(
hit
);
JSONObject
dto
=
jsonObject
.
getJSONObject
(
"sourceAsMap"
);
StringBuilder
permissionStatus
=
new
StringBuilder
();
if
(
dto
.
containsKey
(
"licenses"
))
{
JSONArray
licenses
=
dto
.
getJSONArray
(
"licenses"
);
if
(!
ObjectUtils
.
isEmpty
(
licenses
))
{
List
<
String
>
permissionStatusList
=
new
ArrayList
<>();
for
(
Object
object
:
licenses
)
{
JSONObject
json
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
object
));
String
expiryDate
=
json
.
getString
(
"expiryDate"
);
if
(!
ObjectUtils
.
isEmpty
(
expiryDate
))
{
long
daysBetween
=
ChronoUnit
.
DAYS
.
between
(
LocalDate
.
now
(),
LocalDate
.
parse
(
expiryDate
,
formatter
));
if
(
daysBetween
<=
0
)
{
permissionStatusList
.
add
(
"超期"
);
}
else
if
(
daysBetween
<=
30
)
{
permissionStatusList
.
add
(
"临期"
);
}
else
{
permissionStatusList
.
add
(
"正常"
);
}
}
else
{
permissionStatusList
.
add
(
"无有效期"
);
}
}
long
cq
=
permissionStatusList
.
stream
().
filter
(
e
->
e
.
equals
(
"超期"
)).
count
();
long
lq
=
permissionStatusList
.
stream
().
filter
(
e
->
e
.
equals
(
"临期"
)).
count
();
long
zc
=
permissionStatusList
.
stream
().
filter
(
e
->
e
.
equals
(
"正常"
)).
count
();
long
no
=
permissionStatusList
.
stream
().
filter
(
e
->
e
.
equals
(
"无有效期"
)).
count
();
if
(
cq
>
0
)
{
permissionStatus
.
append
(
"/许可超期"
);
}
if
(
lq
>
0
)
{
permissionStatus
.
append
(
"/许可临期"
);
}
if
(
zc
>
0
)
{
permissionStatus
.
append
(
"/许可正常"
);
}
if
(
no
>
0
)
{
permissionStatus
.
append
(
"/无有效期"
);
}
}
}
else
if
(!
dto
.
containsKey
(
"licenses"
)
&&
(
dto
.
get
(
"unitType"
).
toString
().
contains
(
"检测单位"
)
||
dto
.
get
(
"unitType"
).
toString
().
contains
(
"检验单位"
)
||
dto
.
get
(
"unitType"
).
toString
().
contains
(
"制造单位"
)
||
dto
.
get
(
"unitType"
).
toString
().
contains
(
"充装单位"
)
||
dto
.
get
(
"unitType"
).
toString
().
contains
(
"设计单位"
)
||
dto
.
get
(
"unitType"
).
toString
().
contains
(
"安装改造维修单位"
)))
{
permissionStatus
.
append
(
"/无有效期"
);
}
String
permissionStatusStr
=
permissionStatus
.
toString
();
permissionStatusStr
=
permissionStatusStr
.
startsWith
(
"/"
)
?
permissionStatusStr
.
substring
(
1
)
:
permissionStatusStr
;
permissionStatusStr
=
permissionStatusStr
.
endsWith
(
"/"
)
?
permissionStatusStr
.
substring
(
0
,
permissionStatusStr
.
length
()
-
1
)
:
permissionStatusStr
;
dto
.
put
(
"permissionStatus"
,
permissionStatusStr
);
list
.
add
(
dto
);
}
totle
=
Objects
.
requireNonNull
(
response
.
getInternalResponse
().
hits
().
getTotalHits
()).
value
;
page
.
setRecords
(
list
);
page
.
setTotal
(
totle
);
result
.
put
(
"pageData"
,
page
);
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
e
);
}
List
<
Map
<
String
,
Object
>>
statics
=
new
ArrayList
<>();
Map
<
String
,
Object
>
sum
=
new
HashMap
<>();
sum
.
put
(
"name"
,
"企业总数(个)"
);
sum
.
put
(
"value"
,
totle
);
statics
.
add
(
sum
);
result
.
put
(
"statics"
,
statics
);
// 获取许可状态统计
List
<
Map
<
String
,
Object
>>
staticMap
=
new
ArrayList
<>();
getCompanyOrPersonPermitStatusStatic
(
boolMust
,
staticMap
,
StatisticalAnalysisEnum
.
company
.
getKey
());
result
.
put
(
"keyIndicator"
,
staticMap
);
return
result
;
}
private
void
deleteUnitCategory
(
JSONObject
filterParams
)
{
...
...
@@ -2053,6 +2063,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
object
.
put
(
"key"
,
list
.
get
(
i
).
getCode
());
object
.
put
(
"value"
,
list
.
get
(
i
).
getCode
());
object
.
put
(
"label"
,
list
.
get
(
i
).
getName
());
object
.
put
(
"extendCode"
,
list
.
get
(
i
).
getExtend
());
result
.
add
(
object
);
}
...
...
@@ -2731,27 +2742,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
.
orElse
(
false
);
// 一级统计
if
(!
is2LeveFlag
)
{
// 计算总数
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
);
this
.
buildPersonWithCompanyTypeGroupResult
(
unitTypesTerms
,
result
);
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
e
);
}
// 汇总总数
tabTotalMap
.
put
(
StatisticalAnalysisEnum
.
person
.
getCode
(),
personTotal
);
return
Collections
.
singletonList
(
result
);
return
getTotalAggMapsByUnitType
(
request
,
builder
,
boolMust
,
tabTotalMap
,
StatisticalAnalysisEnum
.
person
);
}
else
{
// 二级统计
Map
<
String
,
Object
>
result
=
new
HashMap
<>();
...
...
@@ -2767,6 +2758,30 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
}
}
private
List
<
Map
<
String
,
Object
>>
getTotalAggMapsByUnitType
(
SearchRequest
request
,
SearchSourceBuilder
builder
,
BoolQueryBuilder
boolMust
,
Map
<
String
,
Object
>
tabTotalMap
,
StatisticalAnalysisEnum
statisticalAnalysisEnum
)
{
// 计算总数
long
total
=
this
.
queryDpStatisticsTotalByIndex
(
boolMust
,
statisticalAnalysisEnum
.
getKey
());
// 聚合查询
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
);
this
.
buildPersonWithCompanyTypeGroupResult
(
unitTypesTerms
,
result
);
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
e
);
}
// 汇总总数
tabTotalMap
.
put
(
statisticalAnalysisEnum
.
getCode
(),
total
);
return
Collections
.
singletonList
(
result
);
}
private
void
buildPersonWithCompanyTypeGroupResult
(
Terms
unitTypesTerms
,
Map
<
String
,
Object
>
result
)
{
if
(
unitTypesTerms
!=
null
)
{
for
(
Terms
.
Bucket
bucket
:
unitTypesTerms
.
getBuckets
())
{
...
...
@@ -2798,9 +2813,9 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
}
}
private
long
queryDp
PersonStatisticsTotal
(
BoolQueryBuilder
boolMust
)
{
private
long
queryDp
StatisticsTotalByIndex
(
BoolQueryBuilder
boolMust
,
String
index
)
{
CountRequest
countRequest
=
new
CountRequest
();
countRequest
.
indices
(
StatisticalAnalysisEnum
.
person
.
getKey
()
);
countRequest
.
indices
(
index
);
countRequest
.
query
(
boolMust
);
CountResponse
countResponse
;
try
{
...
...
@@ -2812,7 +2827,46 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
}
private
List
<
Map
<
String
,
Object
>>
queryDpCompanyStatistics
(
JSONObject
filter
,
SearchRequest
request
,
SearchSourceBuilder
builder
,
BoolQueryBuilder
boolMust
,
Map
<
String
,
Object
>
tabTotalMap
)
{
return
null
;
request
.
indices
(
StatisticalAnalysisEnum
.
company
.
getKey
());
JSONObject
filterParams
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filter
.
get
(
"filterParams"
)));
String
unitCategory
=
filterParams
.
getString
(
"unitCategory"
);
String
unitType
=
filterParams
.
getJSONArray
(
"unitType"
).
getString
(
0
);
// 构造企业查询条件
filter
.
put
(
"filterType"
,
"advanced"
);
getCompanyBoolQueryBuilder
(
filter
,
boolMust
);
boolean
is2LeveFlag
=
Optional
.
of
(
filter
)
.
map
(
obj
->
obj
.
getJSONObject
(
"filterParams"
))
.
map
(
filterParamsObj
->
filterParamsObj
.
getJSONArray
(
"unitType"
))
.
map
(
unitTypeObj
->
!
unitTypeObj
.
isEmpty
())
.
orElse
(
false
);
// 一级统计
if
(!
is2LeveFlag
)
{
return
getTotalAggMapsByUnitType
(
request
,
builder
,
boolMust
,
tabTotalMap
,
StatisticalAnalysisEnum
.
company
);
}
else
{
// 二级统计
Map
<
String
,
Object
>
result
=
new
HashMap
<>();
// 使用单位:使用单位,个人主体 返回管控级别和所属行业
boolMust
.
must
(
QueryBuilders
.
matchQuery
(
"unitType"
,
unitType
));
if
(
unitCategory
.
equals
(
UnitCategoryEnum
.
use
.
getCode
()))
{
JSONObject
regulatoryLabels
=
this
.
getItemGroupStatisticsByItemName
(
boolMust
,
StatisticalAnalysisEnum
.
company
.
getKey
(),
"regulatoryLabelsAggName"
,
"regulatoryLabels"
,
this
::
buildRegulatoryLabelsGroupResult
);
JSONObject
industrySupervisor
=
this
.
getItemGroupStatisticsByItemName
(
boolMust
,
StatisticalAnalysisEnum
.
company
.
getKey
(),
"industrySupervisorAggName"
,
"industrySupervisor"
,
this
::
buildIndustrySupervisorGroupResult
);
result
.
put
(
"tabTotalMap"
,
new
JSONObject
()
.
fluentPut
(
"regulatoryLabelsTotal"
,
this
.
sumWithJSONObjectValues
(
regulatoryLabels
))
.
fluentPut
(
"industrySupervisorTotal"
,
this
.
sumWithJSONObjectValues
(
industrySupervisor
)));
result
.
put
(
"datas"
,
new
JSONObject
()
.
fluentPut
(
"regulatoryLabels"
,
regulatoryLabels
)
.
fluentPut
(
"industrySupervisor"
,
industrySupervisor
));
}
else
if
(
unitCategory
.
equals
(
UnitCategoryEnum
.
license
.
getCode
()))
{
// 许可单位:设计单位、制造单位、充装单位、检验机构、检查机构、安装改造维修单位
JSONObject
permitStatus
=
getPermitStatusGroupStatistics
(
boolMust
);
result
.
put
(
"tabTotalMap"
,
new
JSONObject
()
.
fluentPut
(
"permitStatusTotal"
,
this
.
sumWithJSONObjectValues
(
permitStatus
)));
result
.
put
(
"datas"
,
new
JSONObject
()
.
fluentPut
(
"permitStatus"
,
permitStatus
));
}
return
Collections
.
singletonList
(
result
);
}
}
private
List
<
Map
<
String
,
Object
>>
queryDpEquipStatistics
(
JSONObject
filter
,
SearchRequest
request
,
SearchSourceBuilder
builder
,
BoolQueryBuilder
boolMust
,
Map
<
String
,
Object
>
tabTotalMap
)
{
...
...
@@ -3170,7 +3224,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
searchSourceBuilder
.
size
(
0
);
// 不返回任何文档,只返回聚合结果
SearchRequest
searchRequest
=
new
SearchRequest
();
String
aggName
=
"personTypeGroupAgg"
;
QueryBuilderUtils
.
buildSplitFieldAggCondition
(
searchSourceBuilder
,
"postName.keyword"
,
","
,
aggName
);
QueryBuilderUtils
.
buildSplitFieldAggCondition
(
searchSourceBuilder
,
"postName.keyword"
,
","
,
aggName
,
"其他"
);
searchSourceBuilder
.
query
(
boolQuery
);
searchRequest
.
source
(
searchSourceBuilder
);
try
{
...
...
@@ -3196,6 +3250,44 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
return
result
;
}
/**
* 大屏综合统计查询接口--企业监管标签分组统计
*/
private
JSONObject
getItemGroupStatisticsByItemName
(
BoolQueryBuilder
boolQuery
,
String
indexName
,
String
aggName
,
String
itemName
,
BiConsumer
<
Terms
,
JSONObject
>
task
)
{
JSONObject
result
=
new
JSONObject
();
// copy一份,避免后续两部分逻辑不一致
BoolQueryBuilder
boolQueryCopy
=
QueryBuilderUtils
.
copyBoolQuery
(
boolQuery
);
SearchSourceBuilder
searchSourceBuilder
=
new
SearchSourceBuilder
();
searchSourceBuilder
.
trackTotalHits
(
true
);
searchSourceBuilder
.
size
(
0
);
// 不返回任何文档,只返回聚合结果
SearchRequest
searchRequest
=
new
SearchRequest
();
QueryBuilderUtils
.
buildSplitFieldAggCondition
(
searchSourceBuilder
,
itemName
+
".keyword"
,
","
,
aggName
,
"其他"
);
searchSourceBuilder
.
query
(
boolQuery
);
searchRequest
.
source
(
searchSourceBuilder
);
try
{
SearchResponse
searchResponse
=
restHighLevelClient
.
search
(
searchRequest
,
RequestOptions
.
DEFAULT
);
Terms
itemGroupAgg
=
searchResponse
.
getAggregations
().
get
(
aggName
);
// this.buildGroupResult(itemGroupAgg, result);
task
.
accept
(
itemGroupAgg
,
result
);
}
catch
(
Exception
ex
)
{
throw
new
RuntimeException
(
ex
);
}
CountRequest
countRequest
=
new
CountRequest
();
countRequest
.
indices
(
indexName
);
countRequest
.
query
(
boolQueryCopy
);
CountResponse
countResponse
;
try
{
countResponse
=
restHighLevelClient
.
count
(
countRequest
,
RequestOptions
.
DEFAULT
);
}
catch
(
Exception
exception
)
{
throw
new
RuntimeException
(
exception
);
}
result
.
put
(
"total"
,
ObjectUtils
.
isEmpty
(
countResponse
)
?
0L
:
countResponse
.
getCount
());
return
result
;
}
private
void
buildPersonWithPersonTypeGroupResult
(
Terms
personTypeGroupAgg
,
JSONObject
result
)
{
result
.
fluentPut
(
"zyfzr"
,
0L
).
fluentPut
(
"aqzj"
,
0L
).
fluentPut
(
"aqy"
,
0L
).
fluentPut
(
"jyry"
,
0L
).
fluentPut
(
"jcry"
,
0L
).
fluentPut
(
"zlaqzj"
,
0L
).
fluentPut
(
"zlaqy"
,
0L
);
if
(
personTypeGroupAgg
!=
null
)
{
...
...
@@ -3224,4 +3316,100 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
}
}
}
private
void
buildRegulatoryLabelsGroupResult
(
Terms
groupAgg
,
JSONObject
result
)
{
if
(
groupAgg
==
null
)
{
return
;
}
JSONArray
regulatoryLabels
=
deployDictionary
(
dataDictionaryService
.
getByType
(
"QYBQ"
));
// 枚举遍历 + 动态匹配
for
(
Terms
.
Bucket
bucket
:
groupAgg
.
getBuckets
())
{
String
bucketKey
=
bucket
.
getKeyAsString
();
for
(
Object
obj
:
regulatoryLabels
)
{
JSONObject
jsonObject
=
(
JSONObject
)
obj
;
result
.
put
(
jsonObject
.
getString
(
"value"
),
0
);
if
(
jsonObject
.
getString
(
"label"
).
equals
(
bucketKey
))
{
result
.
put
(
jsonObject
.
getString
(
"extendCode"
),
bucket
.
getDocCount
());
break
;
}
}
if
(
bucketKey
.
equals
(
"其他"
))
{
result
.
put
(
"other"
,
bucket
.
getDocCount
());
}
}
}
private
void
buildIndustrySupervisorGroupResult
(
Terms
groupAgg
,
JSONObject
result
)
{
if
(
groupAgg
==
null
)
{
return
;
}
JSONArray
industrySupervisor
=
deployDictionary
(
dataDictionaryService
.
getByType
(
"HYZGBM"
));
// 枚举遍历 + 动态匹配
for
(
Terms
.
Bucket
bucket
:
groupAgg
.
getBuckets
())
{
String
bucketKey
=
bucket
.
getKeyAsString
();
for
(
Object
obj
:
industrySupervisor
)
{
JSONObject
jsonObject
=
(
JSONObject
)
obj
;
result
.
put
(
jsonObject
.
getString
(
"value"
),
0
);
if
(
jsonObject
.
getString
(
"label"
).
equals
(
bucketKey
))
{
result
.
put
(
jsonObject
.
getString
(
"value"
),
bucket
.
getDocCount
());
break
;
}
}
if
(
bucketKey
.
equals
(
"其他"
))
{
result
.
put
(
"other"
,
bucket
.
getDocCount
());
}
}
}
private
JSONObject
getPermitStatusGroupStatistics
(
BoolQueryBuilder
boolQuery
)
{
JSONObject
result
=
new
JSONObject
();
String
path
=
"licenses"
;
String
nestedField
=
path
+
".expiryDate"
;
// 许可正常
BoolQueryBuilder
normalBoolQuery
=
QueryBuilderUtils
.
copyBoolQuery
(
boolQuery
);
NestedQueryBuilder
normalNestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
nestedField
).
gt
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
))),
ScoreMode
.
None
);
normalBoolQuery
.
must
(
normalNestedQuery
);
Long
normalCount
=
getStatisticCount
(
normalBoolQuery
,
StatisticalAnalysisEnum
.
company
.
getKey
());
result
.
put
(
"xkzc"
,
normalCount
);
// 许可临期
BoolQueryBuilder
nearBoolQuery
=
QueryBuilderUtils
.
copyBoolQuery
(
boolQuery
);
NestedQueryBuilder
nearNestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
nestedField
).
lte
(
LocalDate
.
now
().
plusDays
(
30
).
format
(
formatter
)).
gte
(
LocalDate
.
now
().
format
(
formatter
))),
ScoreMode
.
None
);
nearBoolQuery
.
must
(
nearNestedQuery
);
Long
nearCount
=
getStatisticCount
(
nearBoolQuery
,
StatisticalAnalysisEnum
.
company
.
getKey
());
result
.
put
(
"xklq"
,
nearCount
);
// 许可超期
BoolQueryBuilder
overBoolQuery
=
QueryBuilderUtils
.
copyBoolQuery
(
boolQuery
);
NestedQueryBuilder
overNestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
rangeQuery
(
nestedField
).
lte
(
LocalDate
.
now
().
format
(
formatter
))),
ScoreMode
.
None
);
overBoolQuery
.
must
(
overNestedQuery
);
Long
overCount
=
getStatisticCount
(
overBoolQuery
,
StatisticalAnalysisEnum
.
company
.
getKey
());
result
.
put
(
"xkcq"
,
overCount
);
// 无有效期
BoolQueryBuilder
nothingBoolQuery
=
QueryBuilderUtils
.
copyBoolQuery
(
boolQuery
);
NestedQueryBuilder
nothingNestedQuery
=
QueryBuilders
.
nestedQuery
(
path
,
QueryBuilders
.
boolQuery
().
must
(
QueryBuilders
.
existsQuery
(
nestedField
)),
ScoreMode
.
None
);
nothingBoolQuery
.
must
(
nothingNestedQuery
);
Long
nothingCount
=
getStatisticCount
(
nothingBoolQuery
,
StatisticalAnalysisEnum
.
company
.
getKey
());
result
.
put
(
"wyxq"
,
nothingCount
);
return
result
;
}
}
\ 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/biz/utils/QueryBuilderUtils.java
View file @
bf16fa1d
...
...
@@ -44,7 +44,7 @@ public class QueryBuilderUtils {
* @param spiltSymbol 分割符号,如:#
* @param aggName 聚合名称,根据此名称从查询结果获取数据,如:Terms unitTypesTerms = searchResponse.getAggregations().get(aggName)
*/
public
static
void
buildSplitFieldAggCondition
(
SearchSourceBuilder
searchSourceBuilder
,
String
field
,
String
spiltSymbol
,
String
aggName
)
{
public
static
void
buildSplitFieldAggCondition
(
SearchSourceBuilder
searchSourceBuilder
,
String
field
,
String
spiltSymbol
,
String
aggName
,
String
params
)
{
// Painless 脚本内容
String
scriptSource
=
"if (doc['"
+
field
+
"'].size() > 0) {"
+
" String value = doc['"
+
field
+
"'].value;"
+
...
...
@@ -54,6 +54,6 @@ public class QueryBuilderUtils {
"}"
+
"return [];"
;
Script
script
=
new
Script
(
ScriptType
.
INLINE
,
"painless"
,
scriptSource
,
Collections
.
emptyMap
());
searchSourceBuilder
.
aggregation
(
AggregationBuilders
.
terms
(
aggName
).
script
(
script
));
searchSourceBuilder
.
aggregation
(
AggregationBuilders
.
terms
(
aggName
).
script
(
script
)
.
missing
(
params
).
size
(
100
)
);
}
}
\ 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