Jelajahi Sumber

测试卷接口调整及一些问题调整

mingfu 1 bulan lalu
induk
melakukan
489ed97da2

+ 11 - 0
ie-admin/src/main/java/com/ruoyi/web/controller/dz/DzCardsController.java

@@ -1,5 +1,6 @@
 package com.ruoyi.web.controller.dz;
 
+import java.util.Arrays;
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.ValidationException;
@@ -13,9 +14,12 @@ import com.ruoyi.dz.service.IDzAgentService;
 import com.ruoyi.enums.CardAction;
 import com.ruoyi.enums.CardType;
 import com.ruoyi.enums.UserTypeEnum;
+import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.web.service.SysLoginService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -43,6 +47,10 @@ public class DzCardsController extends BaseController
     private IDzCardsService dzCardsService;
     @Autowired
     private IDzAgentService agentService;
+    @Autowired
+    private ISysUserService sysUserService;
+    @Autowired
+    private SysLoginService sysLoginService;
 
     /**
      * 查询学习卡列表
@@ -194,6 +202,9 @@ public class DzCardsController extends BaseController
     public AjaxResult changeCard(@ApiParam("操作") @RequestParam CardAction action, @ApiParam("卡ID") @RequestParam Long[] cardIds)
     {
         dzCardsService.changeCard(action, cardIds);
+        if (CardAction.Close.equals(action) && ArrayUtils.isNotEmpty(cardIds)) {
+            sysLoginService.resetTokens(sysUserService.selectUserByCardIds(Arrays.asList(cardIds)));
+        }
         return AjaxResult.success();
     }
 

+ 12 - 11
ie-admin/src/main/java/com/ruoyi/web/controller/front/FrontStudentController.java

@@ -24,10 +24,7 @@ import com.ruoyi.ie.domain.AMarjorPlan;
 import com.ruoyi.ie.service.IAEnrollUniversityService;
 import com.ruoyi.ie.service.IAMarjorPlanService;
 import com.ruoyi.learn.domain.*;
-import com.ruoyi.learn.service.ILearnDirectedKnowledgeService;
-import com.ruoyi.learn.service.ILearnExamineeService;
-import com.ruoyi.learn.service.ILearnPlanService;
-import com.ruoyi.learn.service.ILearnPlanStudyService;
+import com.ruoyi.learn.service.*;
 import com.ruoyi.sy.service.ISyMajorService;
 import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.web.service.ExamService;
@@ -66,10 +63,10 @@ public class FrontStudentController extends BaseController {
     private final LearnTeacherService learnTeacherService;
     private final LearnStatService learnStatService;
     private final ExamService examService;
-    private final ILearnExamineeService learnExamineeService;
+    private final ILearnTestStudentService learnTestStudentService;
 
     public FrontStudentController(IDzControlService dzControlService, IAEnrollUniversityService universityService, ISyMajorService syMajorService, ISysUserService sysUserService,
-                                  ILearnPlanService learnPlanService, ILearnPlanStudyService learnPlanStudyService, IAMarjorPlanService marjorPlanService, ILearnDirectedKnowledgeService learnDirectedKnowledgeService, StudentService studentService, IDzSubjectService dzSubjectService, LearnTeacherService learnTeacherService, LearnStatService learnStatService, ExamService examService, ILearnExamineeService learnExamineeService) {
+                                  ILearnPlanService learnPlanService, ILearnPlanStudyService learnPlanStudyService, IAMarjorPlanService marjorPlanService, ILearnDirectedKnowledgeService learnDirectedKnowledgeService, StudentService studentService, IDzSubjectService dzSubjectService, LearnTeacherService learnTeacherService, LearnStatService learnStatService, ExamService examService, ILearnTestStudentService learnTestStudentService) {
         this.dzControlService = dzControlService;
         this.universityService = universityService;
         this.syMajorService = syMajorService;
@@ -83,7 +80,7 @@ public class FrontStudentController extends BaseController {
         this.learnTeacherService = learnTeacherService;
         this.learnStatService = learnStatService;
         this.examService = examService;
-        this.learnExamineeService = learnExamineeService;
+        this.learnTestStudentService = learnTestStudentService;
     }
 
     @ApiOperation("02 全部科目")
@@ -340,16 +337,20 @@ public class FrontStudentController extends BaseController {
     @GetMapping("record/test")
     public TableDataInfo getRecordTest()
     {
-        JSONObject data = JSONObject.of("name", "考试", "date", "2025-09-26 15:46", "total", 300, "score", 80, "rate", 82);
-        List<JSONObject> list = Lists.newArrayList(data);
-        return getDataTable(list);
+        SysUser sysUser = SecurityUtils.getLoginUser().getUser();
+        startPage();
+        return getDataTable(studentService.getTestList(sysUser.getUserId()));
     }
 
     @ApiOperation("54 记录-测试卷结果")
     @GetMapping("record/test/{recordId}")
     public AjaxResult getTestDetail(@ApiParam("记录ID") @PathVariable("recordId") Long recordId)
     {
-        return AjaxResult.success();
+        LearnTestStudent learnTestStudent = learnTestStudentService.selectLearnTestStudentById(recordId);
+        if(null == learnTestStudent || null == learnTestStudent.getExamineeId()) {
+            return AjaxResult.error("记录无效");
+        }
+        return AjaxResult.success(examService.loadExaminee(learnTestStudent.getExamineeId(), false));
     }
 
     @ApiOperation("55 记录-计划刷题")

+ 2 - 2
ie-admin/src/main/java/com/ruoyi/web/controller/learn/LearnTestStudentController.java

@@ -67,7 +67,7 @@ public class LearnTestStudentController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('learn:test_student:query')")
     @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") String id)
+    public AjaxResult getInfo(@PathVariable("id") Long id)
     {
         return success(learnTestStudentService.selectLearnTestStudentById(id));
     }
@@ -100,7 +100,7 @@ public class LearnTestStudentController extends BaseController
     @PreAuthorize("@ss.hasPermi('learn:test_student:remove')")
     @Log(title = "测试学生", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable String[] ids)
+    public AjaxResult remove(@PathVariable Long[] ids)
     {
         return toAjax(learnTestStudentService.deleteLearnTestStudentByIds(ids));
     }

+ 32 - 2
ie-admin/src/main/java/com/ruoyi/web/service/ExamService.java

@@ -44,7 +44,8 @@ public class ExamService {
     private final LearnQuestionsMapper learnQuestionsMapper;
     private final IDzSubjectService dzSubjectService;
     private final LearnKnowledgeCourseMapper learnKnowledgeCourseMapper;
-    private Set<PaperType> paperTypeSet = Sets.newHashSet(PaperType.Real, PaperType.Custom, PaperType.Test);
+    private final LearnTestStudentMapper learnTestStudentMapper;
+    private Set<PaperType> paperTypeSet = Sets.newHashSet(PaperType.Real, PaperType.Custom);
     private final LearnPaperMapper paperMapper;
     private final LearnKnowledgeTreeMapper knowledgeTreeMapper;
     private final LearnExamineeMapper examineeMapper;
@@ -55,7 +56,7 @@ public class ExamService {
     private final IAMarjorPlanService marjorPlanService;
     private final ISysUserService sysUserService;
 
-    public ExamService(LearnPaperMapper paperMapper, LearnKnowledgeTreeMapper knowledgeTreeMapper, LearnExamineeMapper examineeMapper, ILearnPaperService learnPaperService, PaperService paperService, IAMarjorPlanService marjorPlanService, LearnAnswerMapper learnAnswerMapper, LearnExamineeMapper learnExamineeMapper, ISysUserService sysUserService, LearnStudentMapper learnStudentMapper, ILearnPlanService learnPlanService, LearnQuestionsMapper learnQuestionsMapper, IDzSubjectService dzSubjectService, LearnWrongBookMapper wrongBookMapper, LearnWrongDetailMapper wrongDetailMapper, LearnKnowledgeCourseMapper learnKnowledgeCourseMapper) {
+    public ExamService(LearnPaperMapper paperMapper, LearnKnowledgeTreeMapper knowledgeTreeMapper, LearnExamineeMapper examineeMapper, ILearnPaperService learnPaperService, PaperService paperService, IAMarjorPlanService marjorPlanService, LearnAnswerMapper learnAnswerMapper, LearnExamineeMapper learnExamineeMapper, ISysUserService sysUserService, LearnStudentMapper learnStudentMapper, ILearnPlanService learnPlanService, LearnQuestionsMapper learnQuestionsMapper, IDzSubjectService dzSubjectService, LearnWrongBookMapper wrongBookMapper, LearnWrongDetailMapper wrongDetailMapper, LearnKnowledgeCourseMapper learnKnowledgeCourseMapper, LearnTestStudentMapper learnTestStudentMapper) {
         this.paperMapper = paperMapper;
         this.knowledgeTreeMapper = knowledgeTreeMapper;
         this.examineeMapper = examineeMapper;
@@ -72,6 +73,7 @@ public class ExamService {
         this.wrongBookMapper = wrongBookMapper;
         this.wrongDetailMapper = wrongDetailMapper;
         this.learnKnowledgeCourseMapper = learnKnowledgeCourseMapper;
+        this.learnTestStudentMapper = learnTestStudentMapper;
     }
 
     /**
@@ -103,6 +105,13 @@ public class ExamService {
                 throw new RuntimeException("请先定设置定向学习" + exist.getUserId());
             }
             return openExaminee(ls, subjectId, exist);
+        } else if(PaperType.Test.equals(paperType)) {
+            SysUser exist = sysUserService.selectUserById(SecurityUtils.getUserId());
+            LearnTestStudent ts = learnTestStudentMapper.selectLearnTestStudentById(relatedId);
+            if(null == ts || !ts.getStudentId().equals(exist.getUserId())) {
+                throw new RuntimeException("无效批次卷" + relatedId);
+            }
+            return openExamineeForTest(ts, exist);
         }
         throw new RuntimeException("错误类型: " + paperType);
     }
@@ -255,7 +264,14 @@ public class ExamService {
                 calculateWrongAnswers(exitExaminee, questionMap, answersList, PaperType.Course.name());
             } else if(PaperType.Simulated.getVal().equals(exitExaminee.getPaperType())) {
                 calculateWrongAnswers(exitExaminee, questionMap, answersList, PaperType.Simulated.name());
+            } else if(PaperType.Test.getVal().equals(exitExaminee.getPaperType())) {
+                calculateWrongAnswers(exitExaminee, questionMap, answersList, PaperType.Test.name());
+                LearnTestStudent uts = new LearnTestStudent();
+                uts.setExamineeId(answerSheet.getExamineeId());
+                uts.setStatus(answerSheet.getState());
+                learnTestStudentMapper.updateExamineeStatus(uts);
             }
+
         }
     }
 
@@ -363,6 +379,20 @@ public class ExamService {
         }
         return buildAnswerSheet(paper, learnExaminee);
     }
+    @Transactional
+    public AnswerSheet openExamineeForTest(LearnTestStudent ts, SysUser sysUser) {
+        if(null != ts.getExamineeId()) {
+            return loadExaminee(ts.getExamineeId(), true);
+        }
+        AnswerSheet answerSheet = openExaminee(PaperType.Test, ts.getPaperId(), ts.getStudentId());
+
+        LearnTestStudent uts = new LearnTestStudent();
+        uts.setId(ts.getId());
+        uts.setExamineeId(answerSheet.getExamineeId());
+        uts.setStatus(answerSheet.getState());
+        learnTestStudentMapper.updateLearnTestStudent(uts);
+        return answerSheet;
+    }
 
     private AnswerSheet openExaminee(LearnStudent ls, Long subjectId, SysUser sysUser) {
         if(StringUtils.isNotBlank(ls.getModules()) && ls.getModules().equals("技能展示/实践操作")) {

+ 6 - 5
ie-admin/src/main/java/com/ruoyi/web/service/LearnStatService.java

@@ -1,5 +1,6 @@
 package com.ruoyi.web.service;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Dict;
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.util.DateUtils;
@@ -117,14 +118,14 @@ public class LearnStatService {
         Calendar cal  = Calendar.getInstance();
         if(NumberUtils.isPositive(month)) {
             cal.set(year, month.intValue() - 1, 1);
-            beginDate = cal.getTime();
+            beginDate = DateUtil.beginOfDay(cal.getTime());
             cal.add(Calendar.MONTH, 1);
-            endDate = cal.getTime();
+            endDate = DateUtil.beginOfDay(cal.getTime());
         } else {
             cal.set(year, 0, 1);
-            beginDate = cal.getTime();
+            beginDate = DateUtil.beginOfDay(cal.getTime());
             cal.add(Calendar.YEAR, 1);
-            endDate = cal.getTime();
+            endDate = DateUtil.beginOfDay(cal.getTime());
         }
 
         Map cond = Dict.create().set("studentId", studentId).set("beginDate", beginDate).set("endDate", endDate);
@@ -139,7 +140,7 @@ public class LearnStatService {
         List<JSONObject> list = Lists.newArrayList();
         answerMapper.selectQuestionStatsDetail(cond).forEach(s -> {
             CommonUtils.normalRate(s);
-            JSONObject data = JSONObject.of("date", DateUtils.format(s.getDate("time"), "yyyy-MM-dd"), "study", s.getString("value"), "rate", s.getString("rate"));
+            JSONObject data = JSONObject.of("date", DateUtils.format(s.getDate("time"), "yyyy-MM-dd"), "study", s.getString("total"), "rate", s.getString("rate"));
             list.add(data);
         });
         result.put("list", list);

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

@@ -24,6 +24,7 @@ import org.apache.commons.compress.utils.Lists;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -109,4 +110,20 @@ public class StudentService {
 
         return list;
     }
+
+    public List<JSONObject> getTestList(Long studentId) {
+        List<JSONObject> list = learnTestStudentMapper.selectExamineeTestList(studentId);
+        list.forEach(t -> {
+            DzSubject dzSubject = dzSubjectService.selectDzSubjectBySubjectId(t.getLong("subjectId"));
+            t.put("subjectName", dzSubject.getSubjectName());
+            Date date = t.getDate("endTime");
+            if(null == date) {
+                date = t.getDate("beginTime");
+            }
+            t.remove("beginTime");
+            t.remove("endTime");
+            t.put("date", DateUtils.format(date, "yyyy-MM-dd HH:mm"));
+        });
+        return list;
+    }
 }

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

@@ -86,7 +86,7 @@ public class UserDetailsServiceImpl implements UserDetailsService
             passwordService.validate(user);
         }
         LoginCard card = new LoginCard();
-        if(null != user.getCardId() && UserRegStatus.Student.equals(user.getRegStatus())) {
+        if(null != user.getCardId()) {
             DzCards dzCards = dzCardsService.selectDzCardsByCardId(user.getCardId());
             BeanUtils.copyProperties(dzCards, card, "password");
             if(null != dzCards.getSchoolId()) {
@@ -96,9 +96,9 @@ public class UserDetailsServiceImpl implements UserDetailsService
                 card.setClassName(dzClassesMapper.selectDzClassesByClassId(dzCards.getClassId()).getName());
             }
             Date nowDate = Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant());
-            if (CardDistributeStatus.Close.getVal().equals(dzCards.getDistributeStatus())
+            if (UserRegStatus.Student.equals(user.getRegStatus()) && (CardDistributeStatus.Close.getVal().equals(dzCards.getDistributeStatus())
                     || !CardTimeStatus.Valid.getVal().equals(dzCards.getTimeStatus())
-                    || (null != dzCards.getOutDate() && dzCards.getOutDate().getTime() < nowDate.getTime())) {
+                    || (null != dzCards.getOutDate() && dzCards.getOutDate().getTime() < nowDate.getTime()))) {
                 // 过期后处理降级
                 SysUser upUser = new SysUser();
                 upUser.setUserId(user.getUserId());

+ 11 - 10
ie-system/src/main/java/com/ruoyi/dz/domain/DzCards.java

@@ -2,6 +2,7 @@ package com.ruoyi.dz.domain;
 
 import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
@@ -24,8 +25,8 @@ public class DzCards extends BaseEntity
     @Excel(name = "账号")
     private String cardNo;
 
-    private String cardNoBegin;
-    private String cardNoEnd;
+    private String begin;
+    private String end;
 
     @JsonFormat(pattern = "yyyy-MM-dd")
     private String assignTimeBegin;
@@ -530,20 +531,20 @@ public class DzCards extends BaseEntity
         this.days = days;
     }
 
-    public String getCardNoBegin() {
-        return cardNoBegin;
+    public String getBegin() {
+        return begin;
     }
 
-    public void setCardNoBegin(String cardNoBegin) {
-        this.cardNoBegin = cardNoBegin;
+    public void setBegin(String begin) {
+        this.begin = begin;
     }
 
-    public String getCardNoEnd() {
-        return cardNoEnd;
+    public String getEnd() {
+        return end;
     }
 
-    public void setCardNoEnd(String cardNoEnd) {
-        this.cardNoEnd = cardNoEnd;
+    public void setEnd(String end) {
+        this.end = end;
     }
 
     public String getAssignTimeBegin() {

+ 5 - 3
ie-system/src/main/java/com/ruoyi/learn/domain/LearnTestStudent.java

@@ -4,6 +4,7 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
+import org.springframework.data.annotation.Id;
 
 /**
  * 测试学生对象 learn_test_student
@@ -16,7 +17,8 @@ public class LearnTestStudent extends BaseEntity
     private static final long serialVersionUID = 1L;
 
     /** 批次学生id */
