一个用户只能是一个部门的管理员、创建随机试卷的时候人员只能选当前部门的人,试卷增加部门id
13个文件已修改
465 ■■■■ 已修改文件
src/main/java/com/mindskip/xzs/configuration/spring/exception/ExceptionHandle.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/controller/admin/ExamTemplatesController.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/domain/ExamTemplates.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/domain/vo/ExamTemplatesVO.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/service/DepartmentService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/service/impl/ExamTemplatesServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/utility/convert/ExamTemplatesClassConvert.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/viewmodel/admin/exam/ExamPaperEditRequestVM.java 178 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/DepartmentMapper.xml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/ExamTemplatesMapper.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/configuration/spring/exception/ExceptionHandle.java
@@ -75,4 +75,11 @@
        logger.error(e.getMessage(), e);
        return new RestResponse<>(SystemCode.QuestionError.getCode(), SystemCode.QuestionError.getMessage());
    }
    @ExceptionHandler(RuntimeException.class)
    @ResponseBody
    public RestResponse handlerRuntimeException(RuntimeException e) {
        logger.error(e.getMessage(), e);
        return new RestResponse<>(SystemCode.InnerError.getCode(), e.getMessage());
    }
}
src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java
@@ -10,28 +10,35 @@
import com.mindskip.xzs.domain.vo.DepartmentVO;
import com.mindskip.xzs.domain.vo.UpdateDeptAdminVO;
import com.mindskip.xzs.domain.vo.UserVO;
import com.mindskip.xzs.repository.DepartmentMapper;
import com.mindskip.xzs.repository.UserDepartmentMapper;
import com.mindskip.xzs.service.DepartmentService;
import com.mindskip.xzs.service.UserService;
import com.mindskip.xzs.utility.PageInfoHelper;
import com.mindskip.xzs.viewmodel.admin.department.DepartmentResponseVM;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@RestController("AdminDepartmentController")
@RequestMapping("/api/admin/department")
@RequiredArgsConstructor
public class DepartmentController extends BaseApiController {
    private final DepartmentService departmentService;
    private final UserService userService;
    private final UserDepartmentMapper userDepartmentMapper;
    private final DepartmentMapper departmentMapper;
    /**
     * 获取部门下用户列表(下拉)
@@ -51,16 +58,9 @@
        return RestResponse.ok();
    }
    @Autowired
    public DepartmentController(DepartmentService departmentService, UserService userService, UserDepartmentMapper userDepartmentMapper) {
        this.departmentService = departmentService;
        this.userService = userService;
        this.userDepartmentMapper = userDepartmentMapper;
    }
    @RequestMapping(value = "/list", method = RequestMethod.POST)
    public RestResponse<List<Department>> getAll(){
        List<Department> res = departmentService.gets();
        List<Department> res = departmentService.gets(-1);
        return RestResponse.ok(res);
    }
@@ -93,7 +93,15 @@
    @RequestMapping(value = "/getDepartmentUser", method = RequestMethod.POST)
    public RestResponse<List<DepartmentVO>> getUserDepartment(){
        List<DepartmentVO> res = departmentService.gets()
        User currentUser = webContext.getCurrentUser();
        Integer deptId = null;
        if (Objects.nonNull(currentUser)) {
            // 如果是部门管理员,需要做数据权限
            if ("1".equals(currentUser.getDeptAdmin())) {
                deptId = departmentMapper.selectByAdminId(currentUser.getId());
            }
        }
        List<DepartmentVO> res = departmentService.gets(deptId)
                .stream().map(e->{
                    DepartmentVO departmentVO = new DepartmentVO();
                    List<UserDepartment> userDepartments = userDepartmentMapper.selectByDepartmentId(e.getId());
src/main/java/com/mindskip/xzs/controller/admin/ExamTemplatesController.java
@@ -1,43 +1,63 @@
package com.mindskip.xzs.controller.admin;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.base.BaseApiController;
import com.mindskip.xzs.base.RestResponse;
import com.mindskip.xzs.context.WebContext;
import com.mindskip.xzs.domain.ExamPaper;
import com.mindskip.xzs.domain.ExamTemplates;
import com.mindskip.xzs.domain.ExamTemplatesSubject;
import com.mindskip.xzs.domain.User;
import com.mindskip.xzs.domain.vo.ExamTemplatesVO;
import com.mindskip.xzs.repository.DepartmentMapper;
import com.mindskip.xzs.repository.ExamTemplatesSubjectMapper;
import com.mindskip.xzs.repository.UserDepartmentMapper;
import com.mindskip.xzs.service.ExamTemplatesService;
import com.mindskip.xzs.utility.PageInfoHelper;
import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVM;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
import java.util.Objects;
@RestController("AdminExamTemplatesController")
@RequestMapping(value = "/api/admin/exam/templates")
@RequiredArgsConstructor
public class ExamTemplatesController extends BaseApiController {
    private final ExamTemplatesService examTemplatesService;
    private final ExamTemplatesSubjectMapper examTemplatesSubjectMapper;
    public ExamTemplatesController(ExamTemplatesService examTemplatesService, ExamTemplatesSubjectMapper examTemplatesSubjectMapper) {
        this.examTemplatesService = examTemplatesService;
        this.examTemplatesSubjectMapper = examTemplatesSubjectMapper;
    }
    private final WebContext webContext;
    private final DepartmentMapper departmentMapper;
    @RequestMapping(value = "/edit", method = RequestMethod.POST)
    public RestResponse edit(@RequestBody @Valid ExamPaperEditRequestVM model) {
        User currentUser = webContext.getCurrentUser();
        if (Objects.nonNull(currentUser)) {
            // 如果是部门管理员,需要做数据权限
            if ("1".equals(currentUser.getDeptAdmin())) {
                Integer deptId = departmentMapper.selectByAdminId(currentUser.getId());
                model.setDeptId(deptId);
            }
        }
        examTemplatesService.add(model);
        return RestResponse.ok();
    }
    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public RestResponse<PageInfo<ExamTemplatesVO>> list(ExamTemplatesVO examTemplatesVO) throws Exception {
        User currentUser = webContext.getCurrentUser();
        if (Objects.nonNull(currentUser)) {
            // 如果是部门管理员,需要做数据权限
            if ("1".equals(currentUser.getDeptAdmin())) {
                Integer deptId = departmentMapper.selectByAdminId(currentUser.getId());
                examTemplatesVO.setDeptId(deptId);
            }
        }
        PageInfo<ExamTemplates> pageInfo = examTemplatesService.getByadmins(examTemplatesVO);
        PageInfo<ExamTemplatesVO> info = PageInfoHelper.copyMap(pageInfo, e -> {
            ExamTemplatesVO vo = new ExamTemplatesVO();
src/main/java/com/mindskip/xzs/domain/ExamTemplates.java
@@ -1,10 +1,13 @@
package com.mindskip.xzs.domain;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
@Data
public class ExamTemplates implements Serializable {
    private Integer id;
@@ -18,94 +21,6 @@
    private List<String> limitDateTime;
    private Date startTime;
    private Date endTime;
    public Date getStartTime() {
        return startTime;
    }
    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }
    public Date getEndTime() {
        return endTime;
    }
    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }
    public List<String> getLimitDateTime() {
        return limitDateTime;
    }
    public void setLimitDateTime(List<String> limitDateTime) {
        this.limitDateTime = limitDateTime;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPaperType() {
        return paperType;
    }
    public void setPaperType(String paperType) {
        this.paperType = paperType;
    }
    public String getSuggestTime() {
        return suggestTime;
    }
    public void setSuggestTime(String suggestTime) {
        this.suggestTime = suggestTime;
    }
    public String getTitleName() {
        return titleName;
    }
    public void setTitleName(String titleName) {
        this.titleName = titleName;
    }
    public Date getCtime() {
        return ctime;
    }
    public void setCtime(Date ctime) {
        this.ctime = ctime;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public String getMenuIds() {
        return menuIds;
    }
    public void setMenuIds(String menuIds) {
        this.menuIds = menuIds;
    }
    private Integer deptId;
}
src/main/java/com/mindskip/xzs/domain/vo/ExamTemplatesVO.java
@@ -3,6 +3,7 @@
import com.mindskip.xzs.base.BasePage;
import com.mindskip.xzs.domain.ExamTemplates;
import com.mindskip.xzs.domain.ExamTemplatesSubject;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@@ -10,6 +11,7 @@
import java.util.Date;
import java.util.List;
@Data
public class ExamTemplatesVO extends BasePage implements Serializable {
    private Integer id;
@@ -20,72 +22,9 @@
    private String status;
    private Integer userId;
    public LocalDateTime getNow() {
        return now;
    }
    /**
     * 部门ID
     */
    private Integer deptId;
    public void setNow(LocalDateTime now) {
        this.now = now;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getCtime() {
        return ctime;
    }
    public void setCtime(Date ctime) {
        this.ctime = ctime;
    }
    public Integer[] getSubjectId() {
        return subjectId;
    }
    public void setSubjectId(Integer[] subjectId) {
        this.subjectId = subjectId;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    @Override
    public String toString() {
        return "ExamTemplatesVO{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", ctime=" + ctime +
                ", now=" + now +
                ", subjectId=" + Arrays.toString(subjectId) +
                ", status='" + status + '\'' +
                ", userId=" + userId +
                '}';
    }
}
src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java
@@ -3,6 +3,7 @@
import com.mindskip.xzs.domain.Department;
import com.mindskip.xzs.viewmodel.admin.department.DepartmentResponseVM;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -13,7 +14,7 @@
    Integer update(Department department);
    List<Department> gets();
    List<Department> gets(Integer deptId);
    List<DepartmentResponseVM> page(DepartmentResponseVM departmentResponseVM);
@@ -21,5 +22,13 @@
    Department getById(Integer id);
    List<Integer> selectByAdminId(Integer id);
    Integer selectByAdminId(@Param("userId") Integer userId);
    /**
     * 查询除了id这个单位,该用户还是几个单位的负责人
     * @param userId
     * @param id
     * @return
     */
    Integer countByAdminId(@Param("userId") Integer userId, @Param("id") Integer id);
}
src/main/java/com/mindskip/xzs/service/DepartmentService.java
@@ -40,7 +40,7 @@
    Department getById(Integer id);
    List<Department> gets();
    List<Department> gets(Integer deptId);
    Department getName(String name);
src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
@@ -63,13 +63,13 @@
            throw new RuntimeException("该部门不存在");
        }
        if (Objects.nonNull(department.getAdminId())) {
            Integer adminNum = departmentMapper.countByAdminId(department.getAdminId(), department.getId());
            if (adminNum > 0) {
                throw new RuntimeException("一个用户只能是一个单位的管理员");
            }
            if (! Objects.equals(entity.getAdminId(), department.getAdminId())) {
                // 取消原先的管理员标识
                List<Integer> depIds = departmentMapper.selectByAdminId(entity.getAdminId());
                depIds.remove(department.getId());
                if (depIds.size() < 1) {
                    userMapper.updateDeptAdmin(entity.getAdminId(), DeptAdminEnum.NO.getValue());
                }
                userMapper.updateDeptAdmin(entity.getAdminId(), DeptAdminEnum.NO.getValue());
            }
            // 标识部门管理员
            userMapper.updateDeptAdmin(department.getAdminId(), DeptAdminEnum.YES.getValue());
@@ -91,8 +91,11 @@
    }
    @Override
    public List<Department> gets() {
        return departmentMapper.gets();
    public List<Department> gets(Integer deptId) {
        if (deptId == -1) {
            deptId = null;
        }
        return departmentMapper.gets(deptId);
    }
    @Override
@@ -117,13 +120,13 @@
            throw new RuntimeException("该部门不存在");
        }
        if (Objects.nonNull(form.getAdminId())) {
            Integer adminNum = departmentMapper.countByAdminId(form.getAdminId(), form.getId());
            if (adminNum > 0) {
                throw new RuntimeException("一个用户只能是一个单位的管理员");
            }
            if (! Objects.equals(entity.getAdminId(), form.getAdminId())) {
                // 取消原先的管理员标识
                List<Integer> depIds = departmentMapper.selectByAdminId(entity.getAdminId());
                depIds.remove(form.getId());
                if (depIds.size() < 1) {
                    userMapper.updateDeptAdmin(entity.getAdminId(), DeptAdminEnum.NO.getValue());
                }
                userMapper.updateDeptAdmin(entity.getAdminId(), DeptAdminEnum.NO.getValue());
            }
            // 标识部门管理员
            userMapper.updateDeptAdmin(form.getAdminId(), DeptAdminEnum.YES.getValue());
src/main/java/com/mindskip/xzs/service/impl/ExamTemplatesServiceImpl.java
@@ -58,7 +58,6 @@
        if (model.getId() != null) {
            removes(model.getId());
        }
        ExamTemplates examTemplates = ExamTemplatesClassConvert.INSTANCE.ExamPaperEditRequestVMToExamTemplates(model);
        if (!CollectionUtils.isEmpty(model.getLimitDateTime())) {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
src/main/java/com/mindskip/xzs/utility/convert/ExamTemplatesClassConvert.java
@@ -29,6 +29,7 @@
            @Mapping(source = "name",target = "name"),
            @Mapping(source = "paperType",target = "paperType"),
            @Mapping(source = "suggestTime",target = "suggestTime"),
            @Mapping(source = "deptId",target = "deptId"),
    })
    ExamPaperEditRequestVM ExamTemplatesToExamPaperEditRequestVM(ExamTemplates examTemplates);
