wxz 2 years ago
parent
commit
bee92b0ce8
  1. 1
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/BizTypeEnum.java
  2. 11
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/LingShanSpecialCrowdController.java
  3. 16
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/AbstractLingShanSpecialCrowdExcelImportListener.java
  4. 5
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/LingShanSpecialCrowdAzbjExcelImportListener.java
  5. 5
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/LingShanSpecialCrowdJieduExcelImportListener.java
  6. 5
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/LingShanSpecialCrowdJingZhangExcelImportListener.java
  7. 5
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/LingShanSpecialCrowdSqjzExcelImportListener.java
  8. 5
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/LingShanSpecialCrowdXinFangExcelImportListener.java
  9. 2
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/LingShanSpecialCrowdService.java
  10. 106
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/LingShanSpecialCrowdServiceImpl.java
  11. BIN
      epmet-user/epmet-user-server/src/main/resources/excel/lingshan/lingshan_special_crowd_azbj_export.xlsx
  12. BIN
      epmet-user/epmet-user-server/src/main/resources/excel/lingshan/lingshan_special_crowd_jdry_export.xlsx
  13. BIN
      epmet-user/epmet-user-server/src/main/resources/excel/lingshan/lingshan_special_crowd_jzhz_export.xlsx
  14. BIN
      epmet-user/epmet-user-server/src/main/resources/excel/lingshan/lingshan_special_crowd_sqjz_export.xlsx
  15. BIN
      epmet-user/epmet-user-server/src/main/resources/excel/lingshan/lingshan_special_crowd_xfry_export.xlsx

1
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/BizTypeEnum.java

