From ded4f0891dd2a76f36844d7c220155e3cd1e6918 Mon Sep 17 00:00:00 2001
From: 龚焕茏 <2842157468@qq.com>
Date: 星期四, 16 五月 2024 17:10:28 +0800
Subject: [PATCH] feat:部门管理员功能权限控制

---
 src/main/resources/mapper/QuestionMapper.xml                                                       |    2 
 src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java                             |    5 
 src/main/java/com/mindskip/xzs/service/ExamPaperAnswerService.java                                 |    3 
 src/main/java/com/mindskip/xzs/domain/vo/ExamTemplatesVO.java                                      |    5 
 src/main/java/com/mindskip/xzs/controller/admin/ExamPaperGradeController.java                      |   17 --
 src/main/java/com/mindskip/xzs/repository/UserMapper.java                                          |    5 
 src/main/resources/mapper/UserMapper.xml                                                           |   37 +++++-
 src/main/java/com/mindskip/xzs/controller/admin/ExamTemplatesController.java                       |   25 ---
 src/main/java/com/mindskip/xzs/viewmodel/admin/paper/ExamPaperGradeQuery.java                      |    3 
 src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java                               |    5 
 src/main/resources/mapper/ExamPaperMapper.xml                                                      |   12 +
 src/main/resources/mapper/ExamTemplatesMapper.xml                                                  |    8 
 src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java                          |   22 +--
 src/main/java/com/mindskip/xzs/domain/vo/ExamPaperStatisticVO.java                                 |   19 +++
 src/main/java/com/mindskip/xzs/service/DepartmentService.java                                      |    3 
 src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationSuccessHandler.java |    4 
 src/main/java/com/mindskip/xzs/controller/admin/ExamPaperAnswerController.java                     |   13 +
 src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java                                    |    2 
 src/main/java/com/mindskip/xzs/domain/ExamPaper.java                                               |    9 +
 src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java                                   |   11 +
 src/main/java/com/mindskip/xzs/service/impl/ExamPaperAnswerServiceImpl.java                        |    7 
 src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserPageRequestVM.java                         |   12 ++
 src/main/java/com/mindskip/xzs/controller/admin/UserController.java                                |    1 
 src/main/java/com/mindskip/xzs/configuration/spring/security/MyUser.java                           |   35 +++++
 src/main/resources/mapper/ExamPaperAnswerMapper.xml                                                |   14 +
 src/main/java/com/mindskip/xzs/base/BaseApiController.java                                         |   10 +
 src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java       |   11 -
 src/main/resources/mapper/DepartmentMapper.xml                                                     |    4 
 src/main/java/com/mindskip/xzs/context/WebContext.java                                             |   14 ++
 src/main/java/com/mindskip/xzs/service/UserService.java                                            |   10 +
 30 files changed, 223 insertions(+), 105 deletions(-)

diff --git a/src/main/java/com/mindskip/xzs/base/BaseApiController.java b/src/main/java/com/mindskip/xzs/base/BaseApiController.java
index db1c4da..875cad3 100644
--- a/src/main/java/com/mindskip/xzs/base/BaseApiController.java
+++ b/src/main/java/com/mindskip/xzs/base/BaseApiController.java
@@ -7,6 +7,8 @@
 import org.modelmapper.ModelMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.List;
