Browse Source

3.3.1 update

xiaofei 1 year ago
parent
commit
baa6c25fee

+ 7 - 7
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkStudentMapper.java

@@ -51,25 +51,25 @@ public interface MarkStudentMapper extends BaseMapper<MarkStudent> {
 
 	List<Long> findIdByExamIdAndPaperNumber(@Param("examId") Long examId, @Param("paperNumber") String paperNumber);
 
-	List<ArchiveStudentVo> studentList(@Param("req") ArchiveStudentQuery query, @Param("dpr") DataPermissionRule dpr);
+	List<ArchiveStudentVo> studentList(@Param("schoolId") Long schoolId, @Param("req") ArchiveStudentQuery query, @Param("dpr") DataPermissionRule dpr);
 
-	OverViewVo overview(@Param("req") ArchiveStudentQuery query);
+	OverViewVo overview(@Param("schoolId") Long schoolId, @Param("req") ArchiveStudentQuery query, @Param("dpr") DataPermissionRule dpr);
 
 	int getCountByScoreRange(@Param("examId") Long examId, @Param("paperNumber") String paperNumber,
 			@Param("start") Double start, @Param("end") Double end);
 
-	List<CollegeVo> college(@Param("req") ArchiveStudentQuery query);
+	List<CollegeVo> college(@Param("schoolId") Long schoolId, @Param("req") ArchiveStudentQuery query, @Param("dpr") DataPermissionRule dpr);
 
-	List<ClassVo> classData(@Param("req") ArchiveStudentQuery query);
+	List<ClassVo> classData(@Param("schoolId") Long schoolId, @Param("req") ArchiveStudentQuery query, @Param("dpr") DataPermissionRule dpr);
 
-	List<TeacherVo> teacher(@Param("req") ArchiveStudentQuery query);
+	List<TeacherVo> teacher(@Param("schoolId") Long schoolId, @Param("req") ArchiveStudentQuery query, @Param("dpr") DataPermissionRule dpr);
 
 	List<UnexistStudentDto> listUnexistStudentByExamIdAndCoursePaperId(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("coursePaperId") String coursePaperId,
 			@Param("status") String status, @Param("dpr") DataPermissionRule dpr);
 
-	IPage<ArchiveStudentVo> studentList(@Param("page") Page<ArchiveStudentVo> page, @Param("req") ArchiveStudentQuery query, @Param("dpr") DataPermissionRule dpr);
+	IPage<ArchiveStudentVo> studentList(@Param("page") Page<ArchiveStudentVo> page, @Param("schoolId") Long schoolId, @Param("req") ArchiveStudentQuery query, @Param("dpr") DataPermissionRule dpr);
 
-	List<TeacherClassVo> teacherClass(@Param("req") ArchiveStudentQuery query);
+	List<TeacherClassVo> teacherClass(@Param("schoolId") Long schoolId, @Param("req") ArchiveStudentQuery query, @Param("dpr") DataPermissionRule dpr);
 
 	int selectCountByQuery(@Param("markStudent") MarkStudent markStudent, @Param("dpr") DataPermissionRule dpr);
 

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

@@ -400,7 +400,7 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
         // 更新MarkPaper中groupStatus
         markService.updateMarkGroupStatus(examId, paperNumber);
 
-        boolean isClear = !isEqual || !doubleEnable.equals(markGroupDto.getDoubleEnable()) || (markGroupDto.getDoubleEnable() && (doubleRate == null || markGroupDto.getDoubleRate().doubleValue() != markGroup.getDoubleRate().doubleValue()));
+        boolean isClear = !isEqual || !doubleEnable.equals(markGroupDto.getDoubleEnable()) || (markGroupDto.getDoubleEnable() && (doubleRate == null || markGroupDto.getDoubleRate().doubleValue() != doubleRate.doubleValue()));
         updateMarkUserGroup(isClear, examId, paperNumber, markGroupDto);
 
         // 增加或减少分组内题目数量和题目变动、单双评切换、开启双评且双评比例值修改过。则删除任务

+ 56 - 50
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -1,31 +1,5 @@
 package com.qmth.teachcloud.mark.service.impl;
 
-import java.awt.*;
-import java.awt.color.ColorSpace;
-import java.awt.image.BufferedImage;
-import java.awt.image.ColorConvertOp;
-import java.io.*;
-import java.math.BigDecimal;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
-import java.util.*;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import javax.annotation.Resource;
-import javax.imageio.ImageIO;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.constraints.NotNull;
-
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.FileCopyUtils;
-
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -83,6 +57,31 @@ import com.qmth.teachcloud.mark.service.*;
 import com.qmth.teachcloud.mark.utils.BatchGetDataUtil;
 import com.qmth.teachcloud.mark.utils.Calculator;
 import com.qmth.teachcloud.mark.utils.ScoreCalculateUtil;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.FileCopyUtils;
+
+import javax.annotation.Resource;
+import javax.imageio.ImageIO;
+import javax.print.attribute.standard.Severity;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.NotNull;
+import java.awt.*;
+import java.awt.color.ColorSpace;
+import java.awt.image.BufferedImage;
+import java.awt.image.ColorConvertOp;
+import java.io.*;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -928,7 +927,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         String postUrl = "/api/admin/mark/archive/score/list";
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), postUrl);
         Page<ArchiveStudentVo> page = new Page<>(query.getPageNumber(), query.getPageSize());
