Browse Source

自定义导出 合并单元格

master
jianjun 3 years ago
parent
commit
f39cfecb6d
  1. 114
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/ExcelFillCellMergeStrategy.java
  2. 213
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/ExcelMergeStrategy.java
  3. 5
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/ConditionResultDTO.java
  4. 21
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/IcCustomExportResultDTO.java
  5. 5
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/IcExportTemplateForExportResultDTO.java
  6. 4
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcExportTemplateServiceImpl.java
  7. 13
      epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/IcExportTemplateDao.xml
  8. 60
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserExportServiceImpl.java
  9. 10
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java

114
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/ExcelFillCellMergeStrategy.java

@ -0,0 +1,114 @@
package com.epmet.commons.tools.utils.poi.excel.handler;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import java.util.List;
/**
* desc:单元格合并策略
* @author liujianjun
*/
public class ExcelFillCellMergeStrategy implements CellWriteHandler {
private int[] mergeColumnIndex;
private int mergeRowIndex;
public ExcelFillCellMergeStrategy() {
}
public ExcelFillCellMergeStrategy(int mergeRowIndex, int[] mergeColumnIndex) {
this.mergeRowIndex = mergeRowIndex;
this.mergeColumnIndex = mergeColumnIndex;
}
@Override
public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {
}
@Override
public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
// 隐藏id列
writeSheetHolder.getSheet().setColumnHidden(0, true);
}
@Override
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<WriteCellData<?>> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
int curRowIndex = cell.getRowIndex();
int curColIndex = cell.getColumnIndex();
int size = list.size();
System.out.println(size);
if (mergeColumnIndex == null) {
if (curRowIndex > 2) {
mergeWithPrevRow(writeSheetHolder, cell, curRowIndex, curColIndex);
}
}else{
if (curRowIndex > mergeRowIndex) {
for (int i = 0; i < mergeColumnIndex.length; i++) {
if (curColIndex == mergeColumnIndex[i]) {
mergeWithPrevRow(writeSheetHolder, cell, curRowIndex, curColIndex);
break;
}
}
}
}
}
/**
* 当前单元格向上合并
*
* @param writeSheetHolder
* @param cell 当前单元格
* @param curRowIndex 当前行
* @param curColIndex 当前列
*/
private void mergeWithPrevRow(WriteSheetHolder writeSheetHolder, Cell cell, int curRowIndex, int curColIndex) {
//writeSheetHolder.getExcelWriteHeadProperty().
// 当前行的第一个Cell
Cell curFirstCell = cell.getSheet().getRow(curRowIndex).getCell(0);
Object curFirstData = curFirstCell.getCellType() == CellType.STRING ? curFirstCell.getStringCellValue() : curFirstCell.getNumericCellValue();
// 上一行的第一个Cell
Cell preFirstCell = cell.getSheet().getRow(curRowIndex - 1).getCell(0);
Object preFirstData = preFirstCell.getCellType() == CellType.STRING ? preFirstCell.getStringCellValue() : preFirstCell.getNumericCellValue();
if (curFirstData.equals(preFirstData)) {
Object curData = cell.getCellType() == CellType.STRING ? cell.getStringCellValue() : cell.getNumericCellValue();
Cell preCell = cell.getSheet().getRow(curRowIndex - 1).getCell(curColIndex);
Object preData = preCell.getCellType() == CellType.STRING ? preCell.getStringCellValue() : preCell.getNumericCellValue();
// 将当前单元格数据与上一个单元格数据比较
Boolean dataBool = preData.equals(curData);
//此处需要注意:因为我是按照序号确定是否需要合并的,所以获取每一行第一列数据和上一行第一列数据进行比较,如果相等合并
Boolean bool = cell.getRow().getCell(0).getStringCellValue().equals(cell.getSheet().getRow(curRowIndex - 1).getCell(0).getStringCellValue());
if (dataBool && bool) {
Sheet sheet = writeSheetHolder.getSheet();
List<CellRangeAddress> mergeRegions = sheet.getMergedRegions();
boolean isMerged = false;
for (int i = 0; i < mergeRegions.size() && !isMerged; i++) {
CellRangeAddress cellRangeAddr = mergeRegions.get(i);
// 若上一个单元格已经被合并,则先移出原有的合并单元,再重新添加合并单元
if (cellRangeAddr.isInRange(curRowIndex - 1, curColIndex)) {
sheet.removeMergedRegion(i);
cellRangeAddr.setLastRow(curRowIndex);
sheet.addMergedRegion(cellRangeAddr);
isMerged = true;
}
}
// 若上一个单元格未被合并,则新增合并单元
if (!isMerged) {
CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex - 1, curRowIndex, curColIndex, curColIndex);
sheet.addMergedRegion(cellRangeAddress);
}
}
}
}
}