src/main/java/com/mindskip/xzs/viewmodel/admin/exam/ExamPaperEditRequestVM.java
@@ -1,6 +1,8 @@
package com.mindskip.xzs.viewmodel.admin.exam;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@@ -9,7 +11,7 @@
import java.util.List;
import java.util.Map;
@Data
public class ExamPaperEditRequestVM {
    private Integer id;
//    @NotNull
@@ -22,6 +24,11 @@
    private String name;
    @NotNull
    private Integer suggestTime;
    /**
     * 发布试卷部门
     */
    private Integer deptId;
    private List<String> limitDateTime;
@@ -48,173 +55,4 @@
    private String status;
    private String menuIds;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getLevel() {
        return level;
    }
    public void setLevel(Integer level) {
        this.level = level;
    }
    public Integer[] getSubjectId() {
        return subjectId;
    }
    public void setSubjectId(Integer[] subjectId) {
        this.subjectId = subjectId;
    }
    public Integer getPaperType() {
        return paperType;
    }
    public void setPaperType(Integer paperType) {
        this.paperType = paperType;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getSuggestTime() {
        return suggestTime;
    }
    public void setSuggestTime(Integer suggestTime) {
        this.suggestTime = suggestTime;
    }
    public List<String> getLimitDateTime() {
        return limitDateTime;
    }
    public void setLimitDateTime(List<String> limitDateTime) {
        this.limitDateTime = limitDateTime;
    }
    public List<ExamPaperTitleItemVM> getTitleItems() {
        return titleItems;
    }
    public void setTitleItems(List<ExamPaperTitleItemVM> titleItems) {
        this.titleItems = titleItems;
    }
    public String getScore() {
        return score;
    }
    public void setScore(String score) {
        this.score = score;
    }
    public Integer[] getDepartmentIds() {
        return departmentIds;
    }
    public void setDepartmentIds(Integer[] departmentIds) {
        this.departmentIds = departmentIds;
    }
    public Map<Integer, Integer> getSubjectSource() {
        return subjectSource;
    }
    public void setSubjectSource(Map<Integer, Integer> subjectSource) {
        this.subjectSource = subjectSource;
    }
    public Integer getAggregateSource() {
        return aggregateSource;
    }
    public void setAggregateSource(Integer aggregateSource) {
        this.aggregateSource = aggregateSource;
    }
    public List<QuestionTypeVM> getQuestionTypeVMS() {
        return questionTypeVMS;
    }
    public void setQuestionTypeVMS(List<QuestionTypeVM> questionTypeVMS) {
        this.questionTypeVMS = questionTypeVMS;
    }
    public Integer[] getUserIds() {
        return userIds;
    }
    public void setUserIds(Integer[] userIds) {
        this.userIds = userIds;
    }
    public Integer[][] getUserId() {
        return userId;
    }
    public void setUserId(Integer[][] userId) {
        this.userId = userId;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public String getMenuIds() {
        return menuIds;
    }
    public void setMenuIds(String menuIds) {
        this.menuIds = menuIds;
    }
    @Override
    public String toString() {
        return "ExamPaperEditRequestVM{" +
                "id=" + id +
                ", level=" + level +
                ", subjectId=" + Arrays.toString(subjectId) +
                ", paperType=" + paperType +
                ", name='" + name + '\'' +
                ", suggestTime=" + suggestTime +
                ", limitDateTime=" + limitDateTime +
                ", titleItems=" + titleItems +
                ", score='" + score + '\'' +
                ", departmentIds=" + Arrays.toString(departmentIds) +
                ", userIds=" + Arrays.toString(userIds) +
                ", subjectSource=" + subjectSource +
                ", questionTypeVMS=" + questionTypeVMS +
                ", aggregateSource=" + aggregateSource +
                ", userId=" + Arrays.toString(userId) +
                ", type='" + type + '\'' +
                ", status='" + status + '\'' +
                ", menuIds='" + menuIds + '\'' +
                '}';
    }
}
src/main/resources/mapper/DepartmentMapper.xml
@@ -44,6 +44,9 @@
                LEFT JOIN t_user tu ON td.admin_id = tu.id AND tu.deleted = 0
        WHERE
            td.deleted = 0
            <if test="deptId != null">
                AND td.id = #{deptId}
            </if>
    </select>
    <select id="getById" resultMap="BaseResultMap">
@@ -95,7 +98,11 @@
    </select>
    <select id="selectByAdminId" resultType="integer">
        SELECT id FROM t_department WHERE admin_id = #{id} AND deleted = 0
        SELECT id FROM t_department WHERE admin_id = #{userId} AND deleted = 0
    </select>
    <select id="countByAdminId" resultType="integer">
        SELECT count(*) FROM t_department WHERE admin_id = #{userId} AND deleted = 0 AND id != #{id}
    </select>
</mapper>
src/main/resources/mapper/ExamTemplatesMapper.xml
@@ -70,6 +70,9 @@
            <if test="userId != null">
                and u.user_id = #{userId}
            </if>
            <if test="deptId != null">
                and e.dept_id = #{deptId}
            </if>
            <if test="now !=null">
                and #{now} between e.start_time and e.end_time
            </if>
@@ -93,4 +96,4 @@
        where id = #{id}
    </delete>
</mapper>
</mapper>