diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesRecommendApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesRecommendApi.java index 3783433f..c2bad212 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesRecommendApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesRecommendApi.java @@ -2,6 +2,7 @@ package com.xboe.module.boecase.api; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.poi.excel.ExcelReader; @@ -12,6 +13,7 @@ import com.xboe.core.JsonResponse; import com.xboe.core.api.ApiBaseController; import com.xboe.data.dto.ImportData; import com.xboe.enums.CasesRecommendLaunchTypeEnum; +import com.xboe.module.boecase.dto.CasesRecommendPushRecordExportVo; import com.xboe.module.boecase.entity.CasesRecommend; import com.xboe.module.boecase.entity.CasesRecommendLaunchImport; import com.xboe.module.boecase.entity.CasesRecommendPushRecord; @@ -21,6 +23,7 @@ import com.xboe.module.boecase.service.ICasesRecommendService; import com.xboe.module.boecase.vo.CasesRecommendLaunchVo; import com.xboe.module.boecase.vo.CasesRecommendPushVo; import com.xboe.module.boecase.vo.CasesRecommendVo; +import com.xboe.module.excel.ExportsExcelSenderUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.*; @@ -29,6 +32,8 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; +import java.io.OutputStream; +import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -179,47 +184,43 @@ public class CasesRecommendApi extends ApiBaseController { if (StringUtils.isEmpty(casesRecommendId)) { throw new RuntimeException("缺少必要参数"); } - CasesRecommend casesRecommend = iCasesRecommendService.findById(casesRecommendId); - // 拿取表格里需要的数据 - List recordList = iCasesRecommendPushRecordService.findAllByRecommendId(casesRecommendId); - // 用个List装表格的所有内容 - // 拼接上列明。我这里用的最土的方法,很不优雅别学我 - List> rows = recordList.stream().map(it -> { - Map row = new LinkedHashMap<>(); - row.put("案例名称", it.getCaseTitle()); - row.put("推送用户", it.getPushUserName()); - row.put("所属组织", casesRecommend.getRecommendOrgName()); - row.put("推送时间", it.getPushTime()); - row.put("是否查看", it.getReadFlag()); - row.put("首次查看时间", it.getReadStartTime()); - row.put("总查看时间", it.getReadEndTime()); - return row; - }).collect(Collectors.toList()); - if (CollectionUtil.isNotEmpty(rows)) { - // 通过工具类创建writer - try (ExcelWriter writer = ExcelUtil.getWriter(); - // 输出流 - ServletOutputStream servletOutputStream = response.getOutputStream() - ) { - // 一次性写出内容 - writer.write(rows, true); - // 微调一下每个列的宽度 - writer.setColumnWidth(0, 50); - writer.setColumnWidth(1, 16); - writer.setColumnWidth(2, 24); - writer.setColumnWidth(3, 34); - writer.setColumnWidth(4, 10); - writer.setColumnWidth(5, 20); - writer.setColumnWidth(6, 20); - // 此处的response.setContentType 和教程里的不同 - response.setContentType("application/vnd.ms-excel;charset=utf-8"); - // filename就是表格的名字,这个无所谓,反正前端还会重命名 - response.setHeader("Content-Disposition", "attachment;filename=推荐信息.xls"); - writer.flush(servletOutputStream, true); - } catch (Exception e) { - throw new RuntimeException(e.getMessage()); + try(OutputStream outputStream = response.getOutputStream()) { + // 用个List装表格的所有内容 + // 拼接上列明。我这里用的最土的方法,很不优雅别学我 + LinkedHashMap map = new LinkedHashMap<>(); + map.put("案例名称","caseTitle"); + map.put("推送用户","pushUserName"); + map.put("所属组织","recommendOrgName"); + map.put("推送时间","pushTime"); + map.put("是否查看","readFlag"); + map.put("首次查看时间","readStartTime"); + map.put("总查看时间","totalReadTime"); + + CasesRecommend casesRecommend = iCasesRecommendService.findById(casesRecommendId); + + // 拿取表格里需要的数据 + List recordList = iCasesRecommendPushRecordService.findAllByRecommendId(casesRecommendId); + List exportVos = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(recordList)) { + exportVos = recordList.stream().map(record -> { + CasesRecommendPushRecordExportVo vo = new CasesRecommendPushRecordExportVo(); + vo.setCaseTitle(record.getCaseTitle()); + vo.setPushUserName(record.getPushUserName()); + vo.setRecommendOrgName(casesRecommend.getRecommendOrgName()); + vo.setPushTime(DateUtil.formatDateTime(record.getPushTime())); + vo.setReadFlag(record.getReadFlag() == 1 ? "是" : "否"); + vo.setReadStartTime(DateUtil.formatDateTime(record.getReadStartTime())); + vo.setTotalReadTime(DateUtil.formatBetween(record.getReadStartTime(), record.getReadEndTime())); + return vo; + }).collect(Collectors.toList()); } + + response.setContentType("application/octet-stream"); + response.setHeader("Content-disposition", "attachment;filename=casesRecommend.xls"); + ExportsExcelSenderUtil.export(map, exportVos, outputStream,"yyyy-MM-dd HH:mm:ss"); + }catch (Exception e){ + log.error("导出失败",e.getMessage()); } } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/CasesRecommendPushRecordExportVo.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/CasesRecommendPushRecordExportVo.java new file mode 100644 index 00000000..6570c9ee --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/CasesRecommendPushRecordExportVo.java @@ -0,0 +1,33 @@ +package com.xboe.module.boecase.dto; + +import lombok.Data; + +import javax.persistence.Column; +import java.util.Date; + +@Data +public class CasesRecommendPushRecordExportVo { + + /** + * 案例标题 + */ + private String caseTitle; + /** + * 推送用户名称 + */ + private String pushUserName; + /**推荐组织名称*/ + private String recommendOrgName; + + private String pushTime; + + private String readFlag; + + /** + * 首次查看时间 + */ + private String readStartTime; + + private String totalReadTime; + +} diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendPushRecord.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendPushRecord.java index 49b83179..3c4cb6ab 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendPushRecord.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendPushRecord.java @@ -64,7 +64,7 @@ public class CasesRecommendPushRecord extends BaseEntity { * 推送时间 */ @Column(name = "push_time") - private Integer pushTime; + private Date pushTime; /**