xiangpei
2024-05-14 1dd3f8fdbbfc8a41f35a32f153201724a8faa2b3
保存顺序练习记录
6个文件已添加
214 ■■■■■ 已修改文件
src/main/java/com/mindskip/xzs/controller/student/PracticeQuestionConditionController.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/domain/PracticeQuestionCondition.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/repository/PracticeQuestionConditionMapper.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/service/PracticeQuestionConditionService.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/service/impl/PracticeQuestionConditionServiceImpl.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/PracticeQuestionConditionMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/controller/student/PracticeQuestionConditionController.java
New file
@@ -0,0 +1,30 @@
package com.mindskip.xzs.controller.student;
import com.mindskip.xzs.base.RestResponse;
import com.mindskip.xzs.domain.PracticeQuestionCondition;
import com.mindskip.xzs.service.PracticeQuestionConditionService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @author:xp
 * @date:2024/5/14 17:44
 */
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/student/practice/condition")
public class PracticeQuestionConditionController {
    private final PracticeQuestionConditionService service;
    @PostMapping("/save")
    public RestResponse save(@RequestBody @Validated PracticeQuestionCondition vo) {
        service.save(vo);
        return RestResponse.ok();
    }
}
src/main/java/com/mindskip/xzs/domain/PracticeQuestionCondition.java
New file
@@ -0,0 +1,53 @@
package com.mindskip.xzs.domain;
import io.swagger.models.auth.In;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
/**
 * 练习记录
 *
 * @author:xp
 * @date:2024/5/14 17:13
 */
@Data
public class PracticeQuestionCondition {
    private Integer id;
    @NotNull(message = "练习ID不能为空")
    private Integer practiceId;
    private Integer userId;
    /** json存储题目数据:List<QuestionFinishCondition> */
    private String content;
    /** 最近一次保存时间 */
    private Date latestTime;
    /** 做题详情 */
    @NotEmpty(message = "未做题不能保存")
    private List<QuestionFinishCondition> questionConditions;
    @Data
    public static class QuestionFinishCondition {
        /** 题目 */
        private Integer questionId;
        /** 是否已经做了 */
        private Boolean hasDo;
        /** 做对没有 */
        private Boolean right;
        /** 答案 */
        private String answer;
    }
}
src/main/java/com/mindskip/xzs/repository/PracticeQuestionConditionMapper.java
New file
@@ -0,0 +1,38 @@
package com.mindskip.xzs.repository;
import com.mindskip.xzs.domain.PracticeQuestionCondition;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
/**
 * @author:xp
 * @date:2024/5/14 17:23
 */
@Mapper
public interface PracticeQuestionConditionMapper {
    /**
     * 根据练习ID查找
     *
     * @param practiceId
     * @return
     */
    PracticeQuestionCondition selectByPracticeId(Integer practiceId);
    /**
     * 添加
     *
     * @param old
     */
    void save(@Param("entity") PracticeQuestionCondition old);
    /**
     * 更新内容
     *
     * @param content
     * @param id
     */
    void updateContentById(@Param("content") String content, @Param("id") Integer id, @Param("latestTime") Date latestTime);
}
src/main/java/com/mindskip/xzs/service/PracticeQuestionConditionService.java
New file
@@ -0,0 +1,25 @@
package com.mindskip.xzs.service;
import com.mindskip.xzs.domain.PracticeQuestionCondition;
/**
 * @author:xp
 * @date:2024/5/14 17:24
 */
public interface PracticeQuestionConditionService {
    /**
     * 保存数据
     *
     * @param entity
     */
    void save(PracticeQuestionCondition entity);
    /**
     * 通过练习ID查找
     *
     * @param practiceId
     */
    PracticeQuestionCondition selectByPracticeId(Integer practiceId);
}
src/main/java/com/mindskip/xzs/service/impl/PracticeQuestionConditionServiceImpl.java
New file
@@ -0,0 +1,46 @@
package com.mindskip.xzs.service.impl;
import com.alibaba.fastjson.JSON;
import com.mindskip.xzs.context.WebContext;
import com.mindskip.xzs.domain.PracticeQuestionCondition;
import com.mindskip.xzs.repository.PracticeQuestionConditionMapper;
import com.mindskip.xzs.service.PracticeQuestionConditionService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.Objects;
/**
 * @author:xp
 * @date:2024/5/14 17:26
 */
@Service
@RequiredArgsConstructor
public class PracticeQuestionConditionServiceImpl implements PracticeQuestionConditionService {
    private final PracticeQuestionConditionMapper mapper;
    private final WebContext webContext;
    @Override
    public void save(PracticeQuestionCondition entity) {
        PracticeQuestionCondition old = mapper.selectByPracticeId(entity.getPracticeId());
        if (Objects.isNull(old)) {
            old = new PracticeQuestionCondition();
            old.setUserId(webContext.getCurrentUser().getId());
            old.setPracticeId(entity.getPracticeId());
            old.setContent(JSON.toJSONString(entity.getQuestionConditions()));
            old.setLatestTime(new Date());
            mapper.save(old);
        } else {
            // 更新内容
            mapper.updateContentById(JSON.toJSONString(entity.getQuestionConditions()), old.getId(), new Date());
        }
    }
    @Override
    public PracticeQuestionCondition selectByPracticeId(Integer practiceId) {
        PracticeQuestionCondition old = mapper.selectByPracticeId(practiceId);
        return old;
    }
}
src/main/resources/mapper/PracticeQuestionConditionMapper.xml
New file
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mindskip.xzs.repository.PracticeQuestionConditionMapper">
    <select id="selectByPracticeId" resultType="com.mindskip.xzs.domain.PracticeQuestionCondition">
        SELECT
            *
        FROM
            t_practice_question_condition
        WHERE
            practice_id = #{practiceId}
    </select>
    <insert id="save" parameterType="com.mindskip.xzs.domain.PracticeQuestionCondition">
        INSERT INTO t_practice_question_condition(user_id, practice_id, content, latest_time)
            VALUE (#{entity.userId}, #{entity.practiceId}, #{entity.content}, #{entity.latestTime})
    </insert>
    <update id="updateContentById">
        UPDATE t_practice_question_condition SET content = #{content}, latest_time = #{latestTime} WHERE id = #{id}
    </update>
</mapper>