Sfoglia il codice sorgente

3.3.0 评卷入口列表

xiaofei 1 anno fa
parent
commit
4a268cf2fc

+ 31 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkEntranceController.java

@@ -1,13 +1,26 @@
 package com.qmth.distributed.print.api.mark;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.bean.dto.mark.MarkEntranceDto;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.mark.service.MarkGroupService;
+import com.qmth.teachcloud.mark.service.MarkUserGroupService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.web.bind.annotation.RequestMapping;
-
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+
 /**
  * <p>
  * 评卷入口 前端控制器
@@ -21,4 +34,21 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/entrance")
 public class MarkEntranceController {
 
+    @Resource
+    MarkUserGroupService markUserGroupService;
+
+    /**
+     * 评卷入口数据列表
+     */
+    @ApiOperation(value = "查询")
+    @RequestMapping(value = "/list", method = RequestMethod.POST)
+    public Result list(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
+                       @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode,
+                       @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
+                       @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                       @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        IPage<MarkEntranceDto> markEntranceDtoIPage = markUserGroupService.listEntranceGroup(examId, courseCode, paperNumber, pageNumber, pageSize);
+        return ResultUtil.ok(markEntranceDtoIPage);
+    }
+
 }

+ 105 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/mark/MarkEntranceDto.java

@@ -0,0 +1,105 @@
+package com.qmth.teachcloud.common.bean.dto.mark;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+
+/**
+ * 评卷入口 列表
+ */
+public class MarkEntranceDto {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long examId;
+    private Integer groupNumber;
+    private String courseCode;
+    private String courseName;
+    private String paperNumber;
+    private String groupQuestions;
+    private Integer libraryCount;
+    private Integer markedCount;
+    private Integer leftCount;
+    /**
+     * 进度
+     */
+    private Double percent;
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+
+    public String getGroupQuestions() {
+        return groupQuestions;
+    }
+
+    public void setGroupQuestions(String groupQuestions) {
+        this.groupQuestions = groupQuestions;
+    }
+
+    public Integer getLibraryCount() {
+        return libraryCount;
+    }
+
+    public void setLibraryCount(Integer libraryCount) {
+        this.libraryCount = libraryCount;
+    }
+
+    public Integer getMarkedCount() {
+        return markedCount;
+    }
+
+    public void setMarkedCount(Integer markedCount) {
+        this.markedCount = markedCount;
+    }
+
+    public Integer getLeftCount() {
+        return leftCount;
+    }
+
+    public void setLeftCount(Integer leftCount) {
+        this.leftCount = leftCount;
+    }
+
+    public Double getPercent() {
+        return percent;
+    }
+
+    public void setPercent(Double percent) {
+        this.percent = percent;
+    }
+}

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/ExceptionResultEnum.java

@@ -70,6 +70,7 @@ public enum ExceptionResultEnum {
     EXAM_RULE_IS_NULL(HttpStatus.INTERNAL_SERVER_ERROR, 50000026, "考务规则为空"),
 
     EXAM_IS_NULL(HttpStatus.INTERNAL_SERVER_ERROR, 50000026, "考试不存在"),
+    EXAM_ID_IS_NULL(HttpStatus.INTERNAL_SERVER_ERROR, 50000026, "请选择考试"),
 
     EXAM_PRINT_CONFIG_IS_NULL(HttpStatus.INTERNAL_SERVER_ERROR, 50000026, "考试设置不存在"),
 

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/MarkQuestionMapper.java

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.common.mapper;
 
 import com.qmth.teachcloud.common.entity.MarkQuestion;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +14,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface MarkQuestionMapper extends BaseMapper<MarkQuestion> {
 
+    String groupQuestionsByExamIdAndPaperNumberAndNumber(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber);
 }

+ 9 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/MarkQuestionService.java

@@ -1,7 +1,7 @@
 package com.qmth.teachcloud.common.service;
 
-import com.qmth.teachcloud.common.entity.MarkQuestion;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.teachcloud.common.entity.MarkQuestion;
 
 /**
  * <p>
@@ -13,4 +13,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface MarkQuestionService extends IService<MarkQuestion> {
 
+    /**
+     * 查询分组的分组题目
+     *
+     * @param examId      考试ID
+     * @param paperNumber 试卷编号
+     * @param groupNumber 分组号
+     */
+    String groupQuestionsByExamIdAndPaperNumberAndNumber(Long examId, String paperNumber, Integer groupNumber);
 }

+ 4 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/MarkQuestionServiceImpl.java

@@ -17,4 +17,8 @@ import org.springframework.stereotype.Service;
 @Service
 public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, MarkQuestion> implements MarkQuestionService {
 
+    @Override
+    public String groupQuestionsByExamIdAndPaperNumberAndNumber(Long examId, String paperNumber, Integer groupNumber) {
+        return this.baseMapper.groupQuestionsByExamIdAndPaperNumberAndNumber(examId, paperNumber, groupNumber);
+    }
 }

+ 11 - 0
teachcloud-common/src/main/resources/mapper/MarkQuestionMapper.xml

@@ -19,5 +19,16 @@
         <result column="question_type" property="questionType" />
         <result column="name" property="name" />
     </resultMap>
+    <select id="groupQuestionsByExamIdAndPaperNumberAndNumber" resultType="java.lang.String">
+        SELECT
+            GROUP_CONCAT(CONCAT(mq.main_number, '-', mq.sub_number))
+        FROM
+            mark_question mq
+        WHERE
+            mq.exam_id = #{examId}
+          AND mq.paper_number = #{paperNumber}
+          AND mq.group_number = #{groupNumber}
+        ORDER BY mq.main_number , mq.sub_number
+    </select>
 
 </mapper>

