xiaofei hace 1 año
padre
commit
d45a8632be

+ 1 - 1
distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml

@@ -135,7 +135,7 @@
                     and b.print_house_id = #{printHouseId}
                 </if>
             </where>
-        ORDER BY a.id desc, b.id desc
+        ORDER BY b.id desc
     </select>
 
     <select id="findBriefPage" resultType="com.qmth.distributed.print.business.bean.result.ExaminationResult">

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

@@ -306,6 +306,9 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
                 double total = vo.getStudentCount() - vo.getAbsentCount();
                 vo.setPassRate(Calculator.divide2String(Calculator.multiply(vo.getPassCount(), 100), total, 2));
                 vo.setExcellentRate(Calculator.divide2String(Calculator.multiply(vo.getExcellentCount(), 100), total, 2));
+                vo.setAvgScore(Calculator.round(vo.getAvgScore(), 2));
+                vo.setMinScore(Calculator.round(vo.getMinScore(), 2));
+                vo.setMaxScore(Calculator.round(vo.getMaxScore(), 2));
             }
         }
         return ret;

+ 4 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkQuestionServiceImpl.java

@@ -287,8 +287,10 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
         QueryWrapper<MarkQuestion> queryWrapper = new QueryWrapper<>();
         LambdaQueryWrapper<MarkQuestion> lambdaQueryWrapper = queryWrapper.lambda();
         lambdaQueryWrapper.eq(MarkQuestion::getExamId, examId)
-                .eq(MarkQuestion::getPaperNumber, paperNumber)
-                .eq(MarkQuestion::getPaperType, paperType);
+                .eq(MarkQuestion::getPaperNumber, paperNumber);
+        if (StringUtils.isNotBlank(paperType)) {
+            lambdaQueryWrapper.eq(MarkQuestion::getPaperType, paperType);
+        }
         if (objective != null) {
             lambdaQueryWrapper.eq(MarkQuestion::getObjective, objective);
         }

+ 29 - 9
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -9,6 +9,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.NotNull;
 
+import com.google.zxing.client.result.BookmarkDoCoMoResultParser;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -337,7 +338,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
                 ScanPaperPage page = scanPaperPageService.findPaperIdAndIndex(paper.getId(), 1);
                 student.setOmrAbsent(page.getAbsent() == null ? false : page.getAbsent().getResult());
                 student.setOmrAbsentChecked(false);
-                if(student.getOmrAbsent()){
+                if (student.getOmrAbsent()) {
                     student.setObjectiveScore(null);
                     student.setObjectiveScoreList(null);
                 }
@@ -805,7 +806,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         if (omrAbsent) {
             lw.set(MarkStudent::getObjectiveScore, null);
             lw.set(MarkStudent::getObjectiveScoreList, null);
-        }else{
+        } else {
             lw.set(MarkStudent::getOmrAbsent, false);
         }
         lw.eq(MarkStudent::getId, student.getId());
@@ -915,6 +916,9 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
                 vo.setPassRate(Calculator.divide2String(Calculator.multiply(vo.getPassCount(), 100), total, 2));
                 vo.setExcellentRate(
                         Calculator.divide2String(Calculator.multiply(vo.getExcellentCount(), 100), total, 2));
+                vo.setAvgScore(Calculator.round(vo.getAvgScore(), 2));
+                vo.setMinScore(Calculator.round(vo.getMinScore(), 2));
+                vo.setMaxScore(Calculator.round(vo.getMaxScore(), 2));
             }
         }
 
@@ -925,6 +929,9 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
                 vo.setPassRate(Calculator.divide2String(Calculator.multiply(vo.getPassCount(), 100), total, 2));
                 vo.setExcellentRate(
                         Calculator.divide2String(Calculator.multiply(vo.getExcellentCount(), 100), total, 2));
+                vo.setAvgScore(Calculator.round(vo.getAvgScore(), 2));
+                vo.setMinScore(Calculator.round(vo.getMinScore(), 2));
+                vo.setMaxScore(Calculator.round(vo.getMaxScore(), 2));
             }
         }
 
@@ -936,6 +943,8 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
                 vo.setExcellentRate(
                         Calculator.divide2String(Calculator.multiply(vo.getExcellentCount(), 100), total, 2));
                 vo.setAvgScore(Calculator.round(vo.getAvgScore(), 2));
+                vo.setMinScore(Calculator.round(vo.getMinScore(), 2));
+                vo.setMaxScore(Calculator.round(vo.getMaxScore(), 2));
             }
         }
 
