SysLogService.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package com.iden.bms.service;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.alibaba.excel.EasyExcel;
  5. import com.alibaba.excel.ExcelWriter;
  6. import com.alibaba.excel.write.metadata.WriteSheet;
  7. import com.alibaba.excel.write.metadata.fill.FillConfig;
  8. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  9. import com.baomidou.mybatisplus.core.metadata.IPage;
  10. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  11. import com.iden.common.entity.IdenSysLog;
  12. import com.iden.common.service.IdenSysLogService;
  13. import com.iden.common.service.IdenCommunityService;
  14. import com.iden.common.vo.SysLogVO;
  15. import com.iden.common.vo.PageReqVO;
  16. import com.iden.common.vo.UserLoginedConvertVO;
  17. import org.springframework.beans.BeanUtils;
  18. import org.springframework.stereotype.Service;
  19. import org.springframework.util.StringUtils;
  20. import javax.annotation.Resource;
  21. import javax.servlet.http.HttpServletResponse;
  22. import java.io.IOException;
  23. import java.io.InputStream;
  24. import java.net.URLEncoder;
  25. import java.util.ArrayList;
  26. import java.util.List;
  27. /**
  28. *
  29. * @author makejava
  30. * @since 2021-05-21 00:08:38
  31. */
  32. @Service
  33. public class SysLogService {
  34. @Resource
  35. private IdenSysLogService idenSysLogService;
  36. /**
  37. * 查询摄像头列表 username,logType,createTime,
  38. * @return
  39. */
  40. public IPage<SysLogVO> listSysLog(String username, String logType, String createTime, UserLoginedConvertVO loginUser, PageReqVO pageReqVo) {
  41. IPage<IdenSysLog> page = new Page<>(pageReqVo.getCurrent(), pageReqVo.getPageSize());
  42. QueryWrapper<IdenSysLog> queryWrapper = new QueryWrapper<>();
  43. queryWrapper.lambda().eq(StrUtil.isNotEmpty(username),IdenSysLog::getUsername,username)
  44. .eq(StrUtil.isNotEmpty(logType),IdenSysLog::getLogType,logType)
  45. .orderByDesc(IdenSysLog::getCreateTime);
  46. if(!StringUtils.isEmpty(createTime)) {
  47. queryWrapper.apply("DATE_FORMAT(create_time,'%Y-%m-%d') = {0}", createTime);
  48. }
  49. IPage<IdenSysLog> pageRes = this.idenSysLogService.page(page, queryWrapper);
  50. IPage<SysLogVO> results = new Page<>(pageRes.getCurrent(),pageRes.getSize(),pageRes.getTotal());
  51. if(CollUtil.isNotEmpty(pageRes.getRecords())){
  52. List<SysLogVO> list = new ArrayList<>();
  53. pageRes.getRecords().forEach(item -> {
  54. SysLogVO resVO = new SysLogVO();
  55. BeanUtils.copyProperties(item,resVO);
  56. list.add(resVO);
  57. });
  58. results.setRecords(list);
  59. }
  60. return results;
  61. }
  62. public void exportToExcel(String username, String logType, String createTime, UserLoginedConvertVO loginUser, HttpServletResponse response) throws Exception {
  63. QueryWrapper<IdenSysLog> queryWrapper = new QueryWrapper<>();
  64. queryWrapper.lambda().eq(StrUtil.isNotEmpty(username),IdenSysLog::getUsername,username)
  65. .eq(StrUtil.isNotEmpty(logType),IdenSysLog::getLogType,logType)
  66. .orderByDesc(IdenSysLog::getCreateTime);
  67. if(!StringUtils.isEmpty(createTime)) {
  68. queryWrapper.apply("DATE_FORMAT(create_time,'%Y-%m-%d') = {0}", createTime);
  69. }
  70. List<IdenSysLog> list = this.idenSysLogService.list(queryWrapper);
  71. List<SysLogVO> records = new ArrayList<>();
  72. if(CollUtil.isNotEmpty(list)) {
  73. list.forEach(item -> {
  74. SysLogVO resVO = new SysLogVO();
  75. BeanUtils.copyProperties(item, resVO);
  76. records.add(resVO);
  77. });
  78. }
  79. InputStream excelTemplateIs = null;
  80. try {
  81. response.reset(); // 非常重要
  82. response.addHeader("Access-Control-Allow-Origin", "*");
  83. response.setContentType("application/vnd.ms-excel");
  84. response.setCharacterEncoding("utf-8");
  85. final String fileName = URLEncoder.encode("SysLog", "UTF-8");
  86. response.setHeader("Content-disposition", "attachment;filename=" + fileName +"_"+ System.currentTimeMillis() + ".xlsx");
  87. // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替
  88. // {} 代表普通变量 {.} 代表是list的变量
  89. excelTemplateIs = this.getClass().getResourceAsStream("/static/template/export/IdenSysLogExportTemplate.xlsx");
  90. ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(excelTemplateIs).build();
  91. WriteSheet writeSheet = EasyExcel.writerSheet("系统日志表").build();
  92. // 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。
  93. // forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用
  94. // 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存
  95. // 如果数据量大 list不是最后一行 参照另一个
  96. FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.FALSE).build();
  97. excelWriter.fill(records, fillConfig, writeSheet);
  98. excelWriter.finish();
  99. } catch (Exception e) {
  100. e.printStackTrace();
  101. } finally {
  102. if(excelTemplateIs != null){
  103. try {
  104. excelTemplateIs.close();
  105. } catch (IOException ioe) {
  106. ioe.printStackTrace();
  107. }
  108. }
  109. }
  110. }
  111. }