/**
* 导出三个sheet
* @param checkAnalysisVo
* @param response
*/
@DS("clickhouse")
@Override
public void downloadModeMore(CheckAnalysisVo checkAnalysisVo, HttpServletResponse response) {
//普通的时间转换
String currentMonth = DateUtil.now();
String previousMonth = DateUtil.formatDateTime(DateUtil.offsetMonth(DateUtil.date(), -1));
//开始时间
if (StrUtil.isBlank(checkAnalysisVo.getStartTime())) {
checkAnalysisVo.setStartTime(previousMonth);
}
//结束时间
if (StrUtil.isBlank(checkAnalysisVo.getEndTime())) {
checkAnalysisVo.setEndTime(currentMonth);
}
//设置 operate_type_id 值 查询表iu_notice
checkAnalysisVo.setOperateTypeId(OperateTypeEnum.REPEAT.getId());
List<CheckAnalysisVo> checkAnalysisVos5 = queryModeExcel5(checkAnalysisVo);
//设置 operate_type_id 值 并且standard_project_name不为空
checkAnalysisVo.setOperateTypeId(PatientOperateTypeEnum.HR_PATIENT.getId());
List<CheckAnalysisVo> checkAnalysisVos8 = queryModeExcel8(checkAnalysisVo);
//设置 operate_type_id 值
checkAnalysisVo.setOperateTypeId(PatientOperateTypeEnum.NO_HR_PATIENT.getId());
List<CheckAnalysisVo> checkAnalysisVos9 = queryModeExcel9(checkAnalysisVo);
try {
downloadMore(checkAnalysisVos5, checkAnalysisVos8, checkAnalysisVos9, response, checkAnalysisVo);
} catch (Exception e) {
log.error("检查分析项目导出报错,报错日志============", e);
}
}
downloadMore();
/*
* 导出三个sheet
* */
private void downloadMore(List<CheckAnalysisVo> checkAnalysisVos5,
List<CheckAnalysisVo> checkAnalysisVos8,
List<CheckAnalysisVo> checkAnalysisVos9,
HttpServletResponse response, CheckAnalysisVo checkAnalysisVo) throws IOException, ParseException {
/* if (CollectionUtils.isEmpty(checkAnalysisVos2) && CollectionUtils.isEmpty(checkAnalysisVos8)) {
return;
}*/
Map<String, String> map1 = new LinkedHashMap<String, String>();
map1.put("id", "序号");
map1.put("modality", "检查模式");
map1.put("standardSecondBodyPart", "检查部位");
map1.put("standardProjectName", "标准项目名称");
map1.put("noticeNumber", "提醒次数");
Map<String, String> map2 = new LinkedHashMap<String, String>();
map2.put("id", "序号");
map2.put("modality", "检查模式");
map2.put("standardSecondBodyPart", "检查部位");
map2.put("standardProjectName", "标准项目名称");
map2.put("noticeNumber", "互认次数");
Map<String, String> map3 = new LinkedHashMap<String, String>();
map3.put("id", "序号");
map3.put("modality", "检查模式");
map3.put("standardSecondBodyPart", "检查部位");
map3.put("standardProjectName", "标准项目名称");
map3.put("noticeNumber", "不互认次数");
List<SheetDTO> arrayList = new ArrayList<SheetDTO>();
arrayList.add(new SheetDTO("重复提醒检查项目", map1, checkAnalysisVos5));
arrayList.add(new SheetDTO("互认项目", map2, checkAnalysisVos8));
arrayList.add(new SheetDTO("不互认项目", map3, checkAnalysisVos9));
HuExcelUtils.exportExcel(response, arrayList, "检查项目分析", checkAnalysisVo.getStartTime(), checkAnalysisVo.getEndTime());
}
实体类sheetdto
package com.imagingunion.common.base;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
public class SheetDTO implements Serializable {
private static final long serialVersionUID = 1L;
/** sheet页名称 */
private String sheetName;
/**
* 字段和别名,如果使用这个,properties 和 titles可以不用处理
* Map<字段, 别名> 如:Map<"name", "姓名">
*/
private Map<String, String> fieldAndAlias;
/**
* 列宽
* 设置列宽时必须每个字段都设置才生效(columnWidth.size = fieldAndAlias.size)
*/
private List<Integer> columnWidth;
/** 数据集 */
private Collection<?> collection;
public SheetDTO() {
}
/**
*
* @param sheetName sheet页名称
* @param fieldAndAlias 字段和别名
* @param collection 数据集
*/
public SheetDTO(String sheetName, Map<String, String> fieldAndAlias, Collection<?> collection) {
super();
this.sheetName = sheetName;
this.fieldAndAlias = fieldAndAlias;
this.collection = collection;
}
public String getSheetName() {
return sheetName;
}
public void setSheetName(String sheetName) {
this.sheetName = sheetName;
}
public Map<String, String> getFieldAndAlias() {
return fieldAndAlias;
}
public void setFieldAndAlias(Map<String, String> fieldAndAlias) {
this.fieldAndAlias = fieldAndAlias;
}
public List<Integer> getColumnWidth() {
return this.columnWidth;
}
public void setColumnWidth(List<Integer> columnWidth) {
this.columnWidth = columnWidth;
}
public Collection<?> getCollection() {
return collection;
}
public void setCollection(Collection<?> collection) {
this.collection = collection;
}
}
package com.imagingunion.common.utils;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.imagingunion.common.base.SheetDTO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public class HuExcelUtils {
public static void exportExcel(HttpServletResponse response, List<SheetDTO> sheetList,
String fileName,String startTime,String endTime) throws ParseException {
Date orderDateStart = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(startTime);
String startTimeTo = new SimpleDateFormat("yyyy-MM-dd").format(orderDateStart);
Date orderDateStart2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(endTime);
String endTimeTo = new SimpleDateFormat("yyyy-MM-dd").format(orderDateStart2);
ExcelWriter bigWriter = ExcelUtil.getBigWriter();
// 重命名第一个Sheet的名称,不然会默认多出一个Sheet1的页
bigWriter.renameSheet(0, sheetList.get(0).getSheetName());
for (SheetDTO sheet : sheetList) {
// 指定要写出的 Sheet 页
bigWriter.setSheet(sheet.getSheetName());
List<Integer> columnWidth = sheet.getColumnWidth();
if (columnWidth == null || columnWidth.size() != sheet.getFieldAndAlias().size()) {
// 设置默认宽度
for (int i = 0; i < sheet.getFieldAndAlias().size(); i++) {
bigWriter.setColumnWidth(i, 25);
}
} else {
// 设置自定义宽度
for (int i = 0; i < columnWidth.size(); i++) {
bigWriter.setColumnWidth(i, columnWidth.get(i));
}
}
// 设置字段和别名
bigWriter.setHeaderAlias(sheet.getFieldAndAlias());
// 设置只导出有别名的字段
bigWriter.setOnlyAlias(true);
// 设置默认行高
bigWriter.setDefaultRowHeight(18);
// 设置冻结行
bigWriter.setFreezePane(1);
// 一次性写出内容,使用默认样式,强制输出标题
bigWriter.write(sheet.getCollection(), true);
// 设置所有列为自动宽度,不考虑合并单元格
// bigWriter.autoSizeColumnAll();
}
ServletOutputStream out = null;
try {
//response为HttpServletResponse对象
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition",
"attachment;filename=" +
URLEncoder.encode(fileName +"_"+ startTimeTo + "至" + endTimeTo + ".xlsx", "UTF-8"));
out = response.getOutputStream();
bigWriter.flush(out, true);
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭writer,释放内存
bigWriter.close();
}
//此处记得关闭输出Servlet流
IoUtil.close(out);
}
}