Quellcode durchsuchen

Merge remote-tracking branch 'origin/dev_v3.4.2' into dev_v3.4.2

wangliang vor 8 Monaten
Ursprung
Commit
742c5e7eb2

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncBasicExamStudentImportService.java

@@ -173,7 +173,7 @@ public class AsyncBasicExamStudentImportService extends AsyncImportTaskTemplete
 
             FileOutputStream outputStream = new FileOutputStream(excelFileTemp);
             ExcelWriter writer = ExcelWriter.create(ExcelType.XLSX);
-            writer.writeDataArrays("考生数据", null, columnNames, columnValues.listIterator());
+            writer.writeStringArrays("考生数据", null, columnNames, columnValues.listIterator());
             writer.output(outputStream);
             outputStream.flush();
             outputStream.close();

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncBasicExamStudentTeacherImportService.java

@@ -168,7 +168,7 @@ public class AsyncBasicExamStudentTeacherImportService extends AsyncImportTaskTe
 
             FileOutputStream outputStream = new FileOutputStream(excelFileTemp);
             ExcelWriter writer = ExcelWriter.create(ExcelType.XLSX);
-            writer.writeDataArrays("考生数据", null, columnNames, columnValues.listIterator());
+            writer.writeStringArrays("考生数据", null, columnNames, columnValues.listIterator());
             writer.output(outputStream);
             outputStream.flush();
             outputStream.close();

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncExamStudentImportService.java

@@ -196,7 +196,7 @@ public class AsyncExamStudentImportService extends AsyncImportTaskTemplete {
 
             FileOutputStream outputStream = new FileOutputStream(excelFileTemp);
             ExcelWriter writer = ExcelWriter.create(ExcelType.XLSX);
-            writer.writeDataArrays("考生数据", null, columnNames, columnValues.listIterator());
+            writer.writeStringArrays("考生数据", null, columnNames, columnValues.listIterator());
             writer.output(outputStream);
             outputStream.flush();
             outputStream.close();

+ 2 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/obe/ObeCourseOutlineController.java

@@ -128,14 +128,14 @@ public class ObeCourseOutlineController {
     @RequestMapping(value = "/audit_report", method = RequestMethod.POST)
     @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = AuditReport.class) })
     public Result auditReport(@ApiParam(value = "课程大纲id") @RequestParam(required = false) Long obeCourseOutlineId) {
-        return ResultUtil.ok(obeCourseOutlineAuditReportService.getOrBuildAuditReport(obeCourseOutlineId, false));
+        return ResultUtil.ok(obeCourseOutlineAuditReportService.getAuditReport(obeCourseOutlineId, false));
     }
 
     @ApiOperation(value = "课程大纲-审核及合理性")
     @RequestMapping(value = "/audit_rationality_report", method = RequestMethod.POST)
     @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = AuditReport.class) })
     public Result auditRationalityReport(@ApiParam(value = "课程大纲id") @RequestParam(required = false) Long obeCourseOutlineId) {
-        return ResultUtil.ok(obeCourseOutlineAuditReportService.getOrBuildAuditReport(obeCourseOutlineId, true));
+        return ResultUtil.ok(obeCourseOutlineAuditReportService.getAuditReport(obeCourseOutlineId, true));
     }
 
     @ApiOperation(value = "课程大纲-审核报告保存")

+ 37 - 33
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -17,20 +17,19 @@ import com.qmth.boot.core.concurrent.service.ConcurrentService;
 import com.qmth.boot.core.exception.ParameterException;
 import com.qmth.boot.tools.excel.ExcelWriter;
 import com.qmth.boot.tools.excel.enums.ExcelType;
+import com.qmth.boot.tools.excel.model.CellValue;
 import com.qmth.boot.tools.io.ZipWriter;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.vo.FilePathVo;
 import com.qmth.teachcloud.common.contant.SystemConstant;
-import com.qmth.teachcloud.common.entity.BasicExam;
-import com.qmth.teachcloud.common.entity.BasicExamStudent;
-import com.qmth.teachcloud.common.entity.MarkQuestion;
-import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.BasicExamStudentStatusEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.PageSizeEnum;
 import com.qmth.teachcloud.common.enums.ScanStatus;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus;
+import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
 import com.qmth.teachcloud.common.service.FileUploadService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
@@ -166,6 +165,8 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
     private ScanStudentPaperService scanStudentPaperService;
     @Resource
     private ScanBatchPaperService scanBatchPaperService;