+
 
 public class BaseApiController {
     /**
@@ -31,4 +33,12 @@
     protected User getCurrentUser() {
         return webContext.getCurrentUser();
     }
+
+    protected boolean isDeptAdmin() {
+        return webContext.isDeptAdmin();
+    }
+
+    protected List<Integer> getAdminDeptIds() {
+        return webContext.getAdminDeptIds();
+    }
 }
diff --git a/src/main/java/com/mindskip/xzs/configuration/spring/security/MyUser.java b/src/main/java/com/mindskip/xzs/configuration/spring/security/MyUser.java
new file mode 100644
index 0000000..94bddef
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/configuration/spring/security/MyUser.java
@@ -0,0 +1,35 @@
+package com.mindskip.xzs.configuration.spring.security;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.User;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @author gonghl
+ * @since 2024/5/16 涓婂崍 10:35
+ */
+
+@Getter
+@Setter
+public class MyUser extends User {
+
+    private Integer role;
+    private List<Integer> deptId;
+
+
+    public MyUser(String username, String password, Collection<? extends GrantedAuthority> authorities, Integer role, List<Integer> deptId) {
+        super(username, password, authorities);
+        this.role = role;
+        this.deptId = deptId;
+    }
+
+    public MyUser(String username, String password, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities, Integer role, List<Integer> deptId) {
+        super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
+        this.role = role;
+        this.deptId = deptId;
+    }
+}
diff --git a/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java b/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java
index fd508d2..305b486 100644
--- a/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java
+++ b/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java
@@ -9,7 +9,6 @@
 import com.mindskip.xzs.service.AuthenticationService;
 import com.mindskip.xzs.service.UserService;
 import lombok.RequiredArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.AuthenticationProvider;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.authentication.LockedException;
@@ -18,11 +17,11 @@
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.security.core.userdetails.User;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
+import java.util.List;
 
 
 /**
@@ -60,17 +59,15 @@
             throw new LockedException("鐢ㄦ埛琚鐢�");
         }
 
-//        // 鏌ヨ璇ョ敤鎴锋槸涓嶆槸閮ㄩ棬绠$悊鍛�
-//        Integer num = departmentMapper.countByAdminId(user.getId());
-
         ArrayList<GrantedAuthority> grantedAuthorities = new ArrayList<>();
         // 璧嬩簣閮ㄩ棬绠$悊鍛樿鑹�
         if (DeptAdminEnum.YES.getValue().equals(user.getDeptAdmin())) {
             grantedAuthorities.add(new SimpleGrantedAuthority(RoleEnum.DEPT_ADMIN.getRoleName()));
         }
         grantedAuthorities.add(new SimpleGrantedAuthority(RoleEnum.fromCode(user.getRole()).getRoleName()));
-
-        User authUser = new User(user.getUserName(), user.getPassword(), grantedAuthorities);
+        // 鑾峰彇璇ョ敤鎴风鐞嗛儴闂�
+        List<Integer> deptAdminIds = userService.getDeptAdminIds(user.getId());
+        MyUser authUser = new MyUser(user.getUserName(), user.getPassword(), grantedAuthorities, user.getRole(), deptAdminIds);
         return new UsernamePasswordAuthenticationToken(authUser, authUser.getPassword(), authUser.getAuthorities());
     }
 
diff --git a/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationSuccessHandler.java b/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationSuccessHandler.java
index 69948e8..30f79c6 100644
--- a/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationSuccessHandler.java
+++ b/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationSuccessHandler.java
@@ -55,8 +55,8 @@
                 com.mindskip.xzs.domain.User newUser = new com.mindskip.xzs.domain.User();
                 newUser.setUserName(user.getUserName());
                 newUser.setImagePath(user.getImagePath());
-                // 杩斿洖鏄惁閮ㄩ棬绠$悊鍛樼殑鏍囪瘑
-                newUser.setDeptAdmin(user.getDeptAdmin());
+                // 杩斿洖鏄惁閮ㄩ棬绠$悊鍛樼殑鏍囪瘑 1鏄儴闂ㄧ鐞嗗憳
+                newUser.setDeptAdmin(user.getRole().equals(-1) ? "1" : "0");
                 RestUtil.response(response, SystemCode.OK.getCode(), SystemCode.OK.getMessage(), newUser);
             }
         } else {
diff --git a/src/main/java/com/mindskip/xzs/context/WebContext.java b/src/main/java/com/mindskip/xzs/context/WebContext.java
index 2d312f3..45a1ce5 100644
--- a/src/main/java/com/mindskip/xzs/context/WebContext.java
+++ b/src/main/java/com/mindskip/xzs/context/WebContext.java
@@ -1,5 +1,6 @@
 package com.mindskip.xzs.context;
 
+import com.mindskip.xzs.configuration.spring.security.MyUser;
 import com.mindskip.xzs.domain.User;
 import com.mindskip.xzs.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -7,6 +8,8 @@
 import org.springframework.stereotype.Component;
 import org.springframework.web.context.request.RequestAttributes;
 import org.springframework.web.context.request.RequestContextHolder;
+
+import java.util.List;
 
 
 @Component
@@ -55,4 +58,15 @@
             return user;
         }
     }
+
+    public boolean isDeptAdmin() {
+        MyUser user = (MyUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
+        return user != null && user.getRole() != null && user.getRole().equals(-1);
+    }
+
+    public List<Integer> getAdminDeptIds() {
+        MyUser user = (MyUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
+        return user.getDeptId();
+    }
+
 }
diff --git a/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java b/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java
index 1d3da20..9f1e521 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java
@@ -10,22 +10,18 @@
 import com.mindskip.xzs.domain.vo.BaseSelect;
 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.apache.commons.lang3.ObjectUtils;
-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;
 
 
@@ -62,7 +58,7 @@
 
     @RequestMapping(value = "/list", method = RequestMethod.POST)
     public RestResponse<List<Department>> getAll(){
-        List<Department> res = departmentService.gets(-1);
+        List<Department> res = departmentService.gets(new ArrayList<>());
         return RestResponse.ok(res);
     }
 
@@ -95,15 +91,7 @@
 
     @RequestMapping(value = "/getDepartmentUser", method = RequestMethod.POST)
     public RestResponse<List<DepartmentVO>> getUserDepartment(Integer examPaperId){
-        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)
+        List<DepartmentVO> res = departmentService.gets(isDeptAdmin() ? getAdminDeptIds() : null)
                 .stream().map(e->{
                     DepartmentVO departmentVO = new DepartmentVO();
                     List<UserDepartment> userDepartments = userDepartmentMapper.selectByDepartmentId(e.getId());
@@ -129,4 +117,10 @@
                 }).collect(Collectors.toList());
         return RestResponse.ok(res);
     }
+
+    @RequestMapping(value = "/getDeptAdmins", method = RequestMethod.GET)
+    public RestResponse<List<Department>> getDeptAdmins(){
+        return RestResponse.ok(userService.getDeptAdmins(isDeptAdmin() ? getCurrentUser().getId() : null));
+    }
+
 }
diff --git a/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperAnswerController.java b/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperAnswerController.java
index 2a86dae..e903f59 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperAnswerController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperAnswerController.java
@@ -8,6 +8,7 @@
 import com.mindskip.xzs.domain.ExamPaperSubject;
 import com.mindskip.xzs.domain.Subject;
 import com.mindskip.xzs.domain.exam.ExamPaperAnswerObject;
+import com.mindskip.xzs.domain.vo.ExamPaperStatisticVO;
 import com.mindskip.xzs.service.ExamPaperAnswerService;
 import com.mindskip.xzs.service.ExamPaperSubjectService;
 import com.mindskip.xzs.service.SubjectService;
@@ -18,7 +19,10 @@
 import com.mindskip.xzs.viewmodel.admin.paper.ExamPaperAnswerPageRequestVM;
 import com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageResponseVM;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
 import java.math.BigDecimal;
@@ -116,8 +120,9 @@
         return RestResponse.ok(object);
     }
 
-    @RequestMapping(value = "/statistic", method = RequestMethod.GET)
-    public RestResponse<Map<String, Object>> statistic(String examPaperId, String departmentId) {
-        return RestResponse.ok(examPaperAnswerService.statistic(examPaperId, departmentId));
+    @RequestMapping(value = "/statistic", method = RequestMethod.POST)
+    public RestResponse<Map<String, Object>> statistic(@RequestBody ExamPaperStatisticVO examPaperStatisticVO) {
+        examPaperStatisticVO.setDepartmentId(isDeptAdmin() ? getAdminDeptIds() : null);
+        return RestResponse.ok(examPaperAnswerService.statistic(examPaperStatisticVO));
     }
 }
diff --git a/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperGradeController.java b/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperGradeController.java
index 5132110..c32ed50 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperGradeController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperGradeController.java
@@ -1,6 +1,5 @@
 package com.mindskip.xzs.controller.admin;
 
-import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.mindskip.xzs.base.BaseApiController;
@@ -9,25 +8,19 @@
 import com.mindskip.xzs.domain.ExamPaperAnswer;
 import com.mindskip.xzs.domain.User;
 import com.mindskip.xzs.domain.UserDepartment;
-import com.mindskip.xzs.domain.vo.ScoreTemplatesCountVO;
 import com.mindskip.xzs.repository.DepartmentMapper;
 import com.mindskip.xzs.repository.ExamPaperAnswerMapper;
 import com.mindskip.xzs.repository.UserDepartmentMapper;
 import com.mindskip.xzs.repository.UserMapper;
 import com.mindskip.xzs.service.*;
-import com.mindskip.xzs.utility.minio.DateUtils;
-import com.mindskip.xzs.viewmodel.admin.paper.ExamPaperGradePageRequestVM;
 import com.mindskip.xzs.viewmodel.admin.paper.ExamPaperGradeQuery;
 import lombok.RequiredArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Objects;
 
 @RestController("AdminExamPaperGradeController")
 @RequestMapping(value = "/api/admin/examPaperGrade")
@@ -105,14 +98,8 @@
 
     @RequestMapping(value = "/page", method = RequestMethod.POST)
     public RestResponse<PageInfo<ExamPaperAnswer>> pageJudgeList(@RequestBody ExamPaperGradeQuery query) {
-        // 鏌ュ嚭鐢ㄦ埛锛堝苟鍋氭暟鎹潈闄愶級
-        User currentUser = webContext.getCurrentUser();
-        if (Objects.nonNull(currentUser)) {
-            // 濡傛灉鏄儴闂ㄧ鐞嗗憳锛岄渶瑕佸仛鏁版嵁鏉冮檺
-            if ("1".equals(currentUser.getDeptAdmin())) {
-                query.setDeptId(departmentMapper.selectByAdminId(currentUser.getId()));
-            }
-        }
+        // 濡傛灉鏄儴闂ㄧ鐞嗗憳锛岄渶瑕佸仛鏁版嵁鏉冮檺
+        query.setDeptId(isDeptAdmin() ? getAdminDeptIds() : null);
         query.setFullTime();
         // 鏌ヨ
         PageInfo<ExamPaperAnswer> info = PageHelper.startPage(query.getPageIndex(), query.getPageSize()).doSelectPageInfo(() ->
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 627c892..161d99d 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/ExamTemplatesController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/ExamTemplatesController.java
@@ -1,28 +1,21 @@
 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")
@@ -36,28 +29,14 @@
 
     @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);
-            }
-        }
+        // 濡傛灉鏄儴闂ㄧ鐞嗗憳锛岄渶瑕佸仛鏁版嵁鏉冮檺
+        examTemplatesVO.setDeptId(isDeptAdmin() ? getAdminDeptIds() : null);
         PageInfo<ExamTemplates> pageInfo = examTemplatesService.getByadmins(examTemplatesVO);
         PageInfo<ExamTemplatesVO> info = PageInfoHelper.copyMap(pageInfo, e -> {
             ExamTemplatesVO vo = new ExamTemplatesVO();
diff --git a/src/main/java/com/mindskip/xzs/controller/admin/UserController.java b/src/main/java/com/mindskip/xzs/controller/admin/UserController.java
index db30138..1969829 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/UserController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/UserController.java
@@ -52,6 +52,7 @@
 
     @RequestMapping(value = "/page/list", method = RequestMethod.POST)
     public RestResponse<PageInfo<UserResponseVM>> pageList(@RequestBody UserPageRequestVM model) {
+        model.setDepartmentId(isDeptAdmin() ? getAdminDeptIds() : null);
         PageInfo<User> pageInfo = userService.userPage(model);
         PageInfo<UserResponseVM> page = PageInfoHelper.copyMap(pageInfo, d ->
                 UserResponseVM.from(d));
diff --git a/src/main/java/com/mindskip/xzs/domain/ExamPaper.java b/src/main/java/com/mindskip/xzs/domain/ExamPaper.java
index 8837fd5..ddfaae6 100644
--- a/src/main/java/com/mindskip/xzs/domain/ExamPaper.java
+++ b/src/main/java/com/mindskip/xzs/domain/ExamPaper.java
@@ -74,6 +74,15 @@
 
     private String userIds;
 
+    private Integer deptId;
+
+    public Integer getDeptId() {
+        return deptId;
+    }
+
+    public void setDeptId(Integer deptId) {
+        this.deptId = deptId;
+    }
 
     public Integer getId() {
         return id;
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/ExamPaperStatisticVO.java b/src/main/java/com/mindskip/xzs/domain/vo/ExamPaperStatisticVO.java
new file mode 100644
index 0000000..b099bdd
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/vo/ExamPaperStatisticVO.java
@@ -0,0 +1,19 @@
+package com.mindskip.xzs.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author gonghl
+ * @since 2024/5/16 涓婂崍 11:41
+ */
+
+@Data
+public class ExamPaperStatisticVO {
+
+    private Integer examPaperId;
+
+    private List<Integer> departmentId;
+
+}
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 81be8aa..ef83213 100644
--- a/src/main/java/com/mindskip/xzs/domain/vo/ExamTemplatesVO.java
+++ b/src/main/java/com/mindskip/xzs/domain/vo/ExamTemplatesVO.java
@@ -1,13 +1,10 @@
 package com.mindskip.xzs.domain.vo;
 
 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;
-import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -25,6 +22,6 @@
     /**
      * 閮ㄩ棬ID
      */
-    private Integer deptId;
+    private List<Integer> deptId;
 
 }