-    private String id;
+    @Id
+    private Long id;
 
     /** 批次id */
     @Excel(name = "批次id")
@@ -56,12 +58,12 @@ public class LearnTestStudent extends BaseEntity
 
     private Integer count;
 
-    public void setId(String id) 
+    public void setId(Long id)
     {
         this.id = id;
     }
 
-    public String getId() 
+    public Long getId()
     {
         return id;
     }

+ 8 - 4
ie-system/src/main/java/com/ruoyi/learn/mapper/LearnTestStudentMapper.java

@@ -3,7 +3,9 @@ package com.ruoyi.learn.mapper;
 import java.util.List;
 import java.util.Map;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.learn.domain.LearnTestStudent;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 测试学生Mapper接口
@@ -13,6 +15,8 @@ import com.ruoyi.learn.domain.LearnTestStudent;
  */
 public interface LearnTestStudentMapper 
 {
+    List<JSONObject> selectExamineeTestList(@Param("studentId") Long studentId);
+
     List<LearnTestStudent> selectStatsForStudent(Long studentId);
 
     /**
@@ -21,7 +25,7 @@ public interface LearnTestStudentMapper
      * @param id 测试学生主键
      * @return 测试学生
      */
-    public LearnTestStudent selectLearnTestStudentById(String id);
+    public LearnTestStudent selectLearnTestStudentById(Long id);
 
     /**
      * 查询测试学生列表
@@ -46,14 +50,14 @@ public interface LearnTestStudentMapper
      * @return 结果
      */
     public int updateLearnTestStudent(LearnTestStudent learnTestStudent);
-
+    public int updateExamineeStatus(LearnTestStudent learnTestStudent);
     /**
      * 删除测试学生
      * 
      * @param id 测试学生主键
      * @return 结果
      */
-    public int deleteLearnTestStudentById(String id);
+    public int deleteLearnTestStudentById(Long id);
 
     /**
      * 批量删除测试学生
@@ -61,5 +65,5 @@ public interface LearnTestStudentMapper
      * @param ids 需要删除的数据主键集合
      * @return 结果
      */
-    public int deleteLearnTestStudentByIds(String[] ids);
+    public int deleteLearnTestStudentByIds(Long[] ids);
 }

