原来的导出
合并后
/**
* 归集导出
*/
@Override
public void selectIsTheCollection(HttpServletRequest request, HttpServletResponse response, String type) {
ArrayList<ResInfoVo> list = new ArrayList<>();
List<RdResourceDir> rdResourceDirs = rdResourceDirMapper.selectList(Wrappers.<RdResourceDir>lambdaQuery().eq(RdResourceDir::getCollectionSituation, type).orderByDesc(RdResourceDir::getResSourceDept));
List<String> deptList = rdResourceDirMapper.selectResSourceDeptList(type);
HashMap<String, Integer> map = new HashMap<>();
for (String s : deptList) {
map.put(s, 0);
}
for (RdResourceDir rdResourceDir : rdResourceDirs) {
ResInfoVo resInfoVo = CopyUtil.clone(rdResourceDir, ResInfoVo.class);
resInfoVo.setDir(rdResourceDir);
RdResDetailsApi api = rdResDetailsApiService.getOne(Wrappers.<RdResDetailsApi>lambdaQuery().eq(RdResDetailsApi::getResDirId, rdResourceDir.getId()));
if (null != api) {
List<RdParameterInformation> params = paramMapper.selectList(Wrappers.<RdParameterInformation>lambdaQuery().eq(RdParameterInformation::getOwnResId, api.getId()));
api.setRequestParamInfo(params.stream().filter(param -> null != param && param.getParameterType() == 0).collect(Collectors.toList()));
api.setReturnParamInfo(params.stream().filter(param -> null != param && param.getParameterType() == 1).collect(Collectors.toList()));
}
resInfoVo.setDetailsApi(api);
list.add(resInfoVo);
}
SXSSFWorkbook workbook = new SXSSFWorkbook(2000);
String sheetName = "已归集接口信息";
SXSSFSheet sheet = workbook.createSheet(sheetName);
SXSSFRow row0 = sheet.createRow(0);
row0.createCell(0).setCellValue("数源单位");
row0.createCell(1).setCellValue("接口名称");
row0.createCell(2).setCellValue("字段数");
row0.createCell(3).setCellValue("入参信息");
row0.createCell(4).setCellValue("入参说明");
row0.createCell(5).setCellValue("出参信息");
row0.createCell(6).setCellValue("出参说明");
row0.createCell(7).setCellValue("共享方式");
int rowSizeTotal = 0;
for (int i = 0; i < list.size(); i++) {
RdResDetailsApi detailsApi = list.get(i).getDetailsApi();
int size = 0;
if (detailsApi != null) {
List<RdParameterInformation> requestParamInfo = detailsApi.getRequestParamInfo();
List<RdParameterInformation> returnParamInfo = detailsApi.getReturnParamInfo();
int requestSize = requestParamInfo.size();
int returnSize = returnParamInfo.size();
if (requestSize > returnSize) {
size = requestSize;
int w = 0;
for (int j = 0; j < requestParamInfo.size(); j++) {
rowSizeTotal = rowSizeTotal + 1;
SXSSFRow row = sheet.createRow(rowSizeTotal);
row.createCell(0).setCellValue(list.get(i).getDir().getResSourceDept());
row.createCell(1).setCellValue(list.get(i).getDir().getResName());
row.createCell(2).setCellValue(requestParamInfo.size() + returnParamInfo.size());
row.createCell(3).setCellValue(requestParamInfo.get(j).getParameterName());
row.createCell(4).setCellValue(requestParamInfo.get(j).getExplains());
row.createCell(7).setCellValue("接口共享");
if (w < returnSize - 1) {
row.createCell(5).setCellValue(returnParamInfo.get(j).getParameterName());
row.createCell(6).setCellValue(returnParamInfo.get(j).getExplains());
w++;
}
}
}
if (!(requestSize > returnSize)) {
size = returnSize;
int w = 0;
for (int j = 0; j < returnParamInfo.size(); j++) {
rowSizeTotal = rowSizeTotal + 1;
SXSSFRow row = sheet.createRow(rowSizeTotal);
row.createCell(0).setCellValue(list.get(i).getDir().getResSourceDept());
row.createCell(1).setCellValue(list.get(i).getDir().getResName());
row.createCell(2).setCellValue(requestParamInfo.size() + returnParamInfo.size());
row.createCell(5).setCellValue(returnParamInfo.get(j).getParameterName());
row.createCell(6).setCellValue(returnParamInfo.get(j).getExplains());
row.createCell(7).setCellValue("接口共享");
if (w < requestSize - 1) {
row.createCell(3).setCellValue(requestParamInfo.get(w).getParameterName());
row.createCell(4).setCellValue(requestParamInfo.get(w).getExplains());
w++;
}
}
}
} else {
size = 1;
rowSizeTotal = rowSizeTotal + 1;
SXSSFRow row = sheet.createRow(rowSizeTotal);
row.createCell(0).setCellValue(list.get(i).getDir().getResSourceDept());
row.createCell(1).setCellValue(list.get(i).getDir().getResName());
row.createCell(7).setCellValue("接口共享");
}
if (size > 1) {
// 合并日期占两行(4个参数,分别为起始行,结束行,起始列,结束列) 1-5 6-11
// 行和列都是从0开始计数,且起始结束都会合并 5 6 7
// 这里是合并excel中日期的两行为一行
CellRangeAddress regionName = new CellRangeAddress(rowSizeTotal - size + 1, rowSizeTotal, 1, 1);
sheet.addMergedRegion(regionName);
CellRangeAddress regionNum = new CellRangeAddress(rowSizeTotal - size + 1, rowSizeTotal, 2, 2);
sheet.addMergedRegion(regionNum);
CellRangeAddress region = new CellRangeAddress(rowSizeTotal - size + 1, rowSizeTotal, 7, 7);
sheet.addMergedRegion(region);
}
String resSourceDept = list.get(i).getDir().getResSourceDept();
Integer integer = map.get(resSourceDept);
map.put(resSourceDept, integer + size);
}
int y = 0;
for (String s : deptList) {
Integer integer = map.get(s);
y = y + integer;
if (integer > 1) {
CellRangeAddress region = new CellRangeAddress((y - integer + 1), y, 0, 0);
sheet.addMergedRegion(region);
}
}
sheet.setColumnWidth(0, 5000);
sheet.setColumnWidth(1, 5000);
sheet.setColumnWidth(2, 2000);
sheet.setColumnWidth(3, 5000);
sheet.setColumnWidth(4, 5000);
sheet.setColumnWidth(5, 4000);
sheet.setColumnWidth(6, 4000);
sheet.setColumnWidth(7, 3000);
fileOutputStream(request, response, workbook, sheetName);
}
private void fileOutputStream(HttpServletRequest request, HttpServletResponse response, SXSSFWorkbook workbook, String fileName) {
OutputStream output;
try {
output = response.getOutputStream();
String agent = request.getHeader("USER-AGENT").toLowerCase();
response.setContentType("application/octet-stream");
//response.setContentType("application/force-download");
// response.setContentType("application/vnd.ms-excel");
String codedFileName = URLEncoder.encode(fileName, "UTF-8");
if (agent.contains("firefox")) {
response.setCharacterEncoding("utf-8");
response.setHeader("content-disposition", "attachment;filename=" + new String(fileName.getBytes(), StandardCharsets.ISO_8859_1) + ".xls");
} else {
response.setHeader("content-disposition", "attachment;filename=" + codedFileName + ".xls");
}
workbook.write(output);
output.close();
} catch (IOException e) {
log.error("数据导出出错:{}", e.getMessage());
}
}