src/main/java/com/mindskip/xzs/controller/student/SelfPracticeController.java
New file @@ -0,0 +1,39 @@ package com.mindskip.xzs.controller.student; import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.domain.vo.SelfPracticeVO; import com.mindskip.xzs.service.SelfPracticeService; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.constraints.NotEmpty; import java.util.List; /** * @author:xp * @date:2024/5/9 16:17 */ @RestController @RequiredArgsConstructor @RequestMapping(value = "/api/student/self/practice") public class SelfPracticeController { private final SelfPracticeService selfPracticeService; @PostMapping public RestResponse add(@RequestBody @Validated SelfPracticeVO vo) { return selfPracticeService.add(vo); } @GetMapping("/page") public RestResponse page(SelfPracticeVO vo) { return selfPracticeService.page(vo); } @DeleteMapping public RestResponse remove(@RequestBody @NotEmpty(message = "请选择要删除的数据") List<Integer> ids) { return selfPracticeService.remove(ids); } } src/main/java/com/mindskip/xzs/domain/SelfPractice.java
New file @@ -0,0 +1,42 @@ package com.mindskip.xzs.domain; import lombok.Data; import java.util.Date; /** * 个人练习 * * @author:xp * @date:2024/5/9 16:09 */ @Data public class SelfPractice { private Integer id; /** 用户ID */ private Integer userId; /** 备注 */ private String remark; /** 练习类型 */ private String practiceType; /** 课目json */ private String subjects; /** 创建时间 */ private Date createTime; /** 跟新时间 */ private Date updateTime; /** 逻辑删除 0 没删 1删 */ private Integer deleted; /** 已做题数 */ private Integer doNum; } src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java
New file @@ -0,0 +1,56 @@ package com.mindskip.xzs.domain.vo; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.Date; import java.util.List; /** * 个人练习 * * @author:xp * @date:2024/5/9 16:09 */ @Data public class SelfPracticeVO { private Integer id; /** 用户ID */ private Integer userId; /** 备注 */ @NotBlank(message = "请填写此处模拟的名称") private String remark; /** 课目json */ @NotEmpty(message = "请选择课目") private List<Integer> subjects; private String subjectString; private String subjectNames; /** 练习类型 */ @NotBlank(message = "请选择练习类型") private String practiceType; /** 创建时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; /** 跟新时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; /** 已做题数 */ private Integer doNum; /** 做题总数 */ private Integer totalQuestionNum; private Integer pageSize = 10; private Integer pageNum = 1; } src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java
@@ -29,4 +29,7 @@ Integer removeSubjectId(Integer subjectId); List<QuestionSubject> getSubject(Integer id); /** 统计课目的题目数 */ Integer countQuestionNum(@Param("subjects") List<Integer> subjects); } src/main/java/com/mindskip/xzs/repository/SelfPracticeMapper.java
New file @@ -0,0 +1,38 @@ package com.mindskip.xzs.repository; import com.mindskip.xzs.domain.SelfPractice; import com.mindskip.xzs.domain.vo.SelfPracticeVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; /** * @author:xp * @date:2024/5/9 16:14 */ @Mapper public interface SelfPracticeMapper { /** * 添加个人练习 * * @param entity */ void add(SelfPractice entity); /** * 分页 * * @param query * @return */ List<SelfPracticeVO> page(@Param("query") SelfPracticeVO query); /** * 删除 * * @param ids */ void remove(List<Integer> ids); } src/main/java/com/mindskip/xzs/repository/SubjectMapper.java
@@ -21,4 +21,6 @@ List<Subject> getNames(@Param("names") String[] names); List<Subject> selectByIds(@Param("ids") Integer[] ids); List<String> selectSubjectName(@Param("ids") List<Integer> ids); } src/main/java/com/mindskip/xzs/service/SelfPracticeService.java
New file @@ -0,0 +1,41 @@ package com.mindskip.xzs.service; import com.github.pagehelper.PageInfo; import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.domain.Subject; import com.mindskip.xzs.domain.vo.SelfPracticeVO; import com.mindskip.xzs.viewmodel.admin.education.SubjectPageRequestVM; import java.util.List; /** * @author:xp * @date:2024/5/9 16:15 */ public interface SelfPracticeService { /** * 添加个人练习 * @param vo * @return */ RestResponse add(SelfPracticeVO vo); /** * 分页 * * @param query * @return */ RestResponse page(SelfPracticeVO query); /** * 删除 * * @param ids * @return */ RestResponse remove(List<Integer> ids); } src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java
New file @@ -0,0 +1,78 @@ package com.mindskip.xzs.service.impl; import ch.qos.logback.core.joran.util.beans.BeanUtil; import com.alibaba.fastjson.JSON; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.context.WebContext; import com.mindskip.xzs.domain.ExamPaperAnswer; import com.mindskip.xzs.domain.SelfPractice; import com.mindskip.xzs.domain.vo.SelfPracticeVO; import com.mindskip.xzs.repository.QuestionSubjectMapper; import com.mindskip.xzs.repository.SelfPracticeMapper; import com.mindskip.xzs.repository.SubjectMapper; import com.mindskip.xzs.service.QuestionSubjectService; import com.mindskip.xzs.service.SelfPracticeService; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** * @author:xp * @date:2024/5/9 16:16 */ @Service @RequiredArgsConstructor public class SelfPracticeServiceImpl implements SelfPracticeService { private final SelfPracticeMapper selfPracticeMapper; private final WebContext webContext; private final QuestionSubjectMapper questionSubjectMapper; private final SubjectMapper subjectMapper; @Override public RestResponse add(SelfPracticeVO vo) { SelfPractice entity = new SelfPractice(); BeanUtils.copyProperties(vo, entity); entity.setSubjects(JSON.toJSONString(vo.getSubjects())); entity.setCreateTime(new Date()); entity.setUpdateTime(new Date()); entity.setDeleted(0); entity.setDoNum(0); entity.setUserId(webContext.getCurrentUser().getId()); selfPracticeMapper.add(entity); return RestResponse.ok("创建成功"); } @Override public RestResponse page(SelfPracticeVO query) { if (! Objects.equals(3, webContext.getCurrentUser().getRole())) { query.setUserId(webContext.getCurrentUser().getId()); } PageInfo<SelfPracticeVO> info = PageHelper.startPage(query.getPageNum(), query.getPageSize()).doSelectPageInfo(() -> selfPracticeMapper.page(query)); info.getList().stream().forEach(item -> { List<Integer> subjects = JSON.parseArray(item.getSubjectString(), Integer.class); item.setSubjects(subjects); List<String> subjectNames = subjectMapper.selectSubjectName(subjects); if (! CollectionUtils.isEmpty(subjectNames)) { item.setSubjectNames(subjectNames.stream().collect(Collectors.joining("、"))); } item.setTotalQuestionNum(questionSubjectMapper.countQuestionNum(subjects)); }); return RestResponse.ok(info); } @Override public RestResponse remove(List<Integer> ids) { selfPracticeMapper.remove(ids); return RestResponse.ok("删除成功"); } } src/main/resources/application.properties
src/main/resources/mapper/QuestionSubjectMapper.xml
@@ -55,4 +55,13 @@ where subject_id = #{id} and qs.deleted = 0 and s.deleted = 0 </select> </mapper> <select id="countQuestionNum" resultType="integer"> SELECT count(distinct id) FROM t_question_subject WHERE subject_id IN <foreach collection="subjects" open="(" separator="," close=")" item="subjectId">#{subjectId}</foreach> </select> </mapper> src/main/resources/mapper/SelfPracticeMapper.xml
New file @@ -0,0 +1,41 @@ <?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.SelfPracticeMapper"> <insert id="add" keyColumn="id" useGeneratedKeys="true" parameterType="com.mindskip.xzs.domain.SelfPractice"> INSERT INTO t_self_practice(user_id, remark, subjects, practice_type, create_time, update_time, deleted) VALUE (#{userId}, #{remark}, #{subjects}, #{practiceType}, #{createTime}, #{updateTime}, #{deleted}) </insert> <select id="page" resultType="com.mindskip.xzs.domain.vo.SelfPracticeVO"> SELECT id, user_id as userId, remark, subjects as subjectString, practice_type as practiceType, create_time createTime, update_time as updateTime FROM t_self_practice <where> <if test="query.userId != null"> AND user_id = #{query.userId} </if> AND deleted = 0 </where> </select> <update id="remove"> UPDATE t_self_practice SET deleted = 1 WHERE id IN <foreach collection="ids" open="(" separator="," close=")" item="id">#{id}</foreach> </update> </mapper> src/main/resources/mapper/SubjectMapper.xml
@@ -13,7 +13,7 @@ id, name, level, level_name, item_order, deleted </sql> <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap"> select select <include refid="Base_Column_List" /> from t_subject where id = #{id,jdbcType=INTEGER} and deleted = 0 @@ -23,10 +23,10 @@ where id = #{id,jdbcType=INTEGER} </delete> <insert id="insert" parameterType="com.mindskip.xzs.domain.Subject" useGeneratedKeys="true" keyProperty="id"> insert into t_subject (id, name, level, insert into t_subject (id, name, level, level_name, item_order, deleted ) values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{level,jdbcType=INTEGER}, values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{level,jdbcType=INTEGER}, #{levelName,jdbcType=VARCHAR}, #{itemOrder,jdbcType=INTEGER}, #{deleted,jdbcType=BIT} ) </insert> @@ -169,5 +169,14 @@ and deleted = 0 </select> <select id="selectSubjectName" resultType="string"> SELECT name FROM t_subject WHERE id IN <foreach collection="ids" open="(" separator="," close=")" item="id">#{id}</foreach> </select> </mapper>