From b534515490bd79de8d5749e2379dfd11f83e199f Mon Sep 17 00:00:00 2001 From: "jiakun.lin" Date: Wed, 31 Mar 2021 11:18:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=A6=E7=94=9F=E7=AB=AF=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E7=BB=83=E4=B9=A0=EF=BC=8C=E8=80=83=E6=A0=B8=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=A7=93=E5=90=8D=EF=BC=8C=E5=AD=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/msdw/tms/common/utils/Constant.java | 4 + .../tms/common/utils/poi/ExcelExportUtil.java | 70 ++++++++++++++++++ .../ExperimentProjectRecordImportRequest.java | 18 +++-- .../tms/entity/vo/ProjectRecordExportVo.java | 4 + .../impl/ProjectRecordServiceImpl.java | 17 ++++- .../excel-template/练习记录模板.xlsx | Bin 10328 -> 10357 bytes .../excel-template/考核记录模板.xlsx | Bin 10380 -> 10453 bytes .../resources/mapper/tms/ProjectRecordDao.xml | 3 +- 8 files changed, 105 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/msdw/tms/common/utils/Constant.java b/src/main/java/com/msdw/tms/common/utils/Constant.java index 96214b0..e0d4263 100644 --- a/src/main/java/com/msdw/tms/common/utils/Constant.java +++ b/src/main/java/com/msdw/tms/common/utils/Constant.java @@ -54,6 +54,10 @@ public class Constant { * 通过excel批量导入试题数据时起始行 */ public static final int ROW_INDEX = 2; + /** + * 通过excel批量导入试题数据时起始行(专门用于练习,考核报告的) + */ + public static final int ROW_INDEX_REPORT = 3; /** * 通过excel批量导入试题数据时起始行 */ diff --git a/src/main/java/com/msdw/tms/common/utils/poi/ExcelExportUtil.java b/src/main/java/com/msdw/tms/common/utils/poi/ExcelExportUtil.java index e43d0fb..27e470b 100644 --- a/src/main/java/com/msdw/tms/common/utils/poi/ExcelExportUtil.java +++ b/src/main/java/com/msdw/tms/common/utils/poi/ExcelExportUtil.java @@ -1,5 +1,6 @@ package com.msdw.tms.common.utils.poi; +import com.msdw.tms.entity.vo.StudentVo; import lombok.Data; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -8,6 +9,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.lang.reflect.Field; import java.net.URLEncoder; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; @@ -75,6 +77,74 @@ public class ExcelExportUtil { workbook.write(response.getOutputStream()); } + + /** + * 基于注解导出(新增需求拓展) + * 参数: + * response: + * InputStream:模板的输入流 + * objs:数据 + * obj:拓展对象 + * fileName:生成的文件名 + */ + public void exportExpand(HttpServletResponse response, InputStream is, List objs,Object obj, String fileName) throws Exception { + + //1.根据模板创建工作簿 + XSSFWorkbook workbook = new XSSFWorkbook(is); + //2.读取工作表 + Sheet sheet = workbook.getSheetAt(0); + Row row1 = sheet.getRow(styleIndex); + //3.提取公共的样式 + CellStyle[] styles = getTemplateStyles(row1); + + //导出学生姓名,学号 + Sheet sheet1 = this.exportStudentInfo(sheet,(StudentVo)obj); + + //4.根据数据创建每一行和每一个单元格的数据2 + AtomicInteger datasAi = new AtomicInteger(rowIndex); //数字 + for (T t : objs) { + //datasAi.getAndIncrement() :获取数字,并++ i++ + Row row = sheet1.createRow(datasAi.getAndIncrement()); + for (int i = 0; i < styles.length; i++) { + Cell cell = row.createCell(i); + cell.setCellStyle(styles[i]); + for (Field field : fields) { + if (field.isAnnotationPresent(ExcelAttribute.class)) { + field.setAccessible(true); + ExcelAttribute ea = field.getAnnotation(ExcelAttribute.class); + if (i == ea.sort()) { + if (field.get(t) != null) { + cell.setCellValue(field.get(t).toString()); + } + } + } + } + } + } + fileName = URLEncoder.encode(fileName, "UTF-8"); + response.setContentType("application/octet-stream"); + response.setHeader("content-disposition", "attachment;filename=" + new String(fileName.getBytes("ISO8859-1"))); + response.setHeader("filename", fileName); + workbook.write(response.getOutputStream()); + } + + /** + * 添加姓名,学号的导出 + * @param sheet + * @return + */ + private Sheet exportStudentInfo(Sheet sheet,StudentVo studentVo){ + Integer ROW_INDEX = 1; + Integer CELL_INDEX_NAME = 1; + Integer CELL_INDEX_WORKNUMBER = 3; + + sheet.getRow(ROW_INDEX).getCell(CELL_INDEX_NAME).setCellValue(studentVo.getUserName()); + sheet.getRow(ROW_INDEX).getCell(CELL_INDEX_WORKNUMBER).setCellValue(studentVo.getWorkNumber()); + return sheet; + } + + + CellStyle[] getTemplateStyles(Row row) { CellStyle[] styles = new CellStyle[row.getLastCellNum()]; for (int i = 0; i < row.getLastCellNum(); i++) { diff --git a/src/main/java/com/msdw/tms/entity/request/ExperimentProjectRecordImportRequest.java b/src/main/java/com/msdw/tms/entity/request/ExperimentProjectRecordImportRequest.java index 2dac435..2254101 100644 --- a/src/main/java/com/msdw/tms/entity/request/ExperimentProjectRecordImportRequest.java +++ b/src/main/java/com/msdw/tms/entity/request/ExperimentProjectRecordImportRequest.java @@ -8,36 +8,42 @@ import lombok.Data; */ @Data public class ExperimentProjectRecordImportRequest { + /** - * 实验班级名称 + * 实验名称(即考核名称) */ @ExcelAttribute(sort = 0) + private String experimentalName; + /** + * 实验班级名称 + */ + @ExcelAttribute(sort = 1) private String experimentalClassName; /** * 实验项目名称 */ - @ExcelAttribute(sort = 1) + @ExcelAttribute(sort = 2) private String projectName; /** * 得分 */ - @ExcelAttribute(sort = 2) + @ExcelAttribute(sort = 3) private Integer score; /** * 耗时 */ - @ExcelAttribute(sort = 3) + @ExcelAttribute(sort = 4) private Integer timeSum; /** * 起始时间 */ - @ExcelAttribute(sort = 4) + @ExcelAttribute(sort = 5) private String startTime; /** * 结束时间 */ - @ExcelAttribute(sort = 5) + @ExcelAttribute(sort = 6) private String endTime; } diff --git a/src/main/java/com/msdw/tms/entity/vo/ProjectRecordExportVo.java b/src/main/java/com/msdw/tms/entity/vo/ProjectRecordExportVo.java index 080b776..10a0573 100644 --- a/src/main/java/com/msdw/tms/entity/vo/ProjectRecordExportVo.java +++ b/src/main/java/com/msdw/tms/entity/vo/ProjectRecordExportVo.java @@ -88,4 +88,8 @@ public class ProjectRecordExportVo extends ProjectRecordEntity implements Serial * 实验班级名称 */ private String experimental_class_name; + /** + * 实验名称(即考核名称) + */ + private String experimentalName; } diff --git a/src/main/java/com/msdw/tms/service/impl/ProjectRecordServiceImpl.java b/src/main/java/com/msdw/tms/service/impl/ProjectRecordServiceImpl.java index 8edb4c7..844115e 100644 --- a/src/main/java/com/msdw/tms/service/impl/ProjectRecordServiceImpl.java +++ b/src/main/java/com/msdw/tms/service/impl/ProjectRecordServiceImpl.java @@ -8,6 +8,7 @@ import com.msdw.tms.common.utils.PageUtils; import com.msdw.tms.common.utils.R; import com.msdw.tms.common.utils.poi.ExcelExportUtil; import com.msdw.tms.dao.ProjectRecordDao; +import com.msdw.tms.dao.StudentDao; import com.msdw.tms.entity.ExperimentalReportEntity; import com.msdw.tms.entity.ProjectRecordEntity; import com.msdw.tms.entity.request.ExperimentProjectRecordImportRequest; @@ -15,6 +16,7 @@ import com.msdw.tms.entity.request.ProjectRecordImportRequest; import com.msdw.tms.entity.resp.GetByUserRecordResp; import com.msdw.tms.entity.vo.ProjectRecordExportVo; import com.msdw.tms.entity.vo.ProjectRecordVo; +import com.msdw.tms.entity.vo.StudentVo; import com.msdw.tms.service.ProjectRecordService; import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.BeanUtils; @@ -38,6 +40,9 @@ public class ProjectRecordServiceImpl extends ServiceImpl projectRecordVos = this.baseMapper.getByRecordImport(projectRecord); // List projectRecordVos = this.baseMapper.getByUserRecordImport(projectRecord); + StudentVo studentVo = studentDao.queryStudentDetails(userId); + List importRequests = projectRecordVos.stream().map(project -> { ProjectRecordImportRequest request = new ProjectRecordImportRequest(); BeanUtils.copyProperties(project, request); @@ -183,8 +190,8 @@ public class ProjectRecordServiceImpl extends ServiceImpl projectRecordVos = this.baseMapper.getByUserRecordImport(projectRecord); + StudentVo studentVo = studentDao.queryStudentDetails(userId); + List importRequests = projectRecordVos.stream().map(project -> { ExperimentProjectRecordImportRequest request = new ExperimentProjectRecordImportRequest(); BeanUtils.copyProperties(project, request); @@ -211,8 +220,8 @@ public class ProjectRecordServiceImpl extends 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 diff --git a/src/main/resources/excel-template/考核记录模板.xlsx b/src/main/resources/excel-template/考核记录模板.xlsx index 9c171c4c0ca3beeae8f041987b2595c3fe1d2acc..519379bf9dd379c6ed3fb9f17b6deed34916cacc 100644 GIT binary patch delta 4664 zcmZ9QXH*l+(#JypX%b3^^d3U*2uN>&fFM#My@>SQLNkKWK@5?A^xi~z5kdz+L~2m! zVCW!SrNhum-ubX+&e@sW|Jj)j`x%V275B$ z+3Jg@5(-0iw#KIdtR@`86JO=x2Tq5rkgk>v+g4^kgO=^m?<1q?sR>Lgt0i+C;hxG1 zeis&l#T)hFb`hbk9!~ZDo(6qV4-BvxHh7cry6-V<={h7|NYUYi!s^Kq)7lVCS@f@K zu*>~A*+Pi+BTTKouZ9BPlhW}hyJ#n%j+2jb~D6Kp>-#m$ok5I_4;uJKiVZWH8^9cTb~!M{(tq^SxRVK5^k12)-Mj?7$~BbIX?Q zQNbyV>8o`<7CZXOz&l*%u04sYj^=6UCYN2PHm5_3WwpjtLTLy)j?u$mQR9;A#It(* z)5mj_IN6P?w0$J;%U8?x_r=#;Zr-(*lO6=49AFnb#4>shw7c2nUs__k*P>{2U`?)i zTQ&J|wDA_SO54$N!MMSpqKE1|PP!Q#8Jl&S-|KnqKIs%q?=^7)X{CjRZi^z7yFO6ycuKwLxHQM5wdy^(>OHCKk^B~KCnJ~0dF&VJgZyMT70t2| zJ}@@@Cru`j(|$&4$v|##s8aoX#rp_+MlGPF{<#)PgGEP@vqr$GAv0i#5gycO(Uosd z%NpkBJD_{l_v0%j#MI{rN~ZIwyN-qMU+>0bO=hbVtv#P9G9jF0z-rCx>3tgu&y|de z>>(dRuSoU`S)Qo*w)Owmf#7uR2{V4{PX*7yAr5t9SkE*hfq^a|5qh7OseXy1k(~TZ zba;$4IRG%JkItoqAa}fG`x&p5Y_AEsZO;up-&*{MF(0v?CL;G&k9gem%!BlCTpgJ~ zk(Ob^e7;JP)X`T?!f5{?Q#$xJt|29%g|C!uW4AYz!Tg7%R}`VUQEl>P(D5XVhvL*I zy4>c)BkcMvLd(NSo(=KIgEw)m%d7mXq(tE5B4tPwa?B9vjl?ZDm+8<2U04rLgq0TO z$f80#&NCOM;_=|o7M~5-TA;v1SutDx!T1*)o-H=H=lTtdEO(T`a8y02ywSM*JX+Q$ z{Ze|){0K8~sduJ~{+2fL3x_d;q10MBG7M)vx{VXMQ{nz7(SZ-T0cvsZ|D8!c%C>|>g5>RpesD*YL{-`Cj?0r&vA@`` zkDB7R-YdkG-B#}n!8i-o7CG!;7|mQaxguphwUFYmYs)gd`W^S%BeVByJBw!m>#g3p z>QcosNqXR_zEMB86~!^C((V%x@kGQT#JXeXFcn{>N<8AY`vv{Prg~3A+6DNMW!uF+ zK}L23sY7B@R;CIts^7WWb7#Po@TT;w8BmF;j;@c-WP`_xHLhBJC*Eq$!p^%)bTyS+ z!)m8CVwlL=l~^%1OB~iXExW#i6y?+O{>)uO%12TF_F6Z*wjm3gopjB4*cP()JVuo! z@xA4!F3C(uT)(ZiW9W7nctC$+*1KSAIg?ilDF!^UTS~Spdv(4x7fv0h?@tI;%2lC5 zcv1!XjIC+ei|xf)Nzso<4?n4YRBg&^((VEe0iV`A@Cv-l@%z!Wk{7K7hls?sfgaRS zp_5W)s>RO(VmtG{F(ql@BnAz9;|_Q)OWT`q?xKv_lcv~tA--xvU!%r}GiBd$#cC$9 zTmoYp!J}6{UdgC(i&Ca*b#@)zN_+nPi>Ua0&9RWs>b!p2sr}~17O#t0!sCS{CY8)q z%G@6ED<_|3oAlZ57*)0ftA?5Hrcbghw- zFBo}R8roOyTr#XB=7)O6DlIRO4s$%01>Nu-^OGluSUgy&Nx28jy+@1bv@L#H+#iD| zj#n_t|B$07U6E%|o|Hv9#r{KIpTJw;K)#fS%=c*`HTGt9pN=TQZYYRDfXHhWxlcr^ zj3St$PCwd#k~_k888)a)rrY4Yw5K&IM85We+AB#uAPiyYI*5cH(=d%LrPq~4Ne5FX z8q{oIOq(k-lWebkx$A-j`k(}I>b&27w|U;9#F@r@b^j>Y-F6=jJrs`vzaru*l;QQ6 zW{^az#`{)%{vf*^e~&9$P*MG>*uyxBSRpJFK7pB zP_r3Ns2f%d4*oVB@T0njSni#u0rz{-3kwB(pX7YoJ#d+5P9eHFihJw-@?{&C`G>>y z%1ujKC;9gz_Uqrk%2UP7Jsg3p;tOv1s))3JRCRzybRKCJXENa6=Xo!(y8}FfI41VX zgR_6%G{AGSNU+<@0{b8AF4KB*TWEdd`fzIjS9`1K({x#{BgR$s4Qk7Nlk`C*t=!hw zn(j(bl+0YE#RLl1K(r~ACrXpUB57Bw^y`rJb3=m2j@UugVoT~fu-Y(RzRH{K)str+ z@PwMGZ4t5bXqmD7K<5jjNW34)%S?r0jcZP__d~YY0K42e&q?aH!Jb)2jG$0iex6P$IJ2T_2SoJ}@CGk#gW_w-aOyHuM;sVl~ z%C$6Q8F%K{yc^|C_`nI!vZ4t@47Lk|^~5RUCkx#41dv-Sv?L;X_8lDIK34ghpNG4T z81*5umMu+rX@q+J3(=mN_jki)t5}5Aa!BTlT6UMCmM7d2l z^O@@No<>{Excl8>Dh_Y!mgm3kG-Nz*hj*N%GAnB(OK7Jk(@myWPkNo(olq26mlR-I z#D9}zXtJrrzgiuMlG2@>_g1M=uhX-GK7wibM$G{XhNfrtr>%p7jJ|(c9CTG^rcSn| zX}yqZ^PRhHr8rb6d3^YJIJ-Vf_a~bFX0Q@f^D-Ibah57QW}52xSU59mZ7%0o7M4i1 zG%pzDmx|BsX^H&doeAp`2D^wrevZI(Srx_kjYe9~!Fkb8`t>+{?t`n~poD01RQ49VPNjLw#zR}SBSCgn_tX@4o^dZPCrkTP(5@t~@I1&y0jqrWMRZgdkxM~C zX`Bvy8jR#+F1RhD@iR7(U;Myyq!KgkpDbr9oNjLf?Ww9WB2SKu4T`A3dlk@ddtnF-KhaURb{2Xd7a+APpDeki z!DLdbP|&SSPotEZAWkiFL+pmFhNnEXroQx)G z9wU`ogMu!`>B}oWvU$U~@0ly0njDFRHLiRDDd(!G~hK z-u4e$N5*v`=sx8Oc@Pw8jZU0@uqR6HK=Qyw_Ac-raJ=QQ_c+zff0b}i@bi2G(uOfM z6k&KimR!WxTr5EtCgfzlP?cyx83BB%wyrhR~3;yqD!0?59y zptx>XW?WvZXg2WWvJ5xEkyt4eX}8fdnY*(ynTZW;svRE-WMal_8p~vS$(~QD__8oP z-SVAvVwUnb-^M_u6`~QgaXeq;cc8VHk^1DY-Yaj#b*0;i zlM*9`d~W4dK1b%mj%opVqOX0ZQ~56MwC-FJ{{4*7{o!9yK#V?Kg`1Q*Ynk~E7B{1B zu;wBozGBuKZ(&O0dWnCy$4l-?~ml2W#)S>9|77B&0T25ABpL0~m>bk#T-B&}(g6uVL2_U}?O6&p2DD-B0-qm32t-$I`fJib)^qf_<| zzEk~?k8l?a^73`F_wsW43-3v&A^l!4>buAHE}pL{>SdHrRlriIIa*aypVdhp6xD8} zxu?DEbi&6r7|K+x1qApzJ!w?p*Y4;Jw)0mVD11#jmik?7kK*j$3K`a%*GE!v2d$~D zitNG#1c%nUCdr2}`f-qsb>!)h2EKuIxT=UNOWcyucU`8VfVYO@-x2nQ6H>pvUniB# z6HlfW+B0z(W4C2)yzg952xJY3B^(6K94FP}VBVVFoBG8}^JGWRXyY8pkNOA7fJ*)ckNy$=R6NmcnwlEB4x- zP08fv)rX-1->(2^_MVk7#Jz+qw$3IVELqLvQGK2_w8cw@&Cyg%PDe2vsj}|al>2N) zB%S8vXaxDZzzD$JzT>uvg&l@v=oRAkHdjUezV;s|0RT{BG-wqlQGGMJDG@;|8U$4# zz@r~PC4o0M&@Z4V#Q)4u(9Ar>z-u7dhew&f3|-431{C2$FZ0|cFhMiIgju-%-Bf=H z_P5vm8UcXg&&tn=wuixZ|HD840OjA^KlXnCd9?r3*3UoK-O&%t0p&oC!axLA^a4!! zj}8bgjQM{%;Xk>7Xj5JV0t6b(%gOTpV+axefZ?C>|9wLd5xSd*3BAQD0GuWH<3iAa Ue4@Z1vVUA3KFAFr=->E%0g7&{P5=M^ delta 4590 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 diff --git a/src/main/resources/mapper/tms/ProjectRecordDao.xml b/src/main/resources/mapper/tms/ProjectRecordDao.xml index a5999a1..b143123 100644 --- a/src/main/resources/mapper/tms/ProjectRecordDao.xml +++ b/src/main/resources/mapper/tms/ProjectRecordDao.xml @@ -106,7 +106,8 @@ startingTime as startTime, endTime, recordState, - tet.experimental_class_name + tet.experimental_class_name, + tet.experimental_name FROM tms_project_record tpr LEFT JOIN hr_project_management tp ON tpr.projectId = tp.projectId LEFT JOIN tms_experimental_teaching tet ON tpr.projectId = tet.project_id