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

@ -7,6 +7,7 @@ import com.docus.infrastructure.web.request.SearchDTO;
import com.docus.infrastructure.web.response.PageResult; import com.docus.infrastructure.web.response.PageResult;
import com.docus.server.api.recovery.RcvBasicApi; import com.docus.server.api.recovery.RcvBasicApi;
import com.docus.server.common.IgnoreValidate; import com.docus.server.common.IgnoreValidate;
import com.docus.server.common.excel.ExcelExportHandler;
import com.docus.server.convert.RcvBasicConvert; import com.docus.server.convert.RcvBasicConvert;
import com.docus.server.dto.recovery.rcvbasic.AddRcvBasicDTO; import com.docus.server.dto.recovery.rcvbasic.AddRcvBasicDTO;
import com.docus.server.dto.recovery.rcvbasic.DeleteRcvBasicDTO; 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.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping; 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.RequestPart;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.Serializable; import java.io.Serializable;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@ -317,4 +321,16 @@ public class RcvBasicController implements RcvBasicApi {
List<AddRcvBasicDTO> addRcvBasicDTOList = RcvBasicConvert.INSTANCE.convert(excelData); List<AddRcvBasicDTO> addRcvBasicDTOList = RcvBasicConvert.INSTANCE.convert(excelData);
iRcvBasicService.addRecord(addRcvBasicDTOList); 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