Commit 39d72340 authored by 王亮's avatar 王亮

union query user.

parent a86ff101
package cn.quantgroup.xyqb.controller.api.v2;
import cn.quantgroup.xyqb.controller.req.v2.BatchInfoReq;
import cn.quantgroup.xyqb.controller.req.v2.UserInfoReq;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.exception.BizException;
import cn.quantgroup.xyqb.exception.BizExceptionEnum;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/api/v2/user")
public class UserApiV2Controller {
private final IUserRepository userRepository;
private final IWechatService wechatService;
public UserApiV2Controller(IUserRepository userRepository, IWechatService wechatService) {
this.userRepository = userRepository;
this.wechatService = wechatService;
}
/**
* 查询用户信息
*
* @param userInfoReq 查询条件
* @return JsonResult<User>
* @see <a href="http://yapi.quantgroups.com/project/17/interface/api/65724">查询用户信息</a>
*/
@PostMapping("info")
public JsonResult<User> info(@RequestBody UserInfoReq userInfoReq) {
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSession();
User user = null;
//1、校验
if (userInfoReq.getUserId() == null && StringUtils.isEmpty(userInfoReq.getUuid())
&& StringUtils.isEmpty(userInfoReq.getPhoneNo()) && (StringUtils.isEmpty(userInfoReq.getAppId()) && StringUtils.isEmpty(userInfoReq.getOpenId()))
&& (StringUtils.isEmpty(userInfoReq.getAppId()) && StringUtils.isEmpty(userInfoReq.getUnionId()))) {
throw new BizException(BizExceptionEnum.ERROR_PARAM);
}
//2、查询
if (userInfoReq.getUserId() != null) {
user = userRepository.findByIdAndTenantId(userInfoReq.getUserId(), sessionStruct.getTenantId());
}
if( StringUtils.isNotEmpty(userInfoReq.getUuid())){
user = userRepository.findByUuidAndTenantId(userInfoReq.getUuid(), sessionStruct.getTenantId());
}
if(StringUtils.isEmpty(userInfoReq.getPhoneNo())){
user = userRepository.findByPhoneNoAndTenantId(userInfoReq.getPhoneNo(), sessionStruct.getTenantId());
}
if(StringUtils.isNotEmpty(userInfoReq.getAppId()) && StringUtils.isNotEmpty(userInfoReq.getOpenId())){
WechatUserInfo wechatUserInfo = wechatService.findWechatUserInfoFromDb(userInfoReq.getOpenId(), userInfoReq.getAppId(), sessionStruct.getTenantId());
if (wechatUserInfo == null || wechatUserInfo.getUserId() == null) {
throw new BizException(BizExceptionEnum.UN_EXIT_USER);
}
user = userRepository.findByIdAndTenantId(wechatUserInfo.getUserId(), sessionStruct.getTenantId());
}
if(StringUtils.isNotEmpty(userInfoReq.getAppId()) && StringUtils.isNotEmpty(userInfoReq.getUuid())){
WechatUserInfo wechatUserInfo = wechatService.findByUnionIdAndAppIdAndTenantId(userInfoReq.getUnionId(), userInfoReq.getAppId(), sessionStruct.getTenantId());
if (wechatUserInfo == null || wechatUserInfo.getUserId() == null) {
throw new BizException(BizExceptionEnum.UN_EXIT_USER);
}
user = userRepository.findByIdAndTenantId(wechatUserInfo.getUserId(), sessionStruct.getTenantId());
}
//3、异常处理
if (user == null) {
throw new BizException(BizExceptionEnum.UN_EXIT_USER);
}
return JsonResult.buildSuccessResultGeneric(user);
}
/**
* 批量查询用户信息
*
* @param batchInfoReq 批量查询条件
* @return JsonResult<List < User>>
* @see <a href="http://yapi.quantgroups.com/project/17/interface/api/65734">批量查询用户信息</a>
*/
@PostMapping("batchInfo")
public JsonResult<List<User>> batchInfo(@RequestBody BatchInfoReq batchInfoReq) {
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSession();
List<User> userList = null;
//1、校验
if (CollectionUtils.isEmpty(batchInfoReq.getUserids())
&& CollectionUtils.isEmpty(batchInfoReq.getUuids())
&& CollectionUtils.isEmpty(batchInfoReq.getPhoneNos())
&& (StringUtils.isEmpty(batchInfoReq.getAppId()) && CollectionUtils.isEmpty(batchInfoReq.getOpenIds()))
&& (StringUtils.isEmpty(batchInfoReq.getAppId()) && CollectionUtils.isEmpty(batchInfoReq.getUnionIds()))) {
throw new BizException(BizExceptionEnum.ERROR_PARAM);
}
//2、查询
if (CollectionUtils.isNotEmpty(batchInfoReq.getUserids())) {
userList = userRepository.findByIdInAndTenantId(batchInfoReq.getUserids(), sessionStruct.getTenantId());
}
if( CollectionUtils.isNotEmpty(batchInfoReq.getUuids())){
userList = userRepository.findByUuidInAndTenantId(batchInfoReq.getUuids(), sessionStruct.getTenantId());
}
if(CollectionUtils.isNotEmpty(batchInfoReq.getPhoneNos())){
userList = userRepository.findByPhoneNoInAndTenantId(batchInfoReq.getPhoneNos(), sessionStruct.getTenantId());
}
if(StringUtils.isNotEmpty(batchInfoReq.getAppId()) && CollectionUtils.isNotEmpty(batchInfoReq.getOpenIds())){
List<WechatUserInfo> wechatUserInfo = wechatService.findWechatUserInfoFromDb(batchInfoReq.getOpenIds(), batchInfoReq.getAppId(), sessionStruct.getTenantId());
List<Long> userIds = wechatUserInfo.stream().map(WechatUserInfo::getUserId).collect(Collectors.toList());;
if (CollectionUtils.isEmpty(wechatUserInfo) || CollectionUtils.isEmpty(userIds)) {
throw new BizException(BizExceptionEnum.UN_EXIT_USER);
}
userList = userRepository.findByIdInAndTenantId(userIds, sessionStruct.getTenantId());
}
if(StringUtils.isNotEmpty(batchInfoReq.getAppId()) && CollectionUtils.isNotEmpty(batchInfoReq.getUuids())){
List<WechatUserInfo> wechatUserInfo = wechatService.findUuidsAndOpenIdAndTenantId(batchInfoReq.getOpenIds(), batchInfoReq.getAppId(), sessionStruct.getTenantId());
List<Long> userIds = wechatUserInfo.stream().map(WechatUserInfo::getUserId).collect(Collectors.toList());;
if (CollectionUtils.isEmpty(wechatUserInfo) || CollectionUtils.isEmpty(userIds)) {
throw new BizException(BizExceptionEnum.UN_EXIT_USER);
}
userList = userRepository.findByIdInAndTenantId(userIds, sessionStruct.getTenantId());
}
//3、异常处理
if (CollectionUtils.isEmpty(userList)) {
throw new BizException(BizExceptionEnum.UN_EXIT_USER);
}
return JsonResult.buildSuccessResultGeneric(userList);
}
}
package cn.quantgroup.xyqb.controller.req.v2;
import lombok.Data;
import lombok.Getter;
import java.util.List;
/**
* 每组有且仅能有一组userId、phoneNo、uuid、openId和appId、unionId和appId
*/
@Data
public class BatchInfoReq {
/**
* 用户id
*/
private List<Long> userids;
/**
* 手机号码
*/
private List<String> phoneNos;
/**
* 用户uuid
*/
private List<String> uuids;
/**
* 微信openId
*/
private List<String> openIds;
/**
* 微信unionId
*/
private List<String> unionIds;
/**
* 微信appid
*/
private String appId;
}
package cn.quantgroup.xyqb.controller.req.v2;
import lombok.Data;
/**
* 每组有且仅能有一组userId、phoneNo、uuid、openId和appId、unionId和appId
*/
@Data
public class UserInfoReq {
/**
* 用户id
*/
private Long userId;
/**
* 手机号码
*/
private String phoneNo;
/**
* 用户uuid
*/
private String uuid;
/**
* 微信openId
*/
private String openId;
/**
* 微信unionId
*/
private String unionId;
/**
* 微信appid
*/
private String appId;
}
......@@ -30,8 +30,10 @@ public enum BizExceptionEnum {
UN_EXIT_VERIFY_TYPE("2003","不存在的验证码方式"),
UN_EXIT_VERIFY_CODE("2004","验证模式下验证码参数不能为空"),
EX_GET_VERIFY_CODE("2005","获取验证码失败"),
UN_EXIT_GEETEST_LOG("2006","极验记录不存在");
UN_EXIT_GEETEST_LOG("2006","极验记录不存在"),
//通用记录
ERROR_PARAM("4000","参数不错误");
private final String businessCode;
private final String msg;
......
......@@ -16,6 +16,7 @@ import java.util.List;
public interface IUserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {
User findByPhoneNoAndTenantId(String phoneNo,Integer tenantId);
List<User> findByPhoneNoInAndTenantId(List<String> phoneNo,Integer tenantId);
User findByEncryptedPhoneNoAndTenantId(String phoneNo,Integer tenantId);
......
......@@ -17,6 +17,9 @@ import static org.springframework.transaction.annotation.Propagation.MANDATORY;
*/
public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Long> {
WechatUserInfo findByOpenIdAndAppNameAndAppIdAndTenantId(String openId, String appName,String appId,Integer tenantId);
List<WechatUserInfo> findByOpenIdInAndAppIdAndTenantId(List<String> openId,String appId,Integer tenantId);
List<WechatUserInfo> findByUuidInAndAppIdAndTenantId(List<String> uuids,String appId,Integer tenantId);
WechatUserInfo findByUnionIdAndAppIdAndTenantId(String openId,String appId,Integer tenantId);
WechatUserInfo findByOpenIdAndAppIdAndTenantId(String openId,String appId,Integer tenantId);
......
......@@ -66,7 +66,7 @@ public class InterLoginStrategy implements LoginStrategy {
throw new BizException(BizExceptionEnum.UN_EXIT_USER);
}
user = userService.findById(wechatUserInfo.getUserId(),sessionStruct.getTenantId());
user = userService.findById(wechatUserInfo.getUserId(), sessionStruct.getTenantId());
}
if (StringUtils.isNotEmpty(interLoginParam.getAppId()) && StringUtils.isNotEmpty(interLoginParam.getUnionId())) {
......@@ -75,10 +75,10 @@ public class InterLoginStrategy implements LoginStrategy {
throw new BizException(BizExceptionEnum.UN_EXIT_USER);
}
user = userService.findById(wechatUserInfo.getUserId(),sessionStruct.getTenantId());
user = userService.findById(wechatUserInfo.getUserId(), sessionStruct.getTenantId());
}
if(user == null){
if (user == null) {
throw new BizException(BizExceptionEnum.UN_EXIT_USER);
}
......@@ -110,8 +110,8 @@ public class InterLoginStrategy implements LoginStrategy {
@Override
public BaseLoginParam checkParam(LoginReq loginReq) {
InterLoginParam param = loginReq.getData().toJavaObject(InterLoginParam.class);
if (param.getUserId()==null || StringUtils.isEmpty(param.getUuid())
|| (StringUtils.isEmpty(param.getOpenId()) && StringUtils.isEmpty(param.getAppId())) || (StringUtils.isEmpty(param.getUnionId()) && StringUtils.isEmpty(param.getAppId()))) {
if (param.getUserId() == null && StringUtils.isEmpty(param.getUuid())
&& (StringUtils.isEmpty(param.getOpenId()) && StringUtils.isEmpty(param.getAppId())) && (StringUtils.isEmpty(param.getUnionId()) && StringUtils.isEmpty(param.getAppId()))) {
throw new BizException(BizExceptionEnum.ERROR_LOGIN_PARAM);
}
return param;
......
......@@ -14,6 +14,8 @@ public interface IWechatService {
WechatUserInfo getWechatUserInfoFromWechatServer(String token, String openId,String appId,Integer tenantId);
WechatUserInfo findWechatUserInfoFromDb(String openId,String appId,Integer tenantId);
List<WechatUserInfo> findWechatUserInfoFromDb(List<String> openId,String appId,Integer tenantId);
List<WechatUserInfo> findUuidsAndOpenIdAndTenantId(List<String> uuids,String appId,Integer tenantId);
WechatUserInfo findByUnionIdAndAppIdAndTenantId(String unionId,String appId,Integer tenantId);
......
......@@ -3,6 +3,7 @@ package cn.quantgroup.xyqb.service.wechat.impl;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.exception.WechatRelateUserException;
import cn.quantgroup.xyqb.model.AppUserParam;
import cn.quantgroup.xyqb.model.webchat.AccessTokenResponse;
import cn.quantgroup.xyqb.model.webchat.WechatEventMsg;
import cn.quantgroup.xyqb.repository.IWeChatUserRepository;
......@@ -116,6 +117,17 @@ public class WechatServiceImpl implements IWechatService {
return weChatUserRepository.findByOpenIdAndAppNameAndAppIdAndTenantId(openId, "xyqb",appId,tenantId);
}
@Override
public List<WechatUserInfo> findWechatUserInfoFromDb(List<String> openId,String appId,Integer tenantId){
return weChatUserRepository.findByOpenIdInAndAppIdAndTenantId(openId,appId,tenantId);
}
public List<WechatUserInfo> findUuidsAndOpenIdAndTenantId(List<String> uuids, String appId, Integer tenantId){
return weChatUserRepository.findByUuidInAndAppIdAndTenantId(uuids,appId,tenantId);
}
@Override
public WechatUserInfo findByUnionIdAndAppIdAndTenantId(String openId,String appId,Integer tenantId) {
return weChatUserRepository.findByUnionIdAndAppIdAndTenantId(openId,appId,tenantId);
......
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