@ -19,6 +19,7 @@ public enum BizTypeEnum {
GRID_PROJECT("grid_project", "网格项目"),
PROJECT("project", "项目"),
ARTICLE("article", "文章(党建声音)"),
SPECIAL_CROWD("special_crowd", "社会维稳(特殊人群)"),
;
public static BizTypeEnum getEnum(String code) {

11
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/LingShanSpecialCrowdController.java

@ -53,12 +53,15 @@ public class LingShanSpecialCrowdController {
@PostMapping("import")
public Result importSpecialCowd(MultipartFile file, @RequestParam("crowdCategory") String crowdCategory) {
String originalFilename = file.getOriginalFilename();
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
// 1.存文件
Path fileSavePath = saveSpecialCrowdTempFile(file);
Path fileSavePath = saveSpecialCrowdTempFile(file, suffix);
// 2.执行业务导入
try {
lingShanSpecialCrowdService.importSpecialCrowd(crowdCategory, fileSavePath.toString());
lingShanSpecialCrowdService.importSpecialCrowd(crowdCategory, fileSavePath.toString(), originalFilename);
} catch (Exception e) {
throw e;
// ...
@ -77,12 +80,12 @@ public class LingShanSpecialCrowdController {
* @author: WangXianZhang
* @date: 2023/4/18 9:46 AM
*/
public Path saveSpecialCrowdTempFile(@RequestParam("file") MultipartFile file) {
public Path saveSpecialCrowdTempFile(@RequestParam("file") MultipartFile file, String suffix) {
Path fileSavePath;
FileOutputStream os = null;
try {
Path fileSaveDir = FileUtils.getAndCreateDirUnderEpmetFilesDir("special_crowd_import");
String fileName = DateUtils.format(new Date(), "yyyyMMdd_HHmmss_" + System.nanoTime());
String fileName = DateUtils.format(new Date(), "yyyyMMdd_HHmmss_" + System.nanoTime()) + suffix;
fileSavePath = fileSaveDir.resolve(fileName);
IOUtils.copy(file.getInputStream(), (os = new FileOutputStream(fileSavePath.toString())));
return fileSavePath;

16
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/AbstractLingShanSpecialCrowdExcelImportListener.java

@ -58,6 +58,8 @@ public abstract class AbstractLingShanSpecialCrowdExcelImportListener<T extends
*/
private static final Integer MAX_BATCH_SIZE = 500;
private String templateFileName;
/**
* 表头应有行数
*/
@ -186,8 +188,7 @@ public abstract class AbstractLingShanSpecialCrowdExcelImportListener<T extends
}
try {
ValidatorUtils.validateEntity(row);
} catch (
ValidateException e) {
} catch (ValidateException e) {
// 加入到错误记录中去
errorDatas.add(row);
return;
@ -329,7 +330,7 @@ public abstract class AbstractLingShanSpecialCrowdExcelImportListener<T extends
* @author: WangXianZhang
* @date: 2023/4/18 11:22 PM
*/
protected List<T> getErrorDatas() {
public List<T> getErrorDatas() {
return errorDatas;
}
@ -370,6 +371,15 @@ public abstract class AbstractLingShanSpecialCrowdExcelImportListener<T extends
*/
abstract List<String> setHeaderZhList();
/**
* @description: 设置模板名称
* @param :
* @return
* @author: WangXianZhang
* @date: 2023/4/20 9:07 AM
*/
abstract String setTemplateFileName();
/**
* @description: 获取entity的class用于数据拷贝
* @param :

5
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/LingShanSpecialCrowdAzbjExcelImportListener.java

@ -46,4 +46,9 @@ public class LingShanSpecialCrowdAzbjExcelImportListener
LingShanSpecialCrowdTypeEnums getSpecialCrowdType() {
return LingShanSpecialCrowdTypeEnums.AZBJ;
}
@Override
String setTemplateFileName() {
return "lingshan/lingshan_special_crowd_azbj_export.xlsx";
}
}

5
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/LingShanSpecialCrowdJieduExcelImportListener.java

@ -42,4 +42,9 @@ public class LingShanSpecialCrowdJieduExcelImportListener
LingShanSpecialCrowdTypeEnums getSpecialCrowdType() {
return LingShanSpecialCrowdTypeEnums.JDRY;
}
@Override
String setTemplateFileName() {
return "lingshan/lingshan_special_crowd_jdry_export.xlsx";
}
}

5
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/LingShanSpecialCrowdJingZhangExcelImportListener.java

@ -43,4 +43,9 @@ public class LingShanSpecialCrowdJingZhangExcelImportListener
LingShanSpecialCrowdTypeEnums getSpecialCrowdType() {
return LingShanSpecialCrowdTypeEnums.JZHZ;
}
@Override
String setTemplateFileName() {
return "lingshan/lingshan_special_crowd_jzhz_export.xlsx";
}
}

5
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/LingShanSpecialCrowdSqjzExcelImportListener.java

@ -42,4 +42,9 @@ public class LingShanSpecialCrowdSqjzExcelImportListener
LingShanSpecialCrowdTypeEnums getSpecialCrowdType() {
return LingShanSpecialCrowdTypeEnums.SQJZ;
}
@Override
String setTemplateFileName() {
return "lingshan/lingshan_special_crowd_sqjz_export.xlsx";
}
}

5
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/LingShanSpecialCrowdXinFangExcelImportListener.java

@ -43,4 +43,9 @@ public class LingShanSpecialCrowdXinFangExcelImportListener
LingShanSpecialCrowdTypeEnums getSpecialCrowdType() {
return LingShanSpecialCrowdTypeEnums.XFRY;
}
@Override
String setTemplateFileName() {
return "lingshan/lingshan_special_crowd_xfry_export.xlsx";
}
}

2
epmet-user/epmet-user-server/src/main/java/com/epmet/service/LingShanSpecialCrowdService.java

@ -20,7 +20,7 @@ public interface LingShanSpecialCrowdService {
* @author: WangXianZhang
* @date: 2023/4/18 5:42 PM
*/
void importSpecialCrowd(String crowdCategory, String fileSavePath);
void importSpecialCrowd(String crowdCategory, String fileSavePath, String originFilename);
/**
* @description: 数据校验

106
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/LingShanSpecialCrowdServiceImpl.java

@ -1,27 +1,49 @@
package com.epmet.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.converters.ReadConverterContext;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.enums.BizTypeEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.ValidateException;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.EpmetRequestHolder;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.FileUtils;
import com.epmet.constants.ImportTaskConstants;
import com.epmet.dao.*;
import com.epmet.dto.result.ImportTaskCommonResultDTO;
import com.epmet.dto.result.UploadImgResultDTO;
import com.epmet.entity.*;
import com.epmet.enums.LingShanSpecialCrowdTypeEnums;
import com.epmet.excel.data.*;
import com.epmet.excel.handler.*;
import com.epmet.exceptions.ReadExcelHeaderOnlyException;
import com.epmet.feign.OssFeignClient;
import com.epmet.service.LingShanSpecialCrowdService;
import com.epmet.utils.ImportTaskUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.http.entity.ContentType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
@ -31,7 +53,7 @@ import java.util.concurrent.ExecutorService;
*/
@Slf4j
@Service
public class LingShanSpecialCrowdServiceImpl implements LingShanSpecialCrowdService {
public class LingShanSpecialCrowdServiceImpl implements LingShanSpecialCrowdService, ResultDataResolver {
@Autowired
private LingshanSpecialCrowdPersonDao specialCrowdPersonDao;
@ -60,8 +82,11 @@ public class LingShanSpecialCrowdServiceImpl implements LingShanSpecialCrowdServ
@Autowired
private ExecutorService executorService;
@Autowired
private OssFeignClient ossFeignClient;
@Override
public void importSpecialCrowd(String crowdCategory, String fileSavePath) {
public void importSpecialCrowd(String crowdCategory, String fileSavePath, String originFilename) {
Class<? extends LingShanSpecialCrowdDetailBaseExcelData> excelDataClass;
AbstractLingShanSpecialCrowdExcelImportListener listener;
LingShanSpecialCrowdTypeEnums specialCrowdTypeEnum;
@ -107,14 +132,83 @@ public class LingShanSpecialCrowdServiceImpl implements LingShanSpecialCrowdServ
// 正式开始导入。异步导入
listener.setValidateHeaderOnly(false);
CompletableFuture.runAsync(() -> {
EasyExcel.read(fileSavePath, excelDataClass, listener)
.headRowNumber(specialCrowdTypeEnum.getHeaderRowNumber())
.sheet(0)
.doRead();
// 创建导入任务
ImportTaskCommonResultDTO importTaskRst = getResultDataOrThrowsException(ImportTaskUtils.createImportTask(originFilename,
BizTypeEnum.SPECIAL_CROWD.getType()),
ServiceConstant.EPMET_COMMON_SERVICE,
EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),
null, "【灵山街道-导入特殊人群】创建导入任务失败");
try {
EasyExcel.read(fileSavePath, excelDataClass, listener)
.headRowNumber(specialCrowdTypeEnum.getHeaderRowNumber())
.sheet(0)
.doRead();
List<LingShanSpecialCrowdDetailBaseExcelData> errorDatas = listener.getErrorDatas();
if (CollectionUtils.isNotEmpty(errorDatas)) {
// 有错误数据需要提示
String resultDescFilePath = uploadResultDescFilePath(errorDatas, listener.getTemplateFileName());
ImportTaskUtils.finishImportTask(importTaskRst.getTaskId(),
ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL, resultDescFilePath, "失败,请导出文件查看详细信息");
} else {
// 全部成功
ImportTaskUtils.finishImportTask(importTaskRst.getTaskId(),
ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS, null, "成功");
}
} catch (Exception e) {
log.error("【灵山街道-导入特殊人群】失败,错误信息:" + ExceptionUtils.getErrorStackTrace(e));
ImportTaskUtils.finishImportTask(importTaskRst.getTaskId(),
ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL, null, "未知错误");
}
}, executorService);
}
/**
* @description: 上传错误描述文件
* @param errorDatas:
* @return
* @author: WangXianZhang
* @date: 2023/4/19 10:19 PM
*/
private String uploadResultDescFilePath(List<LingShanSpecialCrowdDetailBaseExcelData> errorDatas, String templateFileName) {
FileItem fileItem = null;
try {
String fileName =
DateUtils.format(new Date(), "yyyyMMdd_HHmmss_") + System.nanoTime() + "社会维稳导入失败数据.xlsx";
// 创建临时文件
fileItem = new DiskFileItemFactory(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, FileUtils.getAndCreateDirUnderEpmetFilesDir("temp").toFile())
.createItem("file", ContentType.APPLICATION_OCTET_STREAM.toString(), false, fileName);
// 写入临时文件
try (OutputStream os = fileItem.getOutputStream()) {
ExcelWriter excelWriter = EasyExcel.write(os).withTemplate(templateFileName).build();
excelWriter.finish();
} catch (IOException e) {
throw new RuntimeException(e);
}
// 上传文件
UploadImgResultDTO uploadRst = getResultDataOrThrowsException(ossFeignClient.uploadImportTaskDescFile(new CommonsMultipartFile(fileItem)), ServiceConstant.EPMET_COMMON_SERVICE,
EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),
null, "【灵山街道-导入特殊人群】上传错误描述文件失败。");
return uploadRst.getUrl();
} catch (IOException e) {
throw new RuntimeException("【灵山街道-导入特殊人群】生成错误描述文件-创建临时目录失败");
} finally {
try {
fileItem.delete();
} catch (Exception e) {
log.error("【灵山街道-导入特殊人群】删除fileItem临时文件失败");
}
}
}
@Override
public String validate(LingShanSpecialCrowdDetailBaseExcelData row) {
String idCard = row.getIdCard();

BIN
epmet-user/epmet-user-server/src/main/resources/excel/lingshan/lingshan_special_crowd_azbj_export.xlsx

Binary file not shown.

BIN
epmet-user/epmet-user-server/src/main/resources/excel/lingshan/lingshan_special_crowd_jdry_export.xlsx

Binary file not shown.

BIN
epmet-user/epmet-user-server/src/main/resources/excel/lingshan/lingshan_special_crowd_jzhz_export.xlsx

Binary file not shown.

BIN
epmet-user/epmet-user-server/src/main/resources/excel/lingshan/lingshan_special_crowd_sqjz_export.xlsx

Binary file not shown.

BIN
epmet-user/epmet-user-server/src/main/resources/excel/lingshan/lingshan_special_crowd_xfry_export.xlsx

Binary file not shown.
Loading…
Cancel
Save