+ 3 - 3
ie-system/src/main/java/com/ruoyi/learn/service/ILearnTestStudentService.java

@@ -17,7 +17,7 @@ public interface ILearnTestStudentService
      * @param id 测试学生主键
      * @return 测试学生
      */
-    public LearnTestStudent selectLearnTestStudentById(String id);
+    public LearnTestStudent selectLearnTestStudentById(Long id);
 
     /**
      * 查询测试学生列表
@@ -49,7 +49,7 @@ public interface ILearnTestStudentService
      * @param ids 需要删除的测试学生主键集合
      * @return 结果
      */
-    public int deleteLearnTestStudentByIds(String[] ids);
+    public int deleteLearnTestStudentByIds(Long[] ids);
 
     /**
      * 删除测试学生信息
@@ -57,5 +57,5 @@ public interface ILearnTestStudentService
      * @param id 测试学生主键
      * @return 结果
      */
-    public int deleteLearnTestStudentById(String id);
+    public int deleteLearnTestStudentById(Long id);
 }

+ 3 - 3
ie-system/src/main/java/com/ruoyi/learn/service/impl/LearnTestStudentServiceImpl.java

@@ -27,7 +27,7 @@ public class LearnTestStudentServiceImpl implements ILearnTestStudentService
      * @return 测试学生
      */
     @Override
