فهرست منبع

新增赋分结果对比

wangliang 2 سال پیش
والد
کامیت
eb13ac0453

+ 69 - 14
src/main/java/com/qmth/eds/api/ExamAssignController.java

@@ -3,17 +3,21 @@ package com.qmth.eds.api;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.eds.bean.result.AssignContrastResult;
 import com.qmth.eds.bean.result.AssignResultPreviewResult;
 import com.qmth.eds.bean.result.EditResult;
+import com.qmth.eds.bean.result.StudentMarkResult;
 import com.qmth.eds.common.contant.SystemConstant;
 import com.qmth.eds.common.entity.ExamAssign;
+import com.qmth.eds.common.entity.SysUser;
 import com.qmth.eds.common.util.Result;
 import com.qmth.eds.common.util.ResultUtil;
+import com.qmth.eds.common.util.ServletUtil;
+import com.qmth.eds.service.CloudMarkingScoreService;
+import com.qmth.eds.service.CommonService;
 import com.qmth.eds.service.ExamAssignService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.*;
+import org.springframework.util.CollectionUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -23,6 +27,11 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
 
 /**
  * <p>
@@ -38,6 +47,12 @@ public class ExamAssignController {
     @Resource
     private ExamAssignService examAssignService;
 
+    @Resource
+    CommonService commonService;
+
+    @Resource
+    CloudMarkingScoreService cloudMarkingScoreService;
+
     @ApiOperation(value = "分页查询")
     @PostMapping("/page")
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
@@ -71,20 +86,60 @@ public class ExamAssignController {
     @ApiOperation(value = "计算结果查询")
     @PostMapping("/result")
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = AssignResultPreviewResult.class)})
-    public Result assignResultPreview(@RequestParam(value = "开课学院", required = false) String collegeName,
-                                @RequestParam(value = "班级id", required = false) String clazzId,
-                                @RequestParam(value = "任课老师工号", required = false) String teacherCode,
-                                @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
-                                @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+    public Result assignResultPreview(@ApiParam(value = "开课学院", required = true) @RequestParam String collegeName,
+                                      @ApiParam(value = "班级id", required = true) @RequestParam String clazzId,
+                                      @ApiParam(value = "任课老师工号", required = true) @RequestParam String teacherCode,
+                                      @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                                      @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
         return ResultUtil.ok(examAssignService.assignResultPreview(new Page<>(pageNumber, pageSize), collegeName, clazzId, teacherCode));
     }
 
     @ApiOperation(value = "计算结果对比")
     @PostMapping("/contrast")
-    @ApiResponses({@ApiResponse(code = 200, message = "保存/更新成功", response = EditResult.class)})
-    public Result contrast(@RequestParam(value = "semesterId", required = false) Long semesterId,
-                           @RequestParam(value = "examTypeId", required = false) Long examTypeId,
-                           @RequestParam(value = "courseCode", required = false) String courseCode) {
-        return ResultUtil.ok(examAssignService.contrast(semesterId, examTypeId, courseCode));
+    @ApiResponses({@ApiResponse(code = 200, message = "保存/更新成功", response = AssignContrastResult.class)})
+    public Result contrast(@ApiParam(value = "学期id", required = true) @RequestParam Long semesterId,
+                           @ApiParam(value = "考试id", required = true) @RequestParam Long examId,
+                           @ApiParam(value = "科目代码", required = true) @RequestParam String subjectCode,
+                           @ApiParam(value = "开课学院", required = true) @RequestParam String collegeName,
+//                           @ApiParam(value = "卷面总分", required = true) @RequestParam BigDecimal surfaceScore,
+                           @ApiParam(value = "及格分", required = true) @RequestParam BigDecimal passScore) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        Set<String> subjectCodeSet = commonService.findCloudMarkSubjectCode(semesterId, examId, subjectCode);
+        List<StudentMarkResult> studentMarkResultList = cloudMarkingScoreService.queryStudentMark(schoolId, sysUser.getOrgId(), semesterId, examId, subjectCode, collegeName, subjectCodeSet);
+        AssignContrastResult assignContrastResult = null;
+        if (!CollectionUtils.isEmpty(studentMarkResultList)) {
+            BigDecimal assignBeforeSumScore = new BigDecimal(0), assignAfterSumScore = new BigDecimal(0), sumCount = new BigDecimal(studentMarkResultList.size());
+            Integer assignBeforeFailCount = 0, assignAfterFailCount = 0;
+            for (StudentMarkResult s : studentMarkResultList) {
+                //赋分前分数和不及格人数
+                if (Objects.nonNull(s.getTotalScore()) && !Objects.equals(s.getTotalScore().trim(), "")) {
+                    BigDecimal totalScore = new BigDecimal(s.getTotalScore());
+                    assignBeforeSumScore = assignBeforeSumScore.add(totalScore);
+                    if (totalScore.compareTo(passScore) < 0) {
+                        assignBeforeFailCount++;
+                    }
+                }
+                //赋分后分数和不及格人数
+                if (Objects.nonNull(s.getAssignScore()) && !Objects.equals(s.getAssignScore().trim(), "")) {
+                    BigDecimal assignScore = new BigDecimal(s.getAssignScore());
+                    assignAfterSumScore = assignAfterSumScore.add(assignScore);
+                    if (assignScore.compareTo(passScore) < 0) {
+                        assignAfterFailCount++;
+                    }
+                }
+            }
+            //赋分前平均分
+            BigDecimal assignBeforeAverageScore = assignBeforeSumScore.divide(sumCount, 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
+            //赋分前不及格率
+            BigDecimal assignBeforeFailRate = new BigDecimal(assignBeforeFailCount).divide(sumCount, 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
+            //赋分后平均分
+            BigDecimal assignAfterAverageScore = assignAfterSumScore.divide(sumCount, 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
+            //赋分后不及格率
+            BigDecimal assignAfterFailRate = new BigDecimal(assignAfterFailCount).divide(sumCount, 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
+            assignContrastResult = new AssignContrastResult(sumCount.intValue(), assignBeforeAverageScore, assignBeforeFailRate,
+                    assignBeforeFailCount, assignAfterAverageScore, assignAfterAverageScore, assignAfterFailCount);
+        }
+        return ResultUtil.ok(Objects.isNull(assignContrastResult) ? new AssignContrastResult() : assignContrastResult);
     }
 }

+ 9 - 35
src/main/java/com/qmth/eds/api/SysController.java

@@ -6,7 +6,6 @@ import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.eds.bean.params.LoginParam;
 import com.qmth.eds.bean.result.*;
-import com.qmth.eds.common.entity.CloudMarkingScore;
 import com.qmth.eds.common.entity.ExamSyncStudent;
 import com.qmth.eds.common.entity.SysUser;
 import com.qmth.eds.common.enums.AppSourceEnum;
@@ -14,8 +13,7 @@ import com.qmth.eds.common.enums.ExceptionResultEnum;
 import com.qmth.eds.common.util.Result;
 import com.qmth.eds.common.util.ResultUtil;
 import com.qmth.eds.common.util.ServletUtil;
-import com.qmth.eds.service.CloudMarkingScoreService;
-import com.qmth.eds.service.ExamSyncStudentService;
+import com.qmth.eds.service.CommonService;
 import com.qmth.eds.service.SysUserService;
 import com.qmth.eds.service.TeachcloudCommonService;
 import io.swagger.annotations.*;
@@ -27,8 +25,10 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.security.NoSuchAlgorithmException;
-import java.util.*;
-import java.util.stream.Collectors;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
 
 /**
  * 系统公共Controller
@@ -45,10 +45,7 @@ public class SysController {
     TeachcloudCommonService teachcloudCommonService;
 
     @Resource
-    CloudMarkingScoreService cloudMarkingScoreService;
-
-    @Resource
-    ExamSyncStudentService examSyncStudentService;
+    CommonService commonService;
 
     /**
      * 登录
@@ -114,7 +111,7 @@ public class SysController {
     public Result examineCollegeList(@ApiParam(value = "学期id") @RequestParam(required = false) Long semesterId,
                                      @ApiParam(value = "考试id") @RequestParam(required = false) Long examId,
                                      @ApiParam(value = "科目代码") @RequestParam(required = false) String subjectCode) {
-        List<ExamSyncStudent> examSyncStudentList = this.conditionCommonQuery(semesterId, examId, subjectCode);
+        List<ExamSyncStudent> examSyncStudentList = commonService.conditionCommonQuery(semesterId, examId, subjectCode);
         List<ExamineCollegeResult> examineCollegeResultList = null;
         if (!CollectionUtils.isEmpty(examSyncStudentList)) {
             examineCollegeResultList = new ArrayList<>(examSyncStudentList.size());
@@ -133,7 +130,7 @@ public class SysController {
     public Result clazzList(@ApiParam(value = "学期id") @RequestParam(required = false) Long semesterId,
                             @ApiParam(value = "考试id") @RequestParam(required = false) Long examId,
                             @ApiParam(value = "科目代码") @RequestParam(required = false) String subjectCode) {
-        List<ExamSyncStudent> examSyncStudentList = this.conditionCommonQuery(semesterId, examId, subjectCode);
+        List<ExamSyncStudent> examSyncStudentList = commonService.conditionCommonQuery(semesterId, examId, subjectCode);
         List<ClazzResult> clazzResultList = null;
         if (!CollectionUtils.isEmpty(examSyncStudentList)) {
             clazzResultList = new ArrayList<>(examSyncStudentList.size());
@@ -153,7 +150,7 @@ public class SysController {
     public Result teacherList(@ApiParam(value = "学期id") @RequestParam(required = false) Long semesterId,
                               @ApiParam(value = "考试id") @RequestParam(required = false) Long examId,
                               @ApiParam(value = "科目代码") @RequestParam(required = false) String subjectCode) {
-        List<ExamSyncStudent> examSyncStudentList = this.conditionCommonQuery(semesterId, examId, subjectCode);
+        List<ExamSyncStudent> examSyncStudentList = commonService.conditionCommonQuery(semesterId, examId, subjectCode);
         List<TeacherResult> teacherResultList = null;
         if (!CollectionUtils.isEmpty(examSyncStudentList)) {
             teacherResultList = new ArrayList<>(examSyncStudentList.size());
@@ -166,27 +163,4 @@ public class SysController {
         }
         return ResultUtil.ok(!CollectionUtils.isEmpty(teacherResultList) ? teacherResultList : Collections.emptyList());
     }
-
-    /**
-     * 查询条件公用
-     *
-     * @param semesterId
-     * @param examId
-     * @param subjectCode
-     * @return
-     */
-    private List<ExamSyncStudent> conditionCommonQuery(Long semesterId,
-                                                       Long examId,
-                                                       String subjectCode) {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        //先查询云阅卷科目代码
-        List<CloudMarkingScore> cloudMarkingScoreList = cloudMarkingScoreService.queryBySyncCourseCode(schoolId, sysUser.getOrgId(), subjectCode);
-        Set<String> subjectCodeSet = null;
-        if (!CollectionUtils.isEmpty(cloudMarkingScoreList)) {
-            subjectCodeSet = new HashSet<>(cloudMarkingScoreList.size());
-            subjectCodeSet = cloudMarkingScoreList.stream().map(s -> s.getSubjectCode()).collect(Collectors.toSet());
-        }
-        return examSyncStudentService.queryByExamineCollegeList(schoolId, sysUser.getOrgId(), examId, subjectCode, subjectCodeSet);
-    }
 }

