Commit 7aab6542 authored by minminyan's avatar minminyan

修改searchUserDetailList,支持返回用户的状态,并且限制前端必须至少传一个非空的条件,防止全表返回

parent d3956a85
...@@ -6,6 +6,7 @@ import cn.quantgroup.xyqb.model.*; ...@@ -6,6 +6,7 @@ import cn.quantgroup.xyqb.model.*;
import cn.quantgroup.xyqb.service.auth.IIdCardService; import cn.quantgroup.xyqb.service.auth.IIdCardService;
import cn.quantgroup.xyqb.service.session.ISessionService; import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.user.*; import cn.quantgroup.xyqb.service.user.*;
import cn.quantgroup.xyqb.service.user.vo.UserDetailVO;
import cn.quantgroup.xyqb.service.wechat.IWechatService; import cn.quantgroup.xyqb.service.wechat.IWechatService;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
...@@ -329,7 +330,10 @@ public class InnerController { ...@@ -329,7 +330,10 @@ public class InnerController {
@RequestMapping("/user_detail/search_list") @RequestMapping("/user_detail/search_list")
public JsonResult searchUserDetailList(String name, String phoneNo, String idNo) { public JsonResult searchUserDetailList(String name, String phoneNo, String idNo) {
List<UserDetail> userDetails = userDetailService.searchUserDetailList(name, phoneNo, idNo); if (StringUtils.isBlank(name) && StringUtils.isBlank(phoneNo) && StringUtils.isBlank(idNo)) {
return JsonResult.buildErrorStateResult("至少必须满足一个条件不为空", null);
}
List<UserDetailVO> userDetails = userDetailService.searchUserDetailList(name, phoneNo, idNo);
return JsonResult.buildSuccessResult("success", userDetails); return JsonResult.buildSuccessResult("success", userDetails);
} }
......
...@@ -2,11 +2,12 @@ package cn.quantgroup.xyqb.repository; ...@@ -2,11 +2,12 @@ package cn.quantgroup.xyqb.repository;
import cn.quantgroup.xyqb.entity.User; import cn.quantgroup.xyqb.entity.User;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/** /**
* Created by Miraculous on 15/7/4. * Created by Miraculous on 15/7/4.
*/ */
public interface IUserRepository extends JpaRepository<User, Long> { public interface IUserRepository extends JpaRepository<User, Long> ,JpaSpecificationExecutor<User>{
User findByPhoneNo(String phoneNo); User findByPhoneNo(String phoneNo);
......
package cn.quantgroup.xyqb.service.user; package cn.quantgroup.xyqb.service.user;
import cn.quantgroup.xyqb.entity.UserDetail; import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.service.user.vo.UserDetailVO;
import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.DataIntegrityViolationException;
import java.util.List; import java.util.List;
...@@ -9,13 +10,13 @@ import java.util.List; ...@@ -9,13 +10,13 @@ import java.util.List;
* Created by 11 on 2016/12/29. * Created by 11 on 2016/12/29.
*/ */
public interface IUserDetailService { public interface IUserDetailService {
UserDetail findByUserId(Long userId); UserDetail findByUserId(Long userId);
UserDetail saveUserDetail(UserDetail userDetail) throws DataIntegrityViolationException; UserDetail saveUserDetail(UserDetail userDetail) throws DataIntegrityViolationException;
UserDetail findByPhoneNo(String phoneNo); UserDetail findByPhoneNo(String phoneNo);
void updateUserQQ(Long userId, String qq); void updateUserQQ(Long userId, String qq);
List<UserDetail> searchUserDetailList(String name, String phoneNo, String idNo); List<UserDetailVO> searchUserDetailList(String name, String phoneNo, String idNo);
} }
package cn.quantgroup.xyqb.service.user.impl; package cn.quantgroup.xyqb.service.user.impl;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail; import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.repository.IUserDetailRepository; import cn.quantgroup.xyqb.repository.IUserDetailRepository;
import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.user.IUserDetailService; import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.vo.UserDetailVO;
import com.google.common.collect.Maps;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.persistence.criteria.*; import javax.persistence.criteria.*;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* Created by 11 on 2016/12/29. * Created by 11 on 2016/12/29.
...@@ -18,53 +25,77 @@ import java.util.List; ...@@ -18,53 +25,77 @@ import java.util.List;
@Service @Service
public class UserDetailServiceImpl implements IUserDetailService { public class UserDetailServiceImpl implements IUserDetailService {
@Autowired @Autowired
private IUserDetailRepository userDetailRepository; private IUserDetailRepository userDetailRepository;
@Autowired
private IUserRepository userRepository;
@Override @Override
public UserDetail findByUserId(Long userId) { public UserDetail findByUserId(Long userId) {
return userDetailRepository.findByUserId(userId); return userDetailRepository.findByUserId(userId);
} }
@Override @Override
public UserDetail saveUserDetail(UserDetail userDetail) throws DataIntegrityViolationException { public UserDetail saveUserDetail(UserDetail userDetail) throws DataIntegrityViolationException {
return userDetailRepository.save(userDetail); return userDetailRepository.save(userDetail);
} }
@Override @Override
public UserDetail findByPhoneNo(String phoneNo) { public UserDetail findByPhoneNo(String phoneNo) {
return userDetailRepository.findByPhoneNo(phoneNo); return userDetailRepository.findByPhoneNo(phoneNo);
} }
@Override @Override
public void updateUserQQ(Long userId, String qq) { public void updateUserQQ(Long userId, String qq) {
userDetailRepository.updateUserQQ(qq, userId); userDetailRepository.updateUserQQ(qq, userId);
} }
@Override @Override
public List<UserDetail> searchUserDetailList(String name, String phoneNo, String idNo) { public List<UserDetailVO> searchUserDetailList(String name, String phoneNo, String idNo) {
return userDetailRepository.findAll(getSpecification(name, phoneNo, idNo)); // return
List<UserDetail> details = userDetailRepository.findAll(getSpecification(name, phoneNo, idNo));
Map<Long, User> userMap = Maps.newHashMap();
if (!CollectionUtils.isEmpty(details)) {
List<Long> userIds = details.stream().map(d -> d.getUserId()).collect(Collectors.toList());
List<User> users = userRepository.findAll((root, query, cb) -> {
query.where(root.get("id").in(userIds));
return query.getRestriction();
});
userMap = users.stream().collect(Collectors.toMap(User::getId, o -> o));
} }
Map<Long, User> finalUserMap = userMap;
List<UserDetailVO> userDetailVOS = details.stream().map(o -> fromUserDetailAndUserMap(o, finalUserMap)).collect(Collectors.toList());
return userDetailVOS;
}
private Specification<UserDetail> getSpecification(String name, String phoneNo, String idNo) { private UserDetailVO fromUserDetailAndUserMap(UserDetail userDetail, Map<Long, User> userMap) {
Specification<UserDetail> specification = new Specification<UserDetail>() { UserDetailVO userDetailVO = UserDetailVO.fromUserDetail(userDetail);
@Override User user = userMap.get(userDetail.getUserId());
public Predicate toPredicate(Root<UserDetail> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) { if (user != null) {
if (!StringUtils.isEmpty(name)) { userDetailVO.setEnable(user.getEnable());
Path<String> namePath = root.get("name");
criteriaQuery.where(criteriaBuilder.equal(namePath, name));
}
if (!StringUtils.isEmpty(phoneNo)) {
Path<String> phonePath = root.get("phoneNo");
criteriaQuery.where(criteriaBuilder.equal(phonePath, phoneNo));
}
if (!StringUtils.isEmpty(idNo)) {
Path<String> idNoPath = root.get("idNo");
criteriaQuery.where(criteriaBuilder.equal(idNoPath, idNo));
}
return null;
}
};
return specification;
} }
return userDetailVO;
}
private Specification<UserDetail> getSpecification(String name, String phoneNo, String idNo) {
Specification<UserDetail> specification = new Specification<UserDetail>() {
@Override
public Predicate toPredicate(Root<UserDetail> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
if (!StringUtils.isEmpty(name)) {
Path<String> namePath = root.get("name");
criteriaQuery.where(criteriaBuilder.equal(namePath, name));
}
if (!StringUtils.isEmpty(phoneNo)) {
Path<String> phonePath = root.get("phoneNo");
criteriaQuery.where(criteriaBuilder.equal(phonePath, phoneNo));
}
if (!StringUtils.isEmpty(idNo)) {
Path<String> idNoPath = root.get("idNo");
criteriaQuery.where(criteriaBuilder.equal(idNoPath, idNo));
}
return null;
}
};
return specification;
}
} }
package cn.quantgroup.xyqb.service.user.vo;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.model.Gender;
import cn.quantgroup.xyqb.model.IdType;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
public class UserDetailVO {
private Long id;
private Long userId;
private String phoneNo;
private String name;
private String idNo;
private IdType idType;
private Boolean isAuthenticated = false;
private Gender gender;
private String email;
private String qq;
private Boolean enable;
private Long createdAt;
private Long updatedAt;
public static UserDetailVO fromUserDetail(UserDetail userDetail) {
UserDetailVO userDetailVO = new UserDetailVO();
userDetailVO.id = userDetail.getId();
userDetailVO.userId = userDetail.getUserId();
userDetailVO.phoneNo = userDetail.getPhoneNo();
userDetailVO.name = userDetail.getName();
userDetailVO.idNo = userDetail.getIdNo();
userDetailVO.idType = userDetail.getIdType();
userDetailVO.isAuthenticated = userDetail.getIsAuthenticated();
userDetailVO.gender = userDetail.getGender();
userDetailVO.email = userDetail.getEmail();
userDetailVO.qq = userDetail.getQq();
if (userDetail.getCreatedAt() != null) {
userDetailVO.createdAt = userDetail.getCreatedAt().getTime();
}
if (userDetail.getUpdatedAt() != null) {
userDetailVO.updatedAt = userDetail.getUpdatedAt().getTime();
}
return userDetailVO;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment