Procházet zdrojové kódy

课堂活跃度最后统一计算

v3.2.0
雍文秀 před 2 roky
rodič
revize
f8e17e2086

+ 5
- 0
sclass/src/main/java/com/xhkjedu/sclass/controller/classroom/ClassroomController.java Zobrazit soubor

@@ -68,6 +68,8 @@ public class ClassroomController {
68 68
             List<Integer> classlst = new ArrayList<>();//用于更新班级课堂状态
69 69
             for (RoomPVo r : rooms) {
70 70
                 savelst.add(r.getRoomid());
71
+                Integer classid = null;
72
+                Integer schoolid = null;
71 73
                 List<RoomParamVo> params = r.getParams();
72 74
                 for (RoomParamVo param : params) {
73 75
                     String rtype = param.getRtype();
@@ -76,6 +78,8 @@ public class ClassroomController {
76 78
                     if (rtype.equals("startclass")) {//课堂--开始
77 79
                         TClassroom room = JSON.parseObject(jsonstr, TClassroom.class);
78 80
                         classlst.add(room.getClassid());
81
+                        classid = room.getClassid();
82
+                        schoolid = room.getSchoolid();
79 83
                         boolean rtn = classroomService.startClass(room);//课堂是否重复请求
80 84
                         if (rtn) {
81 85
                             break;//课堂重复请求结束循环,执行下个课堂数据
@@ -103,6 +107,7 @@ public class ClassroomController {
103 107
                         classroomPaperService.saveStudentScantron(student);
104 108
                     }
105 109
                 }
110
+                classroomService.saveStuActive(r.getRoomid(), classid, schoolid);
106 111
             }
107 112
 
108 113
             //最后更新课堂中实际上课学生数量

+ 9
- 0
sclass/src/main/java/com/xhkjedu/sclass/mapper/classroom/ClassroomActivestudentMapper.java Zobrazit soubor

@@ -4,6 +4,8 @@ import com.xhkjedu.sclass.base.TkMapper;
4 4
 import com.xhkjedu.sclass.model.classroom.TClassroomActivestudent;
5 5
 import org.apache.ibatis.annotations.Param;
6 6
 
7
+import java.util.List;
8
+
7 9
 public interface ClassroomActivestudentMapper extends TkMapper<TClassroomActivestudent> {
8 10
     /**
9 11
      * 更新活跃值排名
@@ -31,4 +33,11 @@ public interface ClassroomActivestudentMapper extends TkMapper<TClassroomActives
31 33
      * @return java.lang.Integer
32 34
      **/
33 35
     Integer saveStuActive(@Param("roomid") Long roomid, @Param("classid") Integer classid,@Param("schoolid") Integer schoolid);
36
+
37
+    //根据课堂id获取互动ids
38
+    String getAsktidsByRoomId(@Param("roomid") Long roomid);
39
+
40
+    //课堂学生
41
+    List<TClassroomActivestudent> listRoomStu(@Param("roomid") Long roomid, @Param("classid") Integer classid
42
+            ,@Param("asktids") String asktids);
34 43
 }

+ 41
- 27
sclass/src/main/java/com/xhkjedu/sclass/service/classroom/ClassroomService.java Zobrazit soubor

@@ -1,27 +1,8 @@
1 1
 package com.xhkjedu.sclass.service.classroom;
2 2
 
3
-import com.xhkjedu.sclass.mapper.classroom.ClassroomActivestudentMapper;
4
-import com.xhkjedu.sclass.mapper.classroom.ClassroomAskstudentMapper;
5
-import com.xhkjedu.sclass.mapper.classroom.ClassroomAskteacherMapper;
6
-import com.xhkjedu.sclass.mapper.classroom.ClassroomFileMapper;
7
-import com.xhkjedu.sclass.mapper.classroom.ClassroomMapper;
8
-import com.xhkjedu.sclass.mapper.classroom.ClassroomPaperFileMapper;
9
-import com.xhkjedu.sclass.mapper.classroom.ClassroomSignMapper;
10
-import com.xhkjedu.sclass.model.classroom.TClassroom;
11
-import com.xhkjedu.sclass.model.classroom.TClassroomAskstudent;
12
-import com.xhkjedu.sclass.model.classroom.TClassroomAskteacher;
13
-import com.xhkjedu.sclass.model.classroom.TClassroomFile;
14
-import com.xhkjedu.sclass.model.classroom.TClassroomPaperFile;
15
-import com.xhkjedu.sclass.model.classroom.TClassroomSign;
16
-import com.xhkjedu.sclass.vo.classroom.ObjectiveVo;
17
-import com.xhkjedu.sclass.vo.classroom.ReportEQuestionVo;
18
-import com.xhkjedu.sclass.vo.classroom.ReportExamVo;
19
-import com.xhkjedu.sclass.vo.classroom.ReportRoomVo;
20
-import com.xhkjedu.sclass.vo.classroom.RoomCorrectCallVo;
21
-import com.xhkjedu.sclass.vo.classroom.RoomCorrectExamVo;
22
-import com.xhkjedu.sclass.vo.classroom.RoomCorrectVo;
23
-import com.xhkjedu.sclass.vo.classroom.RoomVo;
24
-import com.xhkjedu.sclass.vo.classroom.SubjectiveVo;
3
+import com.xhkjedu.sclass.mapper.classroom.*;
4
+import com.xhkjedu.sclass.model.classroom.*;
5
+import com.xhkjedu.sclass.vo.classroom.*;
25 6
 import com.xhkjedu.sclass.vo.paper.CheckClassVo;
26 7
 import com.xhkjedu.utils.N_Utils;
27 8
 import com.xhkjedu.vo.ResultVo;
@@ -32,8 +13,10 @@ import org.springframework.transaction.annotation.Transactional;
32 13
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
33 14
 
34 15
 import javax.annotation.Resource;
16
+import java.util.HashMap;
35 17
 import java.util.List;
36 18
 import java.util.Map;
19
+import java.util.stream.Collectors;
37 20
 
38 21
 @Slf4j
39 22
 @Service
@@ -69,11 +52,11 @@ public class ClassroomService {
69 52
             Integer num = classroomMapper.getStudentNumById(room.getClassid());//根据班级id获取学生数量
70 53
             room.setClassnum(num);
71 54
             classroomMapper.save(room);
72
-            classroomActivestudentMapper.saveStuActive(room.getRoomid(), room.getClassid(), room.getSchoolid());
55
+            //classroomActivestudentMapper.saveStuActive(room.getRoomid(), room.getClassid(), room.getSchoolid());
73 56
         } catch (Exception e) {
74 57
             if (e instanceof DuplicateKeyException) {
75 58
                 rtn = true;
76
-                log.error("接口重复请求,课堂id:" + room.getRoomid() + ",课堂名称:" + room.getRoomname());
59
+                log.error("课堂数据已保存,课堂id:" + room.getRoomid() + ",课堂名称:" + room.getRoomname());
77 60
             } else {
78 61
                 log.error("开始课堂失败:" + e.getMessage());
79 62
             }
@@ -99,7 +82,7 @@ public class ClassroomService {
99 82
                 room.setEndtime(tClassroom.getCreatetime() + 60 * 45);
100 83
             }
101 84
             classroomMapper.endClass(room);//结束课堂
102
-            classroomActivestudentMapper.updateActiveRank(roomid);//更新活跃值排名
85
+            //classroomActivestudentMapper.updateActiveRank(roomid);//更新活跃值排名
103 86
         } catch (Exception e) {
104 87
             log.error("结束课堂失败:" + e.getMessage());
105 88
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -124,7 +107,7 @@ public class ClassroomService {
124 107
                 classroomSignMapper.save(sign);
125 108
                 //如果一个学生退出课堂再进来数据就不对了,最后计算
126 109
                 //classroomMapper.updateRealStuNum(sign.getRoomid());//更新班级实际签到学生数量
127
-                classroomActivestudentMapper.updateActiveNum(roomid, userid);//更新学生活跃值
110
+                //classroomActivestudentMapper.updateActiveNum(roomid, userid);//更新学生活跃值
128 111
             }
129 112
         } catch (Exception e) {
130 113
             log.error("保存学生签到信息失败:" + e.getMessage());
@@ -191,7 +174,7 @@ public class ClassroomService {
191 174
             }
192 175
             classroomAskstudentMapper.save(student);
193 176
             //保存成功更新学生活跃值
194
-            classroomActivestudentMapper.updateActiveNum(student.getRoomid(), student.getStudentid());
177
+            //classroomActivestudentMapper.updateActiveNum(student.getRoomid(), student.getStudentid());
195 178
         } catch (Exception e) {
196 179
             log.error("保存学生作答情况失败:" + e.getMessage());
197 180
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -459,4 +442,35 @@ public class ClassroomService {
459 442
     public List<Map> listStudent(Integer classid, String lsbid) {
460 443
         return classroomMapper.listStudent(classid, lsbid);
461 444
     }
445
+
446
+    //更新学生活跃度 2022/10/17 课堂活跃度最后统一计算
447
+    public void saveStuActive(Long roomid, Integer classid, Integer schoolid) {
448
+        String asktids = classroomActivestudentMapper.getAsktidsByRoomId(roomid);
449
+        List<TClassroomActivestudent> students = classroomActivestudentMapper.listRoomStu(roomid, classid, asktids);
450
+        if(N_Utils.isListEmpty(students)) return;
451
+        Map<Integer, Integer> rank=new HashMap<>();
452
+        setRank(students,rank);//计算排名
453
+        int timestamp = N_Utils.getSecondTimestamp();
454
+        students.forEach(s -> {
455
+            s.setRoomid(roomid);
456
+            s.setSchoolid(schoolid);
457
+            s.setActiverank(rank.get(s.getActivenum()));
458
+            s.setCreatetime(timestamp);
459
+        });
460
+        classroomActivestudentMapper.insertList(students);
461
+    }
462
+
463
+    //计算排名
464
+    private void setRank(List<TClassroomActivestudent> students, Map<Integer, Integer> rank) {
465
+        List<Map.Entry<Integer, List<TClassroomActivestudent>>> gslist2 = students.stream()
466
+                .collect(Collectors.groupingBy(TClassroomActivestudent::getActivenum)).entrySet()
467
+                .stream().sorted((s1, s2) -> -Double.compare(s1.getKey(), s2.getKey())).collect(Collectors.toList());
468
+        Integer index = 1;
469
+        for (Map.Entry<Integer, List<TClassroomActivestudent>> entry : gslist2) {
470
+            for (TClassroomActivestudent cs : entry.getValue()) {
471
+                rank.put(cs.getActivenum(), index);
472
+            }
473
+            index = index + entry.getValue().size();
474
+        }
475
+    }
462 476
 }

+ 14
- 0
sclass/src/main/resources/mapper/classroom/ClassroomActivestudentMapper.xml Zobrazit soubor

@@ -18,4 +18,18 @@
18 18
         insert into t_classroom_activestudent(roomid,studentid,createtime,schoolid)
19 19
         SELECT #{roomid},s.studentid,UNIX_TIMESTAMP(),#{schoolid} FROM t_class_student s WHERE s.classid=#{classid}
20 20
     </insert>
21
+    <!--根据课堂id获取互动ids-->
22
+    <select id="getAsktidsByRoomId" resultType="java.lang.String">
23
+        select group_concat(asktid) from t_classroom_askteacher where roomid=#{roomid}
24
+    </select>
25
+    <!--课堂学生-->
26
+    <select id="listRoomStu" resultType="com.xhkjedu.sclass.model.classroom.TClassroomActivestudent">
27
+        select cs.studentid,(
28
+            (select count(distinct s.userid) from t_classroom_sign s where s.roomid=#{roomid} and s.userid=cs.studentid)
29
+        <if test="asktids!=null and asktids!=''">
30
+            +(select count(*) from t_classroom_askstudent s where s.asktid in(${asktids}) and s.studentid=cs.studentid)
31
+        </if>
32
+        )activenum
33
+        from t_class_student cs where cs.classid=#{classid}
34
+    </select>
21 35
 </mapper>

Načítá se…
Zrušit
Uložit