Browse Source

组卷老师端

mingfu 1 month ago
parent
commit
19b6f80235

+ 26 - 19
ie-admin/src/main/java/com/ruoyi/web/controller/front/FrontTeacherController.java

@@ -4,13 +4,17 @@ import com.alibaba.fastjson2.JSONObject;
 import com.google.common.collect.Lists;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.dz.domain.DzTeacher;
 import com.ruoyi.dz.service.IDzControlService;
 import com.ruoyi.dz.service.IDzSubjectService;
+import com.ruoyi.dz.service.IDzTeacherService;
 import com.ruoyi.learn.domain.LearnTest;
 import com.ruoyi.learn.service.ILearnTestService;
+import com.ruoyi.web.domain.TestRecordCond;
 import com.ruoyi.web.service.LearnStatService;
 import com.ruoyi.web.service.LearnTeacherService;
 import com.ruoyi.web.service.StudentService;
@@ -31,14 +35,16 @@ public class FrontTeacherController extends BaseController {
     private final LearnTeacherService learnTeacherService;
     private final StudentService studentService;
     private final LearnStatService learnStatService;
+    private final IDzTeacherService dzTeacherService;
 
-    public FrontTeacherController(IDzControlService dzControlService, IDzSubjectService dzSubjectService, ILearnTestService learnTestService, LearnTeacherService learnTeacherService, StudentService studentService, LearnStatService learnStatService) {
+    public FrontTeacherController(IDzControlService dzControlService, IDzSubjectService dzSubjectService, ILearnTestService learnTestService, LearnTeacherService learnTeacherService, StudentService studentService, LearnStatService learnStatService, IDzTeacherService dzTeacherService) {
         this.dzControlService = dzControlService;
         this.dzSubjectService = dzSubjectService;
         this.learnTestService = learnTestService;
         this.learnTeacherService = learnTeacherService;
         this.studentService = studentService;
         this.learnStatService = learnStatService;
+        this.dzTeacherService = dzTeacherService;
     }
 
     @ApiOperation("10 查询班级列表")
@@ -85,28 +91,29 @@ public class FrontTeacherController extends BaseController {
         return AjaxResult.success(studentService.getSimulateStat(examineeId));
     }
 
+    @ApiOperation("记录-测试卷")
+    @GetMapping("record/test/cond")
+    public R<TestRecordCond> getRecordTestCond()
+    {
+        DzTeacher dzTeacher = dzTeacherService.selectDzTeacherByTeacherId(SecurityUtils.getLoginUser().getUser().getUserTypeId());
+        TestRecordCond cond = JSONObject.parseObject(dzTeacher.getBuildInfo(), TestRecordCond.class);
+        return R.ok(null != cond ? cond : new TestRecordCond());
+    }
+
     @ApiOperation("记录-测试卷")
     @GetMapping("record/test")
-    public AjaxResult getRecordTest(Integer batch)
+    public AjaxResult getRecordTest(TestRecordCond cond)
     {
-        JSONObject result = new JSONObject();
-        result.put("total", 140);
-        result.put("done", 85);
-        result.put("undone", 3);
-        result.put("unsent", 3);
-        JSONObject data = JSONObject.of("name", "2501", "data", "242");
-        List<JSONObject> list = Lists.newArrayList(data);
-        result.put("list", list);
-        return AjaxResult.success(result);
-    }
-
-    @ApiOperation("记录-测试卷班级")
-    @GetMapping("record/test/{classId}")
-    public AjaxResult getRecordTestDetail(@ApiParam("班级id") @PathVariable("classId") Integer classId)
+        cond.setTeacherId(SecurityUtils.getLoginUser().getUser().getUserTypeId());
+        return AjaxResult.success(learnStatService.getTestRecord(cond));
+    }
+
+    @ApiOperation("记录-测试卷详情")
+    @GetMapping("record/test/detail")
+    public AjaxResult getRecordTestDetail(TestRecordCond cond)
     {
-        JSONObject data = JSONObject.of("seq", "1", "name", "XM", "total", "658", "study", 20, "rate", 39);
-        List<JSONObject> list = Lists.newArrayList(data);
-        return AjaxResult.success(list);
+        cond.setTeacherId(SecurityUtils.getLoginUser().getUser().getUserTypeId());
+        return AjaxResult.success(learnStatService.getTestStudentRecord(cond));
     }
 
     @ApiOperation("记录-计划刷题 有班级显示学生")

+ 41 - 0
ie-admin/src/main/java/com/ruoyi/web/domain/TestRecordCond.java

@@ -0,0 +1,41 @@
+package com.ruoyi.web.domain;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Data
+@ApiModel("组卷记录条件")
+@AllArgsConstructor
+@NoArgsConstructor
+public class TestRecordCond {
+    @ApiModelProperty("组卷方式")
+    String buildType;
+    @ApiModelProperty("批次")
+    Integer batchId;
+    @ApiModelProperty("班级")
+    Long classId;
+    @ApiModelProperty("科目")
+    Long subjectId;
+    @ApiModelProperty("组卷状态")
+    Integer buildStatus;
+    @JsonIgnore
+    Long teacherId;
+
+    public Map toMap() {
+        Map map = new HashMap();
+        map.put("buildType", buildType);
+        map.put("batchId", batchId);
+        map.put("classId", classId);
+        map.put("subjectId", subjectId);
+        map.put("buildStatus", buildStatus);
+        map.put("teacherId", teacherId);
+        return map;
+    }
+}

+ 17 - 0
ie-admin/src/main/java/com/ruoyi/web/service/LearnStatService.java

@@ -15,6 +15,7 @@ import com.ruoyi.learn.mapper.LearnAnswerMapper;
 import com.ruoyi.learn.mapper.LearnExamineeMapper;
 import com.ruoyi.learn.service.ILearnStudentService;
 import com.ruoyi.mingxue.mapper.CustomerVideoWatchesMapper;
+import com.ruoyi.web.domain.TestRecordCond;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
@@ -39,6 +40,22 @@ public class LearnStatService {
         return examineeMapper.selectStudentPractices(studentId, paperType.getVal());
     }
 
+
+    public List<JSONObject> getTestRecord(TestRecordCond cond) {
+        JSONObject stats = examineeMapper.selectTestStats(cond.toMap());
+        List<JSONObject> dataList = Lists.newArrayList();
+        dataList.add(JSONObject.of("buildStatus", null, "count", stats.getInteger("total")));
+        dataList.add(JSONObject.of("buildStatus", 10, "count", stats.getInteger("undirect")));
+        dataList.add(JSONObject.of("buildStatus", 20, "count", stats.getInteger("unsend")));
+        dataList.add(JSONObject.of("buildStatus", 30, "count", stats.getInteger("undone")));
+        dataList.add(JSONObject.of("buildStatus", 40, "count", stats.getInteger("done")));
+        return dataList;
+    }
+
+    public List<JSONObject> getTestStudentRecord(TestRecordCond cond) {
+        return examineeMapper.selectTestStudents(cond.toMap());
+    }
+
     public List<JSONObject> getSimulatedClassRecord(Long teacherId) {
         return examineeMapper.selectSimulatedStats(teacherId);
     }

+ 15 - 1
ie-admin/src/main/java/com/ruoyi/web/service/LearnTeacherService.java

@@ -14,7 +14,9 @@ import com.ruoyi.common.utils.NumberUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.dz.domain.DzClasses;
 import com.ruoyi.dz.domain.DzSubject;
+import com.ruoyi.dz.domain.DzTeacher;
 import com.ruoyi.dz.mapper.DzClassesMapper;
+import com.ruoyi.dz.mapper.DzTeacherMapper;
 import com.ruoyi.dz.service.IDzSubjectService;
 import com.ruoyi.enums.ExamineeStatus;
 import com.ruoyi.enums.PaperStatus;
@@ -26,6 +28,7 @@ import com.ruoyi.learn.mapper.*;
 import com.ruoyi.learn.service.ILearnTestService;
 import com.ruoyi.syzy.domain.BBusiWishUniversities;
 import com.ruoyi.syzy.mapper.BBusiWishUniversitiesMapper;
+import com.ruoyi.web.domain.TestRecordCond;
 import lombok.Data;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -57,8 +60,9 @@ public class LearnTeacherService {
     private final IDzSubjectService dzSubjectService;
     private final ILearnTestService learnTestService;
     private final LearnAnswerMapper learnAnswerMapper;
+    private final DzTeacherMapper dzTeacherMapper;
 
-    public LearnTeacherService(DzClassesMapper dzClassesMapper, LearnKnowledgeTreeMapper learnKnowledgeTreeMapper, LearnStudentMapper learnStudentMapper, AMarjorPlanMapper marjorPlanMapper, BBusiWishUniversitiesMapper busiWishUniversitiesMapper, LearnDirectedKnowledgeMapper learnDirectedKnowledgeMapper, PaperService paperService, CommService commService, LearnTestPaperMapper learnTestPaperMapper, LearnQuestionsMapper learnQuestionsMapper, LearnKnowledgeCourseMapper learnKnowledgeCourseMapper, LearnTestStudentMapper learnTestStudentMapper, IDzSubjectService dzSubjectService, ILearnTestService learnTestService, LearnAnswerMapper learnAnswerMapper) {
+    public LearnTeacherService(DzClassesMapper dzClassesMapper, LearnKnowledgeTreeMapper learnKnowledgeTreeMapper, LearnStudentMapper learnStudentMapper, AMarjorPlanMapper marjorPlanMapper, BBusiWishUniversitiesMapper busiWishUniversitiesMapper, LearnDirectedKnowledgeMapper learnDirectedKnowledgeMapper, PaperService paperService, CommService commService, LearnTestPaperMapper learnTestPaperMapper, LearnQuestionsMapper learnQuestionsMapper, LearnKnowledgeCourseMapper learnKnowledgeCourseMapper, LearnTestStudentMapper learnTestStudentMapper, IDzSubjectService dzSubjectService, ILearnTestService learnTestService, LearnAnswerMapper learnAnswerMapper, DzTeacherMapper dzTeacherMapper) {
         this.dzClassesMapper = dzClassesMapper;
         this.learnKnowledgeTreeMapper = learnKnowledgeTreeMapper;
         this.learnStudentMapper = learnStudentMapper;
@@ -74,6 +78,7 @@ public class LearnTeacherService {
         this.dzSubjectService = dzSubjectService;
         this.learnTestService = learnTestService;
         this.learnAnswerMapper = learnAnswerMapper;
+        this.dzTeacherMapper = dzTeacherMapper;
     }
 
     public List<LearnQuestions> getQuestionTypes(Long subjectId, Collection<Long> knowledgeIds) {
@@ -164,6 +169,13 @@ public class LearnTeacherService {
         return dk.getUniversityId() + "_" + dk.getExamType() + "_" + StringUtils.trimToEmpty(dk.getDirectKey());
     }
 
+    public void updateBuildInfo(Long teacherId, TestRecordCond cond) {
+        DzTeacher upTeacher = new DzTeacher();
+        upTeacher.setTeacherId(teacherId);
+        upTeacher.setBuildInfo(JSONObject.toJSONString(cond));
+        dzTeacherMapper.updateDzTeacher(upTeacher);
+    }
+
     @Transactional(rollbackFor = Exception.class)
     public String buildPapersDirect(TestPaperVO.TestPaperBuildReq req) {
         // 查询待生成或发布的学生列表
@@ -198,6 +210,7 @@ public class LearnTeacherService {
                 buildPapersDirect(req, universityId, req.getExamType(), directedKnowledgeMap, directedStudentsMap, directPaperMap);
             }
         }
+        updateBuildInfo(req.getTeacherId(), new TestRecordCond(req.getBuildType(), req.getBatchId(), req.getClassId(), req.getSubjectId(), null, null));
         return "";
     }
 
@@ -337,6 +350,7 @@ public class LearnTeacherService {
             lts.setStatus(ExamineeStatus.Sign.getVal());
             learnTestStudentMapper.insertLearnTestStudent(lts);
         }
+        updateBuildInfo(req.getTeacherId(), new TestRecordCond(req.getBuildType(), req.getBatchId(), req.getClassId(), req.getSubjectId(), null, null));
         return "";
     }
 

+ 11 - 0
ie-system/src/main/java/com/ruoyi/dz/domain/DzTeacher.java

@@ -56,6 +56,9 @@ public class DzTeacher extends BaseEntity
     
     @Excel(name = "代理商")
     private String agentName;
+
+    @Excel(name = "组建条件")
+    private String buildInfo;
     
     private String status;
     
@@ -229,6 +232,14 @@ public class DzTeacher extends BaseEntity
         this.classIds = classIds;
     }
 
+    public String getBuildInfo() {
+        return buildInfo;
+    }
+
+    public void setBuildInfo(String buildInfo) {
+        this.buildInfo = buildInfo;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 4 - 0
ie-system/src/main/java/com/ruoyi/learn/mapper/LearnExamineeMapper.java

@@ -2,6 +2,7 @@ package com.ruoyi.learn.mapper;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.learn.domain.LearnExaminee;
@@ -15,6 +16,9 @@ import org.apache.ibatis.annotations.Param;
  */
 public interface LearnExamineeMapper 
 {
+    public JSONObject selectTestStats(Map cond);
+    public List<JSONObject> selectTestStudents(Map cond);
+
     public List<JSONObject> selectSimulatedStats(@Param("teacherId") Long teacherId);
     public List<JSONObject> selectSimulatedStudentStats(@Param("classId") Long classId);
     public List<JSONObject> selectSimulatedStuSubjectStats(@Param("studentId") Long studentId);

+ 5 - 1
ie-system/src/main/resources/mapper/dz/DzTeacherMapper.xml

@@ -11,13 +11,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="agentId"    column="agent_id"    />
         <result property="schoolId"    column="school_id"    />
         <result property="campusId"    column="campus_id"    />
+        <result property="buildInfo"    column="build_info"    />
         <result property="name"    column="name"    />
         <result property="deptName"    column="dept_name"    />
         <result property="schoolName"    column="school_name"    />
     </resultMap>
 
     <sql id="selectDzTeacherVo">
-        select t1.teacher_id, t1.user_id, t1.school_id, t1.campus_id, t1.dept_id, t1.agent_id, t1.name,
+        select t1.teacher_id, t1.user_id, t1.school_id, t1.campus_id, t1.dept_id, t1.agent_id, t1.build_info, t1.name,
         t2.dept_name ,t3.name school_name
         from dz_teacher t1
         left join sys_dept t2 on t1.dept_id = t2.dept_id
@@ -51,6 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="schoolId != null">school_id,</if>
             <if test="campusId != null">campus_id,</if>
             <if test="name != null">name,</if>
+            <if test="buildInfo != null">build_info,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="userId != null">#{userId},</if>
@@ -59,6 +61,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="schoolId != null">#{schoolId},</if>
             <if test="campusId != null">#{campusId},</if>
             <if test="name != null">#{name},</if>
+            <if test="buildInfo != null">#{buildInfo},</if>
          </trim>
     </insert>
 
@@ -71,6 +74,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             school_id = #{schoolId},
             campus_id = #{campusId},
             <if test="name != null">name = #{name},</if>
+            <if test="buildInfo != null">build_info = #{buildInfo},</if>
         </trim>
         where teacher_id = #{teacherId}
     </update>

+ 21 - 0
ie-system/src/main/resources/mapper/learn/LearnExamineeMapper.xml

@@ -58,6 +58,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         order by examinee_id desc
     </select>
 
+    <select id="selectTestStats" parameterType="Map" resultType="com.alibaba.fastjson2.JSONObject">
+       SELECT COUNT(*) total, SUM(IF(ls.`major_plan_id` IS NULL, 1, 0)) undirect, SUM(IF(ls.`major_plan_id` IS NOT NULL AND ts.`id` IS NULL, 1, 0)) unsend, SUM(IF(ts.`status` IN (1,2,3), 1, 0)) undone, SUM(IF(ts.`status` >= 4, 1, 0)) done
+         FROM `dz_teacher_class` tc
+         JOIN `learn_student` ls ON ls.`class_id` = tc.`class_id`
+         JOIN `dz_classes` c ON ls.`class_id` = c.`class_id`
+         LEFT JOIN `learn_test_student` ts ON ts.`batch_id` = #{batchId} AND ts.`student_id` = ls.`student_id` AND ts.`build_type` = #{buildType} AND ts.`subject_id` = #{subjectId}
+        WHERE tc.`teacher_id` = #{teacherId} and tc.`class_id` = #{classId}
+    </select>
+
+    <select id="selectTestStudents" parameterType="Map" resultType="com.alibaba.fastjson2.JSONObject">
+       SELECT ls.`student_id` studentId, c.`name` className, u.`nick_name` nickName,
+               case when ls.`major_plan_id` is null then '未组卷未定向' when ls.`major_plan_id` IS NOT NULL AND ts.`id` IS NULL then '未组卷定向' when ts.`status` IN (1,2,3) then '组卷未完成' else '组卷完成'  end as state
+         FROM `dz_teacher_class` tc
+         JOIN `learn_student` ls ON ls.`class_id` = tc.`class_id`
+         JOIN `dz_classes` c ON ls.`class_id` = c.`class_id`
+         LEFT JOIN `learn_test_student` ts ON ts.`batch_id` = #{batchId} AND ts.`student_id` = ls.`student_id` AND ts.`build_type` = #{buildType} AND ts.`subject_id` = #{subjectId}
+         LEFT JOIN `sys_user` u ON u.`user_id` = ls.`student_id`
+        WHERE tc.`teacher_id` = #{teacherId} and tc.`class_id` = #{classId}
+         AND #{buildStatus} = case when ls.`major_plan_id` is null then 10 when ls.`major_plan_id` IS NOT NULL AND ts.`id` IS NULL then 20 when ts.`status` IN (1,2,3) then 30 else 40 end
+    </select>
+
     <select id="selectSimulatedStats" parameterType="Map" resultType="com.alibaba.fastjson2.JSONObject">
         SELECT ls.`class_id` `id`, c.`name`, COUNT(DISTINCT ls.`student_id`) `total`, COUNT(DISTINCT e2.`student_id`) `value`
           FROM `dz_teacher_class` tc

+ 5 - 1
ie-system/src/main/resources/mapper/learn/LearnStudentMapper.xml

@@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <resultMap type="LearnStudent" id="LearnStudentResult">
         <result property="studentId"    column="student_id"    />
         <result property="classId"    column="class_id"    />
+        <result property="schoolId"    column="school_id"    />
         <result property="campusId"    column="campus_id"    />
         <result property="universityId"    column="university_id"    />
         <result property="directKey"    column="direct_key"    />
@@ -16,7 +17,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectLearnStudentVo">
-        select student_id, class_id, campus_id, university_id,direct_key, modules, major_group,major_plan_id from learn_student
+        select student_id, class_id, school_id,campus_id, university_id,direct_key, modules, major_group,major_plan_id from learn_student
     </sql>
 
     <select id="selectLearnStudentList" parameterType="LearnStudent" resultMap="LearnStudentResult">
@@ -64,6 +65,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="studentId != null">student_id,</if>
             <if test="classId != null">class_id,</if>
+            <if test="schoolId != null">school_id,</if>
             <if test="campusId != null">campus_id,</if>
             <if test="universityId != null">university_id,</if>
             <if test="directKey != null">direct_key,</if>
@@ -74,6 +76,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="studentId != null">#{studentId},</if>
             <if test="classId != null">#{classId},</if>
+            <if test="schoolId != null">#{schoolId},</if>
             <if test="campusId != null">#{campusId},</if>
             <if test="universityId != null">#{universityId},</if>
             <if test="directKey != null">#{directKey},</if>
@@ -87,6 +90,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         update learn_student
         <trim prefix="SET" suffixOverrides=",">
             <if test="classId != null">class_id = #{classId},</if>
+            <if test="schoolId != null">school_id = #{schoolId},</if>
             <if test="campusId != null">campus_id = #{campusId},</if>
             <if test="universityId != null">university_id = #{universityId},</if>
             <if test="directKey != null">direct_key = #{directKey},</if>