diff --git a/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java b/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java
index 078fab5..c530c64 100644
--- a/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java
@@ -14,7 +14,7 @@
 
     Integer update(Department department);
 
-    List<Department> gets(Integer deptId);
+    List<Department> gets(List<Integer> deptId);
 
     List<DepartmentResponseVM> page(DepartmentResponseVM departmentResponseVM);
 
diff --git a/src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java b/src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java
index 93d769f..5ad4dcf 100644
--- a/src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java
@@ -4,6 +4,7 @@
 import com.mindskip.xzs.domain.ExamTemplatesUserCount;
 import com.mindskip.xzs.domain.ScoreTemplatesUserCount;
 import com.mindskip.xzs.domain.other.KeyValue;
+import com.mindskip.xzs.domain.vo.ExamPaperStatisticVO;
 import com.mindskip.xzs.domain.vo.TeamplatesUserExcelVO;
 import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVM;
 import com.mindskip.xzs.viewmodel.admin.paper.ExamPaperGradePageRequestVM;
@@ -51,7 +52,7 @@
 
     void insertDefault(ExamPaperEditRequestVM model);
 
-    Map<String, Object> histogram(@Param("examPaperId") String examPaperId, @Param("departmentId") String departmentId);
+    Map<String, Object> histogram(ExamPaperStatisticVO examPaperStatisticVO);
 