+ 108 - 0
src/main/java/com/qmth/eds/bean/result/AssignContrastResult.java

@@ -0,0 +1,108 @@
+package com.qmth.eds.bean.result;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @Description: 赋分计算result
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2023/5/24
+ */
+public class AssignContrastResult implements Serializable {
+
+    @ApiModelProperty(value = "总体有效人数")
+    Integer size;
+
+    @ApiModelProperty(value = "赋分前平均分")
+    BigDecimal assignBeforeAverageScore;
+
+    @ApiModelProperty(value = "赋分前不及格率")
+    BigDecimal assignBeforeFailRate;
+
+    @ApiModelProperty(value = "赋分前不及格人数")
+    Integer assignBeforeFailCount;
+
+    @ApiModelProperty(value = "赋分后平均分")
+    BigDecimal assignAfterAverageScore;
+
+    @ApiModelProperty(value = "赋分后不及格率")
+    BigDecimal assignAfterFailRate;
+
+    @ApiModelProperty(value = "赋分后不及格人数")
+    Integer assignAfterFailCount;
+
+    public AssignContrastResult() {
+
+    }
+
+    public AssignContrastResult(Integer size, BigDecimal assignBeforeAverageScore, BigDecimal assignBeforeFailRate, Integer assignBeforeFailCount,
+                                BigDecimal assignAfterAverageScore, BigDecimal assignAfterFailRate, Integer assignAfterFailCount) {
+        this.size = size;
+        this.assignBeforeAverageScore = assignBeforeAverageScore;
+        this.assignBeforeFailCount = assignBeforeFailCount;
+        this.assignBeforeFailRate = assignBeforeFailRate;
+        this.assignAfterAverageScore = assignAfterAverageScore;
+        this.assignAfterFailCount = assignAfterFailCount;
+        this.assignAfterFailRate = assignAfterFailRate;
+    }
+
+    public Integer getSize() {
+        return size;
+    }
+
+    public void setSize(Integer size) {
+        this.size = size;
+    }
+
+    public BigDecimal getAssignBeforeAverageScore() {
+        return assignBeforeAverageScore;
+    }
+
+    public void setAssignBeforeAverageScore(BigDecimal assignBeforeAverageScore) {
+        this.assignBeforeAverageScore = assignBeforeAverageScore;
+    }
+
+    public BigDecimal getAssignBeforeFailRate() {
+        return assignBeforeFailRate;
+    }
+
+    public void setAssignBeforeFailRate(BigDecimal assignBeforeFailRate) {
+        this.assignBeforeFailRate = assignBeforeFailRate;
+    }
+
+    public BigDecimal getAssignAfterAverageScore() {
+        return assignAfterAverageScore;
+    }
+
+    public void setAssignAfterAverageScore(BigDecimal assignAfterAverageScore) {
+        this.assignAfterAverageScore = assignAfterAverageScore;
+    }
+
+    public BigDecimal getAssignAfterFailRate() {
+        return assignAfterFailRate;
+    }
+
+    public void setAssignAfterFailRate(BigDecimal assignAfterFailRate) {
+        this.assignAfterFailRate = assignAfterFailRate;
+    }
+
+    public Integer getAssignBeforeFailCount() {
+        return assignBeforeFailCount;
+    }
+
+    public void setAssignBeforeFailCount(Integer assignBeforeFailCount) {
+        this.assignBeforeFailCount = assignBeforeFailCount;
+    }
+
+    public Integer getAssignAfterFailCount() {
+        return assignAfterFailCount;
+    }
+
+    public void setAssignAfterFailCount(Integer assignAfterFailCount) {
+        this.assignAfterFailCount = assignAfterFailCount;
+    }
+}

