Bladeren bron

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

xiaofei 11 maanden geleden
bovenliggende
commit
6144c63b69

+ 52 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/statistics/ScanCalculateResult.java

@@ -0,0 +1,52 @@
+package com.qmth.distributed.print.business.bean.result.statistics;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.qmth.teachcloud.common.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @Description: 扫描计算统计 result
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/7/11
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ScanCalculateResult implements Serializable {
+
+    @ApiModelProperty(value = "已扫张数")
+    private int sheetCount;
+
+    @ApiModelProperty(value = "扫描进度")
+    private BigDecimal scanUploadRate;
+
+    @ApiModelProperty(value = "已扫人数")
+    private int uploadCount;
+
+    public int getUploadCount() {
+        return uploadCount;
+    }
+
+    public void setUploadCount(int uploadCount) {
+        this.uploadCount = uploadCount;
+    }
+
+    public int getSheetCount() {
+        return sheetCount;
+    }
+
+    public void setSheetCount(int sheetCount) {
+        this.sheetCount = sheetCount;
+    }
+
+    public BigDecimal getScanUploadRate() {
+        return scanUploadRate;
+    }
+
+    public void setScanUploadRate(BigDecimal scanUploadRate) {
+        this.scanUploadRate = scanUploadRate;
+    }
+}

+ 49 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/statistics/ScanCountResult.java

@@ -9,6 +9,7 @@ import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.StringUtils;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Objects;
 import java.util.StringJoiner;
 