-    Map<String, Object> pieChart(@Param("examPaperId") String examPaperId, @Param("departmentId") String departmentId);
+    Map<String, Object> pieChart(ExamPaperStatisticVO examPaperStatisticVO);
 }
diff --git a/src/main/java/com/mindskip/xzs/repository/UserMapper.java b/src/main/java/com/mindskip/xzs/repository/UserMapper.java
index f4708eb..9aecd97 100644
--- a/src/main/java/com/mindskip/xzs/repository/UserMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/UserMapper.java
@@ -1,5 +1,6 @@
 package com.mindskip.xzs.repository;
 
+import com.mindskip.xzs.domain.Department;
 import com.mindskip.xzs.domain.ExamPaper;
 import com.mindskip.xzs.domain.ExamPaperAnswer;
 import com.mindskip.xzs.domain.User;
@@ -165,4 +166,8 @@
     void updateUserDeptAdmin(UpdateDeptAdminVO form);
 
     void cancelUserDeptAdmin(UpdateDeptAdminVO form);
+
+    List<Integer> getDeptAdminIds(Integer id);
+
+    List<Department> getDeptAdmins(Integer id);
 }
diff --git a/src/main/java/com/mindskip/xzs/service/DepartmentService.java b/src/main/java/com/mindskip/xzs/service/DepartmentService.java
index 0abe871..13a8ea4 100644
--- a/src/main/java/com/mindskip/xzs/service/DepartmentService.java
+++ b/src/main/java/com/mindskip/xzs/service/DepartmentService.java
@@ -2,7 +2,6 @@
 
 import com.github.pagehelper.PageInfo;
 import com.mindskip.xzs.domain.Department;