+    @Resource
+    private BasicCourseService basicCourseService;
 
     @Override
     public List<String> listClassByExamIdAndCourseCode(Long examId, String paperNumber) {
@@ -417,7 +418,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             response.setContentType("application/vnd.ms-excel");
             ServletOutputStream outputStream = response.getOutputStream();
             ExcelWriter writer = ExcelWriter.create(ExcelType.XLSX);
-            writer.writeDataArrays("成绩导出", null, columnNames, columnValues.listIterator());
+            writer.writeStringArrays("成绩导出", null, columnNames, columnValues.listIterator());
             writer.output(outputStream);
             outputStream.flush();
             outputStream.close();
@@ -1140,6 +1141,8 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
 
     @Override
     public void scoreExport(ArchiveStudentQuery query, HttpServletResponse response) {
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(query.getExamId(), query.getPaperNumber());
+        BasicCourse basicCourse = basicCourseService.getById(markPaper.getCourseId());
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         //生成表头
         String[] columnName = new String[]{"学生姓名", "学号", "学院", "教学班", "行政班", "课程代码", "课程名称", "状态", "客观分", "主观分", "成绩"};
@@ -1156,35 +1159,35 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             columnNameList.add(question.getMainTitle() + " " + question.getMainNumber() + "-" + question.getSubNumber() + "满分");
         }
         String[] columnNames = columnNameList.toArray(new String[0]);
-        //生成动态内容
-        List<String[]> columnValues = new ArrayList<>();
         // 使用成绩管理列表请求的数据权限
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), "/api/admin/mark/archive/score/list");
         List<ArchiveStudentVo> ret = baseMapper.studentList(sysUser.getSchoolId(), query, dpr);
 
+        //生成动态内容
+        List<CellValue[]> columnValues = new ArrayList<>();
         for (ArchiveStudentVo s : ret) {
-            List<String> valueList = new ArrayList<>();
-            valueList.add(s.getStudentName());
-            valueList.add(s.getStudentCode());
-            valueList.add(s.getCollegeName());
-            valueList.add(s.getTeachClassName());
-            valueList.add(s.getClassName());
-            valueList.add(s.getCourseCode());
-            valueList.add(s.getCourseName());
-            valueList.add(Objects.nonNull(s.getStatus()) ? s.getStatus().getName() : null);
-            valueList.add(s.getObjectiveScore() == null ? "" : s.getObjectiveScore().toString());
-            valueList.add(s.getSubjectiveScore() == null ? "" : s.getSubjectiveScore().toString());
-            valueList.add(s.getTotalScore() == null ? "" : s.getTotalScore().toString());
+            List<CellValue> valueList = new ArrayList<>();
+            valueList.add(CellValue.of(s.getStudentName()));
+            valueList.add(CellValue.of(s.getStudentCode()));
+            valueList.add(CellValue.of(s.getCollegeName()));
+            valueList.add(CellValue.of(s.getTeachClassName()));
+            valueList.add(CellValue.of(s.getClassName()));
+            valueList.add(CellValue.of(s.getCourseCode()));
+            valueList.add(CellValue.of(s.getCourseName()));
+            valueList.add(CellValue.of(Objects.nonNull(s.getStatus()) ? s.getStatus().getName() : ""));
+            valueList.add(s.getObjectiveScore() == null ? CellValue.of("") : CellValue.of(s.getObjectiveScore()));
+            valueList.add(s.getSubjectiveScore() == null ? CellValue.of("") : CellValue.of(s.getSubjectiveScore()));
+            valueList.add(s.getTotalScore() == null ? CellValue.of("") : CellValue.of(s.getTotalScore()));
             for (ScoreItem item : s.getScoreList(true, oQuestionList)) {
-                valueList.add(item.getAnswer());
-                valueList.add(item.getScore() == null ? "" : item.getScore().toString());
-                valueList.add(item.getTotalScore() == null ? "" : item.getTotalScore().toString());
+                valueList.add(CellValue.of(item.getAnswer()));
+                valueList.add(item.getScore() == null ? CellValue.of("") : CellValue.of(item.getScore()));
+                valueList.add(item.getTotalScore() == null ? CellValue.of("") : CellValue.of(item.getTotalScore()));
             }
             for (ScoreItem item : s.getScoreList(false, sQuestionList)) {
-                valueList.add(item.getScore().toString());
-                valueList.add(item.getTotalScore() == null ? "" : item.getTotalScore().toString());
+                valueList.add(CellValue.of(item.getScore()));
+                valueList.add(item.getTotalScore() == null ? CellValue.of("") : CellValue.of(item.getTotalScore()));
             }
-            String[] columnValue = valueList.toArray(new String[0]);
+            CellValue[] columnValue = valueList.toArray(new CellValue[0]);
             columnValues.add(columnValue);
         }
 
