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