Переглянути джерело

主观题选项, 教师端接口

mingfu 3 тижнів тому
батько
коміт
74c43324ff

+ 25 - 45
ie-admin/src/main/java/com/ruoyi/web/controller/front/FrontTeacherController.java

@@ -4,19 +4,20 @@ import com.alibaba.fastjson2.JSONObject;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.dz.service.IDzControlService;
 import com.ruoyi.dz.service.IDzControlService;
 import com.ruoyi.dz.service.IDzSubjectService;
 import com.ruoyi.dz.service.IDzSubjectService;
 import com.ruoyi.learn.domain.LearnTest;
 import com.ruoyi.learn.domain.LearnTest;
 import com.ruoyi.learn.service.ILearnTestService;
 import com.ruoyi.learn.service.ILearnTestService;
+import com.ruoyi.web.service.LearnStatService;
 import com.ruoyi.web.service.LearnTeacherService;
 import com.ruoyi.web.service.LearnTeacherService;
+import com.ruoyi.web.service.StudentService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import io.swagger.annotations.ApiParam;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -28,19 +29,24 @@ public class FrontTeacherController extends BaseController {
     private final IDzSubjectService dzSubjectService;
     private final IDzSubjectService dzSubjectService;
     private final ILearnTestService learnTestService;
     private final ILearnTestService learnTestService;
     private final LearnTeacherService learnTeacherService;
     private final LearnTeacherService learnTeacherService;
+    private final StudentService studentService;
+    private final LearnStatService learnStatService;
 
 
-    public FrontTeacherController(IDzControlService dzControlService, IDzSubjectService dzSubjectService, ILearnTestService learnTestService, LearnTeacherService learnTeacherService) {
+    public FrontTeacherController(IDzControlService dzControlService, IDzSubjectService dzSubjectService, ILearnTestService learnTestService, LearnTeacherService learnTeacherService, StudentService studentService, LearnStatService learnStatService) {
         this.dzControlService = dzControlService;
         this.dzControlService = dzControlService;
         this.dzSubjectService = dzSubjectService;
         this.dzSubjectService = dzSubjectService;
         this.learnTestService = learnTestService;
         this.learnTestService = learnTestService;
         this.learnTeacherService = learnTeacherService;
         this.learnTeacherService = learnTeacherService;
+        this.studentService = studentService;
+        this.learnStatService = learnStatService;
     }
     }
 
 
     @ApiOperation("10 查询班级列表")
     @ApiOperation("10 查询班级列表")
     @GetMapping("classes")
     @GetMapping("classes")
     public AjaxResult getClasses()
     public AjaxResult getClasses()
     {
     {
-        return AjaxResult.success(learnTeacherService.getClasses(getUserId()));
+        SysUser sysUser = SecurityUtils.getLoginUser().getUser();
+        return AjaxResult.success(learnTeacherService.getClasses(sysUser.getUserTypeId()));
     }
     }
 
 
     @ApiOperation("10 查询批次列表")
     @ApiOperation("10 查询批次列表")
@@ -101,69 +107,43 @@ public class FrontTeacherController extends BaseController {
 
 
     @ApiOperation("记录-计划刷题 有班级显示学生")
     @ApiOperation("记录-计划刷题 有班级显示学生")
     @GetMapping("record/planStudy")
     @GetMapping("record/planStudy")
-    public AjaxResult getRecordStudy()
+    public TableDataInfo getRecordStudy(@ApiParam("班级") @RequestParam Long classId, @ApiParam("排序字段total/time/rate") @RequestParam String sortField, @ApiParam("升序") @RequestParam Boolean asc)
     {
     {
-        JSONObject data = JSONObject.of("seq", "1", "name", "XM", "total", "658", "study", 20, "rate", 39);
-        List<JSONObject> list = Lists.newArrayList(data);
-        return AjaxResult.success(list);
+        return getDataTable(learnStatService.getClassRecordPlanStudy(classId, sortField, asc));
     }
     }
 
 
     @ApiOperation("记录-计划刷题明细")
     @ApiOperation("记录-计划刷题明细")
-    @GetMapping("record/planStudy/{id}")
-    public AjaxResult getRecordPlanStudyDetail(Integer year, Integer monthSeq, Integer weekSeq, @ApiParam("记录sid") @PathVariable("recordId") Integer recordId)
+    @GetMapping("record/planStudy/{recordId}")
+    public AjaxResult getRecordPlanStudyDetail(@ApiParam("年份") @RequestParam Integer year, @ApiParam("月份") @RequestParam(required = false) Long month, @ApiParam("记录sid") @PathVariable("recordId") Long recordId)
     {
     {
-        JSONObject result = new JSONObject();
-        result.put("total", 140);
-        result.put("rate", 85);
-        result.put("studyDays", 3);
-        JSONObject data = JSONObject.of("date", "2025.09.03", "study", "90", "rate", "80", "pass", true);
-        List<JSONObject> list = Lists.newArrayList(data);
-        result.put("list", list);
-        return AjaxResult.success(result);
+        return AjaxResult.success(learnStatService.getRecordPlanStudy(recordId, year, month));
     }
     }
 
 
     @ApiOperation("知识点")
     @ApiOperation("知识点")
     @GetMapping("record/knowledge")
     @GetMapping("record/knowledge")
-    public AjaxResult getRecordKnowledge(@ApiParam("班级id") Integer classId)
+    public AjaxResult getRecordKnowledge(@ApiParam("班级id") @RequestParam Long classId)
     {
     {
-        JSONObject result = new JSONObject();
-        result.put("rate", 48);
-        JSONObject data = JSONObject.of("seq", "1", "name", "XM", "total", "658", "rate", 39);
-        List<JSONObject> list = Lists.newArrayList(data);
-        result.put("list", list);
-        return AjaxResult.success(result);
+        return AjaxResult.success(learnStatService.getClassRecordKnowledge(classId));
     }
     }
 
 
     @ApiOperation("知识点")
     @ApiOperation("知识点")
     @GetMapping("record/knowledge/{recordId}")
     @GetMapping("record/knowledge/{recordId}")
-    public TableDataInfo getRecordKnowledgeDetail(@ApiParam("记录sid") @PathVariable("recordId") Integer recordId)
+    public TableDataInfo getRecordKnowledgeDetail(@ApiParam("记录sid") @PathVariable("recordId") Long recordId)
     {
     {
-        JSONObject data = JSONObject.of("name", "", "directed", true, "rate", 82, "total", 1470);
-        List<JSONObject> list = Lists.newArrayList(data);
-        return getDataTable(list);
+        return getDataTable(learnStatService.getRecordKnowledge(recordId));
     }
     }
 
 
     @ApiOperation("视频记录")
     @ApiOperation("视频记录")
     @GetMapping("record/video")
     @GetMapping("record/video")
-    public AjaxResult getRecordVideo(@ApiParam("班级id") Integer classId)
+    public TableDataInfo getRecordVideo(@ApiParam("班级id") Long classId, @ApiParam("排序") boolean asc)
     {
     {
-        JSONObject result = new JSONObject();
-        JSONObject data = JSONObject.of("seq", "1", "name", "XM", "total", "658", "study", 20);
-        List<JSONObject> list = Lists.newArrayList(data);
-        result.put("list", list);
-        return AjaxResult.success(result);
+        return getDataTable(learnStatService.getClassRecordVideo(classId, asc));
     }
     }
 
 
     @ApiOperation("视频记录")
     @ApiOperation("视频记录")
     @GetMapping("record/video/{recordId}")
     @GetMapping("record/video/{recordId}")
-    public AjaxResult getRecordVideoDetail(@ApiParam("记录sid") @PathVariable("recordId") Integer recordId)
+    public AjaxResult getRecordVideoDetail(@ApiParam("记录sid") @PathVariable("recordId") Long recordId)
     {
     {
-        JSONObject result = new JSONObject();
-        result.put("total", 98);
-        result.put("study", 759);
-        JSONObject data = JSONObject.of("name", "充分条件", "date", "2025.09.11", "study", "02:46");
-        List<JSONObject> list = Lists.newArrayList(data);
-        result.put("list", list);
-        return AjaxResult.success(result);
+        return AjaxResult.success(learnStatService.getRecordVideo(recordId));
     }
     }
 }
 }

