Browse Source

add: 知学知考 本地接口测试

caozixuan 3 years ago
parent
commit
3effe9f436
24 changed files with 683 additions and 193 deletions
  1. 6 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/excel/GradePaperStructDto.java
  2. 2 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/marking/Question.java
  3. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/analyze/GradePaperDefineParam.java
  4. 65 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/analyze/GradePaperDimensionDatasource.java
  5. 17 51
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/analyze/GradePaperDimensionParam.java
  6. 10 7
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/GradeBatchPaperMapper.java
  7. 14 14
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/GradeBatchPaperService.java
  8. 10 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/GradeBatchService.java
  9. 11 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/GradePaperDimensionService.java
  10. 7 9
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeBatchPaperServiceImpl.java
  11. 35 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeBatchServiceImpl.java
  12. 54 51
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradePaperDimensionServiceImpl.java
  13. 5 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradePaperStructServiceImpl.java
  14. 4 10
      distributed-print-business/src/main/resources/mapper/GradeBatchPaperMapper.xml
  15. 59 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/GradeBatchController.java
  16. 74 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/GradeBatchPaperController.java
  17. 47 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/GradeModuleEvaluationController.java
  18. 61 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/GradePaperController.java
  19. 92 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/GradePaperDimensionController.java
  20. 79 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/GradePaperStructController.java
  21. 5 4
      distributed-print/src/main/java/com/qmth/distributed/print/interceptor/AuthInterceptor.java
  22. 7 6
      distributed-print/src/main/resources/application-dev.properties
  23. 15 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/QuestionType.java
  24. 3 3
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

+ 6 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/excel/GradePaperStructDto.java

