答:
pom依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.4</version>
</dependency>
代码
package com.ruoyi.web.controller.xxxxx;
import cn.hutool.core.text.csv.CsvData;
import cn.hutool.core.text.csv.CsvReader;
import cn.hutool.core.text.csv.CsvRow;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.xxx.domain.*;
import com.ruoyi.xxx.service.*;
import com.ruoyi.common.core.domain.AjaxResult;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
* CSV数据导入.
*
* @author China110
* @version 2022/08/22
*/
@Slf4j
@RestController
@RequestMapping("/datainit")
public class DataInitController {
public static final String[] searchList = {"\"", "\uFEFF"};
public static final String[] replaceList = {"", ""};
//初始化系统数据
@Autowired
private XxxService xxxService;
@ApiOperation("导入xxx数据")
@GetMapping("/xxx")
public AjaxResult importXxx(String filePath) {
if (StringUtils.isBlank(filePath)) {
return AjaxResult.error("文件地址不能为空");
}
AtomicInteger add = new AtomicInteger();
AtomicInteger update = new AtomicInteger();
List<CsvRow> csvRows = this.readCsvFile(filePath);
csvRows.forEach(row -> {
List<String> rawList = row.getRawList();
Room room = this.toRoom(rawList);
if (roomService.getById(room.getId()) != null) {
this.xxxService.updateById(room);
update.addAndGet(1);
} else {
this.xxxService.save(room);
add.addAndGet(1);
}
});
log.info("新增xxx数据:{}", add.get());
log.info("修改xxx数据:{}", update.get());
return AjaxResult.success("数据处理完成");
}
/**
* 读取 csv 文件
*/
public static List<CsvRow> readCsvFile(String readCsvFilePath) {
// 创建 CSV Reader 对象, 参数说明(读取的文件路径,分隔符,编码格式)
CsvReader csvReader = new CsvReader(Paths.get(readCsvFilePath), StandardCharsets.UTF_8, null);
// 读取除表头外的内容
CsvData read = csvReader.read();
return read.getRows();
}
public static Room toRoom(List<String> fields) {
Xxx room = new Xxx();
String idStr = StringUtils.replaceEach(stringValied(fields.get(0)), searchList, replaceList);
String createDateStr = stringValied(fields.get(17));
String creator = stringValied(fields.get(18));
String updateDateStr = stringValied(fields.get(19));
String updater = stringValied(fields.get(20));
String deleteDateStr = stringValied(fields.get(21));
String deleter = stringValied(fields.get(22));
room.setId(Long.valueOf(idStr));
room.setCreateDate(parseLocalDateTime(createDateStr, fmtHms));
room.setCreator(creator);
room.setUpdateDate(parseLocalDateTime(updateDateStr, fmtHms));
room.setUpdater(updater);
room.setDeleteDate(parseLocalDateTime(deleteDateStr, fmtHms));
room.setDeleter(deleter);
return room;
}
public static LocalDateTime parseLocalDateTime(String localDateTimeStr, DateTimeFormatter fmt) {
if (StringUtils.isBlank(localDateTimeStr) || StringUtils.equalsAny(localDateTimeStr, "NULL", "null")) {
return null;
}
LocalDateTime localDateTime = null;
try {
localDateTime = LocalDateTime.parse(localDateTimeStr, fmt);
} catch (Exception e) {
System.out.println(e.getLocalizedMessage());
} finally {
return localDateTime;
}
}
public static String stringValied(String param) {
if (StringUtils.isBlank(param) || StringUtils.equalsAny(param, "NULL", "null")) {
return null;
}
return param;
}
}