一、controller层
@ApiOperation(value = "明细查询导出")
@PostMapping(value = "/SummaryDetailExport")
public void summaryDetailExport(@RequestBody SearchDTO dto, HttpServletResponse response) throws IOException {
reportService.deptPackagingSummaryDetailExport(dto, response);
}
二、serviceimpl
@Override
public void deptPackagingSummaryDetailExport(SearchDTO dto, HttpServletResponse response) throws IOException {
List<DeptSummaryReq> exportVos = configPackageTaskMapper.DeptPackagingSummary(dto);
DecimalFormat df = new DecimalFormat("#.00");
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("科室打包明细查询" + ".xlsx", "UTF-8"));
ServletOutputStream outputStream = response.getOutputStream();
ExcelWriter excelWriter = EasyExcel.write(outputStream).build();
for (int i = 0; i < exportVos.size(); i++) {
dto.setDeptId(exportVos.get(i).getDeptId());
List<DeptSummaryReq> detail = configPackageTaskMapper.queryDeptPackagingDetailBydeptId(dto);
for (DeptSummaryReq regDetail : detail) {
if (regDetail.getPrice() == null) {
regDetail.setAmount(0.00);
regDetail.setPrice(0.00);
} else {
regDetail.setAmount(BigDecimal.valueOf(regDetail.getPrice()).multiply(BigDecimal.valueOf(regDetail.getPackageCount())).doubleValue());
}
}
DeptSummaryReq regDetail1 = new DeptSummaryReq();
regDetail1.setPackageCode(dto.getStartTime() + " " + dto.getEndTime() + " 打印时间:" + DateUtil.now());
DeptSummaryReq regDetail2 = new DeptSummaryReq();
if (dto.getPackageType() == null) {
List<String> typeName = recoverPackagesMapper.queryPackageType();
regDetail2.setPackageCode("包类型:" + String.join(",", typeName));
} else {
regDetail2.setPackageCode("包类型:" + String.join(",", dto.getPackageName()));
}
DeptSummaryReq regDetail = new DeptSummaryReq();
regDetail.setPackageCode("科室数量合计: " + detail.stream().mapToInt(DeptSummaryReq::getPackageCount).sum()
+ " 科室金额合计: ¥" + Double.valueOf(df.format(detail.stream().mapToDouble(DeptSummaryReq::getAmount).sum())));
detail.add(regDetail);
detail.add(regDetail1);
detail.add(regDetail2);
OnceAbsoluteMergeStrategy onceAbsoluteMergeStrategy = new OnceAbsoluteMergeStrategy(detail.size() + 1, detail.size() + 1, 0, 4);
OnceAbsoluteMergeStrategy onceAbsoluteMergeStrategy1 = new OnceAbsoluteMergeStrategy(detail.size(), detail.size(), 0, 4);
OnceAbsoluteMergeStrategy onceAbsoluteMergeStrategy2 = new OnceAbsoluteMergeStrategy(detail.size() - 1, detail.size() - 1, 0, 4);
WriteSheet writeSheet = EasyExcel.writerSheet(i, exportVos.get(i).getDeptName())
.head(DeptPackagingSummaryDetailExcel.class)
.registerWriteHandler(ExcelUtil.writeCenterStyle())
.registerWriteHandler(onceAbsoluteMergeStrategy)
.registerWriteHandler(onceAbsoluteMergeStrategy1)
.registerWriteHandler(onceAbsoluteMergeStrategy2)
.build();
excelWriter.write(detail, writeSheet);
}
if (excelWriter != null) {
excelWriter.finish();
}
}
三、entity
DeptSummaryReq
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentStyle;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.alibaba.excel.annotation.write.style.HeadStyle;
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
import com.cloud.common.core.annotation.ExcelParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
@ColumnWidth(25)
@HeadRowHeight(20)
@EqualsAndHashCode
@HeadStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER)
@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER)
@ApiModel(value="DeptSummaryReq", description="导出出参")
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DeptSummaryReq {
private static final long serialVersionUID=1L;
@ApiModelProperty(value = "包编码")
@ExcelProperty({"明细报表", "包编码"})
private String packageCode;
@ApiModelProperty(value = "包名称")
@ExcelProperty({"明细报表", "包名称"})
private String packageName;
@ApiModelProperty(name = "数量")
@ExcelProperty({"明细报表", "数量"})
private int packageCount;
@ApiModelProperty(name = "单价")
@ExcelProperty({"明细报表", "单价"})
private Double price;
@ApiModelProperty(name = "金额")
@ExcelProperty({"明细报表", "金额"})
private Double amount;
@ApiModelProperty(name = "科室id")
@ExcelIgnore
private Integer deptId;
@ApiModelProperty(name = "科室名称")
@ExcelIgnore
private String deptName;
}
四、效果
