From 7fead3526920951ed8f68d0f9aaf23fe632158ae Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期四, 09 五月 2024 18:09:28 +0800 Subject: [PATCH] 学生端个人练习管理,todo删除、练习 --- /dev/null | 0 src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java | 56 ++++++++ src/main/java/com/mindskip/xzs/controller/student/SelfPracticeController.java | 39 +++++ src/main/resources/mapper/SubjectMapper.xml | 15 + src/main/java/com/mindskip/xzs/repository/SelfPracticeMapper.java | 38 +++++ src/main/java/com/mindskip/xzs/domain/SelfPractice.java | 42 ++++++ src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java | 78 +++++++++++ src/main/java/com/mindskip/xzs/repository/SubjectMapper.java | 2 src/main/resources/mapper/SelfPracticeMapper.xml | 41 +++++ src/main/resources/mapper/QuestionSubjectMapper.xml | 11 + src/main/java/com/mindskip/xzs/service/SelfPracticeService.java | 41 +++++ src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java | 3 12 files changed, 362 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/mindskip/xzs/controller/student/SelfPracticeController.java b/src/main/java/com/mindskip/xzs/controller/student/SelfPracticeController.java new file mode 100644 index 0000000..45a58c3 --- /dev/null +++ b/src/main/java/com/mindskip/xzs/controller/student/SelfPracticeController.java @@ -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锛歺p + * @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); + } + +} diff --git a/src/main/java/com/mindskip/xzs/domain/SelfPractice.java b/src/main/java/com/mindskip/xzs/domain/SelfPractice.java new file mode 100644 index 0000000..f3bff48 --- /dev/null +++ b/src/main/java/com/mindskip/xzs/domain/SelfPractice.java @@ -0,0 +1,42 @@ +package com.mindskip.xzs.domain; + +import lombok.Data; + +import java.util.Date; + +/** + * 涓汉缁冧範 + * + * @author锛歺p + * @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; + +} diff --git a/src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java b/src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java new file mode 100644 index 0000000..ec33a53 --- /dev/null +++ b/src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java @@ -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锛歺p + * @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; +} diff --git a/src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java b/src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java index 8b9e3bd..a4f3b25 100644 --- a/src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java +++ b/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); } diff --git a/src/main/java/com/mindskip/xzs/repository/SelfPracticeMapper.java b/src/main/java/com/mindskip/xzs/repository/SelfPracticeMapper.java new file mode 100644 index 0000000..b1374a5 --- /dev/null +++ b/src/main/java/com/mindskip/xzs/repository/SelfPracticeMapper.java @@ -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锛歺p + * @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); +} diff --git a/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java b/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java index 7bb884e..7ea63e0 100644 --- a/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java +++ b/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); } diff --git a/src/main/java/com/mindskip/xzs/service/SelfPracticeService.java b/src/main/java/com/mindskip/xzs/service/SelfPracticeService.java new file mode 100644 index 0000000..d407084 --- /dev/null +++ b/src/main/java/com/mindskip/xzs/service/SelfPracticeService.java @@ -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锛歺p + * @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); + +} diff --git a/src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java new file mode 100644 index 0000000..6a5eaa6 --- /dev/null +++ b/src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java @@ -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锛歺p + * @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("鍒犻櫎鎴愬姛"); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index e69de29..0000000 --- a/src/main/resources/application.properties +++ /dev/null diff --git a/src/main/resources/mapper/QuestionSubjectMapper.xml b/src/main/resources/mapper/QuestionSubjectMapper.xml index 5811325..24ef74e 100644 --- a/src/main/resources/mapper/QuestionSubjectMapper.xml +++ b/src/main/resources/mapper/QuestionSubjectMapper.xml @@ -55,4 +55,13 @@ where subject_id = #{id} and qs.deleted = 0 and s.deleted = 0 </select> -</mapper> \ No newline at end of file + <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> diff --git a/src/main/resources/mapper/SelfPracticeMapper.xml b/src/main/resources/mapper/SelfPracticeMapper.xml new file mode 100644 index 0000000..cb25add --- /dev/null +++ b/src/main/resources/mapper/SelfPracticeMapper.xml @@ -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> diff --git a/src/main/resources/mapper/SubjectMapper.xml b/src/main/resources/mapper/SubjectMapper.xml index c8a6464..965f9c1 100644 --- a/src/main/resources/mapper/SubjectMapper.xml +++ b/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> -- Gitblit v1.8.0