+ 220 - 0
src/main/java/com/qmth/eds/bean/result/StudentMarkResult.java

@@ -0,0 +1,220 @@
+package com.qmth.eds.bean.result;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @Description: 赋分计算result
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2023/5/24
+ */
+public class StudentMarkResult implements Serializable {
+
+    @ApiModelProperty(value = "id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    @ExcelIgnore
+    @ApiModelProperty(value = "学校id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long schoolId;
+
+    @ApiModelProperty(value = "学年")
+    private String xnm;
+
+    @ApiModelProperty(value = "学期")
+    private String xqm;
+
+    @ApiModelProperty(value = "教学班id")
+    private String jxbId;
+
+    @ApiModelProperty(value = "教学班名称")
+    private String jxbmc;
+
+    @ApiModelProperty(value = "课程号")
+    private String kch;
+
+    @ApiModelProperty(value = "课程名称")
+    private String kcmc;
+
+    @ApiModelProperty(value = "开课部门")
+    private String kkbm;
+
+    @ApiModelProperty(value = "学分")
+    private String xf;
+
+    @ApiModelProperty(value = "学号")
+    private String xh;
+
+    @ApiModelProperty(value = "学生姓名")
+    private String xsxm;
+
+    @ApiModelProperty(value = "学院")
+    private String jgmc;
+
+    @ApiModelProperty(value = "状态")
+    private Integer status;
+
+    @ApiModelProperty(value = "总分")
+    private String totalScore;
+
+    @ApiModelProperty(value = "赋分值")
+    private String assignScore;
+
+    @ApiModelProperty(value = "客观题总分")
+    private String objectiveScore;
+
+    @ApiModelProperty(value = "主观题总分")
+    private String subjectiveScore;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public String getXnm() {
+        return xnm;
+    }
+
+    public void setXnm(String xnm) {
+        this.xnm = xnm;
+    }
+
+    public String getXqm() {
+        return xqm;
+    }
+
+    public void setXqm(String xqm) {
+        this.xqm = xqm;
+    }
+
+    public String getJxbId() {
+        return jxbId;
+    }
+
+    public void setJxbId(String jxbId) {
+        this.jxbId = jxbId;
+    }
+
+    public String getJxbmc() {
+        return jxbmc;
+    }
+
+    public void setJxbmc(String jxbmc) {
+        this.jxbmc = jxbmc;
+    }
+
+    public String getKch() {
+        return kch;
+    }
+
+    public void setKch(String kch) {
+        this.kch = kch;
+    }
+
+    public String getKcmc() {
+        return kcmc;
+    }
+
+    public void setKcmc(String kcmc) {
+        this.kcmc = kcmc;
+    }
+
+    public String getKkbm() {
+        return kkbm;
+    }
+
+    public void setKkbm(String kkbm) {
+        this.kkbm = kkbm;
+    }
+
+    public String getXf() {
+        return xf;
+    }
+
+    public void setXf(String xf) {
+        this.xf = xf;
+    }
+
+    public String getXh() {
+        return xh;
+    }
+
+    public void setXh(String xh) {
+        this.xh = xh;
+    }
+
+    public String getXsxm() {
+        return xsxm;
+    }
+
+    public void setXsxm(String xsxm) {
+        this.xsxm = xsxm;
+    }
+
+    public String getJgmc() {
+        return jgmc;
+    }
+
+    public void setJgmc(String jgmc) {
+        this.jgmc = jgmc;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public String getTotalScore() {
+        return totalScore;
+    }
+
+    public void setTotalScore(String totalScore) {
+        this.totalScore = totalScore;
+    }
+
+    public String getAssignScore() {
+        return assignScore;
+    }
+
+    public void setAssignScore(String assignScore) {
+        this.assignScore = assignScore;
+    }
+
+    public String getObjectiveScore() {
+        return objectiveScore;
+    }
+
+    public void setObjectiveScore(String objectiveScore) {
+        this.objectiveScore = objectiveScore;
+    }
+
+    public String getSubjectiveScore() {
+        return subjectiveScore;
+    }
+
+    public void setSubjectiveScore(String subjectiveScore) {
+        this.subjectiveScore = subjectiveScore;
+    }
+}

+ 12 - 1
src/main/java/com/qmth/eds/mapper/CloudMarkingScoreMapper.java

@@ -5,10 +5,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.eds.bean.dto.CloudMarkingScoreDto;
 import com.qmth.eds.bean.dto.ExamSyncStudentDto;
+import com.qmth.eds.bean.result.StudentMarkResult;
 import com.qmth.eds.common.entity.CloudMarkingScore;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * 云阅卷成绩表 Mapper 接口
@@ -21,11 +23,20 @@ public interface CloudMarkingScoreMapper extends BaseMapper<CloudMarkingScore> {
      * 根据科目代码查询
      *
      * @param schoolId
+     * @param semesterId
      * @param orgId
      * @param courseCode
      * @return
      */
-    List<CloudMarkingScore> queryBySyncCourseCode(@Param("schoolId") Long schoolId, @Param("orgId") Long orgId, @Param("courseCode") String courseCode);
+    List<CloudMarkingScore> queryBySyncCourseCode(@Param("schoolId") Long schoolId, @Param("semesterId") Long semesterId, @Param("orgId") Long orgId, @Param("courseCode") String courseCode);
 
     List<ExamSyncStudentDto> listExamSyncStudentDtos(@Param("schoolId") Long schoolId, @Param("semesterId") Long semesterId, @Param("examTypeId") Long examTypeId, @Param("courseCode") String courseCode, @Param("openCollege") String openCollege);
+
+    List<StudentMarkResult> queryStudentMark(@Param("schoolId") Long schoolId,
+                                             @Param("orgId") Long orgId,
+                                             @Param("semesterId") Long semesterId,
+                                             @Param("examId") Long examId,
+                                             @Param("subjectCode") String subjectCode,
+                                             @Param("collegeName") String collegeName,
+                                             @Param("subjectCodeSet") Set<String> subjectCodeSet);
 }

+ 2 - 1
src/main/java/com/qmth/eds/mapper/ExamSyncStudentMapper.java

@@ -16,11 +16,12 @@ public interface ExamSyncStudentMapper extends BaseMapper<ExamSyncStudent> {
      * 根据机构id、考试id、科目代码查询考查学院
      *
      * @param schoolId
+     * @param semesterId
      * @param orgId
      * @param examId
      * @param courseCode
      * @param subjectCodeSet
      * @return
      */
-    List<ExamSyncStudent> queryByExamineCollegeList(@Param("schoolId") Long schoolId, @Param("orgId") Long orgId, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("subjectCodeSet") Set<String> subjectCodeSet);
+    List<ExamSyncStudent> queryByExamineCollegeList(@Param("schoolId") Long schoolId, @Param("semesterId") Long semesterId, @Param("orgId") Long orgId, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("subjectCodeSet") Set<String> subjectCodeSet);
 }

+ 23 - 1
src/main/java/com/qmth/eds/service/CloudMarkingScoreService.java

@@ -4,9 +4,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.eds.bean.dto.CloudMarkingScoreDto;
 import com.qmth.eds.bean.dto.ExamSyncStudentDto;
+import com.qmth.eds.bean.result.StudentMarkResult;
 import com.qmth.eds.common.entity.CloudMarkingScore;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * 云阅卷成绩表 服务类
@@ -21,11 +23,31 @@ public interface CloudMarkingScoreService extends IService<CloudMarkingScore> {
      * 根据科目代码查询
      *
      * @param schoolId
+     * @param semesterId
      * @param orgId
      * @param courseCode
      * @return
      */
-    List<CloudMarkingScore> queryBySyncCourseCode(Long schoolId, Long orgId, String courseCode);
+    List<CloudMarkingScore> queryBySyncCourseCode(Long schoolId, Long semesterId, Long orgId, String courseCode);
 
     List<ExamSyncStudentDto> listExamSyncStudentDtos(Long schoolId, Long semesterId, Long examTypeId, String courseCode, String openCollege);
+
+    /**
+     * 查询学生成绩
+     *
+     * @param schoolId
+     * @param orgId
+     * @param semesterId
+     * @param examId
+     * @param subjectCode
+     * @param collegeName
+     * @param subjectCodeSet
+     * @return
+     */
+    List<StudentMarkResult> queryStudentMark(Long schoolId, Long orgId,
+                                             Long semesterId,
+                                             Long examId,
+                                             String subjectCode,
+                                             String collegeName,
+                                             Set<String> subjectCodeSet);
 }

+ 29 - 7
src/main/java/com/qmth/eds/service/CommonService.java

@@ -2,6 +2,7 @@ package com.qmth.eds.service;
 
 import com.qmth.eds.bean.auth.AuthBean;
 import com.qmth.eds.bean.result.MenuResult;
+import com.qmth.eds.common.entity.ExamSyncStudent;
 import com.qmth.eds.common.entity.SysRolePrivilege;
 import com.qmth.eds.common.entity.SysUserRole;
 import com.qmth.eds.common.enums.PrivilegePropertyEnum;
@@ -24,7 +25,7 @@ public interface CommonService {
      * @param userId
      * @return
      */
-     MenuResult getUserMenu(Long userId);
+    MenuResult getUserMenu(Long userId);
 
     /**
      * 获取用户角色
@@ -32,7 +33,7 @@ public interface CommonService {
      * @param userId
      * @return
      */
-     List<SysUserRole> getUserRolePrivilege(Long userId);
+    List<SysUserRole> getUserRolePrivilege(Long userId);
 
     /**
      * 获取角色权限
@@ -40,7 +41,7 @@ public interface CommonService {
      * @param roleId
      * @return
      */
-     List<SysRolePrivilege> getRolePrivilege(Long roleId);
+    List<SysRolePrivilege> getRolePrivilege(Long roleId);
 
     /**
      * 获取用户权限
@@ -48,7 +49,7 @@ public interface CommonService {
      * @param userId
      * @return
      */
-     AuthBean getUserAuth(Long userId);
+    AuthBean getUserAuth(Long userId);
 
     /**
      * 获取鉴权url
@@ -56,7 +57,7 @@ public interface CommonService {
      * @param privilegePropertyEnum
      * @return
      */
-     Set<String> getPrivilegeUrl(PrivilegePropertyEnum privilegePropertyEnum);
+    Set<String> getPrivilegeUrl(PrivilegePropertyEnum privilegePropertyEnum);
 
     /**
      * 获取鉴权url
@@ -65,13 +66,34 @@ public interface CommonService {
      * @param schoolId
      * @return
      */
-     Set<String> getPrivilegeUrl(PrivilegePropertyEnum privilegePropertyEnum, Long schoolId);
+    Set<String> getPrivilegeUrl(PrivilegePropertyEnum privilegePropertyEnum, Long schoolId);
 
     /**
      * 查询系统参数值
+     *
      * @param schoolId 学校ID
-     * @param code key
+     * @param code     key
      * @return
      */
     String getSysSettingValue(Long schoolId, String code);
+
+    /**
+     * 查询条件公用
+     *
+     * @param semesterId
+     * @param examId
+     * @param subjectCode
+     * @return
+     */
+    List<ExamSyncStudent> conditionCommonQuery(Long semesterId, Long examId, String subjectCode);
+
+    /**
+     * 查询云阅卷科目代码
+     *
+     * @param semesterId
+     * @param examId
+     * @param subjectCode
+     * @return
+     */
+    Set<String> findCloudMarkSubjectCode(Long semesterId, Long examId, String subjectCode);
 }

+ 2 - 1
src/main/java/com/qmth/eds/service/ExamSyncStudentService.java

@@ -18,11 +18,12 @@ public interface ExamSyncStudentService extends IService<ExamSyncStudent> {
      * 根据机构id、考试id、科目代码查询考查学院
      *
      * @param schoolId
+     * @param semesterId
      * @param orgId
      * @param examId
      * @param courseCode
      * @param cloudMarkSubjectCodeSet
      * @return
      */
-    List<ExamSyncStudent> queryByExamineCollegeList(Long schoolId, Long orgId, Long examId, String courseCode, Set<String> cloudMarkSubjectCodeSet);
+    List<ExamSyncStudent> queryByExamineCollegeList(Long schoolId, Long semesterId, Long orgId, Long examId, String courseCode, Set<String> cloudMarkSubjectCodeSet);
 }

+ 22 - 2
src/main/java/com/qmth/eds/service/impl/CloudMarkingScoreServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.eds.bean.dto.CloudMarkingScoreDto;
 import com.qmth.eds.bean.dto.ExamSyncStudentDto;
+import com.qmth.eds.bean.result.StudentMarkResult;
 import com.qmth.eds.common.entity.CloudMarkingScore;
 import com.qmth.eds.common.util.ServletUtil;
 import com.qmth.eds.mapper.CloudMarkingScoreMapper;
@@ -14,6 +15,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Set;
 
 @Service
 public class CloudMarkingScoreServiceImpl extends ServiceImpl<CloudMarkingScoreMapper, CloudMarkingScore> implements CloudMarkingScoreService {
@@ -42,17 +44,35 @@ public class CloudMarkingScoreServiceImpl extends ServiceImpl<CloudMarkingScoreM
      * 根据科目代码查询
      *
      * @param schoolId
+     * @param semesterId
      * @param orgId
      * @param courseCode
      * @return
      */
     @Override
-    public List<CloudMarkingScore> queryBySyncCourseCode(Long schoolId, Long orgId, String courseCode) {
-        return cloudMarkingScoreMapper.queryBySyncCourseCode(schoolId, orgId, courseCode);
+    public List<CloudMarkingScore> queryBySyncCourseCode(Long schoolId, Long semesterId, Long orgId, String courseCode) {
+        return cloudMarkingScoreMapper.queryBySyncCourseCode(schoolId, semesterId, orgId, courseCode);
     }
 
     @Override
     public List<ExamSyncStudentDto> listExamSyncStudentDtos(Long schoolId, Long semesterId, Long examTypeId, String courseCode, String openCollege) {
         return this.baseMapper.listExamSyncStudentDtos(schoolId, semesterId, examTypeId, courseCode, openCollege);
     }
+
+    /**
+     * 查询学生成绩
+     *
+     * @param schoolId
+     * @param orgId
+     * @param semesterId
+     * @param examId
+     * @param subjectCode
+     * @param collegeName
+     * @param subjectCodeSet
+     * @return
+     */
+    @Override
+    public List<StudentMarkResult> queryStudentMark(Long schoolId, Long orgId, Long semesterId, Long examId, String subjectCode, String collegeName, Set<String> subjectCodeSet) {
+        return cloudMarkingScoreMapper.queryStudentMark(schoolId, orgId, semesterId, examId, subjectCode, collegeName, subjectCodeSet);
+    }
 }

+ 45 - 0
src/main/java/com/qmth/eds/service/impl/CommonServiceImpl.java

@@ -16,10 +16,12 @@ import com.qmth.eds.common.enums.PrivilegeEnum;
 import com.qmth.eds.common.enums.PrivilegePropertyEnum;
 import com.qmth.eds.common.enums.RoleTypeEnum;
 import com.qmth.eds.common.util.JacksonUtil;
+import com.qmth.eds.common.util.ServletUtil;
 import com.qmth.eds.service.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.LinkedMultiValueMap;
 
 import javax.annotation.Resource;
@@ -48,6 +50,12 @@ public class CommonServiceImpl implements CommonService {
     @Resource
     SysRoleService sysRoleService;
 
+    @Resource
+    CloudMarkingScoreService cloudMarkingScoreService;
+
+    @Resource
+    ExamSyncStudentService examSyncStudentService;
+
     /**
      * 获取用户菜单
      *
@@ -234,4 +242,41 @@ public class CommonServiceImpl implements CommonService {
         return simpleObject.getValue();
     }
 
+    /**
+     * 查询条件公用
+     *
+     * @param semesterId
+     * @param examId
+     * @param subjectCode
+     * @return
+     */
+    @Override
+    public List<ExamSyncStudent> conditionCommonQuery(Long semesterId, Long examId, String subjectCode) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        Set<String> subjectCodeSet = this.findCloudMarkSubjectCode(semesterId, examId, subjectCode);
+        return examSyncStudentService.queryByExamineCollegeList(schoolId, semesterId, sysUser.getOrgId(), examId, subjectCode, subjectCodeSet);
+    }
+
+    /**
+     * 查询云阅卷科目代码
+     *
+     * @param semesterId
+     * @param examId
+     * @param subjectCode
+     * @return
+     */
+    @Override
+    public Set<String> findCloudMarkSubjectCode(Long semesterId, Long examId, String subjectCode) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        //先查询云阅卷科目代码
+        List<CloudMarkingScore> cloudMarkingScoreList = cloudMarkingScoreService.queryBySyncCourseCode(schoolId, semesterId, sysUser.getOrgId(), subjectCode);
+        Set<String> subjectCodeSet = null;
+        if (!CollectionUtils.isEmpty(cloudMarkingScoreList)) {
+            subjectCodeSet = new HashSet<>(cloudMarkingScoreList.size());
+            subjectCodeSet = cloudMarkingScoreList.stream().map(s -> s.getSubjectCode()).collect(Collectors.toSet());
+        }
+        return !CollectionUtils.isEmpty(subjectCodeSet) ? subjectCodeSet : Collections.emptySet();
+    }
 }

+ 3 - 2
src/main/java/com/qmth/eds/service/impl/ExamSyncStudentServiceImpl.java

@@ -56,6 +56,7 @@ public class ExamSyncStudentServiceImpl extends ServiceImpl<ExamSyncStudentMappe
      * 根据机构id、考试id、科目代码查询考查学院
      *
      * @param schoolId
+     * @param semesterId
      * @param orgId
      * @param examId
      * @param courseCode
@@ -63,7 +64,7 @@ public class ExamSyncStudentServiceImpl extends ServiceImpl<ExamSyncStudentMappe
      * @return
      */
     @Override
-    public List<ExamSyncStudent> queryByExamineCollegeList(Long schoolId, Long orgId, Long examId, String courseCode, Set<String> cloudMarkSubjectCodeSet) {
-        return examSyncStudentMapper.queryByExamineCollegeList(schoolId, orgId, examId, courseCode, cloudMarkSubjectCodeSet);
+    public List<ExamSyncStudent> queryByExamineCollegeList(Long schoolId, Long semesterId, Long orgId, Long examId, String courseCode, Set<String> cloudMarkSubjectCodeSet) {
+        return examSyncStudentMapper.queryByExamineCollegeList(schoolId, semesterId, orgId, examId, courseCode, cloudMarkSubjectCodeSet);
     }
 }

+ 69 - 0
src/main/resources/mapper/CloudMarkingScoreMapper.xml

@@ -47,6 +47,9 @@
         <where> 1 = 1
             <if test="orgId != null and orgId != ''">
                 and cms.school_id = #{orgId}
+            </if>
+            <if test="semesterId != null and semesterId != ''">
+                and cms.semester_id = #{semesterId}
             </if>
                 and exists (
                     select
@@ -92,4 +95,70 @@
             </if>
         </where>
     </select>
+
+    <select id="queryStudentMark" resultType="com.qmth.eds.bean.result.StudentMarkResult">
+        select
+            ess.id,
+            ess.school_id as schoolId,
+            ess.xnm as xnm,
+            ess.xqm as xqm,
+            ess.jxb_id as jxbId,
+            ess.jxbmc as jxbmc,
+            ess.kch as kch,
+            ess.kcmc as kcmc,
+            ess.kkbm as kkbm,
+            ess.xf as xf,
+            ess.xh as xh,
+            ess.xsxm as xsxm,
+            ess.jgmc as jgmc,
+            t.status,
+            t.total_score as totalScore,
+            t.assign_score as assignScore,
+            t.objective_score as objectiveScore,
+            t.subjective_score as subjectiveScore
+        from
+        exam_sync_student ess
+        join exam_course_mapping ecm on 1 = 1
+        <if test="courseCode != null and courseCode != ''">
+            and ecm.sync_course_code = #{courseCode}
+        </if>
+        <if test="subjectCodeSet != null and subjectCodeSet != '' and subjectCodeSet.size > 0">
+            and ecm.cloud_marking_course_code in
+            <foreach collection="subjectCodeSet" item="subjectCode" index="index" open="(" close=")" separator=",">
+                #{subjectCode}
+            </foreach>
+        </if>
+        join cloud_marking_score t on ess.id = t.exam_sync_student_id
+        <where> 1 = 1
+            <if test="schoolId != null and schoolId != ''">
+                and ess.school_id = #{schoolId}
+            </if>
+            and exists(
+            select
+            cms.student_code
+            from
+            cloud_marking_score cms
+            <where> 1 = 1
+                <if test="orgId != null and orgId != ''">
+                    and cms.school_id = #{orgId}
+                </if>
+                <if test="semesterId != null and semesterId != ''">
+                    and cms.semester_id = #{semesterId}
+                </if>
+                <if test="examId != null and examId != ''">
+                    and cms.exam_id = #{examId}
+                </if>
+                <if test="subjectCodeSet != null and subjectCodeSet != '' and subjectCodeSet.size > 0">
+                    and cms.subject_code in
+                    <foreach collection="subjectCodeSet" item="subjectCode" index="index" open="(" close=")" separator=",">
+                        #{subjectCode}
+                    </foreach>
+                </if>
+                and ess.id = cms.exam_sync_student_id
+            </where>)
+            <if test="collegeName != null and collegeName != ''">
+                and ess.kkbm = #{collegeName}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 5 - 2
src/main/resources/mapper/ExamSyncStudentMapper.xml

@@ -17,7 +17,7 @@
                 #{subjectCode}
             </foreach>
         </if>
-        <where>
+        <where> 1 = 1
             <if test="schoolId != null and schoolId != ''">
                 and ess.school_id = #{schoolId}
             </if>
@@ -26,10 +26,13 @@
                     cms.student_code
                 from
                     cloud_marking_score cms
-                <where>
+                <where> 1 = 1
                     <if test="orgId != null and orgId != ''">
                         and cms.school_id = #{orgId}
                     </if>
+                    <if test="semesterId != null and semesterId != ''">
+                        and cms.semester_id = #{semesterId}
+                    </if>
                     <if test="examId != null and examId != ''">
                         and cms.exam_id = #{examId}
                     </if>