@@ -1107,9 +1116,8 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
     }
 
     private void fillObjective(ScoreReportVo ret, Long examId, String paperNumber) {
-        List<MarkQuestion> qs = markQuestionService.listQuestionByExamIdAndPaperNumberAndPaperType(examId, paperNumber,
-                null);
-        List<MarkStudent> students = listByExamIdAndPaperNumberAndAbsent(examId, paperNumber, false);
+        List<MarkQuestion> qs = markQuestionService.listByExamIdAndPaperNumberAndPaperType(examId, paperNumber, null, true);
+        List<MarkStudent> students = listByExamIdAndPaperNumberAndNotAbsent(examId, paperNumber);
         Map<String, QuestionVo> map = new HashMap<>();
         List<QuestionVo> list = new ArrayList<>();
         for (MarkStudent s : students) {
@@ -1146,6 +1154,16 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             return;
         }
 
+        list = new ArrayList<>(map.values());
+        for (QuestionVo questionVo : list) {
+            // 平均分
+            if (questionVo.getStudentCount() == null || questionVo.getStudentCount() == 0) {
+                questionVo.setAvgScore(0D);
+            } else {
+                questionVo.setAvgScore(Calculator.round(Calculator.divide(questionVo.getScoreSum(), questionVo.getStudentCount()), 2));
+            }
+        }
+
         Collections.sort(list, (o1, o2) -> {
             if (o1.getMainNumber() > o2.getMainNumber()) {
                 return 1;
@@ -1163,14 +1181,16 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         ret.setObjective(list);
     }
 
-    private List<MarkStudent> listByExamIdAndPaperNumberAndAbsent(Long examId, String paperNumber, Boolean absent) {
+    private List<MarkStudent> listByExamIdAndPaperNumberAndNotAbsent(Long examId, String paperNumber) {
         QueryWrapper<MarkStudent> wrapper = new QueryWrapper<>();
         LambdaQueryWrapper<MarkStudent> lw = wrapper.lambda();
         lw.eq(MarkStudent::getExamId, examId);
         lw.eq(MarkStudent::getPaperNumber, paperNumber);
-        if (absent != null) {
-            lw.eq(MarkStudent::getAbsent, absent);
-        }
+        lw.eq(MarkStudent::getUpload, true);
+        lw.eq(MarkStudent::getAbsent, false);
+        lw.eq(MarkStudent::getBreach, false);
+        lw.eq(MarkStudent::getOmrAbsent, false);
+
         return this.list(wrapper);
     }
 

+ 4 - 4
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkTaskServiceImpl.java

@@ -58,10 +58,10 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), ServletUtil.getRequest().getServletPath());
         IPage<MarkManageDto> markManageDtoIPage = this.baseMapper.listPaperManage(page, examId, courseCode, paperNumber, progressStatus, dpr);
         for (MarkManageDto record : markManageDtoIPage.getRecords()) {
-            int totalCount = markStudentService.countByExamIdAndPaperNumberAndMarkStatus(record.getExamId(), record.getPaperNumber(), null);
-            record.setTotalCount(totalCount);
-            int markedCount = markStudentService.countByExamIdAndPaperNumberAndMarkStatus(record.getExamId(), record.getPaperNumber(), SubjectiveStatus.MARKED);
-            record.setMarkedCount(markedCount);
+//            int totalCount = markStudentService.countByExamIdAndPaperNumberAndMarkStatus(record.getExamId(), record.getPaperNumber(), null);
+//            record.setTotalCount(totalCount);
+//            int markedCount = markStudentService.countByExamIdAndPaperNumberAndMarkStatus(record.getExamId(), record.getPaperNumber(), SubjectiveStatus.MARKED);
+//            record.setMarkedCount(markedCount);
             record.setStatusDisplay(record.getStatus() == null ? null : record.getStatus().getName());
             record.setOmrAbsentCount(markStudentService.countOmrAbsentStudent(record.getExamId(), record.getPaperNumber(), record.getPaperType(), false));
             record.setPercent(Calculator.divide2String(Calculator.multiply(record.getMarkedCount(), 100), Double.valueOf(record.getTotalCount()), 2));

+ 5 - 3
teachcloud-mark/src/main/resources/mapper/MarkPaperMapper.xml

@@ -69,6 +69,7 @@
                 </if>
             </if>
         </where>
+            order by mp.id desc
     </select>
     <select id="listQualityMarkPaperByStatus" resultType="com.qmth.teachcloud.mark.entity.MarkPaper">
         SELECT
@@ -114,6 +115,7 @@
                     </foreach>
                 </if>
             </if>
+            order by mp.id desc
     </select>
     <select id="listPackage" resultType="com.qmth.teachcloud.mark.dto.mark.score.MarkPaperPackageDto">
         SELECT distinct
@@ -129,7 +131,7 @@
         ORDER BY sp.package_code
     </select>
     <select id="scoreList" resultType="com.qmth.teachcloud.mark.bean.archivescore.ArchiveScoreVo">
-        SELECT t.exam_id,t.course_code,t.course_name,t.paper_number,
+        SELECT t.id,t.exam_id,t.course_code,t.course_name,t.paper_number,
         count(*) studentCount,count(distinct s.class_name) classCount,
         sum(case when s.is_absent =1 or s.omr_absent =1 then 1 else 0 end) absentCount,
         avg(case when s.is_absent !=1 then s.objective_score+s.subjective_score else null end) avgScore,
@@ -159,8 +161,8 @@
                     </foreach>
                 </if>
             </if>
-        group by t.course_code,t.course_name,t.paper_number
-        ORDER BY t.course_code
+        group by t.id,t.exam_id,t.course_code,t.course_name,t.paper_number
+        ORDER BY t.id desc
     </select>
     <select id="getCourseCount" resultType="java.lang.Integer">
         select count(distinct mp.course_code) from mark_paper mp left join sys_user su on mp.user_id = su.id

+ 2 - 0
teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml

@@ -157,6 +157,7 @@
                     </otherwise>
                 </choose>
             </if>
+            order by ms.student_code
     </select>
     <select id="listAbsentOrBreachMarkTaskStudent" resultMap="BaseResultMap">
         SELECT
@@ -335,6 +336,7 @@
                 </otherwise>
             </choose>
         </if>
+            order by t.student_code
     </select>
     <select id="overview" resultType="com.qmth.teachcloud.mark.bean.archivescore.OverViewVo">
         SELECT 

+ 29 - 10
teachcloud-mark/src/main/resources/mapper/MarkTaskMapper.xml

@@ -32,8 +32,27 @@
             mp.course_name courseName,
             mp.paper_number paperNumber,
             mp.paper_type paperType,
-            mp.status
+            mp.status,
+            ifnull(b.totalCount, 0) totalCount,
+            ifnull(b.markedCount, 0) markedCount
         FROM mark_paper mp
+            left join
+            (select
+                 ms.exam_id,
+                 ms.paper_number ,
+                 ms.paper_type,
+                 count(1) totalCount,
+                 sum(case ms.subjective_status when 'MARKED' then 1 else 0 end) markedCount
+             from mark_student ms where ms.exam_id = #{examId}
+                <if test="courseCode != null and courseCode != ''">
+                    and ms.course_code = #{courseCode}
+                </if>
+                <if test="paperNumber != null and paperNumber != ''">
+                    and ms.paper_number = #{paperNumber}
+                </if>
+                and ms.is_upload = true and ms.is_absent = false and ms.is_breach = false and ms.omr_absent = false
+                group by ms.exam_id, ms.paper_number, ms.paper_type) b
+                    on mp.exam_id = b.exam_id and mp.paper_number = b.paper_number and mp.paper_type = b.paper_type
         <where>
             mp.exam_id = #{examId}
             <if test="courseCode != null and courseCode != ''">
@@ -57,16 +76,16 @@
                 </if>
                 )
             </if>
-        </where>
-        GROUP BY mp.exam_id , mp.course_code , mp.course_name , mp.paper_number, mp.paper_type, mp.status
-        <if test="progressStatus != null">
-            <if test="progressStatus == true">
-                HAVING totalCount > 0 AND totalCount = markedCount
-            </if>
-            <if test="progressStatus == false">
-                HAVING totalCount = 0 OR totalCount > markedCount
+            <if test="progressStatus != null">
+                <if test="progressStatus == true">
+                    and ifnull(b.totalCount, 0) > 0 AND ifnull(b.totalCount, 0) = ifnull(b.markedCount, 0)
+                </if>
+                <if test="progressStatus == false">
+                    and ifnull(b.totalCount, 0) = 0 OR ifnull(b.totalCount, 0) > ifnull(b.markedCount, 0)
+                </if>
             </if>
-        </if>
+        </where>
+        order by mp.id desc
     </select>
     <select id="listUserMarkedCount"
             resultType="com.qmth.teachcloud.mark.dto.mark.manage.MarkerInfoDto">

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

@@ -48,6 +48,7 @@
                 and exists (select 1 from mark_paper mp where mp.exam_id = mg.exam_id and mp.paper_number = mg.paper_number and mp.status = #{status})
             </if>
         </where>
+            order by mug.id desc
     </select>
     <select id="listGroupUserByExamIdAndPaperNumberAndGroupNumber"
             resultType="com.qmth.teachcloud.common.bean.dto.mark.MarkUser">