Browse Source

添加后台管理用解绑用户和搜索用户的接口

huxz 8 years ago
parent
commit
42ebecf69e

+ 9 - 0
sso-manage-console/src/main/java/com/uas/sso/sso/backend/api/UserManageController.java

@@ -4,6 +4,7 @@ import com.uas.sso.entity.User;
 import com.uas.sso.sso.backend.dto.UpdateUserInfo;
 import com.uas.sso.sso.backend.service.UserService;
 import com.uas.sso.sso.backend.support.ResultBean;
+import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Pageable;
 import org.springframework.http.MediaType;
@@ -47,6 +48,14 @@ public class UserManageController {
         return new ResultBean<>(userService.showEnUserByPagination(page, spaceUU));
     }
 
+    @RequestMapping(method = RequestMethod.GET, path = "//searchUserByKeyword",
+            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public ResultBean<List<User>> searchUserByKeyword(@RequestParam("spaceUU") Long spaceUu,
+            String key, String keyword) {
+
+        return new ResultBean<>(userService.searchUserByKeyword(spaceUu, key, keyword));
+    }
+
     @RequestMapping(method = RequestMethod.PUT, path = "//modifyUserInfo",
             produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
     public ResultBean<Boolean> modifyUserInfo(@RequestBody UpdateUserInfo userInfo) {

+ 24 - 12
sso-manage-console/src/main/java/com/uas/sso/sso/backend/api/UserSpaceManageController.java

@@ -43,20 +43,32 @@ public class UserSpaceManageController {
 
     @RequestMapping(method = RequestMethod.PUT, path = "//modifySpaceInfo",
             produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-    public ResultBean<Boolean> modifyUserInfo(@RequestBody UpdateSpaceInfo spaceInfo) {
+    public ResultBean<Userspace> modifyUserSpaceInfo(@RequestBody UpdateSpaceInfo spaceInfo) {
 
-        return new ResultBean<>(spaceService.modifyUserInfo(spaceInfo));
+        return new ResultBean<>(spaceService.modifyUserSpaceInfo(spaceInfo));
     }
 
-    @Deprecated
-    @RequestMapping(method = RequestMethod.GET, path = "//showSpaceByPaginationOld",
+    @RequestMapping(method = RequestMethod.PUT, path = "/{spaceUU}/unbindUser",
             produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-    public ResultBean<org.springframework.data.domain.Page<Userspace>> showUserByPagination(Pageable page,
-            Short validCode,
-            @RequestParam(required = false) String spaceName,
-            @RequestParam(required = false) String businessCode) {
+    public ResultBean<Userspace> unbindUser(@PathVariable("spaceUU") Long spaceUu,
+            @RequestParam("userUU") Long userUu) {
 
-        return new ResultBean<>(spaceService.showSpaceByPagination(page, spaceName, businessCode, validCode));
+        return new ResultBean<>(spaceService.unbindUser(spaceUu, userUu));
+    }
+
+    @RequestMapping(method = RequestMethod.PUT, path = "/{spaceUU}/changeAdmin",
+            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public ResultBean<Userspace> changeAdmin(@PathVariable("spaceUU") Long spaceUu, Long userUU) {
+
+        return new ResultBean<>(spaceService.changeAdmin(spaceUu, userUU));
+    }
+
+    @RequestMapping(method = RequestMethod.PUT, path = "/{spaceUU}/authEnterpriseInfo",
+            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public ResultBean<Userspace> authEnterpriseInfo(@PathVariable("spaceUU") Long spaceUu,
+            Boolean isPass, @RequestParam(required = false) String reason) {
+
+        return new ResultBean<>(spaceService.authEnterpriseInfo(spaceUu, isPass, reason));
     }
 
     @RequestMapping(method = RequestMethod.PUT, path = "/{spaceUU}/addUserToSpace",
@@ -68,8 +80,8 @@ public class UserSpaceManageController {
 
     @RequestMapping(method = RequestMethod.PUT, path = "/{spaceUU}/bindAppWithSpace",
             produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-    public ResultBean<Boolean> bindAppWithSpace(@PathVariable("spaceUU") Long spaceUu, String appUid) {
-        spaceService.bindAppWithSpace(spaceUu, appUid);
-        return new ResultBean<>(true);
+    public ResultBean<Userspace> bindAppWithSpace(@PathVariable("spaceUU") Long spaceUu, String appUid) {
+
+        return new ResultBean<>(spaceService.bindAppWithSpace(spaceUu, appUid));
     }
 }

+ 12 - 1
sso-manage-console/src/main/java/com/uas/sso/sso/backend/service/UserService.java

@@ -2,6 +2,7 @@ package com.uas.sso.sso.backend.service;
 
 import com.uas.sso.entity.User;
 import com.uas.sso.sso.backend.dto.UpdateUserInfo;
+import java.util.List;
 import javax.validation.constraints.NotNull;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -35,6 +36,16 @@ public interface UserService {
      */
     Page<User> showEnUserByPagination(@NotNull Pageable page, @NotNull Long spaceUU);
 
+    /**
+     * 根据关键字搜索企业用户信息.
+     *
+     * @param spaceUu   企业UU
+     * @param key   搜索字段
+     * @param keyword   搜索关键字
+     * @return  用户列表信息
+     */
+    List<User> searchUserByKeyword(Long spaceUu, String key, String keyword);
+
     /**
      * 管理员收到客户时,后台修改用户的信息.
      *
@@ -42,5 +53,5 @@ public interface UserService {
      * @return  操作状态
      */
     Boolean modifyUserInfo(UpdateUserInfo userInfo);
-
 }
+

+ 15 - 3
sso-manage-console/src/main/java/com/uas/sso/sso/backend/service/UserSpaceService.java

@@ -2,6 +2,7 @@ package com.uas.sso.sso.backend.service;
 
 import com.uas.sso.entity.Userspace;
 import com.uas.sso.sso.backend.dto.UpdateSpaceInfo;
+import javax.validation.constraints.NotNull;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
@@ -15,11 +16,22 @@ public interface UserSpaceService {
     Page<Userspace> showSpaceByPagination(Pageable page, Short validCode, String fromApp, String key,
             String keyword);
 
-    Boolean modifyUserInfo(UpdateSpaceInfo spaceInfo);
+    Userspace modifyUserSpaceInfo(UpdateSpaceInfo spaceInfo);
 
-    Page<Userspace> showSpaceByPagination(Pageable page, String spaceName, String businessCode, Short validCode);
+    /**
+     * 管理员通过后台管理解绑某个企业的用户.
+     *
+     * @param spaceUu   企业UU
+     * @param userUu    用户UU
+     * @return  解绑之后的企业信息
+     */
+    Userspace unbindUser(@NotNull Long spaceUu, @NotNull Long userUu);
+
+    Userspace changeAdmin(@NotNull Long spaceUu, @NotNull Long userUU);
+
+    Userspace authEnterpriseInfo(@NotNull Long spaceUu, @NotNull Boolean isPass, String reason);
 
     void addUserToSpace(Long spaceUu, Long userUu);
 
-    void bindAppWithSpace(Long spaceUu, String appUid);
+    Userspace bindAppWithSpace(Long spaceUu, String appUid);
 }

+ 33 - 3
sso-manage-console/src/main/java/com/uas/sso/sso/backend/service/impl/UserServiceImpl.java

@@ -81,10 +81,9 @@ public class UserServiceImpl implements UserService {
             public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query,
                     CriteriaBuilder builder) {
                 List<Predicate> predicates = new ArrayList<>();
+
                 if (spaceUU != null) {
-                    Userspace space = new Userspace();
-                    space.setSpaceUU(spaceUU);
-                    Predicate predicate = builder.isMember(space, root.get("userSpaces"));
+                    Predicate predicate = builder.isMember(new Userspace(spaceUU), root.get("userSpaces"));
                     predicates.add(predicate);
                 }
 
@@ -100,6 +99,37 @@ public class UserServiceImpl implements UserService {
         }, page);
     }
 
+    @Override
+    public List<User> searchUserByKeyword(Long spaceUu, String key, String keyword) {
+
+        return userDao.findAll(new Specification<User>() {
+            @Override
+            public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query,
+                    CriteriaBuilder builder) {
+                List<Predicate> predicates = new ArrayList<>();
+
+                if (spaceUu != null) {
+                    Predicate predicate = builder.isMember(new Userspace(spaceUu), root.get("userSpaces"));
+                    predicates.add(predicate);
+                }
+
+                if (!StringUtils.isEmpty(key) && !StringUtils.isEmpty(keyword)) {
+                    Predicate predicate = builder.like(root.get(key), "%" + keyword + "%");
+                    predicates.add(predicate);
+                }
+
+                // 移除无效条件表达式
+                predicates.removeAll(Collections.singletonList(null));
+
+                Predicate[] array = new Predicate[predicates.size()];
+                predicates.toArray(array);
+                Predicate predicate = builder.and(array);
+                query.where(predicate);
+                return null;
+            }
+        });
+    }
+
     @Override
     public Boolean modifyUserInfo(UpdateUserInfo userInfo) {
 

+ 95 - 68
sso-manage-console/src/main/java/com/uas/sso/sso/backend/service/impl/UserSpaceServiceImpl.java

@@ -1,5 +1,6 @@
 package com.uas.sso.sso.backend.service.impl;
 
+import com.uas.sso.core.Status;
 import com.uas.sso.dao.AppDao;
 import com.uas.sso.dao.UserDao;
 import com.uas.sso.dao.UserspaceDao;
@@ -12,12 +13,18 @@ import com.uas.sso.sso.backend.service.UserSpaceService;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.validation.constraints.NotNull;
 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.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
 /**
@@ -46,98 +53,107 @@ public class UserSpaceServiceImpl implements UserSpaceService {
     public Page<Userspace> showSpaceByPagination(Pageable page, Short validCode, String fromApp,
             String key, String keyword) {
 
-        return userspaceDao.findAll((root, query, builder) -> {
-            List<Predicate> predicates = new ArrayList<>();
+        return userspaceDao.findAll(new Specification<Userspace>() {
+            @Override
+            public Predicate toPredicate(Root<Userspace> root, CriteriaQuery<?> query,
+                    CriteriaBuilder builder) {
+                List<Predicate> predicates = new ArrayList<>();
 
-            if (!StringUtils.isEmpty(validCode)) {
-                Predicate predicate = builder.equal(root.get("validCode"), validCode);
-                predicates.add(predicate);
-            }
+                if (!StringUtils.isEmpty(validCode)) {
+                    Predicate predicate = builder.equal(root.get("validCode"), validCode);
+                    predicates.add(predicate);
+                }
 
-            if (!StringUtils.isEmpty(fromApp)) {
-                Predicate predicate = builder.equal(root.get("fromApp"), fromApp);
-                predicates.add(predicate);
-            }
+                if (!StringUtils.isEmpty(fromApp)) {
+                    Predicate predicate = builder.equal(root.get("fromApp"), fromApp);
+                    predicates.add(predicate);
+                }
 
-            // 搜索关键字过滤
-            if (!StringUtils.isEmpty(key) && !StringUtils.isEmpty(keyword)) {
-                Predicate predicate = builder.like(root.get(key), "%" + keyword + "%");
-                predicates.add(predicate);
-            }
+                // 搜索关键字过滤
+                if (!StringUtils.isEmpty(key) && !StringUtils.isEmpty(keyword)) {
+                    Predicate predicate = builder.like(root.get(key), "%" + keyword + "%");
+                    predicates.add(predicate);
+                }
 
-            predicates.removeAll(Collections.singletonList(null));
+                predicates.removeAll(Collections.singletonList(null));
 
-            Predicate[] array = new Predicate[predicates.size()];
-            predicates.toArray(array);
-            Predicate predicate = builder.and(array);
-            query.where(predicate);
-            return null;
+                Predicate[] array = new Predicate[predicates.size()];
+                predicates.toArray(array);
+                Predicate predicate = builder.and(array);
+                query.where(predicate);
+                return null;
+            }
         }, page);
     }
 
     @Override
-    public Boolean modifyUserInfo(UpdateSpaceInfo spaceInfo) {
+    public Userspace modifyUserSpaceInfo(UpdateSpaceInfo spaceInfo) {
         Userspace userspace = userspaceDao.findOne(spaceInfo.getSpaceUU());
         if (userspace == null) {
             throw new ValidationFailedException(String.format("UU%d对应企业不存在", spaceInfo.getSpaceUU()));
         }
 
-        if (!userspace.getSpaceName().equals(spaceInfo.getSpaceName())) {
-            Userspace existSpace = userspaceDao.findBySpaceName(spaceInfo.getSpaceName());
-            if (existSpace != null) {
-                throw new ValidationFailedException(String.format("企业%s已注册", spaceInfo.getSpaceName()));
-            }
-        }
-
-        // 避免清空营业执照因唯一性约束导致报错
         if (StringUtils.isEmpty(spaceInfo.getBusinessCode())) {
+            // 避免清空营业执照因唯一性约束导致报错
             spaceInfo.setBusinessCode(null);
-        } else {
-            if (!spaceInfo.getBusinessCode().equals(userspace.getBusinessCode())) {
-                Userspace existSpace = userspaceDao.findByBusinessCode(spaceInfo.getBusinessCode());
-                if (existSpace != null) {
-                    throw new ValidationFailedException(String.format("营业执照%s已认证", spaceInfo.getBusinessCode()));
-                }
-            }
         }
 
         userspace = spaceInfo.fillSpaceInfo(userspace);
 
-        userspaceDao.save(userspace);
-        return true;
+        return userspaceDao.save(userspace);
     }
 
     @Override
-    public Page<Userspace> showSpaceByPagination(Pageable page, String spaceName, String businessCode,
-            Short validCode) {
-        if (validCode == null) {
-            throw new ValidationFailedException("企业信息认证状态必须指定");
+    @Transactional(rollbackFor = RuntimeException.class)
+    public Userspace unbindUser(Long spaceUu, Long userUu) {
+        User user = assertUserExist(userUu);
+        Userspace space = assertSpaceExist(spaceUu);
+
+        if (!CollectionUtils.isEmpty(space.getUsers())) {
+            space.getUsers().remove(user);
         }
+        return userspaceDao.save(space);
+    }
 
-        return userspaceDao.findAll((root, query, builder) -> {
-            List<Predicate> predicates = new ArrayList<>();
+    @Override
+    @Transactional(rollbackFor = RuntimeException.class)
+    public Userspace changeAdmin(Long spaceUu, Long userUU) {
+        User admin = assertUserExist(userUU);
+        Userspace space = assertSpaceExist(spaceUu);
+
+        // 检验选定管理员用户是否添加到当前企业
+        List<User> userList = space.getUsers();
+        if (CollectionUtils.isEmpty(userList) || !userList.contains(admin)) {
+            throw new ValidationFailedException("企业管理员必须是当前企业用户");
+        }
 
-            // 根据企业认证状态进行过滤
-            predicates.add(builder.equal(root.get("validCode"), validCode));
+        // 更新管理员信息
+        space.setAdminUU(spaceUu);
+        space.setAdmin(admin);
+        return userspaceDao.save(space);
+    }
 
-            if (!StringUtils.isEmpty(spaceName)) {
-                Predicate predicate = builder.like(root.get("spaceName"), "%" + spaceName + "%");
-                predicates.add(predicate);
-            }
+    private User assertUserExist(Long userUU) {
+        User user = userDao.findOne(userUU);
+        if (user == null) {
+            throw new ValidationFailedException(String.format("用户[%d]不存在", userUU));
+        }
+        return user;
+    }
 
-            if (!StringUtils.isEmpty(businessCode)) {
-                Predicate predicate = builder.like(root.get("businessCode"), businessCode + "%");
-                predicates.add(predicate);
-            }
+    @Override
+    public Userspace authEnterpriseInfo(@NotNull Long spaceUu, @NotNull Boolean isPass,
+            String reason) {
+        Userspace space = assertSpaceExist(spaceUu);
 
-            predicates.removeAll(Collections.singletonList(null));
+        if (isPass) {
+            space.setValidCode((short) Status.AUTHENTICATED.getCode());
+        } else {
+            space.setValidCode((short) Status.NOT_PASSED.getCode());
+        }
 
-            Predicate[] array = new Predicate[predicates.size()];
-            predicates.toArray(array);
-            Predicate predicate = builder.and(array);
-            query.where(predicate);
-            return null;
-        }, page);
+        // TODO 业务不清楚
+        return space;
     }
 
     @Override
@@ -167,15 +183,12 @@ public class UserSpaceServiceImpl implements UserSpaceService {
 
     @Override
     @Transactional(rollbackFor = RuntimeException.class)
-    public void bindAppWithSpace(Long spaceUu, String appUid) {
+    public Userspace bindAppWithSpace(Long spaceUu, String appUid) {
         if (spaceUu == null || StringUtils.isEmpty(appUid)) {
             throw new ValidationFailedException("企业UU或应用Uid不能为空");
         }
 
-        Userspace space = userspaceDao.findOne(spaceUu);
-        if (space == null) {
-            throw new ValidationFailedException(String.format("UU %d 对应企业不存在", spaceUu));
-        }
+        Userspace space = assertSpaceExist(spaceUu);
 
         App app = appDao.findOne(appUid);
         if (app == null) {
@@ -186,7 +199,21 @@ public class UserSpaceServiceImpl implements UserSpaceService {
         if (!apps.contains(app)) {
             apps.add(app);
 
-            userspaceDao.save(space);
+            space = userspaceDao.save(space);
+        }
+        return space;
+    }
+
+    /**
+     * 业务逻辑校验-企业UU对应企业是否存在
+     *
+     * @param spaceUu   企业UU
+     */
+    private Userspace assertSpaceExist(@NotNull Long spaceUu) {
+        Userspace space = userspaceDao.findOne(spaceUu);
+        if (space == null) {
+            throw new ValidationFailedException(String.format("企业[%d]不存在", spaceUu));
         }
+        return space;
     }
 }

+ 4 - 0
sso-server/src/main/java/com/uas/sso/entity/Userspace.java

@@ -211,6 +211,10 @@ public class Userspace implements Serializable {
     public Userspace() {
     }
 
+    public Userspace(Long spaceUU) {
+        this.spaceUU = spaceUU;
+    }
+
     public Userspace(String spaceName) {
         this.spaceName = spaceName;
     }