提交 f56fb9ae 作者: 贺晋豫

人物数据 导入接口修改、新增导出接口

上级 4439987b
package com.zzsn.leaderbase.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zzsn.leaderbase.entity.CharacterBasicInfo;
import com.zzsn.leaderbase.service.CharacterBasicInfoService;
import com.zzsn.leaderbase.service.IGeneratorIdService;
import com.zzsn.leaderbase.util.ExcelUtil;
import com.zzsn.leaderbase.util.SortUtil;
import com.zzsn.leaderbase.vo.BasicInfoListVo;
import com.zzsn.leaderbase.vo.Result;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.nio.file.StandardCopyOption;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@RestController
......@@ -37,8 +32,11 @@ public class CharacterBasicInfoController {
CharacterBasicInfoService characterBasicInfoService;
@Autowired
IGeneratorIdService generatorIdService;
//category 分类类型(1-领导人、2-专家、3-企业高管) 末尾数字对应导入导出数据集类别 例:importFieldMap2代表专家导入导出的字段map集合
private static Map<String, String> importFieldMap1;
private static Map<String, String> importFieldMap2;
private static Map<String, String> importFieldMap3;
private static Map<String, String> importFieldMap;
/**
* 资讯抽取人物信息分页查询
* 人物审核列表
......@@ -174,7 +172,7 @@ public class CharacterBasicInfoController {
//类别过滤为专家
basicInfoListVo.setCategory("2");
basicInfoListVo.setColumn(SortUtil.humpToLine(basicInfoListVo.getColumn()));
List<CharacterBasicInfo> list= characterBasicInfoService.getAllList(basicInfoListVo);
List<CharacterBasicInfo> list = characterBasicInfoService.getAllList(basicInfoListVo);
return Result.OK(list);
}
......@@ -194,168 +192,143 @@ public class CharacterBasicInfoController {
IPage page = characterBasicInfoService.getList(basicInfoListVo);
return Result.OK(page);
}
@GetMapping("/importExcel")
public void importExcel(String[] args) {
//本地文件路径
String filePath = "E:\\数能软件\\克虏宝\\人物服务\\专家导入数据20250115.xlsx";
addSummaryLocalExcel(filePath,"2");
}
public void addSummaryLocalExcel(String filePath, String category) {
List<String> sheetNameList = new ArrayList<>();
Workbook workbook = null;
InputStream in = null;
try {
// 获取输入流
in = Files.newInputStream(Paths.get(filePath));
// 判断excel版本
if (ExcelUtil.judegExcelEdition(filePath)) {
workbook = new XSSFWorkbook(in);
} else {
workbook = new HSSFWorkbook(in);
}
Iterator<Sheet> it = workbook.sheetIterator();
while (it.hasNext()) {
Sheet sheetTmp = it.next();
String sheetName = sheetTmp.getSheetName();
sheetNameList.add(sheetName);
@PostMapping("/importExcel")
public Result<?> importExcel(@RequestParam(value = "file", required = false) MultipartFile file, @RequestParam String category) {
if (file.isEmpty()) {
return Result.error("文件为空");
}
File tempFile = null;
// 获取文件的二进制数据
try (InputStream inputStream = file.getInputStream()) {
tempFile = new File(file.getOriginalFilename());
Files.copy(inputStream, Paths.get(tempFile.getAbsolutePath()), StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
throw new RuntimeException(e);
}
for (String sheetName : sheetNameList) {
Sheet sheet = workbook.getSheet(sheetName);
//获取标题行
Row titleRow = sheet.getRow(0);
List<CharacterBasicInfo> list = new ArrayList<>();
for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) {
// 循环获取工作表的每一行
Row sheetRow = sheet.getRow(i);
if (sheetRow == null) {
continue;
//category 分类类型(1-领导人、2-专家、3-企业高管)
// 根据 category 选择对应的 importFieldMap
Map<String, String> importFieldMap = getImportFieldMap(category);
String result = characterBasicInfoService.importExcel(tempFile.getAbsolutePath(), category, importFieldMap);
return Result.OK(result);
}
Map<String, Object> beanMap = new HashMap<>();
for (Cell cell : titleRow) {
String titleName = cell.getStringCellValue();
if(importFieldMap.containsKey(titleName)){
@PostMapping("/exportExcel")
public ResponseEntity<byte[]> exportExcel(@RequestBody BasicInfoListVo basicInfoListVo,@RequestParam String category) {
basicInfoListVo.setCategory(category);
basicInfoListVo.setColumn(SortUtil.humpToLine(basicInfoListVo.getColumn()));
List<CharacterBasicInfo> list = characterBasicInfoService.getAllList(basicInfoListVo);
Map<String, String> importFieldMap = getImportFieldMap(category);
ResponseEntity<byte[]> responseEntity;
try {
String stringCellValue = sheetRow.getCell(cell.getColumnIndex()).getStringCellValue();
if(StringUtils.isNotEmpty(stringCellValue)){
beanMap.put(importFieldMap.get(titleName), stringCellValue);
}
}catch (Exception e){
log.debug("数据导入excel解析{}行{}字段为空",cell.getColumnIndex(),titleName);
}
}
}
System.out.println(beanMap);
list.add(BeanUtil.mapToBean(beanMap, CharacterBasicInfo.class, true,CopyOptions.create().setIgnoreError(true)));
}
//需要新增的数据列表
List<CharacterBasicInfo> saveList = new ArrayList<>();
//需要更新的数据列表
List<CharacterBasicInfo> updateList = new ArrayList<>();
for (CharacterBasicInfo basicInfo : list) {
if(basicInfo == null || StringUtils.isEmpty(basicInfo.getName()) || StringUtils.isEmpty(basicInfo.getDepartment()) || StringUtils.isEmpty(basicInfo.getTypeId())){
log.info("数据为空,跳过");
continue;
}
basicInfo.setCategory(category);
if(StringUtils.isNotEmpty(basicInfo.getBirthday())){
basicInfo.setBirthday(basicInfo.getBirthday().replaceAll("[./]","-"));
}
if(StringUtils.isNotEmpty(basicInfo.getTechnicalDate())){
basicInfo.setTechnicalDate(basicInfo.getTechnicalDate().replaceAll("[./]","-"));
}
if(StringUtils.isNotEmpty(basicInfo.getWorkDate())){
basicInfo.setWorkDate(basicInfo.getWorkDate().replaceAll("[./]","-"));
}
//检查是否已有数据
CharacterBasicInfo oldBasicInfo = null;
if(StringUtils.isNotEmpty(basicInfo.getUid())){
oldBasicInfo = characterBasicInfoService.getBasicInfoByUid(basicInfo.getUid());
}else{
oldBasicInfo = characterBasicInfoService.getByNameAndByDepartment(category, basicInfo.getTagId(), basicInfo.getName(), basicInfo.getDepartment());
}
if(oldBasicInfo != null){
//合并两个对象
oldBasicInfo.setSex(basicInfo.getSex());
oldBasicInfo.setBirthday(basicInfo.getBirthday());
oldBasicInfo.setNativePlace(basicInfo.getNativePlace());
oldBasicInfo.setSchool(basicInfo.getSchool());
oldBasicInfo.setSchoolSpeciality(basicInfo.getSchoolSpeciality());
oldBasicInfo.setEducation(basicInfo.getEducation());
oldBasicInfo.setDepart(basicInfo.getDepart());
oldBasicInfo.setDuty(basicInfo.getDuty());
oldBasicInfo.setTakeOfficeTime(basicInfo.getTakeOfficeTime());
oldBasicInfo.setTakeOfficeTimeEnd(basicInfo.getTakeOfficeTimeEnd());
oldBasicInfo.setExpertType(basicInfo.getExpertType());
oldBasicInfo.setResearchField(basicInfo.getResearchField());
oldBasicInfo.setSpeciality(basicInfo.getSpeciality());
oldBasicInfo.setTalentPlanning(basicInfo.getTalentPlanning());
oldBasicInfo.setTechnicalTitles(basicInfo.getTechnicalTitles());
oldBasicInfo.setTechnicalDate(basicInfo.getTechnicalDate());
oldBasicInfo.setWorkDate(basicInfo.getWorkDate());
oldBasicInfo.setUpdateTime(new Date());
updateList.add(oldBasicInfo);
}else {
String id = Long.toString(generatorIdService.getOrderId());
basicInfo.setId(id);
basicInfo.setCreateTime(new Date());
String uid = generatorIdService.getIdNo();
basicInfo.setUid(uid);
basicInfo.setMainEntry(1);
saveList.add(basicInfo);
}
}
if(!saveList.isEmpty()){
characterBasicInfoService.saveBatch(saveList);
log.info("新增{}条数据",saveList.size());
}
if(!updateList.isEmpty()){
characterBasicInfoService.updateBatchById(updateList);
log.info("更新{}条数据",updateList.size());
responseEntity = characterBasicInfoService.exportExcel(list,importFieldMap);
} catch (IOException e) {
throw new RuntimeException(e);
}
return responseEntity;
}
} catch (Exception e) {
log.info("导入专家信息异常:{}",e.getMessage(), e);
} finally {
@GetMapping("/exportExcelByIds")
public ResponseEntity<byte[]> exportExcelByIds(@RequestParam String ids,@RequestParam String category) {
Map<String, String> importFieldMap = getImportFieldMap(category);
ResponseEntity<byte[]> responseEntity;
try {
if (in != null) {
in.close();
}
responseEntity = characterBasicInfoService.exportExcelByIds(ids,importFieldMap);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
try {
if (workbook != null) {
workbook.close();
return responseEntity;
}
} catch (IOException e) {
e.printStackTrace();
private Map<String, String> getImportFieldMap(String category) {
Map<String, String> importFieldMap;
switch (category) {
case "1":
importFieldMap = importFieldMap1;
break;
case "2":
importFieldMap = importFieldMap2;
break;
case "3":
importFieldMap = importFieldMap3;
break;
default:
throw new IllegalArgumentException("无效的 category 值: " + category);
}
return importFieldMap;
}
static {
importFieldMap1 = new LinkedHashMap<>();
importFieldMap1.put("人物id", "uid");
importFieldMap1.put("姓名", "name");
importFieldMap1.put("性别", "sex");
importFieldMap1.put("出生年月", "birthday");
importFieldMap1.put("籍贯", "nativePlace");
importFieldMap1.put("毕业院校", "school");
importFieldMap1.put("毕业专业", "schoolSpeciality");
importFieldMap1.put("学历", "education");
importFieldMap1.put("单位名称", "department");
importFieldMap1.put("所在部门", "depart");
importFieldMap1.put("职务", "duty");
importFieldMap1.put("任职开始时间", "takeOfficeTime");
importFieldMap1.put("任职结束时间", "takeOfficeTimeEnd");
importFieldMap1.put("顶尖专家/领军专家", "expertType");
importFieldMap1.put("研究领域", "researchField");
importFieldMap1.put("专业方向", "speciality");
importFieldMap1.put("已入选的人才计划", "talentPlanning");
importFieldMap1.put("专业技术职称", "technicalTitles");
importFieldMap1.put("专业技术职称取得时间", "technicalDate");
importFieldMap1.put("参加工作时间", "workDate");
importFieldMap1.put("分类", "typeId");
}
static {
importFieldMap2 = new LinkedHashMap<>();
importFieldMap2.put("人物id", "uid");
importFieldMap2.put("姓名", "name");
importFieldMap2.put("性别", "sex");
importFieldMap2.put("出生年月", "birthday");
importFieldMap2.put("籍贯", "nativePlace");
importFieldMap2.put("毕业院校", "school");
importFieldMap2.put("毕业专业", "schoolSpeciality");
importFieldMap2.put("学历", "education");
importFieldMap2.put("单位名称", "department");
importFieldMap2.put("所在部门", "depart");
importFieldMap2.put("职务", "duty");
importFieldMap2.put("任职开始时间", "takeOfficeTime");
importFieldMap2.put("任职结束时间", "takeOfficeTimeEnd");
importFieldMap2.put("顶尖专家/领军专家", "expertType");
importFieldMap2.put("研究领域", "researchField");
importFieldMap2.put("专业方向", "speciality");
importFieldMap2.put("已入选的人才计划", "talentPlanning");
importFieldMap2.put("专业技术职称", "technicalTitles");
importFieldMap2.put("专业技术职称取得时间", "technicalDate");
importFieldMap2.put("参加工作时间", "workDate");
importFieldMap2.put("分类", "typeId");
}
static {
importFieldMap = new HashMap<>();
importFieldMap.put("人物id", "uid");
importFieldMap.put("姓名", "name");
importFieldMap.put("性别", "sex");
importFieldMap.put("出生年月", "birthday");
importFieldMap.put("籍贯", "nativePlace");
importFieldMap.put("毕业院校", "school");
importFieldMap.put("毕业专业", "schoolSpeciality");
importFieldMap.put("学历", "education");
importFieldMap.put("单位名称", "department");
importFieldMap.put("所在部门", "depart");
importFieldMap.put("职务", "duty");
importFieldMap.put("任职开始时间", "takeOfficeTime");
importFieldMap.put("任职结束时间", "takeOfficeTimeEnd");
importFieldMap.put("顶尖专家/领军专家", "expertType");
importFieldMap.put("研究领域", "researchField");
importFieldMap.put("专业方向", "speciality");
importFieldMap.put("已入选的人才计划", "talentPlanning");
importFieldMap.put("专业技术职称", "technicalTitles");
importFieldMap.put("专业技术职称取得时间", "technicalDate");
importFieldMap.put("参加工作时间", "workDate");
importFieldMap.put("分类", "typeId");
importFieldMap3 = new LinkedHashMap<>();
importFieldMap3.put("人物id", "uid");
importFieldMap3.put("姓名", "name");
importFieldMap3.put("性别", "sex");
importFieldMap3.put("出生年月", "birthday");
importFieldMap3.put("籍贯", "nativePlace");
importFieldMap3.put("毕业专业", "schoolSpeciality");
importFieldMap3.put("学历", "education");
importFieldMap3.put("单位名称", "department");
importFieldMap3.put("所在部门", "depart");
importFieldMap3.put("职务", "duty");
importFieldMap3.put("任职开始时间", "takeOfficeTime");
importFieldMap3.put("任职结束时间", "takeOfficeTimeEnd");
importFieldMap3.put("顶尖专家/领军专家", "expertType");
importFieldMap3.put("研究领域", "researchField");
importFieldMap3.put("已入选的人才计划", "talentPlanning");
importFieldMap3.put("专业技术职称", "technicalTitles");
importFieldMap3.put("专业技术职称取得时间", "technicalDate");
importFieldMap3.put("参加工作时间", "workDate");
importFieldMap3.put("分类", "typeId");
}
}
......@@ -6,7 +6,9 @@ import com.zzsn.leaderbase.entity.CharacterBasicInfo;
import com.zzsn.leaderbase.vo.BasicInfoListVo;
import com.zzsn.leaderbase.vo.CharacterVo;
import com.zzsn.leaderbase.vo.Result;
import org.springframework.http.ResponseEntity;
import java.io.IOException;
import java.util.List;
import java.util.Map;
......@@ -59,4 +61,10 @@ public interface CharacterBasicInfoService extends IService<CharacterBasicInfo>
CharacterBasicInfo getBasicInfoByUid(String uid);
CharacterBasicInfo getByNameAndByDepartment(String category, String typeId, String name, String department);
String importExcel(String absolutePath, String category, Map<String, String> importFieldMap);
ResponseEntity<byte[]> exportExcel(List<CharacterBasicInfo> list, Map<String, String> importFieldMap) throws IOException;
ResponseEntity<byte[]> exportExcelByIds(String ids, Map<String, String> importFieldMap) throws IOException;
}
package com.zzsn.leaderbase.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
......@@ -11,13 +13,30 @@ import com.zzsn.leaderbase.mapper.CharacterBasicInfoMapper;
import com.zzsn.leaderbase.service.CharacterBasicInfoService;
import com.zzsn.leaderbase.service.CharacterTagService;
import com.zzsn.leaderbase.service.IGeneratorIdService;
import com.zzsn.leaderbase.util.ExcelUtil;
import com.zzsn.leaderbase.vo.BasicInfoListVo;
import com.zzsn.leaderbase.vo.CharacterVo;
import com.zzsn.leaderbase.vo.Result;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
......@@ -26,6 +45,7 @@ import java.util.stream.Collectors;
* @Date: 2024/2/29 10:35
* @Content: 人物基本信息
*/
@Slf4j
@Service
public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInfoMapper, CharacterBasicInfo> implements CharacterBasicInfoService {
......@@ -270,4 +290,231 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf
}
return null;
}
@Override
public String importExcel(String filePath, String category, Map<String, String> importFieldMap) {
List<String> sheetNameList = new ArrayList<>();
Workbook workbook = null;
InputStream in = null;
String result = "";
try {
// 获取输入流
in = Files.newInputStream(Paths.get(filePath));
// 判断excel版本
if (ExcelUtil.judegExcelEdition(filePath)) {
workbook = new XSSFWorkbook(in);
} else {
workbook = new HSSFWorkbook(in);
}
Iterator<Sheet> it = workbook.sheetIterator();
while (it.hasNext()) {
Sheet sheetTmp = it.next();
String sheetName = sheetTmp.getSheetName();
sheetNameList.add(sheetName);
}
for (String sheetName : sheetNameList) {
Sheet sheet = workbook.getSheet(sheetName);
//获取标题行
Row titleRow = sheet.getRow(0);
List<CharacterBasicInfo> list = new ArrayList<>();
for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) {
// 循环获取工作表的每一行
Row sheetRow = sheet.getRow(i);
if (sheetRow == null) {
continue;
}
Map<String, Object> beanMap = new HashMap<>();
for (Cell cell : titleRow) {
String titleName = cell.getStringCellValue();
if (importFieldMap.containsKey(titleName)) {
try {
String stringCellValue = sheetRow.getCell(cell.getColumnIndex()).getStringCellValue();
if (StringUtils.isNotEmpty(stringCellValue)) {
beanMap.put(importFieldMap.get(titleName), stringCellValue);
}
} catch (Exception e) {
log.debug("数据导入excel解析{}行{}字段为空", cell.getColumnIndex(), titleName);
}
}
}
System.out.println(beanMap);
list.add(BeanUtil.mapToBean(beanMap, CharacterBasicInfo.class, true, CopyOptions.create().setIgnoreError(true)));
}
//需要新增的数据列表
List<CharacterBasicInfo> saveList = new ArrayList<>();
//需要更新的数据列表
List<CharacterBasicInfo> updateList = new ArrayList<>();
for (CharacterBasicInfo basicInfo : list) {
if (basicInfo == null || StringUtils.isEmpty(basicInfo.getName()) || StringUtils.isEmpty(basicInfo.getDepartment()) || StringUtils.isEmpty(basicInfo.getTypeId())) {
log.info("数据为空,跳过");
continue;
}
basicInfo.setCategory(category);
if (StringUtils.isNotEmpty(basicInfo.getBirthday())) {
basicInfo.setBirthday(basicInfo.getBirthday().replaceAll("[./]", "-"));
}
if (StringUtils.isNotEmpty(basicInfo.getTechnicalDate())) {
basicInfo.setTechnicalDate(basicInfo.getTechnicalDate().replaceAll("[./]", "-"));
}
if (StringUtils.isNotEmpty(basicInfo.getWorkDate())) {
basicInfo.setWorkDate(basicInfo.getWorkDate().replaceAll("[./]", "-"));
}
//检查是否已有数据
CharacterBasicInfo oldBasicInfo = null;
if (StringUtils.isNotEmpty(basicInfo.getUid())) {
oldBasicInfo = getBasicInfoByUid(basicInfo.getUid());
} else {
oldBasicInfo = getByNameAndByDepartment(category, basicInfo.getTypeId(), basicInfo.getName(), basicInfo.getDepartment());
}
if (oldBasicInfo != null) {
//合并两个对象
oldBasicInfo.setSex(basicInfo.getSex());
oldBasicInfo.setBirthday(basicInfo.getBirthday());
oldBasicInfo.setNativePlace(basicInfo.getNativePlace());
oldBasicInfo.setSchool(basicInfo.getSchool());
oldBasicInfo.setSchoolSpeciality(basicInfo.getSchoolSpeciality());
oldBasicInfo.setEducation(basicInfo.getEducation());
oldBasicInfo.setDepart(basicInfo.getDepart());
oldBasicInfo.setDuty(basicInfo.getDuty());
oldBasicInfo.setTakeOfficeTime(basicInfo.getTakeOfficeTime());
oldBasicInfo.setTakeOfficeTimeEnd(basicInfo.getTakeOfficeTimeEnd());
oldBasicInfo.setExpertType(basicInfo.getExpertType());
oldBasicInfo.setResearchField(basicInfo.getResearchField());
oldBasicInfo.setSpeciality(basicInfo.getSpeciality());
oldBasicInfo.setTalentPlanning(basicInfo.getTalentPlanning());
oldBasicInfo.setTechnicalTitles(basicInfo.getTechnicalTitles());
oldBasicInfo.setTechnicalDate(basicInfo.getTechnicalDate());
oldBasicInfo.setWorkDate(basicInfo.getWorkDate());
oldBasicInfo.setUpdateTime(new Date());
updateList.add(oldBasicInfo);
} else {
String id = Long.toString(generatorIdService.getOrderId());
basicInfo.setId(id);
basicInfo.setCreateTime(new Date());
String uid = generatorIdService.getIdNo();
basicInfo.setUid(uid);
basicInfo.setMainEntry(1);
saveList.add(basicInfo);
}
}
if (!saveList.isEmpty()) {
saveBatch(saveList);
log.info("新增{}条数据", saveList.size());
result = "新增" + saveList.size() + "条数据";
}
if (!updateList.isEmpty()) {
updateBatchById(updateList);
log.info("更新{}条数据", updateList.size());
if (!"".equals(result)) {
result += ";";
}
result += "更新" + updateList.size() + "条数据";
}
}
} catch (Exception e) {
log.info("导入专家信息异常:{}", e.getMessage(), e);
result = "导入专家信息异常:" + e.getMessage();
} finally {
try {
if (in != null) {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (workbook != null) {
workbook.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
@Override
public ResponseEntity<byte[]> exportExcel(List<CharacterBasicInfo> characterBasicInfos, Map<String, String> importFieldMap) throws IOException {
return exportExcelByList(characterBasicInfos, importFieldMap);
}
@Override
public ResponseEntity<byte[]> exportExcelByIds(String ids, Map<String, String> importFieldMap) throws IOException {
List<CharacterBasicInfo> characterBasicInfos = listByIds(Arrays.asList(ids.split(",")));
return exportExcelByList(characterBasicInfos, importFieldMap);
}
private ResponseEntity<byte[]> exportExcelByList(List<CharacterBasicInfo> characterBasicInfos, Map<String, String> importFieldMap) throws IOException {
// 创建Excel工作簿
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("人物信息");
// 填充数据到Excel工作表
Row titlerow = sheet.createRow(0);
// 创建字体样式
Font headerFont = workbook.createFont();
headerFont.setFontName("Arial");
headerFont.setFontHeightInPoints((short) 12);
headerFont.setBold(true);
// 创建单元格样式并应用字体
CellStyle titleCellStyle = workbook.createCellStyle();
titleCellStyle.setFont(headerFont);
titleCellStyle.setAlignment(HorizontalAlignment.CENTER);
titleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
titleCellStyle.setFillForegroundColor(IndexedColors.BRIGHT_GREEN.getIndex());
titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
AtomicInteger colNum = new AtomicInteger();
importFieldMap.forEach((key, value) -> {
int andIncrement = colNum.getAndIncrement();
Cell cell = titlerow.createCell(andIncrement);
cell.setCellValue(key);
cell.setCellStyle(titleCellStyle);
sheet.setColumnWidth(andIncrement, 15 * 256);
});
int rowNum = 1;
//数据填充到Excel工作表
for (CharacterBasicInfo characterBasicInfo : characterBasicInfos) {
Row row = sheet.createRow(rowNum++);
//总列数
int columns = importFieldMap.size();
for (int i = 0; i < columns; i++) {
Cell cell = row.createCell(i);
// 列名获取
String columnName = importFieldMap.get(titlerow.getCell(i).getStringCellValue());
// 对象转化为map
Map<String, Object> enterpriseMap = BeanUtil.beanToMap(characterBasicInfo);
if (columnName != null) {
Object value = enterpriseMap.get(columnName);
if (value != null) {
if (value instanceof String) {
cell.setCellValue((String) value);
} else if (value instanceof Number) {
cell.setCellValue(((Number) value).doubleValue());
} else if (value instanceof Date) {
cell.setCellValue((Date) value);
} else {
// 处理其他类型的值,例如布尔值等
cell.setCellValue(value.toString());
}
} else {
// 如果值为 null,可以设置为空字符串或其他默认值
cell.setCellValue("");
}
} else {
// 如果 columnName 不存在于 importFieldMap 中,可以设置为空字符串或其他默认值
cell.setCellValue("");
}
}
}
// 将Excel工作簿写入字节数组输出流
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
workbook.write(byteArrayOutputStream);
// 准备HTTP响应头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"));
// 对文件名进行编码
String encodedFileName = URLEncoder.encode("人物信息.xlsx", "utf-8");
headers.add("Content-Disposition", "attachment; filename=" + encodedFileName);
// 返回Excel文件作为字节数组响应
return new ResponseEntity<>(byteArrayOutputStream.toByteArray(), headers, HttpStatus.OK);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论