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
33f9deec
提交
33f9deec
authored
2月 07, 2025
作者:
吕本才
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1、修改直播间分类上传接口
上级
6f0e2781
显示空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
79 行增加
和
29 行删除
+79
-29
FinanceBaseZbjTypeListener.java
...m/link/bi/config/listener/FinanceBaseZbjTypeListener.java
+5
-5
FinanceBaseZbjTypeController.java
...ink/bi/controller/query/FinanceBaseZbjTypeController.java
+2
-2
FinanceBaseZbjTypeImportDto.java
...om/link/bi/pojo/response/FinanceBaseZbjTypeImportDto.java
+19
-0
FinanceBaseZbjTypeServiceImpl.java
...m/link/bi/service/impl/FinanceBaseZbjTypeServiceImpl.java
+53
-22
没有找到文件。
src/main/java/com/link/bi/config/listener/FinanceBaseZbjTypeListener.java
浏览文件 @
33f9deec
...
@@ -2,7 +2,7 @@ package com.link.bi.config.listener;
...
@@ -2,7 +2,7 @@ package com.link.bi.config.listener;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.link.bi.
domain.entity.FinanceBaseZbjType
;
import
com.link.bi.
pojo.response.FinanceBaseZbjTypeImportDto
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
...
@@ -16,13 +16,13 @@ import java.util.List;
...
@@ -16,13 +16,13 @@ import java.util.List;
*/
*/
@Data
@Data
@Slf4j
@Slf4j
public
class
FinanceBaseZbjTypeListener
extends
AnalysisEventListener
<
FinanceBaseZbjType
>
{
public
class
FinanceBaseZbjTypeListener
extends
AnalysisEventListener
<
FinanceBaseZbjType
ImportDto
>
{
// 存储解析后的数据
// 存储解析后的数据
private
List
<
FinanceBaseZbjType
>
dataList
=
new
ArrayList
<>();
private
List
<
FinanceBaseZbjType
ImportDto
>
dataList
=
new
ArrayList
<>();
@Override
@Override
public
void
invoke
(
FinanceBaseZbjType
data
,
AnalysisContext
context
)
{
public
void
invoke
(
FinanceBaseZbjType
ImportDto
data
,
AnalysisContext
context
)
{
// 每解析一行数据就会调用该方法
// 每解析一行数据就会调用该方法
dataList
.
add
(
data
);
dataList
.
add
(
data
);
}
}
...
@@ -32,7 +32,7 @@ public class FinanceBaseZbjTypeListener extends AnalysisEventListener<FinanceBas
...
@@ -32,7 +32,7 @@ public class FinanceBaseZbjTypeListener extends AnalysisEventListener<FinanceBas
// 解析完所有数据后调用该方法
// 解析完所有数据后调用该方法
}
}
public
List
<
FinanceBaseZbjType
>
getDataList
()
{
public
List
<
FinanceBaseZbjType
ImportDto
>
getDataList
()
{
return
dataList
;
return
dataList
;
}
}
}
}
src/main/java/com/link/bi/controller/query/FinanceBaseZbjTypeController.java
浏览文件 @
33f9deec
...
@@ -36,8 +36,8 @@ public class FinanceBaseZbjTypeController extends BaseController {
...
@@ -36,8 +36,8 @@ public class FinanceBaseZbjTypeController extends BaseController {
@RequiresPermissions
(
"bi:livecate:list"
)
@RequiresPermissions
(
"bi:livecate:list"
)
@PostMapping
(
"/import"
)
@PostMapping
(
"/import"
)
public
void
importData
(
@RequestParam
(
"file"
)
MultipartFile
file
)
{
public
String
importData
(
@RequestParam
(
"file"
)
MultipartFile
file
)
{
baseZbjTypeService
.
importData
(
file
);
return
baseZbjTypeService
.
importData
(
file
);
}
}
}
}
src/main/java/com/link/bi/pojo/response/FinanceBaseZbjTypeImportDto.java
0 → 100644
浏览文件 @
33f9deec
package
com
.
link
.
bi
.
pojo
.
response
;
import
com.alibaba.excel.annotation.ExcelProperty
;
import
lombok.Data
;
/**
* 财务订单明细聚合查询DTO
* @date : 2025-01-15 15:30:05
* @author : lvbencai
*/
@Data
public
class
FinanceBaseZbjTypeImportDto
{
// 分销商名称
@ExcelProperty
(
"分销商名称"
)
private
String
fenxiaoName
;
// 直播间渠道类型 有分销商id,不是以上几类的,统一为达人 没有分销商id的,默认为商城
@ExcelProperty
(
"渠道整理"
)
private
String
zbjQdType
;
}
src/main/java/com/link/bi/service/impl/FinanceBaseZbjTypeServiceImpl.java
浏览文件 @
33f9deec
package
com
.
link
.
bi
.
service
.
impl
;
package
com
.
link
.
bi
.
service
.
impl
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.EasyExcel
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
...
@@ -15,6 +15,7 @@ import com.link.bi.domain.entity.FinanceBaseZbjType;
...
@@ -15,6 +15,7 @@ import com.link.bi.domain.entity.FinanceBaseZbjType;
import
com.link.bi.domain.mapper.FinanceBaseZbjTypeMapper
;
import
com.link.bi.domain.mapper.FinanceBaseZbjTypeMapper
;
import
com.link.bi.pojo.request.FinanceBaseZbjTypeListVo
;
import
com.link.bi.pojo.request.FinanceBaseZbjTypeListVo
;
import
com.link.bi.pojo.request.FinanceSelectCommonVo
;
import
com.link.bi.pojo.request.FinanceSelectCommonVo
;
import
com.link.bi.pojo.response.FinanceBaseZbjTypeImportDto
;
import
com.link.bi.pojo.response.FinanceZbjTypeListDto
;
import
com.link.bi.pojo.response.FinanceZbjTypeListDto
;
import
com.link.bi.service.FinanceBaseZbjTypeService
;
import
com.link.bi.service.FinanceBaseZbjTypeService
;
import
com.sfa.common.core.utils.bean.BeanUtils
;
import
com.sfa.common.core.utils.bean.BeanUtils
;
...
@@ -25,10 +26,7 @@ import org.springframework.web.multipart.MultipartFile;
...
@@ -25,10 +26,7 @@ import org.springframework.web.multipart.MultipartFile;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.InputStream
;
import
java.util.ArrayList
;
import
java.util.*
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
...
@@ -137,29 +135,39 @@ public class FinanceBaseZbjTypeServiceImpl extends ServiceImpl<FinanceBaseZbjTyp
...
@@ -137,29 +135,39 @@ public class FinanceBaseZbjTypeServiceImpl extends ServiceImpl<FinanceBaseZbjTyp
}
}
try
(
InputStream
inputStream
=
file
.
getInputStream
())
{
try
(
InputStream
inputStream
=
file
.
getInputStream
())
{
FinanceBaseZbjTypeListener
listener
=
new
FinanceBaseZbjTypeListener
();
FinanceBaseZbjTypeListener
listener
=
new
FinanceBaseZbjTypeListener
();
EasyExcel
.
read
(
inputStream
,
FinanceBaseZbjType
.
class
,
listener
).
sheet
().
doRead
();
EasyExcel
.
read
(
inputStream
,
FinanceBaseZbjTypeImportDto
.
class
,
listener
).
sheet
().
doRead
();
List
<
FinanceBaseZbjType
>
dataList
=
listener
.
getDataList
();
List
<
FinanceBaseZbjTypeImportDto
>
importData
=
listener
.
getDataList
();
// 3. 删除数据库中不存在于Excel的数据
// 1. 解析Excel文件,将数据转换为FinanceBaseZbjType对象
List
<
FinanceBaseZbjType
>
dataList
=
importData
.
stream
().
map
(
item
->
{
FinanceBaseZbjType
zbjType
=
new
FinanceBaseZbjType
();
BeanUtils
.
copyProperties
(
item
,
zbjType
);
zbjType
.
setBatchNo
(
DateUtil
.
format
(
new
Date
(),
"yyyyMMddHHmmss"
));
return
zbjType
;
}).
collect
(
Collectors
.
toList
());
// 2. 删除数据库中不存在于Excel的数据
deleteAbsentProducts
(
dataList
);
deleteAbsentProducts
(
dataList
);
// 4. 批量保存或更新数据
// 4. 批量保存或更新数据
batchUpsertProducts
(
dataList
);
batchUpsertProducts
(
dataList
);
return
"文件解析并更新数据成功。"
;
return
"文件解析并更新数据成功。"
;
}
catch
(
IOException
e
)
{
}
catch
(
IOException
e
)
{
e
.
printStackTrace
(
);
log
.
error
(
e
.
getMessage
(),
e
);
return
"文件解析失败,请检查文件格式或内容。"
;
return
"文件解析失败,请检查文件格式或内容。"
;
}
}
}
}
public
void
deleteAbsentProducts
(
List
<
FinanceBaseZbjType
>
dataList
)
{
public
void
deleteAbsentProducts
(
List
<
FinanceBaseZbjType
>
dataList
)
{
// 获取 Excel 中所有数据的 fbztId
Set
excelQdTypes
=
dataList
.
stream
()
List
<
Long
>
excelIds
=
dataList
.
stream
().
map
(
FinanceBaseZbjType:
:
getFbztId
).
collect
(
Collectors
.
toList
());
.
map
(
FinanceBaseZbjType:
:
getZbjQdType
)
.
collect
(
Collectors
.
toSet
())
;
// 查询数据库中所有数据
// 查询数据库中所有数据
List
<
FinanceBaseZbjType
>
allDbRecords
=
this
.
list
();
List
<
FinanceBaseZbjType
>
allDbRecords
=
this
.
list
();
// 找出数据库中存在但 Excel 中不存在的记录的 fbztId
// 找出数据库中存在但 Excel 中不存在的记录的 fbztId
List
<
Long
>
idsToDelete
=
new
ArrayList
<>();
List
<
Long
>
idsToDelete
=
new
ArrayList
<>();
for
(
FinanceBaseZbjType
dbRecord
:
allDbRecords
)
{
for
(
FinanceBaseZbjType
dbRecord
:
allDbRecords
)
{
if
(!
excelIds
.
contains
(
dbRecord
.
getFbztId
()))
{
// 判断 是否匹配ZbjQdType
if
(!
excelQdTypes
.
contains
(
dbRecord
.
getZbjQdType
()))
{
idsToDelete
.
add
(
dbRecord
.
getFbztId
());
idsToDelete
.
add
(
dbRecord
.
getFbztId
());
}
}
}
}
...
@@ -170,20 +178,43 @@ public class FinanceBaseZbjTypeServiceImpl extends ServiceImpl<FinanceBaseZbjTyp
...
@@ -170,20 +178,43 @@ public class FinanceBaseZbjTypeServiceImpl extends ServiceImpl<FinanceBaseZbjTyp
}
}
public
void
batchUpsertProducts
(
List
<
FinanceBaseZbjType
>
dataList
)
{
public
void
batchUpsertProducts
(
List
<
FinanceBaseZbjType
>
dataList
)
{
for
(
FinanceBaseZbjType
data
:
dataList
)
{
// 查询数据库中所有数据
if
(
data
.
getFbztId
()
!=
null
)
{
List
<
FinanceBaseZbjType
>
allDbRecords
=
this
.
list
();
// 如果 fbztId 不为空,尝试更新
// FbztId匹配到的更新,否则进行保存
UpdateWrapper
<
FinanceBaseZbjType
>
updateWrapper
=
new
UpdateWrapper
<>();
List
<
FinanceBaseZbjType
>
recordsToSave
=
new
ArrayList
<>();
updateWrapper
.
eq
(
"fbzt_id"
,
data
.
getFbztId
());
List
<
FinanceBaseZbjType
>
recordsToUpdate
=
new
ArrayList
<>();
this
.
update
(
data
,
updateWrapper
);
dataList
.
forEach
(
data
->
{
}
else
{
FinanceBaseZbjType
existingRecord
=
allDbRecords
.
stream
()
// 如果 fbztId 为空,进行保存
.
filter
(
record
->
checkRecord
(
record
,
data
)
)
this
.
save
(
data
);
.
findFirst
()
.
orElse
(
null
);
if
(
existingRecord
!=
null
)
{
// 更新
BeanUtils
.
copyProperties
(
data
,
existingRecord
);
recordsToUpdate
.
add
(
existingRecord
);
}
else
{
// 保存
recordsToSave
.
add
(
data
);
}
}
});
// 批量保存
if
(!
recordsToSave
.
isEmpty
())
{
this
.
saveBatch
(
recordsToSave
);
}
// 批量更新
if
(!
recordsToUpdate
.
isEmpty
())
{
this
.
updateBatchById
(
recordsToUpdate
);
}
}
}
}
private
boolean
checkRecord
(
FinanceBaseZbjType
record
,
FinanceBaseZbjType
data
)
{
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getFenxiaoName
())){
return
record
.
getFenxiaoName
().
equals
(
data
.
getFenxiaoName
())
&&
record
.
getZbjQdType
().
equals
(
data
.
getZbjQdType
());
}
else
{
return
ObjectUtil
.
isEmpty
(
data
.
getFenxiaoName
())
&&
record
.
getZbjQdType
().
equals
(
data
.
getZbjQdType
());
}
}
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论