Browse Source

获取需要导出的配置 用于生成excel 4

dev
jianjun 3 years ago
parent
commit
02abdd0d49
  1. 11
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/IcResiUserPageFormDTO.java
  2. 5
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java
  3. 3
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java
  4. 2
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java
  5. 87
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserExportServiceImpl.java
  6. 29
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java
  7. 11
      epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml

11
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<ResiUserQueryValueDTO> conditions;
private Boolean pageFlag;
@NotBlank(message = "当前用户id不能为空", groups = AddUserInternalGroup.class)
private String staffId;

5
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);

3
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java

@ -98,6 +98,7 @@ public interface IcResiUserDao extends BaseDao<IcResiUserEntity> {
* @param customerId 客户id
* @param resultTableName 获取哪个表的数据
* @param conditions 前端传入的查询入参
* @param showSqlColumns
* @return java.util.List<java.util.Map < java.lang.String, java.lang.Object>>
* @author yinzuomei
* @date 2021/11/2 10:35 上午
@ -106,7 +107,7 @@ public interface IcResiUserDao extends BaseDao<IcResiUserEntity> {
@Param("resultTableName") String resultTableName,
@Param("conditions") List<ResiUserQueryValueDTO> conditions,
@Param("subTables") List<String> subTables,
@Param("currentStaffAgencyId") String currentStaffAgencyId,
@Param("showSqlColumns") List<IcCustomExportResultDTO.SqlColumn> showSqlColumns, @Param("currentStaffAgencyId") String currentStaffAgencyId,
@Param("staffOrgPath") String staffOrgPath);
/**

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

@ -256,4 +256,6 @@ public interface IcResiUserService extends BaseService<IcResiUserEntity> {
* @Description 人房居民总数列表数据
**/
List<UserChartResultDTO> userChartList(UserChartFormDTO formDTO);
List<Map<String,Object>> dynamicQuery(String loginUserCustomerId, String formCode, String icResiUser, List<IcCustomExportResultDTO.SqlColumn> showSqlColumns, List<ResiUserQueryValueDTO> conditions, String agencyId, String finalStaffOrgPath);
}

87
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<IcCustomExportResultDTO> exportConfigResult = operCustomizeOpenFeignClient.getExcelHeaderAndSqlColumnForExport(param);
ExcelWriter excelWriter = null;
try {
//获取模板条件
IcExportTemplateFormDTO param = new IcExportTemplateFormDTO();
param.setCustomerId(loginUserUtil.getLoginUserCustomerId());
param.setCustomerId("default");
param.setTempId(pageFormDTO.getTemplateId());
Result<IcCustomExportResultDTO> 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<Map<String, Object>> mapListPage = null;
List<IcCustomExportResultDTO.SqlColumn> 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<Map<String, Object>> result = mapListPage.getResult();
List<List<Object>> resultData = new ArrayList<>();
result.forEach(o -> {
List<Object> 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();
}
}
}
}

29
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<IcResiUserDao, IcResi
PageInfo<Map<String, Object>> 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<IcResiUserDao, IcResi
List<ResiUserQueryValueDTO> conditions,
String currentStaffAgencyId,
String staffOrgPath){
List<String> finalSubTables = getFinalSubables(customerId, formCode, resultTableName, conditions);
return baseDao.dynamicQuery(customerId,resultTableName,conditions,finalSubTables, null, currentStaffAgencyId,staffOrgPath);
}
@NotNull
public List<String> getFinalSubables(String customerId, String formCode, String resultTableName, List<ResiUserQueryValueDTO> conditions) {
CustomerFormQueryDTO queryDTO=new CustomerFormQueryDTO();
queryDTO.setCustomerId(customerId);
queryDTO.setFormCode(formCode);
//所有的子表
Result<List<SubTableJoinDTO>> subTablesRes=operCustomizeOpenFeignClient.querySubTables(queryDTO);
/*List<String> subTablesBak=new ArrayList<>();
if(subTablesRes.success()&&CollectionUtils.isNotEmpty(subTablesRes.getData())){
subTablesBak =subTablesRes.getData().stream().map(SubTableJoinDTO::getJoinTableSql).collect(Collectors.toList());
}*/
List<SubTableJoinDTO> subTables =subTablesRes.getData();
// log.info("1、所有的子表subTables:"+JSON.toJSONString(subTables,true));
//关联哪些子表:查询条件用到的表名+查询的列对应的表 并集去重
Set<String> whereConditionTables=conditions.stream().map(ResiUserQueryValueDTO::getTableName).collect(Collectors.toSet());
Set<String> tables=new HashSet<>();
tables.addAll(whereConditionTables);
Set<String> 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<IcResiUserDao, IcResi
finalSubTables.add(subTable.getJoinTableSql());
}
});
return baseDao.dynamicQuery(customerId,resultTableName,conditions,finalSubTables,currentStaffAgencyId,staffOrgPath);
return finalSubTables;
}
/**
@ -920,7 +923,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
public List<Map<String, Object>> getDataForExport(ExportResiUserItemDTO formItemMap, String baseTableName, IcResiUserPageFormDTO pageFormDTO,
String currentStaffAgencyId,
String staffOrgPath) {
Page<Map<String, Object>> mapListPage = PageHelper.startPage(pageFormDTO.getPageNo(), pageFormDTO.getPageSize(), pageFormDTO.getPageFlag()).doSelectPage(() -> {
Page<Map<String, Object>> 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<IcResiUserDao, IcResi
return userList;
}
@Override
public List<Map<String, Object>> dynamicQuery(String customerId, String formCode, String resultTableName, List<IcCustomExportResultDTO.SqlColumn> showSqlColumns, List<ResiUserQueryValueDTO> conditions, String currentStaffAgencyId, String staffOrgPath) {
List<String> finalSubTables = getFinalSubables(customerId, formCode, resultTableName, conditions);
return baseDao.dynamicQuery(customerId,resultTableName,conditions,finalSubTables,showSqlColumns,currentStaffAgencyId,staffOrgPath);
}
}

11
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}
</update>
<select id="dynamicQuery" parameterType="map" resultType="map">
<select id="dynamicQuery" parameterType="map" resultType="java.util.LinkedHashMap">
select
${resultTableName}.*
<choose>
<when test="showSqlColumns != null and showSqlColumns.size() != 0">
<foreach collection="showSqlColumns" item="column" separator=",">
${column.tableName}.${column.columnName}
</foreach>
</when>
<otherwise>${resultTableName}.*</otherwise>
</choose>
FROM
ic_resi_user
<if test="null != subTables and subTables.size() > 0">

Loading…
Cancel
Save