-    public LearnTestStudent selectLearnTestStudentById(String id)
+    public LearnTestStudent selectLearnTestStudentById(Long id)
     {
         return learnTestStudentMapper.selectLearnTestStudentById(id);
     }
@@ -76,7 +76,7 @@ public class LearnTestStudentServiceImpl implements ILearnTestStudentService
      * @return 结果
      */
     @Override
-    public int deleteLearnTestStudentByIds(String[] ids)
+    public int deleteLearnTestStudentByIds(Long[] ids)
     {
         return learnTestStudentMapper.deleteLearnTestStudentByIds(ids);
     }
@@ -88,7 +88,7 @@ public class LearnTestStudentServiceImpl implements ILearnTestStudentService
      * @return 结果
      */
     @Override
-    public int deleteLearnTestStudentById(String id)
+    public int deleteLearnTestStudentById(Long id)
     {
         return learnTestStudentMapper.deleteLearnTestStudentById(id);
     }

+ 4 - 0
ie-system/src/main/resources/mapper/dz/DzCardsMapper.xml

@@ -81,6 +81,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="settlementTime != null "> and settlement_time = #{settlementTime}</if>
             <if test="refundTime != null "> and refund_time = #{refundTime}</if>
             <if test="closeTime != null "> and close_time = #{closeTime}</if>
