From 76877714ac9abb1a0545fcdc5396d543d53b820d Mon Sep 17 00:00:00 2001
From: zxc <1272811460@qq.com>
Date: Tue, 22 Feb 2022 10:33:20 +0800
Subject: [PATCH] errorInfo
---
 epmet-module/gov-org/gov-org-server/pom.xml   |  5 ++
 .../constant/ImportErrorMsgConstants.java     |  6 ++
 .../com/epmet/controller/HouseController.java | 19 +++--
 .../epmet/model/BuildingErrorInfoModel.java   |  7 +-
 .../com/epmet/model/HouseErrorInfoModel.java  | 11 +--
 .../model/ImportBuildingInfoListener.java     | 54 ++++++++++----
 .../epmet/model/ImportHouseInfoListener.java  | 55 +++++++++++----
 .../model/ImportNeighborHoodInfoListener.java | 44 +++++++++---
 .../model/NeighborHoodErrorInfoModel.java     |  5 +-
 .../epmet/service/IcNeighborHoodService.java  |  3 +
 .../service/impl/BuildingServiceImpl.java     | 20 ++++--
 .../impl/IcNeighborHoodServiceImpl.java       | 70 ++++++++++++++++++-
 12 files changed, 239 insertions(+), 60 deletions(-)
diff --git a/epmet-module/gov-org/gov-org-server/pom.xml b/epmet-module/gov-org/gov-org-server/pom.xml
index 094292fe13..0a13f2a38d 100644
--- a/epmet-module/gov-org/gov-org-server/pom.xml
+++ b/epmet-module/gov-org/gov-org-server/pom.xml
@@ -33,6 +33,11 @@
             epmet-commons-dynamic-datasource
             2.0.0
         
+        
+            com.epmet
+            epmet-oss-client
+            2.0.0
+        
         
             org.springframework.boot
             spring-boot-starter-web
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/ImportErrorMsgConstants.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/ImportErrorMsgConstants.java
index d49715e330..76f69d819e 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/ImportErrorMsgConstants.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/ImportErrorMsgConstants.java
@@ -7,6 +7,12 @@ package com.epmet.constant;
  */
 public interface ImportErrorMsgConstants {
 
+    String EXIST_ERROR = "数据已存在";
 
+    String HOUSE_ERROR = "所属组织、所属网格、所属小区、所属楼栋、单元号、房屋类型、房屋用途、出租、房主姓名、房主电话、房主身份证的值未填写,或者所填写信息在系统中未找到";
+
+    String BUILDING_ERROR = "所属组织、所属网格、所属小区、楼栋类型、单元数的值未填写,或者所填写信息在系统中未找到";
+
+    String NEIGHBOR_HOOD_ERROR = "所属组织、所属网格、详细地址的值未填写,或者所填写信息在系统中未找到";
 
 }
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java
index 017da95fd9..026948d385 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java
@@ -27,17 +27,17 @@ 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.feign.ResultDataResolver;
 import com.epmet.commons.tools.security.dto.TokenDto;
 import com.epmet.commons.tools.utils.Result;
 import com.epmet.commons.tools.validator.ValidatorUtils;
+import com.epmet.constants.ImportTaskConstants;
 import com.epmet.dao.IcBuildingDao;
 import com.epmet.dto.form.*;
-import com.epmet.dto.result.HouseInfoDTO;
-import com.epmet.dto.result.IcNeighborHoodResultDTO;
-import com.epmet.dto.result.ImportResultDTO;
-import com.epmet.dto.result.LoginUserDetailsResultDTO;
+import com.epmet.dto.result.*;
 import com.epmet.excel.IcHouseExcel;
+import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
 import com.epmet.feign.EpmetUserOpenFeignClient;
 import com.epmet.feign.GovOrgOpenFeignClient;
 import com.epmet.model.HouseInfoModel;