213
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/ExcelMergeStrategy.java

@ -0,0 +1,213 @@
package com.epmet.commons.tools.utils.poi.excel.handler;
/**
* desc:
*
* @author: LiuJanJun
* @date: 2022/4/26 1:36 下午
* @version: 1.0
*/
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.metadata.data.CellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import java.util.List;
import java.util.Objects;
import java.util.stream.IntStream;
/**
* 相同值合并策略
*/
public class ExcelMergeStrategy implements CellWriteHandler {
/**
* 合并起始行
*/
private int mergeRowIndex;
/**
* 多少行合并一次
*/
private int eachRow;
/**
* 合并字段的下标
*/
private int[] mergeColumnIndex;
public ExcelMergeStrategy(int mergeRowIndex, int[] mergeColumnIndex, int eachRow) {
if (mergeRowIndex < 0) {
throw new IllegalArgumentException("mergeRowIndex must be greater than 0");
}
if (eachRow < 0) {
throw new IllegalArgumentException("eachRow must be greater than 0");
}
this.mergeRowIndex = mergeRowIndex;
this.mergeColumnIndex = mergeColumnIndex;
this.eachRow = eachRow;
}
@Override
public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {
}
@Override
public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
}
// @Override
public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
int curRowIndex = cell.getRowIndex();
//当前列
int curColIndex = cell.getColumnIndex();
//合并条件:
//1.当前行>合并起始行,默认标题行(0)不参加合并
//2.间隔行(eachRow)的上下两条不参加合并
//2.1间隔行(eachRow)==0时,不设置间隔
if (isMerge(curRowIndex)) {
IntStream.range(0, mergeColumnIndex.length).anyMatch(i -> {
if (curColIndex == mergeColumnIndex[i]) {
mergeWithPrevRow(writeSheetHolder, cellData, cell, curRowIndex, curColIndex);
return true;
}
return false;
});
}
}
@Override
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
}
/**
* 判断是否合并
* <p>
* 1.当前位置必须大于开始位置curRowIndex > mergeRowIndex
* <p>
* 2.根据eachRow 判断数据分割的间隔
* <p>
* 2.1如果根据eachRow=0默认不合并
* <p>
* 2.2如果1如果根据eachRow>0,分割后的第一条数据不会与之前的合并curRowIndex-mergeRowIndex%eachRow==0
*
* @return
*/
private boolean isMerge(Integer curRowIndex) {
if ((curRowIndex > mergeRowIndex) && eachRow > 0) {
if ((curRowIndex - mergeRowIndex) % eachRow == 0) {
return false;
}
return true;
}
return false;
}
private void mergeWithPrevRow(WriteSheetHolder writeSheetHolder, CellData cellData, Cell cell, int curRowIndex, int curColIndex) {
//获取当前行的当前列的数据和上一行的当前列列数据,通过上一行数据是否相同进行合并
Object curData = cellData.getType() == CellDataTypeEnum.STRING ? cellData.getStringValue() : cellData.getNumberValue();
Cell preCell = cell.getSheet().getRow(curRowIndex - 1).getCell(curColIndex);
Object preData = preCell.getCellTypeEnum() == CellType.STRING ? preCell.getStringCellValue() :
preCell.getNumericCellValue();
// 比较当前行的第一列的单元格与上一行是否相同,相同合并当前单元格与上一行
if (Objects.equals(curData, preData)) {
Sheet sheet = writeSheetHolder.getSheet();
List<CellRangeAddress> mergeRegions = sheet.getMergedRegions();
boolean isMerged = false;
for (int i = 0; i < mergeRegions.size() && !isMerged; i++) {
CellRangeAddress cellRangeAddr = mergeRegions.get(i);
// 若上一个单元格已经被合并,则先移出原有的合并单元,再重新添加合并单元
if (cellRangeAddr.isInRange(curRowIndex - 1, curColIndex)) {
sheet.removeMergedRegion(i);
cellRangeAddr.setLastRow(curRowIndex);
sheet.addMergedRegion(cellRangeAddr);
isMerged = true;
}
}
// 若上一个单元格未被合并,则新增合并单元
if (!isMerged) {
CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex - 1, curRowIndex, curColIndex,
curColIndex);
sheet.addMergedRegion(cellRangeAddress);
}
}
}
}