+            <if test="begin != null "> and card_no &gt;= #{begin}</if>
+            <if test="end != null "> and card_no &lt;= #{end}</if>
+            <if test="assignTimeBegin != null "> and date(distribute_time) &gt;= date(#{assignTimeBegin})</if>
+            <if test="assignTimeEnd != null "> and date(distribute_time) &lt;= date(#{assignTimeEnd})</if>
         </where>
         order by card_id desc
     </select>

+ 19 - 4
ie-system/src/main/resources/mapper/learn/LearnTestStudentMapper.xml

@@ -5,7 +5,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 <mapper namespace="com.ruoyi.learn.mapper.LearnTestStudentMapper">
     
     <resultMap type="LearnTestStudent" id="LearnTestStudentResult">
-        <result property="id"    column="id"    />
+        <id     property="id"         column="id"    />
         <result property="batchId"    column="batch_id"    />
         <result property="studentId"    column="student_id"    />
         <result property="buildType"    column="build_type"    />
@@ -22,6 +22,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select id, batch_id, student_id, build_type, subject_id, direct_key, paper_id, class_id, examinee_id, status, create_time from learn_test_student
     </sql>
 
+    <select id="selectExamineeTestList" resultType="com.alibaba.fastjson2.JSONObject">
+        select ts.id, p.`paperName` `name`, ts.`subject_id` subjectId, ts.`create_time` beginTime, p.`fenshu` total, e.`end_time` endTime, if(e.`state` is null, 2, e.`state`) `state`, e.`score`
+        from `learn_test_student` ts
+        join `learn_paper` p on ts.`paper_id` = p.`id`
+        left join `learn_examinee` e on ts.`examinee_id` = e.`examinee_id`
+        <where>
+            <if test="studentId != null "> and ts.`student_id` = #{studentId}</if>
+        </where>
+        order by ts.`create_time` desc
+    </select>
+
     <select id="selectDirectedStudentList" parameterType="LearnTestStudent" resultMap="LearnTestStudentResult">
         <include refid="selectLearnTestStudentVo"/>
         <where>
@@ -57,7 +68,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </where>
     </select>
     
-    <select id="selectLearnTestStudentById" parameterType="String" resultMap="LearnTestStudentResult">
+    <select id="selectLearnTestStudentById" parameterType="Long" resultMap="LearnTestStudentResult">
         <include refid="selectLearnTestStudentVo"/>
         where id = #{id}
     </select>
@@ -107,11 +118,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where id = #{id}
     </update>
 
-    <delete id="deleteLearnTestStudentById" parameterType="String">
+    <update id="updateExamineeStatus" parameterType="LearnTestStudent">
+        update learn_test_student set status = #{status} where examinee_id = #{examineeId}
+    </update>
+
+    <delete id="deleteLearnTestStudentById" parameterType="Long">
         delete from learn_test_student where id = #{id}
     </delete>
 
-    <delete id="deleteLearnTestStudentByIds" parameterType="String">
+    <delete id="deleteLearnTestStudentByIds" parameterType="Long">
         delete from learn_test_student where id in 
         <foreach item="id" collection="array" open="(" separator="," close=")">
             #{id}