Browse Source

企业用户加载方式调整,采用分页方式,处理数据过多导致加载缓慢的问题

hejq 8 years ago
parent
commit
59a0f727e4

+ 27 - 24
src/main/java/com/uas/platform/b2b/controller/UserController.java

@@ -1,24 +1,9 @@
 package com.uas.platform.b2b.controller;
 
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import com.uas.platform.b2b.model.*;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.ModelMap;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.PathVariable;
-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.ResponseBody;
-
+import com.uas.platform.b2b.model.Enterprise;
+import com.uas.platform.b2b.model.User;
+import com.uas.platform.b2b.model.UserInfo;
+import com.uas.platform.b2b.model.Vendor;
 import com.uas.platform.b2b.service.UserService;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.support.TokenService;
@@ -26,12 +11,27 @@ import com.uas.platform.b2b.support.UsageBufferedLogger;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.Constant;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import com.uas.platform.core.persistence.criteria.PredicateFactory;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.util.encry.Md5Utils;
 import com.uas.platform.core.util.mq.AuthCodeSoap;
 import com.uas.platform.core.util.mq.MessageLog;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
+import com.uas.search.b2b.model.SPage;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
 
-import static com.uas.platform.b2b.model.Token.UserType.user;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.util.List;
 
 /**
  * 企业请求
@@ -54,15 +54,18 @@ public class UserController {
 	private final static UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
 
 	/**
-	 * 查看全部用户信息
-	 * 
+	 * 分页查看全部用户信息
+	 *
+	 * @param params
+	 * @param keyword
 	 * @return
 	 */
 	@RequestMapping(method = RequestMethod.GET)
 	@ResponseBody
-	public List<User> getUsers() {
+	public SPage<User> getUsers(PageParams params, String keyword) {
 		logger.log("用户信息", "查看用户信息");
-		return userService.findAll();
+		PageInfo pageInfo = new PageInfo(params);
+		return userService.findByPageInfo(pageInfo, keyword);
 	}
 
 	/**

+ 65 - 5
src/main/java/com/uas/platform/b2b/dao/UserDao.java

@@ -1,9 +1,8 @@
 package com.uas.platform.b2b.dao;
 
-import java.util.List;
-
-import javax.persistence.QueryHint;
-
+import com.uas.platform.b2b.model.User;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Query;
@@ -11,7 +10,8 @@ import org.springframework.data.jpa.repository.QueryHints;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
-import com.uas.platform.b2b.model.User;
+import javax.persistence.QueryHint;
+import java.util.List;
 
 @Repository
 public interface UserDao extends JpaSpecificationExecutor<User>, JpaRepository<User, Long> {
@@ -58,6 +58,7 @@ public interface UserDao extends JpaSpecificationExecutor<User>, JpaRepository<U
 	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
 	@Query("select u from User u inner join u.enterprises as e where e.uu = :enUU and u.userTel = :userTel")
 	public List<User> findUserByUserTelAndEnUU(@Param("userTel") String userTel, @Param("enUU") Long enUU);
+
 	/**
 	 * 按企业ID和个人ID查找个人
 	 * 
@@ -89,4 +90,63 @@ public interface UserDao extends JpaSpecificationExecutor<User>, JpaRepository<U
 	@Query("select u from User u inner join u.roles as r where r.id = :roleId")
 	public List<User> findByRole(@Param("roleId") long roleId);
 
+	/**
+	 *  分页查询用户信息
+	 *
+	 * @param page
+	 * @return
+	 */
+	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
+	@Query(value = "select u from User u inner join u.enterprises as e where e.uu = :enUU",
+			countQuery = "select count(1) from User u inner join u.enterprises as e where e.uu = :enUU")
+	Page<User> findEnUUByAndPage(@Param("enUU")Long enUU, Pageable page);
+
+
+	/**
+	 * 分页按名字查询当前企业的用户信息
+	 *
+	 * @param userName
+	 * @param enUU
+	 * @return
+	 */
+	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
+	@Query(value = "select u from User u inner join u.enterprises as e where e.uu = :enUU and u.userName like %:userName%",
+			countQuery = "select count(1) from User u inner join u.enterprises as e where e.uu = :enUU and u.userName like %:userName%")
+	public Page<User> findUserByUserNameAndEnUU(@Param("userName") String userName, @Param("enUU") Long enUU, Pageable page);
+
+	/**
+	 * 分页按邮箱查询当前企业用户信息
+	 *
+	 * @param userEmail
+	 * @param enUU
+	 * @return
+	 */
+	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
+	@Query(value = "select u from User u inner join u.enterprises as e where e.uu = :enUU and u.userEmail = :userEmail",
+			countQuery = "select count(1) from User u inner join u.enterprises as e where e.uu = :enUU and u.userEmail = :userEmail")
+	public Page<User> findUserByUserEmailAndEnUU(@Param("userEmail") String userEmail, @Param("enUU") Long enUU, Pageable page);
+
+	/**
+	 * 按电话查询当前企业用户信息
+	 *
+	 * @param userTel
+	 * @param enUU
+	 * @return
+	 */
+	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
+	@Query(value = "select u from User u inner join u.enterprises as e where e.uu = :enUU and u.userTel = :userTel",
+			countQuery = "select count(1) from User u inner join u.enterprises as e where e.uu = :enUU and u.userTel = :userTel")
+	public Page<User> findUserByUserTelAndEnUU(@Param("userTel") String userTel, @Param("enUU") Long enUU, Pageable page);
+
+	/**
+	 * 按企业ID和个人ID查找个人
+	 *
+	 * @param enUU
+	 * @param userUU
+	 * @return
+	 */
+	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
+	@Query(value = "select u from User u inner join u.enterprises as e where e.uu = :enUU and u.userUU = :userUU",
+			countQuery = "select count(1) from User u inner join u.enterprises as e where e.uu = :enUU and u.userUU = :userUU")
+	public Page<User> findByEnUUAndUserUU(@Param("enUU") long enUU, @Param("userUU") long userUU, Pageable page);
 }

