提交 b346f14b 作者: 贺晋豫

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

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