Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wangxiaolu-link-module-bi
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
sfa
wangxiaolu-link-module-bi
Commits
d4c86aa5
提交
d4c86aa5
authored
2月 12, 2025
作者:
吕本才
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1、区分多线程和单线程查询
上级
3e75da50
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
71 行增加
和
57 行删除
+71
-57
FinanceOrderDetailServiceImpl.java
...m/link/bi/service/impl/FinanceOrderDetailServiceImpl.java
+71
-57
没有找到文件。
src/main/java/com/link/bi/service/impl/FinanceOrderDetailServiceImpl.java
浏览文件 @
d4c86aa5
...
...
@@ -35,6 +35,7 @@ import org.springframework.util.MimeType;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.io.UnsupportedEncodingException
;
import
java.math.BigDecimal
;
import
java.net.URLEncoder
;
import
java.util.*
;
import
java.util.concurrent.*
;
...
...
@@ -46,7 +47,6 @@ import java.util.stream.Collectors;
* @author lvbencai
* @date 2025年01月07日17:00:16
*/
// 指定不同的数据源
@Slf4j
@Service
public
class
FinanceOrderDetailServiceImpl
extends
ServiceImpl
<
FinanceOrderDetailMapper
,
FinanceOrderDetail
>
implements
FinanceOrderDetailService
{
...
...
@@ -59,22 +59,47 @@ public class FinanceOrderDetailServiceImpl extends ServiceImpl<FinanceOrderDetai
// private Executor defaultExecutor;
@Override
public
PageInfo
<
FinanceBiListDto
>
selectBiFinanceCostList
(
FinanceCostVo
financeCostVo
)
{
PageInfo
<
FinanceBiListDto
>
pageInfo
=
new
PageInfo
<>();
// 多线程,设置不同线程的参数
log
.
info
(
"多线程开始"
);
log
.
info
(
"00000000000000"
);
List
<
Date
[]>
dates
=
DateUtils
.
splitTimeInterval
(
financeCostVo
.
getStartDate
(),
financeCostVo
.
getEndDate
());
if
(
dates
.
size
()
==
0
)
{
return
pageInfo
;
}
if
(
dates
.
size
()
==
1
)
{
FinanceCostWq
qw
=
covertFinanceCostWq
(
financeCostVo
);
PageInfo
<
FinanceOrderDetail
>
orderDetailPageInfo
=
detailDao
.
selectBiFinanceCostList
(
qw
);
BeanUtils
.
copyProperties
(
orderDetailPageInfo
,
pageInfo
);
pageInfo
.
setList
(
orderDetailPageInfo
.
getList
().
stream
().
map
(
item
->
{
FinanceBiListDto
dto
=
new
FinanceBiListDto
();
BeanUtils
.
copyProperties
(
item
,
dto
);
dto
.
setActualCostSum
(
item
.
getSumActualCostSum
());
dto
.
setStandardCostSum
(
item
.
getSumStandardCostSum
());
dto
.
setShareAmountSum
(
item
.
getShareAmountSum
().
setScale
(
2
,
BigDecimal
.
ROUND_HALF_UP
));
dto
.
setActualCostGrossProfitSum
(
dto
.
getShareAmountSum
().
subtract
(
dto
.
getActualCostSum
()).
setScale
(
2
,
BigDecimal
.
ROUND_HALF_UP
));
dto
.
setStandardCostGrossProfitSum
(
dto
.
getShareAmountSum
().
subtract
(
dto
.
getStandardCostSum
()).
setScale
(
2
,
BigDecimal
.
ROUND_HALF_UP
));
dto
.
setUid
(
IdUtil
.
simpleUUID
());
return
dto
;
}).
collect
(
Collectors
.
toList
()));
return
pageInfo
;
}
if
(
dates
.
size
()
>
1
)
{
// 多线程查询
// 创建一个线程池
ExecutorService
executorService
=
Executors
.
newFixedThreadPool
(
5
);
ExecutorService
executorService
=
Executors
.
newFixedThreadPool
(
20
);
// 创建一个任务列表
List
<
Callable
<
PageInfo
<
FinanceOrderDetail
>>>
tasks
=
new
ArrayList
<>();
List
<
Date
[]>
dates
=
DateUtils
.
splitTimeInterval
(
financeCostVo
.
getStartDate
(),
financeCostVo
.
getEndDate
());
CountDownLatch
endLock
=
new
CountDownLatch
(
dates
.
size
());
// 假设我们有多个查询条件,每个条件对应一个任务
final
CountDownLatch
endLock
=
new
CountDownLatch
(
dates
.
size
());
// 假设我们有多个查询条件,每个条件对应一个任务
BlockingQueue
<
Future
<
PageInfo
<
FinanceOrderDetail
>>>
queue
=
new
LinkedBlockingQueue
<>();
PageInfo
<
FinanceOrderDetail
>
orderDetailPageInfo
=
new
PageInfo
<>();
long
total
=
0
;
int
pages
=
1
;
log
.
info
(
"1111111"
);
List
<
FinanceOrderDetail
>
aggregatedResult
=
new
ArrayList
<>();
try
{
for
(
int
i
=
0
;
i
<
dates
.
size
();
i
++)
{
...
...
@@ -83,7 +108,9 @@ public class FinanceOrderDetailServiceImpl extends ServiceImpl<FinanceOrderDetai
@Override
public
PageInfo
<
FinanceOrderDetail
>
call
()
throws
Exception
{
PageInfo
<
FinanceOrderDetail
>
detailPageInfo
=
detailDao
.
selectBiFinanceCostList
(
wq
);
log
.
info
(
"dddddddd"
);
endLock
.
countDown
();
log
.
info
(
"{} has finished the job!"
);
return
detailPageInfo
;
}
});
...
...
@@ -91,6 +118,9 @@ public class FinanceOrderDetailServiceImpl extends ServiceImpl<FinanceOrderDetai
}
endLock
.
await
();
log
.
info
(
"终于轮到我了1-"
+
queue
.
size
());
log
.
info
(
"终于轮到我了2-"
+
queue
.
size
());
// 汇聚结果
for
(
Future
<
PageInfo
<
FinanceOrderDetail
>>
future
:
queue
)
{
// 获取结果
...
...
@@ -100,18 +130,7 @@ public class FinanceOrderDetailServiceImpl extends ServiceImpl<FinanceOrderDetai
total
=
Math
.
max
(
total
,
financeOrderDetailPageInfo
.
getTotal
());
aggregatedResult
.
addAll
(
financeOrderDetailPageInfo
.
getList
());
}
}
catch
(
InterruptedException
|
ExecutionException
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
(),
e
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
(),
e
);
}
finally
{
// 关闭线程池
executorService
.
shutdown
();
}
PageInfo
<
FinanceBiListDto
>
pageInfo
=
new
PageInfo
<>();
BeanUtils
.
copyProperties
(
orderDetailPageInfo
,
pageInfo
);
pageInfo
.
setPages
(
pages
);
pageInfo
.
setTotal
(
total
);
...
...
@@ -139,37 +158,48 @@ public class FinanceOrderDetailServiceImpl extends ServiceImpl<FinanceOrderDetai
}
List
<
FinanceBiListDto
>
valueList
=
new
ArrayList
<>(
existMap
.
values
());
pageInfo
.
setList
(
valueList
);
// pageInfo.setList(aggregatedResult.stream().map(item -> {
// FinanceBiListDto dto = new FinanceBiListDto();
// BeanUtils.copyProperties(item, dto);
// dto.setActualCostSum(item.getSumActualCostSum());
// dto.setStandardCostSum(item.getSumStandardCostSum());
// dto.setShareAmountSum(item.getShareAmountSum().setScale(2, BigDecimal.ROUND_HALF_UP));
// dto.setActualCostGrossProfitSum(dto.getShareAmountSum().subtract(dto.getActualCostSum()).setScale(2, BigDecimal.ROUND_HALF_UP));
// dto.setStandardCostGrossProfitSum(dto.getShareAmountSum().subtract(dto.getStandardCostSum()).setScale(2, BigDecimal.ROUND_HALF_UP));
// dto.setUid(IdUtil.simpleUUID());
// return dto;
// }).collect(Collectors.toList()));
// 计算实际成本毛利 标准成本毛利
pageInfo
.
setList
(
valueList
.
stream
().
map
(
item
->
{
FinanceBiListDto
dto
=
new
FinanceBiListDto
();
BeanUtils
.
copyProperties
(
item
,
dto
);
dto
.
setShareAmountSum
(
item
.
getShareAmountSum
().
setScale
(
2
,
BigDecimal
.
ROUND_HALF_UP
));
dto
.
setActualCostGrossProfitSum
(
dto
.
getShareAmountSum
().
subtract
(
dto
.
getActualCostSum
()).
setScale
(
2
,
BigDecimal
.
ROUND_HALF_UP
));
dto
.
setStandardCostGrossProfitSum
(
dto
.
getShareAmountSum
().
subtract
(
dto
.
getStandardCostSum
()).
setScale
(
2
,
BigDecimal
.
ROUND_HALF_UP
));
dto
.
setUid
(
IdUtil
.
simpleUUID
());
return
dto
;
}).
collect
(
Collectors
.
toList
()));
log
.
info
(
"完成数据整合"
);
}
catch
(
InterruptedException
|
ExecutionException
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
(),
e
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
(),
e
);
}
finally
{
// endLock.countDown();
// 关闭线程池
executorService
.
shutdown
();
}
}
return
pageInfo
;
}
private
String
getKey
(
FinanceOrderDetail
item
,
FinanceCostVo
financeCostVo
)
{
//根据入参条件决定key
String
key
=
""
;
if
(
ObjectUtil
.
equals
(
Boolean
.
TRUE
,
financeCostVo
.
getZbjQdTypeAll
())
||
ObjectUtil
.
isNotEmpty
(
financeCostVo
.
getZbjQdType
()))
{
if
(
ObjectUtil
.
equals
(
Boolean
.
TRUE
,
financeCostVo
.
getZbjQdTypeAll
())
||
ObjectUtil
.
isNotEmpty
(
financeCostVo
.
getZbjQdType
()))
{
key
=
key
+
"#"
+
item
.
getZbjQdType
();
}
if
(
ObjectUtil
.
equals
(
Boolean
.
TRUE
,
financeCostVo
.
getFlavorAll
())
||
ObjectUtil
.
isNotEmpty
(
financeCostVo
.
getFlavor
()))
{
if
(
ObjectUtil
.
equals
(
Boolean
.
TRUE
,
financeCostVo
.
getFlavorAll
())
||
ObjectUtil
.
isNotEmpty
(
financeCostVo
.
getFlavor
()))
{
key
=
key
+
"#"
+
item
.
getFlavorErp
();
}
if
(
ObjectUtil
.
equals
(
Boolean
.
TRUE
,
financeCostVo
.
getSpecNameAll
())
||
ObjectUtil
.
isNotEmpty
(
financeCostVo
.
getSpecName
()))
{
if
(
ObjectUtil
.
equals
(
Boolean
.
TRUE
,
financeCostVo
.
getSpecNameAll
())
||
ObjectUtil
.
isNotEmpty
(
financeCostVo
.
getSpecName
()))
{
key
=
key
+
"#"
+
item
.
getSpecName
();
}
if
(
ObjectUtil
.
equals
(
Boolean
.
TRUE
,
financeCostVo
.
getSeriesAll
())
||
ObjectUtil
.
isNotEmpty
(
financeCostVo
.
getSeries
()))
{
if
(
ObjectUtil
.
equals
(
Boolean
.
TRUE
,
financeCostVo
.
getSeriesAll
())
||
ObjectUtil
.
isNotEmpty
(
financeCostVo
.
getSeries
()))
{
key
=
key
+
"#"
+
item
.
getSeries
();
}
if
(
ObjectUtil
.
isEmpty
(
key
))
{
...
...
@@ -266,10 +296,7 @@ public class FinanceOrderDetailServiceImpl extends ServiceImpl<FinanceOrderDetai
financeCostVo
.
setPageSize
(
1000000
);
PageInfo
<
FinanceOrderDetailListDto
>
financeBiListDtoPageInfo
=
this
.
selectBiFinanceCostDetailPage
(
financeCostVo
);
// easyExcel导出数据
String
fileNameOri
=
String
.
format
(
"王小卤成本核算%s-%s%s信息-%s.xlsx"
,
DateUtil
.
format
(
financeCostVo
.
getStartDate
(),
"yyyyMMdd"
),
DateUtil
.
format
(
financeCostVo
.
getEndDate
(),
"yyyyMMdd"
),
financeCostVo
.
getTypeName
(),
DateUtil
.
format
(
new
Date
(),
"MMdd"
));
String
fileNameOri
=
String
.
format
(
"王小卤成本核算%s-%s%s信息-%s.xlsx"
,
DateUtil
.
format
(
financeCostVo
.
getStartDate
(),
"yyyyMMdd"
),
DateUtil
.
format
(
financeCostVo
.
getEndDate
(),
"yyyyMMdd"
),
financeCostVo
.
getTypeName
(),
DateUtil
.
format
(
new
Date
(),
"MMdd"
));
// 文件名中文名需要转义
String
fileName
=
null
;
try
{
...
...
@@ -320,15 +347,10 @@ public class FinanceOrderDetailServiceImpl extends ServiceImpl<FinanceOrderDetai
//设置 水平居中
contentWriteCellStyle
.
setHorizontalAlignment
(
HorizontalAlignment
.
CENTER
);
HorizontalCellStyleStrategy
horizontalCellStyleStrategy
=
new
HorizontalCellStyleStrategy
(
headWriteCellStyle
,
contentWriteCellStyle
);
HorizontalCellStyleStrategy
horizontalCellStyleStrategy
=
new
HorizontalCellStyleStrategy
(
headWriteCellStyle
,
contentWriteCellStyle
);
Collection
<?>
dataList
=
financeBiListDtoPageInfo
.
getList
();
EasyExcel
.
write
(
response
.
getOutputStream
(),
FinanceExportOrderDetailListDto
.
class
)
.
autoCloseStream
(
Boolean
.
TRUE
)
.
excelType
(
ExcelTypeEnum
.
XLSX
)
.
registerWriteHandler
(
horizontalCellStyleStrategy
)
.
registerWriteHandler
(
new
LongestMatchColumnWidthStyleStrategy
())
//自动列宽策略
EasyExcel
.
write
(
response
.
getOutputStream
(),
FinanceExportOrderDetailListDto
.
class
).
autoCloseStream
(
Boolean
.
TRUE
).
excelType
(
ExcelTypeEnum
.
XLSX
).
registerWriteHandler
(
horizontalCellStyleStrategy
).
registerWriteHandler
(
new
LongestMatchColumnWidthStyleStrategy
())
//自动列宽策略
.
sheet
(
financeCostVo
.
getTypeName
())
//获取数据填充
.
doWrite
(
dataList
);
...
...
@@ -352,10 +374,7 @@ public class FinanceOrderDetailServiceImpl extends ServiceImpl<FinanceOrderDetai
PageInfo
<
FinanceBiListDto
>
financeBiListDtoPageInfo
=
this
.
selectBiFinanceCostList
(
financeCostVo
);
// easyExcel导出数据
String
fileNameOri
=
String
.
format
(
"王小卤成本核算%s-%s%s-%s.xlsx"
,
DateUtil
.
format
(
financeCostVo
.
getStartDate
(),
"yyyyMMdd"
),
DateUtil
.
format
(
financeCostVo
.
getEndDate
(),
"yyyyMMdd"
),
financeCostVo
.
getTypeName
(),
DateUtil
.
format
(
new
Date
(),
"MMdd"
));
String
fileNameOri
=
String
.
format
(
"王小卤成本核算%s-%s%s-%s.xlsx"
,
DateUtil
.
format
(
financeCostVo
.
getStartDate
(),
"yyyyMMdd"
),
DateUtil
.
format
(
financeCostVo
.
getEndDate
(),
"yyyyMMdd"
),
financeCostVo
.
getTypeName
(),
DateUtil
.
format
(
new
Date
(),
"MMdd"
));
// 文件名中文名需要转义
String
fileName
=
null
;
try
{
...
...
@@ -405,15 +424,10 @@ public class FinanceOrderDetailServiceImpl extends ServiceImpl<FinanceOrderDetai
contentWriteCellStyle
.
setWriteFont
(
contentWriteFont
);
//设置 水平居中
contentWriteCellStyle
.
setHorizontalAlignment
(
HorizontalAlignment
.
CENTER
);
HorizontalCellStyleStrategy
horizontalCellStyleStrategy
=
new
HorizontalCellStyleStrategy
(
headWriteCellStyle
,
contentWriteCellStyle
);
HorizontalCellStyleStrategy
horizontalCellStyleStrategy
=
new
HorizontalCellStyleStrategy
(
headWriteCellStyle
,
contentWriteCellStyle
);
Collection
<?>
dataList
=
financeBiListDtoPageInfo
.
getList
();
EasyExcel
.
write
(
response
.
getOutputStream
(),
FinanceExportBiListDto
.
class
)
.
autoCloseStream
(
Boolean
.
TRUE
)
.
excelType
(
ExcelTypeEnum
.
XLSX
)
.
registerWriteHandler
(
horizontalCellStyleStrategy
)
.
registerWriteHandler
(
new
LongestMatchColumnWidthStyleStrategy
())
//自动列宽策略
EasyExcel
.
write
(
response
.
getOutputStream
(),
FinanceExportBiListDto
.
class
).
autoCloseStream
(
Boolean
.
TRUE
).
excelType
(
ExcelTypeEnum
.
XLSX
).
registerWriteHandler
(
horizontalCellStyleStrategy
).
registerWriteHandler
(
new
LongestMatchColumnWidthStyleStrategy
())
//自动列宽策略
.
sheet
(
financeCostVo
.
getTypeName
())
//获取数据填充
.
doWrite
(
dataList
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论