+ 13 - 7
src/main/java/com/uas/platform/b2b/service/UserService.java

@@ -1,14 +1,11 @@
 package com.uas.platform.b2b.service;
 
-import java.util.List;
+import com.uas.platform.b2b.model.*;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.search.b2b.model.SPage;
 
 import javax.servlet.http.HttpServletRequest;
-
-import com.uas.platform.b2b.model.Enterprise;
-import com.uas.platform.b2b.model.SearchFilter;
-import com.uas.platform.b2b.model.User;
-import com.uas.platform.b2b.model.UserInfo;
-import com.uas.platform.b2b.model.Vendor;
+import java.util.List;
 
 /**
  * @since 2016-9-26 21:18:35 账户中心统一管理;部分功能保留,但转移到v2目录
@@ -328,4 +325,13 @@ public interface UserService {
 
 
 	User updateUserRole(User user);
+
+	/**
+	 * 分页查询用户信息
+	 *
+	 * @param params
+	 * @param keyword
+	 * @return
+	 */
+	SPage<User> findByPageInfo(PageInfo pageInfo, String keyword);
 }

+ 67 - 30
src/main/java/com/uas/platform/b2b/service/impl/UserServiceImpl.java

@@ -1,38 +1,10 @@
 package com.uas.platform.b2b.service.impl;
 
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
-import org.springframework.util.StringUtils;
-
 import com.uas.account.entity.UserDetail;
 import com.uas.account.util.AccountUtils;
 import com.uas.message.mail.service.MailService;
