Ver Fonte

Merge branch 'feature-groupWorker-search' into 'Release'

Feature group worker search

1. 班级学生后端分页
2. 学生关键字搜索
3. 关键字排序

See merge request !252

huangyong há 8 anos atrás
pai
commit
acd45500e8

+ 3 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Group2WorkerDao.java

@@ -1,7 +1,9 @@
 package cn.iselab.mooctest.site.dao;
 
 import cn.iselab.mooctest.site.models.Group2Worker;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.PagingAndSortingRepository;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
@@ -11,7 +13,7 @@ import java.util.List;
  * @date 2017-03-08.
  */
 @Transactional
-public interface Group2WorkerDao extends CrudRepository<Group2Worker, Long> {
+public interface Group2WorkerDao extends CrudRepository<Group2Worker, Long>,PagingAndSortingRepository<Group2Worker, Long>, JpaSpecificationExecutor<Group2Worker> {
 
     int countByGroupId(long groupId);
 

+ 9 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/GroupDao.java

@@ -121,6 +121,15 @@ public interface GroupDao extends PagingAndSortingRepository<Group, Long> {
             " FROM Group2Worker g2w " +
             " WHERE g2w.groupId=:groupId)")
     List<User> getUsersByGroupId(@Param("groupId") long groupId);
+
+    @Query("SELECT u " +
+            "FROM User u " +
+            "WHERE u.id IN( " +
+            " SELECT g2w.participantId " +
+            " FROM Group2Worker g2w " +
+            " WHERE g2w.groupId=:groupId)" +
+            " AND (u.name LIKE concat('%',:keyword,'%') or u.email LIKE concat('%',:keyword,'%') or u.mobile LIKE concat('%',:keyword,'%'))")
+    Page<User> findByIdAndKeyWord(@Param("groupId")long groupId, @Param("keyword") String keyword, Pageable pageable);
 }
 
 

+ 3 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/GroupService.java

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.site.service;
 
 import cn.iselab.mooctest.site.models.Group;
+import cn.iselab.mooctest.site.models.Group2Worker;
 import cn.iselab.mooctest.site.models.User;
 import cn.iselab.mooctest.site.models.Worker;
 import org.springframework.data.domain.Page;
@@ -36,6 +37,8 @@ public interface GroupService {
 
     List<User> getUserByGroupId(long groupId);
 
+    Page<User> getUserByGroupId(long groupId, String keyword, Pageable pageable);
+
     Group joinGroup(long userId, Group group);
 
     int getWorkerCount(long groupId);

+ 14 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/GroupServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.service.impl;
 
+import cn.iselab.mooctest.site.common.constant.ThirdPartConstants;
 import cn.iselab.mooctest.site.dao.Group2WorkerDao;
 import cn.iselab.mooctest.site.dao.GroupDao;
 import cn.iselab.mooctest.site.dao.Task2CaseDao;
@@ -9,13 +10,21 @@ import cn.iselab.mooctest.site.models.*;
 import cn.iselab.mooctest.site.models.instancePermission.GroupPermission;
 import cn.iselab.mooctest.site.service.*;
 import cn.iselab.mooctest.site.service.instancePermission.GroupPermissionService;
+import cn.iselab.mooctest.site.util.data.StringUtil;
 import cn.iselab.mooctest.site.web.exception.IllegalOperationException;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.data.jpa.domain.Specifications;
 import org.springframework.stereotype.Service;
 
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
 import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.List;
@@ -128,6 +137,11 @@ public class GroupServiceImpl implements GroupService {
     }
 
     @Override
+    public Page<User> getUserByGroupId(long groupId, String keyword, Pageable pageable) {
+        return groupDao.findByIdAndKeyWord(groupId, keyword,pageable);
+    }
+
+    @Override
     public Group joinGroup(long userId, Group group) {
 
         String permission = userId + ":group:*:" + group.getId();

+ 20 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/GroupController.java

@@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
@@ -81,13 +82,30 @@ public class GroupController extends BaseController {
 
     @RequiresPermissions("groupDetail:view")
     @RequestMapping(value = UrlConstants.API + "group/{id:\\d+}/user", method = RequestMethod.GET)
-    public List<UserVO> getManagerWorkersInGroup(@PathVariable("id") long groupId) {
+    public Page<UserVO> getManagerWorkersInGroupPageable(@PathVariable("id") long groupId,
+                                                         @RequestParam(name = "keyword", required = false) String keyword,
+                                                         @RequestParam(name = "sortOrder", required = false) String sortOrder,
+                                                         @RequestParam(name = "sortBy", required = false) String sortBy,
+                                                         HttpServletRequest request) {
         User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
         String permission = user.getId() + ":group:view:" + groupId;
         if(!SecurityUtils.getSubject().isPermitted(new GroupPermission(permission))) {
             throw new UnauthorizedException("unauthorized");
         }
-        return groupLogic.getManagerWorkersInGroup(groupId);
+        Sort sort;
+        if(sortOrder== null || sortOrder.equals("desc"))
+            sort = new Sort(Sort.Direction.DESC,sortBy);
+        else
+            sort = new Sort(Sort.Direction.ASC,sortBy);
+        String activePage = request.getHeader("activePage");
+        String rowsOnPage = request.getHeader("rowsOnPage");
+        if(activePage == null || rowsOnPage == null) {
+            throw new IllegalArgumentException("缺少分页信息");
+        }
+        if(keyword == null)
+            keyword = "";
+        Pageable pageable = new PageRequest(Integer.parseInt(activePage) - 1, Integer.parseInt(rowsOnPage),sort);
+        return groupLogic.getManagerWorkersInGroupPageable(groupId,keyword,pageable);
     }
 
     @RequiresPermissions("groupWorkers:add")

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/GroupLogic.java

@@ -34,6 +34,8 @@ public interface GroupLogic {
 
     List<UserVO>  getManagerWorkersInGroup(long groupId);
 
+    Page<UserVO> getManagerWorkersInGroupPageable(long groupId,String keyword,Pageable pageable);
+
     GroupVO createGroup(long managerId, GroupVO groupVO);
 
     GroupVO createGroup(GroupVO groupVO);

+ 21 - 11
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/GroupLogicImpl.java

@@ -1,9 +1,6 @@
 package cn.iselab.mooctest.site.web.logic.impl;
 
-import cn.iselab.mooctest.site.models.Group;
-import cn.iselab.mooctest.site.models.Manager;
-import cn.iselab.mooctest.site.models.User;
-import cn.iselab.mooctest.site.models.Worker;
+import cn.iselab.mooctest.site.models.*;
 import cn.iselab.mooctest.site.models.instancePermission.GroupPermission;
 import cn.iselab.mooctest.site.service.GroupService;
 import cn.iselab.mooctest.site.service.ManagerService;
@@ -11,15 +8,14 @@ import cn.iselab.mooctest.site.service.UserService;
 import cn.iselab.mooctest.site.service.WorkerService;
 import cn.iselab.mooctest.site.service.instancePermission.GroupPermissionService;
 import cn.iselab.mooctest.site.web.data.GroupVO;
-import cn.iselab.mooctest.site.web.data.PaperVO;
 import cn.iselab.mooctest.site.web.data.UserVO;
 import cn.iselab.mooctest.site.web.data.WorkerVO;
 import cn.iselab.mooctest.site.web.data.wrapper.GroupVOWrapper;
+import cn.iselab.mooctest.site.web.data.wrapper.UserVOWrapper;
 import cn.iselab.mooctest.site.web.data.wrapper.WorkerVOWrapper;
 import cn.iselab.mooctest.site.web.exception.HttpBadRequestException;
 import cn.iselab.mooctest.site.web.exception.HttpForbiddenException;
 import cn.iselab.mooctest.site.web.exception.HttpNotFoundException;
-import cn.iselab.mooctest.site.web.exception.IllegalOperationException;
 import cn.iselab.mooctest.site.web.logic.BaseLogic;
 import cn.iselab.mooctest.site.web.logic.GroupLogic;
 import cn.iselab.mooctest.site.web.util.CaptchaUtils;
@@ -149,7 +145,9 @@ public class GroupLogicImpl extends BaseLogic implements GroupLogic {
         if(group==null){
             throw new HttpNotFoundException(String.format("Group[id=%s] doesn't exist", groupId));
         }
-        return Converter.convert(GroupVO.class,group);
+        GroupVO groupVO = Converter.convert(GroupVO.class,group);
+        groupVO.setWorkerCount(groupService.getWorkerCount(groupId));
+        return groupVO;
     }
 
     @Override
@@ -181,6 +179,19 @@ public class GroupLogicImpl extends BaseLogic implements GroupLogic {
     }
 
     @Override
+    public Page<UserVO> getManagerWorkersInGroupPageable(long groupId,String keyword,Pageable pageable) {
+        Page<User> users = groupService.getUserByGroupId(groupId,keyword,pageable);
+        Page<UserVO> userVOS = users.map(new org.springframework.core.convert.converter.Converter<User,UserVO>(){
+            @Override
+            public UserVO convert(User source) {
+                UserVOWrapper userVOWrapper=new UserVOWrapper();
+                return userVOWrapper.wrap(source);
+            }
+        });
+        return userVOS;
+    }
+
+    @Override
     public GroupVO createGroup(long managerId, GroupVO groupVO) {
 
         String name = groupVO.getName();
@@ -294,15 +305,14 @@ public class GroupLogicImpl extends BaseLogic implements GroupLogic {
     public UserVO addUserIntoGroup(String userName, long groupId) {
         Group group = groupService.getGroup(groupId);
         if (group == null) {
-            throw new HttpNotFoundException("Group[id=" + groupId + "] doesn't exist");
+            throw new HttpNotFoundException("班级[id=" + groupId + "]不存在!");
         }
         User user=userService.findByUsername(userName);
         if(user==null){
-            throw new HttpNotFoundException(String.format("Worker[username=%s] not exist",userName));
+            throw new HttpNotFoundException("用户[" + userName + "]不存在!");
         }
         if (groupService.checkUserExist(user.getId(), groupId)) {
-            throw new HttpBadRequestException(String.format("Worker[id=%s] already " +
-                    "exists in Group[id=%s]", user.getId(), groupId));
+            throw new HttpBadRequestException("用户已在此班级中!");
         }
         UserVO uv=Converter.convert(UserVO.class,groupService.addUserIntoGroup(user.getId(),groupId));
         uv.setPassword("");