-        IPage<ArchiveStudentVo> ret = baseMapper.studentList(page, query, dpr);
+        IPage<ArchiveStudentVo> ret = baseMapper.studentList(page, sysUser.getSchoolId(), query, dpr);
         for (ArchiveStudentVo record : ret.getRecords()) {
             List<String> list = new ArrayList<>();
             List<FilePathVo> vos = JSON.parseArray(StringUtils.trimToNull(record.getSheetPath()), FilePathVo.class);
@@ -945,6 +944,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
 
     @Override
     public void scoreExport(ArchiveStudentQuery query, HttpServletResponse response) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         //生成表头
         String[] columnName = new String[]{"学生姓名", "学号", "学院", "班级", "课程代码", "课程名称", "客观分", "主观分",
                 "成绩"};
@@ -961,7 +961,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         String[] columnNames = columnNameList.toArray(new String[0]);
         //生成动态内容
         List<String[]> columnValues = new ArrayList<>();
-        List<ArchiveStudentVo> ret = baseMapper.studentList(query, null);
+        List<ArchiveStudentVo> ret = baseMapper.studentList(schoolId, query, null);
         for (ArchiveStudentVo s : ret) {
             List<String> valueList = new ArrayList<>();
             valueList.add(s.getStudentName());
@@ -1001,9 +1001,12 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
 
     @Override
     public ScoreReportVo scoreReport(ArchiveStudentQuery query) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        String postUrl = "/api/admin/mark/archive/score/list";
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), postUrl);
         ScoreReportVo ret = new ScoreReportVo();
-        ret.setOverview(baseMapper.overview(query));
-        if (ret.getOverview() != null) {
+        ret.setOverview(baseMapper.overview(sysUser.getSchoolId(), query, dpr));
+        if (ret.getOverview() != null && ret.getOverview().getStudentCount() > 0) {
             double total = ret.getOverview().getStudentCount() - ret.getOverview().getAbsentCount();
             ret.getOverview().setPassRate(
                     Calculator.divide2String(Calculator.multiply(ret.getOverview().getPassCount(), 100), total, 2));
@@ -1011,10 +1014,10 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
                     .divide2String(Calculator.multiply(ret.getOverview().getExcellentCount(), 100), total, 2));
             ret.getOverview().setAvgScore(Calculator.round(ret.getOverview().getAvgScore(), 2));
         }
-        List<ArchiveStudentVo> studentList = baseMapper.studentList(query, null);
+        List<ArchiveStudentVo> studentList = baseMapper.studentList(sysUser.getSchoolId(), query, dpr);
         fillScoreRange(ret, studentList);
 
-        ret.setCollege(baseMapper.college(query));
+        ret.setCollege(baseMapper.college(sysUser.getSchoolId(), query, dpr));
         if (CollectionUtils.isNotEmpty(ret.getCollege())) {
             for (CollegeVo vo : ret.getCollege()) {
                 double total = vo.getStudentCount() - vo.getAbsentCount();
@@ -1027,7 +1030,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             }
         }
 
-        ret.setClassData(baseMapper.classData(query));
+        ret.setClassData(baseMapper.classData(sysUser.getSchoolId(), query, dpr));
         if (CollectionUtils.isNotEmpty(ret.getClassData())) {
             for (ClassVo vo : ret.getClassData()) {
                 double total = vo.getStudentCount() - vo.getAbsentCount();
@@ -1040,7 +1043,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             }
         }
 
-        ret.setTeacher(baseMapper.teacher(query));
+        ret.setTeacher(baseMapper.teacher(sysUser.getSchoolId(), query, dpr));
         if (CollectionUtils.isNotEmpty(ret.getTeacher())) {
             for (TeacherVo vo : ret.getTeacher()) {
                 double total = vo.getStudentCount() - vo.getAbsentCount();
@@ -1053,7 +1056,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             }
         }
 