@@ -85,6 +85,8 @@ public class HouseController implements ResultDataResolver {
     private IcNeighborHoodService neighborHoodService;
     @Autowired
     private IcHouseService icHouseService;
+    @Autowired
+    private EpmetCommonServiceOpenFeignClient epmetCommonServiceOpenFeignClient;
 
 
     @PostMapping("houselist")
@@ -266,10 +268,17 @@ public class HouseController implements ResultDataResolver {
             } catch (IOException e) {
                 return new Result().error("读取文件失败");
             }
+            ImportTaskCommonFormDTO importFormDTO = new ImportTaskCommonFormDTO();
+            importFormDTO.setBizType(ImportTaskConstants.BIZ_TYPE_HOUSE);
+            importFormDTO.setOperatorId(formDTO.getUserId());
+            Result importTask = epmetCommonServiceOpenFeignClient.createImportTask(importFormDTO);
+            if (!importTask.success()){
+                throw new EpmetException("创建任务失败");
+            }
             excelReader = EasyExcel.read(inputStream).build();
             // 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
             ReadSheet readSheet = EasyExcel.readSheet(0).head(HouseInfoModel.class)
-                    .registerReadListener(new ImportHouseInfoListener(formDTO,icBuildingDao,icHouseRedis,neighborHoodService,icHouseService))
+                    .registerReadListener(new ImportHouseInfoListener(formDTO,icBuildingDao,icHouseRedis,neighborHoodService,icHouseService,epmetCommonServiceOpenFeignClient,importTask.getData().getTaskId()))
                     .build();
             excelReader.read(readSheet);
         } finally {
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/BuildingErrorInfoModel.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/BuildingErrorInfoModel.java
index e7db295a7e..d85a95854f 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/BuildingErrorInfoModel.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/BuildingErrorInfoModel.java
@@ -1,5 +1,6 @@
 package com.epmet.model;
 
+import cn.afterturn.easypoi.excel.annotation.Excel;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 
@@ -11,13 +12,13 @@ import lombok.Data;
 @Data
 public class BuildingErrorInfoModel {
 
-    @ExcelProperty(value = "小区名称")
+    @Excel(name = "小区名称")
     private String neighborHoodName;
 
-    @ExcelProperty(value = "楼栋名称")
+    @Excel(name = "楼栋名称")
     private String buildingName;
 
-    @ExcelProperty(value = "错误信息")
+    @Excel(name = "错误信息")
     private String errorMsg;
 
 }
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/HouseErrorInfoModel.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/HouseErrorInfoModel.java
index 9cb84948c5..c050e3a8e4 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/HouseErrorInfoModel.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/HouseErrorInfoModel.java
@@ -1,5 +1,6 @@
 package com.epmet.model;
 
+import cn.afterturn.easypoi.excel.annotation.Excel;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 import org.hibernate.validator.constraints.Length;
@@ -12,19 +13,19 @@ import org.hibernate.validator.constraints.Length;
 @Data
 public class HouseErrorInfoModel {
 
-    @ExcelProperty(value = "所属小区")
+    @Excel(name = "所属小区")
     private String neighborHoodName;
 
-    @ExcelProperty(value = "所属楼栋")
+    @Excel(name = "所属楼栋")
     private String buildingName;
 
-    @ExcelProperty(value = "单元号")
+    @Excel(name = "单元号")
     private Integer buildingUnit;
 
-    @ExcelProperty(value = "门牌号")
+    @Excel(name = "门牌号")
     private String doorName;
 
-    @ExcelProperty(value = "错误信息")
+    @Excel(name = "错误信息")
     private String errorMsg;
 
 }
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportBuildingInfoListener.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportBuildingInfoListener.java
index 63e5f39000..73f4a18b84 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportBuildingInfoListener.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/model/ImportBuildingInfoListener.java
@@ -9,20 +9,22 @@ import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache;
 import com.epmet.commons.tools.redis.common.bean.GridInfoCache;
 import com.epmet.commons.tools.utils.ConvertUtils;
 import com.epmet.constant.CustomerGridConstant;
+import com.epmet.constant.ImportErrorMsgConstants;
+import com.epmet.constants.ImportTaskConstants;
 import com.epmet.dao.IcBuildingDao;
 import com.epmet.dto.ImportGeneralDTO;
 import com.epmet.dto.form.ImportInfoFormDTO;
+import com.epmet.dto.form.ImportTaskCommonFormDTO;
 import com.epmet.dto.result.ImportResultDTO;
 import com.epmet.enums.BuildingTypeEnums;
+import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
 import com.epmet.redis.IcHouseRedis;
 import com.epmet.service.IcNeighborHoodService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.util.CollectionUtils;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.io.IOException;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -36,6 +38,7 @@ public class ImportBuildingInfoListener extends AnalysisEventListener errorInfos = new ArrayList<>();
     BuildingInfoModel info = null;
+    String taskId = "";
 
     List needDisposeList = new ArrayList<>();
     List needInsertList = new ArrayList<>();
@@ -56,12 +59,15 @@ public class ImportBuildingInfoListener extends AnalysisEventListener {
                     nums.add(e.getNum());
-                    disposeErrorMsg(info,"");
+                    disposeErrorMsg(info,ImportErrorMsgConstants.EXIST_ERROR);
                 });
             }
         }
@@ -163,7 +169,7 @@ public class ImportBuildingInfoListener extends AnalysisEventListener errorInfos = new ArrayList<>();
     HouseInfoModel info = null;