-import com.mindskip.xzs.domain.Question;
 import com.mindskip.xzs.domain.vo.BaseSelect;
 import com.mindskip.xzs.domain.vo.UpdateDeptAdminVO;
 import com.mindskip.xzs.viewmodel.admin.department.DepartmentResponseVM;
@@ -40,7 +39,7 @@
 
     Department getById(Integer id);
 
-    List<Department> gets(Integer deptId);
+    List<Department> gets(List<Integer> deptId);
 
     Department getName(String name);
 
diff --git a/src/main/java/com/mindskip/xzs/service/ExamPaperAnswerService.java b/src/main/java/com/mindskip/xzs/service/ExamPaperAnswerService.java
index 5f24cad..3db0a56 100644
--- a/src/main/java/com/mindskip/xzs/service/ExamPaperAnswerService.java
+++ b/src/main/java/com/mindskip/xzs/service/ExamPaperAnswerService.java
@@ -2,6 +2,7 @@
 
 import com.github.pagehelper.PageInfo;
 import com.mindskip.xzs.domain.*;
+import com.mindskip.xzs.domain.vo.ExamPaperStatisticVO;
 import com.mindskip.xzs.viewmodel.admin.paper.ExamPaperGradePageRequestVM;
 import com.mindskip.xzs.viewmodel.admin.paper.ExamPaperGradeQuery;
 import com.mindskip.xzs.viewmodel.student.exam.ExamPaperSubmitVM;
@@ -64,5 +65,5 @@
 
     PageInfo<ExamPaperAnswer> getByCreatUser(ExamPaperGradeQuery query);
 
-    Map<String, Object> statistic(String examPaperId, String departmentId);
+    Map<String, Object> statistic(ExamPaperStatisticVO examPaperStatisticVO);
 }
diff --git a/src/main/java/com/mindskip/xzs/service/UserService.java b/src/main/java/com/mindskip/xzs/service/UserService.java
index 6fc577d..c2c44ba 100644
--- a/src/main/java/com/mindskip/xzs/service/UserService.java
+++ b/src/main/java/com/mindskip/xzs/service/UserService.java
@@ -1,12 +1,12 @@
 package com.mindskip.xzs.service;
 
+import com.github.pagehelper.PageInfo;
+import com.mindskip.xzs.domain.Department;
 import com.mindskip.xzs.domain.ExamPaper;
-import com.mindskip.xzs.domain.other.KeyValue;
 import com.mindskip.xzs.domain.User;
+import com.mindskip.xzs.domain.other.KeyValue;
 import com.mindskip.xzs.domain.vo.UserVO;
 import com.mindskip.xzs.viewmodel.admin.user.UserPageRequestVM;
-import com.github.pagehelper.PageInfo;
-import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -138,4 +138,8 @@
     void setStatus(UserVO user);
 
     User getUserByExam(ExamPaper examPaper);
