excel导出,导入,下载

segment2.0
linrf 2 years ago
parent 5097f57868
commit 322e5b4769

@ -0,0 +1,79 @@
package com.docus.server.common.excel;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List;
/**
* Excel
* EasyExcelhttps://easyexcel.opensource.alibaba.com/docs/current/quickstart/write
*
* @author wangrubin
* @date 2022-08-02
*/
@Slf4j
@Component
public class ExcelExportHandler {
/**
* Excel
*
* @param response response
* @param fileName
* @param data
* @param clazz POJO
* @param <T>
*/
public <T> void export(HttpServletResponse response, String fileName,
List<T> data, Class<T> clazz) {
try {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码
String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()).replaceAll("\\+", "%20");
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename*=utf-8''" + encodedFileName + ".xlsx");
// 这里需要设置不关闭流
EasyExcel.write(response.getOutputStream(), clazz)
.sheet("Sheet1")
// 设置单元格宽度自适应
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
// 设置单元格高度和字体
.registerWriteHandler(getHeightAndFontStrategy())
.doWrite(data);
log.info("下载{}条记录到文件{}", data.size(), fileName);
} catch (Exception e) {
// 重置response
log.error("文件下载失败" + e.getMessage());
throw new RuntimeException("下载文件失败", e);
}
}
/**
* Excel
*
* @return Excel
*/
private HorizontalCellStyleStrategy getHeightAndFontStrategy() {
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
WriteFont headWriteFont = new WriteFont();
headWriteFont.setFontHeightInPoints((short) 11);
headWriteFont.setBold(true);
headWriteCellStyle.setWriteFont(headWriteFont);
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
WriteFont contentWriteFont = new WriteFont();
contentWriteFont.setFontHeightInPoints((short) 11);
contentWriteCellStyle.setWriteFont(contentWriteFont);
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
}
}

@ -0,0 +1,54 @@
package com.docus.server.dto.recovery.rcvbasic;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@ApiModel(value = "病案回收基础数据excel导出", description = "病案回收基础数据excel导出")
public class RcvBasicExcelDTO extends BaseRowModel {
@ExcelProperty(value = {"住院号"}, index = 0)
@ApiModelProperty(value = "住院号")
private String admissId;
@ExcelProperty(value = {"住院次数"}, index = 1)
@ApiModelProperty(value = "住院次数")
private Integer admissTimes;
@ExcelProperty(value = {"流水号"}, index = 2)
@ApiModelProperty("流水号")
private String serialNumber;
@ExcelProperty(value = {"患者姓名"}, index = 3)
@ApiModelProperty(value = "患者姓名")
private String name;
@ExcelProperty(value = {"住院医师"}, index = 4)
@ApiModelProperty("住院医师")
private String attendingName;
@ExcelProperty(value = {"出院日期"}, index = 5)
@ApiModelProperty(value = "出院日期")
private Date disDate;
@ExcelProperty(value = {"出院科室名称"}, index = 6)
@ApiModelProperty("出院科室名称")
private String disDeptName;
@ExcelProperty(value = {"回收状态"}, index = 7)
@ApiModelProperty("回收状态 0待回收 1已回收")
private String recoveryState;
@ExcelProperty(value = {"回收时间"}, index = 8)
@ApiModelProperty(value = "回收时间")
private Date revoveryTime;
@ExcelProperty(value = {"回收人"}, index = 9)
@ApiModelProperty("回收人")
private String revoveryUser;
}

@ -0,0 +1,48 @@
package com.docus.server.vo.recovery.rcvbasic;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.docus.server.enums.RecoveryStateEnum;
/**
* Excel
*
* @author wangrubin
* @date 2022-08-02
*/
public class GenderConverter implements Converter<RecoveryStateEnum> {
@Override
public Class<?> supportJavaTypeKey() {
return RecoveryStateEnum.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
/**
* ExcelJavaInteger
*
* @return JavaInteger
*/
@Override
public RecoveryStateEnum convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return "RECYCLED_WAITING".equals(cellData.getStringValue()) ? RecoveryStateEnum.RECYCLED_WAITING : RecoveryStateEnum.RECYCLED_ALREADY;
}
/**
* JavaIntegerExcel
*
* @return Excel
*/
@Override
public CellData convertToExcelData(RecoveryStateEnum recoveryStateEnum, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return new CellData(recoveryStateEnum.equals(RecoveryStateEnum.RECYCLED_WAITING) ? "待回收" : "已回收");
}
}

