提交 b346f14b 作者: 贺晋豫

人物 导入导出接口修改、新增模板下载接口

上级 f56fb9ae
...@@ -214,14 +214,14 @@ public class CharacterBasicInfoController { ...@@ -214,14 +214,14 @@ public class CharacterBasicInfoController {
} }
@PostMapping("/exportExcel") @PostMapping("/exportExcel")
public ResponseEntity<byte[]> exportExcel(@RequestBody BasicInfoListVo basicInfoListVo,@RequestParam String category) { public ResponseEntity<byte[]> exportExcel(@RequestBody BasicInfoListVo basicInfoListVo) {
basicInfoListVo.setCategory(category); String category = basicInfoListVo.getCategory();
basicInfoListVo.setColumn(SortUtil.humpToLine(basicInfoListVo.getColumn())); basicInfoListVo.setColumn(SortUtil.humpToLine(basicInfoListVo.getColumn()));
List<CharacterBasicInfo> list = characterBasicInfoService.getAllList(basicInfoListVo); List<CharacterBasicInfo> list = characterBasicInfoService.getAllList(basicInfoListVo);
Map<String, String> importFieldMap = getImportFieldMap(category); Map<String, String> importFieldMap = getImportFieldMap(category);
ResponseEntity<byte[]> responseEntity; ResponseEntity<byte[]> responseEntity;
try { try {
responseEntity = characterBasicInfoService.exportExcel(list,importFieldMap); responseEntity = characterBasicInfoService.exportExcel(category,list,importFieldMap);
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
...@@ -233,7 +233,19 @@ public class CharacterBasicInfoController { ...@@ -233,7 +233,19 @@ public class CharacterBasicInfoController {
Map<String, String> importFieldMap = getImportFieldMap(category); Map<String, String> importFieldMap = getImportFieldMap(category);
ResponseEntity<byte[]> responseEntity; ResponseEntity<byte[]> responseEntity;
try { try {
responseEntity = characterBasicInfoService.exportExcelByIds(ids,importFieldMap); responseEntity = characterBasicInfoService.exportExcelByIds(category,ids,importFieldMap);
} catch (IOException e) {
throw new RuntimeException(e);
}
return responseEntity;
}
@GetMapping("/exportTemplate")
public ResponseEntity<byte[]> exportTemplate(@RequestParam String category) {
Map<String, String> importFieldMap = getImportFieldMap(category);
ResponseEntity<byte[]> responseEntity;
try {
responseEntity = characterBasicInfoService.exportTemplate(importFieldMap);
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
...@@ -266,20 +278,11 @@ public class CharacterBasicInfoController { ...@@ -266,20 +278,11 @@ public class CharacterBasicInfoController {
importFieldMap1.put("出生年月", "birthday"); importFieldMap1.put("出生年月", "birthday");
importFieldMap1.put("籍贯", "nativePlace"); importFieldMap1.put("籍贯", "nativePlace");
importFieldMap1.put("毕业院校", "school"); importFieldMap1.put("毕业院校", "school");
importFieldMap1.put("毕业专业", "schoolSpeciality");
importFieldMap1.put("学历", "education"); importFieldMap1.put("学历", "education");
importFieldMap1.put("单位名称", "department"); importFieldMap1.put("单位名称", "department");
importFieldMap1.put("所在部门", "depart");
importFieldMap1.put("职务", "duty"); importFieldMap1.put("职务", "duty");
importFieldMap1.put("任职开始时间", "takeOfficeTime"); importFieldMap1.put("任职开始时间", "takeOfficeTime");
importFieldMap1.put("任职结束时间", "takeOfficeTimeEnd"); 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"); importFieldMap1.put("分类", "typeId");
} }
...@@ -315,19 +318,12 @@ public class CharacterBasicInfoController { ...@@ -315,19 +318,12 @@ public class CharacterBasicInfoController {
importFieldMap3.put("性别", "sex"); importFieldMap3.put("性别", "sex");
importFieldMap3.put("出生年月", "birthday"); importFieldMap3.put("出生年月", "birthday");
importFieldMap3.put("籍贯", "nativePlace"); importFieldMap3.put("籍贯", "nativePlace");
importFieldMap3.put("毕业专业", "schoolSpeciality"); importFieldMap3.put("毕业院校", "school");
importFieldMap3.put("学历", "education"); importFieldMap3.put("学历", "education");
importFieldMap3.put("单位名称", "department"); importFieldMap3.put("单位名称", "department");
importFieldMap3.put("所在部门", "depart");
importFieldMap3.put("职务", "duty"); importFieldMap3.put("职务", "duty");
importFieldMap3.put("任职开始时间", "takeOfficeTime"); importFieldMap3.put("任职开始时间", "takeOfficeTime");
importFieldMap3.put("任职结束时间", "takeOfficeTimeEnd"); importFieldMap3.put("任职结束时间", "takeOfficeTimeEnd");
importFieldMap3.put("顶尖专家/领军专家", "expertType");
importFieldMap3.put("研究领域", "researchField");
importFieldMap3.put("已入选的人才计划", "talentPlanning");
importFieldMap3.put("专业技术职称", "technicalTitles");
importFieldMap3.put("专业技术职称取得时间", "technicalDate");
importFieldMap3.put("参加工作时间", "workDate");
importFieldMap3.put("分类", "typeId"); importFieldMap3.put("分类", "typeId");
} }
} }
......
...@@ -58,13 +58,15 @@ public interface CharacterBasicInfoService extends IService<CharacterBasicInfo> ...@@ -58,13 +58,15 @@ public interface CharacterBasicInfoService extends IService<CharacterBasicInfo>
List<CharacterBasicInfo> getAllList(BasicInfoListVo basicInfoListVo); List<CharacterBasicInfo> getAllList(BasicInfoListVo basicInfoListVo);
CharacterBasicInfo getBasicInfoByUid(String uid); CharacterBasicInfo getBasicInfoByUid(String uid, String department, String basicInfoDepartment);
CharacterBasicInfo getByNameAndByDepartment(String category, String typeId, String name, String department); CharacterBasicInfo getByNameAndByDepartment(String category, String typeId, String name, String department);
String importExcel(String absolutePath, String category, Map<String, String> importFieldMap); String importExcel(String absolutePath, String category, Map<String, String> importFieldMap);
ResponseEntity<byte[]> exportExcel(List<CharacterBasicInfo> list, Map<String, String> importFieldMap) throws IOException; ResponseEntity<byte[]> exportExcel(String category, List<CharacterBasicInfo> list, Map<String, String> importFieldMap) throws IOException;
ResponseEntity<byte[]> exportExcelByIds(String ids, Map<String, String> importFieldMap) throws IOException; ResponseEntity<byte[]> exportExcelByIds(String category, String ids, Map<String, String> importFieldMap) throws IOException;
ResponseEntity<byte[]> exportTemplate(Map<String, String> importFieldMap) throws IOException;
} }
...@@ -2,6 +2,7 @@ package com.zzsn.leaderbase.service.impl; ...@@ -2,6 +2,7 @@ package com.zzsn.leaderbase.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.util.StrUtil;
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.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
...@@ -9,10 +10,12 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; ...@@ -9,10 +10,12 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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;
import com.zzsn.leaderbase.entity.CharacterBasicInfo; import com.zzsn.leaderbase.entity.CharacterBasicInfo;
import com.zzsn.leaderbase.entity.CharacterCategoryStructure;
import com.zzsn.leaderbase.mapper.CharacterBasicInfoMapper; import com.zzsn.leaderbase.mapper.CharacterBasicInfoMapper;
import com.zzsn.leaderbase.service.CharacterBasicInfoService; import com.zzsn.leaderbase.service.CharacterBasicInfoService;
import com.zzsn.leaderbase.service.CharacterTagService; import com.zzsn.leaderbase.service.CharacterTagService;
import com.zzsn.leaderbase.service.IGeneratorIdService; import com.zzsn.leaderbase.service.IGeneratorIdService;
import com.zzsn.leaderbase.service.LeaderCategoryService;
import com.zzsn.leaderbase.util.ExcelUtil; import com.zzsn.leaderbase.util.ExcelUtil;
import com.zzsn.leaderbase.vo.BasicInfoListVo; import com.zzsn.leaderbase.vo.BasicInfoListVo;
import com.zzsn.leaderbase.vo.CharacterVo; import com.zzsn.leaderbase.vo.CharacterVo;
...@@ -56,6 +59,9 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf ...@@ -56,6 +59,9 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf
@Autowired @Autowired
CharacterTagService characterTagService; CharacterTagService characterTagService;
@Autowired
LeaderCategoryService leaderCategoryService;
@Override @Override
public CharacterVo getByUid(String uid) { public CharacterVo getByUid(String uid) {
return baseMapper.getByUid(uid); return baseMapper.getByUid(uid);
...@@ -271,9 +277,12 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf ...@@ -271,9 +277,12 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf
} }
@Override @Override
public CharacterBasicInfo getBasicInfoByUid(String uid) { public CharacterBasicInfo getBasicInfoByUid(String category,String uid, String department) {
LambdaQueryWrapper<CharacterBasicInfo> queryWrapper = Wrappers.lambdaQuery(); LambdaQueryWrapper<CharacterBasicInfo> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(CharacterBasicInfo::getUid,uid); queryWrapper.eq(CharacterBasicInfo::getUid,uid);
//新增过滤,因为根据uid 查询出来的数据,可能存在多个,所以需要根据部门进行过滤
queryWrapper.eq(CharacterBasicInfo::getDepartment,department);
queryWrapper.eq(CharacterBasicInfo::getCategory,category);
return baseMapper.selectOne(queryWrapper); return baseMapper.selectOne(queryWrapper);
} }
...@@ -312,6 +321,8 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf ...@@ -312,6 +321,8 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf
String sheetName = sheetTmp.getSheetName(); String sheetName = sheetTmp.getSheetName();
sheetNameList.add(sheetName); sheetNameList.add(sheetName);
} }
Map<String, String> typeNameKeyMap = getTypeMapper(category).stream().collect(Collectors.toMap(CharacterCategoryStructure::getTypeName, CharacterCategoryStructure::getId));
//人物类别映射集合,用来转化typeId和类别名称
for (String sheetName : sheetNameList) { for (String sheetName : sheetNameList) {
Sheet sheet = workbook.getSheet(sheetName); Sheet sheet = workbook.getSheet(sheetName);
//获取标题行 //获取标题行
...@@ -329,6 +340,11 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf ...@@ -329,6 +340,11 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf
if (importFieldMap.containsKey(titleName)) { if (importFieldMap.containsKey(titleName)) {
try { try {
String stringCellValue = sheetRow.getCell(cell.getColumnIndex()).getStringCellValue(); String stringCellValue = sheetRow.getCell(cell.getColumnIndex()).getStringCellValue();
//如果是分类列,转换成id
if ("分类".equals(titleName) && "typeId".equals(importFieldMap.get(titleName))) {
stringCellValue = typeNameKeyMap.get(stringCellValue);
}
//将导入文件中不为null的列放入beanMap,key为导入列在数据库中对应的表列名
if (StringUtils.isNotEmpty(stringCellValue)) { if (StringUtils.isNotEmpty(stringCellValue)) {
beanMap.put(importFieldMap.get(titleName), stringCellValue); beanMap.put(importFieldMap.get(titleName), stringCellValue);
} }
...@@ -338,8 +354,11 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf ...@@ -338,8 +354,11 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf
} }
} }
System.out.println(beanMap); System.out.println(beanMap);
//过滤掉根据导入文档类型中文名找不到对应类别的数据(这些不做处理)
if (StringUtils.isNotEmpty((CharSequence) beanMap.get("typeId"))) {
list.add(BeanUtil.mapToBean(beanMap, CharacterBasicInfo.class, true, CopyOptions.create().setIgnoreError(true))); list.add(BeanUtil.mapToBean(beanMap, CharacterBasicInfo.class, true, CopyOptions.create().setIgnoreError(true)));
} }
}
//需要新增的数据列表 //需要新增的数据列表
List<CharacterBasicInfo> saveList = new ArrayList<>(); List<CharacterBasicInfo> saveList = new ArrayList<>();
//需要更新的数据列表 //需要更新的数据列表
...@@ -362,7 +381,7 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf ...@@ -362,7 +381,7 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf
//检查是否已有数据 //检查是否已有数据
CharacterBasicInfo oldBasicInfo = null; CharacterBasicInfo oldBasicInfo = null;
if (StringUtils.isNotEmpty(basicInfo.getUid())) { if (StringUtils.isNotEmpty(basicInfo.getUid())) {
oldBasicInfo = getBasicInfoByUid(basicInfo.getUid()); oldBasicInfo = getBasicInfoByUid(category, basicInfo.getUid(), basicInfo.getDepartment());
} else { } else {
oldBasicInfo = getByNameAndByDepartment(category, basicInfo.getTypeId(), basicInfo.getName(), basicInfo.getDepartment()); oldBasicInfo = getByNameAndByDepartment(category, basicInfo.getTypeId(), basicInfo.getName(), basicInfo.getDepartment());
} }
...@@ -410,6 +429,10 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf ...@@ -410,6 +429,10 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf
} }
result += "更新" + updateList.size() + "条数据"; result += "更新" + updateList.size() + "条数据";
} }
if(saveList.isEmpty()&&updateList.isEmpty())
{
result = "无可处理数据(如有数据代表数据不规范)";
}
} }
} catch (Exception e) { } catch (Exception e) {
log.info("导入专家信息异常:{}", e.getMessage(), e); log.info("导入专家信息异常:{}", e.getMessage(), e);
...@@ -433,18 +456,70 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf ...@@ -433,18 +456,70 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf
return result; return result;
} }
private List<CharacterCategoryStructure> getTypeMapper(String category) {
//根据名称模糊查询
LambdaQueryWrapper<CharacterCategoryStructure> characterCategoryStructureLambdaQueryWrapper = Wrappers.lambdaQuery();
characterCategoryStructureLambdaQueryWrapper.eq(StrUtil.isNotBlank(category), CharacterCategoryStructure::getCategory, category);
List<CharacterCategoryStructure> characterCategoryWrapper = leaderCategoryService.list(characterCategoryStructureLambdaQueryWrapper);
return characterCategoryWrapper;
}
@Override @Override
public ResponseEntity<byte[]> exportExcel(List<CharacterBasicInfo> characterBasicInfos, Map<String, String> importFieldMap) throws IOException { public ResponseEntity<byte[]> exportExcel(String category, List<CharacterBasicInfo> characterBasicInfos, Map<String, String> importFieldMap) throws IOException {
return exportExcelByList(characterBasicInfos, importFieldMap); return exportExcelByList(category, characterBasicInfos, importFieldMap);
} }
@Override @Override
public ResponseEntity<byte[]> exportExcelByIds(String ids, Map<String, String> importFieldMap) throws IOException { public ResponseEntity<byte[]> exportExcelByIds(String category, String ids, Map<String, String> importFieldMap) throws IOException {
List<CharacterBasicInfo> characterBasicInfos = listByIds(Arrays.asList(ids.split(","))); List<CharacterBasicInfo> characterBasicInfos = listByIds(Arrays.asList(ids.split(",")));
return exportExcelByList(characterBasicInfos, importFieldMap); return exportExcelByList(category, characterBasicInfos, importFieldMap);
}
@Override
public ResponseEntity<byte[]> exportTemplate(Map<String, String> importFieldMap) throws IOException {
return generateTemplate(importFieldMap);
}
private ResponseEntity<byte[]> generateTemplate(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);
});
// 将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);
} }
private ResponseEntity<byte[]> exportExcelByList(List<CharacterBasicInfo> characterBasicInfos, Map<String, String> importFieldMap) throws IOException { private ResponseEntity<byte[]> exportExcelByList(String category,List<CharacterBasicInfo> characterBasicInfos, Map<String, String> importFieldMap) throws IOException {
// 创建Excel工作簿 // 创建Excel工作簿
Workbook workbook = new XSSFWorkbook(); Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("人物信息"); Sheet sheet = workbook.createSheet("人物信息");
...@@ -471,6 +546,7 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf ...@@ -471,6 +546,7 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf
sheet.setColumnWidth(andIncrement, 15 * 256); sheet.setColumnWidth(andIncrement, 15 * 256);
}); });
int rowNum = 1; int rowNum = 1;
Map<String,String> typeIdeKeyMap=getTypeMapper(category).stream().collect(Collectors.toMap(CharacterCategoryStructure::getId, CharacterCategoryStructure::getTypeName));
//数据填充到Excel工作表 //数据填充到Excel工作表
for (CharacterBasicInfo characterBasicInfo : characterBasicInfos) { for (CharacterBasicInfo characterBasicInfo : characterBasicInfos) {
Row row = sheet.createRow(rowNum++); Row row = sheet.createRow(rowNum++);
...@@ -481,9 +557,13 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf ...@@ -481,9 +557,13 @@ public class CharacterBasicInfoServiceImpl extends ServiceImpl<CharacterBasicInf
// 列名获取 // 列名获取
String columnName = importFieldMap.get(titlerow.getCell(i).getStringCellValue()); String columnName = importFieldMap.get(titlerow.getCell(i).getStringCellValue());
// 对象转化为map // 对象转化为map
Map<String, Object> enterpriseMap = BeanUtil.beanToMap(characterBasicInfo); Map<String, Object> characterMap = BeanUtil.beanToMap(characterBasicInfo);
if (columnName != null) { if (columnName != null) {
Object value = enterpriseMap.get(columnName); Object value = characterMap.get(columnName);
if("typeId".equals(columnName))
{
value=typeIdeKeyMap.get(value);
}
if (value != null) { if (value != null) {
if (value instanceof String) { if (value instanceof String) {
cell.setCellValue((String) value); cell.setCellValue((String) value);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论