AchievementServiceImpl.java 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. package com.ruoyi.system.service.impl;
  2. import cn.hutool.core.io.resource.ClassPathResource;
  3. import com.alibaba.excel.EasyExcel;
  4. import com.alibaba.excel.ExcelWriter;
  5. import com.alibaba.excel.support.ExcelTypeEnum;
  6. import com.alibaba.excel.util.MapUtils;
  7. import com.alibaba.excel.write.metadata.WriteSheet;
  8. import com.alibaba.excel.write.metadata.fill.FillWrapper;
  9. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  10. import com.ruoyi.system.domain.TaskResult;
  11. import com.ruoyi.system.domain.WaterLevel;
  12. import com.ruoyi.system.mapper.TaskResultMapper;
  13. import com.ruoyi.system.mapper.WaterLevelMapper;
  14. import com.ruoyi.system.paramet.AchievementQuery;
  15. import com.ruoyi.system.paramet.WaterLevelQuery;
  16. import com.ruoyi.system.service.AchievementService;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.springframework.stereotype.Service;
  19. import javax.annotation.Resource;
  20. import javax.servlet.http.HttpServletResponse;
  21. import java.io.OutputStream;
  22. import java.net.URLEncoder;
  23. import java.nio.charset.StandardCharsets;
  24. import java.util.ArrayList;
  25. import java.util.List;
  26. import java.util.Map;
  27. /**
  28. * classname: 站点信息
  29. * description 服务实现类
  30. */
  31. @Service
  32. @Slf4j
  33. public class AchievementServiceImpl implements AchievementService {
  34. @Resource
  35. private TaskResultMapper taskResultMapper;
  36. @Resource
  37. private WaterLevelMapper waterLevelMapper;
  38. @Override
  39. public Page<TaskResult> queryAchievement(AchievementQuery achievementQuery){
  40. if (achievementQuery.getPage() == null || achievementQuery.getSize() == null) {
  41. achievementQuery.setPage(1L);
  42. achievementQuery.setSize(10L);
  43. }
  44. return taskResultMapper.queryAllByLimit(achievementQuery ,new Page(achievementQuery.getPage(),achievementQuery.getSize()));
  45. }
  46. @Override
  47. public Page<WaterLevel> getWaterLevelList(WaterLevelQuery waterLevelQuery){
  48. if (waterLevelQuery.getType() == null){
  49. waterLevelQuery.setType(1L);
  50. }
  51. if (waterLevelQuery.getPage() == null || waterLevelQuery.getSize() == null) {
  52. waterLevelQuery.setPage(1L);
  53. waterLevelQuery.setSize(10L);
  54. }
  55. return waterLevelMapper.queryAllByTime(waterLevelQuery,new Page(waterLevelQuery.getPage(),waterLevelQuery.getSize()));
  56. }
  57. @Override
  58. public boolean downAchievement(Long siteId, HttpServletResponse response) {
  59. ExcelWriter excelWriter = null;
  60. try {
  61. OutputStream outputStream = response.getOutputStream();
  62. // 模版文件
  63. ClassPathResource classPathResource = new ClassPathResource("excel/test.xlsx");
  64. String templateFileName = classPathResource.getFile().getPath();
  65. excelWriter = EasyExcel.write(outputStream).withTemplate(templateFileName).excelType(ExcelTypeEnum.XLSX).autoCloseStream(Boolean.FALSE).build();
  66. WriteSheet writeSheet = EasyExcel.writerSheet().build();
  67. //新插入行
  68. //FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
  69. //单数据
  70. Map<String, Object> map = MapUtils.newHashMap();
  71. map.put("stieName", "水文站");
  72. excelWriter.fill(map, writeSheet);
  73. //列表
  74. List<Map<String, Object>> dataList = new ArrayList<>();
  75. //列表
  76. List<Map<String, Object>> pgList = new ArrayList<>();
  77. for (int i = 0; i < 3; i++) {
  78. Map<String, Object> data = MapUtils.newHashMap();
  79. data.put("index", i);
  80. data.put("a", "a" + i);
  81. data.put("b", "b" + i);
  82. data.put("c", "c" + i);
  83. data.put("d", "d" + i);
  84. data.put("e", "e" + i);
  85. data.put("f", "f" + i);
  86. data.put("g", "g" + i);
  87. data.put("h", "h" + i);
  88. data.put("i", "i" + i);
  89. data.put("j", "j" + i);
  90. data.put("k", "k" + i);
  91. data.put("l", "l" + i);
  92. data.put("m", "m" + i);
  93. data.put("n", "n" + i);
  94. data.put("o", "o" + i);
  95. dataList.add(data);
  96. }
  97. for (int i = 0; i < 2; i++) {
  98. Map<String, Object> data = MapUtils.newHashMap();
  99. data.put("a", "a" + i);
  100. data.put("b", "b" + i);
  101. data.put("c", "c" + i);
  102. data.put("d", "d" + i);
  103. data.put("e", "e" + i);
  104. data.put("f", "f" + i);
  105. pgList.add(data);
  106. }
  107. Map<String, Object> data = MapUtils.newHashMap();
  108. data.put("index", "index");
  109. data.put("a", "a");
  110. data.put("b", "b");
  111. data.put("c", "c");
  112. data.put("d", "d");
  113. data.put("e", "e");
  114. data.put("f", "f");
  115. data.put("g", "g");
  116. data.put("h", "h");
  117. data.put("i", "i");
  118. data.put("j", "j");
  119. data.put("k", "k");
  120. data.put("l", "l");
  121. data.put("m", "m");
  122. data.put("n", "n");
  123. data.put("o", "o");
  124. dataList = insertEmptyDataOnEvenRows(dataList, data);
  125. pgList = insertEmptyDataOnEvenRows(pgList, data);
  126. excelWriter.fill(new FillWrapper("details", dataList), writeSheet);
  127. excelWriter.fill(new FillWrapper("pg", pgList), writeSheet);
  128. // 设置输出流格式以及文件名:
  129. response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
  130. response.setCharacterEncoding("utf-8");
  131. String fileName = URLEncoder.encode("质检任务", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
  132. response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
  133. return true;
  134. } catch (Exception e) {
  135. log.error("下载失败", e);
  136. return true;
  137. } finally {
  138. if (excelWriter != null) {
  139. excelWriter.close();
  140. }
  141. }
  142. }
  143. public static <T> List<T> insertEmptyDataOnEvenRows(List<T> list, T emptyValue) {
  144. List<T> modifiedList = new ArrayList<>(list.size() * 2 - 1); // 预估新列表的大小
  145. for (int i = 0; i < list.size(); i++) {
  146. modifiedList.add(list.get(i)); // 添加原始元素
  147. if (i < list.size() - 1) { // 避免在最后一个元素后插入
  148. modifiedList.add(emptyValue); // 在每个元素后插入空白数据
  149. }
  150. }
  151. return modifiedList;
  152. }
  153. }