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