Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
J
jyzb_platformV2
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Members
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
赵剑炜
jyzb_platformV2
Commits
0f259617
Commit
0f259617
authored
Mar 04, 2024
by
赵剑炜
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化线程池,提升报表查询速度
parent
298c2f96
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
28 行增加
和
12 行删除
+28
-12
TjServiceImpl.java
jyzb-biz/src/main/java/com/junmp/jyzb/service/impl/TjServiceImpl.java
+28
-12
没有找到文件。
jyzb-biz/src/main/java/com/junmp/jyzb/service/impl/TjServiceImpl.java
View file @
0f259617
...
...
@@ -90,25 +90,41 @@ public class TjServiceImpl implements TjService {
//先拿到符合条件的组织机构,再遍历组织机构组成数据
//(下一层数据组织机构数据)
List
<
String
>
orgList
=
inventorySummaryMapper
.
getTotalData
(
String
.
valueOf
(
req
.
getOrgId
()));
List
<
TjOrgEqsDto
>
allData
=
new
ArrayList
<>();
//
List<TjOrgEqsDto> allData=new ArrayList<>();
Executor
customExecutor
=
Executors
.
newFixedThreadPool
(
10
);
// 创建一个固定大小的线程池
List
<
CompletableFuture
<
TjOrgEqsDto
>>
futures
=
orgList
.
stream
()
.
map
(
orgId
->
CompletableFuture
.
supplyAsync
(()
->
{
return
inventorySummaryMapper
.
GetInvSum
(
orgId
,
req
.
getTypeIdsList
().
isEmpty
()
?
null
:
req
.
getTypeIdsAsString
(),
req
.
getSizeNameList
().
isEmpty
()
?
null
:
req
.
getSizesAsString
());
},
customExecutor
))
// 使用自定义的 Executor
.
collect
(
Collectors
.
toList
());
// 定义一个批处理大小,即每次处理的最大 orgId 数量
int
batchSize
=
5
;
CompletableFuture
<
Void
>
allOf
=
CompletableFuture
.
allOf
(
futures
.
toArray
(
new
CompletableFuture
[
0
]));
// 将 orgList 分组,每组包含 batchSize 个 orgId
List
<
List
<
String
>>
batches
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
orgList
.
size
();
i
+=
batchSize
)
{
int
endIndex
=
Math
.
min
(
i
+
batchSize
,
orgList
.
size
());
List
<
String
>
batch
=
orgList
.
subList
(
i
,
endIndex
);
batches
.
add
(
batch
);
}
allOf
.
join
();
// 等待所有 CompletableFuture 完成
// 创建一个 CompletableFuture 的列表,每个 CompletableFuture 处理一个批次的 orgId
List
<
CompletableFuture
<
List
<
TjOrgEqsDto
>>>
futures
=
batches
.
stream
()
.
map
(
batch
->
CompletableFuture
.
supplyAsync
(()
->
{
List
<
TjOrgEqsDto
>
results
=
new
ArrayList
<>();
for
(
String
orgId
:
batch
)
{
// 调用 GetInvSum 方法,处理当前批次的所有 orgId
TjOrgEqsDto
result
=
inventorySummaryMapper
.
GetInvSum
(
orgId
,
req
.
getTypeIdsList
().
isEmpty
()
?
null
:
req
.
getTypeIdsAsString
(),
req
.
getSizeNameList
().
isEmpty
()
?
null
:
req
.
getSizesAsString
());
results
.
add
(
result
);
}
return
results
;
},
customExecutor
))
// 使用自定义的 Executor
.
collect
(
Collectors
.
toList
());
allData
=
futures
.
stream
()
// 等待所有 CompletableFuture 完成,并收集结果
List
<
TjOrgEqsDto
>
allData
=
futures
.
stream
()
.
map
(
CompletableFuture:
:
join
)
.
flatMap
(
List:
:
stream
)
.
collect
(
Collectors
.
toList
());
if
(
req
.
getOrgId
()!=
1369509498032808905L
)
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论