@@ -26,6 +27,14 @@ public class ScanCountResult implements Serializable {
     @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
+    @ApiModelProperty(value = "考试id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long examId;
+
+    @ApiModelProperty(value = "课程id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long courseId;
+
     @ApiModelProperty(value = "课程名称(代码)")
     @ExcelProperty(name = "课程(代码)", width = 20, index = 2)
     private String courseNameCode;
@@ -52,16 +61,20 @@ public class ScanCountResult implements Serializable {
     @ExcelProperty(name = "考生数", width = 20, index = 5)
     private int studentCount;
 
+    @ApiModelProperty(value = "已扫人数")
+    @ExcelProperty(name = "已扫人数", width = 20, index = 6)
+    private int uploadCount;
+
     @ApiModelProperty(value = "已扫张数")
-    @ExcelProperty(name = "已扫张数", width = 20, index = 6)
+    @ExcelProperty(name = "已扫张数", width = 20, index = 7)
     private int sheetCount;
 
     @ApiModelProperty(value = "缺考数")
-    @ExcelProperty(name = "缺考数", width = 20, index = 7)
+    @ExcelProperty(name = "缺考数", width = 20, index = 8)
     private int absentCount;
 
     @ApiModelProperty(value = "扫描进度")
-    private int scanUploadRate;
+    private BigDecimal scanUploadRate;
 
     @ApiModelProperty(value = "题卡类型")
     private String cardType;
@@ -71,9 +84,39 @@ public class ScanCountResult implements Serializable {
     private String cardTypeStr;
 
     @ApiModelProperty(value = "扫描进度str")
-    @ExcelProperty(name = "扫描进度", width = 40, index = 8)
+    @ExcelProperty(name = "扫描进度", width = 40, index = 9)
     private String scanUploadRateStr;
 
+    public int getUploadCount() {
+        return uploadCount;
+    }
+
+    public void setUploadCount(int uploadCount) {
+        this.uploadCount = uploadCount;
+    }
+
+    public void updateRateAndSheetCount(ScanCalculateResult scanCalculateResult) {
+        this.scanUploadRate = scanCalculateResult.getScanUploadRate();
+        this.sheetCount = scanCalculateResult.getSheetCount();
+        this.uploadCount = scanCalculateResult.getUploadCount();
+    }
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
     public Long getId() {
         return id;
     }
@@ -130,11 +173,11 @@ public class ScanCountResult implements Serializable {
         this.absentCount = absentCount;
     }
 
-    public int getScanUploadRate() {
+    public BigDecimal getScanUploadRate() {
         return scanUploadRate;
     }
 
-    public void setScanUploadRate(int scanUploadRate) {
+    public void setScanUploadRate(BigDecimal scanUploadRate) {
         this.scanUploadRate = scanUploadRate;
     }
 

+ 13 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskMapper.java

@@ -6,8 +6,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.bean.dto.approvalForm.ExamPackageDetail;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
-import com.qmth.distributed.print.business.bean.result.statistics.ScanCountResult;
 import com.qmth.distributed.print.business.bean.result.statistics.PrintCountResult;
+import com.qmth.distributed.print.business.bean.result.statistics.ScanCalculateResult;
+import com.qmth.distributed.print.business.bean.result.statistics.ScanCountResult;
 import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
@@ -163,4 +164,15 @@ public interface ExamTaskMapper extends BaseMapper<ExamTask> {
      * @return
      */
     List<ScanCountResult> scanCountListExport(@Param("schoolId") Long schoolId, @Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("collegeId") Long collegeId, @Param("courseId") Long courseId, @Param("paperNumber") String paperNumber, @Param("cardType") String cardType, @Param("dpr") DataPermissionRule dpr);
+
+    /**
+     * 统计计算
+     *
+     * @param examId
+     * @param courseId
+     * @param paperNumber
+     * @param studentCount
+     * @return
+     */
+    public ScanCalculateResult scanCalculate(@Param("examId") Long examId, @Param("courseId") Long courseId, @Param("paperNumber") String paperNumber, @Param("studentCount") int studentCount);
 }

+ 1 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java

@@ -10,6 +10,7 @@ import com.qmth.distributed.print.business.bean.params.ExamTaskSubmitPram;
 import com.qmth.distributed.print.business.bean.params.MakeupExamTaskTotalParam;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.bean.result.examTaskStudent.ExamTaskStudentObjectResult;
+import com.qmth.distributed.print.business.bean.result.statistics.ScanCalculateResult;
 import com.qmth.distributed.print.business.bean.result.statistics.ScanCountResult;
 import com.qmth.distributed.print.business.bean.result.statistics.PrintCountResult;
 import com.qmth.distributed.print.business.entity.ExamDetail;

+ 22 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -10,15 +10,16 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.google.gson.Gson;
-import com.qmth.distributed.print.business.bean.query.BasicExamStudentQuery;
 import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.bean.dto.approvalForm.*;
 import com.qmth.distributed.print.business.bean.dto.examObject.ExamObjectDto;
 import com.qmth.distributed.print.business.bean.params.*;
+import com.qmth.distributed.print.business.bean.query.BasicExamStudentQuery;
 import com.qmth.distributed.print.business.bean.result.BasicExamStudentResult;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.bean.result.examTaskStudent.ExamTaskStudentObjectResult;
 import com.qmth.distributed.print.business.bean.result.statistics.PrintCountResult;
+import com.qmth.distributed.print.business.bean.result.statistics.ScanCalculateResult;
 import com.qmth.distributed.print.business.bean.result.statistics.ScanCountResult;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.*;
@@ -2017,7 +2018,16 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
-        return this.baseMapper.scanCountList(iPage, schoolId, semesterId, examId, collegeId, courseId, paperNumber, Objects.nonNull(cardType) ? cardType.name() : null, dpr);
+        IPage<ScanCountResult> scanCountResultIPage = this.baseMapper.scanCountList(iPage, schoolId, semesterId, examId, collegeId, courseId, paperNumber, Objects.nonNull(cardType) ? cardType.name() : null, dpr);
+        if (Objects.nonNull(scanCountResultIPage) && !CollectionUtils.isEmpty(scanCountResultIPage.getRecords())) {
+            for (ScanCountResult s : scanCountResultIPage.getRecords()) {
+                ScanCalculateResult scanCalculateResult = this.baseMapper.scanCalculate(s.getExamId(), s.getCourseId(), s.getPaperNumber(), s.getStudentCount());
+                if (Objects.nonNull(scanCalculateResult)) {
+                    s.updateRateAndSheetCount(scanCalculateResult);
+                }
+            }
+        }
+        return scanCountResultIPage;
     }
 
     /**
@@ -2036,7 +2046,16 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
-        return this.baseMapper.scanCountListExport(schoolId, semesterId, examId, collegeId, courseId, paperNumber, Objects.nonNull(cardType) ? cardType.name() : null, dpr);
+        List<ScanCountResult> scanCountResultList = this.baseMapper.scanCountListExport(schoolId, semesterId, examId, collegeId, courseId, paperNumber, Objects.nonNull(cardType) ? cardType.name() : null, dpr);
+        if (!CollectionUtils.isEmpty(scanCountResultList)) {
+            for (ScanCountResult s : scanCountResultList) {
+                ScanCalculateResult scanCalculateResult = this.baseMapper.scanCalculate(s.getExamId(), s.getCourseId(), s.getPaperNumber(), s.getStudentCount());
+                if (Objects.nonNull(scanCalculateResult)) {
+                    s.updateRateAndSheetCount(scanCalculateResult);
+                }
+            }
+        }
+        return scanCountResultList;
     }
 
     private ExamTaskPaperData saveTikuPaperData(Long examId, Long paperId, String uuid, File zipFile) {

+ 36 - 27
distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml

@@ -1301,7 +1301,7 @@
 
     <sql id="printCountCommon">
         select t.*,
-        if(t.unGenerated = 0 and t.unPrinted = 0,'FINISH','UN_FINISH') as finishStatus from(select
+        if(t.totalExamination <![CDATA[ > ]]> 0 and t.unGenerated = 0 and t.unPrinted = 0,'FINISH','UN_FINISH') as finishStatus from(select
         t.*,
         GROUP_CONCAT(distinct ec.type) as cardType,
         (<include refid="printStatusCount" />)) as totalExamination,
@@ -1405,30 +1405,20 @@
     </select>
 
     <sql id="scanCountCommon">
-        select t.* from(select
-        t.id,
-        t.college,
-        t.courseName,
-        t.courseCode,
-        t.paperNumber,
-        t.studentCount,
-        t.absentCount,
-        IF(t.studentCount > 0 ,ROUND(t.isUpload / t.studentCount * 100, 2) ,0) as scanUploadRate,
-        GROUP_CONCAT(distinct ec.type) as cardType,
-        ROUND(t.sheetCount / 2, 2) as sheetCount
-        from
-        (
+        select t.*,
+        GROUP_CONCAT(distinct ec.type) as cardType
+        from (
         select
         distinct
         mp.id,
+        mp.exam_id as examId,
+        mp.course_id as courseId,
         so.name as college,
         bc.name as courseName,
         bc.code as courseCode,
         mp.paper_number as paperNumber,
         IFNULL(mp.student_count, 0) as studentCount,
-        sum(ms.sheet_count) as sheetCount,
         IFNULL(mp.absent_count, 0) as absentCount,
-        sum(case when ms.is_upload = 1 then 1 else 0 end) as isUpload,
         concat(replace(substring_index(substring_index(convert((etd.paper_attachment_ids ->>'$[*].cardId') using utf8),
         ']', 1), '[',-1), '"', ''),', ') as cardId
         from mark_paper mp
@@ -1439,8 +1429,7 @@
         left join exam_task et on et.exam_id = mp.exam_id and et.course_id = mp.course_id and et.paper_number =
         mp.paper_number
         left join exam_task_detail etd on etd.exam_task_id = et.id
-        left join mark_student ms on ms.exam_id = mp.exam_id and ms.course_id = mp.course_id and ms.paper_Number =
-        mp.paper_Number<where>
+        <where>
         1 = 1
         <if test="schoolId != null and schoolId != ''">
                 AND bs.school_id = #{schoolId}
@@ -1484,13 +1473,7 @@
                     </foreach>
                 </if>
             </if>
-        </where>
-        group by
-        mp.id,
-        so.name,
-        bc.name,
-        bc.code,
-        mp.paper_number) t
+        </where>) t
         left join tmp_help_topic b on b.help_topic_id <![CDATA[ < ]]> (LENGTH(t.cardId) - LENGTH( REPLACE (t.cardId,
         ', ', '' ) ) + 1 )
         left join exam_card ec on ec.id in (SUBSTRING_INDEX(SUBSTRING_INDEX(t.cardId, ', ', b.help_topic_id), ', ',-1))
@@ -1504,8 +1487,7 @@
         t.college,
         t.courseName,
         t.courseCode,
-        t.paperNumber) t
-        where t.paperNumber is not null
+        t.paperNumber
         order by t.paperNumber desc
     </sql>
 
@@ -1516,4 +1498,31 @@
     <select id="scanCountListExport" resultType="com.qmth.distributed.print.business.bean.result.statistics.ScanCountResult">
         <include refid="scanCountCommon" />
     </select>
+
+    <select id="scanCalculate" resultType="com.qmth.distributed.print.business.bean.result.statistics.ScanCalculateResult">
+        select
+            IFNULL(if(#{studentCount} > 0 ,ROUND(t.scanCount / #{studentCount} * 100, 2) ,0),0) as scanUploadRate,
+            IFNULL(ROUND(t.sheetCount / 2, 2),0) as sheetCount,
+            IFNULL(t.uploadCount,0) as uploadCount
+        from
+            (
+                select
+                    sum(ms.sheet_count) as sheetCount,
+                    sum(case when ms.is_upload = 1 then 1 else 0 end) as uploadCount,
+                    sum(case when ms.scan_status is not null then 1 else 0 end) as scanCount
+                from
+                    mark_student ms
+                <where>
+                    <if test="examId != null and examId != ''">
+                        AND ms.exam_id = #{examId}
+                    </if>
+                    <if test="courseId != null and courseId != ''">
+                        AND ms.course_id = #{courseId}
+                    </if>
+                    <if test="paperNumber != null and paperNumber != ''">
+                        AND ms.paper_number = #{paperNumber}
+                    </if>
+                    and ms.scan_status <![CDATA[ <> ]]> 'UNEXIST'
+                </where>) t
+    </select>
 </mapper>

+ 3 - 6
teachcloud-obe/src/main/resources/mapper/TRExamStudentMapper.xml

@@ -34,16 +34,13 @@
             rbi.culture_program_id cultureProgramId,
             res.name studentName,
             res.student_code studentCode,
-            es.college_name collegeName,
-            es.major_name majorName
+            bes.college_name collegeName,
+            bes.major_name majorName
         FROM
             (select * from t_r_exam_student where student_code not in ('目标分','平均分','各课程目标平均分')) res
                 LEFT JOIN
             t_r_basic_info rbi ON res.r_basic_info_id = rbi.id
-                LEFT JOIN
-            exam_student es ON rbi.exam_id = es.exam_id
-                AND rbi.paper_number = es.paper_number
-                AND res.student_code = es.student_code
+            left join basic_exam_student bes on rbi.exam_id = bes.exam_id and rbi.paper_number = bes.paper_number and res.student_code = bes.student_code
             where rbi.culture_program_id = #{cultureProgramId}
                 <if test="studentCodeOrName != null and studentCodeOrName != ''">
                     AND (res.name LIKE CONCAT('%', #{studentCodeOrName}, '%')