wangliang 1 gadu atpakaļ
vecāks
revīzija
438219751d

+ 63 - 43
distributed-print/src/main/java/com/qmth/distributed/print/api/TRBasicInfoController.java

@@ -20,12 +20,15 @@ import com.qmth.distributed.print.business.service.TRExamStudentService;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ImportTemplateEnum;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
+import com.qmth.teachcloud.common.util.FileUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.mark.service.MarkPaperService;
 import io.swagger.annotations.*;
+import org.apache.commons.io.FileUtils;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.validation.BindingResult;
@@ -35,7 +38,10 @@ import javax.annotation.Resource;
 import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.*;
 
 /**
@@ -142,48 +148,62 @@ public class TRBasicInfoController {
     public void reportExport(@ApiParam(value = "考试id", required = true) @RequestParam Long examId,
                              @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
                              @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) throws IOException {
-        TRBasicInfo trBasicInfo = trBasicInfoService.getOne(new QueryWrapper<TRBasicInfo>().lambda().eq(TRBasicInfo::getExamId, examId).eq(TRBasicInfo::getCourseCode, courseCode).eq(TRBasicInfo::getPaperNumber, paperNumber));
-        Objects.requireNonNull(trBasicInfo, "没有报告信息");
-        Objects.requireNonNull(trBasicInfo.getCourseEvaluationResult(), "没有课程目标信息");
-        Objects.requireNonNull(trBasicInfo.getCourseEvaluationResultDetail(), "没有课程考生信息");
-
-        //评价样本的基本信息
-        String period = Objects.nonNull(trBasicInfo.getPeriod()) ? trBasicInfo.getPeriod() : null;
-        String credit = Objects.nonNull(trBasicInfo.getCredit()) ? trBasicInfo.getCredit() : null;
-        period = Objects.nonNull(credit) ? period + "/" + credit : period;
-
-        ReportCourseEvaluationResultDto reportCourseEvaluationResultDto = JSONObject.parseObject(trBasicInfo.getCourseEvaluationResult(), ReportCourseEvaluationResultDto.class);
-        CourseBasicBean courseBasicBean = new CourseBasicBean(trBasicInfo.getCourseName(),
-                trBasicInfo.getCourseCode(), null, trBasicInfo.getCourseType(),
-                period, null, null, trBasicInfo.getDirector(),
-                DateUtil.format(new Date(trBasicInfo.getCreateTime()), SystemConstant.DEFAULT_DATE_PATTERN),
-                "测试:我们的目标是没有目标", reportCourseEvaluationResultDto.getTargetList().size());
-
-        CourseReportBean courseReportBean = new CourseReportBean(trBasicInfo.getOpenTime() + "《" + trBasicInfo.getCourseName() + "》", courseBasicBean);
-
-        JSONObject jsonObject = JSONObject.parseObject(trBasicInfo.getCourseEvaluationResultDetail());
-        List<CourseTargetWordDto> courseTargetWordDtoList = JSONArray.parseArray(jsonObject.get("targetWordMap").toString(), CourseTargetWordDto.class);
-        List<CourseTargetWebDto> courseTargetWebDtoList = JSONArray.parseArray(jsonObject.get("targetWebMap").toString(), CourseTargetWebDto.class);
-
-        //table1-课程目标目标与毕业要求指标点的对应关系
-        List<String> header2_1List = new ArrayList<>(Arrays.asList("课程目标", "支撑毕业要求")), header2_2List = new ArrayList<>();
-        header2_2List.addAll(header2_1List);
-        header2_1List.add("考核/评价环节及目标分值");
-        courseReportBean.setCourseTargetTable1(trBasicInfoService.buildWordTable1(courseTargetWordDtoList, header2_1List, header2_2List));
-
-        //table2-课程目标达成评价依据
-        courseReportBean.setCourseTargetTable2(trBasicInfoService.buildWordTable2(courseTargetWordDtoList, courseTargetWebDtoList, header2_1List, header2_2List));
-
-        //table3-课程课后作业考核/评价内容及目标分值
-        courseReportBean.setCourseTargetTable3(trBasicInfoService.buildWordTable3(courseTargetWordDtoList));
-
-        //table4-课程期末考试考核/评价内容及目标分值
-        courseReportBean.setCourseTargetTable4(trBasicInfoService.buildWordTable4(courseTargetWordDtoList));
-
-        //examstudent-课程目标达成评价依据-考生
-        courseReportBean.setExamStudentTable1(trBasicInfoService.buildWordTable5(trBasicInfo, courseReportBean));
-
-        XWPFTemplate template = XWPFTemplate.compile("/Users/king/git/teachcloud-server/distributed-print/src/main/resources/static/course_degree_report.docx").render(courseReportBean);
-        template.writeToFile("/Users/king/Downloads/demo_course_degree_report.docx");
+        File txtFileTemp = null;
+        try {
+            TRBasicInfo trBasicInfo = trBasicInfoService.getOne(new QueryWrapper<TRBasicInfo>().lambda().eq(TRBasicInfo::getExamId, examId).eq(TRBasicInfo::getCourseCode, courseCode).eq(TRBasicInfo::getPaperNumber, paperNumber));
+            Objects.requireNonNull(trBasicInfo, "没有报告信息");
+            Objects.requireNonNull(trBasicInfo.getCourseEvaluationResult(), "没有课程目标信息");
+            Objects.requireNonNull(trBasicInfo.getCourseEvaluationResultDetail(), "没有课程考生信息");
+
+            //评价样本的基本信息
+            String period = Objects.nonNull(trBasicInfo.getPeriod()) ? trBasicInfo.getPeriod() : null;
+            String credit = Objects.nonNull(trBasicInfo.getCredit()) ? trBasicInfo.getCredit() : null;
+            period = Objects.nonNull(credit) ? period + "/" + credit : period;
+
+            ReportCourseEvaluationResultDto reportCourseEvaluationResultDto = JSONObject.parseObject(trBasicInfo.getCourseEvaluationResult(), ReportCourseEvaluationResultDto.class);
+            CourseBasicBean courseBasicBean = new CourseBasicBean(trBasicInfo.getCourseName(),
+                    trBasicInfo.getCourseCode(), null, trBasicInfo.getCourseType(),
+                    period, null, null, trBasicInfo.getDirector(),
+                    DateUtil.format(new Date(trBasicInfo.getCreateTime()), SystemConstant.DEFAULT_DATE_PATTERN),
+                    "测试:我们的目标是没有目标", reportCourseEvaluationResultDto.getTargetList().size());
+
+            CourseReportBean courseReportBean = new CourseReportBean(trBasicInfo.getOpenTime() + "《" + trBasicInfo.getCourseName() + "》", courseBasicBean);
+
+            JSONObject jsonObject = JSONObject.parseObject(trBasicInfo.getCourseEvaluationResultDetail());
+            List<CourseTargetWordDto> courseTargetWordDtoList = JSONArray.parseArray(jsonObject.get("targetWordMap").toString(), CourseTargetWordDto.class);
+            List<CourseTargetWebDto> courseTargetWebDtoList = JSONArray.parseArray(jsonObject.get("targetWebMap").toString(), CourseTargetWebDto.class);
+
+            //table1-课程目标目标与毕业要求指标点的对应关系
+            List<String> header2_1List = new ArrayList<>(Arrays.asList("课程目标", "支撑毕业要求")), header2_2List = new ArrayList<>();
+            header2_2List.addAll(header2_1List);
+            header2_1List.add("考核/评价环节及目标分值");
+            courseReportBean.setCourseTargetTable1(trBasicInfoService.buildWordTable1(courseTargetWordDtoList, header2_1List, header2_2List));
+
+            //table2-课程目标达成评价依据
+            courseReportBean.setCourseTargetTable2(trBasicInfoService.buildWordTable2(courseTargetWordDtoList, courseTargetWebDtoList, header2_1List, header2_2List));
+
+            //table3-课程课后作业考核/评价内容及目标分值
+            courseReportBean.setCourseTargetTable3(trBasicInfoService.buildWordTable3(courseTargetWordDtoList));
+
+            //table4-课程期末考试考核/评价内容及目标分值
+            courseReportBean.setCourseTargetTable4(trBasicInfoService.buildWordTable4(courseTargetWordDtoList));
+
+            //examstudent-课程目标达成评价依据-考生
+            courseReportBean.setExamStudentTable1(trBasicInfoService.buildWordTable5(trBasicInfo, courseReportBean));
+
+            InputStream inputStream = FileUtil.getStream("static/" + ImportTemplateEnum.STATIC_COURSE_DEGREE_REPORT.getTemplateName());
+            txtFileTemp = SystemConstant.getFileTempVar(SystemConstant.WORD_PREFIX);
+            FileUtils.copyInputStreamToFile(inputStream, txtFileTemp);
+            XWPFTemplate template = XWPFTemplate.compile(txtFileTemp.getAbsolutePath()).render(courseReportBean);
+            template.writeToFile(txtFileTemp.getAbsolutePath());
+            // 导出
+            FileUtil.outputFile(ServletUtil.getResponse(), new FileInputStream(txtFileTemp), ImportTemplateEnum.STATIC_COURSE_DEGREE_REPORT.getFileName() + "_" + courseReportBean.getTitle1() + SystemConstant.WORD_PREFIX);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (Objects.nonNull(txtFileTemp)) {
+                txtFileTemp.delete();
+            }
+        }
     }
 }

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -269,6 +269,7 @@ public class SystemConstant {
     public static final String WINDOWS = "Windows";
 
     public static final String EXCEL_PREFIX = ".xlsx";
+    public static final String WORD_PREFIX = ".docx";
     public static final String JPG_PREFIX = ".jpg";
     public static final String TEMP_PREFIX = ".temp";
     public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";

+ 3 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/ImportTemplateEnum.java

@@ -17,7 +17,9 @@ public enum ImportTemplateEnum {
     //    TEMPLATE_EXAM_STUDENT("","考务数据导入模板.xlsx"),// 不需要,有固定接口
     TEMPLATE_EXAM_STATISTICS("examStatistics.xlsx", "命题计划导入模板.xlsx"),
     TEMPLATE_BASIC_EXAM_STUDENT("basicExamStudent.xlsx", "考生字典导入模板.xlsx"),
-    TEMPLATE_COURSE_DIMENSION("courseDimension.xlsx", "课程知识点导入模板.xlsx");
+    TEMPLATE_COURSE_DIMENSION("courseDimension.xlsx", "课程知识点导入模板.xlsx"),
+
+    STATIC_COURSE_DEGREE_REPORT("course_degree_report.docx", "课程目标达成度");
 
     ImportTemplateEnum(String templateName, String fileName) {
         this.templateName = templateName;