提交 33f9deec authored 作者: 吕本才's avatar 吕本才

1、修改直播间分类上传接口

上级 6f0e2781
...@@ -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<FinanceBaseZbjTypeImportDto> {
// 存储解析后的数据 // 存储解析后的数据
private List<FinanceBaseZbjType> dataList = new ArrayList<>(); private List<FinanceBaseZbjTypeImportDto> dataList = new ArrayList<>();
@Override @Override
public void invoke(FinanceBaseZbjType data, AnalysisContext context) { public void invoke(FinanceBaseZbjTypeImportDto 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<FinanceBaseZbjTypeImportDto> getDataList() {
return dataList; return dataList;
} }
} }
...@@ -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);
} }
} }
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;
}
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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论