-import com.uas.platform.b2b.dao.CommonDao;
-import com.uas.platform.b2b.dao.DistributeDao;
-import com.uas.platform.b2b.dao.EnterpriseDao;
-import com.uas.platform.b2b.dao.UserDao;
-import com.uas.platform.b2b.dao.VendorDao;
-import com.uas.platform.b2b.model.Distribute;
-import com.uas.platform.b2b.model.Enterprise;
-import com.uas.platform.b2b.model.Role;
-import com.uas.platform.b2b.model.SearchFilter;
-import com.uas.platform.b2b.model.User;
-import com.uas.platform.b2b.model.UserInfo;
-import com.uas.platform.b2b.model.Vendor;
+import com.uas.platform.b2b.dao.*;
+import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.service.UserService;
 import com.uas.platform.b2b.service.VendorService;
 import com.uas.platform.b2b.support.MessageConf;
@@ -42,9 +14,29 @@ import com.uas.platform.b2b.support.TokenService;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.exception.SystemException;
 import com.uas.platform.core.model.Constant;
+import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.Status;
+import com.uas.platform.core.persistence.criteria.CriterionExpression;
+import com.uas.platform.core.persistence.criteria.LogicalExpression;
+import com.uas.platform.core.persistence.criteria.SimpleExpression;
 import com.uas.platform.core.util.AgentUtils;
 import com.uas.platform.core.util.encry.Md5Utils;
+import com.uas.search.b2b.model.SPage;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.servlet.http.HttpServletRequest;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
  * @since 2016-9-26 21:18:35 账户中心统一管理;部分功能保留,但转移到v2目录
@@ -292,6 +284,51 @@ public class UserServiceImpl implements UserService {
 		return newUser;
 	}
 