+
+    List<Integer> getDeptAdminIds(Integer id);
+
+    List<Department> getDeptAdmins(Integer id);
 }
diff --git a/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
index d4d2290..503fd0b 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
@@ -89,10 +89,7 @@
     }
 
     @Override
-    public List<Department> gets(Integer deptId) {
-        if (deptId == null || deptId == -1) {
-            deptId = null;
-        }
+    public List<Department> gets(List<Integer> deptId) {
         return departmentMapper.gets(deptId);
     }
 
diff --git a/src/main/java/com/mindskip/xzs/service/impl/ExamPaperAnswerServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/ExamPaperAnswerServiceImpl.java
index 82a7cd6..98bf0e8 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/ExamPaperAnswerServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/ExamPaperAnswerServiceImpl.java
@@ -10,6 +10,7 @@
 import com.mindskip.xzs.domain.other.ExamPaperAnswerUpdate;
 import com.mindskip.xzs.domain.other.KeyValue;
 import com.mindskip.xzs.domain.task.TaskItemAnswerObject;
+import com.mindskip.xzs.domain.vo.ExamPaperStatisticVO;
 import com.mindskip.xzs.repository.ExamPaperAnswerMapper;
 import com.mindskip.xzs.repository.ExamPaperMapper;
 import com.mindskip.xzs.repository.QuestionMapper;
@@ -312,10 +313,10 @@
     }
 
     @Override
