diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcCityManagementController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcCityManagementController.java index 646843848d..04862f1752 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcCityManagementController.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcCityManagementController.java @@ -7,40 +7,47 @@ import com.alibaba.fastjson.JSON; import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.aop.NoRepeatSubmit; import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.constant.ServiceConstant; 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.feign.ResultDataResolver; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.security.dto.TokenDto; -import com.epmet.commons.tools.utils.ConvertUtils; -import com.epmet.commons.tools.utils.DateUtils; -import com.epmet.commons.tools.utils.ExcelUtils; -import com.epmet.commons.tools.utils.Result; +import com.epmet.commons.tools.utils.*; import com.epmet.commons.tools.utils.poi.excel.handler.FreezeAndFilter; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.commons.tools.validator.group.AddGroup; import com.epmet.commons.tools.validator.group.DefaultGroup; import com.epmet.commons.tools.validator.group.UpdateGroup; +import com.epmet.constants.ImportTaskConstants; import com.epmet.dto.IcCityManagementDTO; import com.epmet.dto.form.IcCityManagementAddEditFormDTO; import com.epmet.dto.form.IcCityManagementListFormDTO; import com.epmet.dto.result.IcCityManagementListResultDTO; +import com.epmet.dto.result.ImportTaskCommonResultDTO; import com.epmet.excel.IcCityManagementExcel; import com.epmet.service.IcCityManagementService; +import com.epmet.utils.ImportTaskUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.net.URLEncoder; +import java.nio.file.Path; import java.util.Date; import java.util.List; +import java.util.UUID; /** @@ -52,7 +59,7 @@ import java.util.List; @RestController @RequestMapping("icCityManagement") @Slf4j -public class IcCityManagementController { +public class IcCityManagementController implements ResultDataResolver { @Autowired private IcCityManagementService icCityManagementService; @@ -159,6 +166,48 @@ public class IcCityManagementController { } } + @PostMapping("import") + public Result importExcel(MultipartFile file) { + // 1.暂存文件 + String originalFilename = file.getOriginalFilename(); + String extName = originalFilename.substring(originalFilename.lastIndexOf(".")); + + Path fileSavePath; + try { + Path importPath = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_city_management", "import"); + fileSavePath = importPath.resolve(UUID.randomUUID().toString().concat(extName)); + } catch (IOException e) { + String errorMsg = ExceptionUtils.getErrorStackTrace(e); + log.error("【城市管理导入】创建临时存储文件失败:{}", errorMsg); + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "文件上传失败", "文件上传失败"); + } + + InputStream is = null; + FileOutputStream os = null; + try { + is = file.getInputStream(); + os = new FileOutputStream(fileSavePath.toString()); + IOUtils.copy(is, os); + } catch (Exception e) { + log.error("importExcel exception", e); + } finally { + org.apache.poi.util.IOUtils.closeQuietly(is); + org.apache.poi.util.IOUtils.closeQuietly(os); + } + + // 2.生成导入任务记录 + ImportTaskCommonResultDTO rstData = getResultDataOrThrowsException( + ImportTaskUtils.createImportTask(originalFilename, ImportTaskConstants.BIZ_TYPE_IC_VACCINE), + ServiceConstant.EPMET_COMMON_SERVICE, + EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), + "excel导入优势资源管理信息错误", + "导入势资源管理信息失败"); + + // 3.执行导入 + icCityManagementService.importExcel(fileSavePath, rstData.getTaskId()); + + return new Result(); + } } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcPublicServiceController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcPublicServiceController.java index b503c39720..71f9fe324b 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcPublicServiceController.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcPublicServiceController.java @@ -7,41 +7,48 @@ import com.alibaba.fastjson.JSON; import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.aop.NoRepeatSubmit; import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.constant.ServiceConstant; 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.feign.ResultDataResolver; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.security.dto.TokenDto; -import com.epmet.commons.tools.utils.ConvertUtils; -import com.epmet.commons.tools.utils.DateUtils; -import com.epmet.commons.tools.utils.ExcelUtils; -import com.epmet.commons.tools.utils.Result; +import com.epmet.commons.tools.utils.*; import com.epmet.commons.tools.utils.poi.excel.handler.FreezeAndFilter; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.commons.tools.validator.group.AddGroup; import com.epmet.commons.tools.validator.group.DefaultGroup; import com.epmet.commons.tools.validator.group.UpdateGroup; +import com.epmet.constants.ImportTaskConstants; import com.epmet.dto.IcPublicServiceDTO; import com.epmet.dto.form.IcPublicServiceAddEditFormDTO; import com.epmet.dto.form.IcPublicServiceListFormDTO; import com.epmet.dto.form.IcSuperiorResourceAddEditFormDTO; import com.epmet.dto.result.IcPublicServiceListResultDTO; +import com.epmet.dto.result.ImportTaskCommonResultDTO; import com.epmet.excel.IcPublicServiceExcel; import com.epmet.service.IcPublicServiceService; +import com.epmet.utils.ImportTaskUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.net.URLEncoder; +import java.nio.file.Path; import java.util.Date; import java.util.List; +import java.util.UUID; /** @@ -53,7 +60,7 @@ import java.util.List; @RestController @RequestMapping("icPublicService") @Slf4j -public class IcPublicServiceController { +public class IcPublicServiceController implements ResultDataResolver { @Autowired private IcPublicServiceService icPublicServiceService; @@ -160,6 +167,48 @@ public class IcPublicServiceController { } } + @PostMapping("import") + public Result importExcel(MultipartFile file) { + // 1.暂存文件 + String originalFilename = file.getOriginalFilename(); + String extName = originalFilename.substring(originalFilename.lastIndexOf(".")); + + Path fileSavePath; + try { + Path importPath = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_public_service", "import"); + fileSavePath = importPath.resolve(UUID.randomUUID().toString().concat(extName)); + } catch (IOException e) { + String errorMsg = ExceptionUtils.getErrorStackTrace(e); + log.error("【优势资源管理导入】创建临时存储文件失败:{}", errorMsg); + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "文件上传失败", "文件上传失败"); + } + + InputStream is = null; + FileOutputStream os = null; + try { + is = file.getInputStream(); + os = new FileOutputStream(fileSavePath.toString()); + IOUtils.copy(is, os); + } catch (Exception e) { + log.error("importExcel exception", e); + } finally { + org.apache.poi.util.IOUtils.closeQuietly(is); + org.apache.poi.util.IOUtils.closeQuietly(os); + } + + // 2.生成导入任务记录 + ImportTaskCommonResultDTO rstData = getResultDataOrThrowsException( + ImportTaskUtils.createImportTask(originalFilename, ImportTaskConstants.BIZ_TYPE_IC_VACCINE), + ServiceConstant.EPMET_COMMON_SERVICE, + EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), + "excel导入优势资源管理信息错误", + "导入势资源管理信息失败"); + + // 3.执行导入 + icPublicServiceService.importExcel(fileSavePath, rstData.getTaskId()); + + return new Result(); + } } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcSuperiorResourceController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcSuperiorResourceController.java index 1664941d01..df66d7a734 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcSuperiorResourceController.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcSuperiorResourceController.java @@ -6,41 +6,49 @@ import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.fastjson.JSON; import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.aop.NoRepeatSubmit; +import com.epmet.commons.tools.constant.AppClientConstant; import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.constant.ServiceConstant; 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.feign.ResultDataResolver; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.security.dto.TokenDto; -import com.epmet.commons.tools.utils.ConvertUtils; -import com.epmet.commons.tools.utils.DateUtils; -import com.epmet.commons.tools.utils.ExcelUtils; -import com.epmet.commons.tools.utils.Result; +import com.epmet.commons.tools.utils.*; import com.epmet.commons.tools.utils.poi.excel.handler.FreezeAndFilter; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.commons.tools.validator.group.AddGroup; import com.epmet.commons.tools.validator.group.DefaultGroup; import com.epmet.commons.tools.validator.group.UpdateGroup; +import com.epmet.constants.ImportTaskConstants; import com.epmet.dto.IcSuperiorResourceDTO; import com.epmet.dto.form.IcSuperiorResourceAddEditFormDTO; import com.epmet.dto.form.IcSuperiorResourceListFormDTO; import com.epmet.dto.result.IcSuperiorResourceListResultDTO; +import com.epmet.dto.result.ImportTaskCommonResultDTO; import com.epmet.excel.IcSuperiorResourceExcel; import com.epmet.service.IcSuperiorResourceService; +import com.epmet.utils.ImportTaskUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.net.URLEncoder; +import java.nio.file.Path; import java.util.Date; import java.util.List; +import java.util.UUID; /** @@ -52,7 +60,7 @@ import java.util.List; @RestController @RequestMapping("icSuperiorResource") @Slf4j -public class IcSuperiorResourceController { +public class IcSuperiorResourceController implements ResultDataResolver { @Autowired private IcSuperiorResourceService icSuperiorResourceService; @@ -159,5 +167,48 @@ public class IcSuperiorResourceController { } } + @PostMapping("import") + public Result importExcel(MultipartFile file) { + // 1.暂存文件 + String originalFilename = file.getOriginalFilename(); + String extName = originalFilename.substring(originalFilename.lastIndexOf(".")); + + Path fileSavePath; + try { + Path importPath = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_superior_resource", "import"); + fileSavePath = importPath.resolve(UUID.randomUUID().toString().concat(extName)); + } catch (IOException e) { + String errorMsg = ExceptionUtils.getErrorStackTrace(e); + log.error("【优势资源管理导入】创建临时存储文件失败:{}", errorMsg); + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "文件上传失败", "文件上传失败"); + } + + InputStream is = null; + FileOutputStream os = null; + try { + is = file.getInputStream(); + os = new FileOutputStream(fileSavePath.toString()); + IOUtils.copy(is, os); + } catch (Exception e) { + log.error("importExcel exception", e); + } finally { + org.apache.poi.util.IOUtils.closeQuietly(is); + org.apache.poi.util.IOUtils.closeQuietly(os); + } + + // 2.生成导入任务记录 + ImportTaskCommonResultDTO rstData = getResultDataOrThrowsException( + ImportTaskUtils.createImportTask(originalFilename, ImportTaskConstants.BIZ_TYPE_IC_VACCINE), + ServiceConstant.EPMET_COMMON_SERVICE, + EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), + "excel导入优势资源管理信息错误", + "导入势资源管理信息失败"); + + // 3.执行导入 + icSuperiorResourceService.importExcel(fileSavePath, rstData.getTaskId()); + + return new Result(); + } + } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcCityManagementExcel.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcCityManagementExcel.java index 07b7ceae8b..5cc3b6556f 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcCityManagementExcel.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcCityManagementExcel.java @@ -4,6 +4,8 @@ import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import lombok.Data; +import javax.validation.constraints.NotBlank; + /** * 城市管理图层 * @@ -15,10 +17,12 @@ public class IcCityManagementExcel { @ExcelProperty(value = "场所名称") @ColumnWidth(25) + @NotBlank(message = "场所名称为必填项") private String name; @ExcelProperty(value = "场所类别") @ColumnWidth(20) + @NotBlank(message = "场所类别为必填项") private String categoryName; @ExcelProperty(value = "占地面积") @@ -31,6 +35,27 @@ public class IcCityManagementExcel { @ExcelProperty(value = "地址") @ColumnWidth(25) + @NotBlank(message = "地址为必填项") private String address; + @Data + public static class RowRemarkMessage { + + @ExcelProperty("场所名称") + @ColumnWidth(20) + private String name; + + @ExcelProperty("场所类别") + @ColumnWidth(20) + private String categoryName; + + @ExcelProperty("地址") + @ColumnWidth(20) + private String address; + + @ColumnWidth(60) + @ExcelProperty("错误信息") + private String errorInfo; + } + } \ No newline at end of file diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcPublicServiceExcel.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcPublicServiceExcel.java index b8e97b24ce..9f3728cb22 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcPublicServiceExcel.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcPublicServiceExcel.java @@ -4,6 +4,8 @@ import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import lombok.Data; +import javax.validation.constraints.NotBlank; + /** * 公共服务图层 * @@ -15,10 +17,12 @@ public class IcPublicServiceExcel { @ExcelProperty(value = "场所名称") @ColumnWidth(25) + @NotBlank(message = "场所名称为必填项") private String name; @ExcelProperty(value = "场所类别") @ColumnWidth(20) + @NotBlank(message = "场所类别为必填项") private String categoryName; @ExcelProperty(value = "占地面积") @@ -31,6 +35,27 @@ public class IcPublicServiceExcel { @ExcelProperty(value = "地址") @ColumnWidth(25) + @NotBlank(message = "地址为必填项") private String address; + @Data + public static class RowRemarkMessage { + + @ExcelProperty("场所名称") + @ColumnWidth(20) + private String name; + + @ExcelProperty("场所类别") + @ColumnWidth(20) + private String categoryName; + + @ExcelProperty("地址") + @ColumnWidth(20) + private String address; + + @ColumnWidth(60) + @ExcelProperty("错误信息") + private String errorInfo; + } + } \ No newline at end of file diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcSuperiorResourceExcel.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcSuperiorResourceExcel.java index b62792ec1c..1f3b1a8667 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcSuperiorResourceExcel.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/IcSuperiorResourceExcel.java @@ -4,6 +4,8 @@ import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import lombok.Data; +import javax.validation.constraints.NotBlank; + /** * 优势资源管理 * @@ -15,10 +17,12 @@ public class IcSuperiorResourceExcel { @ExcelProperty(value = "场所名称") @ColumnWidth(25) + @NotBlank(message = "场所名称为必填项") private String name; @ExcelProperty(value = "场所类别") @ColumnWidth(20) + @NotBlank(message = "场所类别为必填项") private String categoryName; @ExcelProperty(value = "占地面积") @@ -31,7 +35,27 @@ public class IcSuperiorResourceExcel { @ExcelProperty(value = "地址") @ColumnWidth(25) + @NotBlank(message = "地址为必填项") private String address; + @Data + public static class RowRemarkMessage { + + @ExcelProperty("场所名称") + @ColumnWidth(20) + private String name; + + @ExcelProperty("场所类别") + @ColumnWidth(20) + private String categoryName; + + @ExcelProperty("地址") + @ColumnWidth(20) + private String address; + + @ColumnWidth(60) + @ExcelProperty("错误信息") + private String errorInfo; + } } \ No newline at end of file diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/handler/IcCityManagementExcelImportListener.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/handler/IcCityManagementExcelImportListener.java new file mode 100644 index 0000000000..064a322727 --- /dev/null +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/handler/IcCityManagementExcelImportListener.java @@ -0,0 +1,132 @@ +package com.epmet.excel.handler; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.read.listener.ReadListener; +import com.epmet.commons.tools.exception.ExceptionUtils; +import com.epmet.commons.tools.exception.ValidateException; +import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.commons.tools.validator.ValidatorUtils; +import com.epmet.dto.result.IcCoverageCategoryDictListResultDTO; +import com.epmet.entity.IcCityManagementEntity; +import com.epmet.excel.IcCityManagementExcel; +import com.epmet.service.CoverageService; +import com.epmet.service.impl.IcCityManagementServiceImpl; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 城市管理excel导入监听器 + */ +@Data +@Slf4j +public class IcCityManagementExcelImportListener implements ReadListener { + + //最大条数阈值 + public static final int MAX_THRESHOLD = 200; + private String currentUserId; + private String currentCustomerId; + private String currentAgencyId; + private String currentAgencyPids; + + //数据 + private List datas = new ArrayList<>(); + //错误项列表 + private List errorRows = new ArrayList<>(); + //其他被标记出来的列表列表 + private List otherRows = new ArrayList<>(); + private IcCityManagementServiceImpl IcCityManagementServiceImpl; + private CoverageService coverageService; + + public IcCityManagementExcelImportListener(String currentUserId, String currentCustomerId, String currentAgencyId, String currentAgencyPids, IcCityManagementServiceImpl IcCityManagementServiceImpl, CoverageService coverageService) { + this.currentUserId = currentUserId; + this.currentCustomerId = currentCustomerId; + this.currentAgencyId = currentAgencyId; + this.currentAgencyPids = currentAgencyPids; + this.IcCityManagementServiceImpl = IcCityManagementServiceImpl; + this.coverageService = coverageService; + } + + @Override + public void invoke(IcCityManagementExcel data, AnalysisContext context) { + + try { + // 先校验数据 + ValidatorUtils.validateEntity(data); + + // 去除前后空格 + if (StringUtils.isNotBlank(data.getName())) { + data.setName(data.getName().trim()); + } + if (StringUtils.isNotBlank(data.getCategoryName())) { + data.setCategoryName(data.getCategoryName().trim()); + } + if (StringUtils.isNotBlank(data.getAddress())) { + data.setAddress(data.getAddress().trim()); + } + + IcCityManagementEntity IcCityManagementEntity = ConvertUtils.sourceToTarget(data, IcCityManagementEntity.class); + IcCityManagementEntity.setSourceType("import"); + IcCityManagementEntity.setCategory(data.getCategoryName()); + IcCityManagementEntity.setAreaCovered(data.getAreaCoveredName()); + IcCityManagementEntity.setCapacity(data.getCapacityName()); + datas.add(IcCityManagementEntity); + + if (datas.size() == MAX_THRESHOLD) { + execPersist(); + } + } catch (Exception e) { + String errorMsg = null; + if (e instanceof ValidateException) { + errorMsg = ((ValidateException) e).getMsg(); + } else { + errorMsg = "未知错误"; + log.error("【城市管理导入】出错:{}", ExceptionUtils.getErrorStackTrace(e)); + } + + IcCityManagementExcel.RowRemarkMessage errorRow = new IcCityManagementExcel.RowRemarkMessage(); + errorRow.setName(data.getName()); + errorRow.setCategoryName(data.getCategoryName()); + errorRow.setAddress(data.getAddress()); + errorRow.setErrorInfo(errorMsg); + errorRows.add(errorRow); + } + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + // 最后几条达不到阈值,这里必须再调用一次 + execPersist(); + } + + /** + * 执行持久化 + */ + private void execPersist() { + try { + List dictList = coverageService.dictMap(currentCustomerId, "city_management"); + Map dictMap = dictList.stream().collect(Collectors.toMap(IcCoverageCategoryDictListResultDTO::getCategoryKey, IcCoverageCategoryDictListResultDTO::getCategoryName)); + datas.forEach(d -> { + d.setCategory(dictMap.get(d.getCategory())); + }); + IcCityManagementServiceImpl.insertBatch(datas); + + } finally { + datas.clear(); + } + } + + /** + * 获取错误行 + * + * @return + */ + public List getErrorRows() { + return errorRows; + } +} diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/handler/IcPublicServiceExcelImportListener.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/handler/IcPublicServiceExcelImportListener.java new file mode 100644 index 0000000000..de96036a56 --- /dev/null +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/handler/IcPublicServiceExcelImportListener.java @@ -0,0 +1,132 @@ +package com.epmet.excel.handler; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.read.listener.ReadListener; +import com.epmet.commons.tools.exception.ExceptionUtils; +import com.epmet.commons.tools.exception.ValidateException; +import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.commons.tools.validator.ValidatorUtils; +import com.epmet.dto.result.IcCoverageCategoryDictListResultDTO; +import com.epmet.entity.IcPublicServiceEntity; +import com.epmet.excel.IcPublicServiceExcel; +import com.epmet.service.CoverageService; +import com.epmet.service.impl.IcPublicServiceServiceImpl; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 公共服务管理excel导入监听器 + */ +@Data +@Slf4j +public class IcPublicServiceExcelImportListener implements ReadListener { + + //最大条数阈值 + public static final int MAX_THRESHOLD = 200; + private String currentUserId; + private String currentCustomerId; + private String currentAgencyId; + private String currentAgencyPids; + + //数据 + private List datas = new ArrayList<>(); + //错误项列表 + private List errorRows = new ArrayList<>(); + //其他被标记出来的列表列表 + private List otherRows = new ArrayList<>(); + private IcPublicServiceServiceImpl IcPublicServiceServiceImpl; + private CoverageService coverageService; + + public IcPublicServiceExcelImportListener(String currentUserId, String currentCustomerId, String currentAgencyId, String currentAgencyPids, IcPublicServiceServiceImpl IcPublicServiceServiceImpl, CoverageService coverageService) { + this.currentUserId = currentUserId; + this.currentCustomerId = currentCustomerId; + this.currentAgencyId = currentAgencyId; + this.currentAgencyPids = currentAgencyPids; + this.IcPublicServiceServiceImpl = IcPublicServiceServiceImpl; + this.coverageService = coverageService; + } + + @Override + public void invoke(IcPublicServiceExcel data, AnalysisContext context) { + + try { + // 先校验数据 + ValidatorUtils.validateEntity(data); + + // 去除前后空格 + if (StringUtils.isNotBlank(data.getName())) { + data.setName(data.getName().trim()); + } + if (StringUtils.isNotBlank(data.getCategoryName())) { + data.setCategoryName(data.getCategoryName().trim()); + } + if (StringUtils.isNotBlank(data.getAddress())) { + data.setAddress(data.getAddress().trim()); + } + + IcPublicServiceEntity IcPublicServiceEntity = ConvertUtils.sourceToTarget(data, IcPublicServiceEntity.class); + IcPublicServiceEntity.setSourceType("import"); + IcPublicServiceEntity.setCategory(data.getCategoryName()); + IcPublicServiceEntity.setAreaCovered(data.getAreaCoveredName()); + IcPublicServiceEntity.setCapacity(data.getCapacityName()); + datas.add(IcPublicServiceEntity); + + if (datas.size() == MAX_THRESHOLD) { + execPersist(); + } + } catch (Exception e) { + String errorMsg = null; + if (e instanceof ValidateException) { + errorMsg = ((ValidateException) e).getMsg(); + } else { + errorMsg = "未知错误"; + log.error("【公共服务管理导入】出错:{}", ExceptionUtils.getErrorStackTrace(e)); + } + + IcPublicServiceExcel.RowRemarkMessage errorRow = new IcPublicServiceExcel.RowRemarkMessage(); + errorRow.setName(data.getName()); + errorRow.setCategoryName(data.getCategoryName()); + errorRow.setAddress(data.getAddress()); + errorRow.setErrorInfo(errorMsg); + errorRows.add(errorRow); + } + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + // 最后几条达不到阈值,这里必须再调用一次 + execPersist(); + } + + /** + * 执行持久化 + */ + private void execPersist() { + try { + List dictList = coverageService.dictMap(currentCustomerId, "public_service"); + Map dictMap = dictList.stream().collect(Collectors.toMap(IcCoverageCategoryDictListResultDTO::getCategoryKey, IcCoverageCategoryDictListResultDTO::getCategoryName)); + datas.forEach(d -> { + d.setCategory(dictMap.get(d.getCategory())); + }); + IcPublicServiceServiceImpl.insertBatch(datas); + + } finally { + datas.clear(); + } + } + + /** + * 获取错误行 + * + * @return + */ + public List getErrorRows() { + return errorRows; + } +} diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/handler/IcSuperiorResourceExcelImportListener.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/handler/IcSuperiorResourceExcelImportListener.java new file mode 100644 index 0000000000..69ade8cc8d --- /dev/null +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/excel/handler/IcSuperiorResourceExcelImportListener.java @@ -0,0 +1,134 @@ +package com.epmet.excel.handler; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.read.listener.ReadListener; +import com.epmet.commons.tools.exception.ExceptionUtils; +import com.epmet.commons.tools.exception.ValidateException; +import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.commons.tools.validator.ValidatorUtils; +import com.epmet.dto.result.IcCoverageCategoryDictListResultDTO; +import com.epmet.dto.result.IcSuperiorResourceListResultDTO; +import com.epmet.entity.IcSuperiorResourceEntity; +import com.epmet.excel.IcSuperiorResourceExcel; +import com.epmet.service.CoverageService; +import com.epmet.service.impl.IcSuperiorResourceServiceImpl; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 优势资源管理excel导入监听器 + */ +@Data +@Slf4j +public class IcSuperiorResourceExcelImportListener implements ReadListener { + + //最大条数阈值 + public static final int MAX_THRESHOLD = 200; + private String currentUserId; + private String currentCustomerId; + private String currentAgencyId; + private String currentAgencyPids; + + //数据 + private List datas = new ArrayList<>(); + //错误项列表 + private List errorRows = new ArrayList<>(); + //其他被标记出来的列表列表 + private List otherRows = new ArrayList<>(); + private IcSuperiorResourceServiceImpl icSuperiorResourceServiceImpl; + private CoverageService coverageService; + + public IcSuperiorResourceExcelImportListener(String currentUserId, String currentCustomerId, String currentAgencyId, String currentAgencyPids, IcSuperiorResourceServiceImpl icSuperiorResourceServiceImpl, CoverageService coverageService) { + this.currentUserId = currentUserId; + this.currentCustomerId = currentCustomerId; + this.currentAgencyId = currentAgencyId; + this.currentAgencyPids = currentAgencyPids; + this.icSuperiorResourceServiceImpl = icSuperiorResourceServiceImpl; + this.coverageService = coverageService; + } + + @Override + public void invoke(IcSuperiorResourceExcel data, AnalysisContext context) { + + try { + // 先校验数据 + ValidatorUtils.validateEntity(data); + + // 去除前后空格 + if (StringUtils.isNotBlank(data.getName())) { + data.setName(data.getName().trim()); + } + if (StringUtils.isNotBlank(data.getCategoryName())) { + data.setCategoryName(data.getCategoryName().trim()); + } + if (StringUtils.isNotBlank(data.getAddress())) { + data.setAddress(data.getAddress().trim()); + } + + IcSuperiorResourceEntity icSuperiorResourceEntity = ConvertUtils.sourceToTarget(data, IcSuperiorResourceEntity.class); + icSuperiorResourceEntity.setSourceType("import"); + icSuperiorResourceEntity.setCategory(data.getCategoryName()); + icSuperiorResourceEntity.setAreaCovered(data.getAreaCoveredName()); + icSuperiorResourceEntity.setCapacity(data.getCapacityName()); + datas.add(icSuperiorResourceEntity); + + if (datas.size() == MAX_THRESHOLD) { + execPersist(); + } + } catch (Exception e) { + String errorMsg = null; + if (e instanceof ValidateException) { + errorMsg = ((ValidateException) e).getMsg(); + } else { + errorMsg = "未知错误"; + log.error("【优势资源管理导入】出错:{}", ExceptionUtils.getErrorStackTrace(e)); + } + + IcSuperiorResourceExcel.RowRemarkMessage errorRow = new IcSuperiorResourceExcel.RowRemarkMessage(); + errorRow.setName(data.getName()); + errorRow.setCategoryName(data.getCategoryName()); + errorRow.setAddress(data.getAddress()); + errorRow.setErrorInfo(errorMsg); + errorRows.add(errorRow); + } + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + // 最后几条达不到阈值,这里必须再调用一次 + execPersist(); + } + + /** + * 执行持久化 + */ + private void execPersist() { + try { + List dictList = coverageService.dictMap(currentCustomerId, "superior_resource"); + Map dictMap = dictList.stream().collect(Collectors.toMap(IcCoverageCategoryDictListResultDTO::getCategoryKey, IcCoverageCategoryDictListResultDTO::getCategoryName)); + datas.forEach(d -> { + d.setCategory(dictMap.get(d.getCategory())); + }); + icSuperiorResourceServiceImpl.insertBatch(datas); + + } finally { + datas.clear(); + } + } + + /** + * 获取错误行 + * + * @return + */ + public List getErrorRows() { + return errorRows; + } +} diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcCityManagementService.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcCityManagementService.java index 5b5c6ab410..f14db83adb 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcCityManagementService.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/IcCityManagementService.java @@ -8,6 +8,8 @@ import com.epmet.dto.form.IcCityManagementListFormDTO; import com.epmet.dto.result.IcCityManagementListResultDTO; import com.epmet.entity.IcCityManagementEntity; +import java.nio.file.Path; + /** * 城市管理图层 * @@ -67,4 +69,5 @@ public interface IcCityManagementService extends BaseService implements IcCityManagementService { @Autowired private CoverageService coverageService; + @Autowired + private OssFeignClient ossFeignClient; + @Autowired + private EpmetCommonServiceOpenFeignClient commonServiceOpenFeignClient; @Override @@ -160,5 +191,103 @@ public class IcCityManagementServiceImpl extends BaseServiceImpl errorRows = listener.getErrorRows(); + List otherRows = listener.getOtherRows(); + + boolean failed = errorRows.size() > 0; + + // 合并到一起写入 + errorRows.addAll(otherRows); + + // 生成并上传描述文件 + OutputStream os = null; + FileItem fileItem = null; + if (errorRows.size() > 0) { + try { + // 文件生成 + Path errorDescDir = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_ity_management", "import", "error_des"); + String fileName = UUID.randomUUID().toString().concat(".xlsx"); + + fileItem = new DiskFileItemFactory(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, errorDescDir.toFile()) + .createItem("file", ContentType.APPLICATION_OCTET_STREAM.toString(), false, fileName); + os = fileItem.getOutputStream(); + + EasyExcel.write(os, IcCityManagementExcel.RowRemarkMessage.class).sheet("信息列表").doWrite(errorRows); + // 文件上传oss + Result errorDesFileUploadResult = ossFeignClient.uploadImportTaskDescFile(new CommonsMultipartFile(fileItem)); + if (errorDesFileUploadResult.success()) { + errorDesFileUrl = errorDesFileUploadResult.getData().getUrl(); + } + + } finally { + IOUtils.closeQuietly(os); + if (!fileItem.isInMemory()) { + try { + fileItem.delete(); + } catch (Exception e) { + log.error("【城市管理导入】删除错误描述临时文件失败:{}", ExceptionUtils.getErrorStackTrace(e)); + } + } + } + } + + Result result = ImportTaskUtils.finishImportTask( + importTaskId, + failed ? ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL : ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS, + errorDesFileUrl, + ""); + + if (!result.success()) { + log.error("【城市管理导入】finishImportTask失败"); + } + } catch (Exception e) { + String errorMsg = ExceptionUtils.getErrorStackTrace(e); + log.error("【城市管理导入】出错:{}", errorMsg); + + ImportTaskCommonFormDTO importFinishTaskForm = new ImportTaskCommonFormDTO(); + importFinishTaskForm.setTaskId(importTaskId); + importFinishTaskForm.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL); + importFinishTaskForm.setOperatorId(userId); + importFinishTaskForm.setResultDesc("导入失败"); + + Result result = commonServiceOpenFeignClient.finishImportTask(importFinishTaskForm); + if (!result.success()) { + log.error("【城市管理导入】导入记录状态修改为'完成'失败"); + } + } finally { + // 删除临时文件 + if (Files.exists(filePath)) { + try { + Files.delete(filePath); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + } + + } \ No newline at end of file diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcPublicServiceServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcPublicServiceServiceImpl.java index 13630ad5aa..9131912181 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcPublicServiceServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcPublicServiceServiceImpl.java @@ -1,35 +1,60 @@ package com.epmet.service.impl; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.commons.tools.constant.AppClientConstant; import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; 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.page.PageData; import com.epmet.commons.tools.redis.common.CustomerStaffRedis; import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.commons.tools.utils.EpmetRequestHolder; +import com.epmet.commons.tools.utils.FileUtils; +import com.epmet.commons.tools.utils.Result; +import com.epmet.constants.ImportTaskConstants; import com.epmet.dao.IcPublicServiceDao; import com.epmet.dto.IcPublicServiceDTO; import com.epmet.dto.form.IcPublicServiceAddEditFormDTO; import com.epmet.dto.form.IcPublicServiceListFormDTO; +import com.epmet.dto.form.ImportTaskCommonFormDTO; import com.epmet.dto.result.IcCoverageCategoryDictListResultDTO; import com.epmet.dto.result.IcPublicServiceListResultDTO; -import com.epmet.dto.result.IcSuperiorResourceListResultDTO; +import com.epmet.dto.result.UploadImgResultDTO; import com.epmet.entity.IcPublicServiceEntity; +import com.epmet.excel.IcPublicServiceExcel; +import com.epmet.excel.handler.IcPublicServiceExcelImportListener; +import com.epmet.feign.EpmetCommonServiceOpenFeignClient; +import com.epmet.feign.OssFeignClient; import com.epmet.service.CoverageService; import com.epmet.service.IcPublicServiceService; +import com.epmet.utils.ImportTaskUtils; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.lang3.StringUtils; +import org.apache.http.entity.ContentType; +import org.apache.poi.util.IOUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.commons.CommonsMultipartFile; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.stream.Collectors; /** @@ -39,10 +64,15 @@ import java.util.stream.Collectors; * @since v1.0.0 2022-06-16 */ @Service +@Slf4j public class IcPublicServiceServiceImpl extends BaseServiceImpl implements IcPublicServiceService { @Autowired private CoverageService coverageService; + @Autowired + private OssFeignClient ossFeignClient; + @Autowired + private EpmetCommonServiceOpenFeignClient commonServiceOpenFeignClient; @Override @@ -162,4 +192,101 @@ public class IcPublicServiceServiceImpl extends BaseServiceImpl errorRows = listener.getErrorRows(); + List otherRows = listener.getOtherRows(); + + boolean failed = errorRows.size() > 0; + + // 合并到一起写入 + errorRows.addAll(otherRows); + + // 生成并上传描述文件 + OutputStream os = null; + FileItem fileItem = null; + if (errorRows.size() > 0) { + try { + // 文件生成 + Path errorDescDir = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_superior_resource", "import", "error_des"); + String fileName = UUID.randomUUID().toString().concat(".xlsx"); + + fileItem = new DiskFileItemFactory(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, errorDescDir.toFile()) + .createItem("file", ContentType.APPLICATION_OCTET_STREAM.toString(), false, fileName); + os = fileItem.getOutputStream(); + + EasyExcel.write(os, IcPublicServiceExcel.RowRemarkMessage.class).sheet("信息列表").doWrite(errorRows); + // 文件上传oss + Result errorDesFileUploadResult = ossFeignClient.uploadImportTaskDescFile(new CommonsMultipartFile(fileItem)); + if (errorDesFileUploadResult.success()) { + errorDesFileUrl = errorDesFileUploadResult.getData().getUrl(); + } + + } finally { + IOUtils.closeQuietly(os); + if (!fileItem.isInMemory()) { + try { + fileItem.delete(); + } catch (Exception e) { + log.error("【公共服务管理导入】删除错误描述临时文件失败:{}", ExceptionUtils.getErrorStackTrace(e)); + } + } + } + } + + Result result = ImportTaskUtils.finishImportTask( + importTaskId, + failed ? ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL : ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS, + errorDesFileUrl, + ""); + + if (!result.success()) { + log.error("【公共服务管理导入】finishImportTask失败"); + } + } catch (Exception e) { + String errorMsg = ExceptionUtils.getErrorStackTrace(e); + log.error("【公共服务管理导入】出错:{}", errorMsg); + + ImportTaskCommonFormDTO importFinishTaskForm = new ImportTaskCommonFormDTO(); + importFinishTaskForm.setTaskId(importTaskId); + importFinishTaskForm.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL); + importFinishTaskForm.setOperatorId(userId); + importFinishTaskForm.setResultDesc("导入失败"); + + Result result = commonServiceOpenFeignClient.finishImportTask(importFinishTaskForm); + if (!result.success()) { + log.error("【公共服务管理导入】导入记录状态修改为'完成'失败"); + } + } finally { + // 删除临时文件 + if (Files.exists(filePath)) { + try { + Files.delete(filePath); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + } + } \ No newline at end of file diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcSuperiorResourceServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcSuperiorResourceServiceImpl.java index 3e306a1826..873b17157e 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcSuperiorResourceServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcSuperiorResourceServiceImpl.java @@ -1,35 +1,60 @@ package com.epmet.service.impl; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.commons.tools.constant.AppClientConstant; import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; 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.page.PageData; import com.epmet.commons.tools.redis.common.CustomerStaffRedis; import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.commons.tools.utils.EpmetRequestHolder; +import com.epmet.commons.tools.utils.FileUtils; +import com.epmet.commons.tools.utils.Result; +import com.epmet.constants.ImportTaskConstants; import com.epmet.dao.IcSuperiorResourceDao; import com.epmet.dto.IcSuperiorResourceDTO; import com.epmet.dto.form.IcSuperiorResourceAddEditFormDTO; import com.epmet.dto.form.IcSuperiorResourceListFormDTO; +import com.epmet.dto.form.ImportTaskCommonFormDTO; import com.epmet.dto.result.IcCoverageCategoryDictListResultDTO; import com.epmet.dto.result.IcSuperiorResourceListResultDTO; -import com.epmet.dto.result.StaffRoleResultDTO; +import com.epmet.dto.result.UploadImgResultDTO; import com.epmet.entity.IcSuperiorResourceEntity; +import com.epmet.excel.IcSuperiorResourceExcel; +import com.epmet.excel.handler.IcSuperiorResourceExcelImportListener; +import com.epmet.feign.EpmetCommonServiceOpenFeignClient; +import com.epmet.feign.OssFeignClient; import com.epmet.service.CoverageService; import com.epmet.service.IcSuperiorResourceService; +import com.epmet.utils.ImportTaskUtils; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.lang3.StringUtils; +import org.apache.http.entity.ContentType; +import org.apache.poi.util.IOUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.commons.CommonsMultipartFile; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.stream.Collectors; /** @@ -39,10 +64,15 @@ import java.util.stream.Collectors; * @since v1.0.0 2022-06-16 */ @Service +@Slf4j public class IcSuperiorResourceServiceImpl extends BaseServiceImpl implements IcSuperiorResourceService { @Autowired private CoverageService coverageService; + @Autowired + private OssFeignClient ossFeignClient; + @Autowired + private EpmetCommonServiceOpenFeignClient commonServiceOpenFeignClient; @Override @@ -162,4 +192,102 @@ public class IcSuperiorResourceServiceImpl extends BaseServiceImpl errorRows = listener.getErrorRows(); + List otherRows = listener.getOtherRows(); + + boolean failed = errorRows.size() > 0; + + // 合并到一起写入 + errorRows.addAll(otherRows); + + // 生成并上传描述文件 + OutputStream os = null; + FileItem fileItem = null; + if (errorRows.size() > 0) { + try { + // 文件生成 + Path errorDescDir = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_superior_resource", "import", "error_des"); + String fileName = UUID.randomUUID().toString().concat(".xlsx"); + + fileItem = new DiskFileItemFactory(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, errorDescDir.toFile()) + .createItem("file", ContentType.APPLICATION_OCTET_STREAM.toString(), false, fileName); + os = fileItem.getOutputStream(); + + EasyExcel.write(os, IcSuperiorResourceExcel.RowRemarkMessage.class).sheet("信息列表").doWrite(errorRows); + // 文件上传oss + Result errorDesFileUploadResult = ossFeignClient.uploadImportTaskDescFile(new CommonsMultipartFile(fileItem)); + if (errorDesFileUploadResult.success()) { + errorDesFileUrl = errorDesFileUploadResult.getData().getUrl(); + } + + } finally { + IOUtils.closeQuietly(os); + if (!fileItem.isInMemory()) { + try { + fileItem.delete(); + } catch (Exception e) { + log.error("【优势资源管理导入】删除错误描述临时文件失败:{}", ExceptionUtils.getErrorStackTrace(e)); + } + } + } + } + + Result result = ImportTaskUtils.finishImportTask( + importTaskId, + failed ? ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL : ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS, + errorDesFileUrl, + ""); + + if (!result.success()) { + log.error("【优势资源管理导入】finishImportTask失败"); + } + } catch (Exception e) { + String errorMsg = ExceptionUtils.getErrorStackTrace(e); + log.error("【优势资源管理导入】出错:{}", errorMsg); + + ImportTaskCommonFormDTO importFinishTaskForm = new ImportTaskCommonFormDTO(); + importFinishTaskForm.setTaskId(importTaskId); + importFinishTaskForm.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL); + importFinishTaskForm.setOperatorId(userId); + importFinishTaskForm.setResultDesc("导入失败"); + + Result result = commonServiceOpenFeignClient.finishImportTask(importFinishTaskForm); + if (!result.success()) { + log.error("【优势资源管理导入】导入记录状态修改为'完成'失败"); + } + } finally { + // 删除临时文件 + if (Files.exists(filePath)) { + try { + Files.delete(filePath); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + } + + } \ No newline at end of file