5
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/ConditionResultDTO.java

@ -91,5 +91,10 @@ public class ConditionResultDTO implements Serializable {
private String funType; private String funType;
private List<OptionDTO> options; private List<OptionDTO> options;
/**
* 这个表 是否支持添加 即是否是多对一 eg:居民需求是多个对一个
*/
private boolean supportAdd;
} }

21
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/IcCustomExportResultDTO.java

@ -1,8 +1,10 @@
package com.epmet.dto.result; package com.epmet.dto.result;
import com.epmet.commons.tools.constant.NumConstant;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.springframework.util.CollectionUtils;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
@ -26,6 +28,10 @@ public class IcCustomExportResultDTO implements Serializable {
private List<List<String>> headers = new ArrayList<>(); private List<List<String>> headers = new ArrayList<>();
private Integer headerRow;
/** /**
* sql中要返回的 列名 顺序跟表头顺序一致 * sql中要返回的 列名 顺序跟表头顺序一致
*/ */
@ -42,9 +48,22 @@ public class IcCustomExportResultDTO implements Serializable {
public static class SqlColumn { public static class SqlColumn {
private String itemId; private String itemId;
private String tableName; private String tableName;
private Boolean manyToOne;
private String columnName; private String columnName;
private String optionSourceType; private String optionSourceType;
private String optionSourceValue;
} }
/**
* desc:获取有几行头
* @return
*/
public Integer getHeaderRow() {
if (CollectionUtils.isEmpty(headers)){
return NumConstant.ZERO;
}
return headers.stream().mapToInt(List::size).max().orElse(0);
}
} }

5
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/result/IcExportTemplateForExportResultDTO.java

@ -57,6 +57,9 @@ public class IcExportTemplateForExportResultDTO implements Serializable {
private String columnName; private String columnName;
private String optionSourceValue; private String optionSourceValue;
private String optionSourceType; /**
* 是否支持添加 即是否是多对一 eg:居民需求是多个对一个
*/
private boolean supportAdd;
} }

4
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcExportTemplateServiceImpl.java

