From 83735978db5cb6c6d98fbf807d0a550c57ba7cfc Mon Sep 17 00:00:00 2001 From: Chenx221 Date: Tue, 13 Jun 2023 12:34:26 +0800 Subject: [PATCH] QueryResult Download as csv Signed-off-by: Chenx221 --- project2/file-folder.lnk | Bin 0 -> 1528 bytes .../controller/OutputController.class | Bin 7409 -> 8639 bytes .../chenx221/controller/ScoreController.class | Bin 4526 -> 4745 bytes .../controller/SystemController.class | Bin 0 -> 498 bytes .../cyou/chenx221/helper/CsvHelper.class | Bin 0 -> 5957 bytes .../WEB-INF/views/scoreQueryResult.jsp | 37 ++++- .../chenx221/controller/OutputController.java | 31 +++- .../chenx221/controller/ScoreController.java | 9 +- .../chenx221/controller/SystemController.java | 9 ++ .../java/cyou/chenx221/helper/CsvHelper.java | 133 ++++++++++++++++++ .../src/main/resources/spring-security.xml | 1 + .../web/WEB-INF/views/scoreQueryResult.jsp | 37 ++++- 12 files changed, 247 insertions(+), 10 deletions(-) create mode 100644 project2/file-folder.lnk create mode 100644 project2/out/artifacts/project2_war_exploded/WEB-INF/classes/cyou/chenx221/controller/SystemController.class create mode 100644 project2/out/artifacts/project2_war_exploded/WEB-INF/classes/cyou/chenx221/helper/CsvHelper.class create mode 100644 project2/src/main/java/cyou/chenx221/controller/SystemController.java create mode 100644 project2/src/main/java/cyou/chenx221/helper/CsvHelper.java diff --git a/project2/file-folder.lnk b/project2/file-folder.lnk new file mode 100644 index 0000000000000000000000000000000000000000..bb92307ac12511bfc237d3b68dbebc49d0020baa GIT binary patch literal 1528 zcmd5+T}V@57=C728ktAaD497b(TcM+(Wxszap??6MLby@$T>H*&`sQ8E6AHDh)n3B z3kgd@v%n%Rq6;a^iXa*eD{FPrO&8jacq3i*zURy>!^q1HJm2qop6~hI_c^ByfF?76 zT3}LXQGFT75NKRBapLryfrw`2O_})t^^+TPv-hc2Hfdj@#>ZNFLMCz>KG%nJ^Jcej z>q9d384Ls4vEO2rV?psj1B}Y#nKV`^z~^=PeK?2|Bx2!7PNSA%R6tPE%`tz{S zK2hU?7f$%$qlio#j`F>dY8wS~JA5dOvh8iYE-kasQS|ImIOC0d{5`tiP?$2%7iF4~ zlJW#pHdIzw5A_)JCB-5rN>#{vA*o+c7)V`5RLOBVWn>D!gAH8-J6yyql2R`^X=bC5 zh%)G5Ae5k(W&yb2K|4hRNQHa#x)@8H1 z9HQUbX}9^sGQEL|8gP5sy#b#XG!?BHAk+P2Rrz|VmmE{ns-8F4LOnl3?FkkZ8pSSq zAP11+`O}79eu?1!qwX5o9mV~ z8~Nan?X;ihQP4BvgM+r}WAwGDU}vTrJ9pemnF*pg^);IUSHZT3qPVItsA{K^qhiAo zk0zaAG3TBVH5DhfC*mf1Wo1Qm{}$D+aG>^1%@0Bx;i$>9+Y4ibhPt^^XNeVw^h9zb zHPB>FX2!BklQWgEV@IYIp6%WK4#=S`-^Cj?s0^$5p`%rBevq_cmgxnh7a*1 z{(`6QH$07xu>=3cPJD)4_%C8ygE%)}H@E6NZo^)-qK#c>=Sg(1ADv8LA1|Scm$9F} zK!U$UH?PR%mevon{vG*l{!_viIN*UT>iQ31@ku@fQ`a|eyCk0g`1rIWzpl5q!_$6T z(SEj|6&Q;vAaRd$=!#Tk$~&mM3|z*e3qYi|Z2j_6qop3i!?n_h$jTYuOc^keN-c@L(TE!mhEx;#xiuyf=;7SYR6A8(dw_?-sf4x;nBOBO>`KUc;NXq_qvd#JgI5gZJ<| ztvhi8x7esx>5kyTsMj~I7JMBIxQNyGk%sD;X9$w7rR^ n|Ij$7`8HIUdc*o71SRR?D>}<~->mm_I3Z0)r{_4u3yAy=dg9gN delta 1474 zcmZvb+fQ6o6vn^rz;LEh7z)hLa_uNm1=@~S3IzmO367&+o7VBtddUPvIxQJsX1G}` zY9I7X(|Ity*a!cD2DPb4wGYM^ee~JH^wp=PiHW7HetVzk36dr=d#}CMTIc-Mx7PV_ z{Ptkz*9YJK0APfpS3@7}+&Ep+>NM0(o=Y#M<8$fUZ2VL)pUuqdVL(2w761h+7Vzc7S57{=dHxecS- zhcO<+QTE~($1uSJo@WXPPU8h;k>sa%k)PouUdAN9z!a}2=3DJIwEvFvDgG&A6E9oX z@AUec2-0B%T)jTRN?8>Gs9-==rCuLomG$28y>}jZ1rwxeyh1DI3a*?h6qiAHcL?qz zcQ6EZU91*~ihr4j}<64;96VZ7=owdD~RSsuz<| z<6dgiw7`Z%B)k{aDB+uQ8-{ZqwJyGNapf*Dd_s2)J5|9u&29?>ZzYmmbnLDPS}O48H- diff --git a/project2/out/artifacts/project2_war_exploded/WEB-INF/classes/cyou/chenx221/controller/ScoreController.class b/project2/out/artifacts/project2_war_exploded/WEB-INF/classes/cyou/chenx221/controller/ScoreController.class index 21467d91a6bbdcdcf3166e95b4de12ed14e6c65f..3fb6a87f74cc4bf2e9e8729dac17a065421e94d3 100644 GIT binary patch delta 1146 zcmZuvYflqF6g^89+io8SLSqFHv?wHC1&JmmBnHHYL3t^!Qni+~E!GzL;2~heH$D)p z`X@|`N}^E`<7fYb|G@AaV>~mf3m=-MJ7><^IrrRq=iPzjI_<}wuipT);mrpvq6V$# zRZtzCOJ@DysGgW@X=(OH_4uTo@^_@C&q$=92Nv-eaN+_kDkzWW2|X3c=mX(oO79pL zJROVc3Vik56QSvlKbwig{oS#2CckPeFSTJvfo(iFlZYon<2H<}Wz-VYr*+PT^~p>u znMhmlK*26~HJ0>u^_VAXOSY&|Jc=R&^1tkrontiahK1ifP*Djxsu1MP!w5jbC0ynz zkONLAxI(;xYly3Ys|ZV_^IBU@D0xuKZw+H>QG)&O!iNUbNyQqOrO{Mu#5i9z@_ zILvyEaMz4uXu(OeN-wR(P18#U4$*-k)aX}u5lHy6Q0KVxr*8SHD(vq@7ZSYKWT8@$ zH)CnaPL5&GCj_BrXR5<^Vq!X3I2@6QOk%dp5t_xGaQ zJ@P8~`|`bbh#qo!#(Q~$W%+I%%dxz*^YGtTvc^Q@Y)tY=A@ZpppBV!)BUemvZfZ;P nxyf!L=L?Ywg~&xgt{R!Z8eXunBD|D!l@aB+f5mJ@ZLj|V5C^^V delta 1010 zcmZvbSx-|@6otRrUMRh#REad!0HVYJDB^5lqESd3FbX&!gIY%%P}Jf))BzQI?awe# zn??ze_~?T_!rwsRBZRolIkEWAhkMRC>zuv!+QXe%_o+GfwfOx9u!j$YV8jns(OdlE zCwy;5zEDwD+#Buna(#q2t~Up?hqMQ+(|E0IUx^fS3UNYf4PmV-@ktS76(@B{y4RfI zv`(@kMl~M&!j;<3X!jUkQ16WYN%=5d(zC<|rb&Eb+0pb*^6^-6&csMkp|w$7R+FGf zk=D{evyIi{EK9M{3^6S4G1gGWSw%P}+bX;TQV}|=h8o?U*OwW>%W^^JBA4XHXqnY+ zqIEef`OmRVtD%vI*jDAy#&Xisvq@_QJK4-WwpuOQon=W&7aOF&Gv1`vXfep>3(L1GQ@*v2vX=usZMWYpO?^>LnI zFCxZteZs}~m%SG->arKQ<+2yLonuV0B!)XezD0M1RCICogeon{3aRAc#<{Nq3^JvQ zO5ma`U7+v@$$X$@&uR1?@<|z(MhMO)-=+qnOmIr)r8D zgJ(Rq{Ii)4Pq Vx5_8PJ3HRBLhp5+R0=M)slSNyjpzUX diff --git a/project2/out/artifacts/project2_war_exploded/WEB-INF/classes/cyou/chenx221/controller/SystemController.class b/project2/out/artifacts/project2_war_exploded/WEB-INF/classes/cyou/chenx221/controller/SystemController.class new file mode 100644 index 0000000000000000000000000000000000000000..d83105d965d54f96700ac4502a4428273d36690c GIT binary patch literal 498 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 F?*LFmUAq7P literal 0 HcmV?d00001 diff --git a/project2/out/artifacts/project2_war_exploded/WEB-INF/views/scoreQueryResult.jsp b/project2/out/artifacts/project2_war_exploded/WEB-INF/views/scoreQueryResult.jsp index 887312e..cf0ae15 100644 --- a/project2/out/artifacts/project2_war_exploded/WEB-INF/views/scoreQueryResult.jsp +++ b/project2/out/artifacts/project2_war_exploded/WEB-INF/views/scoreQueryResult.jsp @@ -130,7 +130,19 @@ style="background-image: url('${pageContext.request.contextPath}/resources/img/jason-blackeye-nyL-rzwP-Mk-unsplash.jpg'); margin-top: -58.59px;">
- +
+
+
+ +
+
+
+
+ +
+
+
@@ -172,7 +184,30 @@ + diff --git a/project2/src/main/java/cyou/chenx221/controller/OutputController.java b/project2/src/main/java/cyou/chenx221/controller/OutputController.java index 27260c4..72c53e8 100644 --- a/project2/src/main/java/cyou/chenx221/controller/OutputController.java +++ b/project2/src/main/java/cyou/chenx221/controller/OutputController.java @@ -15,10 +15,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; +import java.io.*; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; @@ -124,4 +121,30 @@ public class OutputController { } return data; } + + @GetMapping("/get-csv") + public void getCSV(HttpServletResponse response, @RequestParam("filename") String filename) throws IOException { + String filePath = "file" + File.separator + filename; + + File file = new File(filePath); + if (file.exists()) { + // 设置响应头 + response.setHeader("Content-Disposition", "attachment; filename=" + file.getName()); + response.setContentType("text/csv"); + + // 读取文件内容并写入响应流 + try (InputStream inputStream = new FileInputStream(file); + OutputStream outputStream = response.getOutputStream()) { + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + } catch (IOException e) { + // 处理异常 + } + } else { + System.out.println("异常"); + } + } } \ No newline at end of file diff --git a/project2/src/main/java/cyou/chenx221/controller/ScoreController.java b/project2/src/main/java/cyou/chenx221/controller/ScoreController.java index 44b8f67..c1588da 100644 --- a/project2/src/main/java/cyou/chenx221/controller/ScoreController.java +++ b/project2/src/main/java/cyou/chenx221/controller/ScoreController.java @@ -1,5 +1,6 @@ package cyou.chenx221.controller; +import cyou.chenx221.helper.CsvHelper; import cyou.chenx221.helper.UsernameHelper; import cyou.chenx221.pojo.Course; import cyou.chenx221.pojo.Score; @@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import java.io.IOException; import java.util.List; @Controller @@ -59,7 +61,7 @@ public class ScoreController { @RequestParam(value = "min", defaultValue = "-1", required = false) int min,//最低分 @RequestParam(value = "max", defaultValue = "-1", required = false) int max,//最高分 @RequestParam(value = "range_enabler", defaultValue = "false", required = false) boolean range_enabler,//是否启用分数范围 - Model model) { + Model model) throws IOException { //username helper start String username = new UsernameHelper().getCurrentUsername(); @@ -86,9 +88,8 @@ public class ScoreController { score = new Score((score_id == -1 ? null : score_id), ((student_id == -1 && name == null) ? null : (new Student((student_id == -1 ? null : student_id), name))), (course_id == -1 && course_name == null) ? null : (new Course((course_id == -1 ? null : course_id), course_name)), range_enabler ? (min == -1 ? null : min) : null, range_enabler ? (max == -1 ? null : max) : null); scores = scoreService.getQueryScores(score); - //TODO: query result download(csv) -// courses = courseService.getQueryCourses(course); -// model.addAttribute("score", score); + String download = new CsvHelper().generateScoreCSVFile(scores); + model.addAttribute("download", download); model.addAttribute("scores", scores); return "scoreQueryResult"; } diff --git a/project2/src/main/java/cyou/chenx221/controller/SystemController.java b/project2/src/main/java/cyou/chenx221/controller/SystemController.java new file mode 100644 index 0000000..88709ff --- /dev/null +++ b/project2/src/main/java/cyou/chenx221/controller/SystemController.java @@ -0,0 +1,9 @@ +package cyou.chenx221.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@RequestMapping("/system") +public class SystemController { +} diff --git a/project2/src/main/java/cyou/chenx221/helper/CsvHelper.java b/project2/src/main/java/cyou/chenx221/helper/CsvHelper.java new file mode 100644 index 0000000..e367634 --- /dev/null +++ b/project2/src/main/java/cyou/chenx221/helper/CsvHelper.java @@ -0,0 +1,133 @@ +package cyou.chenx221.helper; + +import cyou.chenx221.pojo.Course; +import cyou.chenx221.pojo.Score; +import cyou.chenx221.pojo.Student; +import org.apache.commons.csv.CSVFormat; +import org.apache.commons.csv.CSVPrinter; + +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class CsvHelper { + public String generateScoreCSVFile(List scores) throws IOException { + List headers; + headers = Arrays.asList("成绩ID", "学生ID", "学生姓名", "课程ID", "课程名称", "成绩"); + List> data = new ArrayList<>(); + for (Score score : scores) { + List rowData = Arrays.asList( + String.valueOf(score.getScoreID()), + String.valueOf(score.getStudent().getId()), + score.getStudent().getName(), + String.valueOf(score.getCourse().getCourseID()), + score.getCourse().getCourseName(), + String.valueOf(score.getScore()) + ); + data.add(rowData); + } + String directoryPath = "file"; + File directory = new File(directoryPath); + + if (!directory.exists()) { + boolean created = directory.mkdir(); //Be careful, path: tomcat's installation path (D:\softs\res\apache-tomcat-9.0.75-windows-x64\apache-tomcat-9.0.75\bin) + if (created) { + System.out.println("目录已创建"); + } else { + System.out.println("无法创建目录"); + } + } + + File csvFile = new File("file/export-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss")) + ".csv"); + try (PrintWriter writer = new PrintWriter(csvFile); + CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT)) { + csvPrinter.printRecord(headers); + for (List row : data) { + csvPrinter.printRecord(row); + } + csvPrinter.flush(); + } + return csvFile.getName(); + } + + public String generateStudentCSVFile(List students) throws IOException { + List headers; + headers = Arrays.asList("学生ID", "学生姓名", "性别", "出生日期", "联系方式", "班级"); + List> data = new ArrayList<>(); + for (Student student : students) { + List rowData = Arrays.asList( + String.valueOf(student.getId()), + student.getName(), + student.getSex(), + student.getBirthday().toString(), + String.valueOf(student.getPhone()), + String.valueOf(student.getClasses()) + ); + data.add(rowData); + } + String directoryPath = "file"; + File directory = new File(directoryPath); + + if (!directory.exists()) { + boolean created = directory.mkdir(); //Be careful, path: tomcat's installation path (D:\softs\res\apache-tomcat-9.0.75-windows-x64\apache-tomcat-9.0.75\bin) + if (created) { + System.out.println("目录已创建"); + } else { + System.out.println("无法创建目录"); + } + } + + File csvFile = new File("file/export-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss")) + ".csv"); + try (PrintWriter writer = new PrintWriter(csvFile); + CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT)) { + csvPrinter.printRecord(headers); + for (List row : data) { + csvPrinter.printRecord(row); + } + csvPrinter.flush(); + } + return csvFile.getName(); + } + + public String generateCourseCSVFile(List courses) throws IOException { + List headers; + headers = Arrays.asList("课程ID", "课程名", "课程描述"); + List> data = new ArrayList<>(); + for (Course course : courses) { + List rowData = Arrays.asList( + String.valueOf(course.getCourseID()), + course.getCourseName(), + course.getDescription() + ); + data.add(rowData); + } + String directoryPath = "file"; + File directory = new File(directoryPath); + + if (!directory.exists()) { + boolean created = directory.mkdir(); //Be careful, path: tomcat's installation path (D:\softs\res\apache-tomcat-9.0.75-windows-x64\apache-tomcat-9.0.75\bin) + if (created) { + System.out.println("目录已创建"); + } else { + System.out.println("无法创建目录"); + } + } + + File csvFile = new File("file/export-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss")) + ".csv"); + try (PrintWriter writer = new PrintWriter(csvFile); + CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT)) { + csvPrinter.printRecord(headers); + for (List row : data) { + csvPrinter.printRecord(row); + } + csvPrinter.flush(); + } + return csvFile.getName(); + } + +} diff --git a/project2/src/main/resources/spring-security.xml b/project2/src/main/resources/spring-security.xml index 55b44eb..af4a99b 100644 --- a/project2/src/main/resources/spring-security.xml +++ b/project2/src/main/resources/spring-security.xml @@ -25,6 +25,7 @@ +
- +
+
+
+ +
+
+
+
+ +
+
+
@@ -172,7 +184,30 @@ +