+    String taskId = "";
 
     List needDisposeList = new ArrayList<>();
     List needInsertList = new ArrayList<>();
@@ -61,13 +67,16 @@ public class ImportHouseInfoListener extends AnalysisEventListener errorInfos = new ArrayList<>();
     NeighborHoodInfoModel info = null;
+    String taskId = "";
 
     List needDisposeList = new ArrayList<>();
     List needInsertList = new ArrayList<>();
@@ -57,13 +63,16 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener {
                     nums.add(e.getNum());
-                    disposeErrorMsg(info,"");
+                    disposeErrorMsg(info,ImportErrorMsgConstants.EXIST_ERROR);
                 });
             }
             List notExistList = groupByBuildingExistStatus.get(false);
@@ -178,7 +186,7 @@ public class ImportNeighborHoodInfoListener extends AnalysisEventListener
     void insertPropertyManagement(List propertyManagementEntities);
 
     void neighborHoodPropertyInsert(List entities);
+
+     String orgGeneralImport(Collection> errorRows, Class tClass) throws IOException;
 }
\ No newline at end of file
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/BuildingServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/BuildingServiceImpl.java
index 15daabf246..e1ee7204d5 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/BuildingServiceImpl.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/BuildingServiceImpl.java
@@ -13,24 +13,25 @@ import com.epmet.commons.tools.constant.NumConstant;
 import com.epmet.commons.tools.constant.StrConstant;
 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.RenException;
 import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
 import com.epmet.commons.tools.utils.ConvertUtils;
 import com.epmet.commons.tools.utils.Result;
+import com.epmet.constants.ImportTaskConstants;
 import com.epmet.dao.*;
 import com.epmet.dto.BuildingTreeLevelDTO;
 import com.epmet.dto.CustomerStaffAgencyDTO;
 import com.epmet.dto.IcBuildingDTO;
 import com.epmet.dto.form.IcBulidingFormDTO;
 import com.epmet.dto.form.ImportInfoFormDTO;
+import com.epmet.dto.form.ImportTaskCommonFormDTO;
 import com.epmet.dto.form.ListIcNeighborHoodFormDTO;
-import com.epmet.dto.result.BuildingResultDTO;
-import com.epmet.dto.result.BuildingResultPagedDTO;
-import com.epmet.dto.result.IcNeighborHoodResultDTO;
-import com.epmet.dto.result.ImportResultDTO;
+import com.epmet.dto.result.*;
 import com.epmet.entity.*;
 import com.epmet.enums.BuildingTypeEnums;
 import com.epmet.excel.IcBuildingExcel;
+import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
 import com.epmet.model.BuildingInfoModel;
 import com.epmet.model.HouseInfoModel;
 import com.epmet.model.ImportBuildingInfoListener;
