From 11efc9210b47e1bc98906422ab534c9042c3e71d Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期一, 27 五月 2024 15:53:32 +0800 Subject: [PATCH] 优化随机试卷列表 --- src/main/java/com/mindskip/xzs/controller/admin/ExamTemplatesController.java | 8 src/main/java/com/mindskip/xzs/domain/ExamTemplatesSubject.java | 38 ---- src/main/resources/mapper/SubjectMapper.xml | 350 ++++++++++++++++++++++--------------------- src/main/resources/mapper/ExamTemplatesSubjectMapper.xml | 10 src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java | 6 src/main/java/com/mindskip/xzs/repository/SubjectMapper.java | 2 src/main/java/com/mindskip/xzs/domain/vo/ExamTemplatesVO.java | 9 + src/main/java/com/mindskip/xzs/service/impl/SubjectServiceImpl.java | 21 ++ 8 files changed, 230 insertions(+), 214 deletions(-) diff --git a/src/main/java/com/mindskip/xzs/controller/admin/ExamTemplatesController.java b/src/main/java/com/mindskip/xzs/controller/admin/ExamTemplatesController.java index e9999fc..55a7e14 100644 --- a/src/main/java/com/mindskip/xzs/controller/admin/ExamTemplatesController.java +++ b/src/main/java/com/mindskip/xzs/controller/admin/ExamTemplatesController.java @@ -17,6 +17,8 @@ import org.springframework.web.bind.annotation.*; import javax.validation.Valid; +import java.util.List; +import java.util.stream.Collectors; @RestController("AdminExamTemplatesController") @RequestMapping(value = "/api/admin/exam/templates") @@ -44,7 +46,11 @@ vo.setName(e.getName()); vo.setId(e.getId()); vo.setCtime(e.getCtime()); - Integer[] ids = examTemplatesSubjectMapper.getTemplatesId(e.getId()).stream().map(ExamTemplatesSubject::getSubjectId).toArray(Integer[]::new); + + List<ExamTemplatesSubject> subjectList = examTemplatesSubjectMapper.getTemplatesId(e.getId()); + Integer[] ids = subjectList.stream().map(ExamTemplatesSubject::getSubjectId).toArray(Integer[]::new); + String subjectNames = subjectList.stream().map(ExamTemplatesSubject::getSubjectName).collect(Collectors.joining("銆�")); + vo.setSubjectNames(subjectNames); vo.setSubjectId(ids); return vo; }); diff --git a/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java b/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java index 1dbbad1..c116a5d 100644 --- a/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java +++ b/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java @@ -187,7 +187,7 @@ data.add(questionImportVO3); // 鏌ュ嚭鎵�鏈夌殑璇剧洰锛坋xcel涓嬫媺鏁版嵁锛� - List<Subject> subjects = subjectMapper.allSubject(); + List<Subject> subjects = subjectMapper.allSubject(new ArrayList<>()); List<String> subjectNameList = subjects.stream().map(Subject::getName).collect(Collectors.toList()); EasyExcel.write(response.getOutputStream(), QuestionImportVO.class) @@ -248,7 +248,7 @@ response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); // 鏌ュ嚭鎵�鏈夌殑璇剧洰锛坋xcel涓嬫媺鏁版嵁锛� - List<Subject> subjects = subjectMapper.allSubject(); + List<Subject> subjects = subjectMapper.allSubject(new ArrayList<>()); List<String> subjectNameList = subjects.stream().map(Subject::getName).collect(Collectors.toList()); EasyExcel.write(response.getOutputStream(), QuestionImportVO.class) .sheet("棰樼洰瀵煎嚭鏁版嵁") @@ -341,7 +341,7 @@ // 鏌ュ嚭鎵�鏈夌殑璇剧洰 - List<Subject> subjects = subjectMapper.allSubject(); + List<Subject> subjects = subjectMapper.allSubject(new ArrayList<>()); List<String> subjectNames = Arrays.asList(excelQuestion.getSubjectName().split(SPLIT)); List<Subject> targetSubject = subjects.stream() .filter(subject -> subjectNames.contains(subject.getName())) diff --git a/src/main/java/com/mindskip/xzs/domain/ExamTemplatesSubject.java b/src/main/java/com/mindskip/xzs/domain/ExamTemplatesSubject.java index 61f6623..04e7c5a 100644 --- a/src/main/java/com/mindskip/xzs/domain/ExamTemplatesSubject.java +++ b/src/main/java/com/mindskip/xzs/domain/ExamTemplatesSubject.java @@ -1,45 +1,19 @@ package com.mindskip.xzs.domain; import io.swagger.models.auth.In; +import lombok.Data; import java.io.Serializable; +@Data public class ExamTemplatesSubject implements Serializable { private Integer id; + private Integer subjectId; + + private String subjectName; + private Integer templatesId; - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getSubjectId() { - return subjectId; - } - - public void setSubjectId(Integer subjectId) { - this.subjectId = subjectId; - } - - public Integer getTemplatesId() { - return templatesId; - } - - public void setTemplatesId(Integer templatesId) { - this.templatesId = templatesId; - } - - @Override - public String toString() { - return "ExamTemplatesSubject{" + - "id=" + id + - ", subjectId=" + subjectId + - ", templatesId=" + templatesId + - '}'; - } } diff --git a/src/main/java/com/mindskip/xzs/domain/vo/ExamTemplatesVO.java b/src/main/java/com/mindskip/xzs/domain/vo/ExamTemplatesVO.java index 7debb9e..af34bd1 100644 --- a/src/main/java/com/mindskip/xzs/domain/vo/ExamTemplatesVO.java +++ b/src/main/java/com/mindskip/xzs/domain/vo/ExamTemplatesVO.java @@ -12,11 +12,20 @@ public class ExamTemplatesVO extends BasePage implements Serializable { private Integer id; + private String name; + private Date ctime; + private LocalDateTime now; + private Integer[] subjectId; + + /** 璇剧洰鍚嶅瓧 */ + private String subjectNames; + private String status; + private Integer userId; /** diff --git a/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java b/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java index d72b316..f552309 100644 --- a/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java +++ b/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java @@ -12,7 +12,7 @@ List<Subject> getSubjectByLevel(Integer level); - List<Subject> allSubject(); + List<Subject> allSubject(@Param("deptIds") List<Integer> deptIds); List<Subject> page(SubjectPageRequestVM requestVM); diff --git a/src/main/java/com/mindskip/xzs/service/impl/SubjectServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/SubjectServiceImpl.java index 32014ce..bf9c107 100644 --- a/src/main/java/com/mindskip/xzs/service/impl/SubjectServiceImpl.java +++ b/src/main/java/com/mindskip/xzs/service/impl/SubjectServiceImpl.java @@ -1,6 +1,9 @@ package com.mindskip.xzs.service.impl; +import com.mindskip.xzs.context.WebContext; import com.mindskip.xzs.domain.Subject; +import com.mindskip.xzs.repository.BaseMapper; +import com.mindskip.xzs.repository.DepartmentMapper; import com.mindskip.xzs.repository.SubjectMapper; import com.mindskip.xzs.service.SubjectService; import com.mindskip.xzs.viewmodel.admin.education.SubjectPageRequestVM; @@ -9,17 +12,21 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; @Service public class SubjectServiceImpl extends BaseServiceImpl<Subject> implements SubjectService { private final SubjectMapper subjectMapper; + private final WebContext webContext; + private final DepartmentMapper departmentMapper; - @Autowired - public SubjectServiceImpl(SubjectMapper subjectMapper) { - super(subjectMapper); + public SubjectServiceImpl(BaseMapper<Subject> baseMapper, SubjectMapper subjectMapper, WebContext webContext, DepartmentMapper departmentMapper) { + super(baseMapper); this.subjectMapper = subjectMapper; + this.webContext = webContext; + this.departmentMapper = departmentMapper; } @Override @@ -39,7 +46,13 @@ @Override public List<Subject> allSubject() { - return subjectMapper.allSubject(); + // 濡傛灉鏄儴闂ㄧ鐞嗗憳锛屽彧鏌ュ叧鑱旇閮ㄩ棬鐨勮鐩� + boolean deptAdmin = webContext.isDeptAdmin(); + List<Integer> deptIds = new ArrayList<>(); + if (deptAdmin) { + deptIds = webContext.getAdminDeptIds(); + } + return subjectMapper.allSubject(deptIds); } @Override diff --git a/src/main/resources/mapper/ExamTemplatesSubjectMapper.xml b/src/main/resources/mapper/ExamTemplatesSubjectMapper.xml index 8e6374d..b748650 100644 --- a/src/main/resources/mapper/ExamTemplatesSubjectMapper.xml +++ b/src/main/resources/mapper/ExamTemplatesSubjectMapper.xml @@ -4,6 +4,7 @@ <resultMap id="BaseResultMap" type="com.mindskip.xzs.domain.ExamTemplatesSubject"> <id column="id" jdbcType="INTEGER" property="id"/> <result column="subject_id" jdbcType="INTEGER" property="subjectId"/> + <result column="subjectName" property="subjectName"/> <result column="templates_id" jdbcType="INTEGER" property="templatesId"/> </resultMap> @@ -18,9 +19,10 @@ <select id="getTemplatesId" resultMap="BaseResultMap"> select - <include refid="Base_Column_List"/> - from t_exam_templates_subject - where templates_id = #{templatesId} + ets.id, ets.subject_id, ets.templates_id, ts.name as subjectName + from t_exam_templates_subject ets + INNER JOIN t_subject ts ON ts.id = ets.subject_id + where ets.templates_id = #{templatesId} </select> <insert id="saves" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id"> @@ -42,4 +44,4 @@ from t_exam_templates_subject where templates_id = #{templatesId} </select> -</mapper> \ No newline at end of file +</mapper> diff --git a/src/main/resources/mapper/SubjectMapper.xml b/src/main/resources/mapper/SubjectMapper.xml index e7a6bcd..c7b6258 100644 --- a/src/main/resources/mapper/SubjectMapper.xml +++ b/src/main/resources/mapper/SubjectMapper.xml @@ -1,186 +1,198 @@ <?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.SubjectMapper"> - <resultMap id="BaseResultMap" type="com.mindskip.xzs.domain.Subject"> - <id column="id" jdbcType="INTEGER" property="id" /> - <result column="name" jdbcType="VARCHAR" property="name" /> - <result column="level" jdbcType="INTEGER" property="level" /> - <result column="level_name" jdbcType="VARCHAR" property="levelName" /> - <result column="item_order" jdbcType="INTEGER" property="itemOrder" /> - <result column="deleted" jdbcType="BIT" property="deleted" /> - </resultMap> - <sql id="Base_Column_List"> - id, name, level, level_name, item_order, deleted - </sql> - <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap"> - select - <include refid="Base_Column_List" /> - from t_subject - where id = #{id,jdbcType=INTEGER} and deleted = 0 - </select> - <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer"> - delete from t_subject - 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, - level_name, item_order, deleted - ) - values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{level,jdbcType=INTEGER}, - #{levelName,jdbcType=VARCHAR}, #{itemOrder,jdbcType=INTEGER}, #{deleted,jdbcType=BIT} - ) - </insert> - <insert id="insertSelective" parameterType="com.mindskip.xzs.domain.Subject" useGeneratedKeys="true" keyProperty="id"> - insert into t_subject - <trim prefix="(" suffix=")" suffixOverrides=","> - <if test="id != null"> - id, - </if> - <if test="name != null"> - name, - </if> - <if test="level != null"> - level, - </if> - <if test="levelName != null"> - level_name, - </if> - <if test="itemOrder != null"> - item_order, - </if> - <if test="deleted != null"> - deleted, - </if> - </trim> - <trim prefix="values (" suffix=")" suffixOverrides=","> - <if test="id != null"> - #{id,jdbcType=INTEGER}, - </if> - <if test="name != null"> - #{name,jdbcType=VARCHAR}, - </if> - <if test="level != null"> - #{level,jdbcType=INTEGER}, - </if> - <if test="levelName != null"> - #{levelName,jdbcType=VARCHAR}, - </if> - <if test="itemOrder != null"> - #{itemOrder,jdbcType=INTEGER}, - </if> - <if test="deleted != null"> - #{deleted,jdbcType=BIT}, - </if> - </trim> - </insert> - <update id="updateByPrimaryKeySelective" parameterType="com.mindskip.xzs.domain.Subject"> - update t_subject - <set> - <if test="name != null"> - name = #{name,jdbcType=VARCHAR}, - </if> - <if test="level != null"> - level = #{level,jdbcType=INTEGER}, - </if> - <if test="levelName != null"> - level_name = #{levelName,jdbcType=VARCHAR}, - </if> - <if test="itemOrder != null"> - item_order = #{itemOrder,jdbcType=INTEGER}, - </if> - <if test="deleted != null"> - deleted = #{deleted,jdbcType=BIT}, - </if> - </set> - where id = #{id,jdbcType=INTEGER} - </update> - <update id="updateByPrimaryKey" parameterType="com.mindskip.xzs.domain.Subject"> - update t_subject - set name = #{name,jdbcType=VARCHAR}, - level = #{level,jdbcType=INTEGER}, - level_name = #{levelName,jdbcType=VARCHAR}, - item_order = #{itemOrder,jdbcType=INTEGER}, - deleted = #{deleted,jdbcType=BIT} - where id = #{id,jdbcType=INTEGER} - </update> + <resultMap id="BaseResultMap" type="com.mindskip.xzs.domain.Subject"> + <id column="id" jdbcType="INTEGER" property="id"/> + <result column="name" jdbcType="VARCHAR" property="name"/> + <result column="level" jdbcType="INTEGER" property="level"/> + <result column="level_name" jdbcType="VARCHAR" property="levelName"/> + <result column="item_order" jdbcType="INTEGER" property="itemOrder"/> + <result column="deleted" jdbcType="BIT" property="deleted"/> + </resultMap> + <sql id="Base_Column_List"> + id + , name, level, level_name, item_order, deleted + </sql> + <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap"> + select + <include refid="Base_Column_List"/> + from t_subject + where id = #{id,jdbcType=INTEGER} and deleted = 0 + </select> + <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer"> + delete + from t_subject + 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, + level_name, item_order, deleted) + values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{level,jdbcType=INTEGER}, + #{levelName,jdbcType=VARCHAR}, #{itemOrder,jdbcType=INTEGER}, #{deleted,jdbcType=BIT}) + </insert> + <insert id="insertSelective" parameterType="com.mindskip.xzs.domain.Subject" useGeneratedKeys="true" + keyProperty="id"> + insert into t_subject + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="id != null"> + id, + </if> + <if test="name != null"> + name, + </if> + <if test="level != null"> + level, + </if> + <if test="levelName != null"> + level_name, + </if> + <if test="itemOrder != null"> + item_order, + </if> + <if test="deleted != null"> + deleted, + </if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="id != null"> + #{id,jdbcType=INTEGER}, + </if> + <if test="name != null"> + #{name,jdbcType=VARCHAR}, + </if> + <if test="level != null"> + #{level,jdbcType=INTEGER}, + </if> + <if test="levelName != null"> + #{levelName,jdbcType=VARCHAR}, + </if> + <if test="itemOrder != null"> + #{itemOrder,jdbcType=INTEGER}, + </if> + <if test="deleted != null"> + #{deleted,jdbcType=BIT}, + </if> + </trim> + </insert> + <update id="updateByPrimaryKeySelective" parameterType="com.mindskip.xzs.domain.Subject"> + update t_subject + <set> + <if test="name != null"> + name = #{name,jdbcType=VARCHAR}, + </if> + <if test="level != null"> + level = #{level,jdbcType=INTEGER}, + </if> + <if test="levelName != null"> + level_name = #{levelName,jdbcType=VARCHAR}, + </if> + <if test="itemOrder != null"> + item_order = #{itemOrder,jdbcType=INTEGER}, + </if> + <if test="deleted != null"> + deleted = #{deleted,jdbcType=BIT}, + </if> + </set> + where id = #{id,jdbcType=INTEGER} + </update> + <update id="updateByPrimaryKey" parameterType="com.mindskip.xzs.domain.Subject"> + update t_subject + set name = #{name,jdbcType=VARCHAR}, + level = #{level,jdbcType=INTEGER}, + level_name = #{levelName,jdbcType=VARCHAR}, + item_order = #{itemOrder,jdbcType=INTEGER}, + deleted = #{deleted,jdbcType=BIT} + where id = #{id,jdbcType=INTEGER} + </update> - <select id="getSubjectByLevel" resultMap="BaseResultMap"> - select - <include refid="Base_Column_List"/> - from t_subject where level= #{level} and deleted = 0 - order by item_order - </select> + <select id="getSubjectByLevel" resultMap="BaseResultMap"> + select + <include refid="Base_Column_List"/> + from t_subject where level= #{level} and deleted = 0 + order by item_order + </select> - <select id="allSubject" resultMap="BaseResultMap"> - select - <include refid="Base_Column_List"/> - from t_subject where deleted = 0 - </select> + <select id="allSubject" resultMap="BaseResultMap"> + select + ts.id, ts.name + from t_subject ts + <if test="deptIds != null and deptIds.size > 0"> + INNER JOIN t_subject_dept tsd ON tsd.subject_id = ts.id + AND tsd.dept_id IN + <foreach collection="deptIds" open="(" separator="," close=")" item="deptId">#{deptId}</foreach> + </if> + where ts.deleted = 0 + </select> - <select id="page" resultMap="BaseResultMap" parameterType="com.mindskip.xzs.viewmodel.admin.education.SubjectPageRequestVM"> - SELECT - <include refid="Base_Column_List"/> - FROM t_subject - <where> - and deleted=0 - <if test="id != null "> - and id= #{id} - </if> - <if test="level != null "> - and level= #{level} - </if> - <if test="name != null "> - and name like concat('%',#{name},'%') - </if> - </where> - </select> + <select id="page" resultMap="BaseResultMap" + parameterType="com.mindskip.xzs.viewmodel.admin.education.SubjectPageRequestVM"> + SELECT + <include refid="Base_Column_List"/> + FROM t_subject + <where> + and deleted=0 + <if test="id != null "> + and id= #{id} + </if> + <if test="level != null "> + and level= #{level} + </if> + <if test="name != null "> + and name like concat('%',#{name},'%') + </if> + </where> + </select> - <select id="getName" resultMap="BaseResultMap"> - SELECT - <include refid="Base_Column_List"/> - FROM t_subject - where name = #{name} and deleted = 0 - </select> + <select id="getName" resultMap="BaseResultMap"> + SELECT + <include refid="Base_Column_List"/> + FROM t_subject + where name = #{name} and deleted = 0 + </select> - <select id="getNames" resultMap="BaseResultMap"> - SELECT - <include refid="Base_Column_List"/> - FROM t_subject - where name in - <foreach item="name" collection="names" open="(" separator="," - close=")"> - #{name} - </foreach> - and deleted = 0 + <select id="getNames" resultMap="BaseResultMap"> + SELECT + <include refid="Base_Column_List"/> + FROM t_subject + where name in + <foreach item="name" collection="names" open="(" separator="," + close=")"> + #{name} + </foreach> + and deleted = 0 - </select> + </select> - <select id="selectByIds" resultMap="BaseResultMap"> - select - <include refid="Base_Column_List" /> - from t_subject - where id in - <foreach item="id" collection="ids" open="(" separator="," - close=")"> - #{id} - </foreach> - and deleted = 0 - </select> + <select id="selectByIds" resultMap="BaseResultMap"> + select + <include refid="Base_Column_List"/> + from t_subject + where id in + <foreach item="id" collection="ids" open="(" separator="," + close=")"> + #{id} + </foreach> + 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> + <select id="selectSubjectName" resultType="string"> + SELECT + name + FROM + t_subject + WHERE + id IN + <foreach collection="ids" open="(" separator="," close=")" item="id">#{id}</foreach> + </select> - <select id="selectSubjectNameById" resultType="string"> - SELECT name FROM t_subject WHERE id = #{id} AND deleted = 0 - </select> + <select id="selectSubjectNameById" resultType="string"> + SELECT name + FROM t_subject + WHERE id = #{id} + AND deleted = 0 + </select> </mapper> -- Gitblit v1.8.0