@ -229,7 +229,7 @@ public class IcExportTemplateServiceImpl extends BaseServiceImpl<IcExportTemplat
log.error("getTemplateConfigForExport item 不存在 id:{}", itemId); log.error("getTemplateConfigForExport item 不存在 id:{}", itemId);
return; return;
} }
hiddenSqlColumns.add(new IcCustomExportResultDTO.SqlColumn(item.getItemId(),item.getTableName(), item.getColumnName(),item.getOptionSourceType(),item.getOptionSourceValue())); hiddenSqlColumns.add(new IcCustomExportResultDTO.SqlColumn(item.getItemId(),item.getTableName(), item.isSupportAdd(),item.getColumnName(),item.getOptionSourceType()));
}); });
} }
@ -293,7 +293,7 @@ public class IcExportTemplateServiceImpl extends BaseServiceImpl<IcExportTemplat
private void digui(Map<String, List<IcExportTemplateForExportResultDTO>> resultTemp, IcExportTemplateForExportResultDTO root, List<List<String>> headerList, List<IcCustomExportResultDTO.SqlColumn> showSqlColumns, List<IcCustomExportResultDTO.SqlColumn> hiddenSqlColumns, Set<String> hasExistColumnSet) { private void digui(Map<String, List<IcExportTemplateForExportResultDTO>> resultTemp, IcExportTemplateForExportResultDTO root, List<List<String>> headerList, List<IcCustomExportResultDTO.SqlColumn> showSqlColumns, List<IcCustomExportResultDTO.SqlColumn> hiddenSqlColumns, Set<String> hasExistColumnSet) {
if (StringUtils.isNotBlank(root.getColumnName())) { if (StringUtils.isNotBlank(root.getColumnName())) {
showSqlColumns.add(new IcCustomExportResultDTO.SqlColumn(root.getItemId(),root.getTableName(), root.getColumnName(),root.getOptionSourceType(),root.getOptionSourceValue())); showSqlColumns.add(new IcCustomExportResultDTO.SqlColumn(root.getItemId(),root.getTableName(),root.isSupportAdd(), root.getColumnName(),root.getOptionSourceValue()));
if (StringUtils.isNotBlank(root.getOptionSourceValue())&&root.getOptionSourceValue().contains(StrConstant.QUESTION_MARK)) { if (StringUtils.isNotBlank(root.getOptionSourceValue())&&root.getOptionSourceValue().contains(StrConstant.QUESTION_MARK)) {
String[] paramArr = root.getOptionSourceValue().split(StrConstant.QUESTION_MARK_TRANSFER)[NumConstant.ONE].split(StrConstant.AND_MARK); String[] paramArr = root.getOptionSourceValue().split(StrConstant.QUESTION_MARK_TRANSFER)[NumConstant.ONE].split(StrConstant.AND_MARK);
//先remote中再添加 然后移除item中有的 //先remote中再添加 然后移除item中有的

13
epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/IcExportTemplateDao.xml

@ -20,8 +20,17 @@
</resultMap> </resultMap>
<select id="getTemplateConfigForExport" resultType="com.epmet.dto.result.IcExportTemplateForExportResultDTO"> <select id="getTemplateConfigForExport" resultType="com.epmet.dto.result.IcExportTemplateForExportResultDTO">
SELECT SELECT
c.ID,c.TEMP_ID,c.LABEL,c.PID,c.sort,ifi.ID AS itemId,ifig.TABLE_NAME,concat(ifi.COLUMN_NAME,if(ifi.COLUMN_NUM = 0,'',ifi.COLUMN_NUM)) columnName, c.ID,
ifi.OPTION_SOURCE_VALUE,ifi.OPTION_SOURCE_TYPE c.TEMP_ID,
c.LABEL,
c.PID,
c.sort,
ifi.ID AS itemId,
ifig.TABLE_NAME,
ifig.SUPPORT_ADD,
concat(ifi.COLUMN_NAME,if(ifi.COLUMN_NUM = 0,'',ifi.COLUMN_NUM)) columnName,
ifi.OPTION_SOURCE_TYPE,
ifi.OPTION_SOURCE_VALUE,
FROM ic_export_template_config c FROM ic_export_template_config c
LEFT JOIN ic_form_item ifi ON c.ITEM_ID = ifi.ID LEFT JOIN ic_form_item ifi ON c.ITEM_ID = ifi.ID
LEFT JOIN ic_form_item_group ifig ON ifi.ITEM_GROUP_ID = ifig.ID LEFT JOIN ic_form_item_group ifig ON ifi.ITEM_GROUP_ID = ifig.ID

60
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserExportServiceImpl.java

@ -22,6 +22,7 @@ import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.utils.SpringContextUtils; import com.epmet.commons.tools.utils.SpringContextUtils;
import com.epmet.commons.tools.utils.poi.excel.FreezeAndFilter; import com.epmet.commons.tools.utils.poi.excel.FreezeAndFilter;
import com.epmet.commons.tools.utils.poi.excel.handler.ExcelFillCellMergeStrategy;
import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.constant.IcResiUserConstant; import com.epmet.constant.IcResiUserConstant;
import com.epmet.dto.form.ExportResiUserFormDTO; import com.epmet.dto.form.ExportResiUserFormDTO;
@ -90,14 +91,6 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService {
String templateId = exportResiUserFormDTO.getTemplateId(); String templateId = exportResiUserFormDTO.getTemplateId();
// 头的策略
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
// 背景设置为红色
headWriteCellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle,new WriteCellStyle());
ExcelWriter excelWriter = null; ExcelWriter excelWriter = null;
try { try {
//获取用户配置的导出条件 //获取用户配置的导出条件
@ -106,17 +99,44 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService {
Map<String, ExportResiUserItemDTO> itemOriginMap = getItemMap(searchForm.getCustomerId()); Map<String, ExportResiUserItemDTO> itemOriginMap = getItemMap(searchForm.getCustomerId());
IcCustomExportResultDTO exportConfigData = exportConfigResult.getData(); IcCustomExportResultDTO exportConfigData = exportConfigResult.getData();
log.info("查询到的模板配置信息:{}", JSON.toJSONString(exportConfigData)); log.info("查询到的模板配置信息:{}", JSON.toJSONString(exportConfigData));
CustomerStaffInfoCacheResult staffInfoCacheResult = CustomerStaffRedis.getStaffInfo(searchForm.getCustomerId(), searchForm.getStaffId());
if (staffInfoCacheResult == null){
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"获取工作人员信息失败");
}
List<IcCustomExportResultDTO.SqlColumn> allShowColumns = new ArrayList<>(exportConfigData.getShowSqlColumns());
//需要合并的列
List<Integer> mergeColumnIndexList = new ArrayList<>();
for (int i = 0; i < allShowColumns.size(); i++) {
IcCustomExportResultDTO.SqlColumn sqlColumn = allShowColumns.get(i);
if (!sqlColumn.getManyToOne()){
mergeColumnIndexList.add(i);
}
}
int[] mergeColumnIndex = mergeColumnIndexList.stream().filter(Objects::nonNull).mapToInt(i->i).toArray();
// 从那一列开始合并
int mergeRowIndex = exportConfigData.getHeaderRow();
// 头的策略
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
// 背景设置为红色
headWriteCellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle,new WriteCellStyle());
FreezeAndFilter writeHandler = new FreezeAndFilter(); FreezeAndFilter writeHandler = new FreezeAndFilter();
excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel("居民基本信息.xlsx", response)).registerWriteHandler(writeHandler).build(); excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel("居民基本信息.xlsx", response))
.registerWriteHandler(new ExcelFillCellMergeStrategy(mergeRowIndex, mergeColumnIndex))
.registerWriteHandler(writeHandler).build();
WriteSheet writeSheet = EasyExcel.writerSheet() WriteSheet writeSheet = EasyExcel.writerSheet()
.registerWriteHandler(horizontalCellStyleStrategy) .registerWriteHandler(horizontalCellStyleStrategy)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.head(exportConfigData.getHeaders()).build(); .head(exportConfigData.getHeaders()).build();
CustomerStaffInfoCacheResult staffInfoCacheResult = CustomerStaffRedis.getStaffInfo(searchForm.getCustomerId(), searchForm.getStaffId());
if (staffInfoCacheResult == null){
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"获取工作人员信息失败");
}
String staffOrgPath = null; String staffOrgPath = null;
if (StringUtils.isNotBlank(staffInfoCacheResult.getAgencyPIds()) && !NumConstant.ZERO_STR.equals(staffInfoCacheResult.getAgencyPIds())) { if (StringUtils.isNotBlank(staffInfoCacheResult.getAgencyPIds()) && !NumConstant.ZERO_STR.equals(staffInfoCacheResult.getAgencyPIds())) {
staffOrgPath = staffInfoCacheResult.getAgencyPIds().concat(StrConstant.COLON).concat(staffInfoCacheResult.getAgencyId()); staffOrgPath = staffInfoCacheResult.getAgencyPIds().concat(StrConstant.COLON).concat(staffInfoCacheResult.getAgencyId());
@ -124,7 +144,7 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService {
staffOrgPath = staffInfoCacheResult.getAgencyId(); staffOrgPath = staffInfoCacheResult.getAgencyId();
} }
Page<Map<String, Object>> mapListPage = null; Page<Map<String, Object>> mapListPage = null;
List<IcCustomExportResultDTO.SqlColumn> allShowColumns = new ArrayList<>(exportConfigData.getShowSqlColumns());
allShowColumns.addAll(exportConfigData.getHiddenSqlColumns()); allShowColumns.addAll(exportConfigData.getHiddenSqlColumns());
do { do {
String finalStaffOrgPath = staffOrgPath; String finalStaffOrgPath = staffOrgPath;
@ -204,8 +224,15 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService {
Result<IcCustomExportResultDTO> exportConfigResult = operCustomizeOpenFeignClient.getExcelHeaderAndSqlColumnForExport(param); Result<IcCustomExportResultDTO> exportConfigResult = operCustomizeOpenFeignClient.getExcelHeaderAndSqlColumnForExport(param);
if (!exportConfigResult.success() || exportConfigResult.getData() == null) { if (!exportConfigResult.success() || exportConfigResult.getData() == null) {
log.error("获取模板失败"); log.error("获取模板失败");
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"获取模板失败"); throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"获取模板失败"+exportConfigResult.getInternalMsg());
} }
IcCustomExportResultDTO data = exportConfigResult.getData();
//添加一个虚拟列Id 用于分组
data.getShowSqlColumns().add(0,new IcCustomExportResultDTO.SqlColumn(null,"ic_resi_user",false,"ID","local"));
List<String> id = new ArrayList<>();
id.add("ID");
data.getHeaders().add(0, id);
return exportConfigResult; return exportConfigResult;
} }
@ -258,6 +285,9 @@ public class IcResiUserExportServiceImpl implements IcResiUserExportService {
} }
private String putOptionValue(FormItemResult e, String vauleStr) { private String putOptionValue(FormItemResult e, String vauleStr) {
if (e == null){
return vauleStr;
}
FormItemTypeEnum itemTypeEnum = FormItemTypeEnum.getEnum(e.getItemType()); FormItemTypeEnum itemTypeEnum = FormItemTypeEnum.getEnum(e.getItemType());
switch (itemTypeEnum) { switch (itemTypeEnum) {
case CHECKBOX: case CHECKBOX:

10
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java

@ -754,12 +754,12 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
String currentStaffAgencyId, String currentStaffAgencyId,
String staffOrgPath){ String staffOrgPath){
// List<String> finalSubTables = getFinalSubables(customerId, formCode, resultTableName, conditions); // List<String> finalSubTables = getFinalSubables(customerId, formCode, resultTableName, conditions);
Map<String,List<String>> map=getFinalSubables(customerId, formCode, resultTableName, conditions); Map<String,List<String>> map=getFinalSubables(customerId, formCode, resultTableName, conditions, null);
return baseDao.dynamicQuery(customerId,resultTableName,conditions,map.get("finalSubTables"), null, currentStaffAgencyId,staffOrgPath,map.get("groupByTables")); return baseDao.dynamicQuery(customerId,resultTableName,conditions,map.get("finalSubTables"), null, currentStaffAgencyId,staffOrgPath,map.get("groupByTables"));
} }
@NotNull @NotNull
public Map<String,List<String>> getFinalSubables(String customerId, String formCode, String resultTableName, List<ResiUserQueryValueDTO> conditions) { public Map<String,List<String>> getFinalSubables(String customerId, String formCode, String resultTableName, List<ResiUserQueryValueDTO> conditions, List<String> exportNeedTableList) {
Map<String,List<String>> map=new HashMap<>(); Map<String,List<String>> map=new HashMap<>();
CustomerFormQueryDTO queryDTO=new CustomerFormQueryDTO(); CustomerFormQueryDTO queryDTO=new CustomerFormQueryDTO();
queryDTO.setCustomerId(customerId); queryDTO.setCustomerId(customerId);
@ -773,6 +773,9 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
Set<String> whereConditionTables=conditions.stream().map(ResiUserQueryValueDTO::getTableName).collect(Collectors.toSet()); Set<String> whereConditionTables=conditions.stream().map(ResiUserQueryValueDTO::getTableName).collect(Collectors.toSet());
Set<String> tables = new HashSet<>(whereConditionTables); Set<String> tables = new HashSet<>(whereConditionTables);
tables.add(resultTableName); tables.add(resultTableName);
if (CollectionUtils.isNotEmpty(exportNeedTableList)){
tables.addAll(exportNeedTableList);
}
// log.info("2、查询条件+查询列对应的tables并集去重:"+ JSON.toJSONString(tables,true)); // log.info("2、查询条件+查询列对应的tables并集去重:"+ JSON.toJSONString(tables,true));
//最终关联的子表对应的sql: //最终关联的子表对应的sql:
List<String> finalSubTables =new ArrayList<>(); List<String> finalSubTables =new ArrayList<>();
@ -1671,7 +1674,8 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
@Override @Override
public List<Map<String, Object>> dynamicQuery(String customerId, String formCode, String resultTableName, List<IcCustomExportResultDTO.SqlColumn> showSqlColumns, List<ResiUserQueryValueDTO> conditions, String currentStaffAgencyId, String staffOrgPath) { 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); // List<String> finalSubTables = getFinalSubables(customerId, formCode, resultTableName, conditions);
Map<String,List<String>> map=getFinalSubables(customerId, formCode, resultTableName, conditions); List<String> exportNeedTableList = showSqlColumns.stream().map(IcCustomExportResultDTO.SqlColumn::getTableName).collect(Collectors.toList());
Map<String,List<String>> map=getFinalSubables(customerId, formCode, resultTableName, conditions, exportNeedTableList);
return baseDao.dynamicQuery(customerId,resultTableName,conditions,map.get("finalSubTables"),showSqlColumns,currentStaffAgencyId,staffOrgPath,map.get("groupByTables")); return baseDao.dynamicQuery(customerId,resultTableName,conditions,map.get("finalSubTables"),showSqlColumns,currentStaffAgencyId,staffOrgPath,map.get("groupByTables"));
} }

Loading…
Cancel
Save