@@ -1203,20 +1206,21 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
 
             log.debug("导出Excel开始...");
             ExcelWriter writer = ExcelWriter.create(ExcelType.XLSX);
-            writer.writeDataArrays("成绩导出", null, columnNames, columnValues.listIterator());
-            FileOutputStream fileOut = new FileOutputStream(downloadFilePath + File.separator + "成绩导出" + SystemConstant.EXCEL_PREFIX);
+            writer.writeDataArrays("成绩", null, columnNames, columnValues.listIterator());
+            FileOutputStream fileOut = new FileOutputStream(downloadFilePath + File.separator + basicCourse.getName() + "-成绩单" + SystemConstant.EXCEL_PREFIX);
             writer.output(fileOut);
             fileOut.flush();
             fileOut.close();
 
             // 通过教学班聚合
-            Map<String, List<String[]>> listMap = columnValues.stream().collect(Collectors.groupingBy(m -> m[3]));
-            Set<Map.Entry<String, List<String[]>>> entrySet = listMap.entrySet();
+            Map<CellValue, List<CellValue[]>> listMap = columnValues.stream().collect(Collectors.groupingBy(m -> m[3]));
+            Set<Map.Entry<CellValue, List<CellValue[]>>> entrySet = listMap.entrySet();
             if (entrySet.size() > 1) {
-                for (Map.Entry<String, List<String[]>> entry : entrySet) {
+                for (Map.Entry<CellValue, List<CellValue[]>> entry : entrySet) {
                     writer = ExcelWriter.create(ExcelType.XLSX);
-                    writer.writeDataArrays("成绩导出", null, columnNames, entry.getValue().listIterator());
-                    FileOutputStream classFileOut = new FileOutputStream(downloadFilePath + File.separator + "成绩导出-" + entry.getKey() + SystemConstant.EXCEL_PREFIX);
+                    writer.writeDataArrays("成绩单", null, columnNames, entry.getValue().listIterator());
+                    // todo 班级名称未解决
+                    FileOutputStream classFileOut = new FileOutputStream(downloadFilePath + File.separator + basicCourse.getName() + "-" + entry.getKey() + "成绩单" + SystemConstant.EXCEL_PREFIX);
                     writer.output(classFileOut);
                     classFileOut.flush();
                     classFileOut.close();
@@ -2027,7 +2031,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             cellStyle2.setFillPattern(FillPatternType.SOLID_FOREGROUND);
             writer.setCellStyle(sheetName, cellStyle2, 0, new int[]{4, 5, 6});
 
-            writer.writeDataArrays(sheetName, null, columnNames, columnValues.listIterator());
+            writer.writeStringArrays(sheetName, null, columnNames, columnValues.listIterator());
 
             writer.output(outputStream);
             outputStream.flush();

+ 0 - 17
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/been/result/report/audit/AuditReport.java

@@ -5,7 +5,6 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import org.hibernate.validator.constraints.Range;
 
-import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 
 /**
@@ -15,12 +14,6 @@ import javax.validation.constraints.NotNull;
  */
 public class AuditReport {
 
-    @ApiModelProperty("id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    @NotNull(message = "缺少id")
-    @Range(min = 1L, message = "缺少id")
-    private Long id;
-
     @ApiModelProperty("课程大纲id")
     @JsonSerialize(using = ToStringSerializer.class)
     @NotNull(message = "缺少课程大纲id")
@@ -28,24 +21,14 @@ public class AuditReport {
     private Long courseOutlineId;
 
     @ApiModelProperty("课程基础信息")
-    @NotEmpty(message = "缺少报表课程基本信息")
     private CourseBasicInfo courseBasicInfo;
 
     @ApiModelProperty("课程目标情况")
-    @NotEmpty(message = "缺少报表课程目标情况")
     private CourseTargetInfo courseTargetInfo;
 
     @ApiModelProperty("合理性评价")
     private RationalityEvaluation rationalityEvaluation;
 
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
     public Long getCourseOutlineId() {
         return courseOutlineId;
     }

+ 1 - 1
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/service/ObeCourseOutlineAuditReportService.java

@@ -24,7 +24,7 @@ public interface ObeCourseOutlineAuditReportService extends IService<ObeCourseOu
      * @param rationality     展示合理性评价部分
      * @return 审核报告
      */
-    AuditReport getOrBuildAuditReport(Long courseOutlineId, boolean rationality);
+    AuditReport getAuditReport(Long courseOutlineId, boolean rationality);
 
     /**
      * 获取课程基本信息

+ 20 - 12
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/service/impl/ObeCourseOutlineAuditReportServiceImpl.java

@@ -42,9 +42,8 @@ public class ObeCourseOutlineAuditReportServiceImpl extends ServiceImpl<ObeCours
     @Resource
     private ObeCourseTargetService obeCourseTargetService;
 
-    @Transactional
     @Override
-    public AuditReport getOrBuildAuditReport(Long courseOutlineId, boolean rationality) {
+    public AuditReport getAuditReport(Long courseOutlineId, boolean rationality) {
         AuditReport result = new AuditReport();
         ObeCourseOutline obeCourseOutline = obeCourseOutlineService.getById(courseOutlineId);
         if (Objects.isNull(obeCourseOutline)) {
@@ -63,16 +62,22 @@ public class ObeCourseOutlineAuditReportServiceImpl extends ServiceImpl<ObeCours
 
             CourseBasicInfo courseBasicInfo = JSON.parseObject(courseBasicInfoStr, CourseBasicInfo.class);
             CourseTargetInfo courseTargetInfo = JSON.parseObject(courseTargetInfoStr, CourseTargetInfo.class);
-            RationalityEvaluation rationalityEvaluation = JSON.parseObject(rationalityEvaluationStr,
-                    RationalityEvaluation.class);
+            RationalityEvaluation rationalityEvaluation = null;
+            if (SystemConstant.strNotNull(rationalityEvaluationStr)) {
+                rationalityEvaluation = JSON.parseObject(rationalityEvaluationStr, RationalityEvaluation.class);
+            }
 
             if (!Objects.equals(auditSign, outlineSign)) {
                 // 权重设置有变化 -> 重新生成权重信息
                 courseTargetInfo = this.getCourseTargetInfo(courseOutlineId);
             }
-            if (rationality && Objects.isNull(rationalityEvaluation)) {
-                // 如果缺少合理性信息 -> 重新生成
-                rationalityEvaluation = this.getRationalityEvaluation(courseOutlineId);
+            if (rationality) {
+                if (Objects.isNull(rationalityEvaluation)) {
+                    // 如果缺少合理性信息 -> 重新生成
+                    rationalityEvaluation = this.getRationalityEvaluation(courseOutlineId);
+                }
+            } else {
+                rationalityEvaluation = null;
             }
             if (Objects.isNull(courseTargetInfo.getDate())) {
                 courseTargetInfo.setDate(System.currentTimeMillis());
@@ -89,19 +94,17 @@ public class ObeCourseOutlineAuditReportServiceImpl extends ServiceImpl<ObeCours
             result.setCourseBasicInfo(courseBasicInfo);
             result.setCourseTargetInfo(courseTargetInfo);
             result.setRationalityEvaluation(rationalityEvaluation);
-            result.setId(dbReport.getId());
         } else {
             // 还未生成过报告 -> 直接生成
             result.setCourseBasicInfo(this.getCourseBasicInfo(courseOutlineId));
             result.setCourseTargetInfo(this.getCourseTargetInfo(courseOutlineId));
-            RationalityEvaluation rationalityEvaluation = new RationalityEvaluation();
+            RationalityEvaluation rationalityEvaluation;
             if (rationality) {
                 rationalityEvaluation = this.getRationalityEvaluation(courseOutlineId);
+                result.setRationalityEvaluation(rationalityEvaluation);
             }
-            result.setRationalityEvaluation(rationalityEvaluation);
         }
         result.setCourseOutlineId(courseOutlineId);
-        result.setId(this.saveReport(result));
         return result;
     }
 
@@ -176,6 +179,7 @@ public class ObeCourseOutlineAuditReportServiceImpl extends ServiceImpl<ObeCours
         if (Objects.isNull(obeCourseOutline)) {
             throw ExceptionResultEnum.ERROR.exception("未找到课程大纲");
         }
+
         Long weightSettingSign = obeCourseOutline.getWeightSettingSign();
         CourseBasicInfo courseBasicInfo = auditReport.getCourseBasicInfo();
         CourseTargetInfo courseTargetInfo = auditReport.getCourseTargetInfo();
@@ -193,8 +197,12 @@ public class ObeCourseOutlineAuditReportServiceImpl extends ServiceImpl<ObeCours
             }
         }
 
+        Long id = null;
+        ObeCourseOutlineAuditReport dbReport = this.getOne(new QueryWrapper<ObeCourseOutlineAuditReport>().lambda().eq(ObeCourseOutlineAuditReport::getCourseOutlineId, courseOutlineId).last(SystemConstant.LIMIT1));
+        if (Objects.nonNull(dbReport)){
+            id = dbReport.getId();
+        }
         ObeCourseOutlineAuditReport obeCourseOutlineAuditReport = new ObeCourseOutlineAuditReport();
-        Long id = auditReport.getId();
         if (Objects.isNull(id)) {
             // 新增
             id = SystemConstant.getDbUuid();