@ -1,96 +1,117 @@
package com.docus.server.vo.recovery.rcvbasic;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;
import com.docus.server.enums.RecoveryStateEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.docus.server.enums.*;
import java.io.Serializable;
import java.util.Date;
/**
*
* VO
*
* @author AutoGenerator
* @since 2023-09-13
*/
* VO
*
* @author AutoGenerator
* @since 2023-09-13
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value="RcvBasicVO对象", description="患者信息表")
public class RcvBasicVO implements Serializable {
@ApiModel(value = "RcvBasicVO对象", description = "患者信息表")
public class RcvBasicVO extends BaseRowModel implements Serializable {
@ExcelIgnore
@ApiModelProperty(value = "主键")
private Long id;
@ExcelIgnore
@ApiModelProperty(value = "病案主键")
private String patientId;
@ExcelProperty(value = {"住院次数"}, index = 1)
@ApiModelProperty(value = "住院次数")
private Integer admissTimes;
@ExcelIgnore
@ApiModelProperty(value = "病案号")
private String inpatientNo;
@ExcelIgnore
@ApiModelProperty(value = "记账号(省中医住院就诊号)")
private String jzh;
@ExcelProperty(value = {"住院号"}, index = 0)
@ApiModelProperty(value = "住院号")
private String admissId;
@ExcelProperty(value = {"患者姓名"}, index = 3)
@ApiModelProperty(value = "患者姓名")
private String name;
@ExcelProperty(value = {"流水号"}, index = 2)
@ApiModelProperty(value = "流水号")
private String serialNumber;
@ExcelIgnore
@ApiModelProperty(value = "住院日期")
private Date admissDate;
@ExcelIgnore
@ApiModelProperty(value = "住院科室")
private String admissDept;
@ExcelIgnore
@ApiModelProperty(value = "住院科室名称")
private String admissDeptName;
@ExcelProperty(value = {"出院日期"}, index = 5)
@ApiModelProperty(value = "出院日期")
private Date disDate;
@ExcelIgnore
@ApiModelProperty(value = "出院科室")
private String disDept;
@ExcelProperty(value = {"出院科室名称"}, index = 6)
@ApiModelProperty(value = "出院科室名称")
private String disDeptName;
@ExcelIgnore
@ApiModelProperty(value = "实际住院天数")
private Integer admissDays;
@ExcelProperty(value = {"住院医师"}, index = 4)
@ApiModelProperty(value = "住院医师")
private String attendingName;
@ExcelIgnore
@ApiModelProperty(value = "1 现场扫描2 其他来源")
private Integer fileSource;
@ExcelProperty(value = {"回收状态"}, index = 7, converter = GenderConverter.class)
@ApiModelProperty(value = "回收状态 0待回收 1已回收")
private String recoveryState;
private RecoveryStateEnum recoveryState;
@ExcelProperty(value = {"回收时间"}, index = 8)
@ApiModelProperty(value = "回收时间")
private Date revoveryTime;
@ExcelProperty(value = {"回收人"}, index = 9)
@ApiModelProperty(value = "回收人")
private String revoveryUser;
@ExcelIgnore
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ExcelIgnore
@ApiModelProperty(value = "创建时间")
private Date createTime;

@ -7,6 +7,7 @@ import com.docus.infrastructure.web.request.SearchDTO;
import com.docus.infrastructure.web.response.PageResult;
import com.docus.server.api.recovery.RcvBasicApi;
import com.docus.server.common.IgnoreValidate;
import com.docus.server.common.excel.ExcelExportHandler;
import com.docus.server.convert.RcvBasicConvert;
import com.docus.server.dto.recovery.rcvbasic.AddRcvBasicDTO;
import com.docus.server.dto.recovery.rcvbasic.DeleteRcvBasicDTO;
@ -20,13 +21,16 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
@ -317,4 +321,16 @@ public class RcvBasicController implements RcvBasicApi {
List<AddRcvBasicDTO> addRcvBasicDTOList = RcvBasicConvert.INSTANCE.convert(excelData);
iRcvBasicService.addRecord(addRcvBasicDTOList);
}
@Resource
private ExcelExportHandler excelExportHandler;
@ApiOperation("病案回收基础数据excel导出")
@PostMapping("/pageExport")
public void pageExport(@RequestBody SearchDTO searchDTO, HttpServletResponse response) {
PageResult<RcvBasicVO> pageResult = iRcvBasicService.page(searchDTO);
if (!CollectionUtils.isEmpty(pageResult.getList())) {
excelExportHandler.export(response, "病案回收管理列表", pageResult.getList(), RcvBasicVO.class);
}
}
}

Loading…
Cancel
Save