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