From 02abdd0d4928d31747d1d4798a07687ced20e5f9 Mon Sep 17 00:00:00 2001 From: jianjun Date: Sun, 24 Apr 2022 17:10:42 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E9=9C=80=E8=A6=81=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E7=9A=84=E9=85=8D=E7=BD=AE=20=E7=94=A8=E4=BA=8E?= =?UTF-8?q?=E7=94=9F=E6=88=90excel=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/dto/form/IcResiUserPageFormDTO.java | 11 +-- .../controller/IcResiUserController.java | 5 +- .../java/com/epmet/dao/IcResiUserDao.java | 3 +- .../com/epmet/service/IcResiUserService.java | 2 + .../impl/IcResiUserExportServiceImpl.java | 87 +++++++++++++++++-- .../service/impl/IcResiUserServiceImpl.java | 29 ++++--- .../main/resources/mapper/IcResiUserDao.xml | 11 ++- 7 files changed, 119 insertions(+), 29 deletions(-) diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/IcResiUserPageFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/IcResiUserPageFormDTO.java index cf3839437a..7c9ac813c7 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/IcResiUserPageFormDTO.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/IcResiUserPageFormDTO.java @@ -1,10 +1,10 @@ package com.epmet.dto.form; +import com.epmet.commons.tools.dto.form.PageFormDTO; import com.epmet.commons.tools.validator.group.ExportGroup; import lombok.Data; import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; import java.io.Serializable; import java.util.List; @@ -14,16 +14,10 @@ import java.util.List; * @Date 2021/10/27 2:06 下午 */ @Data -public class IcResiUserPageFormDTO implements Serializable { +public class IcResiUserPageFormDTO extends PageFormDTO implements Serializable { public interface AddUserInternalGroup { } - @NotNull(message = "pageNo不能为空", groups = AddUserInternalGroup.class) - private Integer pageNo; - - @NotNull(message = "pageSize不能为空", groups = AddUserInternalGroup.class) - private Integer pageSize; - @NotBlank(message = "formCode不能为空", groups = AddUserInternalGroup.class) private String formCode; @@ -34,7 +28,6 @@ public class IcResiUserPageFormDTO implements Serializable { * 表对应的字段及值 */ private List conditions; - private Boolean pageFlag; @NotBlank(message = "当前用户id不能为空", groups = AddUserInternalGroup.class) private String staffId; diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java index 8d8365eec8..c47c09eb8a 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java @@ -322,7 +322,7 @@ public class IcResiUserController implements ResultDataResolver { staffOrgPath = staffInfoCacheResult.getAgencyId(); } pageFormDTO.setCustomerId(customerId); - pageFormDTO.setPageFlag(false); + pageFormDTO.setIsPage(false); //获取模版文件 File file = getIcResiTemplateFile(customerId, IcUserTemplateEnums.IC_RESI_EXPORT_TEMPLATE); @@ -417,7 +417,8 @@ public class IcResiUserController implements ResultDataResolver { public void exportExcelCustom(/*@LoginUser*/ TokenDto tokenDto, @RequestBody IcResiUserPageFormDTO pageFormDTO, HttpServletResponse response) throws Exception { //tokenDto.setUserId("9e37adcce6472152e6508a19d3683e02"); //tokenDto.setCustomerId("45687aa479955f9d06204d415238f7cc"); - ValidatorUtils.validateEntity(pageFormDTO, IcResiUserPageFormDTO.AddUserInternalGroup.class, ExportGroup.class); + ValidatorUtils.validateEntity(pageFormDTO, ExportGroup.class); + pageFormDTO.setIsPage(false); //获取导出配置 icResiUserExportService.exportIcResiUser(pageFormDTO,response); diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java index e5c726447b..5867161158 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java @@ -98,6 +98,7 @@ public interface IcResiUserDao extends BaseDao { * @param customerId 客户id * @param resultTableName 获取哪个表的数据??? * @param conditions 前端传入的查询入参 + * @param showSqlColumns * @return java.util.List> * @author yinzuomei * @date 2021/11/2 10:35 上午 @@ -106,7 +107,7 @@ public interface IcResiUserDao extends BaseDao { @Param("resultTableName") String resultTableName, @Param("conditions") List conditions, @Param("subTables") List subTables, - @Param("currentStaffAgencyId") String currentStaffAgencyId, + @Param("showSqlColumns") List showSqlColumns, @Param("currentStaffAgencyId") String currentStaffAgencyId, @Param("staffOrgPath") String staffOrgPath); /** diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java index 11c9397558..7e1bd31a0f 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java @@ -256,4 +256,6 @@ public interface IcResiUserService extends BaseService { * @Description 【人房】居民总数列表数据 **/ List userChartList(UserChartFormDTO formDTO); + + List> dynamicQuery(String loginUserCustomerId, String formCode, String icResiUser, List showSqlColumns, List conditions, String agencyId, String finalStaffOrgPath); } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserExportServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserExportServiceImpl.java index f06f1b35e5..561f654358 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserExportServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserExportServiceImpl.java @@ -1,17 +1,35 @@ package com.epmet.service.impl; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +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.redis.common.CustomerStaffRedis; import com.epmet.commons.tools.security.user.LoginUserUtil; +import com.epmet.commons.tools.utils.ExcelUtils; import com.epmet.commons.tools.utils.Result; +import com.epmet.commons.tools.utils.poi.excel.FreezeAndFilter; +import com.epmet.constant.IcResiUserConstant; import com.epmet.dto.form.IcExportTemplateFormDTO; import com.epmet.dto.form.IcResiUserPageFormDTO; import com.epmet.dto.result.IcCustomExportResultDTO; import com.epmet.feign.OperCustomizeOpenFeignClient; import com.epmet.service.IcResiUserExportService; +import com.epmet.service.IcResiUserService; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; /** * desc: @@ -27,6 +45,9 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { private OperCustomizeOpenFeignClient operCustomizeOpenFeignClient; @Autowired private LoginUserUtil loginUserUtil; + @Autowired + private IcResiUserService icResiUserService; + /** * desc: 根据条件查询居民信息并根据配置模板导出 * @@ -38,11 +59,67 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService { */ @Override public void exportIcResiUser(IcResiUserPageFormDTO pageFormDTO, HttpServletResponse response) { - //获取模板条件 - IcExportTemplateFormDTO param = new IcExportTemplateFormDTO(); - param.setCustomerId(loginUserUtil.getLoginUserCustomerId()); - param.setTempId(pageFormDTO.getTemplateId()); - Result exportConfigResult = operCustomizeOpenFeignClient.getExcelHeaderAndSqlColumnForExport(param); + ExcelWriter excelWriter = null; + try { + //获取模板条件 + IcExportTemplateFormDTO param = new IcExportTemplateFormDTO(); + param.setCustomerId(loginUserUtil.getLoginUserCustomerId()); + param.setCustomerId("default"); + param.setTempId(pageFormDTO.getTemplateId()); + Result exportConfigResult = operCustomizeOpenFeignClient.getExcelHeaderAndSqlColumnForExport(param); + if (!exportConfigResult.success() || exportConfigResult.getData() == null) { + log.error("获取模板失败"); + return; + } + IcCustomExportResultDTO resultDTO = exportConfigResult.getData(); + FreezeAndFilter writeHandler = new FreezeAndFilter(); + excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel("居民基本信息.xlsx", response)).registerWriteHandler(writeHandler).build(); + WriteSheet writeSheet = EasyExcel.writerSheet().head(resultDTO.getHeaders()).build(); + + CustomerStaffInfoCacheResult staffInfoCacheResult = CustomerStaffRedis.getStaffInfo(loginUserUtil.getLoginUserCustomerId(), loginUserUtil.getLoginUserId()); + String staffOrgPath = null; + if (StringUtils.isNotBlank(staffInfoCacheResult.getAgencyPIds()) && !NumConstant.ZERO_STR.equals(staffInfoCacheResult.getAgencyPIds())) { + staffOrgPath = staffInfoCacheResult.getAgencyPIds().concat(StrConstant.COLON).concat(staffInfoCacheResult.getAgencyId()); + } else { + staffOrgPath = staffInfoCacheResult.getAgencyId(); + } + Page> mapListPage = null; + List allShowColumns = new ArrayList<>(resultDTO.getShowSqlColumns()); + allShowColumns.addAll(resultDTO.getHiddenSqlColumns()); + do { + String finalStaffOrgPath = staffOrgPath; + mapListPage = PageHelper.startPage(pageFormDTO.getPageNo(), pageFormDTO.getPageSize(), pageFormDTO.getIsPage()).doSelectPage(() -> { + icResiUserService.dynamicQuery(loginUserUtil.getLoginUserCustomerId(), pageFormDTO.getFormCode(), IcResiUserConstant.IC_RESI_USER, allShowColumns, pageFormDTO.getConditions(), staffInfoCacheResult.getAgencyId(), finalStaffOrgPath); + }); + pageFormDTO.setPageNo(pageFormDTO.getPageNo() + NumConstant.ONE); + + //todo + if (pageFormDTO.getPageNo() == 4) { + break; + } + } while (mapListPage != null && mapListPage.getResult().size() == pageFormDTO.getPageSize()); + List> result = mapListPage.getResult(); + + List> resultData = new ArrayList<>(); + result.forEach(o -> { + List singleResult = new ArrayList<>(); + o.values().forEach(value -> { + if (singleResult.size() < resultDTO.getShowSqlColumns().size()) { + singleResult.add(value); + } + }); + resultData.add(singleResult); + }); + log.debug("需要写入的data长度:{}", resultData.size()); + excelWriter.write(resultData, writeSheet); + } catch (IOException e) { + log.error("exportIcResiUser exception", e); + } finally { + if (excelWriter != null) { + excelWriter.finish(); + } + } } + } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java index 3ee51fa718..7aa2b83751 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java @@ -67,6 +67,7 @@ import com.google.common.cache.CacheBuilder; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -562,7 +563,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl> pageInfo=new PageInfo<>(); - if (null == formDTO.getPageFlag()||formDTO.getPageFlag()) { + if (null == formDTO.getIsPage()||formDTO.getIsPage()) { //分页 String finalStaffOrgPath = staffOrgPath; pageInfo= PageHelper.startPage(formDTO.getPageNo(), @@ -746,21 +747,24 @@ public class IcResiUserServiceImpl extends BaseServiceImpl conditions, String currentStaffAgencyId, String staffOrgPath){ + List finalSubTables = getFinalSubables(customerId, formCode, resultTableName, conditions); + + return baseDao.dynamicQuery(customerId,resultTableName,conditions,finalSubTables, null, currentStaffAgencyId,staffOrgPath); + } + + @NotNull + public List getFinalSubables(String customerId, String formCode, String resultTableName, List conditions) { CustomerFormQueryDTO queryDTO=new CustomerFormQueryDTO(); queryDTO.setCustomerId(customerId); queryDTO.setFormCode(formCode); //所有的子表 Result> subTablesRes=operCustomizeOpenFeignClient.querySubTables(queryDTO); - /*List subTablesBak=new ArrayList<>(); - if(subTablesRes.success()&&CollectionUtils.isNotEmpty(subTablesRes.getData())){ - subTablesBak =subTablesRes.getData().stream().map(SubTableJoinDTO::getJoinTableSql).collect(Collectors.toList()); - }*/ + List subTables =subTablesRes.getData(); // log.info("1、所有的子表subTables:"+JSON.toJSONString(subTables,true)); //关联哪些子表:查询条件用到的表名+查询的列对应的表 并集去重 Set whereConditionTables=conditions.stream().map(ResiUserQueryValueDTO::getTableName).collect(Collectors.toSet()); - Set tables=new HashSet<>(); - tables.addAll(whereConditionTables); + Set tables = new HashSet<>(whereConditionTables); tables.add(resultTableName); // log.info("2、查询条件+查询列对应的tables并集去重:"+ JSON.toJSONString(tables,true)); //最终关联的子表对应的sql: @@ -770,8 +774,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl> getDataForExport(ExportResiUserItemDTO formItemMap, String baseTableName, IcResiUserPageFormDTO pageFormDTO, String currentStaffAgencyId, String staffOrgPath) { - Page> mapListPage = PageHelper.startPage(pageFormDTO.getPageNo(), pageFormDTO.getPageSize(), pageFormDTO.getPageFlag()).doSelectPage(() -> { + Page> mapListPage = PageHelper.startPage(pageFormDTO.getPageNo(), pageFormDTO.getPageSize(), pageFormDTO.getIsPage()).doSelectPage(() -> { this.dynamicQuery(pageFormDTO.getCustomerId(), pageFormDTO.getFormCode(), baseTableName, pageFormDTO.getConditions(), currentStaffAgencyId, staffOrgPath); }); mapListPage.getResult().parallelStream().filter(Objects::nonNull).forEach(resiUser -> { @@ -1653,4 +1656,10 @@ public class IcResiUserServiceImpl extends BaseServiceImpl> dynamicQuery(String customerId, String formCode, String resultTableName, List showSqlColumns, List conditions, String currentStaffAgencyId, String staffOrgPath) { + List finalSubTables = getFinalSubables(customerId, formCode, resultTableName, conditions); + return baseDao.dynamicQuery(customerId,resultTableName,conditions,finalSubTables,showSqlColumns,currentStaffAgencyId,staffOrgPath); + } + } diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml index 55dc3aa815..66c8c51bd5 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml @@ -171,9 +171,16 @@ update ${subTalbeName} set del_flag='1' where IC_RESI_USER=#{icResiUserId} - select - ${resultTableName}.* + + + + ${column.tableName}.${column.columnName} + + + ${resultTableName}.* + FROM ic_resi_user