@@ -89,6 +90,8 @@ public class BuildingServiceImpl implements BuildingService {
     private IcHouseRedis icHouseRedis;
     @Autowired
     private IcNeighborHoodService neighborHoodService;
+    @Autowired
+    private EpmetCommonServiceOpenFeignClient epmetCommonServiceOpenFeignClient;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -406,10 +409,17 @@ public class BuildingServiceImpl implements BuildingService {
             } catch (IOException e) {
                 return new Result().error("读取文件失败");
             }
+            ImportTaskCommonFormDTO importFormDTO = new ImportTaskCommonFormDTO();
+            importFormDTO.setBizType(ImportTaskConstants.BIZ_TYPE_NEIGHBOR_HOOD);
+            importFormDTO.setOperatorId(formDTO.getUserId());
+            Result importTask = epmetCommonServiceOpenFeignClient.createImportTask(importFormDTO);
+            if (!importTask.success()){
+                throw new EpmetException("创建任务失败");
+            }
             excelReader = EasyExcel.read(inputStream).build();
             // 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
             ReadSheet readSheet = EasyExcel.readSheet(0).head(BuildingInfoModel.class)
-                    .registerReadListener(new ImportBuildingInfoListener(formDTO,icHouseRedis,icBuildingDao,neighborHoodService))
+                    .registerReadListener(new ImportBuildingInfoListener(formDTO,icHouseRedis,icBuildingDao,neighborHoodService,epmetCommonServiceOpenFeignClient,importTask.getData().getTaskId()))
                     .build();
             excelReader.read(readSheet);
         } finally {
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java
index 99db449d72..5b22e65a97 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java
@@ -17,7 +17,8 @@
 
 package com.epmet.service.impl;
 
-import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.ExcelReader;
 import com.alibaba.excel.read.metadata.ReadSheet;
@@ -31,6 +32,7 @@ import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
 import com.epmet.commons.tools.dto.result.OptionResultDTO;
 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.CustomerOrgRedis;
 import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
@@ -39,16 +41,22 @@ import com.epmet.commons.tools.redis.common.bean.GridInfoCache;
 import com.epmet.commons.tools.utils.ConvertUtils;
 import com.epmet.commons.tools.utils.Result;
 import com.epmet.constant.CustomerGridConstant;
+import com.epmet.constants.ImportTaskConstants;
 import com.epmet.dao.CustomerGridDao;
 import com.epmet.dao.IcBuildingDao;
 import com.epmet.dao.IcNeighborHoodDao;
 import com.epmet.dao.IcPropertyManagementDao;
 import com.epmet.dto.*;
 import com.epmet.dto.form.ImportInfoFormDTO;
+import com.epmet.dto.form.ImportTaskCommonFormDTO;
 import com.epmet.dto.result.ImportResultDTO;
+import com.epmet.dto.result.ImportTaskCommonResultDTO;
 import com.epmet.dto.result.InfoByNamesResultDTO;
+import com.epmet.dto.result.UploadImgResultDTO;
 import com.epmet.entity.*;
 import com.epmet.excel.IcNeighborHoodExcel;
+import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
+import com.epmet.feign.OssFeignClient;
 import com.epmet.model.ImportNeighborHoodInfoListener;
 import com.epmet.model.NeighborHoodInfoModel;
 import com.epmet.redis.IcHouseRedis;
@@ -58,14 +66,21 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.ListUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.http.entity.ContentType;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.tomcat.util.http.fileupload.FileItemFactory;
+import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
 import javax.annotation.Resource;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -95,6 +110,10 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl page(Map params) {
@@ -396,10 +415,17 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl().error("读取文件失败");
             }
+            ImportTaskCommonFormDTO importFormDTO = new ImportTaskCommonFormDTO();
+            importFormDTO.setBizType(ImportTaskConstants.BIZ_TYPE_NEIGHBOR_HOOD);
+            importFormDTO.setOperatorId(formDTO.getUserId());
+            Result importTask = epmetCommonServiceOpenFeignClient.createImportTask(importFormDTO);
+            if (!importTask.success()){
+                throw new EpmetException("创建任务失败");
+            }
             excelReader = EasyExcel.read(inputStream).build();
             // 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
             ReadSheet readSheet = EasyExcel.readSheet(0).head(NeighborHoodInfoModel.class)
-                    .registerReadListener(new ImportNeighborHoodInfoListener(formDTO,icHouseRedis,icBuildingDao,this,propertyManagementDao))
+                    .registerReadListener(new ImportNeighborHoodInfoListener(formDTO,icHouseRedis,icBuildingDao,this,propertyManagementDao,epmetCommonServiceOpenFeignClient,importTask.getData().getTaskId()))
                     .build();
             excelReader.read(readSheet);
         } finally {
@@ -609,4 +635,44 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl String orgGeneralImport(Collection> errorRows, Class tClass) throws IOException {
+        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("导入失败的数据列表","导入失败的数据列表"),
+                tClass, errorRows);
+
+        // 文件名
+        String resultDescFileName = UUID.randomUUID().toString().concat(".xls");
+
+        FileItemFactory factory = new DiskFileItemFactory(16, null);
+        FileItem fileItem = (FileItem) factory.createItem("file", ContentType.APPLICATION_OCTET_STREAM.toString(), true, resultDescFileName);
+        OutputStream os = fileItem.getOutputStream();
+        Result uploadResult = null;
+        try {
+            workbook.write(os);
+            uploadResult = ossFeignClient.uploadImportTaskDescFile(new CommonsMultipartFile(fileItem));
+        } catch (Exception e) {
+            String errormsg = ExceptionUtils.getErrorStackTrace(e);
+            log.error("【居民信息导入】上传错误描述文件:{}", errormsg);
+        } finally {
+            try {
+                os.close();
+            } catch (IOException e) {
+                String errormsg = ExceptionUtils.getErrorStackTrace(e);
+                log.error("【居民信息导入】上传错误描述文件关闭输出流:{}", errormsg);
+            }
+            try {
+                fileItem.delete();
+            } catch (Exception e) {
+                String errormsg = ExceptionUtils.getErrorStackTrace(e);
+                log.error("【居民信息导入】上传错误描述文件删除临时文件:{}", errormsg);
+            }
+        }
+
+        if (uploadResult == null || !uploadResult.success()) {
+            log.error("【居民信息导入】调用OSS上传结果描述文件失败");
+            return null;
+        }
+        return uploadResult.getData().getUrl();
+    }
+
 }