xiaofei пре 1 година
родитељ
комит
af8aed4beb

+ 10 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkQualityController.java

@@ -1,10 +1,13 @@
 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.manage.MarkQualityDto;
 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.MarkUserGroupService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -13,6 +16,7 @@ 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;
 
@@ -29,6 +33,9 @@ import javax.validation.constraints.Min;
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/quality")
 public class MarkQualityController {
 
+    @Resource
+    private MarkUserGroupService markUserGroupService;
+
     /**
      * 评卷质量列表查询
      */
@@ -37,10 +44,10 @@ public class MarkQualityController {
     public Result classSummary(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
                                @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
                                @ApiParam(value = "分组号") @RequestParam(required = false) Integer groupNumber,
-                               @ApiParam(value = "评卷员") @RequestParam(required = false) String loginName,
+                               @ApiParam(value = "评卷员") @RequestParam(required = false) Long userId,
                                @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-//        IPage<MarkUserGroupProgressDto> markGroupClassProgressDtoIPage = markUserGroupService.pageGroupUserByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber, loginName, pageNumber, pageSize);
-        return ResultUtil.ok();
+        IPage<MarkQualityDto> markQualityDtoIPage = markUserGroupService.pageQuality(examId, paperNumber, groupNumber, userId, pageNumber, pageSize);
+        return ResultUtil.ok(markQualityDtoIPage);
     }
 }

+ 126 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/mark/manage/MarkQualityDto.java

@@ -0,0 +1,126 @@
+package com.qmth.teachcloud.common.bean.dto.mark.manage;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+
+public class MarkQualityDto {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long userId;
+    private String loginName;
+    private String name;
+    private String orgName;
+    private Integer groupNumber;
+    private String groupQuestions;
+    private Integer finishCount;
+    private Integer headerFinishCount;
+    private Double adoptionRate;
+    private Integer avgSpeed;
+    private Double avgScore;
+    private Double maxScore;
+    private Double minScore;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getLoginName() {
+        return loginName;
+    }
+
+    public void setLoginName(String loginName) {
+        this.loginName = loginName;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getOrgName() {
+        return orgName;
+    }
+
+    public void setOrgName(String orgName) {
+        this.orgName = orgName;
+    }
+
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+
+    public String getGroupQuestions() {
+        return groupQuestions;
+    }
+
+    public void setGroupQuestions(String groupQuestions) {
+        this.groupQuestions = groupQuestions;
+    }
+
+    public Integer getFinishCount() {
+        return finishCount;
+    }
+
+    public void setFinishCount(Integer finishCount) {
+        this.finishCount = finishCount;
+    }
+
+    public Integer getHeaderFinishCount() {
+        return headerFinishCount;
+    }
+
+    public void setHeaderFinishCount(Integer headerFinishCount) {
+        this.headerFinishCount = headerFinishCount;
+    }
+
+    public Double getAdoptionRate() {
+        return adoptionRate;
+    }
+
+    public void setAdoptionRate(Double adoptionRate) {
+        this.adoptionRate = adoptionRate;
+    }
+
+    public Integer getAvgSpeed() {
+        return avgSpeed;
+    }
+
+    public void setAvgSpeed(Integer avgSpeed) {
+        this.avgSpeed = avgSpeed;
+    }
+
+    public Double getAvgScore() {
+        return avgScore;
+    }
+
+    public void setAvgScore(Double avgScore) {
+        this.avgScore = avgScore;
+    }
+
+    public Double getMaxScore() {
+        return maxScore;
+    }
+
+    public void setMaxScore(Double maxScore) {
+        this.maxScore = maxScore;
+    }
+
+    public Double getMinScore() {
+        return minScore;
+    }
+
+    public void setMinScore(Double minScore) {
+        this.minScore = minScore;
+    }
+}

+ 11 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/SysUser.java

@@ -112,6 +112,9 @@ public class SysUser extends BaseEntity implements Serializable {
     @ApiModelProperty("历史用户名")
     private String historicName;
 
+    @TableField(exist = false)
+    private String orgName;
+
     public String getHistoricName() {
         return historicName;
     }
@@ -258,4 +261,12 @@ public class SysUser extends BaseEntity implements Serializable {
     public void setVerifyCode(String verifyCode) {
         this.verifyCode = verifyCode;
     }
+
+    public String getOrgName() {
+        return orgName;
+    }
+
+    public void setOrgName(String orgName) {
+        this.orgName = orgName;
+    }
 }

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

@@ -141,4 +141,6 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      * @return
      */
     List<SysUserResult> findCourseSysUserResultByTeachIdSet(@Param("teachIdSet") Set<Long> teachIdSet);
+
+    SysUser getByUserId(@Param("userId") Long userId);
 }

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserService.java

@@ -294,4 +294,6 @@ public interface SysUserService extends IService<SysUser> {
     List<SysUserResult> findCourseSysUserResultByTeachIdSet(Set<Long> teachIdSet);
 
     List<UserRoleDto> listSecretary();
+
+    SysUser getByUserId(Long userId);
 }

+ 5 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -1178,6 +1178,11 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return userRoleDtos;
     }
 
+    @Override
+    public SysUser getByUserId(Long userId) {
+        return this.baseMapper.getByUserId(userId);
+    }
+
     /**
      * 批量处理用户信息帮助类
      *

+ 13 - 0
teachcloud-common/src/main/resources/mapper/SysUserMapper.xml

@@ -525,4 +525,17 @@
         order by
         su.login_name
     </select>
+    <select id="getByUserId" resultType="com.qmth.teachcloud.common.entity.SysUser">
+        SELECT
+            su.id userId,
+            su.login_name loginName,
+            su.real_name name,
+            so.name orgName
+        FROM
+            sys_user su
+                LEFT JOIN
+            sys_org so ON su.org_id = so.id
+        WHERE
+            su.id = #{userId}
+    </select>
 </mapper>

+ 38 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkUserGroup.java

@@ -52,10 +52,19 @@ public class MarkUserGroup implements Serializable {
     @ApiModelProperty(value = "完成数量")
     @TableField(updateStrategy = FieldStrategy.IGNORED)
     private Integer finishCount;
+    @ApiModelProperty(value = "管理员直接打分数量")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Integer headerFinishCount;
 
     @ApiModelProperty(value = "平均分")
     @TableField(updateStrategy = FieldStrategy.IGNORED)
     private Double avgScore;
+    @ApiModelProperty(value = "最高分")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Double maxScore;
+    @ApiModelProperty(value = "最低分")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Double minScore;
 
     @ApiModelProperty(value = "平均时长")
     @TableField(updateStrategy = FieldStrategy.IGNORED)
@@ -132,6 +141,15 @@ public class MarkUserGroup implements Serializable {
     public void setFinishCount(Integer finishCount) {
         this.finishCount = finishCount;
     }
+
+    public Integer getHeaderFinishCount() {
+        return headerFinishCount;
+    }
+
+    public void setHeaderFinishCount(Integer headerFinishCount) {
+        this.headerFinishCount = headerFinishCount;
+    }
+
     public Double getAvgScore() {
         return avgScore;
     }
@@ -139,6 +157,23 @@ public class MarkUserGroup implements Serializable {
     public void setAvgScore(Double avgScore) {
         this.avgScore = avgScore;
     }
+
+    public Double getMaxScore() {
+        return maxScore;
+    }
+
+    public void setMaxScore(Double maxScore) {
+        this.maxScore = maxScore;
+    }
+
+    public Double getMinScore() {
+        return minScore;
+    }
+
+    public void setMinScore(Double minScore) {
+        this.minScore = minScore;
+    }
+
     public Double getAvgSpeed() {
         return avgSpeed;
     }
@@ -165,7 +200,10 @@ public class MarkUserGroup implements Serializable {
             ", mode=" + mode +
             ", topCount=" + topCount +
             ", finishCount=" + finishCount +
+            ", headerFinishCount=" + headerFinishCount +
             ", avgScore=" + avgScore +
+            ", maxScore=" + maxScore +
+            ", minScore=" + minScore +
             ", avgSpeed=" + avgSpeed +
             ", stdevScore=" + stdevScore +
         "}";

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

@@ -3,6 +3,7 @@ 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.entrance.MarkEntranceDto;
+import com.qmth.teachcloud.common.bean.dto.mark.manage.MarkQualityDto;
 import com.qmth.teachcloud.common.bean.dto.mark.manage.MarkUserGroupProgressDto;
 import com.qmth.teachcloud.common.bean.dto.mark.setting.MarkUser;
 import com.qmth.teachcloud.mark.entity.MarkUserGroup;
@@ -26,4 +27,6 @@ public interface MarkUserGroupMapper extends BaseMapper<MarkUserGroup> {
     List<MarkUser> listGroupUserByExamIdAndPaperNumberAndGroupNumber(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber);
 
     IPage<MarkUserGroupProgressDto> pageGroupUserByExamIdAndPaperNumberAndGroupNumber(@Param("page") Page<MarkUserGroupProgressDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("loginName") String loginName);
+
+    IPage<MarkQualityDto> pageQuality(@Param("page") Page<MarkQualityDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("userId") Long userId);
 }

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

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.mark.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.teachcloud.common.bean.dto.mark.entrance.MarkEntranceDto;
+import com.qmth.teachcloud.common.bean.dto.mark.manage.MarkQualityDto;
 import com.qmth.teachcloud.common.bean.dto.mark.manage.MarkUserGroupProgressDto;
 import com.qmth.teachcloud.common.bean.dto.mark.setting.MarkUser;
 import com.qmth.teachcloud.mark.entity.MarkUserGroup;
@@ -38,4 +39,6 @@ public interface MarkUserGroupService extends IService<MarkUserGroup> {
     boolean resetMarker(Long markUserGroupId);
 
     void resetById(Long id);
+
+    IPage<MarkQualityDto> pageQuality(Long examId, String paperNumber, Integer groupNumber, Long userId, Integer pageNumber, Integer pageSize);
 }

+ 22 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserGroupServiceImpl.java

@@ -1,12 +1,12 @@
 package com.qmth.teachcloud.mark.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.Update;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 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.entrance.MarkEntranceDto;
+import com.qmth.teachcloud.common.bean.dto.mark.manage.MarkQualityDto;
 import com.qmth.teachcloud.common.bean.dto.mark.manage.MarkUserGroupProgressDto;
 import com.qmth.teachcloud.common.bean.dto.mark.setting.MarkUser;
 import com.qmth.teachcloud.common.entity.MarkPaper;
@@ -14,6 +14,7 @@ import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.service.MarkPaperService;
 import com.qmth.teachcloud.common.service.MarkQuestionService;
+import com.qmth.teachcloud.common.service.SysUserService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.entity.MarkGroup;
 import com.qmth.teachcloud.mark.entity.MarkTask;
@@ -23,12 +24,12 @@ import com.qmth.teachcloud.mark.lock.LockService;
 import com.qmth.teachcloud.mark.mapper.MarkUserGroupMapper;
 import com.qmth.teachcloud.mark.service.*;
 import org.apache.commons.collections4.CollectionUtils;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -55,6 +56,8 @@ public class MarkUserGroupServiceImpl extends ServiceImpl<MarkUserGroupMapper, M
     @Resource
     private MarkSyncService markSyncService;
     @Resource
+    private SysUserService sysUserService;
+    @Resource
     private MarkService markService;
     @Resource
     private LockService lockService;
@@ -193,4 +196,21 @@ public class MarkUserGroupServiceImpl extends ServiceImpl<MarkUserGroupMapper, M
                 .eq(MarkUserGroup::getId, id);
         this.update(updateWrapper);
     }
+
+    @Override
+    public IPage<MarkQualityDto> pageQuality(Long examId, String paperNumber, Integer groupNumber, Long userId, Integer pageNumber, Integer pageSize) {
+        Page<MarkQualityDto> page = new Page<>(pageNumber, pageSize);
+        IPage<MarkQualityDto> markQualityDtoIPage = this.baseMapper.pageQuality(page, examId, paperNumber, groupNumber, userId);
+        for (MarkQualityDto qualityDto : markQualityDtoIPage.getRecords()) {
+            if (qualityDto.getUserId() != null) {
+                SysUser sysUser = sysUserService.getByUserId(qualityDto.getUserId());
+                qualityDto.setLoginName(sysUser.getLoginName());
+                qualityDto.setName(sysUser.getRealName());
+                qualityDto.setOrgName(sysUser.getOrgName());
+                String percent = qualityDto.getFinishCount() > 0 ? new DecimalFormat("####.###").format((qualityDto.getFinishCount() - qualityDto.getHeaderFinishCount()) * 100.0 / qualityDto.getFinishCount()) : "0";
+                qualityDto.setAdoptionRate(Double.parseDouble(percent));
+            }
+        }
+        return markQualityDtoIPage;
+    }
 }

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

@@ -12,7 +12,10 @@
         <result column="mode" property="mode" />
         <result column="top_count" property="topCount" />
         <result column="finish_count" property="finishCount" />
+        <result column="header_finish_count" property="headerFinishCount" />
         <result column="avg_score" property="avgScore" />
+        <result column="max_score" property="maxScore" />
+        <result column="min_score" property="minScore" />
         <result column="avg_speed" property="avgSpeed" />
         <result column="stdev_score" property="stdevScore" />
     </resultMap>
@@ -87,5 +90,27 @@
             </if>
         </where>
     </select>
+    <select id="pageQuality" resultType="com.qmth.teachcloud.common.bean.dto.mark.manage.MarkQualityDto">
+        SELECT
+            user_id userId,
+            group_number groupNumber,
+            ifnull(finish_count, 0) finishCount,
+            ifnull(header_finish_count, 0) headerFinishCount,
+            avg_score avgScore,
+            max_score maxScore,
+            min_score minScore,
+            avg_speed avgSpeed
+        FROM
+            mark_user_group
+        where
+            exam_id = #{examId}
+            AND paper_number = #{paperNumber}
+            <if test="groupNumber != null and groupNumber != ''">
+                AND group_number = #{groupNumber}
+            </if>
+            <if test="userId != null">
+                AND user_id = #{userId}
+            </if>
+    </select>
 
 </mapper>