@@ -36,7 +36,7 @@ public class GradePaperStructDto {
     @ExcelNote(value = "题目类型")
     @ExcelProperty(name = "题目类型", width = 30, index = 5)
     @NotNull
-    private QuestionType numberType;
+    private String numberType;
 
     @ExcelNote(value = "大题名称")
     @ExcelProperty(name = "大题名称", width = 30, index = 6)
@@ -56,7 +56,7 @@ public class GradePaperStructDto {
     @ExcelNote(value = "题目满分")
     @ExcelProperty(name = "题目满分", width = 30, index = 9)
     @NotNull
-    private BigDecimal fullScore;
+    private String fullScore;
 
     @ExcelNote(value = "知识维度")
     @ExcelProperty(name = "知识维度", width = 30, index = 10)
@@ -100,11 +100,11 @@ public class GradePaperStructDto {
         this.paperType = paperType;
     }
 
-    public QuestionType getNumberType() {
+    public String getNumberType() {
         return numberType;
     }
 
-    public void setNumberType(QuestionType numberType) {
+    public void setNumberType(String numberType) {
         this.numberType = numberType;
     }
 
@@ -132,11 +132,11 @@ public class GradePaperStructDto {
         this.smallQuestionNumber = smallQuestionNumber;
     }
 
-    public BigDecimal getFullScore() {
+    public String getFullScore() {
         return fullScore;
     }
 
-    public void setFullScore(BigDecimal fullScore) {
+    public void setFullScore(String fullScore) {
         this.fullScore = fullScore;
     }
 

+ 2 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/marking/Question.java

@@ -3,6 +3,7 @@ package com.qmth.distributed.print.business.bean.marking;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Comparator;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -87,7 +88,7 @@ public class Question {
         if (!a.getSubNumber().equals(b.getSubNumber())) {
             return false;
         }
-        if (!a.getTotalScore().equals(b.getTotalScore())) {
+        if (!a.getTotalScore().setScale(2, RoundingMode.HALF_UP).equals(b.getTotalScore().setScale(2, RoundingMode.HALF_UP))) {
             return false;
         }
         return a.getMainTitle().equals(b.getMainTitle());

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/analyze/GradePaperDefineParam.java

@@ -46,7 +46,7 @@ public class GradePaperDefineParam {
 
     @ApiModelProperty(value = "二级维度精熟度定义")
     @NotNull(message = "缺少二级维度精熟度定义")
-    @Range(min = 1L, message = "缺少二级维度精熟度定义")
+//    @Range(min = 1L, message = "缺少二级维度精熟度定义")
     private List<GradeModuleKnowledgeDefineParam> gradeModuleKnowledgeDefineParamList;
 
     public String getPaperNumber() {

+ 65 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/analyze/GradePaperDimensionDatasource.java

@@ -0,0 +1,65 @@
+package com.qmth.distributed.print.business.bean.params.analyze;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 成绩分析 - 维度数据源
+ * @Author: CaoZixuan
+ * @Date: 2022-05-20
+ */
+public class GradePaperDimensionDatasource {
+    @ApiModelProperty(value = "一级维度编号")
+    private String codePrimary;
+
+    @ApiModelProperty(value = "一级维度名称")
+    private String namePrimary;
+
+    @ApiModelProperty(value = "二级维度编号")
+    private String codeSecond;
+
+    @ApiModelProperty(value = "二级维度名称")
+    private String nameSecond;
+
+    @ApiModelProperty(value = "一级维度术语解释")
+    private String interpretation;
+
+    public String getCodePrimary() {
+        return codePrimary;
+    }
+
+    public void setCodePrimary(String codePrimary) {
+        this.codePrimary = codePrimary;
+    }
+
+    public String getNamePrimary() {
+        return namePrimary;
+    }
+
+    public void setNamePrimary(String namePrimary) {
+        this.namePrimary = namePrimary;
+    }
+
+    public String getCodeSecond() {
+        return codeSecond;
+    }
+
+    public void setCodeSecond(String codeSecond) {
+        this.codeSecond = codeSecond;
+    }
+
+    public String getNameSecond() {
+        return nameSecond;
+    }
+
+    public void setNameSecond(String nameSecond) {
+        this.nameSecond = nameSecond;
+    }
+
+    public String getInterpretation() {
+        return interpretation;
+    }
+
+    public void setInterpretation(String interpretation) {
+        this.interpretation = interpretation;
+    }
+}

+ 17 - 51
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/analyze/GradePaperDimensionParam.java

@@ -2,39 +2,37 @@ package com.qmth.distributed.print.business.bean.params.analyze;
 
 import com.qmth.distributed.print.business.enums.DimensionEnum;
 import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
 
 /**
  * @Description: 成绩分析 - 维度参数
  * @Author: CaoZixuan
- * @Date: 2022-05-20
+ * @Date: 2022-06-02
  */
 public class GradePaperDimensionParam {
     @ApiModelProperty(value = "试卷编号")
+    @NotNull(message = "缺少试卷编号")
     private String paperNumber;
 
     @ApiModelProperty(value = "试卷类型")
+    @NotNull(message = "缺少试卷类型")
     private String paperType;
 
     @ApiModelProperty(value = "试卷名称")
+    @NotNull(message = "缺少试卷名称")
     private String paperName;
 
     @ApiModelProperty(value = "维度类型 - 知识,能力,素养")
+    @NotNull(message = "缺少维度类型")
     private DimensionEnum dimensionType;
 
-    @ApiModelProperty(value = "一级维度编号")
-    private String codePrimary;
-
-    @ApiModelProperty(value = "一级维度名称")
-    private String namePrimary;
-
-    @ApiModelProperty(value = "二级维度编号")
-    private String codeSecond;
-
-    @ApiModelProperty(value = "二级维度名称")
-    private String nameSecond;
-
-    @ApiModelProperty(value = "一级维度术语解释")
-    private String interpretation;
+    @ApiModelProperty(value = "成绩分析课程维度数据源")
+    @NotNull(message = "缺少试卷维度")
+    @Range(min = 1L, message = "缺少试卷维度")
+    private List<GradePaperDimensionDatasource> datasource;
 
     public String getPaperNumber() {
         return paperNumber;
@@ -68,43 +66,11 @@ public class GradePaperDimensionParam {
         this.dimensionType = dimensionType;
     }
 
-    public String getCodePrimary() {
-        return codePrimary;
-    }
-
-    public void setCodePrimary(String codePrimary) {
-        this.codePrimary = codePrimary;
-    }
-
-    public String getNamePrimary() {
-        return namePrimary;
-    }
-
-    public void setNamePrimary(String namePrimary) {
-        this.namePrimary = namePrimary;
-    }
-
-    public String getCodeSecond() {
-        return codeSecond;
-    }
-
-    public void setCodeSecond(String codeSecond) {
-        this.codeSecond = codeSecond;
-    }
-
-    public String getNameSecond() {
-        return nameSecond;
-    }
-
-    public void setNameSecond(String nameSecond) {
-        this.nameSecond = nameSecond;
-    }
-
-    public String getInterpretation() {
-        return interpretation;
+    public List<GradePaperDimensionDatasource> getDatasource() {
+        return datasource;
     }
 
-    public void setInterpretation(String interpretation) {
-        this.interpretation = interpretation;
+    public void setDatasource(List<GradePaperDimensionDatasource> datasource) {
+        this.datasource = datasource;
     }
 }

+ 10 - 7
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/GradeBatchPaperMapper.java

@@ -23,17 +23,17 @@ public interface GradeBatchPaperMapper extends BaseMapper<GradeBatchPaper> {
     /**
      * 查找分析批次下的试卷分页数据
      *
-     * @param iPage         分页参数
-     * @param semesterId    学期id
-     * @param examId        考试id
-     * @param basicCourseId 基础课程id
-     * @param schoolId      学校id
+     * @param iPage      分页参数
+     * @param semesterId 学期id
+     * @param examId     考试id
+     * @param courseCode 课程编号
+     * @param schoolId   学校id
      * @return 结果
      */
     IPage<GradeBatchPaperResult> findGradeBatchPaperPage(@Param("iPage") Page<GradeBatchPaperResult> iPage,
                                                          @Param("semesterId") Long semesterId,
                                                          @Param("examId") Long examId,
-                                                         @Param("basicCourseId") Long basicCourseId,
+                                                         @Param("courseCode") String courseCode,
                                                          @Param("schoolId") Long schoolId);
 
     /**
@@ -42,13 +42,16 @@ public interface GradeBatchPaperMapper extends BaseMapper<GradeBatchPaper> {
      * @param semesterId  学期id
      * @param examId      考试id
      * @param collegeId   开课学院id
+     * @param courseCode  课程编号
      * @param teacherName 命题教师名称
+     * @param orgIds      数据权限
+     * @param schoolId    学校id
      * @return 查询结果
      */
     List<GradeBatchPaperResult> findAbleAnalyzePaper(@Param("semesterId") Long semesterId,
                                                      @Param("examId") Long examId,
                                                      @Param("collegeId") Long collegeId,
-                                                     @Param("basicCourseId") Long basicCourseId,
+                                                     @Param("courseCode") String courseCode,
                                                      @Param("teacherName") String teacherName,
                                                      @Param("orgIds") Set<Long> orgIds,
                                                      @Param("schoolId") Long schoolId);

+ 14 - 14
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/GradeBatchPaperService.java

@@ -21,28 +21,28 @@ public interface GradeBatchPaperService extends IService<GradeBatchPaper> {
     /**
      * 查询批次试卷分页数据
      *
-     * @param semesterId    学期id
-     * @param examId        考试id
-     * @param basicCourseId 基础课程id
-     * @param pageNumber    分页页数
-     * @param pageSize      分页容量
-     * @param requestUser   请求用户
+     * @param semesterId  学期id
+     * @param examId      考试id
+     * @param courseCode  课程编号
+     * @param pageNumber  分页页数
+     * @param pageSize    分页容量
+     * @param requestUser 请求用户
      * @return 分页结果
      */
-    IPage<GradeBatchPaperResult> findGradeBatchPaperPage(Long semesterId, Long examId, Long basicCourseId, int pageNumber, int pageSize, SysUser requestUser);
+    IPage<GradeBatchPaperResult> findGradeBatchPaperPage(Long semesterId, Long examId, String courseCode, int pageNumber, int pageSize, SysUser requestUser);
 
     /**
      * 查询可以作为分析样本的试卷
      *
-     * @param semesterId    学期id
-     * @param examId        考试id
-     * @param collegeId     学院id
-     * @param basicCourseId 基础课程id
-     * @param teacherName   命题教师
-     * @param requestUser   请求用户
+     * @param semesterId  学期id
+     * @param examId      考试id
+     * @param collegeId   学院id
+     * @param courseCode  课程编号
+     * @param teacherName 命题教师
+     * @param requestUser 请求用户
      * @return 试卷结果
      */
-    List<GradeBatchPaperResult> findAbleAnalyzePaperList(Long semesterId, Long examId, Long collegeId, Long basicCourseId, String teacherName, SysUser requestUser);
+    List<GradeBatchPaperResult> findAbleAnalyzePaperList(Long semesterId, Long examId, Long collegeId, String courseCode, String teacherName, SysUser requestUser);
 
     /**
      * 保存分析批次试卷

+ 10 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/GradeBatchService.java

@@ -8,6 +8,8 @@ import com.qmth.distributed.print.business.bean.result.analyze.GradeBatchResult;
 import com.qmth.distributed.print.business.entity.GradeBatch;
 import com.qmth.teachcloud.common.entity.SysUser;
 
+import java.util.List;
+
 /**
  * <p>
  * 分析-批次表 服务类
@@ -37,4 +39,12 @@ public interface GradeBatchService extends IService<GradeBatch> {
      * @return 批次id
      */
     Long editGradeBatch(GradeBatchParam gradeBatchParam, SysUser requestUser);
+
+    /**
+     * 批量删除教研分析批次
+     *
+     * @param idList      教研分析批次id
+     * @param requestUser 请求的用户
+     */
+    void deleteGradeBatch(List<Long> idList, SysUser requestUser);
 }

+ 11 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/GradePaperDimensionService.java

@@ -36,10 +36,10 @@ public interface GradePaperDimensionService extends IService<GradePaperDimension
     /**
      * 批量保存分析试卷维度数据
      *
-     * @param gradePaperDimensionParamList 维度数据参数集合
-     * @param requestUser                  请求的用户
+     * @param gradePaperDimensionParam 维度数据参数集合
+     * @param requestUser              请求的用户
      */
-    void saveGradePaperDimensionBatch(List<GradePaperDimensionParam> gradePaperDimensionParamList, SysUser requestUser);
+    void saveGradePaperDimensionBatch(GradePaperDimensionParam gradePaperDimensionParam, SysUser requestUser);
 
     /**
      * 分析 - 试卷知识维度数据导入
@@ -47,9 +47,10 @@ public interface GradePaperDimensionService extends IService<GradePaperDimension
      * @param file        excel 文件
      * @param paperNumber 试卷编号
      * @param paperType   试卷类型
+     * @param paperName   试卷名称
      * @param requestUser 请求用户
      */
-    void importGradePaperKnowledgeDimension(MultipartFile file, String paperNumber, String paperType, SysUser requestUser) throws IOException, NoSuchFieldException;
+    void importGradePaperKnowledgeDimension(MultipartFile file, String paperNumber, String paperType, String paperName, SysUser requestUser) throws IOException, NoSuchFieldException;
 
     /**
      * 分析 - 试卷能力维度数据导入
@@ -57,9 +58,10 @@ public interface GradePaperDimensionService extends IService<GradePaperDimension
      * @param file        excel 文件
      * @param paperNumber 试卷编号
      * @param paperType   试卷类型
+     * @param paperName   试卷名称
      * @param requestUser 请求用户
      */
-    void importGradePaperAbilityDimension(MultipartFile file, String paperNumber, String paperType, SysUser requestUser) throws IOException, NoSuchFieldException;
+    void importGradePaperAbilityDimension(MultipartFile file, String paperNumber, String paperType, String paperName, SysUser requestUser) throws IOException, NoSuchFieldException;
 
     /**
      * 分析 - 试卷维度模板导出
@@ -72,10 +74,11 @@ public interface GradePaperDimensionService extends IService<GradePaperDimension
 
     /**
      * 分析 - 查询二级维度集合
-     * @param paperNumber 试卷编号
-     * @param paperType 试卷类型
+     *
+     * @param paperNumber   试卷编号
+     * @param paperType     试卷类型
      * @param dimensionType 维度类型
-     * @param requestUser 请求用户
+     * @param requestUser   请求用户
      * @return 结果
      */
     List<SecondDimensionResult> findSecondDimensionList(String paperNumber, String paperType, DimensionEnum dimensionType, SysUser requestUser);

+ 7 - 9
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeBatchPaperServiceImpl.java

@@ -43,9 +43,9 @@ public class GradeBatchPaperServiceImpl extends ServiceImpl<GradeBatchPaperMappe
     TeachcloudCommonService teachcloudCommonService;
 
     @Override
-    public IPage<GradeBatchPaperResult> findGradeBatchPaperPage(Long semesterId, Long examId, Long basicCourseId, int pageNumber, int pageSize, SysUser requestUser) {
+    public IPage<GradeBatchPaperResult> findGradeBatchPaperPage(Long semesterId, Long examId, String courseCode, int pageNumber, int pageSize, SysUser requestUser) {
         Long schoolId = requestUser.getSchoolId();
-        IPage<GradeBatchPaperResult> datasource = this.baseMapper.findGradeBatchPaperPage(new Page<>(pageNumber, pageSize), semesterId, examId, basicCourseId, schoolId);
+        IPage<GradeBatchPaperResult> datasource = this.baseMapper.findGradeBatchPaperPage(new Page<>(pageNumber, pageSize), semesterId, examId, courseCode, schoolId);
         for (GradeBatchPaperResult record : datasource.getRecords()) {
             Long teachingRoomId = record.getTeachingRoomId();
             SysOrg teachCollege = this.findTeachCollegeByOrgId(teachingRoomId);
@@ -56,17 +56,16 @@ public class GradeBatchPaperServiceImpl extends ServiceImpl<GradeBatchPaperMappe
     }
 
     @Override
-    public List<GradeBatchPaperResult> findAbleAnalyzePaperList(Long semesterId, Long examId, Long collegeId, Long basicCourseId, String teacherName, SysUser requestUser) {
+    public List<GradeBatchPaperResult> findAbleAnalyzePaperList(Long semesterId, Long examId, Long collegeId, String courseCode, String teacherName, SysUser requestUser) {
         Long schoolId = requestUser.getSchoolId();
         Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(null);
-        List<GradeBatchPaperResult> datasource = this.baseMapper.findAbleAnalyzePaper(semesterId, examId, collegeId, basicCourseId, teacherName, orgIds, schoolId);
+        List<GradeBatchPaperResult> datasource = this.baseMapper.findAbleAnalyzePaper(semesterId, examId, collegeId, courseCode, teacherName, orgIds, schoolId);
         List<GradeBatchPaperResult> needAddList = new ArrayList<>();
         for (GradeBatchPaperResult gradeBatchPaperResult : datasource) {
             // 额外处理开课学院
             Long teachingRoomId = gradeBatchPaperResult.getTeachingRoomId();
             SysOrg teachCollege = this.findTeachCollegeByOrgId(teachingRoomId);
             if (SystemConstant.longNotNull(collegeId) && !collegeId.equals(teachCollege.getId())) {
-                datasource.remove(gradeBatchPaperResult);
                 continue;
             }
             gradeBatchPaperResult.setTeachCollegeId(teachCollege.getId());
@@ -80,10 +79,8 @@ public class GradeBatchPaperServiceImpl extends ServiceImpl<GradeBatchPaperMappe
                 needAdd.setPaperType(paperTypeCell);
                 needAddList.add(needAdd);
             }
-            datasource.remove(gradeBatchPaperResult);
         }
-        datasource.addAll(needAddList);
-        return datasource.stream().sorted(Comparator.comparing(GradeBatchPaperResult::getSemesterName)
+        return needAddList.stream().sorted(Comparator.comparing(GradeBatchPaperResult::getSemesterName)
                 .thenComparing(GradeBatchPaperResult::getExamName)
                 .thenComparing(GradeBatchPaperResult::getTeachCollegeId)
                 .thenComparing(GradeBatchPaperResult::getCourseCode)
@@ -110,6 +107,7 @@ public class GradeBatchPaperServiceImpl extends ServiceImpl<GradeBatchPaperMappe
             gradeBatchPaper.setBatchId(batchId);
             gradeBatchPaper.setPaperNumber(paperNumber);
             gradeBatchPaper.setPaperType(paperType);
+            gradeBatchPaper.setPaperName(e.getPaperName());
             gradeBatchPaper.setTeachCollegeId(teachCollegeId);
             gradeBatchPaper.setTeachCollegeName(teachCollegeName);
 
@@ -163,7 +161,7 @@ public class GradeBatchPaperServiceImpl extends ServiceImpl<GradeBatchPaperMappe
                 .eq(GradeBatchPaper::getSchoolId, schoolId)
                 .eq(GradeBatchPaper::getPaperNumber, paperNumber)
                 .eq(GradeBatchPaper::getPaperType, paperType));
-        if (gradeBatchPaperList.stream().anyMatch(e -> GradeAnalyzePaperStatusEnum.CALCULATING.equals(e.getStatus()))){
+        if (gradeBatchPaperList.stream().anyMatch(e -> GradeAnalyzePaperStatusEnum.CALCULATING.equals(e.getStatus()))) {
             throw ExceptionResultEnum.ERROR.exception("选择的试卷有正在计算的分析课程");
         }
     }

+ 35 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeBatchServiceImpl.java

@@ -7,8 +7,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.bean.params.analyze.GradeBatchParam;
 import com.qmth.distributed.print.business.bean.result.analyze.GradeBatchResult;
 import com.qmth.distributed.print.business.entity.GradeBatch;
+import com.qmth.distributed.print.business.entity.GradeBatchPaper;
 import com.qmth.distributed.print.business.enums.GradeAnalyzePaperStatusEnum;
 import com.qmth.distributed.print.business.mapper.GradeBatchMapper;
+import com.qmth.distributed.print.business.service.GradeBatchPaperService;
 import com.qmth.distributed.print.business.service.GradeBatchService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
@@ -17,7 +19,11 @@ import org.apache.commons.lang3.time.DateFormatUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
+import java.util.List;
 import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -29,6 +35,8 @@ import java.util.Objects;
  */
 @Service
 public class GradeBatchServiceImpl extends ServiceImpl<GradeBatchMapper, GradeBatch> implements GradeBatchService {
+    @Resource
+    GradeBatchPaperService gradeBatchPaperService;
 
     @Override
     public IPage<GradeBatchResult> gradeBatchPage(String batchName, int pageNumber, int pageSize, SysUser requestUser) {
@@ -55,6 +63,7 @@ public class GradeBatchServiceImpl extends ServiceImpl<GradeBatchMapper, GradeBa
         gradeBatch.setBatchTime(batchTime);
         gradeBatch.setBatchCode(DateFormatUtils.format(batchTime, "yyyyMMdd"));
         gradeBatch.setStatus(GradeAnalyzePaperStatusEnum.SETTING_GRADE_PAPER);
+        gradeBatch.setSchoolId(schoolId);
         if (!SystemConstant.longNotNull(id)) {
             id = SystemConstant.getDbUuid();
         }
@@ -63,4 +72,30 @@ public class GradeBatchServiceImpl extends ServiceImpl<GradeBatchMapper, GradeBa
         this.saveOrUpdate(gradeBatch);
         return id;
     }
+
+    @Override
+    public void deleteGradeBatch(List<Long> idList, SysUser requestUser) {
+        Long schoolId = requestUser.getSchoolId();
+        if (idList == null || idList.size() == 0) {
+            throw ExceptionResultEnum.ERROR.exception("请选择要删除的批次对象");
+        }
+        // 要删除的批次试卷集合
+        List<GradeBatchPaper> gradeBatchPaperList = gradeBatchPaperService.list(new QueryWrapper<GradeBatchPaper>()
+                .lambda()
+                .eq(GradeBatchPaper::getSchoolId, schoolId)
+                .in(GradeBatchPaper::getBatchId, idList));
+
+        if (gradeBatchPaperList != null && gradeBatchPaperList.size() > 0) {
+            Set<Long> batchIdSet = gradeBatchPaperList.stream().map(GradeBatchPaper::getBatchId).collect(Collectors.toSet());
+            List<String> cantDeleteBatchNameList = this.list(new QueryWrapper<GradeBatch>()
+                            .lambda()
+                            .in(GradeBatch::getId, batchIdSet))
+                    .stream()
+                    .map(GradeBatch::getBatchName)
+                    .distinct().collect(Collectors.toList());
+
+            throw ExceptionResultEnum.ERROR.exception("成绩分析批次【" + String.join(",", cantDeleteBatchNameList) + "】存在分析课程,不能删除");
+        }
+        this.removeByIds(idList);
+    }
 }

+ 54 - 51
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradePaperDimensionServiceImpl.java

@@ -7,6 +7,7 @@ import com.google.common.collect.Lists;
 import com.qmth.distributed.print.business.bean.dto.excel.GradePaperDimensionAbilityDto;
 import com.qmth.distributed.print.business.bean.dto.excel.GradePaperDimensionKnowledgeDto;
 import com.qmth.distributed.print.business.bean.dto.open.PaperDimension;
+import com.qmth.distributed.print.business.bean.params.analyze.GradePaperDimensionDatasource;
 import com.qmth.distributed.print.business.bean.params.analyze.GradePaperDimensionParam;
 import com.qmth.distributed.print.business.bean.result.analyze.GradePaperDimensionResult;
 import com.qmth.distributed.print.business.bean.result.analyze.SecondDimensionResult;
@@ -50,29 +51,25 @@ public class GradePaperDimensionServiceImpl extends ServiceImpl<GradePaperDimens
     }
 
     @Override
-    public void saveGradePaperDimensionBatch(List<GradePaperDimensionParam> gradePaperDimensionParamList, SysUser requestUser) {
-        List<String> paperNumberList = gradePaperDimensionParamList.stream().map(GradePaperDimensionParam::getPaperNumber).distinct().collect(Collectors.toList());
-        if (paperNumberList.size() != 1) {
-            throw ExceptionResultEnum.ERROR.exception("一次只能提交同一个试卷编号下的试卷维度数据");
-        }
-        List<String> paperTypeList = gradePaperDimensionParamList.stream().map(GradePaperDimensionParam::getPaperType).distinct().collect(Collectors.toList());
-        if (paperTypeList.size() != 1) {
-            throw ExceptionResultEnum.ERROR.exception("一次只能提交同一个试卷类型下的试卷维度数据");
-        }
-        String paperNumber = paperNumberList.get(0);
-        String paperType = paperTypeList.get(0);
+    public void saveGradePaperDimensionBatch(GradePaperDimensionParam gradePaperDimensionParam, SysUser requestUser) {
+        String paperNumber = gradePaperDimensionParam.getPaperNumber();
+        String paperType = gradePaperDimensionParam.getPaperType();
+        String paperName = gradePaperDimensionParam.getPaperName();
+        DimensionEnum dimensionType = gradePaperDimensionParam.getDimensionType();
+        List<GradePaperDimensionDatasource> datasource = gradePaperDimensionParam.getDatasource();
         gradeBatchPaperService.checkOperateAuth(requestUser.getSchoolId(), paperNumber, paperType);
-        List<GradePaperDimension> gradePaperDimensionList = this.checkAndBuildGradePaperDimensionList(gradePaperDimensionParamList, requestUser);
+        List<GradePaperDimension> gradePaperDimensionList = this.checkAndBuildGradePaperDimensionList(datasource, paperNumber, paperType, paperName, dimensionType, requestUser);
         this.remove(new QueryWrapper<GradePaperDimension>().lambda()
                 .eq(GradePaperDimension::getSchoolId, requestUser.getSchoolId())
                 .eq(GradePaperDimension::getPaperNumber, paperNumber)
-                .eq(GradePaperDimension::getPaperType, paperType));
+                .eq(GradePaperDimension::getPaperType, paperType)
+                .eq(GradePaperDimension::getDimensionType, dimensionType));
         this.saveBatch(gradePaperDimensionList);
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void importGradePaperKnowledgeDimension(MultipartFile file, String paperNumber, String paperType, SysUser requestUser) throws IOException, NoSuchFieldException {
+    public void importGradePaperKnowledgeDimension(MultipartFile file, String paperNumber, String paperType, String paperName, SysUser requestUser) throws IOException, NoSuchFieldException {
         if (Objects.isNull(file)) {
             throw ExceptionResultEnum.ERROR.exception("找不到附件");
         }
@@ -83,7 +80,7 @@ public class GradePaperDimensionServiceImpl extends ServiceImpl<GradePaperDimens
             }
             return finalExcelList;
         });
-        List<GradePaperDimensionParam> gradePaperDimensionParamList = new ArrayList<>();
+        List<GradePaperDimensionDatasource> gradePaperDimensionDatasourceList = new ArrayList<>();
 
         if (Objects.nonNull(finalList) && finalList.size() > 0) {
             for (int i = 0; i < finalList.size(); i++) {
@@ -94,25 +91,28 @@ public class GradePaperDimensionServiceImpl extends ServiceImpl<GradePaperDimens
                     if (importList.get(y) instanceof GradePaperDimensionKnowledgeDto) {
                         GradePaperDimensionKnowledgeDto gradePaperDimensionKnowledgeDto = (GradePaperDimensionKnowledgeDto) importList.get(y);
 
-                        GradePaperDimensionParam gradePaperDimensionParam = new GradePaperDimensionParam();
-                        gradePaperDimensionParam.setPaperNumber(paperNumber);
-                        gradePaperDimensionParam.setPaperType(paperType);
-                        gradePaperDimensionParam.setDimensionType(DimensionEnum.KNOWLEDGE);
-                        gradePaperDimensionParam.setCodePrimary(gradePaperDimensionKnowledgeDto.getCodePrimary());
-                        gradePaperDimensionParam.setNamePrimary(gradePaperDimensionKnowledgeDto.getNamePrimary());
-                        gradePaperDimensionParam.setCodeSecond(gradePaperDimensionKnowledgeDto.getCodeSecond());
-                        gradePaperDimensionParam.setNameSecond(gradePaperDimensionKnowledgeDto.getNameSecond());
-                        gradePaperDimensionParamList.add(gradePaperDimensionParam);
+                        GradePaperDimensionDatasource gradePaperDimensionDatasource = new GradePaperDimensionDatasource();
+                        gradePaperDimensionDatasource.setCodePrimary(gradePaperDimensionKnowledgeDto.getCodePrimary());
+                        gradePaperDimensionDatasource.setNamePrimary(gradePaperDimensionKnowledgeDto.getNamePrimary());
+                        gradePaperDimensionDatasource.setCodeSecond(gradePaperDimensionKnowledgeDto.getCodeSecond());
+                        gradePaperDimensionDatasource.setNameSecond(gradePaperDimensionKnowledgeDto.getNameSecond());
+                        gradePaperDimensionDatasourceList.add(gradePaperDimensionDatasource);
                     }
                 }
             }
         }
-        this.saveGradePaperDimensionBatch(gradePaperDimensionParamList, requestUser);
+        GradePaperDimensionParam gradePaperDimensionParam = new GradePaperDimensionParam();
+        gradePaperDimensionParam.setDatasource(gradePaperDimensionDatasourceList);
+        gradePaperDimensionParam.setPaperNumber(paperNumber);
+        gradePaperDimensionParam.setPaperType(paperType);
+        gradePaperDimensionParam.setPaperName(paperName);
+        gradePaperDimensionParam.setDimensionType(DimensionEnum.KNOWLEDGE);
+        this.saveGradePaperDimensionBatch(gradePaperDimensionParam, requestUser);
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void importGradePaperAbilityDimension(MultipartFile file, String paperNumber, String paperType, SysUser requestUser) throws IOException, NoSuchFieldException {
+    public void importGradePaperAbilityDimension(MultipartFile file, String paperNumber, String paperType, String paperName, SysUser requestUser) throws IOException, NoSuchFieldException {
         if (Objects.isNull(file)) {
             throw ExceptionResultEnum.ERROR.exception("找不到附件");
         }
@@ -123,7 +123,7 @@ public class GradePaperDimensionServiceImpl extends ServiceImpl<GradePaperDimens
             }
             return finalExcelList;
         });
-        List<GradePaperDimensionParam> gradePaperDimensionParamList = new ArrayList<>();
+        List<GradePaperDimensionDatasource> gradePaperDimensionDatasourceList = new ArrayList<>();
 
         if (Objects.nonNull(finalList) && finalList.size() > 0) {
             for (int i = 0; i < finalList.size(); i++) {
@@ -131,22 +131,25 @@ public class GradePaperDimensionServiceImpl extends ServiceImpl<GradePaperDimens
                 List<Object> importList = map.get(i);
 
                 for (int y = 0; y < Objects.requireNonNull(importList).size(); y++) {
-                    if (importList.get(y) instanceof GradePaperDimensionKnowledgeDto) {
+                    if (importList.get(y) instanceof GradePaperDimensionAbilityDto) {
                         GradePaperDimensionAbilityDto gradePaperDimensionAbilityDto = (GradePaperDimensionAbilityDto) importList.get(y);
 
-                        GradePaperDimensionParam gradePaperDimensionParam = new GradePaperDimensionParam();
-                        gradePaperDimensionParam.setPaperNumber(paperNumber);
-                        gradePaperDimensionParam.setPaperType(paperType);
-                        gradePaperDimensionParam.setDimensionType(DimensionEnum.KNOWLEDGE);
-                        gradePaperDimensionParam.setCodePrimary(gradePaperDimensionAbilityDto.getCodePrimary());
-                        gradePaperDimensionParam.setNamePrimary(gradePaperDimensionAbilityDto.getNamePrimary());
-                        gradePaperDimensionParam.setInterpretation(gradePaperDimensionAbilityDto.getInterpret());
-                        gradePaperDimensionParamList.add(gradePaperDimensionParam);
+                        GradePaperDimensionDatasource gradePaperDimensionDatasource = new GradePaperDimensionDatasource();
+                        gradePaperDimensionDatasource.setCodePrimary(gradePaperDimensionAbilityDto.getCodePrimary());
+                        gradePaperDimensionDatasource.setNamePrimary(gradePaperDimensionAbilityDto.getNamePrimary());
+                        gradePaperDimensionDatasource.setInterpretation(gradePaperDimensionAbilityDto.getInterpret());
+                        gradePaperDimensionDatasourceList.add(gradePaperDimensionDatasource);
                     }
                 }
             }
         }
-        this.saveGradePaperDimensionBatch(gradePaperDimensionParamList, requestUser);
+        GradePaperDimensionParam gradePaperDimensionParam = new GradePaperDimensionParam();
+        gradePaperDimensionParam.setDatasource(gradePaperDimensionDatasourceList);
+        gradePaperDimensionParam.setPaperNumber(paperNumber);
+        gradePaperDimensionParam.setPaperType(paperType);
+        gradePaperDimensionParam.setPaperName(paperName);
+        gradePaperDimensionParam.setDimensionType(DimensionEnum.ABILITY);
+        this.saveGradePaperDimensionBatch(gradePaperDimensionParam, requestUser);
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -206,24 +209,24 @@ public class GradePaperDimensionServiceImpl extends ServiceImpl<GradePaperDimens
      * 4.二级维度编号在数据集中唯一
      * </p>
      *
-     * @param gradePaperDimensionParamList 分析试卷维度集合
-     * @param requestUser                  用户
-     * @return 结果
+     * @param gradePaperDimensionDatasourceList 分析试卷维度集合
+     * @param paperNumber                       试卷编号
+     * @param paperType                         试卷类型
+     * @param paperName                         试卷名称
+     * @param dimensionType                     维度类型
+     * @param requestUser                       请求用户
+     * @return 构建好的维度预新增对象集合
      */
-    private List<GradePaperDimension> checkAndBuildGradePaperDimensionList(List<GradePaperDimensionParam> gradePaperDimensionParamList, SysUser requestUser) {
+    private List<GradePaperDimension> checkAndBuildGradePaperDimensionList(List<GradePaperDimensionDatasource> gradePaperDimensionDatasourceList, String paperNumber, String paperType, String paperName, DimensionEnum dimensionType, SysUser requestUser) {
         Map<String, String> checkPrimaryCodeNameMap = new HashMap<>();
         List<GradePaperDimension> gradePaperDimensionList = new ArrayList<>();
 
-        for (GradePaperDimensionParam gradePaperDimensionParam : gradePaperDimensionParamList) {
-            String paperNumber = gradePaperDimensionParam.getPaperNumber();
-            String paperType = gradePaperDimensionParam.getPaperType();
-            String paperName = gradePaperDimensionParam.getPaperName();
-            DimensionEnum dimensionType = gradePaperDimensionParam.getDimensionType();
-            String codePrimary = gradePaperDimensionParam.getCodePrimary();
-            String namePrimary = gradePaperDimensionParam.getNamePrimary();
-            String codeSecond = gradePaperDimensionParam.getCodeSecond();
-            String nameSecond = gradePaperDimensionParam.getNameSecond();
-            String interpretation = gradePaperDimensionParam.getInterpretation();
+        for (GradePaperDimensionDatasource gradePaperDimensionDatasource : gradePaperDimensionDatasourceList) {
+            String codePrimary = gradePaperDimensionDatasource.getCodePrimary();
+            String namePrimary = gradePaperDimensionDatasource.getNamePrimary();
+            String codeSecond = gradePaperDimensionDatasource.getCodeSecond();
+            String nameSecond = gradePaperDimensionDatasource.getNameSecond();
+            String interpretation = gradePaperDimensionDatasource.getInterpretation();
 
             if (SystemConstant.isOneNull(paperNumber, paperType, dimensionType, codePrimary, namePrimary)) {
                 throw ExceptionResultEnum.PARAMS_ERROR.exception();

+ 5 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradePaperStructServiceImpl.java

@@ -32,6 +32,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
@@ -181,8 +182,8 @@ public class GradePaperStructServiceImpl extends ServiceImpl<GradePaperStructMap
                         gradePaperStructDatasource.setBigQuestionNumber(gradePaperStructDto.getBigQuestionNumber());
                         gradePaperStructDatasource.setSmallQuestionNumber(gradePaperStructDto.getSmallQuestionNumber());
                         gradePaperStructDatasource.setBigTopicName(gradePaperStructDto.getBigTopicName());
-                        gradePaperStructDatasource.setNumberType(gradePaperStructDto.getNumberType());
-                        gradePaperStructDatasource.setFullScore(gradePaperStructDto.getFullScore());
+                        gradePaperStructDatasource.setNumberType(QuestionType.convertToEnum(gradePaperStructDto.getNumberType()));
+                        gradePaperStructDatasource.setFullScore(BigDecimal.valueOf(Double.parseDouble(gradePaperStructDto.getFullScore())));
                         gradePaperStructDatasource.setKnowledgeDimension(gradePaperStructDto.getKnowledgeDimension());
                         gradePaperStructDatasource.setAbilityDimension(gradePaperStructDto.getAbilityDimension());
                         gradePaperStructDatasourceList.add(gradePaperStructDatasource);
@@ -213,11 +214,11 @@ public class GradePaperStructServiceImpl extends ServiceImpl<GradePaperStructMap
             cell.setCourseName(courseName);
             cell.setPaperNumber(e.getPaperNumber());
             cell.setPaperType(e.getPaperType());
-            cell.setNumberType(e.getNumberType());
+            cell.setNumberType(e.getNumberType().getDesc());
             cell.setBigTopicName(e.getBigTopicName());
             cell.setBigQuestionNumber(e.getBigQuestionNumber());
             cell.setSmallQuestionNumber(e.getSmallQuestionNumber());
-            cell.setFullScore(e.getFullScore());
+            cell.setFullScore(String.valueOf(e.getFullScore()));
             cell.setKnowledgeDimension(e.getKnowledgeDimension());
             cell.setAbilityDimension(e.getAbilityDimension());
             return Stream.of(cell);

+ 4 - 10
distributed-print-business/src/main/resources/mapper/GradeBatchPaperMapper.xml

@@ -44,9 +44,6 @@
         LEFT JOIN
         basic_semester bs ON be.school_id = bs.school_id
         AND be.semester_id = bs.id
-        LEFT JOIN
-        basic_course bc ON et.school_id = bc.school_id
-        AND et.course_code = bc.code
         <where>
             <if test="schoolId != null and schoolId != ''">
                 AND gbp.school_id = #{schoolId}
@@ -57,8 +54,8 @@
             <if test="examId != null and examId != ''">
                 AND be.id = #{examId}
             </if>
-            <if test="basicCourseId != null and basicCourseId != ''">
-                AND bc.id = #{basicCourseId}
+            <if test="courseCode != null and courseCode != ''">
+                AND et.course_code = #{courseCode}
             </if>
         </where>
     </select>
@@ -84,9 +81,6 @@
         LEFT JOIN
         basic_semester bs ON bs.school_id = et.school_id
         AND bs.id = be.semester_id
-        LEFT JOIN
-        basic_course bc ON bc.school_id = et.school_id
-        AND bc.code = et.course_code
         <where>
             AND etd.exposed_paper_type != ''
             <if test="schoolId != null and schoolId != ''">
@@ -98,8 +92,8 @@
             <if test="examId != null and examId != ''">
                 AND be.id = #{examId}
             </if>
-            <if test="basicCourseId != null and basicCourseId != ''">
-                AND bc.id = #{basicCourseId}
+            <if test="courseCode != null and courseCode != ''">
+                AND et.course_code = #{courseCode}
             </if>
             <if test="orgIds != null">
                 AND et.org_id IN

+ 59 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/GradeBatchController.java

@@ -1,8 +1,27 @@
 package com.qmth.distributed.print.api;
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.annotation.BOOL;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.bean.params.analyze.GradeBatchParam;
+import com.qmth.distributed.print.business.bean.result.EditResult;
+import com.qmth.distributed.print.business.service.GradeBatchService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import io.swagger.annotations.*;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -12,8 +31,45 @@ import org.springframework.web.bind.annotation.RestController;
  * @author wangliang
  * @since 2022-05-20
  */
+@Api(tags = "分析批次管理Controller")
 @RestController
-@RequestMapping("/grade-batch")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.grade}/batch")
+@Validated
+@Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
 public class GradeBatchController {
+    @Resource
+    private GradeBatchService gradeBatchService;
 
+    @ApiOperation(value = "成绩分析批次-查询")
+    @RequestMapping(value = "/page", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findGradeBatchPage(@ApiParam(value = "分析批次名称") @RequestParam(required = false) String gradeBatchName,
+                                     @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                                     @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        return ResultUtil.ok(gradeBatchService.gradeBatchPage(gradeBatchName, pageNumber, pageSize, requestUser));
+    }
+
+    @ApiOperation(value = "成绩分析批次-新建")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = Result.class)})
+    public Result saveGradeBatch(@Valid @RequestBody GradeBatchParam gradeBatchParam, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        return ResultUtil.ok(gradeBatchService.editGradeBatch(gradeBatchParam, requestUser));
+    }
+
+    @ApiOperation(value = "成绩分析批次-删除")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
+    public Result deleteGradeBatch(@ApiParam(value = "选择的要删除的成绩分析批次id集合", required = true) @RequestParam List<String> idList) {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        gradeBatchService.deleteGradeBatch(idList.stream().map(SystemConstant::convertIdToLong).collect(Collectors.toList()), requestUser);
+        return ResultUtil.ok();
+    }
+
+    // TODO: 2022/6/2 成绩分析批次推送 
 }

+ 74 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/GradeBatchPaperController.java

@@ -1,8 +1,27 @@
 package com.qmth.distributed.print.api;
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.annotation.BOOL;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.bean.params.analyze.GradeBatchPaperParam;
+import com.qmth.distributed.print.business.bean.result.EditResult;
+import com.qmth.distributed.print.business.service.GradeBatchPaperService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import io.swagger.annotations.*;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -12,8 +31,60 @@ import org.springframework.web.bind.annotation.RestController;
  * @author wangliang
  * @since 2022-05-20
  */
+@Api(tags = "分析批次课程管理Controller")
 @RestController
-@RequestMapping("/grade-batch-paper")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.grade}/batch/paper")
+@Validated
+@Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
 public class GradeBatchPaperController {
+    @Resource
+    private GradeBatchPaperService gradeBatchPaperService;
 
+    @ApiOperation(value = "成绩分析批次课程-查询")
+    @RequestMapping(value = "/page", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findGradeBatchPaperPage(@ApiParam(value = "学期id") @RequestParam(required = false) String semesterId,
+                                          @ApiParam(value = "考试id") @RequestParam(required = false) String examId,
+                                          @ApiParam(value = "课程编号") @RequestParam(required = false) String courseCode,
+                                          @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                                          @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        return ResultUtil.ok(gradeBatchPaperService.findGradeBatchPaperPage(SystemConstant.convertIdToLong(semesterId), SystemConstant.convertIdToLong(examId), courseCode, pageNumber, pageSize, requestUser));
+    }
+
+    @ApiOperation(value = "成绩分析批次课程-查询可分析试卷")
+    @RequestMapping(value = "/able", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findAbleAnalyzePaperList(@ApiParam(value = "学期id") @RequestParam(required = false) String semesterId,
+                                           @ApiParam(value = "考试id") @RequestParam(required = false) String examId,
+                                           @ApiParam(value = "学院id") @RequestParam(required = false) String collegeId,
+                                           @ApiParam(value = "课程编号") @RequestParam(required = false) String courseCode,
+                                           @ApiParam(value = "命题教师") @RequestParam(required = false) String teacherName) {
+
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        return ResultUtil.ok(gradeBatchPaperService.findAbleAnalyzePaperList(SystemConstant.convertIdToLong(semesterId), SystemConstant.convertIdToLong(examId), SystemConstant.convertIdToLong(collegeId), courseCode, teacherName, requestUser));
+    }
+
+    @ApiOperation(value = "成绩分析批次课程-新建")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = Result.class)})
+    public Result saveGradeBatchPaper(@Valid @RequestBody GradeBatchPaperParam gradeBatchPaperParam, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        gradeBatchPaperService.saveGradeBatchPaper(gradeBatchPaperParam, requestUser);
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "成绩分析批次课程-删除")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
+    public Result deleteGradeBatchPaper(@ApiParam(value = "选择的要删除的成绩分析课程id集合", required = true) @RequestParam List<String> idList) {
+        gradeBatchPaperService.deleteGradeBatchPaper(idList.stream().map(SystemConstant::convertIdToLong).collect(Collectors.toList()));
+        return ResultUtil.ok();
+    }
+
+    // TODO: 2022/6/2 成绩分析课程推送,计算
 }

+ 47 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/GradeModuleEvaluationController.java

@@ -1,8 +1,23 @@
 package com.qmth.distributed.print.api;
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.annotation.BOOL;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.bean.params.analyze.GradeModuleEvaluationParam;
+import com.qmth.distributed.print.business.service.GradeModuleEvaluationService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import io.swagger.annotations.*;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+import javax.validation.Valid;
 
 /**
  * <p>
@@ -12,8 +27,37 @@ import org.springframework.web.bind.annotation.RestController;
  * @author wangliang
  * @since 2022-05-20
  */
+@Api(tags = "分析课程维度模块评价管理Controller")
 @RestController
-@RequestMapping("/grade-module-evaluation")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.grade}/module/evaluation")
+@Validated
+@Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
 public class GradeModuleEvaluationController {
+    @Resource
+    private GradeModuleEvaluationService gradeModuleEvaluationService;
 
+    @ApiOperation(value = "成绩分析模块评价-查询")
+    @RequestMapping(value = "/list", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findGradeModuleEvaluationList(@ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
+                                                @ApiParam(value = "试卷类型", required = true) @RequestParam String paperType) {
+
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        if (SystemConstant.isOneNull(paperNumber, paperType)) {
+            throw ExceptionResultEnum.ERROR.exception("试卷参数不完整");
+        }
+        return ResultUtil.ok(gradeModuleEvaluationService.findGradeModuleEvaluation(paperNumber, paperType, requestUser));
+    }
+
+    @ApiOperation(value = "成绩分析模块评价-新建模块评价")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = Result.class)})
+    public Result saveGradeModuleEvaluationBatch(@Valid @RequestBody GradeModuleEvaluationParam gradeModuleEvaluationParam, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        gradeModuleEvaluationService.saveGradeModuleEvaluationBatch(gradeModuleEvaluationParam, requestUser);
+        return ResultUtil.ok();
+    }
 }

+ 61 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/GradePaperController.java

@@ -1,8 +1,25 @@
 package com.qmth.distributed.print.api;
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.annotation.BOOL;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.bean.params.analyze.GradePaperDefineParam;
+import com.qmth.distributed.print.business.service.GradeInitializeService;
+import com.qmth.distributed.print.business.service.GradePaperService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import io.swagger.annotations.*;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
 
 /**
  * <p>
@@ -12,8 +29,49 @@ import org.springframework.web.bind.annotation.RestController;
  * @author wangliang
  * @since 2022-05-20
  */
+@Api(tags = "分析课程(试卷)管理Controller")
 @RestController
-@RequestMapping("/grade-paper")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.grade}/paper")
+@Validated
+@Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
 public class GradePaperController {
+    @Resource
+    private GradePaperService gradePaperService;
+    @Resource
+    private GradeInitializeService gradeInitializeService;
 
+    @ApiOperation(value = "成绩分析课程数据初始化")
+    @RequestMapping(value = "/initialize", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findGradePaperInitialize(@ApiParam(value = "学期id") @RequestParam(required = false) String semesterId,
+                                           @ApiParam(value = "考试id") @RequestParam(required = false) String examId,
+                                           @ApiParam(value = "课程编号") @RequestParam(required = false) String courseCode,
+                                           @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                                           @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        return ResultUtil.ok(gradeInitializeService.findNeedAnalyzedPaper(SystemConstant.convertIdToLong(semesterId), SystemConstant.convertIdToLong(examId), courseCode, requestUser, pageNumber, pageSize));
+    }
+
+    @ApiOperation(value = "成绩分析课程-查询定义")
+    @RequestMapping(value = "/paper_define", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findGradePaperDefine(@ApiParam(value = "课程编号", required = true) @RequestParam String paperNumber,
+                                       @ApiParam(value = "课程编号", required = true) @RequestParam String paperType) {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        return ResultUtil.ok(gradePaperService.findGradePaperDefine(paperNumber, paperType, requestUser));
+    }
+
+
+    @ApiOperation(value = "成绩分析课程-新建定义")
+    @RequestMapping(value = "/save_define", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = Result.class)})
+    public Result saveGradePaperDefine(@Valid @RequestBody GradePaperDefineParam gradePaperDefineParam, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        gradePaperService.saveGradePaperDefine(gradePaperDefineParam, requestUser);
+        return ResultUtil.ok();
+    }
 }

+ 92 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/GradePaperDimensionController.java

@@ -1,8 +1,28 @@
 package com.qmth.distributed.print.api;
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.annotation.BOOL;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.bean.params.analyze.GradePaperDimensionParam;
+import com.qmth.distributed.print.business.enums.DimensionEnum;
+import com.qmth.distributed.print.business.service.GradePaperDimensionService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import io.swagger.annotations.*;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
-import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import java.io.IOException;
 
 /**
  * <p>
@@ -12,8 +32,77 @@ import org.springframework.web.bind.annotation.RestController;
  * @author wangliang
  * @since 2022-05-20
  */
+@Api(tags = "分析课程维度管理Controller")
 @RestController
-@RequestMapping("/grade-paper-dimension")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.grade}/paper/dimension")
+@Validated
+@Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
 public class GradePaperDimensionController {
+    @Resource
+    private GradePaperDimensionService gradePaperDimensionService;
 
+    @ApiOperation(value = "成绩分析维度-查询")
+    @RequestMapping(value = "/list", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findGradePaperDimensionList(@ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
+                                              @ApiParam(value = "试卷类型", required = true) @RequestParam String paperType) {
+
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        if (SystemConstant.isOneNull(paperNumber, paperType)) {
+            throw ExceptionResultEnum.ERROR.exception("试卷参数不完整");
+        }
+        return ResultUtil.ok(gradePaperDimensionService.findGradePaperDimensionList(paperNumber, paperType, requestUser));
+    }
+
+    @ApiOperation(value = "成绩分析维度-新建维度")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = Result.class)})
+    public Result saveGradePaperDimensionBatch(@Valid @RequestBody GradePaperDimensionParam gradePaperDimensionParam, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        gradePaperDimensionService.saveGradePaperDimensionBatch(gradePaperDimensionParam, requestUser);
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "成绩分析维度-导入")
+    @RequestMapping(value = "/import", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
+    public Result gradePaperDimensionImport(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file,
+                                            @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
+                                            @ApiParam(value = "试卷类型", required = true) @RequestParam String paperType,
+                                            @ApiParam(value = "试卷名称", required = true) @RequestParam String paperName,
+                                            @ApiParam(value = "维度类型", required = true) @RequestParam DimensionEnum dimensionType) throws IOException, NoSuchFieldException {
+
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        if (SystemConstant.isOneNull(file, paperNumber, paperType, paperName, dimensionType)) {
+            throw ExceptionResultEnum.ERROR.exception("参数不完整");
+        }
+
+        switch (dimensionType) {
+            case KNOWLEDGE:
+                gradePaperDimensionService.importGradePaperKnowledgeDimension(file, paperNumber, paperType, paperName, requestUser);
+                break;
+            case ABILITY:
+                gradePaperDimensionService.importGradePaperAbilityDimension(file, paperNumber, paperType, paperName, requestUser);
+                break;
+        }
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "成绩分析维度-模板导出")
+    @RequestMapping(value = "/export", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
+    public Result gradePaperDimensionExport(@ApiParam(value = "课程编号", required = true) @RequestParam String courseCode,
+                                            @ApiParam(value = "课程名称", required = true) @RequestParam String courseName,
+                                            @ApiParam(value = "维度类型", required = true) @RequestParam DimensionEnum dimensionType) throws Exception {
+
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        if (SystemConstant.isOneNull(courseCode,courseName, dimensionType)) {
+            throw ExceptionResultEnum.ERROR.exception("参数不完整");
+        }
+        gradePaperDimensionService.exportGradePaperDimensionTemplate(courseCode,courseName,dimensionType);
+        return ResultUtil.ok();
+    }
 }

+ 79 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/GradePaperStructController.java

@@ -1,8 +1,25 @@
 package com.qmth.distributed.print.api;
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.annotation.BOOL;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.bean.params.analyze.GradePaperStructParam;
+import com.qmth.distributed.print.business.service.GradePaperStructService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import io.swagger.annotations.*;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
-import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.io.IOException;
 
 /**
  * <p>
@@ -12,8 +29,67 @@ import org.springframework.web.bind.annotation.RestController;
  * @author wangliang
  * @since 2022-05-20
  */
+@Api(tags = "分析课程试卷结构管理Controller")
 @RestController
-@RequestMapping("/grade-paper-struct")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.grade}/paper/struct")
+@Validated
+@Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
 public class GradePaperStructController {
+    @Resource
+    private GradePaperStructService gradePaperStructService;
 
+    @ApiOperation(value = "成绩分析试卷结构-查询")
+    @RequestMapping(value = "/list", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findGradePaperStructList(@ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
+                                           @ApiParam(value = "试卷类型", required = true) @RequestParam String paperType) {
+
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        if (SystemConstant.isOneNull(paperNumber, paperType)) {
+            throw ExceptionResultEnum.ERROR.exception("试卷参数不完整");
+        }
+        return ResultUtil.ok(gradePaperStructService.findGradePaperStructureResultList(paperNumber, paperType, requestUser));
+    }
+
+    @ApiOperation(value = "成绩分析试卷结构-新建试卷结构")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = Result.class)})
+    public Result saveGradePaperStructBatch(@Valid @RequestBody GradePaperStructParam gradePaperStructParam, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        gradePaperStructService.saveGradePaperStructBatch(gradePaperStructParam, requestUser);
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "成绩分析试卷结构-导入")
+    @RequestMapping(value = "/import", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
+    public Result gradePaperStructImport(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file,
+                                         @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
+                                         @ApiParam(value = "试卷类型", required = true) @RequestParam String paperType,
+                                         @ApiParam(value = "试卷名称", required = true) @RequestParam String paperName) throws IOException, NoSuchFieldException {
+
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        if (SystemConstant.isOneNull(file, paperNumber, paperType, paperName)) {
+            throw ExceptionResultEnum.ERROR.exception("参数不完整");
+        }
+        gradePaperStructService.importGradePaperStruct(file, paperNumber, paperType, paperName, requestUser);
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "成绩分析试卷结构-模板导出")
+    @RequestMapping(value = "/export", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
+    public Result gradePaperStructExport(@ApiParam(value = "课程编号", required = true) @RequestParam String paperNumber,
+                                         @ApiParam(value = "课程名称", required = true) @RequestParam String paperType) throws Exception {
+
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        if (SystemConstant.isOneNull(paperNumber, paperType)) {
+            throw ExceptionResultEnum.ERROR.exception("参数不完整");
+        }
+        gradePaperStructService.exportGradePaperStructTemplate(paperNumber, paperType, requestUser);
+        return ResultUtil.ok();
+    }
 }

+ 5 - 4
distributed-print/src/main/java/com/qmth/distributed/print/interceptor/AuthInterceptor.java

@@ -1,6 +1,7 @@
 package com.qmth.distributed.print.interceptor;
 
 import com.qmth.boot.api.interceptor.ExtendInterceptor;
+import com.qmth.teachcloud.common.util.AuthUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
@@ -21,11 +22,11 @@ public class AuthInterceptor extends ExtendInterceptor {
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         log.info("preHandle is come in");
-//        if (request.getServletPath().contains(endpoint)) {
+        if (request.getServletPath().contains(endpoint)) {
         return true;
-//        } else {
-//            return AuthUtil.adminAuthInterceptor(request, response, handler);
-//        }
+        } else {
+            return AuthUtil.adminAuthInterceptor(request, response, handler);
+        }
     }
 
     @Override

+ 7 - 6
distributed-print/src/main/resources/application-dev.properties

@@ -12,9 +12,9 @@ spring.application.name=distributed-print
 #\u6570\u636E\u6E90\u914D\u7F6E
 db.host=localhost
 db.port=3306
-db.name=distributed-v3.1.0
+db.name=distributed-v3.0.2
 db.username=root
-db.password=123456789
+db.password=88888888
 
 #redis\u6570\u636E\u6E90\u914D\u7F6E
 com.qmth.redis.host=${db.host}
@@ -89,7 +89,7 @@ org.center.orgQueryApi=/api/open/org/query
 #com.qmth.api.uri-prefix=/aaa
 #\u7EDF\u8BA1\u9875\u9762\u914D\u7F6E
 com.qmth.api.metrics-endpoint=/metrics-count
-com.qmth.api.global-auth=true
+com.qmth.api.global-auth=false
 #com.qmth.api.global-strict=false
 #com.qmth.api.global-rate-limit=1/5s
 
@@ -117,6 +117,7 @@ prefix.url.teach=admin/teach
 prefix.url.auth=admin/auth
 prefix.url.open=admin/print/open
 prefix.url.notify=admin/print/notify
+prefix.url.grade=admin/grade
 
 #\u65E5\u671F\u683C\u5F0F\u5316
 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
@@ -157,9 +158,9 @@ sync.config.groupCountUrl=/api/exam/mark_group/count
 sync.config.groupDeleteUrl=/api/exam/mark_group/delete
 sync.config.markerSaveUrl=/api/exam/marker/save
 
-#com.qmth.solar.access-key=274f823e5f59410f8b3bb6edcd8e2b6e
-#com.qmth.solar.access-secret=y7AO6W0TOdTF8HpWBwGHbp3wfIHsmUKr
-com.qmth.solar.license=/Volumes/extend/\u542F\u660E/\u5206\u5E03\u5F0F\u5370\u5237/\u5206\u5E03\u5F0F\u5370\u5237&\u6559\u7814\u5206\u6790v3.1.0/tc-dev-wl.lic
+com.qmth.solar.access-key=274f823e5f59410f8b3bb6edcd8e2b6e
+com.qmth.solar.access-secret=y7AO6W0TOdTF8HpWBwGHbp3wfIHsmUKr
+#com.qmth.solar.license=/Volumes/extend/\u542F\u660E/\u5206\u5E03\u5F0F\u5370\u5237/\u5206\u5E03\u5F0F\u5370\u5237&\u6559\u7814\u5206\u6790v3.1.0/tc-dev-wl.lic
 
 sms.config.smsNormalCode=qmth
 sms.config.codeExpiredTime=2

+ 15 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/QuestionType.java

@@ -1,5 +1,7 @@
 package com.qmth.teachcloud.common.enums;
 
+import java.util.Objects;
+
 /**
  * @Description: 题目类型(主观题、客观题)
  * @Author: CaoZixuan
@@ -18,4 +20,17 @@ public enum QuestionType {
     public String getDesc() {
         return desc;
     }
+
+    public static QuestionType convertToEnum(String desc) {
+        QuestionType result = null;
+        for (QuestionType e : QuestionType.values()) {
+            if (Objects.equals(desc, e.getDesc())) {
+                result = e;
+            }
+        }
+        if (result == null){
+            throw ExceptionResultEnum.ERROR.exception("枚举类型不存在");
+        }
+        return result;
+    }
 }

+ 3 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

@@ -925,7 +925,7 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
         }
         String sessionId = SessionUtil.digest(sysUser.getId(), Math.abs(roleNames.toString().hashCode()), platform.name());
         //TODO 测试用
-//        String test = SignatureEntityTest.build(SignatureType.TOKEN, sessionId, token);
+        String test = SignatureEntityTest.build(SignatureType.TOKEN, sessionId, token);
         ExpireTimeBean expireTime = AuthUtil.getExpireTime(platform);
         TBSession tbSession = new TBSession(sysUser.getSchoolId(), sessionId, String.valueOf(sysUser.getId()), roleNames.toString(),
                 platform.name(), platform.name(), deviceId, ServletUtil.getRequest().getLocalAddr(), token,
@@ -933,8 +933,8 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
         tbSessionService.saveOrUpdate(tbSession);
         redisUtil.setUserSession(sessionId, tbSession, expireTime.getExpireSeconds());
 
-//        LoginResult loginResult = new LoginResult(sysUser, sessionId, test, Objects.nonNull(roleTypes) && roleTypes.size() > 0 ? roleTypes : roleNames, appSource);
-        LoginResult loginResult = new LoginResult(sysUser, sessionId, token, Objects.nonNull(roleTypes) && roleTypes.size() > 0 ? roleTypes : roleNames, appSource);
+        LoginResult loginResult = new LoginResult(sysUser, sessionId, test, Objects.nonNull(roleTypes) && roleTypes.size() > 0 ? roleTypes : roleNames, appSource);
+//        LoginResult loginResult = new LoginResult(sysUser, sessionId, token, Objects.nonNull(roleTypes) && roleTypes.size() > 0 ? roleTypes : roleNames, appSource);
         loginResult.setSchoolInfo(Objects.nonNull(authBean.getSchool()) ? loginResult.new SchoolNativeBean(authBean.getSchool()) : null);
         loginResult.setOrgInfo(Objects.nonNull(authBean.getOrg()) ? loginResult.new OrgNativeBean(authBean.getOrg()) : null);
         loginResult.setTime(System.currentTimeMillis());