+ 34 - 1
ie-admin/src/main/java/com/ruoyi/web/service/LearnStatService.java

@@ -6,7 +6,6 @@ import com.alibaba.fastjson2.util.DateUtils;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import com.google.common.collect.Sets;
 import com.ruoyi.common.utils.NumberUtils;
 import com.ruoyi.common.utils.NumberUtils;
-import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.learn.domain.LearnStudent;
 import com.ruoyi.learn.domain.LearnStudent;
 import com.ruoyi.learn.mapper.LearnAnswerMapper;
 import com.ruoyi.learn.mapper.LearnAnswerMapper;
 import com.ruoyi.learn.service.ILearnStudentService;
 import com.ruoyi.learn.service.ILearnStudentService;
@@ -14,6 +13,7 @@ import com.ruoyi.mingxue.mapper.CustomerVideoWatchesMapper;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.*;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 
 
 @Service
 @Service
 public class LearnStatService {
 public class LearnStatService {
@@ -29,6 +29,20 @@ public class LearnStatService {
         this.learnTeacherService = learnTeacherService1;
         this.learnTeacherService = learnTeacherService1;
     }
     }
 
 
+    public JSONObject getClassRecordKnowledge(Long classId) {
+        JSONObject result = new JSONObject();
+        Map cond = Dict.create().set("classId", classId);
+        JSONObject header = answerMapper.selectClassKnowledgeHeader(cond);
+        result.put("rate", header.getIntValue("rate"));
+        List<JSONObject> list = answerMapper.selectClassKnowledgeDetail(cond);
+        AtomicInteger index = new AtomicInteger(1);
+        list.stream().forEach(s -> {
+            s.put("seq", index.getAndAdd(1));
+        });
+        result.put("list", list);
+        return result;
+    }
+
     public List<JSONObject> getRecordKnowledge(Long studentId) {
     public List<JSONObject> getRecordKnowledge(Long studentId) {
         LearnStudent learnStudent = learnStudentService.selectLearnStudentByStudentId(studentId);
         LearnStudent learnStudent = learnStudentService.selectLearnStudentByStudentId(studentId);
         Set<Long> knowledgeIdSet = null != learnStudent ? learnTeacherService.getKnowledgeIdSet(new Long[] { learnStudent.getMajorPlanId() }) : Sets.newHashSet();
         Set<Long> knowledgeIdSet = null != learnStudent ? learnTeacherService.getKnowledgeIdSet(new Long[] { learnStudent.getMajorPlanId() }) : Sets.newHashSet();
@@ -40,6 +54,15 @@ public class LearnStatService {
         return list;
         return list;
     }
     }
 
 
+    public List<JSONObject> getClassRecordVideo(Long classId, Boolean asc) {
+        Map cond = Dict.create().set("classId", classId).set("desc", null != asc && !asc);
+        List<JSONObject> list = customerVideoWatchesMapper.selectClassStats(cond);
+        AtomicInteger index = new AtomicInteger(1);
+        list.forEach(t -> {
+            t.put("seq", index.getAndAdd(1));
+        });
+        return list;
+    }
     public JSONObject getRecordVideo(Long studentId) {
     public JSONObject getRecordVideo(Long studentId) {
         Map cond = Dict.create().set("studentId", studentId);
         Map cond = Dict.create().set("studentId", studentId);
         JSONObject header = customerVideoWatchesMapper.selectLearnStatsHeader(cond);
         JSONObject header = customerVideoWatchesMapper.selectLearnStatsHeader(cond);
@@ -55,6 +78,16 @@ public class LearnStatService {
         return result;
         return result;
     }
     }
 
 
+    public List<JSONObject> getClassRecordPlanStudy(Long classId, String sortField, Boolean asc) {
+        Map cond = Dict.create().set("classId", classId).set("sortField", sortField).set("desc", null != asc && !asc);
+        List<JSONObject> list = answerMapper.selectClassQuestionStats(cond);
+        AtomicInteger index = new AtomicInteger(1);
+        list.forEach(t -> {
+            t.put("seq", index.getAndAdd(1));
+        });
+        return list;
+
+    }
     public JSONObject getRecordPlanStudy(Long studentId, Integer year, Long month) {
     public JSONObject getRecordPlanStudy(Long studentId, Integer year, Long month) {
         Date beginDate, endDate;
         Date beginDate, endDate;
         Calendar cal  = Calendar.getInstance();
         Calendar cal  = Calendar.getInstance();

+ 8 - 3
ie-admin/src/main/java/com/ruoyi/web/service/PaperService.java

@@ -30,6 +30,7 @@ import java.util.stream.Stream;
  */
  */
 @Service
 @Service
 public class PaperService {
 public class PaperService {
+    Set<QuestionType> chooseTypes = Sets.newHashSet(QuestionType.Judgment, QuestionType.Multiple, QuestionType.Single);
     private final LearnPaperMapper paperMapper;
     private final LearnPaperMapper paperMapper;
     private final LearnPaperQuestionMapper paperQuestionMapper;
     private final LearnPaperQuestionMapper paperQuestionMapper;
     private final LearnQuestionsMapper questionsMapper;
     private final LearnQuestionsMapper questionsMapper;
@@ -97,7 +98,11 @@ public class PaperService {
             QuestionType qt = QuestionType.of(lqs.getQtpye());
             QuestionType qt = QuestionType.of(lqs.getQtpye());
             qs.setTypeId(qt.getVal());
             qs.setTypeId(qt.getVal());
             qs.setType(qt.getTitle());
             qs.setType(qt.getTitle());
-            qs.setOptions(StringUtils.getOptions(lqs.getOptionA(), lqs.getOptionB(), lqs.getOptionC(), lqs.getOptionD(), lqs.getOptionE(), lqs.getOptionF(), lqs.getOptionG()));
+            if (chooseTypes.contains(qt)) {
+                qs.setOptions(Lists.newArrayList("会", "不会"));
+            } else {
+                qs.setOptions(StringUtils.getOptions(lqs.getOptionA(), lqs.getOptionB(), lqs.getOptionC(), lqs.getOptionD(), lqs.getOptionE(), lqs.getOptionF(), lqs.getOptionG()));
+            }
             if(StringUtils.isNotBlank(lqs.getTitle0())) { // 大题
             if(StringUtils.isNotBlank(lqs.getTitle0())) { // 大题
                 PaperVO.QuestionSeq qg = gropuMap.get(lqs.getTitle0());
                 PaperVO.QuestionSeq qg = gropuMap.get(lqs.getTitle0());
                 if(qg == null) {
                 if(qg == null) {
@@ -124,14 +129,14 @@ public class PaperService {
         LearnAnswer answer;
         LearnAnswer answer;
         for(LearnQuestions lqs : questions) {
         for(LearnQuestions lqs : questions) {
             PaperVO.QuestionAnswer qs = new PaperVO.QuestionAnswer();
             PaperVO.QuestionAnswer qs = new PaperVO.QuestionAnswer();
-            if(withParse) {
+            QuestionType qt = QuestionType.of(lqs.getQtpye());
+            if(withParse || !chooseTypes.contains(qt)) {
                 BeanUtils.copyProperties(lqs, qs, "title", "options");
                 BeanUtils.copyProperties(lqs, qs, "title", "options");
             } else {
             } else {
                 BeanUtils.copyProperties(lqs, qs, "title", "options", "parse", "answer1", "answer2");
                 BeanUtils.copyProperties(lqs, qs, "title", "options", "parse", "answer1", "answer2");
             }
             }
             qs.setTotalScore(lqs.getScore());
             qs.setTotalScore(lqs.getScore());
             qs.setScore(null);
             qs.setScore(null);
-            QuestionType qt = QuestionType.of(lqs.getQtpye());
             qs.setTypeId(qt.getVal());
             qs.setTypeId(qt.getVal());
             qs.setIsFavorite(lqs.isCollect());
             qs.setIsFavorite(lqs.isCollect());
             if(null != answerMap && null != (answer = answerMap.get(lqs.getId()))) {
             if(null != answerMap && null != (answer = answerMap.get(lqs.getId()))) {

+ 5 - 1
ie-system/src/main/java/com/ruoyi/learn/domain/PaperVO.java

@@ -101,9 +101,13 @@ public class PaperVO {
                     }
                     }
                     List<String> stdAnswers = Arrays.asList(std.getAnswer1().split(","));
                     List<String> stdAnswers = Arrays.asList(std.getAnswer1().split(","));
                     return stdAnswers.size() == answers.size() && CollectionUtils.intersection(stdAnswers, answers).size() == answers.size() ? 1 : 2;
                     return stdAnswers.size() == answers.size() && CollectionUtils.intersection(stdAnswers, answers).size() == answers.size() ? 1 : 2;
+                } else {
+                    if(CollectionUtils.isEmpty(answers)) {
+                        return 4;
+                    }
+                    return answers.get(0).equals("A") ? 1 : 2;
                 }
                 }
             }
             }
-            return 0;
         }
         }
     }
     }
 }
 }

+ 5 - 0
ie-system/src/main/java/com/ruoyi/learn/mapper/LearnAnswerMapper.java

@@ -14,7 +14,12 @@ import com.ruoyi.learn.domain.LearnAnswer;
  */
  */
 public interface LearnAnswerMapper 
 public interface LearnAnswerMapper 
 {
 {
+    JSONObject selectClassKnowledgeHeader(Map cond);
+    List<JSONObject> selectClassKnowledgeDetail(Map cond);
+
     List<JSONObject> selectKnowledgeStats(Map cond);
     List<JSONObject> selectKnowledgeStats(Map cond);
+
+    List<JSONObject> selectClassQuestionStats(Map cond);
     JSONObject selectQuestionStatsHeader(Map cond);
     JSONObject selectQuestionStatsHeader(Map cond);
     List<JSONObject> selectQuestionStatsDetail(Map cond);
     List<JSONObject> selectQuestionStatsDetail(Map cond);
 
 

+ 1 - 0
ie-system/src/main/java/com/ruoyi/mingxue/mapper/CustomerVideoWatchesMapper.java

@@ -14,6 +14,7 @@ import java.util.Map;
  */
  */
 public interface CustomerVideoWatchesMapper
 public interface CustomerVideoWatchesMapper
 {
 {
+    List<JSONObject> selectClassStats(Map cond);
     JSONObject selectLearnStatsHeader(Map cond);
     JSONObject selectLearnStatsHeader(Map cond);
     List<JSONObject> selectLearnStatsDetail(Map cond);
     List<JSONObject> selectLearnStatsDetail(Map cond);
 
 

+ 29 - 0
ie-system/src/main/resources/mapper/learn/LearnAnswerMapper.xml

@@ -27,6 +27,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select answer_id, examinee_id, student_id, question_id, seq, knowledge_id, answer, correct, duration, count, state, score_level, score, score_rate, isMark, isNotKnow, create_time, update_time from learn_answer
         select answer_id, examinee_id, student_id, question_id, seq, knowledge_id, answer, correct, duration, count, state, score_level, score, score_rate, isMark, isNotKnow, create_time, update_time from learn_answer
     </sql>
     </sql>
 
 
+    <select id="selectClassKnowledgeHeader" parameterType="Map" resultType="com.alibaba.fastjson2.JSONObject">
+        SELECT ROUND(SUM(IF(a.`state` = 1, 1, 0)) * 100 / COUNT(*)) rate
+          FROM `learn_answer` a
+          JOIN `learn_student` ls ON ls.`student_id` = a.`student_id`
+         WHERE a.`state` > 0 AND ls.`class_id` = #{classId}
+    </select>
+
+    <select id="selectClassKnowledgeDetail" parameterType="Map" resultType="com.alibaba.fastjson2.JSONObject">
+        SELECT ls.`student_id` id, u.`nick_name` `name`
+             , COUNT(*) total, SUM(IF(a.`state` = 1, 1, 0)) `value`, ROUND(SUM(IF(a.`state` = 1, 1, 0)) * 100 / COUNT(*)) rate
+        FROM `learn_answer` a
+        JOIN `learn_student` ls ON ls.`student_id` = a.`student_id`
+        JOIN `sys_user` u ON u.`user_id` = ls.`student_id`
+        WHERE a.`state` > 0 AND ls.`class_id` = #{classId}
+        GROUP BY ls.`student_id`, u.`nick_name`
+        ORDER BY rate DESC, a.`student_id`
+    </select>
+
+
     <select id="selectKnowledgeStats" parameterType="Map" resultType="com.alibaba.fastjson2.JSONObject">
     <select id="selectKnowledgeStats" parameterType="Map" resultType="com.alibaba.fastjson2.JSONObject">
         SELECT a.`knowledge_id` id , kt.`name`, a.`knowledge_id` IN <foreach item="id" collection="knowIds" open="(" separator="," close=")">#{id}</foreach> AS directed
         SELECT a.`knowledge_id` id , kt.`name`, a.`knowledge_id` IN <foreach item="id" collection="knowIds" open="(" separator="," close=")">#{id}</foreach> AS directed
         , COUNT(*) total, SUM(IF(a.`state` = 1, 1, 0)) `value`, round(SUM(IF(a.`state` = 1, 1, 0)) * 100 / COUNT(*)) rate
         , COUNT(*) total, SUM(IF(a.`state` = 1, 1, 0)) `value`, round(SUM(IF(a.`state` = 1, 1, 0)) * 100 / COUNT(*)) rate
@@ -37,6 +56,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         order by directed desc, rate desc, a.`knowledge_id`
         order by directed desc, rate desc, a.`knowledge_id`
     </select>
     </select>
 
 
+    <select id="selectClassQuestionStats" parameterType="Map" resultType="com.alibaba.fastjson2.JSONObject">
+        SELECT ls.`student_id` id, u.`nick_name` `name`, COUNT(*) total , COUNT(DISTINCT DATE(a.create_time)) `time`, ROUND(SUM(IF(a.`state` = 1, 1, 0)) * 100 / COUNT(*)) rate
+          FROM `learn_answer` a
+          JOIN `learn_student` ls ON ls.`student_id` = a.`student_id`
+          JOIN `sys_user` u ON ls.`student_id` = u.`user_id`
+         WHERE ls.`class_id` = #{classId}
+         GROUP BY ls.`student_id`
+         ORDER BY <choose><when test="sortField='total'">total</when><when test="sortField='time'">`time`</when><otherwise>rate</otherwise></choose> <if test="null != desc and desc">DESC</if>
+    </select>
+
     <select id="selectQuestionStatsHeader" parameterType="Map" resultType="com.alibaba.fastjson2.JSONObject">
     <select id="selectQuestionStatsHeader" parameterType="Map" resultType="com.alibaba.fastjson2.JSONObject">
         SELECT COUNT(*) total, SUM(IF(a.`state` = 1, 1, 0)) `value`, round(SUM(IF(a.`state` = 1, 1, 0)) * 100 / COUNT(*)) rate, COUNT(DISTINCT DATE(a.create_time)) `time`
         SELECT COUNT(*) total, SUM(IF(a.`state` = 1, 1, 0)) `value`, round(SUM(IF(a.`state` = 1, 1, 0)) * 100 / COUNT(*)) rate, COUNT(DISTINCT DATE(a.create_time)) `time`
           FROM `learn_answer` a
           FROM `learn_answer` a

+ 11 - 0
ie-system/src/main/resources/mapper/mingxue/CustomerVideoWatchesMapper.xml

@@ -23,6 +23,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select id, customerCode, section_id, duration, percent, course, title, pict, comment, time ,type from b_customer_video_watches
         select id, customerCode, section_id, duration, percent, course, title, pict, comment, time ,type from b_customer_video_watches
     </sql>
     </sql>
 
 
+    <select id="selectClassStats" parameterType="Map" resultType="com.alibaba.fastjson2.JSONObject">
+        SELECT ls.`student_id` id, u.`nick_name` name, COUNT(DISTINCT vw.`title`) total , ROUND(SUM(vw.`duration` * vw.`percent` / 100.0)) `value`
+          FROM `b_customer_video_watches` vw
+          JOIN `learn_student` ls ON vw.`customerCode` = ls.`student_id`
+          JOIN `sys_user` u ON ls.`student_id` = u.`user_id`
+         WHERE ls.`class_id` = #{classId}
+         GROUP BY ls.`student_id`
+         ORDER BY `value` <if test="null != desc and desc">DESC</if>
+    </select>
+
+
     <select id="selectLearnStatsHeader" parameterType="Map" resultType="com.alibaba.fastjson2.JSONObject">
     <select id="selectLearnStatsHeader" parameterType="Map" resultType="com.alibaba.fastjson2.JSONObject">
         SELECT COUNT(DISTINCT vw.`title`) total , round(SUM(vw.`duration` * vw.`percent` / 100.0)) `value`
         SELECT COUNT(DISTINCT vw.`title`) total , round(SUM(vw.`duration` * vw.`percent` / 100.0)) `value`
         FROM `b_customer_video_watches` vw
         FROM `b_customer_video_watches` vw