+	@Override
+	public SPage<User> findByPageInfo(PageInfo pageInfo, String keyword) {
+		Page<User> users = getUsersByPage(pageInfo, keyword);
+		SPage<User> userInfos = new SPage<User>();
+		if (!CollectionUtils.isEmpty(users.getContent())) {
+			for (User user : users.getContent()) {
+				Set<Role> roles = user.getRoles();
+				Long enuu = SystemSession.getUser().getEnterprise().getUu();
+				if (!CollectionUtils.isEmpty(roles)) {
+					Iterator<Role> iterator = roles.iterator();
+					while (iterator.hasNext()) {
+						Role role = iterator.next();
+						if (!role.getEnUU().equals(enuu)) {
+							iterator.remove();
+						}
+					}
+				}
+			}
+		}
+		userInfos.setTotalPage(users.getTotalPages());
+		userInfos.setSize(users.getSize());
+		userInfos.setPage(users.getNumber());
+		userInfos.setTotalElement(users.getTotalElements());
+		userInfos.setContent(users.getContent());
+		return userInfos;
+	}
+
+	private Page<User> getUsersByPage(final PageInfo pageInfo, String keyword) {
+		Long enuu = SystemSession.getUser().getEnterprise().getUu();
+		if(StringUtils.hasText(keyword)) {
+			if (keyword.contains("@")) { // 按邮箱查找
+				return userDao.findUserByUserEmailAndEnUU(keyword.trim(), enuu, pageInfo);
+			} else if (keyword.matches(TEL_REGEXP)) { // 按手机号查找
+				return userDao.findUserByUserTelAndEnUU(keyword.trim(), enuu, pageInfo);
+			} else if (keyword.matches(UU_REGEXP)) { // 按UU号查找
+				return userDao.findByEnUUAndUserUU(enuu, Long.parseLong(keyword.trim()), pageInfo);
+			} else if (!keyword.contains("@") && (keyword.matches(CHINESE_REGEXP) || keyword.matches(ENGLISH_REGEXP))) {// 按名字查找
+				return userDao.findUserByUserNameAndEnUU(keyword.trim(), enuu, pageInfo);
+			}
+		} else {
+			return userDao.findEnUUByAndPage(enuu, pageInfo);
+		}
+		return null;
+	}
+
 
 	@Override
 	public User updatePassword(User user, String password, String newPassword) {

+ 4 - 0
src/main/webapp/resources/js/common/services.js

@@ -299,6 +299,10 @@ define(['angular', 'toaster', 'big'], function(angular, big) {
         });
     }]).factory('AccountUser', ['$resource', function($resource) {
         return $resource('account/user/:uu', {}, {
+            getAll: {
+                url: 'account/user',
+                method: 'GET'
+            },
             findUsers: {
                 url: 'account/user/customer/:uu',
                 method: 'POST',

+ 28 - 46
src/main/webapp/resources/js/index/app.js

@@ -10789,6 +10789,7 @@
             $scope.loading = false;
             $scope.user = data;
         });
+
         var users = [];
 
         var getMangagerInfo = function() {
@@ -10811,58 +10812,39 @@
             total: 0,
             counts: [15, 25, 50, 100],
             getData: function ($defer, params) {
-                var orderedData = params.sorting ? $filter('orderBy')(users, params.orderBy()) : users;
-                orderedData = params.filter ? $filter('filter')(orderedData, params.filter()) : orderedData;
-                $scope.users = orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count());
-                angular.forEach($scope.users, function (user) {
-                    AccountEnterprise.get({}, function (data) {
-                        $scope.loading = false;
-                        $scope.enterprise = data;
-                    });
-                });
-                params.total(orderedData.length);
-                $defer.resolve($scope.users);
-            }
-        });
-        var loadUsers = function () {
-        	$scope.loading = true;
-        	if($scope.searchMthod) {
-        		AccountUser.findUsersByKeyword({keyword: $scope.keyword}, {}, function(data) {
-        			 users = data;
-        			 if(users.length > 0) {
-        				 angular.forEach(users, function (user) {  // 从验证中获取到的用户信息,不包含身份证号。在这里赋值
-                             if (user.userTel === $scope.user.userTel && user.userUU === $scope.user.userUU) {
-                                 $scope.user.userIdcode = user.userIdcode;
-                             }
-                         });
-        			 }
-        			 $scope.tableParams.reload();
-                     $scope.loading = false;
-                });
-        	} else {
-        		AccountUser.query({}, function (data) {
-                    users = data;
-                    angular.forEach(users, function (user) {  // 从验证中获取到的用户信息,不包含身份证号。在这里赋值
-                        if (user.userTel === $scope.user.userTel && user.userUU === $scope.user.userUU) {
-                            $scope.user.userIdcode = user.userIdcode;
+                $scope.loading = true;
+                var pageParams = params.url();
+                pageParams.keyword = $scope.keyword;
+                $scope.tip = $scope.keyword;
+                AccountUser.getAll.call(null, BaseService.parseParams(pageParams), function (page) {
+                    $scope.loading = false;
+                    if (page) {
+                        params.total(page.totalElement);
+                        $defer.resolve(page.content);
+                        users = page.content;
+                        if(users.length > 0) {
+                            if(users.length > 0) {
+                                angular.forEach(users, function (user) {  // 从验证中获取到的用户信息,不包含身份证号。在这里赋值
+                                    if (user.userTel === $scope.user.userTel && user.userUU === $scope.user.userUU) {
+                                        $scope.user.userIdcode = user.userIdcode;
+                                    }
+                                });
+                            }
                         }
-                    });
-                    $scope.tableParams.reload();
+                    }
+                }, function (response) {
                     $scope.loading = false;
+                    toaster.pop('error', '数据加载失败', response.data);
                 });
-        	}
-        };
-        loadUsers();
+            }
+        });
         
         $scope.onSearch = function(keyword) {
-        	if(keyword != null && keyword != '') {
-        		$scope.searchMthod = true;
-        		$scope.keyword = keyword;
-        	} else {
-        		$scope.searchMthod = false;
-        	}
-        	 loadUsers();
+            $scope.keyword = keyword;
+            $scope.tableParams.reload();
+            $scope.tableParams.page(1);
         }
+
         $scope.saveUser = function () {
             $scope.loading = true;
             AccountUser.update({}, $scope.user, function (data) {