From 2d36e077aae02f484d5c29dd34b8e6917c96c69c Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Wed, 24 Aug 2022 11:06:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=9C=AA=E5=AE=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/constants/ImportTaskConstants.java | 5 + .../controller/IcSocietyOrgController.java | 76 ++++++++++- .../excel/IcSocietyOrgImportExcelDTO.java | 75 +++++++++++ .../epmet/service/IcSocietyOrgService.java | 10 ++ .../service/impl/IcSocietyOrgServiceImpl.java | 120 +++++++++++++++++- .../templates/societyorg_import_template.xlsx | Bin 8953 -> 8928 bytes 6 files changed, 276 insertions(+), 10 deletions(-) create mode 100644 epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgImportExcelDTO.java diff --git a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/constants/ImportTaskConstants.java b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/constants/ImportTaskConstants.java index 2108042cd6..705b037699 100644 --- a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/constants/ImportTaskConstants.java +++ b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/constants/ImportTaskConstants.java @@ -62,4 +62,9 @@ public interface ImportTaskConstants { * 城市管理 */ String IC_CITY_MANAGEMENT = "ic_city_management"; + + /** + * 社会组织 + */ + String IC_SOCIETY_ORG="ic_society_org"; } diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcSocietyOrgController.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcSocietyOrgController.java index b08541a972..8c30990fc9 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcSocietyOrgController.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcSocietyOrgController.java @@ -23,22 +23,30 @@ import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.fastjson.JSON; import com.epmet.commons.tools.annotation.LoginUser; +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.security.dto.TokenDto; 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.constants.ImportTaskConstants; import com.epmet.dto.IcSocietyOrgDTO; import com.epmet.dto.form.AddSocietyOrgFormDTO; import com.epmet.dto.form.EditSocietyOrgFormDTO; import com.epmet.dto.form.GetListSocietyOrgFormDTO; +import com.epmet.dto.form.ImportTaskCommonFormDTO; import com.epmet.dto.form.demand.ServiceQueryFormDTO; import com.epmet.dto.result.GetListSocietyOrgResultDTO; +import com.epmet.dto.result.ImportTaskCommonResultDTO; import com.epmet.dto.result.demand.OptionDTO; import com.epmet.excel.IcSocietyOrgExcel; import com.epmet.excel.IcSocietyOrgExportExcel; +import com.epmet.feign.EpmetCommonServiceOpenFeignClient; import com.epmet.service.IcSocietyOrgService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; @@ -50,15 +58,14 @@ 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.text.ParseException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @@ -71,11 +78,12 @@ import java.util.stream.Collectors; @Slf4j @RestController @RequestMapping("societyorg") -public class IcSocietyOrgController { +public class IcSocietyOrgController implements ResultDataResolver { @Autowired private IcSocietyOrgService societyOrgService; - + @Autowired + private EpmetCommonServiceOpenFeignClient commonServiceOpenFeignClient; /** * @Author sun * @Description 新增社会组织 @@ -195,6 +203,7 @@ public class IcSocietyOrgController { } /** + * 废弃此方法用下面的importV2 * @Author sun * @Description 九小场所下组织列表导入 **/ @@ -250,5 +259,60 @@ public class IcSocietyOrgController { } } + /** + * + * @param tokenDto + * @param file + * @return + */ + @PostMapping("importV2") + public Result importExcelV2(@LoginUser TokenDto tokenDto, @RequestPart("file") MultipartFile file) { + String userId = EpmetRequestHolder.getHeader(AppClientConstant.USER_ID); + + // 1.暂存文件 + String originalFilename = file.getOriginalFilename(); + String extName = originalFilename.substring(originalFilename.lastIndexOf(".")); + + Path fileSavePath; + try { + Path importPath = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_society_org", "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("【社会组织】导入method exception", e); + } finally { + org.apache.poi.util.IOUtils.closeQuietly(is); + org.apache.poi.util.IOUtils.closeQuietly(os); + } + + // 2.生成导入任务记录 + ImportTaskCommonFormDTO importTaskForm = new ImportTaskCommonFormDTO(); + importTaskForm.setOperatorId(userId); + importTaskForm.setBizType(ImportTaskConstants.IC_SOCIETY_ORG); + importTaskForm.setOriginFileName(originalFilename); + + ImportTaskCommonResultDTO rstData = getResultDataOrThrowsException(commonServiceOpenFeignClient.createImportTask(importTaskForm), + ServiceConstant.EPMET_COMMON_SERVICE, + EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), + "excel导入社会组织错误", + "社会组织导入失败"); + + // 3.执行导入 + societyOrgService.execAsyncExcelImport(fileSavePath, rstData.getTaskId(),tokenDto.getCustomerId(),tokenDto.getUserId()); + return new Result(); + } + } diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgImportExcelDTO.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgImportExcelDTO.java new file mode 100644 index 0000000000..284f6d024d --- /dev/null +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcSocietyOrgImportExcelDTO.java @@ -0,0 +1,75 @@ +package com.epmet.excel; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; + +/** + * @Description + * @Author yzm + * @Date 2022/8/24 10:46 + */ +@Data +public class IcSocietyOrgImportExcelDTO { + + @ExcelProperty(value = "组织名称") + @NotBlank(message = "不能为空") + @Length(max=50,message = "不能超过50个字") + private String societyName; + + @ExcelProperty(value = "服务内容") + @NotBlank(message = "不能为空") + @Length(max=1000,message = "不能超过1000个字") + private String serviceMatters; + + @ExcelProperty(value = "服务电话") + @NotBlank(message = "不能为空") + @Length(max=11,message = "不能超过11个字") + private String mobile; + + @ExcelProperty(value = "服务时间") + @NotBlank(message = "不能为空") + private String serviceTimeStr; + + @ExcelProperty(value = "管理员姓名") + private String adminStaffName; + + @ExcelProperty(value = "地址") + private String address; + + @Data + public static class ErrorRow { + + @ColumnWidth(40) + @ExcelProperty(value = "组织名称") + private String societyName; + + @ColumnWidth(50) + @ExcelProperty(value = "服务内容") + private String serviceMatters; + + @ColumnWidth(20) + @ExcelProperty(value = "服务电话") + private String mobile; + + @ColumnWidth(25) + @ExcelProperty(value = "服务时间") + private String serviceTimeStr; + + @ColumnWidth(20) + @ExcelProperty(value = "管理员姓名") + private String adminStaffName; + + @ColumnWidth(50) + @ExcelProperty(value = "地址") + private String address; + + @ColumnWidth(60) + @ExcelProperty("错误信息") + private String errorInfo; + } +} + diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcSocietyOrgService.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcSocietyOrgService.java index 747ff6f14b..8685acaeef 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcSocietyOrgService.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcSocietyOrgService.java @@ -28,6 +28,7 @@ import com.epmet.dto.result.demand.OptionDTO; import com.epmet.entity.IcSocietyOrgEntity; import com.epmet.excel.IcSocietyOrgExcel; +import java.nio.file.Path; import java.text.ParseException; import java.util.List; @@ -79,4 +80,13 @@ public interface IcSocietyOrgService extends BaseService { List queryListById(List socialOrgIds); IcSocietyOrgDTO get(String id); + + /** + * 导入社会组织,之前的废弃了 + * @param fileSavePath + * @param taskId + * @param customerId + * @param userId + */ + void execAsyncExcelImport(Path fileSavePath, String taskId, String customerId, String userId); } \ No newline at end of file diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcSocietyOrgServiceImpl.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcSocietyOrgServiceImpl.java index 16e1cee8f4..332db0bae7 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcSocietyOrgServiceImpl.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcSocietyOrgServiceImpl.java @@ -17,41 +17,56 @@ package com.epmet.service.impl; +import com.alibaba.excel.EasyExcel; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; import com.epmet.commons.tools.constant.NumConstant; 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.exception.RenException; import com.epmet.commons.tools.redis.common.CustomerStaffRedis; import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.commons.tools.utils.FileUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.constant.UserDemandConstant; +import com.epmet.constants.ImportTaskConstants; import com.epmet.dao.IcSocietyOrgDao; import com.epmet.dto.CustomerStaffDTO; import com.epmet.dto.IcSocietyOrgDTO; import com.epmet.dto.form.*; import com.epmet.dto.form.demand.ServiceQueryFormDTO; -import com.epmet.dto.result.GetListSocietyOrgResultDTO; -import com.epmet.dto.result.OrgInfoResultDTO; -import com.epmet.dto.result.SocietyOrgListResultDTO; -import com.epmet.dto.result.StaffSinGridResultDTO; +import com.epmet.dto.result.*; import com.epmet.dto.result.demand.OptionDTO; import com.epmet.entity.IcSocietyOrgEntity; import com.epmet.excel.IcSocietyOrgExcel; +import com.epmet.excel.IcSocietyOrgImportExcelDTO; +import com.epmet.feign.EpmetCommonServiceOpenFeignClient; import com.epmet.feign.EpmetUserOpenFeignClient; import com.epmet.feign.GovOrgOpenFeignClient; +import com.epmet.feign.OssFeignClient; import com.epmet.service.IcSocietyOrgService; import com.epmet.service.IcUserDemandRecService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.apache.commons.collections4.MapUtils; +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileItemFactory; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.lang3.StringUtils; +import org.apache.http.entity.ContentType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; 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.text.ParseException; import java.util.*; import java.util.stream.Collectors; @@ -71,6 +86,10 @@ public class IcSocietyOrgServiceImpl extends BaseServiceImpl errorRows = null;// todo listener.getErrorRows(); + + boolean failed = errorRows.size() > 0; + if (failed) { + // 生成并上传错误文件 + try { + // 文件生成 + Path errorDescDir = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_enterprise", "import", "error_des"); + String fileName = UUID.randomUUID().toString().concat(".xlsx"); + errorDescFile = errorDescDir.resolve(fileName); + + FileItemFactory factory = new DiskFileItemFactory(16, errorDescDir.toFile()); + FileItem fileItem = factory.createItem("file", ContentType.APPLICATION_OCTET_STREAM.toString(), true, fileName); + OutputStream os = fileItem.getOutputStream(); + + EasyExcel.write(os, IcSocietyOrgImportExcelDTO.ErrorRow.class).sheet("导入失败列表").doWrite(errorRows); + + // 文件上传oss + Result errorDesFileUploadResult = ossFeignClient.uploadImportTaskDescFile(new CommonsMultipartFile(fileItem)); + if (errorDesFileUploadResult.success()) { + errorDesFileUrl = errorDesFileUploadResult.getData().getUrl(); + } + } finally { + if (Files.exists(errorDescFile)) { + Files.delete(errorDescFile); + } + } + } + + ImportTaskCommonFormDTO importFinishTaskForm = new ImportTaskCommonFormDTO(); + importFinishTaskForm.setTaskId(importTaskId); + importFinishTaskForm.setProcessStatus(failed ? ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL : ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS); + importFinishTaskForm.setOperatorId(userId); + importFinishTaskForm.setResultDesc(""); + importFinishTaskForm.setResultDescFilePath(errorDesFileUrl); + + Result result = commonServiceOpenFeignClient.finishImportTask(importFinishTaskForm); + 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) { + log.error("method exception", e); + } + } + } + } + + private CustomerStaffInfoCacheResult queryCurrentStaff(String customerId, String userId) { + CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(customerId, userId); + if (null == staffInfo) { + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "查询工作人员缓存信息异常", EpmetErrorCode.SERVER_ERROR.getMsg()); + } + return staffInfo; + } } diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/societyorg_import_template.xlsx b/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/societyorg_import_template.xlsx index 5d02dae502b5326319fb9578a340a4d624c0fea2..a5562c9247c0f6f5d763faa99fbefc3f2ccd1f07 100644 GIT binary patch delta 1446 zcmV;X1zGy}Mc_rSlK}+`u`aqvlb8W4e-x;!B$WVlMI|JPKXP`nhmTBqoCIrpc?GnOgAic&#} z8Zc;<9UmpUqP)~_t;-6u&B1t%qzvU%iZ<3(6l23TAejlALpgC(YRRlC^%_@!6Oi7%qQ^?-y4$-Ku`B+FNlzSt2;)8kjA0*1X6BkLvbz1v7Tx z&b-P&oHyCm$Lr_YdxC!}4%FrDI%yz0mxT7Y_sU&-ak-qMEFw|llc^s~mL#Ongc9=5 z4nF8_ll2dBH~yc*h{iEJIU5o8fUL`X_#3jb`U1282~Vz3y@CP&02hFZ{(T1mV>9gMu5TDk$+LRl497fAxPUFqHhT;QIMo-J#+NgFDJx+E*8D=MdO`dg{7nb!C_+TQ3F)iWULb-PwOwRqVOtbh~jC zc+$aklSs^BQ+lEyjp<{wK13AH9paaS+6?x@^5b{NL0CwzRVZm%;HcDd1N@9fVWZmt z8jW07d4V0|c}x!x_LceLj5K>R5%e~O`_A6Mwat?z38eg-+nvgP%fx0eU9#m+RnQ#PeUoo#64a@Yu(Z#HXq31CjGvptOZqjEh9oLQ?vc*7f z_HV>KZ|S(U^y!Mt27(u3df*G-s^9eEcB55Ia8|Jr_=@1yb9{dXxPzvoliruU$cV3a z^YTRNId-0ClstMZSPtYEJiTngO>n^$6D{Jy7!h3~c4Nfk8nGWE?ynIa$B5}Q0tc;$ zcj)P?M+BIYZY+F~Dt>~mT%TlVNDe7Rho!>8Y2Wew$EwOD?5HeGyU!iIxPXZX8G=)# zZ1;nskh!~qJ8TCgvVYRIe*uslvxo<^5DC57<*n`j002dkMi?u9iz1Sw3&9iU0m4k| z1ZG~wc^T223#}j&DhhScF1qTjc3}nSdD7@Dnj#{UF8}}I=fUHho3bF+x<+F`(8E?j ziH6i>2D*Y?oSz*WQ-V%GrV0yM&|8hPBlq_>q9bt&C}{3nb;1~?xh@s9Y^5Q}rL9Zl zVywFit6HlJbFE!pS+JudX|qxppd_^oI6>Q#G+?e8efpOrMZ5O za<=JzZ8hrqr-|=9_}SNP3$Kgs_wjC94L^T|AKMmYlQ8J{=QlrniC4GTkLG@S_usPk z2Dt{aSQ)Mb0xKPpU>y~c9Um$LlNta3li?s1lVKkk0k@NUACm*cz1roi?f?J)MF9W+6aWAK z000000RSKX001A8S|LFJjgy=qIssaf*C93mfs+m*Kmk9KPa-@4c9V=EAskPxQN4l! z000*T000;O0000000031AOHXWq6Cw?1R54lO9ci10000H01*HO1ONcT9smFU0GSPu AtN;K2 delta 1447 zcmV;Y1z7svMfpXrlK}#F}m6d`F zHDJ*!KR!yiro1w6Z7L1M6<`BTQkHU^p^bBzVr=;aB(srsC@-!mBboE1S!2!ke05*!oEG28+}JrL0jDfocYPp0euf@3H_f^rteQH+1Q4ve&aHgw9!DGS$Vztb-6 zm@RlO4(_cj24h{SYZ^Z%Sso<0wV6HNG^CD9`s@vO@%({g? z^Qr)G-sE2&ub*%4DgLc^P?x)>IDrU!658k9D|eHN%jF#92}zQWoQ27BNn)BzDIpK- z;Di1)S^pq+wy|6uvOT+%c*g;ZU#Y?C&r+V$BnhhWuUW;>z%_dD3Yh?t`8Jj7tW?>kpJ z>-*VK{afU5Onb2)K!!i2poHWnqBJ6z(pF4khH#U!&q>!iw>zA zZj89SM7$p(rk9BQ7;$%rz?0lmWSGmWM}%0l?%eq@R_q90m_CZq5D6LPkIlr%(EdpI z7pp2)(u1;io%rhFl@|_Jx+p+!rj+eo@Qml~+um(9N522h*prbO9J6!>xey6=MctP7 z0001ClQtMDe+v~!(uLp&^Z;Qdb_OQNI4>i*>q09Eg^EI5v_e{Pt^Gw{Fn)(|ObCQQtjGT<_M+mYdB#e}27< zH(Nbid=EdG=4TT>=()!iH+>3Mo9sq&H}3woB)o|K0JA?Ct_1-^lkOfs0j!fRA2R{a zlVcx~1>b+B6-Sf%A5;PRlTaW)0aKHaATR;=lfoc20Uwk3AT1krMctP70001C0RR9L z000000000103ZMW056k4AwdnD4FCXmY%g