-        ret.setTeacherClass(baseMapper.teacherClass(query));
+        ret.setTeacherClass(baseMapper.teacherClass(sysUser.getSchoolId(), query, dpr));
         if (CollectionUtils.isNotEmpty(ret.getTeacherClass())) {
             for (TeacherClassVo vo : ret.getTeacherClass()) {
                 double total = vo.getStudentCount() - vo.getAbsentCount();
@@ -1299,28 +1302,31 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
     }
 
     private void fillScoreRange(ScoreReportVo ret, List<ArchiveStudentVo> list) {
+        if(CollectionUtils.isEmpty(list)){
+            return;
+        }
         List<ScoreRangeVo> scoreRange = new ArrayList<>();
         ret.setScoreRange(scoreRange);
         int total = ret.getOverview().getStudentCount() - ret.getOverview().getAbsentCount();
-        scoreRange.add(getScoreRangeVo(total,list, 1.0, 9.5));
-        scoreRange.add(getScoreRangeVo(total,list, 10.0, 19.5));
-        scoreRange.add(getScoreRangeVo(total,list, 20.0, 29.5));
-        scoreRange.add(getScoreRangeVo(total,list, 30.0, 39.5));
-        scoreRange.add(getScoreRangeVo(total,list, 40.0, 49.5));
-        scoreRange.add(getScoreRangeVo(total,list, 50.0, 59.5));
-        scoreRange.add(getScoreRangeVo(total,list, 60.0, 69.5));
-        scoreRange.add(getScoreRangeVo(total,list, 70.0, 79.5));
-        scoreRange.add(getScoreRangeVo(total,list, 80.0, 89.5));
-        scoreRange.add(getScoreRangeVo(total,list, 90.0, 100.0));
-    }
-
-    private ScoreRangeVo getScoreRangeVo(int totalCount,List<ArchiveStudentVo> list, Double start, Double end) {
+        scoreRange.add(getScoreRangeVo(total, list, 1.0, 9.5));
+        scoreRange.add(getScoreRangeVo(total, list, 10.0, 19.5));
+        scoreRange.add(getScoreRangeVo(total, list, 20.0, 29.5));
+        scoreRange.add(getScoreRangeVo(total, list, 30.0, 39.5));
+        scoreRange.add(getScoreRangeVo(total, list, 40.0, 49.5));
+        scoreRange.add(getScoreRangeVo(total, list, 50.0, 59.5));
+        scoreRange.add(getScoreRangeVo(total, list, 60.0, 69.5));
+        scoreRange.add(getScoreRangeVo(total, list, 70.0, 79.5));
+        scoreRange.add(getScoreRangeVo(total, list, 80.0, 89.5));
+        scoreRange.add(getScoreRangeVo(total, list, 90.0, 100.0));
+    }
+
+    private ScoreRangeVo getScoreRangeVo(int totalCount, List<ArchiveStudentVo> list, Double start, Double end) {
         int count = (int) list.stream().filter(s -> s.getTotalScore() >= start && s.getTotalScore() <= end).count();
         Double rate = null;
         if (list.size() != 0) {
             rate = Calculator.divide(count, totalCount, 2);
         }
-        ScoreRangeVo vo = new ScoreRangeVo(count, start, end, rate*100);
+        ScoreRangeVo vo = new ScoreRangeVo(count, start, end, rate * 100);
         return vo;
     }
 
@@ -1554,7 +1560,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         BasicTeachClazz basicTeachClazz = this.baseMapper.getBasicTeachClazzById(basicExamStudent.getClazzId());
         SysUser sysUser = sysUserService.getById(basicExamStudent.getTeacherId());
         if (markStudent == null) {
-            markStudent = new MarkStudent(basicExamStudent.getId(), basicExamStudent.getExamId(), basicExamStudent.getCourseCode(), basicCourse == null ? null : basicCourse.getName(), basicExamStudent.getPaperNumber(), markPaper.getCoursePaperId(), "A", basicExamStudent.getStudentCode(), basicExamStudent.getStudentName(), "", basicExamStudent.getExamPlace(), basicExamStudent.getExamRoom(), basicExamStudent.getCollege(), basicExamStudent.getMajor(), basicTeachClazz == null ? null : basicTeachClazz.getClazzName(),basicExamStudent.getTeacherId(), sysUser == null ? null : sysUser.getRealName(), basicExamStudent.getExamStartTime(), basicExamStudent.getExamEndTime(), markPaper.getUserId());
+            markStudent = new MarkStudent(basicExamStudent.getId(), basicExamStudent.getExamId(), basicExamStudent.getCourseCode(), basicCourse == null ? null : basicCourse.getName(), basicExamStudent.getPaperNumber(), markPaper.getCoursePaperId(), "A", basicExamStudent.getStudentCode(), basicExamStudent.getStudentName(), "", basicExamStudent.getExamPlace(), basicExamStudent.getExamRoom(), basicExamStudent.getCollege(), basicExamStudent.getMajor(), basicTeachClazz == null ? null : basicTeachClazz.getClazzName(), basicExamStudent.getTeacherId(), sysUser == null ? null : sysUser.getRealName(), basicExamStudent.getExamStartTime(), basicExamStudent.getExamEndTime(), markPaper.getUserId());
             if (markStudent.getSecretNumber() == null) {
                 markStudent.randomSecretNumber();
                 while (secretNumberSet.contains(markStudent.getSecretNumber())

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

@@ -7,6 +7,7 @@ import com.qmth.teachcloud.mark.bean.archivescore.QuestionVo;
 import com.qmth.teachcloud.mark.entity.MarkSubjectiveScore;
 import com.qmth.teachcloud.mark.mapper.MarkSubjectiveScoreMapper;
 import com.qmth.teachcloud.mark.service.MarkSubjectiveScoreService;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.HashSet;
@@ -98,6 +99,9 @@ public class MarkSubjectiveScoreServiceImpl extends MppServiceImpl<MarkSubjectiv
 
 	@Override
 	public List<QuestionVo> getSubjectiveVo(List<Long> studentIds) {
+        if(CollectionUtils.isEmpty(studentIds)){
+            return null;
+        }
 		return this.baseMapper.getSubjectiveVo(studentIds);
 	}
 

+ 23 - 1
teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml

@@ -324,6 +324,7 @@
             resultType="com.qmth.teachcloud.mark.bean.archivescore.ArchiveStudentVo">
         select s.*,s.id studentId, ifnull(s.objective_score,0)+ifnull(s.subjective_score,0) totalScore
         from mark_student s left join sys_user su on s.teacher_id = su.id
+        left join (select * from basic_course where school_id = #{schoolId}) bc on s.course_code = bc.code
         <include refid="archiveQuery"/>
         <if test="req.orderType != null and req.orderType != '' and req.orderField != null and req.orderField != ''">
             <choose>
@@ -345,7 +346,7 @@
                 AND s.teacher_id = #{dpr.requestUserId}
             </if>
             <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
-                AND su.org_id IN
+                AND bc.teaching_room_id IN
                 <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
                     #{item}
                 </foreach>
@@ -384,6 +385,17 @@
         <if test="req.endScore != null and req.endScore !=''">
             and (ifnull(s.objective_score,0)+ifnull(s.subjective_score,0)) &lt;= #{req.endScore}
         </if>
+        <if test="dpr != null">
+            <if test="dpr.requestUserId != null">
+                AND s.teacher_id = #{dpr.requestUserId}
+            </if>
+            <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+                AND bc.teaching_room_id IN
+                <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </if>
     </sql>
     <select id="overview" resultType="com.qmth.teachcloud.mark.bean.archivescore.OverViewVo">
         SELECT count(*)                                                                                 studentCount,
@@ -405,6 +417,8 @@
                  left join mark_paper t on s.exam_id = t.exam_id
             and s.paper_number = t.paper_number
             and s.paper_type = t.paper_type
+        left join sys_user su on s.teacher_id = su.id
+        left join (select * from basic_course where school_id = #{schoolId}) bc on s.course_code = bc.code
         <include refid="archiveQuery"/>
     </select>
     <select id="getCountByScoreRange" resultType="int">
@@ -432,6 +446,8 @@
                  left join mark_paper t on s.exam_id = t.exam_id
             and s.paper_number = t.paper_number
             and s.paper_type = t.paper_type
+        left join sys_user su on s.teacher_id = su.id
+        left join (select * from basic_course where school_id = #{schoolId}) bc on s.course_code = bc.code
             <include refid="archiveQuery"/>
             and s.college is not null
         group by s.college
@@ -453,6 +469,8 @@
                  left join mark_paper t on s.exam_id = t.exam_id
             and s.paper_number = t.paper_number
             and s.paper_type = t.paper_type
+        left join sys_user su on s.teacher_id = su.id
+        left join (select * from basic_course where school_id = #{schoolId}) bc on s.course_code = bc.code
             <include refid="archiveQuery"/>
             and s.class_name is not null
         group by s.class_name
@@ -474,6 +492,8 @@
                  left join mark_paper t on s.exam_id = t.exam_id
             and s.paper_number = t.paper_number
             and s.paper_type = t.paper_type
+        left join sys_user su on s.teacher_id = su.id
+        left join (select * from basic_course where school_id = #{schoolId}) bc on s.course_code = bc.code
             <include refid="archiveQuery"/>
             and s.teacher is not null
         group by s.teacher
@@ -540,6 +560,8 @@
                  left join mark_paper t on s.exam_id = t.exam_id
             and s.paper_number = t.paper_number
             and s.paper_type = t.paper_type
+        left join sys_user su on s.teacher_id = su.id
+        left join (select * from basic_course where school_id = #{schoolId}) bc on s.course_code = bc.code
             <include refid="archiveQuery"/>
             and s.class_name is not null
         group by s.teacher, s.class_name