1.依赖
<!--easyExcel-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.4</version>
</dependency>
2.controller
@RequestMapping(method = RequestMethod.GET, value = "/export")
@Accessable(moduleName = "导出", name = "查询", function = "EnrollInfo", requireRole = false, requireLogin = false, log = false)
@ApiOperation(value = "导出")
public void export(HttpServletResponse response, String productId) {
this.codeService.export(response, productId);
}
3.serviceImpl功能实现
@Override
public void export(HttpServletResponse response, String productId) {
String fileName = filePath;
log.info("导出文件路径:{}", fileName);
ExcelWriter excelWriter = null;
WriteSheet writeSheet = EasyExcel.writerSheet("sheet1").build();
fileName += "/export/" + "标码表" + System.currentTimeMillis() + ".xlsx";
excelWriter = EasyExcel.write(fileName, CodeExcelVo.class).build();
excelWriter.write(data_export(productId), writeSheet);
// 千万别忘记finish 会帮忙关闭流
excelWriter.finish();
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.DEFAULT.encode("标码表", StandardCharsets.UTF_8));
response.setContentType("application/octet-stream");
try {
byte[] bytes = Files.toByteArray(new File(fileName));
ServletOutputStream stream = response.getOutputStream();
stream.write(bytes);
stream.flush();
stream.close();
} catch (IOException e) {
throw new BusinessException("请重试");
}
}
// 查询需导出集合
private List<CodeExcelVo> data_export(String productId) {
List<CodeExcelVo> list = new ArrayList<>();
LambdaQueryWrapper<Code> wrapper = new LambdaQueryWrapper<>();
List<Code> codes = codeMapper.selectList(wrapper.eq(Code::getDataStatus, 0).eq(Code::getProductId, productId));
codes.forEach(c -> {
CodeExcelVo vo = new CodeExcelVo();
BeanUtils.copyProperties(c, vo);
list.add(vo);
});
// 映射值
List<User> allUser = userDao.getAllUser();
Map<Long, String> userMap = allUser.stream().collect(Collectors.toMap(User::getId, User::getUserName));
if (!ObjectUtils.isEmpty(list)) {
list.forEach(a -> {
//是否消费
a.setIsConsumeStr(a.getIsConsume() == 1 ? "已消费" : "未消费");
if (!ObjectUtils.isEmpty(a.getConsumeBy())) {
a.setConsumeBy(userMap.get(Long.valueOf(a.getConsumeBy())));
}
});
}
return list;
}
4.Code映射为—>CodeExcelVo 导出
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
@Data
@ApiModel(value = "标码表excel映射实体")
@Accessors(chain = true)
public class CodeExcelVo {
@TableId(type = IdType.AUTO)
private String id;
@ExcelProperty("产品名称")
@ApiModelProperty(required = false, value = "产品名称")
private String productName;
@ExcelIgnore
@ApiModelProperty(required = false, value = "产品id")
private String productId;
@ExcelProperty("产品型号")
@ApiModelProperty(required = false, value = "产品型号")
private String productModel;
@ExcelProperty("编码年份")
@ApiModelProperty(required = false, value = "编码年份")
private String codeYear;
@ExcelProperty("编码批次")
@ApiModelProperty(required = false, value = "编码批次")
private int codeBatch;
@ExcelProperty("S/N编码")
@ApiModelProperty(required = false, value = "S/N编码")
private String snCode;
@ExcelProperty("mac编码")
@ApiModelProperty(required = false, value = "mac编码")
private String macCode;
@ExcelProperty("是否消费")
@ApiModelProperty(required = false, value = "是否消费")
private String isConsumeStr;
@ExcelIgnore
@ApiModelProperty(required = false, value = "是否消费")
private int isConsume;
@ExcelProperty("消费时间")
@ApiModelProperty(required = false, value = "消费时间")
private Date consumeTime;
@ExcelProperty("消费人")
@ApiModelProperty(required = false, value = "消费人")
private String consumeBy;
}