-    public Map<String, Object> statistic(String examPaperId, String departmentId) {
+    public Map<String, Object> statistic(ExamPaperStatisticVO examPaperStatisticVO) {
         // 鑾峰彇鍘熷鏁版嵁
-        Map<String, Object> histogram = examPaperAnswerMapper.histogram(examPaperId, departmentId);
-        Map<String, Object> pieChart = examPaperAnswerMapper.pieChart(examPaperId, departmentId);
+        Map<String, Object> histogram = examPaperAnswerMapper.histogram(examPaperStatisticVO);
+        Map<String, Object> pieChart = examPaperAnswerMapper.pieChart(examPaperStatisticVO);
         // 鍒濆鍖栫粨鏋滃鍣�
         HashMap<String, Object> map = new HashMap<>();
         List<Map<String, Object>> score = new ArrayList<>();
diff --git a/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java
index b470504..0282db7 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java
@@ -1,5 +1,6 @@
 package com.mindskip.xzs.service.impl;
 
+import com.mindskip.xzs.domain.Department;
 import com.mindskip.xzs.domain.ExamPaper;
 import com.mindskip.xzs.domain.other.KeyValue;
 import com.mindskip.xzs.domain.vo.UserVO;
@@ -183,4 +184,14 @@
     public User getUserByExam(ExamPaper examPaper) {
         return userMapper.getUserByExam(examPaper);
     }
+
+    @Override
+    public List<Integer> getDeptAdminIds(Integer id) {
+        return userMapper.getDeptAdminIds(id);
+    }
+
+    @Override
+    public List<Department> getDeptAdmins(Integer id) {
+        return userMapper.getDeptAdmins(id);
+    }
 }
diff --git a/src/main/java/com/mindskip/xzs/viewmodel/admin/paper/ExamPaperGradeQuery.java b/src/main/java/com/mindskip/xzs/viewmodel/admin/paper/ExamPaperGradeQuery.java
index a15ec97..376c12b 100644
--- a/src/main/java/com/mindskip/xzs/viewmodel/admin/paper/ExamPaperGradeQuery.java
+++ b/src/main/java/com/mindskip/xzs/viewmodel/admin/paper/ExamPaperGradeQuery.java
@@ -6,6 +6,7 @@
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -24,7 +25,7 @@
     /**
      * 閮ㄩ棬ID
      */
-    private Integer deptId;
+    private List<Integer> deptId;
 
     /**
      * 鍙傝�冧汉
diff --git a/src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserPageRequestVM.java b/src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserPageRequestVM.java
index f0d36d6..2da26fa 100644
--- a/src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserPageRequestVM.java
+++ b/src/main/java/com/mindskip/xzs/viewmodel/admin/user/UserPageRequestVM.java
@@ -2,12 +2,24 @@
 
 import com.mindskip.xzs.base.BasePage;
 
+import java.util.List;
+
 
 public class UserPageRequestVM extends BasePage {
 
     private String userName;
     private Integer role;
 
+    private List<Integer> departmentId;
+
+    public List<Integer> getDepartmentId() {
+        return departmentId;
+    }
+
+    public void setDepartmentId(List<Integer> departmentId) {
+        this.departmentId = departmentId;
+    }
+
     public String getUserName() {
         return userName;
     }
diff --git a/src/main/resources/mapper/DepartmentMapper.xml b/src/main/resources/mapper/DepartmentMapper.xml
index ea69ef0..bd448a9 100644
--- a/src/main/resources/mapper/DepartmentMapper.xml
+++ b/src/main/resources/mapper/DepartmentMapper.xml
@@ -41,8 +41,8 @@
             t_department td
         WHERE
             td.deleted = 0
-            <if test="deptId != null">
-                AND td.id = #{deptId}
+            <if test="deptId != null and deptId.size() > 0">
+                AND td.id in <foreach collection="deptId" item="item" index="index" open="(" separator="," close=")"> #{item} </foreach>
             </if>
     </select>
 
diff --git a/src/main/resources/mapper/ExamPaperAnswerMapper.xml b/src/main/resources/mapper/ExamPaperAnswerMapper.xml
index a730052..436730b 100644
--- a/src/main/resources/mapper/ExamPaperAnswerMapper.xml
+++ b/src/main/resources/mapper/ExamPaperAnswerMapper.xml
@@ -412,8 +412,11 @@
     FROM
     t_exam_paper_answer a
     INNER JOIN (SELECT * FROM t_user_department
-    <if test="departmentId != null and departmentId != ''">
-      WHERE department_id = #{departmentId}
+    <if test="departmentId != null and departmentId.size() > 0">
+      WHERE department_id IN
+      <foreach collection="departmentId" item="item" open="(" separator="," close=")">
+        #{item}
+      </foreach>
     </if>
     GROUP BY user_id) b ON a.create_user = b.user_id
     LEFT JOIN t_user c ON a.create_user = c.id
@@ -438,8 +441,11 @@
     </if>
     LEFT JOIN t_exam_paper_answer c ON a.exam_paper_id = c.exam_paper_id AND a.user_id = c.create_user AND (c.invalid IS NULL OR c.invalid = 0)
     INNER JOIN (SELECT * FROM t_user_department
-    <if test="departmentId != null and departmentId != ''">
-      WHERE department_id = #{departmentId}
+    <if test="departmentId != null and departmentId.size() > 0">
+      WHERE department_id IN
+      <foreach collection="departmentId" item="item" open="(" separator="," close=")">
+        #{item}
+      </foreach>
     </if>
     GROUP BY user_id) d ON a.user_id = d.user_id
   </select>
diff --git a/src/main/resources/mapper/ExamPaperMapper.xml b/src/main/resources/mapper/ExamPaperMapper.xml
index 4708fcc..3ce8086 100644
--- a/src/main/resources/mapper/ExamPaperMapper.xml
+++ b/src/main/resources/mapper/ExamPaperMapper.xml
@@ -21,7 +21,7 @@
     <result column="user_ids" jdbcType="VARCHAR" property="userIds" />
   </resultMap>
   <sql id="Base_Column_List">
-    id, name, subject_id, paper_type, grade_level, score, question_count, suggest_time,
+    id, dept_id, name, subject_id, paper_type, grade_level, score, question_count, suggest_time,
     limit_start_time, limit_end_time, frame_text_content_id, create_user, create_time,
     deleted, task_exam_id, type, user_ids
   </sql>
@@ -55,6 +55,9 @@
     <trim prefix="(" suffix=")" suffixOverrides=",">
       <if test="id != null">
         id,
+      </if>
+      <if test="deptId != null">
+        dept_id,
       </if>
       <if test="name != null">
         name,
@@ -108,6 +111,9 @@
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="id != null">
         #{id,jdbcType=INTEGER},
+      </if>
+      <if test="deptId != null">
+        #{deptId,jdbcType=INTEGER},
       </if>
       <if test="name != null">
         #{name,jdbcType=VARCHAR},
@@ -165,6 +171,9 @@
       <if test="name != null">
         name = #{name,jdbcType=VARCHAR},
       </if>
+      <if test="deptId != null">
+        dept_id = #{deptId,jdbcType=INTEGER},
+      </if>
       <if test="subjectId != null">
         subject_id = #{subjectId,jdbcType=INTEGER},
       </if>
@@ -214,6 +223,7 @@
     update t_exam_paper
     set name = #{name,jdbcType=VARCHAR},
       subject_id = #{subjectId,jdbcType=INTEGER},
+      dept_id = #{deptId,jdbcType=INTEGER},
       paper_type = #{paperType,jdbcType=INTEGER},
       grade_level = #{gradeLevel,jdbcType=INTEGER},
       score = #{score,jdbcType=INTEGER},
diff --git a/src/main/resources/mapper/ExamTemplatesMapper.xml b/src/main/resources/mapper/ExamTemplatesMapper.xml
index 07e28d5..97384b9 100644
--- a/src/main/resources/mapper/ExamTemplatesMapper.xml
+++ b/src/main/resources/mapper/ExamTemplatesMapper.xml
@@ -20,8 +20,8 @@
     </sql>
 
     <insert id="add" parameterType="com.mindskip.xzs.domain.ExamTemplates" useGeneratedKeys="true" keyProperty="id">
-        insert into t_exam_templates (name, paper_type, suggest_time, title_name, ctime, status, menu_ids,start_time,end_time)
-        values (#{name}, #{paperType}, #{suggestTime}, #{titleName}, #{ctime}, #{status}, #{menuIds},#{startTime},#{endTime})
+        insert into t_exam_templates (name, paper_type, dept_id, suggest_time, title_name, ctime, status, menu_ids,start_time,end_time)
+        values (#{name}, #{paperType}, #{deptId}, #{suggestTime}, #{titleName}, #{ctime}, #{status}, #{menuIds},#{startTime},#{endTime})
     </insert>
 
     <select id="getTime" resultMap="BaseResultMap">
@@ -70,8 +70,8 @@
             <if test="userId != null">
                 and u.user_id = #{userId}
             </if>
-            <if test="deptId != null">
-                and e.dept_id = #{deptId}
+            <if test="deptId != null and deptId.size() > 0">
+                and e.dept_id in <foreach collection="deptId" item="item" separator="," open="(" close=")"> #{item} </foreach>
             </if>
             <if test="now !=null">
                 and #{now} between e.start_time and e.end_time
diff --git a/src/main/resources/mapper/QuestionMapper.xml b/src/main/resources/mapper/QuestionMapper.xml
index 7acf77b..b47999b 100644
--- a/src/main/resources/mapper/QuestionMapper.xml
+++ b/src/main/resources/mapper/QuestionMapper.xml
@@ -192,7 +192,7 @@
             <if test="level != null ">
                 and q.grade_level= #{level}
             </if>
-            <if test="subjectId != null ">
+            <if test="subjectId != null and subjectId.length > 0">
                 and qs.subject_id in
                 <foreach item="subjectId" collection="subjectId" open="(" separator=","
                          close=")">
diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml
index e04892e..2a28d9a 100644
--- a/src/main/resources/mapper/UserMapper.xml
+++ b/src/main/resources/mapper/UserMapper.xml
@@ -332,17 +332,27 @@
     <select id="userPage" resultMap="BaseResultMap"
             parameterType="com.mindskip.xzs.viewmodel.admin.user.UserPageRequestVM">
         SELECT
-        <include refid="Base_Column_List"/>
-        FROM t_user
-        <where>
-            and deleted=0
+        a.*
+        FROM t_user a
+        lEFT join
+            (select * from t_user_department
+            <if test="departmentId != null and departmentId.size() > 0">
+                where department_id in <foreach collection="departmentId" item="item" index="index" open="(" separator="," close=")"> #{item} </foreach>
+            </if>
+                group by user_id
+            )
+            b on a.id = b.user_id
+        where
+            a.deleted=0
+            <if test="departmentId != null and departmentId.size() > 0">
+                and b.department_id in <foreach collection="departmentId" item="item" index="index" open="(" separator="," close=")"> #{item} </foreach>
+            </if>
             <if test="userName != null and userName != ''">
                 and real_name like concat('%',#{userName},'%')
             </if>
             <if test="role != null ">
                 and role= #{role}
             </if>
-        </where>
     </select>
 
 
@@ -481,8 +491,8 @@
         t_user tu INNER JOIN t_user_department tud ON tu.id = tud.user_id AND tu.deleted = 0
         LEFT JOIN t_exam_paper_answer tepa ON tepa.create_user = tu.id
         <where>
-            <if test="query.deptId != null">
-                AND tud.department_id = #{query.deptId}
+            <if test="query.deptId != null and query.deptId.size() > 0">
+                AND tud.department_id in <foreach collection="query.deptId" item="deptId" open="(" separator="," close=")"> #{deptId} </foreach>
             </if>
             <if test="query.start != null and query.end != null">
                 AND tepa.create_time between #{query.start} and #{query.end}
@@ -531,4 +541,17 @@
         )))
     </update>
 
+    <select id="getDeptAdminIds" resultType="java.lang.Integer" parameterType="java.lang.Integer">
+        select department_id from t_user_department where dept_admin = 1 and user_id = #{id}
+    </select>
+
+    <select id="getDeptAdmins" resultType="com.mindskip.xzs.domain.Department" parameterType="java.lang.Integer">
+        <if test="id != null">
+        select a.id, a.name from t_department a inner join t_user_department b on a.id = b.department_id where a.deleted = 0 and b.dept_admin = 1 and b.user_id = #{id} order by a.id desc
+        </if>
+        <if test="id == null">
+        select a.id, a.name from t_department a where a.deleted = 0 order by a.id desc
+        </if>
+    </select>
+
 </mapper>

--
Gitblit v1.8.0