Browse Source

完成居民导入

master
wangxianzhang 4 years ago
parent
commit
3f34a5b7ac
  1. 57
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java
  2. 6
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserImportService.java
  3. 74
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java

57
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java

@ -22,6 +22,7 @@ import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
@ -35,18 +36,26 @@ import com.epmet.feign.OperCustomizeOpenFeignClient;
import com.epmet.service.IcResiUserImportService;
import com.epmet.service.IcResiUserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;
@ -62,12 +71,28 @@ import java.util.concurrent.atomic.AtomicInteger;
public class IcResiUserController {
private static final String BASE_TABLE_NAME = "ic_resi_user";
private Path IC_RESI_UPLOAD_DIR;
@Autowired
private OperCustomizeOpenFeignClient operCustomizeOpenFeignClient;
@Autowired
private IcResiUserService icResiUserService;
@Autowired
private IcResiUserImportService icResiUserImportService;
{
// 初始化上传目录
String home = System.getProperty("user.home");
Path importDir = Paths.get(home, "epmet_files", "ic_user_import");
if (Files.notExists(importDir)) {
try {
Files.createDirectories(importDir);
} catch (IOException e) {
log.error("创建数字赋能平台上传目录失败");
}
}
IC_RESI_UPLOAD_DIR = importDir;
}
@PostMapping("delete")
public Result delete(@LoginUser TokenDto tokenDto,@RequestBody DelIcResiUserFormDTO formDTO){
@ -228,9 +253,35 @@ public class IcResiUserController {
* @return
*/
@PostMapping("import/excel")
public Result importExcelByEasyExcel() {
Object result = icResiUserImportService.importIcResiInfoFromExcel();
return new Result().ok(result);
public void importExcelByEasyExcel(@RequestPart("file") MultipartFile file, HttpServletResponse response) {
if (file.isEmpty()) {
throw new RenException("请上传文件");
}
// 校验文件类型
String extension = FilenameUtils.getExtension(file.getOriginalFilename());
if (!"xls".equals(extension) && !"xlsx".equals(extension)) {
throw new RenException("文件类型不匹配");
}
Path savePath = null;
try {
String fileName = UUID.randomUUID().toString().concat(".").concat(extension);
savePath = IC_RESI_UPLOAD_DIR.resolve(fileName);
IOUtils.copy(file.getInputStream(), new FileOutputStream(savePath.toString()));
icResiUserImportService.importIcResiInfoFromExcel(savePath.toString(), response);
} catch (IOException e) {
String errorMsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【导入居民信息失败】导入失败:{}", errorMsg);
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode());
} finally {
try {
Files.delete(savePath);
} catch (IOException e) {
log.error("【导入居民信息失败】清理上传的文件失败:{}", ExceptionUtils.getErrorStackTrace(e));
}
}
}
@PostMapping("test")

6
epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserImportService.java

@ -1,5 +1,8 @@
package com.epmet.service;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
*@Description 居民信息导入service
*@Author wangxianzhang
@ -7,6 +10,5 @@ package com.epmet.service;
*/
public interface IcResiUserImportService {
Object importIcResiInfoFromExcel();
void importIcResiInfoFromExcel(String excelPathName, HttpServletResponse response);
}

74
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java

@ -1,5 +1,8 @@
package com.epmet.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.alibaba.excel.EasyExcelFactory;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -32,10 +35,14 @@ import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.*;
import java.util.stream.Collectors;
@ -114,15 +121,37 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
*/
@Data
public static class ErrorRow {
@Excel(name = "工作表", width = 30)
private String sheetName;
private String tableName;
@Excel(name = "身份证号", width = 40)
private String idCard;
@Excel(name = "姓名", width = 25)
private String name;
@Excel(name = "错误信息", width = 40)
private String errorInfo;
}
@Data
public static class SkipedRow {
@Excel(name = "工作表")
private String sheetName;
private String tableName;
@Excel(name = "身份证号")
private String idCard;
@Excel(name = "姓名")
private String name;
@Excel(name = "信息")
private String info;
}
@ -132,7 +161,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
* @return
*/
@Override
public Object importIcResiInfoFromExcel() {
public void importIcResiInfoFromExcel(String excelPathName, HttpServletResponse response) {
String loginUserId = loginUserUtil.getLoginUserId();
String loginUserApp = loginUserUtil.getLoginUserApp();
String loginUserClient = loginUserUtil.getLoginUserClient();
@ -145,7 +174,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
LoginUserDetailsResultDTO loginUserDetails = getResultDataOrThrowsException(epmetUserOpenFeignClient.getLoginUserDetails(userForm), ServiceConstant.EPMET_USER_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), null);
String currUserAgencyId = loginUserDetails.getAgencyId();
String excelPathName = "/opt/test/基础信息表/resi_info.xls";
//String excelPathName = "/opt/test/基础信息表/resi_info.xls";
CustomerAgencyDTO agencyInfo = getResultDataOrThrowsException(govOrgOpenFeignClient.getAgencyById(currUserAgencyId), ServiceConstant.GOV_ORG_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), null);
String customerId = agencyInfo.getCustomerId();
@ -175,17 +204,20 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
}
String errors = JSON.toJSONString(errorRows.get());
String skipeds = JSON.toJSONString(skipedRows.get());
//String skipeds = JSON.toJSONString(skipedRows.get());
log.error(errors);
log.error(skipeds);
//log.error(skipeds);
try {
downLoadResults(response);
} catch (IOException e) {
log.error("【导入IC居民附加信息】下载导入结果信息失败:{}", ExceptionUtils.getErrorStackTrace(e));
}
} finally {
skipedRows.remove();
errorRows.remove();
}
return null;
}
/**
@ -344,6 +376,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
skipedRow.setName(columnAndValues.get("NAME"));
skipedRow.setIdCard(idCard);
skipedRow.setInfo("身份证号已存在,跳过导入");
skipedRow.setTableName(tableName);
skipedRows.get().get(IcResiUserTableEnums.IC_RESI_USER.getTableName()).add(skipedRow);
continue;
}
@ -362,6 +395,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
errorRow.setIdCard(columnAndValues.get("ID_CARD"));
errorRow.setName(columnAndValues.get("NAME"));
errorRow.setErrorInfo(errorMsg);
errorRow.setTableName(tableName);
errorRows.get().get(IcResiUserTableEnums.IC_RESI_USER.getTableName()).add(errorRow);
} finally {
columnAndValues.clear();
@ -414,6 +448,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
skipedRow.setName(columnAndValues.get("NAME"));
skipedRow.setIdCard(columnAndValues.get("ID_CARD"));
skipedRow.setInfo("信息已存在,跳过导入");
skipedRow.setTableName(targetTableName);
skipedRows.get().get(targetTableName).add(skipedRow);
continue;
@ -444,6 +479,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
errorRow.setName(columnAndValues.get("NAME"));
errorRow.setIdCard(columnAndValues.get("ID_CARD"));
errorRow.setErrorInfo(errorMsg);
errorRow.setTableName(targetTableName);
errorRows.get().get(targetTableName).add(errorRow);
} finally {
columnAndValues.clear();
@ -852,5 +888,29 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
map.put(icResiUserTableEnum.getMainTableFlagColumnName(), true);
icResiUserDao.upTable("ic_resi_user", resiUserId, map);
}
/**
* 下载导入结果
* @param response
* @throws IOException
*/
public void downLoadResults(HttpServletResponse response) throws IOException {
//public static final ThreadLocal<Map<String, List<ErrorRow>>> errorRows = new ThreadLocal<>();
String fileName = "导入失败条目清单.xls";
response.setHeader("content-Type", "application/vnd.ms-excel");
response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));
LinkedList<ErrorRow> list = new LinkedList<>();
for (Map.Entry<String, List<ErrorRow>> entry : errorRows.get().entrySet()) {
list.addAll(entry.getValue());
}
list.forEach(row -> row.setSheetName(IcResiUserTableEnums.getObjectByTableName(row.tableName).getTableComment()));
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("导入失败的条目列表","导入失败"),
ErrorRow.class, list);
workbook.write(response.getOutputStream());
}
}

Loading…
Cancel
Save