+ 5 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkUserGroupMapper.java

@@ -1,7 +1,11 @@
 package com.qmth.teachcloud.mark.mapper;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.teachcloud.common.bean.dto.mark.MarkEntranceDto;
 import com.qmth.teachcloud.mark.entity.MarkUserGroup;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface MarkUserGroupMapper extends BaseMapper<MarkUserGroup> {
 
+    IPage<MarkEntranceDto> listEntranceGroup(@Param("page") Page<MarkUserGroup> page, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("userId") Long userId);
 }

+ 1 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkGroupService.java

@@ -1,7 +1,7 @@
 package com.qmth.teachcloud.mark.service;
 
-import com.qmth.teachcloud.mark.entity.MarkGroup;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.teachcloud.mark.entity.MarkGroup;
 
 /**
  * <p>

+ 3 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkUserGroupService.java

@@ -1,5 +1,7 @@
 package com.qmth.teachcloud.mark.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qmth.teachcloud.common.bean.dto.mark.MarkEntranceDto;
 import com.qmth.teachcloud.mark.entity.MarkUserGroup;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -13,4 +15,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface MarkUserGroupService extends IService<MarkUserGroup> {
 
+    IPage<MarkEntranceDto> listEntranceGroup(Long examId, String courseCode, String paperNumber, Integer pageNumber, Integer pageSize);
 }

+ 1 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkGroupServiceImpl.java

@@ -1,9 +1,9 @@
 package com.qmth.teachcloud.mark.service.impl;
 
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.teachcloud.mark.entity.MarkGroup;
 import com.qmth.teachcloud.mark.mapper.MarkGroupMapper;
 import com.qmth.teachcloud.mark.service.MarkGroupService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
 /**

+ 38 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserGroupServiceImpl.java

@@ -1,11 +1,23 @@
 package com.qmth.teachcloud.mark.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.teachcloud.common.bean.dto.mark.MarkEntranceDto;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.service.MarkQuestionService;
+import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.entity.MarkUserGroup;
 import com.qmth.teachcloud.mark.mapper.MarkUserGroupMapper;
 import com.qmth.teachcloud.mark.service.MarkUserGroupService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Objects;
+
 /**
  * <p>
  * 评卷员表 服务实现类
@@ -17,4 +29,29 @@ import org.springframework.stereotype.Service;
 @Service
 public class MarkUserGroupServiceImpl extends ServiceImpl<MarkUserGroupMapper, MarkUserGroup> implements MarkUserGroupService {
 
+    @Resource
+    MarkQuestionService markQuestionService;
+
+    @Override
+    public IPage<MarkEntranceDto> listEntranceGroup(Long examId, String courseCode, String paperNumber, Integer pageNumber, Integer pageSize) {
+        if (Objects.isNull(examId)) {
+            throw ExceptionResultEnum.EXAM_ID_IS_NULL.exception();
+        }
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        Page<MarkUserGroup> page = new Page<>(pageNumber, pageSize);
+        IPage<MarkEntranceDto> markEntranceDtoIPage = this.baseMapper.listEntranceGroup(page, examId, courseCode, paperNumber, sysUser.getId());
+        for (MarkEntranceDto record : markEntranceDtoIPage.getRecords()) {
+            // 评卷进度
+            if (record.getLibraryCount().intValue() == 0) {
+                record.setPercent(0D);
+            } else {
+                BigDecimal bigDecimal = new BigDecimal(record.getMarkedCount()).divide(new BigDecimal(record.getLibraryCount()), 2, RoundingMode.HALF_UP);
+                record.setPercent(bigDecimal.doubleValue());
+            }
+
+            // 分组题目
+            record.setGroupQuestions(markQuestionService.groupQuestionsByExamIdAndPaperNumberAndNumber(record.getExamId(), record.getPaperNumber(), record.getGroupNumber()));
+        }
+        return markEntranceDtoIPage;
+    }
 }

+ 27 - 0
teachcloud-mark/src/main/resources/mapper/MarkUserGroupMapper.xml

@@ -16,5 +16,32 @@
         <result column="avg_speed" property="avgSpeed" />
         <result column="stdev_score" property="stdevScore" />
     </resultMap>
+    <select id="listEntranceGroup" resultType="com.qmth.teachcloud.common.bean.dto.mark.MarkEntranceDto">
+        SELECT
+            mg.exam_id examId,
+            mg.number groupNumber,
+            mg.course_code courseCode,
+            mg.course_name courseName,
+            mg.paper_number paperNumber,
+            mg.library_count libraryCount,
+            mg.marked_count markedCoude,
+            mg.left_count leftCount
+        FROM
+            mark_user_group mug
+                LEFT JOIN
+            mark_group mg ON mug.exam_id = mg.exam_id
+                AND mug.paper_number = mg.paper_number
+                AND mug.group_number = mg.number
+        <where>
+            mg.exam_id = #{examId}
+            <if test="courseCode != null and courseCode != ''">
+                and mg.course_code = #{courseCode}
+            </if>
+            <if test="paperNumber != null and paperNumber != ''">
+                and mg.paper_number = #{paperNumber}
+            </if>
+            and mug.user_id = #{userId}
+        </where>
+    </select>
 
 </mapper>